@declarion/react 0.60.0 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist-lib/ActionDialog-uiuse5W8.js +374 -0
  2. package/dist-lib/ActionResultDialog.impl-BUBm9Ck3.js +273 -0
  3. package/dist-lib/ActionRunner-DAxgnKB3.js +1440 -0
  4. package/dist-lib/AdminCatalogPage.impl-BJGn7EvA.js +441 -0
  5. package/dist-lib/{AgentChatPanel.impl-BY-Ir7Sh.js → AgentChatPanel.impl-8bw8J-xV.js} +358 -319
  6. package/dist-lib/AgentOpenFollower.impl-Cga1q7_e.js +81 -0
  7. package/dist-lib/AssociatedBlock-D6qDYmRO.js +1515 -0
  8. package/dist-lib/AuthShell-DdiughRT.js +361 -0
  9. package/dist-lib/ChangePasswordDialog-DFe7lVQg.js +12 -0
  10. package/dist-lib/ChangePasswordDialog.impl-DtSIaP-A.js +194 -0
  11. package/dist-lib/CommandPalette.impl-Db3AFA5w.js +383 -0
  12. package/dist-lib/CopyButton-C0iEvaT1.js +119 -0
  13. package/dist-lib/DirtyTabsCloseDialog.impl-DWaFaWKn.js +191 -0
  14. package/dist-lib/{DraggableChildrenTable-CtL7rdT6.js → DraggableChildrenTable-Cy8uevS_.js} +45 -44
  15. package/dist-lib/DynamicIcon-DuBSz6TZ.js +133 -0
  16. package/dist-lib/FieldRow-BXBBFOZh.js +157 -0
  17. package/dist-lib/FilterChips-8fMDBXHp.js +1031 -0
  18. package/dist-lib/Forgot.impl-CmT5A__V.js +105 -0
  19. package/dist-lib/{Grid-CYERLdXO.js → Grid-Cg29k0jv.js} +98 -99
  20. package/dist-lib/Icons-Dzl-AkD_.d.ts +159 -0
  21. package/dist-lib/Icons-lt-7lhYR.js +151 -0
  22. package/dist-lib/ImpersonationBanner.impl-CBJJx6an.js +76 -0
  23. package/dist-lib/ImpersonationStartModal.impl-RaZcsJpG.js +158 -0
  24. package/dist-lib/Kbd-CNttVu0z.js +23 -0
  25. package/dist-lib/{LayoutRenderer-B08IJKsZ.js → LayoutRenderer-DEHtYtzV.js} +965 -942
  26. package/dist-lib/{ListCardsBody-Dje_rays.js → ListCardsBody-BAwFR3yO.js} +46 -52
  27. package/dist-lib/{MarkdownRenderer-N0IWjTH5.js → MarkdownRenderer-kNEMr6K_.js} +15 -16
  28. package/dist-lib/MenuItem-CfkVXPvC.js +140 -0
  29. package/dist-lib/NotFoundPage.impl-ZSBn4WWb.js +68 -0
  30. package/dist-lib/PageHeader-tw4pX3lI.js +71 -0
  31. package/dist-lib/PageShell-tI-mm0C5.js +47 -0
  32. package/dist-lib/Pill-D-wsfRhx.js +42 -0
  33. package/dist-lib/Preferences.impl-BG9XBZDf.js +162 -0
  34. package/dist-lib/Profile.impl-CbzSzxyG.js +527 -0
  35. package/dist-lib/PropertyGridEditor-BTjscqfz.js +4378 -0
  36. package/dist-lib/RecordHeader-Bv9nJXnG.js +217 -0
  37. package/dist-lib/RecordIdBadge-C3MgoZvt.js +25 -0
  38. package/dist-lib/RefreshControl-Ce-T_wSQ.js +195 -0
  39. package/dist-lib/Reset.impl-Cesyqt5p.js +168 -0
  40. package/dist-lib/SSOCallbackPage.impl-BC_W9nQA.js +31 -0
  41. package/dist-lib/SectionCard-VonaiLrx.js +150 -0
  42. package/dist-lib/SignUp.impl-C1KCQbfZ.js +212 -0
  43. package/dist-lib/SmartDetailPage.impl-8iOAMYQh.js +1609 -0
  44. package/dist-lib/SmartListPage.impl-Cc4Zwz5f.js +2818 -0
  45. package/dist-lib/SmartRecordListPage.impl-xTSohkqG.js +795 -0
  46. package/dist-lib/{SortHeaderMenu-DKKeCGTH.js → SortHeaderMenu-BKTrq0Wb.js} +23 -23
  47. package/dist-lib/TenantParamsPage.impl-DMuSs3eP.js +306 -0
  48. package/dist-lib/TwoFA.impl-BClZ3ndk.js +125 -0
  49. package/dist-lib/{cardProjection-nveYLvHR.js → cardProjection-Cr7fG6wJ.js} +134 -133
  50. package/dist-lib/declarion-react.css +1 -1
  51. package/dist-lib/format-count-CSEFw2ht.js +943 -0
  52. package/dist-lib/headerActionZone-bef-tZZ7.js +14 -0
  53. package/dist-lib/{stores/icon-registry.d.ts → icon-registry-CUT4eF63.d.ts} +14 -11
  54. package/dist-lib/icons.d.ts +20 -4
  55. package/dist-lib/icons.js +3 -2
  56. package/dist-lib/index.d.ts +2516 -150
  57. package/dist-lib/index.js +1532 -5053
  58. package/dist-lib/page-inset-D_kkVwwN.js +9 -0
  59. package/dist-lib/page-state-eA6J_KIR.js +124 -0
  60. package/dist-lib/param-editors-9yJr7xmN.js +201 -0
  61. package/dist-lib/payload-B2wODLAX.js +86 -0
  62. package/dist-lib/{peekDraftStore-DSExeoAh.js → peekDraftStore-D4GRsRKW.js} +44 -43
  63. package/dist-lib/registry-BpzE8-h8.js +119 -0
  64. package/dist-lib/screen-back-Cs4kzeqD.js +44 -0
  65. package/dist-lib/testing.d.ts +53 -56
  66. package/dist-lib/testing.js +54 -55
  67. package/dist-lib/use-filter-value-labels-DuqvAIVG.js +413 -0
  68. package/dist-lib/{useAgentConversation-BavrHfrU.js → useAgentConversation-D210VDCQ.js} +158 -169
  69. package/dist-lib/useAuth-CR2YKKXb.js +49 -0
  70. package/dist-lib/useBranding-Ckp_AuJb.js +41 -0
  71. package/dist-lib/useBrandingChrome-bKTXXDLy.js +170 -0
  72. package/dist-lib/useCurrentLocation-BdngVeQv.js +22 -0
  73. package/dist-lib/useCurrentScreen--UovgvRj.js +2511 -0
  74. package/dist-lib/useImpersonation-DNV23Ks1.js +35 -0
  75. package/dist-lib/useObject-1OCeV34A.js +26 -0
  76. package/dist-lib/useOwnRefresh-DkOuM4yo.js +435 -0
  77. package/dist-lib/useParams-ei6w4I7w.js +133 -0
  78. package/dist-lib/useProperties-CbdhlhZd.js +81 -0
  79. package/dist-lib/useResponsiveMode-DIR1bZfo.d.ts +1786 -0
  80. package/dist-lib/useScreenBack-J861tbwn.js +71 -0
  81. package/dist-lib/useTabNavigate-BZiW4q3M.js +78 -0
  82. package/dist-lib/useTabTitle-CZZnWIQi.js +22 -0
  83. package/dist-lib/utils-D_QDpB8_.js +11 -0
  84. package/dist-lib/{value-By1-WJ8J.js → value-CDCeHgOv.js} +8 -22
  85. package/dist-lib/{action-dispatch-DbiOpvd6.js → variants-CbAwl3Mn.js} +734 -740
  86. package/dist-lib/vite/index.d.ts +42 -16
  87. package/dist-lib/window-election-CHIvIZwx.js +45 -0
  88. package/package.json +17 -24
  89. package/dist-lib/DetailAuditStrip-B9p1XhjC.js +0 -288
  90. package/dist-lib/DynamicIcon-DW5krHuX.js +0 -280
  91. package/dist-lib/RefreshControl-BEWSHtAC.js +0 -399
  92. package/dist-lib/SmartDetailPage.impl-CYiM-ITJ.js +0 -1565
  93. package/dist-lib/SmartListPage.impl-Db_Pv9Xc.js +0 -3051
  94. package/dist-lib/SmartRecordListPage.impl-hbbLglC1.js +0 -780
  95. package/dist-lib/api/agents.d.ts +0 -140
  96. package/dist-lib/api/auth-redirect.d.ts +0 -3
  97. package/dist-lib/api/auth.d.ts +0 -26
  98. package/dist-lib/api/batch.d.ts +0 -25
  99. package/dist-lib/api/client.d.ts +0 -51
  100. package/dist-lib/api/data.d.ts +0 -153
  101. package/dist-lib/api/entities.d.ts +0 -149
  102. package/dist-lib/api/events.d.ts +0 -91
  103. package/dist-lib/api/params.d.ts +0 -28
  104. package/dist-lib/api/properties.d.ts +0 -3
  105. package/dist-lib/api/schema.d.ts +0 -2
  106. package/dist-lib/api/status.d.ts +0 -2
  107. package/dist-lib/app.d.ts +0 -1
  108. package/dist-lib/components/actions/ActionButton.d.ts +0 -18
  109. package/dist-lib/components/actions/ActionDialog.d.ts +0 -20
  110. package/dist-lib/components/actions/ActionResultDialog.d.ts +0 -22
  111. package/dist-lib/components/actions/ActionRunner.d.ts +0 -62
  112. package/dist-lib/components/actions/ObjectActionBar.d.ts +0 -29
  113. package/dist-lib/components/actions/PropertyGridEditor.d.ts +0 -20
  114. package/dist-lib/components/actions/ResponsiveActionBar.d.ts +0 -259
  115. package/dist-lib/components/actions/RowActionsKebab.d.ts +0 -20
  116. package/dist-lib/components/agents/AgentChatPanel.d.ts +0 -3
  117. package/dist-lib/components/agents/AgentChatPanel.impl.d.ts +0 -14
  118. package/dist-lib/components/agents/AgentConversationDrawer.d.ts +0 -11
  119. package/dist-lib/components/agents/AgentElicitForm.d.ts +0 -27
  120. package/dist-lib/components/agents/AgentPicker.d.ts +0 -8
  121. package/dist-lib/components/agents/transcript-runs.d.ts +0 -29
  122. package/dist-lib/components/chrome/AssociationTabs.d.ts +0 -9
  123. package/dist-lib/components/chrome/AuditMetaStrip.d.ts +0 -11
  124. package/dist-lib/components/chrome/Breadcrumbs.d.ts +0 -14
  125. package/dist-lib/components/chrome/HighlightsStrip.d.ts +0 -10
  126. package/dist-lib/components/chrome/PageHeader.d.ts +0 -16
  127. package/dist-lib/components/chrome/PageShell.d.ts +0 -7
  128. package/dist-lib/components/chrome/RecordHeader.d.ts +0 -17
  129. package/dist-lib/components/chrome/headerActionZone.d.ts +0 -27
  130. package/dist-lib/components/detail-layout/AssociatedBlock.d.ts +0 -20
  131. package/dist-lib/components/detail-layout/AssociatedToolbar.d.ts +0 -13
  132. package/dist-lib/components/detail-layout/ChildrenBlock.d.ts +0 -16
  133. package/dist-lib/components/detail-layout/ChildrenCards.d.ts +0 -2
  134. package/dist-lib/components/detail-layout/ChildrenList.d.ts +0 -2
  135. package/dist-lib/components/detail-layout/ChildrenTable.d.ts +0 -2
  136. package/dist-lib/components/detail-layout/ChildrenTimeline.d.ts +0 -2
  137. package/dist-lib/components/detail-layout/DetailAuditStrip.d.ts +0 -12
  138. package/dist-lib/components/detail-layout/DetailHighlights.d.ts +0 -14
  139. package/dist-lib/components/detail-layout/DraggableChildrenTable.d.ts +0 -16
  140. package/dist-lib/components/detail-layout/EditableChildrenTable.d.ts +0 -16
  141. package/dist-lib/components/detail-layout/ErrorSummary.d.ts +0 -11
  142. package/dist-lib/components/detail-layout/EvidenceBlock.d.ts +0 -6
  143. package/dist-lib/components/detail-layout/FieldRow.d.ts +0 -23
  144. package/dist-lib/components/detail-layout/FieldsBlock.d.ts +0 -8
  145. package/dist-lib/components/detail-layout/LayoutColumn.d.ts +0 -9
  146. package/dist-lib/components/detail-layout/LayoutRenderer.d.ts +0 -46
  147. package/dist-lib/components/detail-layout/LayoutRow.d.ts +0 -8
  148. package/dist-lib/components/detail-layout/LayoutTabs.d.ts +0 -8
  149. package/dist-lib/components/detail-layout/PropertiesBlock.d.ts +0 -8
  150. package/dist-lib/components/detail-layout/QuickAddForm.d.ts +0 -10
  151. package/dist-lib/components/detail-layout/SectionBlock.d.ts +0 -8
  152. package/dist-lib/components/detail-layout/StatusesBlock.d.ts +0 -8
  153. package/dist-lib/components/detail-layout/TimelineComposer.d.ts +0 -10
  154. package/dist-lib/components/detail-layout/blockMeta.d.ts +0 -5
  155. package/dist-lib/components/detail-layout/index.d.ts +0 -21
  156. package/dist-lib/components/detail-layout/useManualColumnResize.d.ts +0 -25
  157. package/dist-lib/components/detail-layout/useQuickAdd.d.ts +0 -16
  158. package/dist-lib/components/detail-layout/widgets/EntityScorecardWidget.d.ts +0 -2
  159. package/dist-lib/components/detail-layout/widgets/JsonDiffWidget.d.ts +0 -2
  160. package/dist-lib/components/detail-layout/widgets/MonacoJson.d.ts +0 -9
  161. package/dist-lib/components/detail-layout/widgets/WidgetHost.d.ts +0 -9
  162. package/dist-lib/components/detail-layout/widgets/builtins.d.ts +0 -1
  163. package/dist-lib/components/detail-layout/widgets/canonicalizeJson.d.ts +0 -1
  164. package/dist-lib/components/detail-layout/widgets/monacoBootstrap.d.ts +0 -1
  165. package/dist-lib/components/detail-layout/widgets/registry.d.ts +0 -14
  166. package/dist-lib/components/fields/BoolField.d.ts +0 -2
  167. package/dist-lib/components/fields/EmailField.d.ts +0 -2
  168. package/dist-lib/components/fields/EnumField.d.ts +0 -2
  169. package/dist-lib/components/fields/IntArrayField.d.ts +0 -2
  170. package/dist-lib/components/fields/JsonEditor.d.ts +0 -10
  171. package/dist-lib/components/fields/JsonField.d.ts +0 -3
  172. package/dist-lib/components/fields/MultilangArrayField.d.ts +0 -2
  173. package/dist-lib/components/fields/MultilangField.d.ts +0 -2
  174. package/dist-lib/components/fields/MultilangTextField.d.ts +0 -2
  175. package/dist-lib/components/fields/NumberField.d.ts +0 -2
  176. package/dist-lib/components/fields/PasswordField.d.ts +0 -2
  177. package/dist-lib/components/fields/PhoneField.d.ts +0 -2
  178. package/dist-lib/components/fields/RefCombobox.d.ts +0 -45
  179. package/dist-lib/components/fields/RefField.d.ts +0 -2
  180. package/dist-lib/components/fields/RichTextField.d.ts +0 -2
  181. package/dist-lib/components/fields/SecretField.d.ts +0 -2
  182. package/dist-lib/components/fields/StringArrayField.d.ts +0 -2
  183. package/dist-lib/components/fields/StringField.d.ts +0 -2
  184. package/dist-lib/components/fields/StructureField.d.ts +0 -2
  185. package/dist-lib/components/fields/TextField.d.ts +0 -2
  186. package/dist-lib/components/fields/TimestampField.d.ts +0 -2
  187. package/dist-lib/components/fields/UrlField.d.ts +0 -2
  188. package/dist-lib/components/fields/cells/factories/badge.d.ts +0 -2
  189. package/dist-lib/components/fields/cells/factories/boolPill.d.ts +0 -2
  190. package/dist-lib/components/fields/cells/factories/code.d.ts +0 -2
  191. package/dist-lib/components/fields/cells/factories/date.d.ts +0 -2
  192. package/dist-lib/components/fields/cells/factories/email.d.ts +0 -2
  193. package/dist-lib/components/fields/cells/factories/emptyCell.d.ts +0 -2
  194. package/dist-lib/components/fields/cells/factories/host-icons.d.ts +0 -17
  195. package/dist-lib/components/fields/cells/factories/json.d.ts +0 -2
  196. package/dist-lib/components/fields/cells/factories/link.d.ts +0 -2
  197. package/dist-lib/components/fields/cells/factories/markdown.d.ts +0 -2
  198. package/dist-lib/components/fields/cells/factories/markdownPreview.d.ts +0 -9
  199. package/dist-lib/components/fields/cells/factories/money.d.ts +0 -2
  200. package/dist-lib/components/fields/cells/factories/multilangInline.d.ts +0 -2
  201. package/dist-lib/components/fields/cells/factories/nextRun.d.ts +0 -2
  202. package/dist-lib/components/fields/cells/factories/number.d.ts +0 -2
  203. package/dist-lib/components/fields/cells/factories/passwordMask.d.ts +0 -2
  204. package/dist-lib/components/fields/cells/factories/phone.d.ts +0 -2
  205. package/dist-lib/components/fields/cells/factories/refLink.d.ts +0 -2
  206. package/dist-lib/components/fields/cells/factories/richTextPreview.d.ts +0 -2
  207. package/dist-lib/components/fields/cells/factories/statusPill.d.ts +0 -2
  208. package/dist-lib/components/fields/cells/factories/tagList.d.ts +0 -2
  209. package/dist-lib/components/fields/cells/factories/text.d.ts +0 -2
  210. package/dist-lib/components/fields/cells/factories/timestamp.d.ts +0 -3
  211. package/dist-lib/components/fields/cells/factories/url-helpers.d.ts +0 -12
  212. package/dist-lib/components/fields/cells/factories/url.d.ts +0 -2
  213. package/dist-lib/components/fields/cells/registry.d.ts +0 -21
  214. package/dist-lib/components/fields/index.d.ts +0 -28
  215. package/dist-lib/components/fields/langMap.d.ts +0 -2
  216. package/dist-lib/components/fields/secretValue.d.ts +0 -2
  217. package/dist-lib/components/file-widgets/CircleImage.d.ts +0 -2
  218. package/dist-lib/components/file-widgets/DocumentCard.d.ts +0 -2
  219. package/dist-lib/components/file-widgets/FileList.d.ts +0 -2
  220. package/dist-lib/components/file-widgets/Grid.d.ts +0 -2
  221. package/dist-lib/components/file-widgets/GridLazy.d.ts +0 -2
  222. package/dist-lib/components/file-widgets/ImageWidget.d.ts +0 -12
  223. package/dist-lib/components/file-widgets/LabeledSlots.d.ts +0 -2
  224. package/dist-lib/components/file-widgets/SquareImage.d.ts +0 -2
  225. package/dist-lib/components/file-widgets/UnknownFileWidget.d.ts +0 -3
  226. package/dist-lib/components/file-widgets/UploadFailureText.d.ts +0 -4
  227. package/dist-lib/components/file-widgets/WideBanner.d.ts +0 -2
  228. package/dist-lib/components/file-widgets/builtins.d.ts +0 -1
  229. package/dist-lib/components/file-widgets/cropper.d.ts +0 -14
  230. package/dist-lib/components/file-widgets/draft-scope.d.ts +0 -22
  231. package/dist-lib/components/file-widgets/helpers.d.ts +0 -15
  232. package/dist-lib/components/file-widgets/host.d.ts +0 -28
  233. package/dist-lib/components/file-widgets/index.d.ts +0 -16
  234. package/dist-lib/components/file-widgets/payload.d.ts +0 -21
  235. package/dist-lib/components/file-widgets/registry.d.ts +0 -5
  236. package/dist-lib/components/file-widgets/types.d.ts +0 -17
  237. package/dist-lib/components/file-widgets/upload.d.ts +0 -45
  238. package/dist-lib/components/file-widgets/useEmbedFileSrc.d.ts +0 -42
  239. package/dist-lib/components/file-widgets/value.d.ts +0 -4
  240. package/dist-lib/components/filters/FilterChips.d.ts +0 -14
  241. package/dist-lib/components/filters/FilterDrawer.d.ts +0 -32
  242. package/dist-lib/components/filters/filter-op-label.d.ts +0 -3
  243. package/dist-lib/components/layout/CommandPalette.d.ts +0 -21
  244. package/dist-lib/components/layout/DirtyTabsCloseDialog.d.ts +0 -9
  245. package/dist-lib/components/layout/ImpersonationBanner.d.ts +0 -11
  246. package/dist-lib/components/layout/ImpersonationFrame.d.ts +0 -11
  247. package/dist-lib/components/layout/ImpersonationStartModal.d.ts +0 -22
  248. package/dist-lib/components/layout/Layout.d.ts +0 -6
  249. package/dist-lib/components/layout/Rail.d.ts +0 -22
  250. package/dist-lib/components/layout/Sidebar.d.ts +0 -12
  251. package/dist-lib/components/layout/TabStrip.d.ts +0 -6
  252. package/dist-lib/components/layout/TenantChip.d.ts +0 -26
  253. package/dist-lib/components/layout/TopBar.d.ts +0 -22
  254. package/dist-lib/components/layout/tab-close.d.ts +0 -13
  255. package/dist-lib/components/list/ColumnPicker.d.ts +0 -20
  256. package/dist-lib/components/list/InlineEditCell.d.ts +0 -15
  257. package/dist-lib/components/list/PeekFieldCell.d.ts +0 -16
  258. package/dist-lib/components/list/QuickPeek.d.ts +0 -59
  259. package/dist-lib/components/list/ViewSwitcher.d.ts +0 -24
  260. package/dist-lib/components/list/peekDraftStore.d.ts +0 -6
  261. package/dist-lib/components/pages/AdminCatalogPage.d.ts +0 -1
  262. package/dist-lib/components/pages/DocumentsMenu.d.ts +0 -21
  263. package/dist-lib/components/pages/ExportMenu.d.ts +0 -30
  264. package/dist-lib/components/pages/NotFoundPage.d.ts +0 -1
  265. package/dist-lib/components/pages/RecordDocumentsPanel.d.ts +0 -41
  266. package/dist-lib/components/pages/SSOCallbackPage.d.ts +0 -1
  267. package/dist-lib/components/pages/SmartDetailPage.d.ts +0 -2
  268. package/dist-lib/components/pages/SmartDetailPage.impl.d.ts +0 -4
  269. package/dist-lib/components/pages/SmartListPage.d.ts +0 -2
  270. package/dist-lib/components/pages/SmartListPage.impl.d.ts +0 -4
  271. package/dist-lib/components/pages/SmartRecordListPage.d.ts +0 -2
  272. package/dist-lib/components/pages/SmartRecordListPage.impl.d.ts +0 -4
  273. package/dist-lib/components/pages/auth/AuthShell.d.ts +0 -18
  274. package/dist-lib/components/pages/auth/Forgot.d.ts +0 -1
  275. package/dist-lib/components/pages/auth/Reset.d.ts +0 -1
  276. package/dist-lib/components/pages/auth/SignIn.d.ts +0 -1
  277. package/dist-lib/components/pages/auth/SignUp.d.ts +0 -1
  278. package/dist-lib/components/pages/auth/TwoFA.d.ts +0 -1
  279. package/dist-lib/components/pages/auth/icons.d.ts +0 -6
  280. package/dist-lib/components/pages/exportRequest.d.ts +0 -69
  281. package/dist-lib/components/pages/list/DataCell.d.ts +0 -4
  282. package/dist-lib/components/pages/list/DeleteViewDialog.d.ts +0 -8
  283. package/dist-lib/components/pages/list/ListCardRow.d.ts +0 -39
  284. package/dist-lib/components/pages/list/ListCardsBody.d.ts +0 -33
  285. package/dist-lib/components/pages/list/ListFloatbar.d.ts +0 -29
  286. package/dist-lib/components/pages/list/ListFooter.d.ts +0 -26
  287. package/dist-lib/components/pages/list/ListHeader.d.ts +0 -26
  288. package/dist-lib/components/pages/list/ListNoRows.d.ts +0 -31
  289. package/dist-lib/components/pages/list/ListTable.d.ts +0 -33
  290. package/dist-lib/components/pages/list/ListTableRow.d.ts +0 -17
  291. package/dist-lib/components/pages/list/ListToolbar.d.ts +0 -46
  292. package/dist-lib/components/pages/list/ListUrlBanner.d.ts +0 -10
  293. package/dist-lib/components/pages/list/RowActionsCell.d.ts +0 -34
  294. package/dist-lib/components/pages/list/RowContextMenu.d.ts +0 -28
  295. package/dist-lib/components/pages/list/SaveViewDialog.d.ts +0 -10
  296. package/dist-lib/components/pages/list/SortHeaderMenu.d.ts +0 -14
  297. package/dist-lib/components/pages/list/cardProjection.d.ts +0 -67
  298. package/dist-lib/components/pages/list/column-sizing.d.ts +0 -14
  299. package/dist-lib/components/pages/list/columns.d.ts +0 -46
  300. package/dist-lib/components/pages/list/filter-meta.d.ts +0 -25
  301. package/dist-lib/components/pages/list/page-size.d.ts +0 -3
  302. package/dist-lib/components/pages/list/sortable-header.d.ts +0 -2
  303. package/dist-lib/components/pages/list/table-features.d.ts +0 -14
  304. package/dist-lib/components/pages/list/use-filter-value-labels.d.ts +0 -24
  305. package/dist-lib/components/pages/list/useActiveView.d.ts +0 -45
  306. package/dist-lib/components/pages/list/useHeaderReorder.d.ts +0 -26
  307. package/dist-lib/components/pages/list/useListColumnLayout.d.ts +0 -38
  308. package/dist-lib/components/pages/list/useListQuery.d.ts +0 -67
  309. package/dist-lib/components/pages/list/useListRowInteraction.d.ts +0 -61
  310. package/dist-lib/components/pages/list/useListSelection.d.ts +0 -31
  311. package/dist-lib/components/pages/list/useListSort.d.ts +0 -46
  312. package/dist-lib/components/pages/list/useListViews.d.ts +0 -57
  313. package/dist-lib/components/pages/list/useRowMenu.d.ts +0 -46
  314. package/dist-lib/components/pages/profile/Preferences.d.ts +0 -1
  315. package/dist-lib/components/pages/profile/Profile.d.ts +0 -7
  316. package/dist-lib/components/pages/tenant-params/TenantParamsPage.d.ts +0 -2
  317. package/dist-lib/components/params/ParamsBlock.d.ts +0 -13
  318. package/dist-lib/components/params/param-editors.d.ts +0 -20
  319. package/dist-lib/components/primitives/Avatar.d.ts +0 -6
  320. package/dist-lib/components/primitives/BoolToggle.d.ts +0 -7
  321. package/dist-lib/components/primitives/BrandGlyph.d.ts +0 -8
  322. package/dist-lib/components/primitives/BrandLogo.d.ts +0 -12
  323. package/dist-lib/components/primitives/Btn.d.ts +0 -19
  324. package/dist-lib/components/primitives/Check.d.ts +0 -7
  325. package/dist-lib/components/primitives/Chip.d.ts +0 -9
  326. package/dist-lib/components/primitives/ClassifiedFieldLocked.d.ts +0 -9
  327. package/dist-lib/components/primitives/Dropdown.d.ts +0 -20
  328. package/dist-lib/components/primitives/Fields.d.ts +0 -109
  329. package/dist-lib/components/primitives/HoverCard.d.ts +0 -15
  330. package/dist-lib/components/primitives/IconBtn.d.ts +0 -11
  331. package/dist-lib/components/primitives/Icons.d.ts +0 -136
  332. package/dist-lib/components/primitives/Kbd.d.ts +0 -4
  333. package/dist-lib/components/primitives/MenuItem.d.ts +0 -14
  334. package/dist-lib/components/primitives/Pill.d.ts +0 -11
  335. package/dist-lib/components/primitives/RecordIdBadge.d.ts +0 -8
  336. package/dist-lib/components/primitives/RowField.d.ts +0 -10
  337. package/dist-lib/components/primitives/SectionCard.d.ts +0 -24
  338. package/dist-lib/components/primitives/Spinner.d.ts +0 -3
  339. package/dist-lib/components/primitives/Tooltip.d.ts +0 -34
  340. package/dist-lib/components/primitives/dataTableStyles.d.ts +0 -4
  341. package/dist-lib/components/primitives/index.d.ts +0 -37
  342. package/dist-lib/components/shared/ChangePasswordDialog.d.ts +0 -9
  343. package/dist-lib/components/shared/ConfirmDialog.d.ts +0 -11
  344. package/dist-lib/components/shared/CopyButton.d.ts +0 -8
  345. package/dist-lib/components/shared/DynamicIcon.d.ts +0 -20
  346. package/dist-lib/components/shared/EmptyState.d.ts +0 -9
  347. package/dist-lib/components/shared/ErrorBoundary.d.ts +0 -17
  348. package/dist-lib/components/shared/LoadingSkeleton.d.ts +0 -6
  349. package/dist-lib/components/shared/LucideIcon.d.ts +0 -16
  350. package/dist-lib/components/shared/Markdown.d.ts +0 -3
  351. package/dist-lib/components/shared/MarkdownRenderer.d.ts +0 -11
  352. package/dist-lib/components/shared/RefreshControl.d.ts +0 -25
  353. package/dist-lib/components/shared/StatusGroupsDisplay.d.ts +0 -11
  354. package/dist-lib/components/shared/StatusStepper.d.ts +0 -13
  355. package/dist-lib/components/shared/toast/DeclarionToast.d.ts +0 -31
  356. package/dist-lib/components/shared/useOwnRefresh.d.ts +0 -9
  357. package/dist-lib/embed/EmbedAuthBootstrap.d.ts +0 -8
  358. package/dist-lib/embed/EmbedContext.d.ts +0 -50
  359. package/dist-lib/embed/EmbedDirtyReporter.d.ts +0 -10
  360. package/dist-lib/embed/EmbedHistoryTracker.d.ts +0 -1
  361. package/dist-lib/embed/EmbedLocationReporter.d.ts +0 -8
  362. package/dist-lib/embed/EmbedResizeReporter.d.ts +0 -6
  363. package/dist-lib/embed/EmbedUnsavedGuard.d.ts +0 -7
  364. package/dist-lib/embed/embed-dirty.d.ts +0 -24
  365. package/dist-lib/embed/embed-history.d.ts +0 -19
  366. package/dist-lib/embed/embed-nav-guard.d.ts +0 -20
  367. package/dist-lib/embed/file-src.d.ts +0 -63
  368. package/dist-lib/embed/handshake.d.ts +0 -57
  369. package/dist-lib/embed/index.d.ts +0 -19
  370. package/dist-lib/embed/params.d.ts +0 -75
  371. package/dist-lib/embed/protocol.d.ts +0 -165
  372. package/dist-lib/embed/screen-location.d.ts +0 -50
  373. package/dist-lib/embed/theme.d.ts +0 -34
  374. package/dist-lib/embed/token.d.ts +0 -57
  375. package/dist-lib/embed/useEmbedNavigate.d.ts +0 -48
  376. package/dist-lib/embed/useGlobalLinkInterceptor.d.ts +0 -66
  377. package/dist-lib/failure-BT54OLHy.js +0 -158
  378. package/dist-lib/format-count-DLFCdtME.js +0 -1771
  379. package/dist-lib/hooks/useActionData.d.ts +0 -61
  380. package/dist-lib/hooks/useAgentConversation.d.ts +0 -24
  381. package/dist-lib/hooks/useAllEntityData.d.ts +0 -16
  382. package/dist-lib/hooks/useAssociatedData.d.ts +0 -10
  383. package/dist-lib/hooks/useAuth.d.ts +0 -22
  384. package/dist-lib/hooks/useBranding.d.ts +0 -8
  385. package/dist-lib/hooks/useBrandingChrome.d.ts +0 -59
  386. package/dist-lib/hooks/useChildrenData.d.ts +0 -3
  387. package/dist-lib/hooks/useColumns.d.ts +0 -13
  388. package/dist-lib/hooks/useCurrentScreen.d.ts +0 -34
  389. package/dist-lib/hooks/useCursorEntityData.d.ts +0 -79
  390. package/dist-lib/hooks/useDebounce.d.ts +0 -1
  391. package/dist-lib/hooks/useEntity.d.ts +0 -2
  392. package/dist-lib/hooks/useEntityData.d.ts +0 -41
  393. package/dist-lib/hooks/useFilters.d.ts +0 -14
  394. package/dist-lib/hooks/useImpersonation.d.ts +0 -23
  395. package/dist-lib/hooks/useLanguage.d.ts +0 -4
  396. package/dist-lib/hooks/useLiveObject.d.ts +0 -9
  397. package/dist-lib/hooks/useLongPress.d.ts +0 -29
  398. package/dist-lib/hooks/useMutations.d.ts +0 -13
  399. package/dist-lib/hooks/useObject.d.ts +0 -11
  400. package/dist-lib/hooks/useObjectStatus.d.ts +0 -5
  401. package/dist-lib/hooks/usePageState.d.ts +0 -32
  402. package/dist-lib/hooks/usePageStateRuntime.d.ts +0 -27
  403. package/dist-lib/hooks/usePageStateTtl.d.ts +0 -11
  404. package/dist-lib/hooks/useParams.d.ts +0 -49
  405. package/dist-lib/hooks/useProperties.d.ts +0 -5
  406. package/dist-lib/hooks/useRealtimeThresholds.d.ts +0 -1
  407. package/dist-lib/hooks/useRegisterScreenTab.d.ts +0 -11
  408. package/dist-lib/hooks/useResponsiveMode.d.ts +0 -27
  409. package/dist-lib/hooks/useSSE.d.ts +0 -31
  410. package/dist-lib/hooks/useSchema.d.ts +0 -1
  411. package/dist-lib/hooks/useScreen.d.ts +0 -2
  412. package/dist-lib/hooks/useScreenBack.d.ts +0 -21
  413. package/dist-lib/hooks/useScreenTab.d.ts +0 -10
  414. package/dist-lib/hooks/useTabNavigate.d.ts +0 -34
  415. package/dist-lib/hooks/useTabSearchMirror.d.ts +0 -1
  416. package/dist-lib/hooks/useTabTitle.d.ts +0 -2
  417. package/dist-lib/hooks/useText.d.ts +0 -3
  418. package/dist-lib/hooks/useTimelineData.d.ts +0 -10
  419. package/dist-lib/hooks/useVersionWatcher.d.ts +0 -30
  420. package/dist-lib/hooks/useViews.d.ts +0 -26
  421. package/dist-lib/lib/action-dispatch.d.ts +0 -8
  422. package/dist-lib/lib/actions.d.ts +0 -254
  423. package/dist-lib/lib/anchor.d.ts +0 -36
  424. package/dist-lib/lib/brand-tokens.d.ts +0 -43
  425. package/dist-lib/lib/branding.d.ts +0 -20
  426. package/dist-lib/lib/canonical-url.d.ts +0 -27
  427. package/dist-lib/lib/capabilityPrefetch.d.ts +0 -6
  428. package/dist-lib/lib/child-config.d.ts +0 -24
  429. package/dist-lib/lib/children-validation.d.ts +0 -5
  430. package/dist-lib/lib/decimal-text.d.ts +0 -1
  431. package/dist-lib/lib/display-value.d.ts +0 -1
  432. package/dist-lib/lib/document-templates.d.ts +0 -11
  433. package/dist-lib/lib/download.d.ts +0 -21
  434. package/dist-lib/lib/evidence-verdict.d.ts +0 -11
  435. package/dist-lib/lib/failure.d.ts +0 -2
  436. package/dist-lib/lib/field-classification.d.ts +0 -61
  437. package/dist-lib/lib/field-regions.d.ts +0 -8
  438. package/dist-lib/lib/filter-evaluator.d.ts +0 -16
  439. package/dist-lib/lib/filters.d.ts +0 -93
  440. package/dist-lib/lib/format-count.d.ts +0 -41
  441. package/dist-lib/lib/html-state.d.ts +0 -11
  442. package/dist-lib/lib/language.d.ts +0 -19
  443. package/dist-lib/lib/longPressGesture.d.ts +0 -55
  444. package/dist-lib/lib/mass-edit.d.ts +0 -32
  445. package/dist-lib/lib/page-inset.d.ts +0 -3
  446. package/dist-lib/lib/quick-add.d.ts +0 -2
  447. package/dist-lib/lib/realtime-query-keys.d.ts +0 -22
  448. package/dist-lib/lib/realtime-reconcile.d.ts +0 -33
  449. package/dist-lib/lib/realtime-resync.d.ts +0 -23
  450. package/dist-lib/lib/record-documents-key.d.ts +0 -1
  451. package/dist-lib/lib/rich-text.d.ts +0 -14
  452. package/dist-lib/lib/rowClickGesture.d.ts +0 -26
  453. package/dist-lib/lib/safe-url.d.ts +0 -15
  454. package/dist-lib/lib/schema-routing.d.ts +0 -3
  455. package/dist-lib/lib/screen-back.d.ts +0 -70
  456. package/dist-lib/lib/scroll-restoration.d.ts +0 -90
  457. package/dist-lib/lib/size-value.d.ts +0 -16
  458. package/dist-lib/lib/sort.d.ts +0 -72
  459. package/dist-lib/lib/timestamp.d.ts +0 -53
  460. package/dist-lib/lib/toast.d.ts +0 -49
  461. package/dist-lib/lib/ui-actions.d.ts +0 -12
  462. package/dist-lib/lib/utils.d.ts +0 -9
  463. package/dist-lib/lib/variants.d.ts +0 -7
  464. package/dist-lib/lib/versionTracker.d.ts +0 -72
  465. package/dist-lib/lib/viewport-category.d.ts +0 -44
  466. package/dist-lib/main.d.ts +0 -1
  467. package/dist-lib/registry-CRPxNbkk.js +0 -1956
  468. package/dist-lib/safe-url-oSJw5pzO.js +0 -34
  469. package/dist-lib/stores/auth.d.ts +0 -16
  470. package/dist-lib/stores/list-layout.d.ts +0 -85
  471. package/dist-lib/stores/page-state.d.ts +0 -61
  472. package/dist-lib/stores/preferences.d.ts +0 -37
  473. package/dist-lib/stores/realtime.d.ts +0 -96
  474. package/dist-lib/stores/screen-registry.d.ts +0 -17
  475. package/dist-lib/stores/tabs.d.ts +0 -73
  476. package/dist-lib/types/api.d.ts +0 -580
  477. package/dist-lib/types/fieldType.d.ts +0 -2
  478. package/dist-lib/types/files.d.ts +0 -79
  479. package/dist-lib/types/ordmap.d.ts +0 -39
  480. package/dist-lib/types/schema.d.ts +0 -1089
  481. package/dist-lib/useCurrentScreen-BPq7HMF1.js +0 -7840
  482. package/dist-lib/useListQuery-CG1WM4cv.js +0 -103
  483. package/dist-lib/useOwnRefresh-C18iWRgr.js +0 -1167
  484. package/dist-lib/useProperties-C35JrjwQ.js +0 -83
  485. package/dist-lib/useTabSearchMirror-DKktWWLB.js +0 -175
  486. package/dist-lib/useText-BFDCTUSo.js +0 -952
  487. package/dist-lib/vite/fingerprint-plugin.d.ts +0 -44
@@ -0,0 +1,1786 @@
1
+ import { t as IconDef } from "./icon-registry-CUT4eF63.js";
2
+ import { ReactNode } from "react";
3
+ //#region src/types/ordmap.d.ts
4
+ /**
5
+ * OrderedMap preserves the insertion order of a string-keyed map while
6
+ * keeping O(1) lookup. It mirrors the Go `ordmap.OrderedMap[T]` container
7
+ * on the server side. Use it for schema sub-maps (entity fields, handler
8
+ * params, resolved_params) where YAML/JSON declaration order is part of
9
+ * the UI contract.
10
+ *
11
+ * JS objects already preserve insertion order for string keys (ES2015+),
12
+ * but the Go side emits JSON that is parsed into a plain object by
13
+ * default — this class wraps the hydrated object so call sites get a
14
+ * consistent API (`get`, `has`, iteration as `[name, value]` tuples) and
15
+ * the type system enforces read-only access.
16
+ */
17
+ declare class OrderedMap<T extends {
18
+ name?: string;
19
+ }> implements Iterable<[string, T]> {
20
+ #private;
21
+ constructor(items: readonly T[]);
22
+ /** Build from a `{ name: body }` object written in code: the key supplies
23
+ * `name`, insertion order is the JS property order, and bodies are
24
+ * type-checked. The wire equivalent, whose bodies cannot be, is `fromWire`. */
25
+ static fromObject<T extends {
26
+ name?: string;
27
+ }>(raw: Readonly<Record<string, Omit<T, "name">>> | null | undefined): OrderedMap<T>;
28
+ /** Build from a `{ name: body }` object decoded from JSON. Bodies are
29
+ * `unknown` and the cast to T is a claim about the server's envelope, not a
30
+ * check; anything written in code goes through `fromObject`, which checks. */
31
+ static fromWire<T extends {
32
+ name?: string;
33
+ }>(raw: Readonly<Record<string, unknown>> | null | undefined): OrderedMap<T>;
34
+ get length(): number;
35
+ has(name: string): boolean;
36
+ get(name: string): T | undefined;
37
+ /** Read-only items in declaration order. */
38
+ items(): readonly T[];
39
+ /** Names in declaration order. */
40
+ names(): readonly string[];
41
+ [Symbol.iterator](): IterableIterator<[string, T]>;
42
+ }
43
+ //#endregion
44
+ //#region src/types/files.d.ts
45
+ type FileFieldMode = "single" | "array" | "named_map" | "rich_text_inline";
46
+ interface FileFieldDisplay {
47
+ widget: string;
48
+ placeholder?: LocalizedString;
49
+ initials?: boolean;
50
+ crop_on_upload?: boolean;
51
+ aspect_ratio?: string;
52
+ focal_point?: boolean;
53
+ is_listable?: boolean;
54
+ listable_thumbnail?: string;
55
+ reorderable?: boolean;
56
+ bulk_upload?: boolean;
57
+ bulk_download?: boolean;
58
+ lazy_load?: boolean;
59
+ }
60
+ interface FileNamedSlotDef {
61
+ name: LocalizedString;
62
+ accepts?: string[];
63
+ max_size_bytes?: number;
64
+ aspect_ratio?: string;
65
+ storage_backend?: string;
66
+ }
67
+ interface FileFieldDef {
68
+ /** The field's code, populated by the hydrator from the enclosing map key -
69
+ * not a label a person reads. `OrderedMap.fromObject` takes bodies as
70
+ * `Omit<_, "name">`, so a body cannot state it. */
71
+ name: string;
72
+ mode: FileFieldMode;
73
+ accepts?: string[];
74
+ max_size_bytes?: number;
75
+ max_count?: number;
76
+ max_total_size_bytes?: number;
77
+ required?: boolean;
78
+ slots?: Record<string, FileNamedSlotDef>;
79
+ display?: FileFieldDisplay;
80
+ }
81
+ interface HydratedFile {
82
+ id: string;
83
+ filename: string;
84
+ content_type: string;
85
+ size_bytes: number;
86
+ sha256?: string;
87
+ width?: number;
88
+ height?: number;
89
+ page_count?: number;
90
+ uploaded_at?: string;
91
+ uploaded_by?: string;
92
+ url?: string;
93
+ presigned_url?: string;
94
+ derivations?: Record<string, string>;
95
+ metadata?: Record<string, unknown>;
96
+ position?: number;
97
+ slot?: string;
98
+ version?: {
99
+ number?: number;
100
+ is_current?: boolean;
101
+ supersedes_file_id?: string;
102
+ };
103
+ }
104
+ type NamedFileFieldValue = Record<string, HydratedFile | null>;
105
+ type FileFieldValue = HydratedFile | HydratedFile[] | NamedFileFieldValue | null;
106
+ interface UploadProgress {
107
+ loaded: number;
108
+ total: number;
109
+ pct: number;
110
+ }
111
+ interface UploadedFile {
112
+ id: string;
113
+ filename: string;
114
+ content_type: string;
115
+ size_bytes: number;
116
+ sha256: string;
117
+ dedup?: boolean;
118
+ width?: number;
119
+ height?: number;
120
+ url?: string;
121
+ metadata?: Record<string, unknown>;
122
+ }
123
+ //#endregion
124
+ //#region src/lib/filters.d.ts
125
+ /** A single node in the recursive filter tree. */
126
+ interface FilterNode {
127
+ /** Field condition */
128
+ field?: string;
129
+ op?: FilterOp;
130
+ value?: unknown;
131
+ /** OR group: child nodes are OR-ed. */
132
+ or?: FilterNode[];
133
+ /** Explicit AND group (rarely needed, top-level is implicit AND) */
134
+ and?: FilterNode[];
135
+ }
136
+ /** All supported filter operator codes. */
137
+ type FilterOp = "eq" | "not_eq" | "gt" | "gte" | "lt" | "lte" | "in" | "not_in" | "between" | "contains" | "starts_with" | "is_empty" | "is_not_empty" | "today" | "this_week" | "this_month" | "last_7_days" | "last_30_days" | "last_hour" | "last_24_hours";
138
+ /**
139
+ * Resolution status of one filter value, produced by the filter-value label
140
+ * resolver (`useFilterValueLabels`). `special` / `resolved` carry a `label`
141
+ * and are terminal-synchronous (no flicker); `loading` is a ref fetch in
142
+ * flight (render a skeleton, never the raw uuid); `unresolved` is a ref that
143
+ * could not be labeled (deleted / no access); `plain` is a literal/number/date
144
+ * (rendered raw, as before).
145
+ */
146
+ type FilterValueStatus = "special" | "resolved" | "loading" | "unresolved" | "plain";
147
+ /** Resolver result for one `(field, value)`: a label when known, the raw
148
+ * coerced value always (the terminal fallback). */
149
+ interface FilterValueLabel {
150
+ status: FilterValueStatus;
151
+ label?: string;
152
+ raw: string;
153
+ }
154
+ /** Maps one stored filter `(field, value)` to its human label. The single
155
+ * source of chip + drawer value labels; see `useFilterValueLabels`. */
156
+ type FilterValueResolver = (field: string, value: unknown) => FilterValueLabel;
157
+ /** Operators that don't take a value. */
158
+ declare const NO_VALUE_OPS: Set<FilterOp>;
159
+ /** Human-friendly display names for operators. */
160
+ declare const OP_LABELS: Record<FilterOp, string>;
161
+ type FilterURLErrorCode = "filter.url_not_json" | "filter.url_not_tree";
162
+ interface FilterURLState {
163
+ filters: FilterNode[];
164
+ error: string | null;
165
+ errorCode: FilterURLErrorCode | null;
166
+ }
167
+ /** Parse filters from URL search params (JSON `filters` param). */
168
+ declare function parseFilterURLState(searchParams: URLSearchParams): FilterURLState;
169
+ /** Parse the final tree and reject malformed URL state instead of treating it as no filter. */
170
+ declare function parseFiltersFromURL(searchParams: URLSearchParams): FilterNode[];
171
+ /**
172
+ * Write filters to URL search params.
173
+ *
174
+ * The parameter is present only while the tree differs from `defaults` - what
175
+ * this list resolves to with no `filters` in the URL, which is the active
176
+ * view's tree on a list screen and nothing anywhere else. So an empty tree is
177
+ * an OVERRIDE where a view supplies conditions (`filters=[]`, no conditions)
178
+ * and an absence where nothing does.
179
+ */
180
+ declare function setFiltersInURL(filters: FilterNode[], searchParams: URLSearchParams, defaults?: FilterNode[]): void;
181
+ /** Check if the filter tree has any OR groups. */
182
+ declare function hasOrGroups(nodes: FilterNode[]): boolean;
183
+ /** Count active field conditions in the filter tree. */
184
+ declare function countActiveFilters(nodes: FilterNode[]): number;
185
+ //#endregion
186
+ //#region src/lib/language.d.ts
187
+ declare const MANDATORY_LANGUAGE = "en";
188
+ declare function pickLocalized(ls: LocalizedString | null | undefined, language: string, deploymentLanguage: string): string | undefined;
189
+ type TextVars = Record<string, string | number>;
190
+ interface TextFn {
191
+ (code: string, fallback: string, vars?: TextVars): string;
192
+ (value: LocalizedString | null | undefined): string;
193
+ readonly language: string;
194
+ readonly deploymentLanguage: string;
195
+ }
196
+ declare function makeTextFn(messages: Record<string, LocalizedString> | undefined, language: string, deploymentLanguage: string): TextFn;
197
+ declare function pluralText(t: TextFn, code: string, count: number, english: {
198
+ one: string;
199
+ other: string;
200
+ }, more?: TextVars): string;
201
+ declare function textWithNodes(text: string, nodes: Record<string, ReactNode>): ReactNode[];
202
+ //#endregion
203
+ //#region src/types/schema.d.ts
204
+ type LocalizedString = Record<string, string>;
205
+ /**
206
+ * Where a `url` cell fetches an unknown host's site icon from.
207
+ *
208
+ * This is an outbound-request policy, not a visual style:
209
+ * google — one request per rendered hostname to www.google.com.
210
+ * direct — /favicon.ico from the site's own origin.
211
+ * none — no request at all; render the globe placeholder.
212
+ *
213
+ * Declared per column by `field.display.favicon_source`, and nowhere else -
214
+ * there is no parameter. Absent = `google`, today's rendered default. The
215
+ * server accepts exactly these three values.
216
+ */
217
+ type FaviconSource = "google" | "direct" | "none";
218
+ /**
219
+ * Per-entity empty-state copy declared in the manifest under
220
+ * `display.empty_state`. Title and Body are localized; LearnMoreURL is a
221
+ * plain string. The SDK falls back to a generic "No <plural> yet" derived
222
+ * from `display.name_plural` when this is absent. Read-only entities never
223
+ * render the legacy "Create your first..." copy regardless of EmptyStateDef.
224
+ */
225
+ interface EmptyStateDef {
226
+ title?: LocalizedString;
227
+ body?: LocalizedString;
228
+ learn_more_url?: string;
229
+ }
230
+ declare function fieldDisplayName(t: TextFn, field: EntityField, fieldName: string, entities?: Record<string, Entity>): string;
231
+ interface RefDisplay {
232
+ field: string;
233
+ }
234
+ interface RefConfig {
235
+ entity: string;
236
+ field?: string;
237
+ display?: RefDisplay;
238
+ fields?: string[];
239
+ /** Narrows the option set offered by this ref's entity-select dropdown (edit
240
+ * combobox or action-param picker) to rows matching these conditions - e.g.
241
+ * only `is_active = true`. Read-side only (not a write/security boundary).
242
+ * The shared filter tree, so a declared narrowing takes the same shapes a
243
+ * list query's `filters` takes. */
244
+ options_filter?: FilterNode[];
245
+ }
246
+ /** One declared filter-only option ({code, label}). `code` is stored into the
247
+ * filter when chosen (a literal or a `$user.*` token resolved server-side);
248
+ * `label` is the localized display string. Mirrors engine.FilterSpecialValue. */
249
+ interface FilterSpecialValue {
250
+ code: string;
251
+ label: LocalizedString;
252
+ }
253
+ /** Per-screen override of a field's filter_special_values, keyed in
254
+ * Screen.filter_special_values by the filter field code. */
255
+ interface ScreenFilterSpecialValues {
256
+ mode?: "append" | "replace" | "clear";
257
+ values?: FilterSpecialValue[];
258
+ }
259
+ interface UnitConfig {
260
+ storage: string;
261
+ display?: string;
262
+ }
263
+ interface EntityField {
264
+ file_ref?: {
265
+ storage_backend: string;
266
+ };
267
+ /**
268
+ * Populated by the schema hydrator from the enclosing map key. Tests and
269
+ * fixtures may omit it; production code always receives it set.
270
+ */
271
+ name?: string;
272
+ type: string;
273
+ /**
274
+ * Computed and stamped by the server: whether a CROSS-store read can order by
275
+ * this field. Meaningful only where the entity's list_pagination is "cursor".
276
+ * Asked rather than re-derived here - a second copy of the backend's type
277
+ * allowlist drifts the day either side moves, and the symptom is an operator
278
+ * clicking a column header and getting a raw backend error in place of the
279
+ * table.
280
+ */
281
+ cross_store_sortable?: boolean;
282
+ required?: boolean;
283
+ primary?: boolean;
284
+ auto?: boolean;
285
+ readonly?: boolean;
286
+ source?: string;
287
+ timezone?: string;
288
+ precision?: number;
289
+ scale?: number;
290
+ unit?: UnitConfig;
291
+ default?: unknown;
292
+ display?: {
293
+ name: LocalizedString;
294
+ description?: LocalizedString;
295
+ width?: number;
296
+ widget?: string;
297
+ is_listable?: boolean;
298
+ is_filterable?: boolean;
299
+ list_preview?: {
300
+ max_chars: number;
301
+ };
302
+ ref_display_field?: string;
303
+ span?: number | "full";
304
+ bool_labels?: {
305
+ true: LocalizedString;
306
+ false: LocalizedString;
307
+ };
308
+ value_map?: Record<string, {
309
+ label?: LocalizedString;
310
+ color?: string;
311
+ }>;
312
+ currency?: string;
313
+ currency_field?: string;
314
+ currency_display?: "symbol" | "narrow_symbol" | "code" | "name";
315
+ favicon_source?: FaviconSource;
316
+ };
317
+ values?: Array<{
318
+ code: string;
319
+ name: LocalizedString;
320
+ description?: LocalizedString;
321
+ color?: string;
322
+ }>;
323
+ enum?: string;
324
+ files?: FileFieldDef;
325
+ ref?: RefConfig;
326
+ /** Filter-only declared options (e.g. "Myself" -> $user.id) surfaced in this
327
+ * field's filter control. Inert everywhere else. A screen MAY override these
328
+ * per-screen via Screen.filter_special_values. */
329
+ filter_special_values?: FilterSpecialValue[];
330
+ structure?: string;
331
+ array?: boolean;
332
+ copyable?: boolean;
333
+ /**
334
+ * Names the data_classifications tier gating reads + writes on this field. Read-side: stripped from the
335
+ * row when the caller lacks `classification:<tier>:read`. Write-side:
336
+ * 422 FIELDS_FORBIDDEN when the caller writes the key without
337
+ * `classification:<tier>:write`. Frontend reads the tier's localized
338
+ * display name from the top-level `classifications:` map and
339
+ * cross-references `schema.entities.<code>.field_access.<field>` for
340
+ * the per-caller decision.
341
+ */
342
+ classification?: string;
343
+ }
344
+ /**
345
+ * Per-caller classification decision for one classified field on one
346
+ * entity. Populated by the schema endpoint
347
+ * from the caller's grants + authority tier; the frontend reads this
348
+ * to render the locked-widget badge ("🔒 Compensation"), disable write
349
+ * inputs, and surface the operator-facing `required_permission` hint
350
+ * to the user (e.g. "Ask your admin to grant you
351
+ * classification:compensation:read").
352
+ */
353
+ interface FieldAccessInfo {
354
+ read: "granted" | "denied";
355
+ write: "granted" | "denied";
356
+ classification: string;
357
+ /** Only set when read OR write is denied — the exact grant string an
358
+ * administrator needs to add to a role to unlock this field. */
359
+ required_permission?: string;
360
+ }
361
+ interface StructureDef {
362
+ name: LocalizedString;
363
+ description?: LocalizedString;
364
+ fields: OrderedMap<EntityField>;
365
+ }
366
+ type ChildDisplayMode = "table" | "timeline" | "list" | "cards";
367
+ interface TimelineConfig {
368
+ type_field?: string;
369
+ time_field?: string;
370
+ summary_field?: string;
371
+ content_field?: string;
372
+ author_field?: string;
373
+ direction_field?: string;
374
+ intent_field?: string;
375
+ scroll?: boolean;
376
+ auto_scroll?: "none" | "bottom" | "top";
377
+ }
378
+ interface CardsConfig {
379
+ columns_count?: number;
380
+ header_field?: string;
381
+ badge_field?: string;
382
+ }
383
+ interface ChildQuickAdd {
384
+ fields: string[];
385
+ defaults?: Record<string, unknown>;
386
+ placeholder?: LocalizedString;
387
+ }
388
+ interface ChildDisplay {
389
+ name: LocalizedString;
390
+ description?: LocalizedString;
391
+ icon?: string;
392
+ mode?: ChildDisplayMode;
393
+ columns?: string[];
394
+ sort?: string;
395
+ limit?: number;
396
+ timeline?: TimelineConfig;
397
+ cards?: CardsConfig;
398
+ editable?: boolean;
399
+ searchable?: boolean;
400
+ filters?: string[];
401
+ position_field?: string;
402
+ /**
403
+ * Row interaction for `mode: table`.
404
+ * - `navigate`: identity cell (first column) is a link to the child's
405
+ * detail; other cells read-only. Default for associated entities
406
+ * (child has its own detail screen).
407
+ * - `inline_edit`: click a cell to edit it; typing auto-saves after a
408
+ * 500ms debounce. One active cell at a time.
409
+ * - `row_edit`: a per-row Edit button puts the whole row into edit mode
410
+ * (all editable cells become inputs); an explicit Confirm/Cancel pair
411
+ * commits or discards. Nothing persists until Confirm - same flow as
412
+ * the "Add row" draft.
413
+ * - `readonly`: pure display.
414
+ */
415
+ interaction?: "navigate" | "inline_edit" | "row_edit" | "readonly";
416
+ }
417
+ interface ChildRelation {
418
+ entity: string;
419
+ foreign_key: string | string[];
420
+ display?: ChildDisplay;
421
+ quick_add?: ChildQuickAdd;
422
+ }
423
+ interface StatusDef {
424
+ code: string;
425
+ name: LocalizedString;
426
+ description?: LocalizedString;
427
+ color?: string;
428
+ is_final?: boolean;
429
+ }
430
+ interface StatusGroupDef {
431
+ name: LocalizedString;
432
+ description?: LocalizedString;
433
+ is_main?: boolean;
434
+ initial: string;
435
+ statuses: StatusDef[];
436
+ transitions?: Record<string, string[]>;
437
+ display_mode?: "pill" | "stepper";
438
+ }
439
+ interface PropertyDef {
440
+ name: LocalizedString;
441
+ description?: LocalizedString;
442
+ type: string;
443
+ display?: EntityField["display"];
444
+ values?: EntityField["values"];
445
+ enum?: string;
446
+ ref?: RefConfig;
447
+ structure?: string;
448
+ readonly?: boolean;
449
+ }
450
+ interface EnumDef {
451
+ name: LocalizedString;
452
+ description?: LocalizedString;
453
+ values: Array<{
454
+ code: string;
455
+ name: LocalizedString;
456
+ description?: LocalizedString;
457
+ color?: string;
458
+ }>;
459
+ }
460
+ interface ParameterDef {
461
+ name: LocalizedString;
462
+ description?: LocalizedString;
463
+ type: string;
464
+ structure?: string;
465
+ default?: unknown;
466
+ is_public?: boolean;
467
+ category?: string;
468
+ /** Override scopes accepted on writes. Subset of: env, tenant, role, user, object. Empty = all. */
469
+ scopes?: string[];
470
+ /** Members of a closed type - `enum`, or an enum-backed `string_array`. Resolved
471
+ * at load whether declared inline or by naming a shared enum, so this is the set
472
+ * the platform enforces. Same shape a field's members have. */
473
+ values?: EntityField["values"];
474
+ /** The shared enum this parameter names, when it names one. `values` is what to render. */
475
+ enum?: string;
476
+ }
477
+ interface AssociationDisplay {
478
+ name?: LocalizedString;
479
+ description?: LocalizedString;
480
+ icon?: string;
481
+ }
482
+ interface AssociationDef {
483
+ target: string;
484
+ display?: AssociationDisplay;
485
+ source: string;
486
+ code: string;
487
+ }
488
+ interface EntityMutations {
489
+ create?: boolean;
490
+ update?: boolean;
491
+ delete?: boolean;
492
+ restore?: boolean;
493
+ }
494
+ interface EntityVariant {
495
+ name?: string;
496
+ when?: FilterNode[];
497
+ actions?: string[];
498
+ }
499
+ /** A set of CRUD op flags, each present or absent. The YAML-decoded shape of
500
+ * an entity's `public` opt-out block (deny-by-default authorization). A flag being true means that op is open to ALL authenticated
501
+ * callers with no grant required. Mirrors engine.OpSet. On the /api/schema
502
+ * wire it always serializes as this object (never a bare bool, even though
503
+ * YAML accepts `public: true`). */
504
+ interface OpSet {
505
+ read?: boolean;
506
+ write?: boolean;
507
+ delete?: boolean;
508
+ }
509
+ interface CardSpec {
510
+ title_field?: string;
511
+ subtitle_field?: string;
512
+ badge_fields?: string[];
513
+ fields?: string[];
514
+ meta_fields?: string[];
515
+ hide_empty_fields?: boolean;
516
+ max_body_fields?: number;
517
+ }
518
+ interface Entity {
519
+ table: string;
520
+ read_sources?: string[];
521
+ primary_key?: string[];
522
+ virtual?: boolean;
523
+ readonly?: boolean;
524
+ mutations?: EntityMutations;
525
+ default_timezone?: string;
526
+ display: {
527
+ name: LocalizedString;
528
+ name_plural: LocalizedString;
529
+ description?: LocalizedString;
530
+ icon: string;
531
+ display_field?: string;
532
+ display_template?: string;
533
+ empty_state?: EmptyStateDef;
534
+ };
535
+ card?: CardSpec;
536
+ fields: OrderedMap<EntityField>;
537
+ filter_operators: Record<string, string[]>;
538
+ soft_delete?: string;
539
+ tenant_key?: string;
540
+ children?: ChildRelation[];
541
+ status_groups?: Record<string, StatusGroupDef>;
542
+ /** Computed by the server: this entity's rows are evidence-covered (an
543
+ * `evidence:` block, or an audit table the core audit source covers). Drives
544
+ * the evidence panel / `?expand=evidence` the same way `status_groups` drives
545
+ * the statuses surface. Absent for uncovered entities. */
546
+ evidence_covered?: boolean;
547
+ properties?: Record<string, PropertyDef>;
548
+ search_fields?: string[];
549
+ actions?: Record<string, Action>;
550
+ variants?: OrderedMap<EntityVariant>;
551
+ /**
552
+ * Platform-default action codes the engine must NOT inject for this entity
553
+ * (`__new`, `__edit`, `__create`, ...). Declared in the entity's YAML.
554
+ *
555
+ * A disabled `__new` closes the CREATE ROUTE too, not only the toolbar
556
+ * button: `<list>/new` is the detail route with the literal id `new`, so
557
+ * without this the form the removed button pointed at still rendered for
558
+ * anyone who typed the address or kept a bookmark.
559
+ */
560
+ disable_defaults?: string[];
561
+ handlers?: Record<string, HandlerDef>;
562
+ associations?: Record<string, AssociationDef>;
563
+ files?: OrderedMap<FileFieldDef>;
564
+ detail_screen?: string;
565
+ /** Standard CSV export gate. Absent block (or absent `enabled`) means export is enabled. Only an
566
+ * explicit `enabled: false` opts out, mirroring the Go ExportEnabled()
567
+ * helper. Same shape ships on Screen for per-screen overrides. */
568
+ export?: ExportConfig;
569
+ /** At most one row visible per caller. Loader requires either a
570
+ * caller-bound `prefilter` or `access: self` to back this. Frontend
571
+ * routes a singleton entity's detail screen at the screen's declared
572
+ * `route:` without a `:id` segment, and skips list-route registration. */
573
+ singleton?: boolean;
574
+ /** Carrier scope its `$params` writes land under (e.g. my_tenant -> "tenant",
575
+ * profile -> "user"). Absent = writes land under the entity's own code. Used
576
+ * by ParamsBlock to compute the attachable parameter set. */
577
+ params_scope?: string;
578
+ /** Server-enforced WHERE applied unconditionally on every read/write.
579
+ * Values may be literal scalars
580
+ * OR `$caller.*` expressions (`$caller.user_id`, `$caller.tenant_id`)
581
+ * resolved at request time. Security boundary, not a UX hint. */
582
+ prefilter?: Record<string, unknown>;
583
+ /** Hard entity-wide access tier gate (checked BEFORE the deny-by-default
584
+ * read/write decision). `"self"` restricts every read/write to rows where
585
+ * the field marked `owner: true` matches the caller's user id (chokepoint +
586
+ * with_check). `"tenant_admin"` admits any administrative standing in the
587
+ * active tenant (superadmin / tenant_owner / any role grant). `"superadmin"`
588
+ * admits only the platform-wide god flag. Empty = no tier floor (standard
589
+ * RBAC). The legacy `"platform_admin"` alias was removed. */
590
+ access?: "self" | "tenant_admin" | "superadmin";
591
+ /** Deny-by-default authorization. Absent = every op
592
+ * requires its `entity:<code>:<op>` grant. `public.<op>: true` opts that op
593
+ * out of the grant requirement, opening it to all authenticated callers
594
+ * (NOT anonymous). The Entity.Access floor is checked first and is never
595
+ * waived by `public`. Mirrors engine.Entity.Public (*OpSet). The wire form
596
+ * is always the object shape (never a bare bool). Replaces the removed
597
+ * boolean `permissions`. */
598
+ public?: OpSet;
599
+ /**
600
+ * Optional structural tree for placing and grouping actions across all
601
+ * placement slots. Absent = runtime composes a flat list from all actions
602
+ * matching each slot's visibility[], sorted by position ascending.
603
+ * Server delivers RBAC-pruned nodes in tagged-union wire format.
604
+ */
605
+ action_layout?: ActionLayoutNode[];
606
+ /**
607
+ * Per-caller classification access
608
+ * decision keyed by field name. Only present for entities that
609
+ * declare at least one classified field; absent on non-classification
610
+ * entities so the wire stays byte-equivalent for non-classification
611
+ * deployments. Frontend reads this map to render the locked-widget
612
+ * badge, disable write inputs, and surface the required_permission
613
+ * hint to the user.
614
+ */
615
+ field_access?: Record<string, FieldAccessInfo>;
616
+ /**
617
+ * Per-entity realtime opt-in. When true the entity is in the CDC
618
+ * publication, its list views auto-update from the SSE stream, and the
619
+ * toolbar shows a green "Live" indicator. Absent or false (default OFF)
620
+ * means the entity is not live: no indicator, and the always-present
621
+ * manual refresh control is the only freshness mechanism. Server emits
622
+ * this with `omitempty`, so `false` arrives as absent.
623
+ */
624
+ realtime?: boolean;
625
+ /**
626
+ * Per-entity row-count strategy for list views. "exact" (default, also
627
+ * the meaning of absent) shows an exact total; "estimated" shows an
628
+ * O(1) query-planner estimate, rendered coarse (~3.6M) for high-volume
629
+ * tables. Independent of `realtime`. The SDK keys list-view count
630
+ * precision on the response `meta.count_mode`, not this field, so a
631
+ * forced exact count still renders precisely.
632
+ */
633
+ count?: "exact" | "estimated";
634
+ /**
635
+ * Computed (server-side, never author-set) pagination mode the generated
636
+ * admin list MUST use: "offset" (numbered pages) or "cursor" (keyset /
637
+ * infinite scroll). "cursor" iff the entity declares `persistence.archive`
638
+ * AND the deployment has ClickHouse wired at boot - a cross-store hot+cold
639
+ * read cannot offset-paginate. Absent means "offset" (every plain Postgres /
640
+ * ClickHouse-only / ClickHouse-disabled-archive entity). The SDK branches the
641
+ * list UI on this.
642
+ */
643
+ list_pagination?: "offset" | "cursor";
644
+ /**
645
+ * Static, per-caller document-generation capability computed from the
646
+ * SYSTEM document template registry at schema projection (registry-only,
647
+ * no DB read, no ETag impact - system templates are boot-static and are
648
+ * covered by the schema fingerprint). Absent (or both flags falsy) means
649
+ * no system template applies for this caller/tenant/entity - the
650
+ * frontend's Generate affordance renders nothing UNLESS a tenant-uploaded
651
+ * template is found via the lazy `document.templates.available` runtime
652
+ * probe (tenant templates are runtime data and are never baked into the
653
+ * schema). `generate_one` gates the detail-scope toolbar; `generate_many`
654
+ * gates the list-scope toolbar.
655
+ */
656
+ documents?: {
657
+ generate_one?: boolean;
658
+ generate_many?: boolean;
659
+ };
660
+ }
661
+ interface ExportConfig {
662
+ enabled?: boolean;
663
+ }
664
+ declare function getPrimaryKeyFields(entity: Entity): string[];
665
+ type PkValues = Record<string, string>;
666
+ declare function extractPkValues(entity: Entity, record: Record<string, unknown>): PkValues;
667
+ declare function pkValuePartsToId(values: string[]): string;
668
+ declare function pkValuesToId(pkValues: PkValues): string;
669
+ declare function pkValuesToDetailId(entity: Entity, pkValues: PkValues): string;
670
+ declare function pkValuesFromId(id: string, expectedCount: number): string[] | null;
671
+ declare function resolveDetailRoute(list: Pick<Screen, "detail_screen"> | undefined, entity: Pick<Entity, "detail_screen"> | undefined, allScreens: Record<string, {
672
+ route?: string;
673
+ }> | undefined): string | null;
674
+ declare function buildDetailHrefFromId(list: Pick<Screen, "detail_screen">, id: string, entity: Pick<Entity, "detail_screen"> | undefined, allScreens: Record<string, {
675
+ route?: string;
676
+ }> | undefined): string | null;
677
+ declare function buildEntityDetailHref(list: Pick<Screen, "detail_screen">, entity: Entity | undefined, allScreens: Record<string, {
678
+ route?: string;
679
+ }> | undefined, pkValues: PkValues): string | null;
680
+ declare function buildRowDetailHref(list: Pick<Screen, "detail_screen">, entity: Entity | undefined, allScreens: Record<string, {
681
+ route?: string;
682
+ }> | undefined, row: Record<string, unknown>): string | null;
683
+ type SizeValue = string;
684
+ interface SectionBadgeConfig {
685
+ text: LocalizedString;
686
+ tone?: "indigo" | "emerald" | "amber" | "rose" | "sky" | "violet" | "slate" | "teal";
687
+ dot?: boolean;
688
+ }
689
+ interface SectionNode {
690
+ name: LocalizedString;
691
+ items: LayoutNode[];
692
+ collapsed?: boolean;
693
+ columns?: number;
694
+ icon?: string;
695
+ badge?: SectionBadgeConfig;
696
+ emphasis?: "primary" | "secondary";
697
+ hide_empty_fields?: boolean;
698
+ }
699
+ interface RowConfig {
700
+ items: LayoutNode[];
701
+ gap?: number;
702
+ resizable?: boolean;
703
+ stack_below?: number | "never";
704
+ width?: SizeValue;
705
+ height?: SizeValue;
706
+ }
707
+ interface ColumnConfig {
708
+ items: LayoutNode[];
709
+ gap?: number;
710
+ width?: SizeValue;
711
+ height?: SizeValue;
712
+ }
713
+ interface TabsConfig {
714
+ items: LayoutNode[];
715
+ }
716
+ interface WidgetNode {
717
+ type: string;
718
+ inputs?: Record<string, string>;
719
+ options?: Record<string, unknown>;
720
+ }
721
+ interface LayoutField {
722
+ code: string;
723
+ actions?: Action[];
724
+ structure?: string;
725
+ detail_screen?: string;
726
+ }
727
+ interface LayoutNode {
728
+ row?: RowConfig;
729
+ column?: ColumnConfig;
730
+ tabs?: TabsConfig;
731
+ section?: SectionNode;
732
+ children?: string;
733
+ associated?: string;
734
+ foreign_key?: string;
735
+ properties?: true | string[];
736
+ statuses?: true | string[];
737
+ fields?: LayoutField[];
738
+ widget?: WidgetNode;
739
+ width?: SizeValue;
740
+ height?: SizeValue;
741
+ min_width?: string;
742
+ max_width?: string;
743
+ label?: LocalizedString;
744
+ icon?: string;
745
+ mode?: ChildDisplayMode;
746
+ columns?: string[];
747
+ sort?: string;
748
+ limit?: number;
749
+ quick_add?: ChildQuickAdd;
750
+ timeline?: TimelineConfig;
751
+ cards?: CardsConfig;
752
+ editable?: boolean;
753
+ searchable?: boolean;
754
+ filters?: string[];
755
+ position_field?: string;
756
+ interaction?: "navigate" | "inline_edit" | "row_edit" | "readonly";
757
+ }
758
+ interface AuditLineDef {
759
+ label: LocalizedString;
760
+ at?: string;
761
+ by?: string;
762
+ }
763
+ interface AuditConfig {
764
+ enabled?: boolean;
765
+ lines?: AuditLineDef[];
766
+ }
767
+ /** Resolved per-screen visibility decision (deny-by-default authorization).
768
+ * Computed by the engine at load - authors write
769
+ * `public` / `required_permission`, never this. `public` and
770
+ * `required_permission` are mutually exclusive; `source` is the audit
771
+ * provenance (authored:public | authored | authored->public |
772
+ * derived:public-entity | derived:entity | derived:screen). Mirrors
773
+ * engine.ScreenVisibility. */
774
+ interface ScreenVisibility {
775
+ public: boolean;
776
+ required_permission: string;
777
+ source: string;
778
+ }
779
+ type ViewportKey = "phone" | "tablet" | "desktop";
780
+ type ListPresentation = "table" | "cards";
781
+ type RecordListPresentation = "split" | "drilldown" | "stacked";
782
+ type DetailTabsPresentation = "sections" | "scroll";
783
+ type DetailSidebarPresentation = "inline" | "hidden";
784
+ type RelatedRecordsPresentation = "cards" | "table";
785
+ interface ResponsiveDetailLayout {
786
+ header_card?: boolean;
787
+ tabs?: DetailTabsPresentation;
788
+ sidebar?: DetailSidebarPresentation;
789
+ related_records?: RelatedRecordsPresentation;
790
+ }
791
+ interface ResponsiveListBranch {
792
+ presentation?: ListPresentation;
793
+ }
794
+ interface ResponsiveDetailBranch {
795
+ header_card?: boolean;
796
+ tabs?: DetailTabsPresentation;
797
+ }
798
+ interface ScreenResponsiveViewport {
799
+ presentation?: ListPresentation | RecordListPresentation;
800
+ layout?: ResponsiveDetailLayout;
801
+ list?: ResponsiveListBranch;
802
+ detail?: ResponsiveDetailBranch;
803
+ }
804
+ type ScreenResponsive = Partial<Record<ViewportKey, ScreenResponsiveViewport>>;
805
+ interface ScreenVariant {
806
+ name?: string;
807
+ when?: FilterNode[];
808
+ items?: LayoutNode[];
809
+ sidebar?: LayoutNode[];
810
+ sidebar_width?: string;
811
+ highlights?: string[];
812
+ audit?: AuditConfig;
813
+ actions?: string[];
814
+ row_actions?: string[];
815
+ action_layout?: ActionLayoutNode[];
816
+ card?: CardSpec;
817
+ quick_peek?: QuickPeekConfig;
818
+ }
819
+ interface Screen {
820
+ type: "list" | "detail" | "custom" | "record_list";
821
+ entity?: string;
822
+ route: string;
823
+ component?: string;
824
+ /** Deny-by-default authorization. CUSTOM (entity-less) screens only: true
825
+ * makes the screen visible to all authenticated callers (data inside still
826
+ * gates per entity). A load error on an entity-bound screen. Mirrors
827
+ * engine.Screen.Public (*bool). */
828
+ public?: boolean;
829
+ /** Overrides the derived visibility rule for this screen (any grant string,
830
+ * typically `screen:<code>` to retarget or to tighten an entity-bound
831
+ * screen below its entity read). REPLACES the derived rule, not ANDs it. */
832
+ required_permission?: string;
833
+ /** Resolved visibility (engine-computed at load; never authored). */
834
+ visibility?: ScreenVisibility;
835
+ display?: {
836
+ name: LocalizedString;
837
+ /** Localized explanation of the screen, surfaced via the list-header info
838
+ * affordance (falls back to the entity description). Optional. */
839
+ description?: LocalizedString;
840
+ icon: string;
841
+ };
842
+ columns?: string[];
843
+ default_columns?: string[];
844
+ card?: CardSpec;
845
+ responsive?: ScreenResponsive;
846
+ filters?: string[];
847
+ default_filters?: string[];
848
+ search_fields?: string[];
849
+ sort_default?: string;
850
+ actions?: string[];
851
+ row_actions?: string[];
852
+ variants?: OrderedMap<ScreenVariant>;
853
+ items?: LayoutNode[];
854
+ sidebar?: LayoutNode[];
855
+ sidebar_width?: string;
856
+ highlights?: string[];
857
+ audit?: AuditConfig;
858
+ self?: boolean;
859
+ list_width?: string;
860
+ list_resizable?: boolean;
861
+ detail_screen?: string;
862
+ fixed_filters?: Record<string, unknown>;
863
+ /** Per-screen override of field-level filter_special_values, keyed by filter
864
+ * field code. Append/replace/clear the entity field's declared values for
865
+ * just this screen. Mirrors engine.Screen.FilterSpecialValues. */
866
+ filter_special_values?: Record<string, ScreenFilterSpecialValues>;
867
+ /** Per-field operator lists, keyed by filter field code, published by the
868
+ * server from the ONE vocabulary the query builder enforces
869
+ * (engine.OperatorsByFieldType, plus the $status / $property sets). The
870
+ * filter drawer renders exactly these; it keeps no table of its own,
871
+ * because a client-side guess had already diverged - array, multilang,
872
+ * json and bytes fields were offered two operators the builder rejects
873
+ * and denied `contains`, the one that works. */
874
+ filter_operators?: Record<string, string[]>;
875
+ views?: ViewDefinition[];
876
+ /** Code of the view this list OPENS on. A starting point, never a bound: the
877
+ * switcher still offers every other view and the unfiltered "All", and a
878
+ * viewer's own default view wins over it. */
879
+ default_view?: string;
880
+ /** Action slot promotion for list screens (rule-of-2). UI honors first 2.
881
+ * The detail-header `primary_record_actions` was removed; use action_layout. */
882
+ primary_actions?: string[];
883
+ primary_bulk_actions?: string[];
884
+ /** "open" (default) navigates to detail; "peek" opens QuickPeek drawer. */
885
+ on_row_click?: "open" | "peek";
886
+ quick_peek?: QuickPeekConfig;
887
+ inline_edit?: InlineEditConfig;
888
+ column_overrides?: Record<string, ColumnSpec>;
889
+ activity_rail?: ActivityRailConfig;
890
+ /** Per-screen override for the CSV export gate. Same shape as Entity.export.
891
+ * Either gate being false hides the toolbar Export menu and makes the
892
+ * POST endpoint return 403 EXPORT_DISABLED. */
893
+ export?: ExportConfig;
894
+ /**
895
+ * Optional per-screen structural tree for placing and grouping actions.
896
+ * When set, fully replaces entity.action_layout for this screen.
897
+ * Absent = inherit entity.action_layout (then default-flat if also absent).
898
+ * Server delivers RBAC-pruned nodes in tagged-union wire format.
899
+ */
900
+ action_layout?: ActionLayoutNode[];
901
+ }
902
+ interface QuickPeekConfig {
903
+ enabled?: boolean;
904
+ width?: number;
905
+ /**
906
+ * Explicit list of field codes to show. Highest precedence. When absent,
907
+ * `sections` is consulted; when that's also absent the platform falls back
908
+ * to all simple scalar fields on the entity (capped at 8).
909
+ */
910
+ fields?: string[];
911
+ /** Section names from the detail-layout. Their `fields:` get flattened. */
912
+ sections?: string[];
913
+ inline_editable?: boolean;
914
+ primary_action?: string;
915
+ }
916
+ interface InlineEditConfig {
917
+ enabled?: boolean;
918
+ /** dblclick | enter | always */
919
+ trigger?: string;
920
+ }
921
+ interface ColumnSpec {
922
+ inline_edit?: boolean;
923
+ width?: string;
924
+ }
925
+ interface ActivityRailConfig {
926
+ children: string;
927
+ /** left | right (default right) */
928
+ position?: string;
929
+ width?: number;
930
+ }
931
+ /** System view (preset) defined in screen YAML. Read-only. */
932
+ interface ViewDefinition {
933
+ code: string;
934
+ name: LocalizedString;
935
+ description?: LocalizedString;
936
+ icon?: string;
937
+ filters?: FilterNode[];
938
+ columns?: string[];
939
+ sort?: string;
940
+ }
941
+ interface NavNode {
942
+ screen?: string;
943
+ name?: LocalizedString;
944
+ icon?: string;
945
+ items?: NavNode[];
946
+ area?: string;
947
+ badge?: string;
948
+ children?: NavNode[];
949
+ }
950
+ interface AreaDef {
951
+ code: string;
952
+ name?: LocalizedString;
953
+ icon?: string;
954
+ position?: number;
955
+ home_screen?: string;
956
+ required_permission?: string;
957
+ }
958
+ interface AccentDef {
959
+ color?: string;
960
+ color_2?: string;
961
+ soft?: string;
962
+ ring?: string;
963
+ on_dark?: string;
964
+ on_light?: string;
965
+ }
966
+ interface HandlerParamDisplay {
967
+ name?: LocalizedString;
968
+ description?: LocalizedString;
969
+ widget?: string;
970
+ }
971
+ interface HandlerParam {
972
+ /** Populated by the schema hydrator from the enclosing map key. */
973
+ name?: string;
974
+ type?: string;
975
+ required?: boolean;
976
+ default?: unknown;
977
+ hidden?: boolean;
978
+ enum?: string;
979
+ values?: Array<{
980
+ code: string;
981
+ name: LocalizedString;
982
+ description?: LocalizedString;
983
+ color?: string;
984
+ }>;
985
+ /** `type: structure` (or structure-shaped json) param target: the top-level
986
+ * structure code whose fields the dialog renders as a nested form. */
987
+ structure?: string;
988
+ /** `type: ref` param target. Scalar entity-code string (shorthand) OR a
989
+ * structured RefConfig (non-id lookup / display). Normalize via
990
+ * normalizeRefConfig before use. */
991
+ ref?: string | RefConfig;
992
+ display?: HandlerParamDisplay;
993
+ /**
994
+ * Narrows the param's option set. Values may be literals or templates
995
+ * using the ui_steps interpolation vocabulary (e.g. "${params.other}").
996
+ * Semantics are type-specific: for type="status", a "status_group" key
997
+ * selects the group whose statuses are offered.
998
+ */
999
+ filter?: Record<string, string>;
1000
+ }
1001
+ interface ActionCondition {
1002
+ status?: string[];
1003
+ field?: string;
1004
+ op?: string;
1005
+ value?: unknown;
1006
+ }
1007
+ interface UISetFieldStep {
1008
+ target: string;
1009
+ value: unknown;
1010
+ }
1011
+ interface UIShowToastStep {
1012
+ kind?: "success" | "error" | "info";
1013
+ message: string;
1014
+ }
1015
+ interface UIStep {
1016
+ copy_to_clipboard?: string;
1017
+ set_field?: UISetFieldStep;
1018
+ focus_field?: string;
1019
+ show_toast?: UIShowToastStep;
1020
+ }
1021
+ /**
1022
+ * Leaf node in an action_layout tree. References a single action by code.
1023
+ * Wire format: {"kind": "action", "code": "<code>"}
1024
+ */
1025
+ interface ActionLayoutLeaf {
1026
+ kind: "action";
1027
+ code: string;
1028
+ }
1029
+ /**
1030
+ * Branch node in an action_layout tree. Groups child nodes under a labelled dropdown.
1031
+ * Wire format: {"kind": "group", "name": {...}, "icon": "...", "items": [...]}
1032
+ * Items is always non-empty (enforced by loader).
1033
+ */
1034
+ interface ActionLayoutGroup {
1035
+ kind: "group";
1036
+ name?: LocalizedString;
1037
+ icon?: string;
1038
+ items: ActionLayoutNode[];
1039
+ }
1040
+ /**
1041
+ * Discriminated union of all action_layout tree nodes.
1042
+ * Narrow via `node.kind === "action"` (leaf) or `node.kind === "group"` (branch).
1043
+ */
1044
+ type ActionLayoutNode = ActionLayoutLeaf | ActionLayoutGroup;
1045
+ /**
1046
+ * Single row-state condition for visible_if / enabled_if / conditions.
1047
+ * Operators: eq | ne | in | not_in | gt | lt | ge | le.
1048
+ */
1049
+ interface ActionConditionEntry {
1050
+ field?: string;
1051
+ op?: string;
1052
+ value?: unknown;
1053
+ status?: string[];
1054
+ }
1055
+ /**
1056
+ * Array of row-state conditions with AND semantics. YAML accepts both single
1057
+ * object and array form (see Go ActionConditionList unmarshal); wire format
1058
+ * from server is always array (server normalizes during schema response).
1059
+ */
1060
+ type ActionConditionList = ActionConditionEntry[];
1061
+ interface Action {
1062
+ /**
1063
+ * Server-side handler code. One of four dispatch fields.
1064
+ * Reason: the new wire format encodes dispatch mode by which field is set
1065
+ * (handler | association | widget | href), so an explicit `type` enum is
1066
+ * redundant and was removed. Exactly one of the four should be set per action.
1067
+ */
1068
+ handler?: string;
1069
+ /**
1070
+ * Association code for nav-only actions that navigate to a related list.
1071
+ * Reason: same dispatch-by-field-presence rule.
1072
+ */
1073
+ association?: string;
1074
+ /**
1075
+ * SDK widget registry name. The SDK has no widget registry yet: an action
1076
+ * carrying `widget` logs a warning and falls back to `onRun`.
1077
+ * Reason: lets actions render bespoke UI (e.g. inline picker) instead of
1078
+ * server-handled forms, without inventing a new entity per widget.
1079
+ */
1080
+ widget?: string;
1081
+ /**
1082
+ * Client-side navigation URL template (supports `${id}` and other row tokens).
1083
+ * Reason: replaces the implicit "edit"/"create" type enum - any href-driven
1084
+ * action (open a custom screen, deep-link a report) uses this field; the
1085
+ * server never dispatches it.
1086
+ */
1087
+ href?: string;
1088
+ /**
1089
+ * Widget-specific opaque metadata. Schema/Action loader passes through
1090
+ * untouched; the widget consumes its own keys.
1091
+ * Reason: keeps the Action shape stable as new widgets ship without
1092
+ * growing the typed surface for each one.
1093
+ */
1094
+ config?: Record<string, unknown>;
1095
+ entity?: string;
1096
+ display: {
1097
+ name: LocalizedString;
1098
+ icon: string;
1099
+ /**
1100
+ * Promotes the action to a header button (vs. dropdown item).
1101
+ * Reason: explicit per-action UX control replaces the old position<=10
1102
+ * heuristic, lets schema authors mark their headline action even when
1103
+ * other actions sort earlier.
1104
+ */
1105
+ primary?: boolean;
1106
+ /**
1107
+ * Render as icon-only button (no label text).
1108
+ * Reason: lets a dense toolbar host high-frequency actions without
1109
+ * cluttering the bar with labels; tooltip still shows display.name.
1110
+ */
1111
+ icon_only?: boolean;
1112
+ /**
1113
+ * Button size hint. Default "md".
1114
+ * Reason: secondary toolbars (associated blocks, inline editors) need
1115
+ * smaller buttons than primary header bars - the schema author picks.
1116
+ */
1117
+ size?: "sm" | "md" | "lg";
1118
+ /**
1119
+ * Keyboard shortcut hint (e.g. "Cmd+S"), carried on the wire. The SDK
1120
+ * neither renders it nor binds the key yet.
1121
+ */
1122
+ shortcut?: string;
1123
+ /**
1124
+ * Localized explanation of what the action does. Surfaces as the control
1125
+ * tooltip (precedence: disabled-reason > description > name) and the
1126
+ * ActionDialog subtitle. Optional; absent renders exactly as before.
1127
+ * Supersedes the removed `help` field.
1128
+ */
1129
+ description?: LocalizedString;
1130
+ };
1131
+ visibility?: string[];
1132
+ confirmation?: LocalizedString;
1133
+ conditions?: ActionCondition[];
1134
+ /**
1135
+ * Ordering within a placement slot and overflow priority. Lower = earlier
1136
+ * in bar AND last to overflow. Default 0; ties broken by action code.
1137
+ * Convention: step by 10 so a later action fits between two.
1138
+ */
1139
+ position?: number;
1140
+ /**
1141
+ * Hide the action when condition does not hold against current row.
1142
+ * Distinct from RBAC hide and from `enabled_if` disable. AND semantics
1143
+ * across array elements.
1144
+ */
1145
+ visible_if?: ActionConditionList;
1146
+ /**
1147
+ * Disable the action (greyed out + tooltip) when condition does not hold.
1148
+ * For bulk-mode multi-row selection, disabled if ANY selected row fails.
1149
+ */
1150
+ enabled_if?: ActionConditionList;
1151
+ /**
1152
+ * Localized tooltip shown when action is disabled by `enabled_if`.
1153
+ * Required when `enabled_if` is set; the schema loader enforces it.
1154
+ */
1155
+ enabled_if_reason?: LocalizedString;
1156
+ /** Forces confirm + danger styling. */
1157
+ destructive?: boolean;
1158
+ /** UI shows a toast instead of a blocking result modal; adds a navigation link if progress_screen is set. */
1159
+ long_running?: boolean;
1160
+ /** Screen code to navigate to after a long_running action starts (resolved via schema.screens). */
1161
+ progress_screen?: string;
1162
+ resolved_params?: OrderedMap<HandlerParam>;
1163
+ /**
1164
+ * Default values of params marked hidden+default by the action. The UI
1165
+ * seeds formData with these so filter templates resolve references to
1166
+ * prefilled siblings (e.g. "${params.status_group}") and so the
1167
+ * submission payload includes them. Not rendered in the modal.
1168
+ */
1169
+ resolved_hidden_defaults?: Record<string, unknown>;
1170
+ ui_steps?: UIStep[];
1171
+ /**
1172
+ * Server-derived: the action needs at least one selected row to be
1173
+ * meaningful (the list toolbar greys it while nothing is selected). Derived
1174
+ * from the handler's id-arity contract (cannot run without object IDs),
1175
+ * association mode, or an href `${id}` row-link. ABSENT means the server did
1176
+ * not derive it (older server, or widget/ui_steps modes) - consumers MUST
1177
+ * fall back to the list_floatbar slot proxy, NOT treat absent as false. See
1178
+ * actionRequiresSelection in lib/actions.ts.
1179
+ */
1180
+ requires_selection?: boolean;
1181
+ }
1182
+ interface LanguageDef {
1183
+ code: string;
1184
+ name: LocalizedString;
1185
+ }
1186
+ interface HandlerDef {
1187
+ code: string;
1188
+ type: string;
1189
+ entity?: string;
1190
+ display?: {
1191
+ name?: LocalizedString;
1192
+ description?: LocalizedString;
1193
+ icon?: string;
1194
+ };
1195
+ params?: OrderedMap<HandlerParam>;
1196
+ }
1197
+ interface Schema {
1198
+ languages: LanguageDef[];
1199
+ language: string;
1200
+ deployment_language: string;
1201
+ structures: Record<string, StructureDef>;
1202
+ entities: Record<string, Entity>;
1203
+ screens: Record<string, Screen>;
1204
+ navigation: NavNode[];
1205
+ actions: Record<string, Action>;
1206
+ handlers?: Record<string, HandlerDef>;
1207
+ enums: Record<string, EnumDef>;
1208
+ parameters: Record<string, ParameterDef>;
1209
+ messages?: Record<string, LocalizedString>;
1210
+ /**
1211
+ * Declared error types, code -> title per language. For rendering a STORED
1212
+ * code - on an agent turn, a job row, an audit row - in the reader's
1213
+ * language. An error answering a request carries its own title in the
1214
+ * response and needs none of this.
1215
+ *
1216
+ * Errors are NEVER declared under `messages`: a failure has a type, and a
1217
+ * type has a title.
1218
+ */
1219
+ errors?: Record<string, LocalizedString>;
1220
+ areas?: AreaDef[];
1221
+ accents?: Record<string, AccentDef>;
1222
+ /**
1223
+ * data_classifications catalog keyed by
1224
+ * tier code — display name + description + audit_on_read flag + icon
1225
+ * + sod_protected flag. Absent when the consumer declares no tiers
1226
+ * (preserves byte-equivalent wire shape for non-classification
1227
+ * deployments). Frontend resolves the localized tier name from this
1228
+ * map when rendering locked-widget badges.
1229
+ */
1230
+ classifications?: Record<string, ClassificationTierDef>;
1231
+ /**
1232
+ * Consumer-declared icon glyphs, keyed by the name referenced at `icon:`
1233
+ * call sites. Carries ONLY declared/overridden entries (the built-in ~119
1234
+ * travel as bare names, never here); absent when no module declares an
1235
+ * `icons:` block. The Admin loads this into the runtime icon registry
1236
+ * (setIconRegistry) so custom glyphs render across the chrome.
1237
+ */
1238
+ icons?: Record<string, IconDef>;
1239
+ }
1240
+ /**
1241
+ * One entry in the top-level classifications map.
1242
+ * Mirrors engine.DataClassification.
1243
+ */
1244
+ interface ClassificationTierDef {
1245
+ name: LocalizedString;
1246
+ description?: LocalizedString;
1247
+ audit_on_read?: boolean;
1248
+ icon?: string;
1249
+ /**
1250
+ * When true, the tier triggers stricter SoD controls: a platform owner's
1251
+ * reveal emits a distinct audit code, role self-assignment is refused, and
1252
+ * transitive role inheritance is hard-errored at load.
1253
+ */
1254
+ sod_protected?: boolean;
1255
+ }
1256
+ //#endregion
1257
+ //#region src/types/api.d.ts
1258
+ interface ListMeta {
1259
+ /**
1260
+ * Total matching rows. Present only when the request asked for a count
1261
+ * (`count=with` / `count=only` / `count=exact`). Absent (undefined) on a
1262
+ * window-only response (`count` omitted) - the page of rows arrives
1263
+ * without ever blocking on the count. Treat `count_mode === undefined` as
1264
+ * "no count yet" and ignore `total` then.
1265
+ */
1266
+ total?: number;
1267
+ page: number;
1268
+ per_page: number;
1269
+ /** Present only when a count was computed (see `total`). */
1270
+ total_pages?: number;
1271
+ has_more?: boolean;
1272
+ /**
1273
+ * How `total` was produced: "exact" (an exact COUNT(*)) or "estimated"
1274
+ * (an O(1) query-planner estimate). Absent when no count was computed.
1275
+ * The SDK keys display precision on this, NOT on the entity schema, so a
1276
+ * forced exact count renders precisely even on a `count: estimated`
1277
+ * entity.
1278
+ */
1279
+ count_mode?: "exact" | "estimated";
1280
+ }
1281
+ interface ListResponse<T = Record<string, unknown>> {
1282
+ data: T[];
1283
+ meta: ListMeta;
1284
+ $refs?: Refs;
1285
+ }
1286
+ interface DataResponse<T = Record<string, unknown>> {
1287
+ data: T;
1288
+ $refs?: Refs;
1289
+ }
1290
+ /**
1291
+ * A failure, in RFC 9457 Problem Details form - the one shape every Declarion
1292
+ * carrier sends. `type` is the identifier to branch on; its last path segment is
1293
+ * identical in every deployment. `title` is the sentence to SHOW: the server
1294
+ * already rendered it in this caller's language, and the browser holds no
1295
+ * catalogue to render one itself. A type's declared members are TOP-LEVEL, which
1296
+ * is why this is an index signature and not a fixed shape.
1297
+ */
1298
+ interface ApiErrorBody {
1299
+ type: string;
1300
+ status?: number;
1301
+ title: string;
1302
+ /** This occurrence. A DIAGNOSTIC, not the headline - and absent for a failure nothing recognised. */
1303
+ detail?: string;
1304
+ instance?: string;
1305
+ retryable: boolean;
1306
+ [member: string]: unknown;
1307
+ }
1308
+ declare class ApiError extends Error {
1309
+ status: number;
1310
+ /** The identifier to compare - the type's last path segment, e.g. `entity.not_found`. */
1311
+ code: string;
1312
+ /** The full `type`, e.g. `/errors/entity.not_found`. */
1313
+ type: string;
1314
+ /** Whether the same call can succeed later. From the DECLARATION, never computed from a status. */
1315
+ retryable: boolean;
1316
+ /** The diagnostic for this occurrence. Never the headline a user reads. */
1317
+ detail?: string;
1318
+ /** Bulk operation item index (present on validation errors for array requests). */
1319
+ index?: number;
1320
+ /** The untouched body, so a caller can re-detect a shape this class does not model. */
1321
+ raw?: unknown;
1322
+ constructor(status: number, body: Partial<ApiErrorBody>, raw?: unknown);
1323
+ /**
1324
+ * A declared member of this error's type. ONE accessor, so the six known
1325
+ * consumers (`constraint`, `row_version`, `did_you_mean`, `valid_parameters`,
1326
+ * `threshold`, `width`) do not each invent an access pattern.
1327
+ */
1328
+ ext<T = unknown>(member: string): T | undefined;
1329
+ }
1330
+ /**
1331
+ * Stable error codes for cursor-based list pagination. The server returns
1332
+ * these on ValidationError{Field:"after"} when an `after` token cannot be
1333
+ * resumed under current request conditions:
1334
+ *
1335
+ * - CURSOR_SEMANTICS_MISMATCH: the cursor was minted under different sort
1336
+ * semantics (multi-column ordering, NULL placement). Server bumped its
1337
+ * cursor format version since the cursor was issued.
1338
+ * - CURSOR_LANGUAGE_CHANGED: the cursor was minted in one language and the
1339
+ * request now reads in another. Issued so multilang sort cannot silently
1340
+ * re-order mid-pagination.
1341
+ *
1342
+ * UX contract for both: clear the `after` token and refetch page 1 under
1343
+ * the current conditions. EntityClient.list does this transparently;
1344
+ * direct apiFetch callers can recognise these codes to drive their own
1345
+ * retry logic.
1346
+ */
1347
+ declare const CURSOR_SEMANTICS_MISMATCH = "cursor.semantics_mismatch";
1348
+ declare const CURSOR_LANGUAGE_CHANGED = "cursor.language_changed";
1349
+ /** True if the error is a recoverable cursor-stale signal that warrants
1350
+ * refetching page 1 instead of surfacing to the user. */
1351
+ declare function isCursorStaleError(err: unknown): boolean;
1352
+ type TenantEnv = "production" | "staging" | "dev" | (string & {});
1353
+ interface Tenant {
1354
+ id: string;
1355
+ code: string;
1356
+ name: string;
1357
+ role: string;
1358
+ env?: TenantEnv;
1359
+ /**
1360
+ * Whether the caller has a `tenant_users` row for this tenant. Always
1361
+ * true for non-superadmins. For superadmins, `auth.list_tenants` also
1362
+ * returns non-membership tenants reachable via cross-tenant authority;
1363
+ * the switcher splits them into a separate "All tenants" section.
1364
+ */
1365
+ is_member?: boolean;
1366
+ }
1367
+ interface AuthUser {
1368
+ id: string;
1369
+ email: string;
1370
+ display_name: string;
1371
+ is_active: boolean;
1372
+ roles: string[];
1373
+ permissions?: string[];
1374
+ tenant?: Tenant;
1375
+ /** Populated only when the request is acting under an impersonation session. */
1376
+ impersonation?: ImpersonationInfo;
1377
+ created_at: string;
1378
+ updated_at: string;
1379
+ }
1380
+ /**
1381
+ * ImpersonationInfo is the read-side projection of the active session
1382
+ * surfaced by auth.me. Drives the banner, topbar chip, viewport frame,
1383
+ * and the "Exit impersonation" menu item.
1384
+ */
1385
+ interface ImpersonationInfo {
1386
+ session_id: string;
1387
+ real_user_id: string;
1388
+ real_user_email?: string;
1389
+ target_user_id: string;
1390
+ target_user_email?: string;
1391
+ reason: string;
1392
+ started_at: string;
1393
+ expires_at: string;
1394
+ }
1395
+ interface LoginResponse {
1396
+ expires_at: string;
1397
+ user: AuthUser;
1398
+ tenant?: Tenant;
1399
+ }
1400
+ interface CheckSetupResponse {
1401
+ needs_setup: boolean;
1402
+ }
1403
+ interface StatusInfo {
1404
+ group_code: string;
1405
+ status_code: string;
1406
+ status_name: LocalizedString;
1407
+ color?: string;
1408
+ set_by?: string;
1409
+ set_at: string;
1410
+ note?: string;
1411
+ }
1412
+ interface PropertyValue {
1413
+ property_code: string;
1414
+ name: LocalizedString;
1415
+ type: string;
1416
+ value: unknown;
1417
+ }
1418
+ interface PublicParam {
1419
+ code: string;
1420
+ name: LocalizedString;
1421
+ type: string;
1422
+ structure?: string;
1423
+ category: string;
1424
+ description?: LocalizedString;
1425
+ value: unknown;
1426
+ }
1427
+ /** Per-app legal/support URL set rendered in the auth-shell footer. */
1428
+ interface PublicLegalLinks {
1429
+ security_url?: string;
1430
+ privacy_url?: string;
1431
+ terms_url?: string;
1432
+ docs_url?: string;
1433
+ }
1434
+ interface BrandingIdentity {
1435
+ app_name?: string;
1436
+ app_logo?: string;
1437
+ app_initial?: string;
1438
+ ai_name?: string;
1439
+ wordmark?: string;
1440
+ version_label?: string;
1441
+ status_url?: string;
1442
+ auth_tagline?: LocalizedString;
1443
+ auth_subtagline?: LocalizedString;
1444
+ auth_badges?: LocalizedString[];
1445
+ legal_entity?: string;
1446
+ workspace_domain?: string;
1447
+ legal_links?: PublicLegalLinks;
1448
+ }
1449
+ /**
1450
+ * Deploy-time identity exposed pre-login by /api/params/public so the
1451
+ * auth shell can render real region/build values (no mockup placeholders).
1452
+ * Each field is empty when unconfigured/unset; consumers hide the pill
1453
+ * when the entire block is missing or empty.
1454
+ */
1455
+ interface PublicMeta {
1456
+ version?: string;
1457
+ revision?: string;
1458
+ build_time?: string;
1459
+ region?: string;
1460
+ }
1461
+ /** Envelope returned by GET /api/params/public. */
1462
+ interface PublicParamsResponse {
1463
+ parameters: PublicParam[];
1464
+ accents?: Record<string, AccentDef>;
1465
+ meta?: PublicMeta;
1466
+ }
1467
+ /**
1468
+ * Wire envelope for GET /api/params/{code}.
1469
+ *
1470
+ * The server always responds with HTTP 200. `found:false` means the
1471
+ * platform has no value for the code (undeclared, restricted-category,
1472
+ * or no value at any resolution layer); the caller substitutes its own
1473
+ * default. `found:true` means `value` is authoritative - even if it is
1474
+ * null/zero (an explicit nil value is a real value, not absence).
1475
+ *
1476
+ * The default never crosses the wire; servers don't track caller
1477
+ * defaults, so two callers with different defaults always see consistent
1478
+ * server state.
1479
+ */
1480
+ interface ParamLookup {
1481
+ code: string;
1482
+ found: boolean;
1483
+ value?: unknown;
1484
+ source?: "object" | "user" | "role" | "tenant" | "env" | "yaml";
1485
+ type?: string;
1486
+ }
1487
+ interface ListParams {
1488
+ page?: number;
1489
+ per_page?: number;
1490
+ sort?: string;
1491
+ search?: string;
1492
+ /** JSON filter nodes (recursive AND/OR tree). */
1493
+ filters?: FilterNode[];
1494
+ include_deleted?: boolean;
1495
+ expand?: string[];
1496
+ screen?: string;
1497
+ /** Return bounded display previews for fields that declare display.list_preview. */
1498
+ preview?: boolean;
1499
+ /**
1500
+ * Field whitelist. When set, the server returns only these columns plus
1501
+ * primary-key field(s) (auto-injected server-side). Filters/search/sort
1502
+ * still operate against all fields regardless of select. Omit to fetch
1503
+ * every column (default, backwards-compatible).
1504
+ */
1505
+ select?: string[];
1506
+ /**
1507
+ * Row-count strategy for this request. Maps to the `?count=` query param.
1508
+ * omitted / "window" - rows only, no total (the page-window request;
1509
+ * the table never blocks on a count).
1510
+ * "only" - total only, no rows (the follow-up count request).
1511
+ * "with" - rows + total, using the entity's declared strategy.
1512
+ * "exact" - rows + forced exact total.
1513
+ */
1514
+ count?: "window" | "only" | "with" | "exact";
1515
+ }
1516
+ /** Cursor-based pagination metadata returned by v2 List. */
1517
+ interface V2Meta {
1518
+ total: number;
1519
+ limit: number;
1520
+ has_more: boolean;
1521
+ cursor?: string;
1522
+ /** How `total` was produced: "exact" or "estimated". Absent when no count
1523
+ * was requested. A cross-store cursor total is always "estimated". */
1524
+ count_mode?: string;
1525
+ /** True when a count WAS requested but abandoned because the cold-tier count
1526
+ * would exceed the interactive scan bound (BC4b). The data window still
1527
+ * loaded; render NO total ("~N") - distinct from a real `total: 0`. */
1528
+ count_unknown?: boolean;
1529
+ }
1530
+ /**
1531
+ * Refs map: keyed by entity code (or $-prefixed virtual entity code),
1532
+ * then by record ID, then field values.
1533
+ * Example: { company: { "uuid-1": { id: "uuid-1", name: "Acme" } } }
1534
+ */
1535
+ type Refs = Record<string, Record<string, Record<string, unknown>>>;
1536
+ /** Per-row status instance. */
1537
+ interface V2StatusInstance {
1538
+ group_code: string;
1539
+ status_code: string;
1540
+ status_name?: Record<string, string>;
1541
+ color?: string;
1542
+ set_at?: string;
1543
+ set_by?: string;
1544
+ note?: string;
1545
+ }
1546
+ /** Per-row property instance. */
1547
+ interface V2PropertyInstance {
1548
+ property_code: string;
1549
+ value: unknown;
1550
+ updated_at?: string;
1551
+ updated_by?: string;
1552
+ }
1553
+ /** Per-row parameter override. */
1554
+ /**
1555
+ * The last verification verdict of an evidence-covered row, shipped under the
1556
+ * row's `$evidence` key (the evidence satellite, mirroring `$statuses`). Read
1557
+ * cheaply from the stored verification result - never a live re-verify. Mirrors
1558
+ * the Go `evidence.RowVerdict`. `verdict` is one of: `verified`, `unverified`,
1559
+ * `tampered`, `indeterminate`, `outside_coverage`.
1560
+ */
1561
+ interface EvidenceVerdict {
1562
+ verdict: string;
1563
+ verified_at?: string;
1564
+ reason?: string;
1565
+ seq?: number;
1566
+ generation?: number;
1567
+ covered: boolean;
1568
+ }
1569
+ interface V2ParamInstance {
1570
+ param_code: string;
1571
+ value: unknown;
1572
+ }
1573
+ /** v2 List response with cursor pagination and response-level $refs. */
1574
+ interface V2ListResponse<T = Record<string, unknown>> {
1575
+ data: T[];
1576
+ meta: V2Meta;
1577
+ $refs?: Refs;
1578
+ }
1579
+ /** v2 List query parameters. */
1580
+ interface V2ListParams {
1581
+ select?: string[];
1582
+ expand?: string[];
1583
+ sort?: string;
1584
+ search?: string;
1585
+ filters?: FilterNode[];
1586
+ limit?: number;
1587
+ after?: string;
1588
+ include_deleted?: boolean;
1589
+ /** Request the (estimated) total alongside the window (`?count=with`). The
1590
+ * cursor UI sends this on the FIRST window only; later windows omit it. */
1591
+ count?: boolean;
1592
+ /** Screen code, so the server applies that screen's `fixed_filters` (a
1593
+ * cursor list of a `fixed_filters` view, e.g. the audit auth-log, needs
1594
+ * the same server-side prefilter the offset list gets). */
1595
+ screen?: string;
1596
+ /** Return display-bounded (truncated) values for list cells, matching the
1597
+ * offset list's `preview: true`. */
1598
+ preview?: boolean;
1599
+ }
1600
+ /** Per-field resolved display unit codes. */
1601
+ type Units = Record<string, string>;
1602
+ /**
1603
+ * A raw entity row: an untyped bag of field values keyed by field code. The
1604
+ * single canonical alias for `Record<string, unknown>` rows - import this
1605
+ * instead of re-declaring a local `RowData`/`RowData`. `EnrichedRow` is the
1606
+ * same bag plus typed `$`-prefixed sub-resources.
1607
+ */
1608
+ type RowData = Record<string, unknown>;
1609
+ /** A row enriched with $-prefixed sub-resources (as returned by Get or write responses). */
1610
+ interface EnrichedRow extends RowData {
1611
+ $refs?: Refs;
1612
+ $files?: Record<string, HydratedFile | HydratedFile[] | null>;
1613
+ $statuses?: V2StatusInstance[];
1614
+ $properties?: V2PropertyInstance[];
1615
+ $params?: V2ParamInstance[];
1616
+ $children?: Record<string, Record<string, unknown>[]>;
1617
+ $units?: Units;
1618
+ $evidence?: EvidenceVerdict;
1619
+ }
1620
+ //#endregion
1621
+ //#region src/api/data.d.ts
1622
+ /** What a single-record read asks the server to compute beside the row. */
1623
+ interface GetEntityOptions {
1624
+ expand?: readonly "evidence"[];
1625
+ }
1626
+ declare function deleteObject(entity: string, pkValues: PkValues | string): Promise<void>;
1627
+ declare function restoreObject(entity: string, pkValues: PkValues | string): Promise<void>;
1628
+ /**
1629
+ * Action request body is flat: top-level keys are handler params. The only
1630
+ * reserved control key is `object_ids` (array of object IDs for
1631
+ * single/batch scope). The server resolves entity from the action's
1632
+ * registration; the URL code is fully qualified ("entity.action" for
1633
+ * entity-scoped, "action" for global).
1634
+ */
1635
+ type ActionExecuteRequest = Record<string, unknown>;
1636
+ interface ActionExecuteResponse {
1637
+ status: string;
1638
+ result?: unknown;
1639
+ audit_operation_id?: string;
1640
+ object_count?: number;
1641
+ /** IDs that succeeded (batch_mode: each responses). */
1642
+ success?: string[];
1643
+ /** Per-item errors (batch_mode: each responses with failures or partial). */
1644
+ errors?: ActionItemError[];
1645
+ /** Per-item skips (batch_mode: each responses where conditions filtered rows). */
1646
+ skipped?: ActionItemSkip[];
1647
+ /**
1648
+ * The action's declared synchronous chain, when it has one. ABSENT means the
1649
+ * action declares no such step - never that a step passed. A failed step does
1650
+ * not change the action's own status: it committed, and an event is free to
1651
+ * fail without undoing a committed write. So "saved" and "saved, and the work
1652
+ * behind it did not run" are the same status and different reports.
1653
+ */
1654
+ events?: EventsReport;
1655
+ }
1656
+ /** What the platform says the action's synchronous chain did. */
1657
+ interface EventsReport {
1658
+ failed_count?: number;
1659
+ timed_out_count?: number;
1660
+ job_ids?: string[];
1661
+ /** In the handler's DECLARED step order, at every depth. */
1662
+ failures?: EventFailure[];
1663
+ /** What the response bounds dropped. Non-zero means there were more. */
1664
+ failures_omitted?: number;
1665
+ }
1666
+ /** One declared step that did not do its work. */
1667
+ interface EventFailure {
1668
+ step: number;
1669
+ handler: string;
1670
+ /** The id a per-object step died on. */
1671
+ object?: string;
1672
+ /** How many objects after it were never reached. */
1673
+ not_attempted?: number;
1674
+ error?: ApiErrorBody;
1675
+ /** This step's OWN chain, when it declared one. */
1676
+ events?: EventsReport;
1677
+ }
1678
+ interface ActionItemError {
1679
+ id: string;
1680
+ /** The failure, in the one shape every carrier sends. */
1681
+ error: ApiErrorBody;
1682
+ }
1683
+ interface ActionItemSkip {
1684
+ id: string;
1685
+ reason: string;
1686
+ }
1687
+ /**
1688
+ * Thrown by executeAction when the platform returns 4xx with the invoke:each
1689
+ * batch shape (all items failed). Carries the per-item details so the UI can
1690
+ * render a meaningful toast instead of a generic "request failed".
1691
+ *
1692
+ * Pre-dispatch failures (auth, unknown action, invoke-shape mismatch) keep
1693
+ * throwing the standard ApiError; use `instanceof ActionBatchError` to
1694
+ * distinguish.
1695
+ */
1696
+ declare class ActionBatchError extends Error {
1697
+ readonly status: number;
1698
+ readonly response: ActionExecuteResponse;
1699
+ constructor(status: number, response: ActionExecuteResponse);
1700
+ }
1701
+ /**
1702
+ * Build a flat action body from handler params + optional object IDs.
1703
+ * Promotes `ids` to the reserved `object_ids` key. Throws if a caller
1704
+ * passes a param literally named `object_ids` (collision with the
1705
+ * reserved control key).
1706
+ */
1707
+ declare function buildActionBody(params: Record<string, unknown> | undefined, ids?: string[]): ActionExecuteRequest;
1708
+ /**
1709
+ * Invoke an action. The URL `code` must be fully qualified for
1710
+ * entity-scoped actions (e.g. `lead.archive`). For global actions it's the
1711
+ * action code on its own (e.g. `auth.login`).
1712
+ */
1713
+ declare function executeAction(code: string, body: ActionExecuteRequest): Promise<ActionExecuteResponse>;
1714
+ //#endregion
1715
+ //#region src/lib/viewport-category.d.ts
1716
+ type ViewportCategory = "phone" | "tablet" | "desktop";
1717
+ interface ResponsiveBreakpoints {
1718
+ phoneMax: number;
1719
+ tabletMax: number;
1720
+ /**
1721
+ * The height at or below which a viewport no wider than `tabletMax` is a
1722
+ * phone held sideways. Required, never optional: a missing bound would
1723
+ * silently restore the width-only rule, which is the defect it exists to
1724
+ * remove.
1725
+ */
1726
+ landscapePhoneMaxHeight: number;
1727
+ }
1728
+ interface ResponsiveViewport {
1729
+ width: number;
1730
+ height: number;
1731
+ touch?: boolean;
1732
+ }
1733
+ interface ResponsiveMode {
1734
+ category: ViewportCategory;
1735
+ width: number;
1736
+ height: number;
1737
+ isPhone: boolean;
1738
+ isTablet: boolean;
1739
+ isDesktop: boolean;
1740
+ touch: boolean;
1741
+ }
1742
+ declare const DEFAULT_RESPONSIVE_BREAKPOINTS: ResponsiveBreakpoints;
1743
+ /**
1744
+ * The device class, from BOTH viewport axes.
1745
+ *
1746
+ * A phone is a device, not a width. Read from width alone, the same phone is a
1747
+ * phone upright and a tablet on its side - so rotating it swapped cards for a
1748
+ * table, sections for tabs, and the compact header for the desktop one, all at
1749
+ * once. The second clause is that device: no wider than a tablet AND short.
1750
+ *
1751
+ * Height is admitted only UNDER the tablet width ceiling, because a wide short
1752
+ * window (a 1600x480 browser, a wide embed strip) is a desktop, and a height
1753
+ * clause without the ceiling would reclassify it.
1754
+ */
1755
+ declare function resolveViewportCategory(viewport: {
1756
+ width: number;
1757
+ height: number;
1758
+ touch?: boolean;
1759
+ }, breakpoints?: ResponsiveBreakpoints): ViewportCategory;
1760
+ //#endregion
1761
+ //#region src/hooks/useResponsiveMode.d.ts
1762
+ interface ResponsiveModeProviderProps {
1763
+ children: ReactNode;
1764
+ breakpoints?: ResponsiveBreakpoints;
1765
+ /**
1766
+ * A measured viewport, substituted for `window`'s. Carries a WIDTH, from
1767
+ * which the category is derived. Used by tests to place the app at a size.
1768
+ *
1769
+ * This is NOT how you force a device class - a forced class is not
1770
+ * expressible as a width. Use `viewport` for that.
1771
+ */
1772
+ viewportOverride?: ResponsiveViewport;
1773
+ /**
1774
+ * The deployment's declared device class, from
1775
+ * `branding.chrome.{full,embed}.viewport`. `auto` (the default) derives it
1776
+ * from the measured width, byte for byte as before. A forced value overrides
1777
+ * the width for every consumer of the category at once.
1778
+ */
1779
+ viewport?: ForcedViewport;
1780
+ }
1781
+ /** `auto` derives from width; anything else forces the category. */
1782
+ type ForcedViewport = "auto" | ViewportCategory;
1783
+ declare function ResponsiveModeProvider({ children, breakpoints, viewportOverride, viewport: declaredViewport }: ResponsiveModeProviderProps): import("react").JSX.Element;
1784
+ declare function useResponsiveMode(): ResponsiveMode;
1785
+ //#endregion
1786
+ export { EntityField as $, ListParams as A, pickLocalized as At, TenantEnv as B, hasOrGroups as Bt, CURSOR_LANGUAGE_CHANGED as C, pkValuesToDetailId as Ct, EnrichedRow as D, TextFn as Dt, DataResponse as E, MANDATORY_LANGUAGE as Et, PublicParam as F, FilterURLState as Ft, V2PropertyInstance as G, FileFieldDisplay as Gt, V2ListResponse as H, parseFiltersFromURL as Ht, PublicParamsResponse as I, FilterValueResolver as It, Action as J, HydratedFile as Jt, V2StatusInstance as K, FileFieldMode as Kt, Refs as L, NO_VALUE_OPS as Lt, LoginResponse as M, textWithNodes as Mt, ParamLookup as N, FilterNode as Nt, ImpersonationInfo as O, TextVars as Ot, PropertyValue as P, FilterOp as Pt, Entity as Q, StatusInfo as R, OP_LABELS as Rt, BrandingIdentity as S, pkValuesFromId as St, CheckSetupResponse as T, resolveDetailRoute as Tt, V2Meta as U, setFiltersInURL as Ut, V2ListParams as V, parseFilterURLState as Vt, V2ParamInstance as W, FileFieldDef as Wt, ChildRelation as X, UploadedFile as Xt, AreaDef as Y, UploadProgress as Yt, ClassificationTierDef as Z, OrderedMap as Zt, executeAction as _, buildRowDetailHref as _t, ResponsiveMode as a, NavNode as at, ApiErrorBody as b, getPrimaryKeyFields as bt, resolveViewportCategory as c, PropertyDef as ct, ActionExecuteResponse as d, Screen as dt, EnumDef as et, ActionItemError as f, StatusDef as ft, deleteObject as g, buildEntityDetailHref as gt, buildActionBody as h, buildDetailHrefFromId as ht, ResponsiveBreakpoints as i, LocalizedString as it, ListResponse as j, pluralText as jt, ListMeta as k, makeTextFn as kt, ActionBatchError as l, RefConfig as lt, GetEntityOptions as m, StructureDef as mt, useResponsiveMode as n, FilterSpecialValue as nt, ResponsiveViewport as o, ParameterDef as ot, ActionItemSkip as p, StatusGroupDef as pt, isCursorStaleError as q, FileFieldValue as qt, DEFAULT_RESPONSIVE_BREAKPOINTS as r, LanguageDef as rt, ViewportCategory as s, PkValues as st, ResponsiveModeProvider as t, FieldAccessInfo as tt, ActionExecuteRequest as u, Schema as ut, restoreObject as v, extractPkValues as vt, CURSOR_SEMANTICS_MISMATCH as w, pkValuesToId as wt, AuthUser as x, pkValuePartsToId as xt, ApiError as y, fieldDisplayName as yt, Tenant as z, countActiveFilters as zt };