@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,508 @@
1
+ function daysFromCivil(year, month, day) {
2
+ const y = year - (month <= 2 ? 1 : 0);
3
+ const era = Math.floor(y / 400);
4
+ const yoe = y - era * 400;
5
+ const doy = Math.floor((153 * (month + (month > 2 ? -3 : 9)) + 2) / 5) + day - 1;
6
+ const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy;
7
+ return era * 146097 + doe - 719468;
8
+ }
9
+ function yearFromDays(days) {
10
+ const z = days + 719468;
11
+ const era = Math.floor(z / 146097);
12
+ const doe = z - era * 146097;
13
+ const yoe = Math.floor((doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365);
14
+ const y = yoe + era * 400;
15
+ const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100));
16
+ const mp = Math.floor((5 * doy + 2) / 153);
17
+ const m = mp + (mp < 10 ? 3 : -9);
18
+ return y + (m <= 2 ? 1 : 0);
19
+ }
20
+ function isoWeekday(year, month, day) {
21
+ const z = daysFromCivil(year, month, day);
22
+ return ((z + 3) % 7 + 7) % 7;
23
+ }
24
+ function isoWeek(year, month, day) {
25
+ const z = daysFromCivil(year, month, day);
26
+ const dow = ((z + 3) % 7 + 7) % 7;
27
+ const thursday = z + 3 - dow;
28
+ const isoYear = yearFromDays(thursday);
29
+ const jan1 = daysFromCivil(isoYear, 1, 1);
30
+ return Math.floor((thursday - jan1) / 7) + 1;
31
+ }
32
+ function isoWeekYear(year, month, day) {
33
+ const z = daysFromCivil(year, month, day);
34
+ const dow = ((z + 3) % 7 + 7) % 7;
35
+ return yearFromDays(z + 3 - dow);
36
+ }
37
+ const CH_DASH = 45;
38
+ const CH_T_UPPER = 84;
39
+ const CH_T_LOWER = 116;
40
+ const CH_SPACE = 32;
41
+ const CH_COLON = 58;
42
+ const CH_Z_UPPER = 90;
43
+ const CH_Z_LOWER = 122;
44
+ const CH_PLUS = 43;
45
+ const CH_ZERO = 48;
46
+ function digits2(s, i) {
47
+ const a = s.charCodeAt(i) - CH_ZERO;
48
+ const b = s.charCodeAt(i + 1) - CH_ZERO;
49
+ if (a < 0 || a > 9 || b < 0 || b > 9) return -1;
50
+ return a * 10 + b;
51
+ }
52
+ function digits4(s, i) {
53
+ const a = s.charCodeAt(i) - CH_ZERO;
54
+ const b = s.charCodeAt(i + 1) - CH_ZERO;
55
+ const c = s.charCodeAt(i + 2) - CH_ZERO;
56
+ const d = s.charCodeAt(i + 3) - CH_ZERO;
57
+ if (a < 0 || a > 9 || b < 0 || b > 9 || c < 0 || c > 9 || d < 0 || d > 9) return -1;
58
+ return a * 1e3 + b * 100 + c * 10 + d;
59
+ }
60
+ function isZeroTimeRun(s, from, to) {
61
+ for (let i = from; i < to; i++) {
62
+ const c = s.charCodeAt(i);
63
+ if (c !== CH_ZERO && c !== CH_COLON && c !== 46) return false;
64
+ }
65
+ return true;
66
+ }
67
+ function partsFromDate(d, wasInstant) {
68
+ const hours = d.getHours();
69
+ const minutes = d.getMinutes();
70
+ return {
71
+ year: d.getFullYear(),
72
+ month: d.getMonth() + 1,
73
+ day: d.getDate(),
74
+ hours,
75
+ minutes,
76
+ hasTime: true,
77
+ isMidnight: hours === 0 && minutes === 0,
78
+ wasInstant
79
+ };
80
+ }
81
+ function parseTimestamp(value) {
82
+ if (value == null || value === "") return null;
83
+ if (typeof value === "number") {
84
+ if (!Number.isFinite(value)) return null;
85
+ return partsFromDate(new Date(value), true);
86
+ }
87
+ if (typeof value === "object") {
88
+ const t = value.getTime?.();
89
+ if (typeof t !== "number" || Number.isNaN(t)) return null;
90
+ return partsFromDate(value, true);
91
+ }
92
+ if (typeof value !== "string") return null;
93
+ const raw = value;
94
+ const len = raw.length;
95
+ if (len < 10) return null;
96
+ if (raw.charCodeAt(4) !== CH_DASH || raw.charCodeAt(7) !== CH_DASH) return null;
97
+ const year = digits4(raw, 0);
98
+ const month = digits2(raw, 5);
99
+ const day = digits2(raw, 8);
100
+ if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31) return null;
101
+ if (len === 10) {
102
+ return { year, month, day, hours: 0, minutes: 0, hasTime: false, isMidnight: false, wasInstant: false };
103
+ }
104
+ const sep = raw.charCodeAt(10);
105
+ if (sep !== CH_T_UPPER && sep !== CH_T_LOWER && sep !== CH_SPACE) return null;
106
+ if (len < 16 || raw.charCodeAt(13) !== CH_COLON) return null;
107
+ const hours = digits2(raw, 11);
108
+ const minutes = digits2(raw, 14);
109
+ if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;
110
+ let zoneAt = -1;
111
+ let isUtc = false;
112
+ for (let i = 16; i < len; i++) {
113
+ const c = raw.charCodeAt(i);
114
+ if (c === CH_Z_UPPER || c === CH_Z_LOWER) {
115
+ isUtc = true;
116
+ zoneAt = i;
117
+ break;
118
+ }
119
+ if (c === CH_PLUS || c === CH_DASH) {
120
+ zoneAt = i;
121
+ break;
122
+ }
123
+ }
124
+ if (isUtc && hours === 0 && minutes === 0 && isZeroTimeRun(raw, 16, zoneAt)) {
125
+ return { year, month, day, hours: 0, minutes: 0, hasTime: false, isMidnight: false, wasInstant: false };
126
+ }
127
+ if (zoneAt >= 0) {
128
+ const d = new Date(raw);
129
+ if (Number.isNaN(d.getTime())) return null;
130
+ return partsFromDate(d, true);
131
+ }
132
+ return {
133
+ year,
134
+ month,
135
+ day,
136
+ hours,
137
+ minutes,
138
+ hasTime: true,
139
+ isMidnight: hours === 0 && minutes === 0,
140
+ wasInstant: false
141
+ };
142
+ }
143
+ const PROBE = new Date(Date.UTC(2026, 11, 31, 12, 0, 0));
144
+ const localePatterns = /* @__PURE__ */ new Map();
145
+ const FALLBACK_PATTERN = { dayFirst: true, separator: "." };
146
+ function localePattern(locale) {
147
+ const hit = localePatterns.get(locale);
148
+ if (hit) return hit;
149
+ let pattern = FALLBACK_PATTERN;
150
+ try {
151
+ const parts = new Intl.DateTimeFormat(locale, { day: "2-digit", month: "2-digit" }).formatToParts(PROBE);
152
+ let dayIndex = -1;
153
+ let monthIndex = -1;
154
+ for (let i = 0; i < parts.length; i++) {
155
+ if (parts[i].type === "day") dayIndex = i;
156
+ else if (parts[i].type === "month") monthIndex = i;
157
+ }
158
+ if (dayIndex >= 0 && monthIndex >= 0) {
159
+ const lo = Math.min(dayIndex, monthIndex);
160
+ const hi = Math.max(dayIndex, monthIndex);
161
+ let separator = FALLBACK_PATTERN.separator;
162
+ for (let i = lo + 1; i < hi; i++) {
163
+ if (parts[i].type === "literal") {
164
+ separator = parts[i].value;
165
+ break;
166
+ }
167
+ }
168
+ pattern = { dayFirst: dayIndex < monthIndex, separator };
169
+ }
170
+ } catch {
171
+ pattern = FALLBACK_PATTERN;
172
+ }
173
+ localePatterns.set(locale, pattern);
174
+ return pattern;
175
+ }
176
+ const TIMESTAMP_LEVELS = ["planned", "estimated", "actual"];
177
+ const LEVEL_GLYPHS = {
178
+ planned: "\u25CB",
179
+ // ○ hollow — intended
180
+ estimated: "\u25D0",
181
+ // ◐ half — expected
182
+ actual: "\u25CF"
183
+ // ● solid — happened
184
+ };
185
+ const DEFAULT_LEVEL_LABELS = {
186
+ planned: "Planned",
187
+ estimated: "Estimated",
188
+ actual: "Actual"
189
+ };
190
+ function resolveConfig(config) {
191
+ return {
192
+ locale: config?.locale || "pl",
193
+ showTime: config?.showTime || "auto",
194
+ midnight: config?.midnight || "hide",
195
+ yearMode: config?.yearMode || "elide-current",
196
+ yearDigits: config?.yearDigits || 2,
197
+ week: config?.week || "off",
198
+ weekPrefix: config?.weekPrefix ?? "W",
199
+ referenceYear: config?.referenceYear ?? (/* @__PURE__ */ new Date()).getFullYear(),
200
+ emptyPlaceholder: config?.emptyPlaceholder ?? "\u2013",
201
+ invalidPlaceholder: config?.invalidPlaceholder ?? "?",
202
+ glyphs: config?.glyphs ? { ...LEVEL_GLYPHS, ...config.glyphs } : LEVEL_GLYPHS,
203
+ levelLabels: config?.levelLabels ? { ...DEFAULT_LEVEL_LABELS, ...config.levelLabels } : DEFAULT_LEVEL_LABELS
204
+ };
205
+ }
206
+ function configKey(c) {
207
+ return `${c.locale}|${c.showTime}|${c.midnight}|${c.yearMode}|${c.yearDigits}|${c.week}|${c.weekPrefix}|${c.referenceYear}|${c.emptyPlaceholder}|${c.invalidPlaceholder}|${c.glyphs.planned}${c.glyphs.estimated}${c.glyphs.actual}|${c.levelLabels.planned}/${c.levelLabels.estimated}/${c.levelLabels.actual}`;
208
+ }
209
+ const EMPTY_WEEK = { week: "", weekNumber: 0, weekYear: 0 };
210
+ function makeEmpty(c) {
211
+ return Object.freeze({
212
+ kind: "empty",
213
+ date: "",
214
+ time: "",
215
+ ...EMPTY_WEEK,
216
+ text: c.emptyPlaceholder,
217
+ ms: NaN
218
+ });
219
+ }
220
+ function makeInvalid(c) {
221
+ return Object.freeze({
222
+ kind: "invalid",
223
+ date: "",
224
+ time: "",
225
+ ...EMPTY_WEEK,
226
+ text: c.invalidPlaceholder,
227
+ ms: NaN
228
+ });
229
+ }
230
+ const PAD = [
231
+ "00",
232
+ "01",
233
+ "02",
234
+ "03",
235
+ "04",
236
+ "05",
237
+ "06",
238
+ "07",
239
+ "08",
240
+ "09",
241
+ "10",
242
+ "11",
243
+ "12",
244
+ "13",
245
+ "14",
246
+ "15",
247
+ "16",
248
+ "17",
249
+ "18",
250
+ "19",
251
+ "20",
252
+ "21",
253
+ "22",
254
+ "23",
255
+ "24",
256
+ "25",
257
+ "26",
258
+ "27",
259
+ "28",
260
+ "29",
261
+ "30",
262
+ "31",
263
+ "32",
264
+ "33",
265
+ "34",
266
+ "35",
267
+ "36",
268
+ "37",
269
+ "38",
270
+ "39",
271
+ "40",
272
+ "41",
273
+ "42",
274
+ "43",
275
+ "44",
276
+ "45",
277
+ "46",
278
+ "47",
279
+ "48",
280
+ "49",
281
+ "50",
282
+ "51",
283
+ "52",
284
+ "53",
285
+ "54",
286
+ "55",
287
+ "56",
288
+ "57",
289
+ "58",
290
+ "59"
291
+ ];
292
+ function pad2(n) {
293
+ return n >= 0 && n < 60 ? PAD[n] : String(n);
294
+ }
295
+ const NBSP = "\xA0";
296
+ function buildCompactDate(p, c) {
297
+ const dd = pad2(p.day);
298
+ const mm = pad2(p.month);
299
+ const pattern = localePattern(c.locale);
300
+ let date = pattern.dayFirst ? dd + pattern.separator + mm : mm + pattern.separator + dd;
301
+ const showYear = c.yearMode === "always" ? true : c.yearMode === "never" ? false : p.year !== c.referenceYear;
302
+ if (showYear) {
303
+ date += pattern.separator + (c.yearDigits === 4 ? String(p.year) : pad2((p.year % 100 + 100) % 100));
304
+ }
305
+ const wantsTime = c.showTime === "always" || c.showTime === "auto" && p.hasTime && !(c.midnight === "hide" && p.isMidnight);
306
+ const time = wantsTime ? pad2(p.hours) + ":" + pad2(p.minutes) : "";
307
+ const weekNumber = isoWeek(p.year, p.month, p.day);
308
+ const weekYear = isoWeekYear(p.year, p.month, p.day);
309
+ const week = c.week === "off" ? "" : c.weekPrefix + weekNumber;
310
+ if (c.week === "only") {
311
+ return Object.freeze({
312
+ kind: "value",
313
+ date: "",
314
+ time: "",
315
+ week,
316
+ weekNumber,
317
+ weekYear,
318
+ text: week,
319
+ ms: new Date(p.year, p.month - 1, p.day, p.hours, p.minutes).getTime()
320
+ });
321
+ }
322
+ let text = date;
323
+ if (time) text += NBSP + time;
324
+ if (week) text += NBSP + week;
325
+ return Object.freeze({
326
+ kind: "value",
327
+ date,
328
+ time,
329
+ week,
330
+ weekNumber,
331
+ weekYear,
332
+ text,
333
+ ms: new Date(p.year, p.month - 1, p.day, p.hours, p.minutes).getTime()
334
+ });
335
+ }
336
+ function diffMinutes(later, earlier) {
337
+ const dl = daysFromCivil(later.year, later.month, later.day);
338
+ const de = daysFromCivil(earlier.year, earlier.month, earlier.day);
339
+ if (!later.hasTime || !earlier.hasTime) return (dl - de) * 1440;
340
+ return (dl - de) * 1440 + (later.hours * 60 + later.minutes) - (earlier.hours * 60 + earlier.minutes);
341
+ }
342
+ function formatVariance(minutes) {
343
+ if (minutes === 0) return "";
344
+ const sign = minutes > 0 ? "+" : "\u2212";
345
+ const abs = Math.abs(minutes);
346
+ if (abs >= 1440) return sign + Math.floor(abs / 1440) + "d";
347
+ if (abs >= 60) return sign + Math.floor(abs / 60) + "h";
348
+ return sign + abs + "m";
349
+ }
350
+ const EMPTY_TIMESTAMP_TITLE = "";
351
+ const CACHE_MAX = 4096;
352
+ function createMemo() {
353
+ let hot = /* @__PURE__ */ new Map();
354
+ let cold = /* @__PURE__ */ new Map();
355
+ return {
356
+ get(key) {
357
+ const h = hot.get(key);
358
+ if (h !== void 0) return h;
359
+ const c = cold.get(key);
360
+ if (c !== void 0) {
361
+ hot.set(key, c);
362
+ return c;
363
+ }
364
+ return void 0;
365
+ },
366
+ set(key, value) {
367
+ if (hot.size >= CACHE_MAX) {
368
+ cold = hot;
369
+ hot = /* @__PURE__ */ new Map();
370
+ }
371
+ hot.set(key, value);
372
+ return value;
373
+ },
374
+ size() {
375
+ return hot.size + cold.size;
376
+ }
377
+ };
378
+ }
379
+ function buildFormatter(c) {
380
+ const empty = makeEmpty(c);
381
+ const invalid = makeInvalid(c);
382
+ const values = createMemo();
383
+ const levels = createMemo();
384
+ const emptyTimestamp = Object.freeze({
385
+ level: null,
386
+ glyph: "",
387
+ date: empty,
388
+ variance: "",
389
+ varianceSign: 0,
390
+ title: EMPTY_TIMESTAMP_TITLE,
391
+ isEmpty: true
392
+ });
393
+ function formatParsed(value) {
394
+ if (value == null || value === "") return empty;
395
+ const parts = parseTimestamp(value);
396
+ if (!parts) return invalid;
397
+ return buildCompactDate(parts, c);
398
+ }
399
+ function format(value) {
400
+ if (typeof value !== "string") return formatParsed(value);
401
+ if (value === "") return empty;
402
+ const hit = values.get(value);
403
+ if (hit !== void 0) return hit;
404
+ return values.set(value, formatParsed(value));
405
+ }
406
+ function formatLevels(planned, estimated, actual) {
407
+ const canCache = (planned == null || typeof planned === "string") && (estimated == null || typeof estimated === "string") && (actual == null || typeof actual === "string");
408
+ let key = "";
409
+ if (canCache) {
410
+ key = `${planned ?? ""}\0${estimated ?? ""}\0${actual ?? ""}`;
411
+ const hit = levels.get(key);
412
+ if (hit !== void 0) return hit;
413
+ }
414
+ const p = planned ? parseTimestamp(planned) : null;
415
+ const e = estimated ? parseTimestamp(estimated) : null;
416
+ const a = actual ? parseTimestamp(actual) : null;
417
+ let level = null;
418
+ let shown = null;
419
+ if (a) {
420
+ level = "actual";
421
+ shown = a;
422
+ } else if (e) {
423
+ level = "estimated";
424
+ shown = e;
425
+ } else if (p) {
426
+ level = "planned";
427
+ shown = p;
428
+ }
429
+ if (!shown || !level) {
430
+ const anyPresent = !!(planned || estimated || actual);
431
+ if (!anyPresent) {
432
+ return canCache ? levels.set(key, emptyTimestamp) : emptyTimestamp;
433
+ }
434
+ const broken = Object.freeze({
435
+ level: null,
436
+ glyph: "",
437
+ date: invalid,
438
+ variance: "",
439
+ varianceSign: 0,
440
+ title: EMPTY_TIMESTAMP_TITLE,
441
+ isEmpty: false
442
+ });
443
+ return canCache ? levels.set(key, broken) : broken;
444
+ }
445
+ const date = buildCompactDate(shown, c);
446
+ let varianceMinutes = null;
447
+ if (a && e) varianceMinutes = diffMinutes(a, e);
448
+ else if (a && p) varianceMinutes = diffMinutes(a, p);
449
+ else if (e && p) varianceMinutes = diffMinutes(e, p);
450
+ const variance = varianceMinutes == null ? "" : formatVariance(varianceMinutes);
451
+ const varianceSign = !variance || varianceMinutes == null ? 0 : varianceMinutes > 0 ? 1 : -1;
452
+ let title = "";
453
+ if (a) title += `${c.levelLabels.actual}: ${buildCompactDate(a, c).text}`;
454
+ if (e) title += (title ? "\n" : "") + `${c.levelLabels.estimated}: ${buildCompactDate(e, c).text}`;
455
+ if (p) title += (title ? "\n" : "") + `${c.levelLabels.planned}: ${buildCompactDate(p, c).text}`;
456
+ const result = Object.freeze({
457
+ level,
458
+ glyph: c.glyphs[level],
459
+ date,
460
+ variance,
461
+ varianceSign,
462
+ title,
463
+ isEmpty: false
464
+ });
465
+ return canCache ? levels.set(key, result) : result;
466
+ }
467
+ return {
468
+ config: c,
469
+ format,
470
+ formatLevels,
471
+ _cacheSize: () => values.size() + levels.size()
472
+ };
473
+ }
474
+ const formatters = /* @__PURE__ */ new Map();
475
+ function getCompactDateFormatter(config) {
476
+ const resolved = resolveConfig(config);
477
+ const key = configKey(resolved);
478
+ const hit = formatters.get(key);
479
+ if (hit) return hit;
480
+ const made = buildFormatter(resolved);
481
+ formatters.set(key, made);
482
+ return made;
483
+ }
484
+ function formatDateCompact(value, config) {
485
+ return getCompactDateFormatter(config).format(value);
486
+ }
487
+ function formatTimestampLevels(planned, estimated, actual, config) {
488
+ return getCompactDateFormatter(config).formatLevels(planned, estimated, actual);
489
+ }
490
+ function __resetCompactDateCaches() {
491
+ formatters.clear();
492
+ localePatterns.clear();
493
+ }
494
+ export {
495
+ LEVEL_GLYPHS,
496
+ TIMESTAMP_LEVELS,
497
+ __resetCompactDateCaches,
498
+ daysFromCivil,
499
+ formatDateCompact,
500
+ formatTimestampLevels,
501
+ getCompactDateFormatter,
502
+ isoWeek,
503
+ isoWeekYear,
504
+ isoWeekday,
505
+ parseTimestamp,
506
+ yearFromDays
507
+ };
508
+ //# sourceMappingURL=formatDateCompact.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/backend/dynamic-table/utils/formatDateCompact.ts"],
4
+ "sourcesContent": ["/**\n * DynamicTable \u2014 COMPACT DATE FORMATTING\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n *\n * Dates are the single biggest space consumer in the container table, and the\n * 3 Aug 2026 INF workshops recorded two SEPARATE complaints about them:\n *\n * A8 (i) FORMAT. \"Date rendering takes too much space AND is inconsistent.\"\n * After the migration some values carry a time, some do not, some\n * lack the year. This file defines ONE deterministic rule set and\n * applies it to every shape the data actually arrives in.\n *\n * A8 (ii) MODEL. Three date levels \u2014 planned / estimated / actual \u2014 are\n * crushed into one cell and distinguished only by COLOUR plus a 9px\n * letter. Agnieszka wants estimated and actual visibly separate;\n * Szymon preferred an earlier icon-based variant. `formatLevels()`\n * below carries the level in a GLYPH (shape = meaning, colour = mere\n * reinforcement) and costs zero extra horizontal space.\n *\n * B14 ISO WEEK NUMBERS. Klaudiusz reads them constantly \u2014 when a topic\n * needs attention, when a vessel ETA falls. `isoWeek()` here is\n * correct across year boundaries (the classic bug) and the week can\n * be shown alongside or instead of the date.\n *\n * \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * PERFORMANCE CONTRACT \u2014 read before editing\n *\n * The grid virtualizes ROWS ONLY. `VirtualRow` does a plain `columns.map`, so\n * EVERY column of EVERY mounted row renders, and denser tables mount MORE\n * cells. Anything in here is executed thousands of times per render pass.\n *\n * Three rules hold the line, in order of how much they buy:\n *\n * 1. RESULTS ARE MEMOISED PER FORMATTER, keyed on the raw string. On scroll\n * the same values re-render constantly, so the steady state is a single\n * `Map.get` returning a FROZEN, SHARED object \u2014 no parse, no allocation,\n * not even for the key (the raw string IS the key). The cache is bounded\n * by a two-generation swap, so it cannot leak on a long-lived page.\n *\n * 2. PARSING IS charCode ARITHMETIC, not regex and not `new Date()`.\n * `String.prototype.exec` allocates a match array per call; module-level\n * regexes fix the compile cost but not the allocation. A `Date` is\n * constructed ONLY for values that genuinely need timezone conversion\n * (an instant with a non-zero UTC time), and only on a cache miss.\n *\n * 3. `Intl.DateTimeFormat` IS NEVER CONSTRUCTED PER CALL \u2014 nor per cell, nor\n * per render. It is constructed exactly ONCE PER LOCALE, ever, to probe\n * that locale's day/month order and separator (`localePattern`). Every\n * subsequent format is string concatenation over cached primitives.\n *\n * There is no `date-fns` import here on purpose. `format()` re-parses its\n * pattern string on every call; at 20 columns \u00D7 60 mounted rows that is the\n * difference between a smooth scroll and a janky one.\n * \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n */\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// ISO-8601 WEEK ARITHMETIC\n//\n// Implemented on the proleptic Gregorian calendar with pure integer maths\n// (Howard Hinnant's civil-date algorithms). No `Date`, no allocation, no\n// timezone involvement \u2014 the week of a calendar date is a property of that\n// date, not of an instant.\n//\n// The classic bug this avoids: computing the week from \"day-of-year / 7\". That\n// is wrong at every year boundary. 1 Jan 2021 is in week 53 OF 2020; 31 Dec\n// 2019 is in week 1 OF 2020. ISO-8601 defines the week by its THURSDAY, which\n// is what the code below actually computes.\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Days since 1970-01-01 for a proleptic Gregorian y/m/d. Exact for any year. */\nexport function daysFromCivil(year: number, month: number, day: number): number {\n const y = year - (month <= 2 ? 1 : 0)\n const era = Math.floor(y / 400)\n const yoe = y - era * 400 // [0, 399]\n const doy = Math.floor((153 * (month + (month > 2 ? -3 : 9)) + 2) / 5) + day - 1 // [0, 365]\n const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy // [0, 146096]\n return era * 146097 + doe - 719468\n}\n\n/** Calendar YEAR of a days-since-epoch value. (Inverse of `daysFromCivil`, year only.) */\nexport function yearFromDays(days: number): number {\n const z = days + 719468\n const era = Math.floor(z / 146097)\n const doe = z - era * 146097 // [0, 146096]\n const yoe = Math.floor((doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365)\n const y = yoe + era * 400\n const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100))\n const mp = Math.floor((5 * doy + 2) / 153)\n const m = mp + (mp < 10 ? 3 : -9)\n return y + (m <= 2 ? 1 : 0)\n}\n\n/**\n * ISO-8601 weekday, Monday = 0 \u2026 Sunday = 6.\n * (1970-01-01 was a Thursday, i.e. index 3 \u2014 hence the `+ 3`.)\n */\nexport function isoWeekday(year: number, month: number, day: number): number {\n const z = daysFromCivil(year, month, day)\n return ((z + 3) % 7 + 7) % 7\n}\n\n/**\n * ISO-8601 week number (1\u201353) of a calendar date.\n *\n * Definition, and the reason this is not \"day-of-year / 7\": a week belongs to\n * the year that contains its THURSDAY. So we jump to this week's Thursday,\n * take THAT date's year as the ISO year, and count weeks from that ISO year's\n * 1 January.\n */\nexport function isoWeek(year: number, month: number, day: number): number {\n const z = daysFromCivil(year, month, day)\n const dow = ((z + 3) % 7 + 7) % 7 // 0 = Monday\n const thursday = z + 3 - dow\n const isoYear = yearFromDays(thursday)\n const jan1 = daysFromCivil(isoYear, 1, 1)\n return Math.floor((thursday - jan1) / 7) + 1\n}\n\n/**\n * The YEAR the ISO week belongs to, which is NOT always the calendar year.\n * 2021-01-01 \u2192 2020 (week 53). 2019-12-30 \u2192 2020 (week 1).\n * Needed whenever a week number is stored, filtered or sorted rather than just\n * shown next to its own date.\n */\nexport function isoWeekYear(year: number, month: number, day: number): number {\n const z = daysFromCivil(year, month, day)\n const dow = ((z + 3) % 7 + 7) % 7\n return yearFromDays(z + 3 - dow)\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// PARSING\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type DateInput = string | number | Date | null | undefined\n\n/**\n * A timestamp decomposed into the parts we actually render.\n *\n * `hasTime` and `isMidnight` are kept SEPARATE on purpose. \"This value carries\n * no time at all\" and \"this value carries a time that happens to be 00:00\" are\n * different facts about the data, and A8(i) is precisely the complaint that the\n * migration blurred them. The formatter decides what to do; the parser only\n * reports.\n */\nexport type TimestampParts = {\n year: number\n month: number // 1\u201312\n day: number // 1\u201331\n hours: number // 0\u201323\n minutes: number // 0\u201359\n /** The source string/value carried a time component at all. */\n hasTime: boolean\n /** `hasTime` and that time is exactly 00:00. */\n isMidnight: boolean\n /** The source was an instant that we converted into the viewer's local zone. */\n wasInstant: boolean\n}\n\nconst CH_DASH = 45\nconst CH_T_UPPER = 84\nconst CH_T_LOWER = 116\nconst CH_SPACE = 32\nconst CH_COLON = 58\nconst CH_Z_UPPER = 90\nconst CH_Z_LOWER = 122\nconst CH_PLUS = 43\nconst CH_ZERO = 48\n\n/** Two ASCII digits at `i`, or -1. Allocation-free. */\nfunction digits2(s: string, i: number): number {\n const a = s.charCodeAt(i) - CH_ZERO\n const b = s.charCodeAt(i + 1) - CH_ZERO\n if (a < 0 || a > 9 || b < 0 || b > 9) return -1\n return a * 10 + b\n}\n\n/** Four ASCII digits at `i`, or -1. Allocation-free. */\nfunction digits4(s: string, i: number): number {\n const a = s.charCodeAt(i) - CH_ZERO\n const b = s.charCodeAt(i + 1) - CH_ZERO\n const c = s.charCodeAt(i + 2) - CH_ZERO\n const d = s.charCodeAt(i + 3) - CH_ZERO\n if (a < 0 || a > 9 || b < 0 || b > 9 || c < 0 || c > 9 || d < 0 || d > 9) return -1\n return a * 1000 + b * 100 + c * 10 + d\n}\n\n/**\n * True when every character from `from` up to (excluding) `to` is either an\n * ASCII zero, a colon or a dot \u2014 i.e. the time-of-day is exactly 00:00:00.000.\n * Used to recognise the migration artefact described in `parseTimestamp`.\n */\nfunction isZeroTimeRun(s: string, from: number, to: number): boolean {\n for (let i = from; i < to; i++) {\n const c = s.charCodeAt(i)\n if (c !== CH_ZERO && c !== CH_COLON && c !== 46 /* . */) return false\n }\n return true\n}\n\nfunction partsFromDate(d: Date, wasInstant: boolean): TimestampParts {\n const hours = d.getHours()\n const minutes = d.getMinutes()\n return {\n year: d.getFullYear(),\n month: d.getMonth() + 1,\n day: d.getDate(),\n hours,\n minutes,\n hasTime: true,\n isMidnight: hours === 0 && minutes === 0,\n wasInstant,\n }\n}\n\n/**\n * Decompose any value the grid can hand us into display parts, or `null` if it\n * is not a timestamp at all.\n *\n * Shapes handled \u2014 these are the ones that actually exist in the FMS data after\n * the migration, not a generous superset:\n *\n * \"2026-12-31\" date-only \u2192 no time, ever\n * \"2026-12-31T14:30\" naive local \u2192 14:30, no Date built\n * \"2026-12-31T14:30:00\" naive local \u2192 14:30, no Date built\n * \"2026-12-31 14:30:00\" Postgres text \u2192 14:30, no Date built\n * \"2026-12-31T14:30:00Z\" instant \u2192 converted to local\n * \"2026-12-31T14:30:00+02:00\" instant with offset \u2192 converted to local\n * \"2026-12-31T00:00:00.000Z\" SEE BELOW\n * Date / epoch-ms number \u2192 local parts\n *\n * \u2500\u2500 The UTC-midnight rule, and why it is not over-cleverness \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * A value of exactly `00:00:00.000Z` is treated as the DATE-ONLY value of its\n * UTC calendar day: no time is shown and NO timezone conversion happens.\n *\n * That pattern is not a real freight timestamp. Nothing departs, arrives or\n * cuts off at midnight UTC; it is what a date-only column looks like after it\n * was migrated into a `timestamptz`. Treating it as an instant produces two\n * visible bugs, both reported in A8(i): a fabricated \"02:00\" in Warsaw, and \u2014\n * for any viewer west of Greenwich \u2014 the WRONG DAY. Rendering the UTC calendar\n * date is the only reading that is stable for every viewer.\n *\n * The escape hatch is `midnight: 'show'`, which disables both this and the\n * local-midnight suppression.\n */\nexport function parseTimestamp(value: DateInput): TimestampParts | null {\n if (value == null || value === '') return null\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) return null\n return partsFromDate(new Date(value), true)\n }\n\n if (typeof value === 'object') {\n // `instanceof Date` is deliberately avoided: values can cross a realm\n // boundary (an iframe, a worker) and fail it while still being a Date.\n const t = (value as Date).getTime?.()\n if (typeof t !== 'number' || Number.isNaN(t)) return null\n return partsFromDate(value as Date, true)\n }\n\n if (typeof value !== 'string') return null\n\n const raw = value\n const len = raw.length\n if (len < 10) return null\n if (raw.charCodeAt(4) !== CH_DASH || raw.charCodeAt(7) !== CH_DASH) return null\n\n const year = digits4(raw, 0)\n const month = digits2(raw, 5)\n const day = digits2(raw, 8)\n if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31) return null\n\n if (len === 10) {\n return { year, month, day, hours: 0, minutes: 0, hasTime: false, isMidnight: false, wasInstant: false }\n }\n\n const sep = raw.charCodeAt(10)\n if (sep !== CH_T_UPPER && sep !== CH_T_LOWER && sep !== CH_SPACE) return null\n if (len < 16 || raw.charCodeAt(13) !== CH_COLON) return null\n\n const hours = digits2(raw, 11)\n const minutes = digits2(raw, 14)\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null\n\n // Locate a zone marker. After index 15 a '-' can only be an offset sign.\n let zoneAt = -1\n let isUtc = false\n for (let i = 16; i < len; i++) {\n const c = raw.charCodeAt(i)\n if (c === CH_Z_UPPER || c === CH_Z_LOWER) { isUtc = true; zoneAt = i; break }\n if (c === CH_PLUS || c === CH_DASH) { zoneAt = i; break }\n }\n\n if (isUtc && hours === 0 && minutes === 0 && isZeroTimeRun(raw, 16, zoneAt)) {\n // The migration artefact. Render the UTC calendar day, no time, no shift.\n return { year, month, day, hours: 0, minutes: 0, hasTime: false, isMidnight: false, wasInstant: false }\n }\n\n if (zoneAt >= 0) {\n // A real instant: it must be shown in the viewer's zone, which requires the\n // platform's timezone database. This is the ONLY branch that allocates a\n // Date \u2014 and only on a cache miss.\n const d = new Date(raw)\n if (Number.isNaN(d.getTime())) return null\n return partsFromDate(d, true)\n }\n\n // Naive local date-time: the string already IS wall-clock. No Date needed.\n return {\n year,\n month,\n day,\n hours,\n minutes,\n hasTime: true,\n isMidnight: hours === 0 && minutes === 0,\n wasInstant: false,\n }\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// LOCALE PATTERN \u2014 one Intl construction per locale, ever\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype LocalePattern = {\n /** Day before month (pl, de, en-GB) vs month before day (en-US). */\n dayFirst: boolean\n /** The literal between the two numeric parts: \".\" for pl/de, \"/\" for en. */\n separator: string\n}\n\nconst PROBE = new Date(Date.UTC(2026, 11, 31, 12, 0, 0)) // 31 Dec 2026, unambiguous\nconst localePatterns = new Map<string, LocalePattern>()\nconst FALLBACK_PATTERN: LocalePattern = { dayFirst: true, separator: '.' }\n\n/**\n * Discover a locale's numeric day/month order and separator ONCE and cache it.\n *\n * This is the whole reason the hot path needs no `Intl`: after the first call\n * for a locale, formatting a date is `dd + sep + mm`, pure concatenation.\n */\nfunction localePattern(locale: string): LocalePattern {\n const hit = localePatterns.get(locale)\n if (hit) return hit\n let pattern = FALLBACK_PATTERN\n try {\n const parts = new Intl.DateTimeFormat(locale, { day: '2-digit', month: '2-digit' }).formatToParts(PROBE)\n let dayIndex = -1\n let monthIndex = -1\n for (let i = 0; i < parts.length; i++) {\n if (parts[i].type === 'day') dayIndex = i\n else if (parts[i].type === 'month') monthIndex = i\n }\n if (dayIndex >= 0 && monthIndex >= 0) {\n // Only the literal BETWEEN the two numbers counts. Several locales (de)\n // append a trailing \".\" which must not become the separator.\n const lo = Math.min(dayIndex, monthIndex)\n const hi = Math.max(dayIndex, monthIndex)\n let separator = FALLBACK_PATTERN.separator\n for (let i = lo + 1; i < hi; i++) {\n if (parts[i].type === 'literal') { separator = parts[i].value; break }\n }\n pattern = { dayFirst: dayIndex < monthIndex, separator }\n }\n } catch {\n // A malformed locale tag must never break a grid. Fall back to the primary\n // locale's shape (pl \u2192 31.12) rather than throwing.\n pattern = FALLBACK_PATTERN\n }\n localePatterns.set(locale, pattern)\n return pattern\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// CONFIG\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type TimestampLevel = 'planned' | 'estimated' | 'actual'\n\n/** The three levels, least to most certain. */\nexport const TIMESTAMP_LEVELS: readonly TimestampLevel[] = ['planned', 'estimated', 'actual'] as const\n\n/**\n * The level glyphs \u2014 a CERTAINTY RAMP: hollow \u2192 half \u2192 solid.\n *\n * Shape carries the meaning, so the distinction survives greyscale, colour\n * blindness and a printed screenshot. Colour is applied on top by `DateCell`\n * as pure reinforcement, never as the sole carrier (WCAG 1.4.1).\n *\n * They are plain string characters, not SVG icons, for a reason that is\n * measured rather than aesthetic: an icon is a React element per cell, and the\n * grid renders every column of every mounted row. A character costs nothing.\n */\nexport const LEVEL_GLYPHS: Readonly<Record<TimestampLevel, string>> = {\n planned: '\u25CB', // \u25CB hollow \u2014 intended\n estimated: '\u25D0', // \u25D0 half \u2014 expected\n actual: '\u25CF', // \u25CF solid \u2014 happened\n}\n\nexport type CompactDateConfig = {\n /** BCP-47 tag. Drives day/month order and separator only. Default `'pl'`. */\n locale?: string\n /**\n * `'auto'` (default) shows the time only when the value carries one.\n * `'never'` never shows it. `'always'` shows 00:00 for date-only values \u2014\n * almost certainly wrong for freight data, provided for completeness.\n */\n showTime?: 'auto' | 'never' | 'always'\n /**\n * `'hide'` (default) suppresses an exactly-midnight time and treats a\n * `00:00:00Z` instant as a date. See `parseTimestamp` for why.\n * `'show'` renders midnight literally and converts UTC midnight to local.\n */\n midnight?: 'hide' | 'show'\n /**\n * `'elide-current'` (default) drops the year when it equals `referenceYear`.\n * This is where most of the saving comes from: in a live operational table\n * the overwhelming majority of rows are in the current year, and the year is\n * the least informative 3 characters on the screen.\n */\n yearMode?: 'elide-current' | 'always' | 'never'\n /** Width of the year when shown. Default 2 \u2192 \"31.12.26\". */\n yearDigits?: 2 | 4\n /**\n * `'off'` (default) \u00B7 `'suffix'` \u2192 \"31.12 W53\" \u00B7 `'only'` \u2192 \"W53\".\n * Workshop B14 \u2014 Klaudiusz reads ISO weeks constantly.\n */\n week?: 'off' | 'suffix' | 'only'\n /** Prefix for the week tag. Default `'W'`. */\n weekPrefix?: string\n /**\n * Year the elision compares against. Injectable for deterministic tests;\n * defaults to the year at formatter-creation time.\n */\n referenceYear?: number\n /** Shown for null/undefined/''. Default `'\u2013'` (en dash). */\n emptyPlaceholder?: string\n /**\n * Shown for a present-but-unparseable value. Default `'?'`.\n * DELIBERATELY DIFFERENT from `emptyPlaceholder`: \"no date\" is normal, \"this\n * date is broken\" is a data bug someone should report. Never \"Invalid Date\".\n */\n invalidPlaceholder?: string\n /** Override the certainty-ramp glyphs. */\n glyphs?: Partial<Record<TimestampLevel, string>>\n /**\n * Words for the levels, used in the hover breakdown (screen readers read\n * these, not the glyphs). English defaults \u2014 see the i18n wiring contract.\n */\n levelLabels?: Partial<Record<TimestampLevel, string>>\n}\n\ntype ResolvedConfig = Required<Omit<CompactDateConfig, 'glyphs' | 'levelLabels'>> & {\n glyphs: Record<TimestampLevel, string>\n levelLabels: Record<TimestampLevel, string>\n}\n\nconst DEFAULT_LEVEL_LABELS: Record<TimestampLevel, string> = {\n planned: 'Planned',\n estimated: 'Estimated',\n actual: 'Actual',\n}\n\nfunction resolveConfig(config?: CompactDateConfig): ResolvedConfig {\n return {\n locale: config?.locale || 'pl',\n showTime: config?.showTime || 'auto',\n midnight: config?.midnight || 'hide',\n yearMode: config?.yearMode || 'elide-current',\n yearDigits: config?.yearDigits || 2,\n week: config?.week || 'off',\n weekPrefix: config?.weekPrefix ?? 'W',\n referenceYear: config?.referenceYear ?? new Date().getFullYear(),\n emptyPlaceholder: config?.emptyPlaceholder ?? '\u2013',\n invalidPlaceholder: config?.invalidPlaceholder ?? '?',\n glyphs: config?.glyphs ? { ...LEVEL_GLYPHS, ...config.glyphs } : LEVEL_GLYPHS,\n levelLabels: config?.levelLabels\n ? { ...DEFAULT_LEVEL_LABELS, ...config.levelLabels }\n : DEFAULT_LEVEL_LABELS,\n }\n}\n\nfunction configKey(c: ResolvedConfig): string {\n return (\n `${c.locale}|${c.showTime}|${c.midnight}|${c.yearMode}|${c.yearDigits}|${c.week}|` +\n `${c.weekPrefix}|${c.referenceYear}|${c.emptyPlaceholder}|${c.invalidPlaceholder}|` +\n `${c.glyphs.planned}${c.glyphs.estimated}${c.glyphs.actual}|` +\n `${c.levelLabels.planned}/${c.levelLabels.estimated}/${c.levelLabels.actual}`\n )\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// RESULTS\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * A formatted date, split into the parts a cell renders separately.\n *\n * Split rather than pre-joined because the density scale hides the low-value\n * parts with CSS at `dense` \u2014 which is only possible if they are their own\n * elements. `text` is the joined form for clipboard, export and tooltips.\n */\nexport type CompactDate = {\n kind: 'empty' | 'invalid' | 'value'\n /** \"31.12\" or \"31.12.26\". Empty string when there is nothing to show. */\n date: string\n /** \"14:30\", or '' when the value carries no (shown) time. */\n time: string\n /** \"W53\", or '' when weeks are off. */\n week: string\n /** ISO week number 1\u201353, or 0 when not derivable. Always computed. */\n weekNumber: number\n /** ISO week-owning year (NOT always the calendar year), or 0. */\n weekYear: number\n /** Everything joined with spaces \u2014 export, clipboard, tooltip. */\n text: string\n /** Epoch ms of the shown value, or NaN. For overdue/relative comparisons. */\n ms: number\n}\n\nconst EMPTY_WEEK = { week: '', weekNumber: 0, weekYear: 0 }\n\nfunction makeEmpty(c: ResolvedConfig): CompactDate {\n return Object.freeze({\n kind: 'empty' as const, date: '', time: '', ...EMPTY_WEEK, text: c.emptyPlaceholder, ms: NaN,\n })\n}\n\nfunction makeInvalid(c: ResolvedConfig): CompactDate {\n return Object.freeze({\n kind: 'invalid' as const, date: '', time: '', ...EMPTY_WEEK, text: c.invalidPlaceholder, ms: NaN,\n })\n}\n\n/** Two-digit zero pad without `padStart` (which allocates twice). */\nconst PAD = [\n '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',\n '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',\n '20', '21', '22', '23', '24', '25', '26', '27', '28', '29',\n '30', '31', '32', '33', '34', '35', '36', '37', '38', '39',\n '40', '41', '42', '43', '44', '45', '46', '47', '48', '49',\n '50', '51', '52', '53', '54', '55', '56', '57', '58', '59',\n]\nfunction pad2(n: number): string {\n return n >= 0 && n < 60 ? PAD[n] : String(n)\n}\n\n/** Non-breaking space: date and time must never wrap apart inside a cell. */\nconst NBSP = '\u00A0'\n\nfunction buildCompactDate(p: TimestampParts, c: ResolvedConfig): CompactDate {\n const dd = pad2(p.day)\n const mm = pad2(p.month)\n const pattern = localePattern(c.locale)\n\n let date = pattern.dayFirst ? dd + pattern.separator + mm : mm + pattern.separator + dd\n const showYear =\n c.yearMode === 'always' ? true : c.yearMode === 'never' ? false : p.year !== c.referenceYear\n if (showYear) {\n date += pattern.separator + (c.yearDigits === 4 ? String(p.year) : pad2(((p.year % 100) + 100) % 100))\n }\n\n const wantsTime =\n c.showTime === 'always' ||\n (c.showTime === 'auto' && p.hasTime && !(c.midnight === 'hide' && p.isMidnight))\n const time = wantsTime ? pad2(p.hours) + ':' + pad2(p.minutes) : ''\n\n const weekNumber = isoWeek(p.year, p.month, p.day)\n const weekYear = isoWeekYear(p.year, p.month, p.day)\n const week = c.week === 'off' ? '' : c.weekPrefix + weekNumber\n\n if (c.week === 'only') {\n return Object.freeze({\n kind: 'value' as const,\n date: '',\n time: '',\n week,\n weekNumber,\n weekYear,\n text: week,\n ms: new Date(p.year, p.month - 1, p.day, p.hours, p.minutes).getTime(),\n })\n }\n\n let text = date\n if (time) text += NBSP + time\n if (week) text += NBSP + week\n\n return Object.freeze({\n kind: 'value' as const,\n date,\n time,\n week,\n weekNumber,\n weekYear,\n text,\n ms: new Date(p.year, p.month - 1, p.day, p.hours, p.minutes).getTime(),\n })\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// LEVEL MODEL \u2014 A8(ii)\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type CompactTimestamp = {\n /** The level actually shown, resolved actual > estimated > planned. */\n level: TimestampLevel | null\n /** The certainty glyph for that level, or '' when there is no value. */\n glyph: string\n /** The formatted date of the shown level. */\n date: CompactDate\n /** \"+2d\" / \"\u22125h\" / '' \u2014 ONE unit, the most significant. */\n variance: string\n /** +1 late, \u22121 early, 0 none. Drives colour; never the sole signal. */\n varianceSign: 0 | 1 | -1\n /** Multi-line breakdown of every known level. Tooltip + screen readers. */\n title: string\n /** True when all three levels are absent. */\n isEmpty: boolean\n}\n\n/**\n * Signed difference in minutes between two parsed values. When EITHER side is\n * date-only there is no time to compare, so the difference is measured in whole\n * CALENDAR DAYS \u2014 never spurious hours. This mirrors `computeDelay` in\n * `packages/projects/.../lib/timestamp-display.ts`; the semantics must not\n * diverge or the same shipment would show two different delays in two tables.\n */\nfunction diffMinutes(later: TimestampParts, earlier: TimestampParts): number {\n const dl = daysFromCivil(later.year, later.month, later.day)\n const de = daysFromCivil(earlier.year, earlier.month, earlier.day)\n if (!later.hasTime || !earlier.hasTime) return (dl - de) * 1440\n return (dl - de) * 1440 + (later.hours * 60 + later.minutes) - (earlier.hours * 60 + earlier.minutes)\n}\n\n/**\n * ONE unit, the most significant \u2014 \"+2d\", not \"+2d 3h\".\n *\n * The two-unit form in `timestamp-display.formatDelay` costs 3\u20134 extra\n * characters in a column where characters are the scarce resource, and the\n * second unit almost never changes a decision. The exact figures stay in the\n * hover breakdown.\n */\nfunction formatVariance(minutes: number): string {\n if (minutes === 0) return ''\n const sign = minutes > 0 ? '+' : '\u2212' // U+2212 minus, matching the repo\n const abs = Math.abs(minutes)\n if (abs >= 1440) return sign + Math.floor(abs / 1440) + 'd'\n if (abs >= 60) return sign + Math.floor(abs / 60) + 'h'\n return sign + abs + 'm'\n}\n\nconst EMPTY_TIMESTAMP_TITLE = ''\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// FORMATTER\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type CompactDateFormatter = {\n readonly config: ResolvedConfig\n /** Format a single value. Memoised on the raw string. */\n format(value: DateInput): CompactDate\n /** Format a planned/estimated/actual triplet. Memoised on the three strings. */\n formatLevels(\n planned: DateInput,\n estimated: DateInput,\n actual: DateInput,\n ): CompactTimestamp\n /** Test/diagnostic hook. Not part of the rendering path. */\n readonly _cacheSize: () => number\n}\n\n/**\n * Bounded memo. Two generations rather than a real LRU: when the hot map fills,\n * it becomes the cold map and a fresh hot map starts. A value still in use gets\n * promoted back on its next lookup, and everything else is dropped wholesale\n * when the next swap happens.\n *\n * Cost per swap is one allocation; cost per lookup is one or two `Map.get`.\n * A real LRU would need a doubly-linked list touched on EVERY hit \u2014 strictly\n * more work in the hot path to solve a problem a grid does not have.\n */\nconst CACHE_MAX = 4096\n\nfunction createMemo<V>() {\n let hot = new Map<string, V>()\n let cold = new Map<string, V>()\n return {\n get(key: string): V | undefined {\n const h = hot.get(key)\n if (h !== undefined) return h\n const c = cold.get(key)\n if (c !== undefined) {\n hot.set(key, c) // promote \u2014 it is still live\n return c\n }\n return undefined\n },\n set(key: string, value: V): V {\n if (hot.size >= CACHE_MAX) {\n cold = hot\n hot = new Map<string, V>()\n }\n hot.set(key, value)\n return value\n },\n size(): number {\n return hot.size + cold.size\n },\n }\n}\n\nfunction buildFormatter(c: ResolvedConfig): CompactDateFormatter {\n const empty = makeEmpty(c)\n const invalid = makeInvalid(c)\n const values = createMemo<CompactDate>()\n const levels = createMemo<CompactTimestamp>()\n\n const emptyTimestamp: CompactTimestamp = Object.freeze({\n level: null,\n glyph: '',\n date: empty,\n variance: '',\n varianceSign: 0 as const,\n title: EMPTY_TIMESTAMP_TITLE,\n isEmpty: true,\n })\n\n function formatParsed(value: DateInput): CompactDate {\n if (value == null || value === '') return empty\n const parts = parseTimestamp(value)\n if (!parts) return invalid\n return buildCompactDate(parts, c)\n }\n\n function format(value: DateInput): CompactDate {\n // Only strings are memoised. A `Date`/number has no stable cheap key, and\n // grids overwhelmingly carry ISO strings \u2014 building a key for the rare case\n // would tax the common one.\n if (typeof value !== 'string') return formatParsed(value)\n if (value === '') return empty\n const hit = values.get(value)\n if (hit !== undefined) return hit\n return values.set(value, formatParsed(value))\n }\n\n function formatLevels(\n planned: DateInput,\n estimated: DateInput,\n actual: DateInput,\n ): CompactTimestamp {\n const canCache =\n (planned == null || typeof planned === 'string') &&\n (estimated == null || typeof estimated === 'string') &&\n (actual == null || typeof actual === 'string')\n let key = ''\n if (canCache) {\n key = `${planned ?? ''}\u0000${estimated ?? ''}\u0000${actual ?? ''}`\n const hit = levels.get(key)\n if (hit !== undefined) return hit\n }\n\n const p = planned ? parseTimestamp(planned) : null\n const e = estimated ? parseTimestamp(estimated) : null\n const a = actual ? parseTimestamp(actual) : null\n\n // Precedence actual > estimated > planned \u2014 the most \"real\" known time.\n // Identical to `resolveLegTimestamp` in the folders module; the two must\n // agree or the transport table and the container table would disagree\n // about the same shipment.\n let level: TimestampLevel | null = null\n let shown: TimestampParts | null = null\n if (a) { level = 'actual'; shown = a }\n else if (e) { level = 'estimated'; shown = e }\n else if (p) { level = 'planned'; shown = p }\n\n if (!shown || !level) {\n // Everything absent \u2014 but \"present and unparseable\" must still surface.\n const anyPresent = !!(planned || estimated || actual)\n if (!anyPresent) {\n return canCache ? levels.set(key, emptyTimestamp) : emptyTimestamp\n }\n const broken: CompactTimestamp = Object.freeze({\n level: null,\n glyph: '',\n date: invalid,\n variance: '',\n varianceSign: 0 as const,\n title: EMPTY_TIMESTAMP_TITLE,\n isEmpty: false,\n })\n return canCache ? levels.set(key, broken) : broken\n }\n\n const date = buildCompactDate(shown, c)\n\n // Variance: actual vs estimate, else actual vs plan, else estimate vs plan.\n // A zero result is a real answer (\"on time\"), so it must not fall through\n // to the next pair \u2014 hence the explicit null checks rather than `||`.\n let varianceMinutes: number | null = null\n if (a && e) varianceMinutes = diffMinutes(a, e)\n else if (a && p) varianceMinutes = diffMinutes(a, p)\n else if (e && p) varianceMinutes = diffMinutes(e, p)\n\n const variance = varianceMinutes == null ? '' : formatVariance(varianceMinutes)\n const varianceSign: 0 | 1 | -1 =\n !variance || varianceMinutes == null ? 0 : varianceMinutes > 0 ? 1 : -1\n\n // Breakdown, most-real first. This is what a screen reader reads and what\n // hover reveals, so it uses WORDS \u2014 the glyphs are decorative by design.\n let title = ''\n if (a) title += `${c.levelLabels.actual}: ${buildCompactDate(a, c).text}`\n if (e) title += (title ? '\\n' : '') + `${c.levelLabels.estimated}: ${buildCompactDate(e, c).text}`\n if (p) title += (title ? '\\n' : '') + `${c.levelLabels.planned}: ${buildCompactDate(p, c).text}`\n\n const result: CompactTimestamp = Object.freeze({\n level,\n glyph: c.glyphs[level],\n date,\n variance,\n varianceSign,\n title,\n isEmpty: false,\n })\n return canCache ? levels.set(key, result) : result\n }\n\n return {\n config: c,\n format,\n formatLevels,\n _cacheSize: () => values.size() + levels.size(),\n }\n}\n\nconst formatters = new Map<string, CompactDateFormatter>()\n\n/**\n * Get (or build) the memoised formatter for a config.\n *\n * Hoist this \u2014 `DateCell` holds it in a `useMemo` \u2014 so the per-cell cost is a\n * single `Map.get` on the raw value and nothing else. Calling it per cell still\n * works and is not catastrophic (one small key string), but it is waste.\n */\nexport function getCompactDateFormatter(config?: CompactDateConfig): CompactDateFormatter {\n const resolved = resolveConfig(config)\n const key = configKey(resolved)\n const hit = formatters.get(key)\n if (hit) return hit\n const made = buildFormatter(resolved)\n formatters.set(key, made)\n return made\n}\n\n/** Convenience single-value entry point. Prefer the formatter in hot code. */\nexport function formatDateCompact(value: DateInput, config?: CompactDateConfig): CompactDate {\n return getCompactDateFormatter(config).format(value)\n}\n\n/** Convenience triplet entry point. Prefer the formatter in hot code. */\nexport function formatTimestampLevels(\n planned: DateInput,\n estimated: DateInput,\n actual: DateInput,\n config?: CompactDateConfig,\n): CompactTimestamp {\n return getCompactDateFormatter(config).formatLevels(planned, estimated, actual)\n}\n\n/**\n * Reset every cache. Tests only \u2014 `referenceYear` is baked into the formatter\n * key, so production code never needs this.\n */\nexport function __resetCompactDateCaches(): void {\n formatters.clear()\n localePatterns.clear()\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }