@declarion/react 0.61.1 → 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.
- package/dist-lib/ActionDialog-uiuse5W8.js +374 -0
- package/dist-lib/ActionResultDialog.impl-BUBm9Ck3.js +273 -0
- package/dist-lib/ActionRunner-DAxgnKB3.js +1440 -0
- package/dist-lib/AdminCatalogPage.impl-BJGn7EvA.js +441 -0
- package/dist-lib/{AgentChatPanel.impl-rgkewyMl.js → AgentChatPanel.impl-8bw8J-xV.js} +358 -319
- package/dist-lib/AgentOpenFollower.impl-Cga1q7_e.js +81 -0
- package/dist-lib/AssociatedBlock-D6qDYmRO.js +1515 -0
- package/dist-lib/AuthShell-DdiughRT.js +361 -0
- package/dist-lib/ChangePasswordDialog-DFe7lVQg.js +12 -0
- package/dist-lib/ChangePasswordDialog.impl-DtSIaP-A.js +194 -0
- package/dist-lib/CommandPalette.impl-Db3AFA5w.js +383 -0
- package/dist-lib/CopyButton-C0iEvaT1.js +119 -0
- package/dist-lib/DirtyTabsCloseDialog.impl-DWaFaWKn.js +191 -0
- package/dist-lib/{DraggableChildrenTable-DruYOxKm.js → DraggableChildrenTable-Cy8uevS_.js} +45 -44
- package/dist-lib/DynamicIcon-DuBSz6TZ.js +133 -0
- package/dist-lib/FieldRow-BXBBFOZh.js +157 -0
- package/dist-lib/FilterChips-8fMDBXHp.js +1031 -0
- package/dist-lib/Forgot.impl-CmT5A__V.js +105 -0
- package/dist-lib/{Grid-Dsf3I0xG.js → Grid-Cg29k0jv.js} +98 -99
- package/dist-lib/Icons-Dzl-AkD_.d.ts +159 -0
- package/dist-lib/Icons-lt-7lhYR.js +151 -0
- package/dist-lib/ImpersonationBanner.impl-CBJJx6an.js +76 -0
- package/dist-lib/ImpersonationStartModal.impl-RaZcsJpG.js +158 -0
- package/dist-lib/Kbd-CNttVu0z.js +23 -0
- package/dist-lib/{LayoutRenderer-QN7Wp2W6.js → LayoutRenderer-DEHtYtzV.js} +965 -942
- package/dist-lib/{ListCardsBody-CNaZ0xwz.js → ListCardsBody-BAwFR3yO.js} +46 -52
- package/dist-lib/{MarkdownRenderer-BuO5hYJh.js → MarkdownRenderer-kNEMr6K_.js} +15 -16
- package/dist-lib/MenuItem-CfkVXPvC.js +140 -0
- package/dist-lib/NotFoundPage.impl-ZSBn4WWb.js +68 -0
- package/dist-lib/PageHeader-tw4pX3lI.js +71 -0
- package/dist-lib/PageShell-tI-mm0C5.js +47 -0
- package/dist-lib/Pill-D-wsfRhx.js +42 -0
- package/dist-lib/Preferences.impl-BG9XBZDf.js +162 -0
- package/dist-lib/Profile.impl-CbzSzxyG.js +527 -0
- package/dist-lib/PropertyGridEditor-BTjscqfz.js +4378 -0
- package/dist-lib/RecordHeader-Bv9nJXnG.js +217 -0
- package/dist-lib/RecordIdBadge-C3MgoZvt.js +25 -0
- package/dist-lib/RefreshControl-Ce-T_wSQ.js +195 -0
- package/dist-lib/Reset.impl-Cesyqt5p.js +168 -0
- package/dist-lib/SSOCallbackPage.impl-BC_W9nQA.js +31 -0
- package/dist-lib/SectionCard-VonaiLrx.js +150 -0
- package/dist-lib/SignUp.impl-C1KCQbfZ.js +212 -0
- package/dist-lib/SmartDetailPage.impl-8iOAMYQh.js +1609 -0
- package/dist-lib/SmartListPage.impl-Cc4Zwz5f.js +2818 -0
- package/dist-lib/SmartRecordListPage.impl-xTSohkqG.js +795 -0
- package/dist-lib/{SortHeaderMenu-BV-aQbPy.js → SortHeaderMenu-BKTrq0Wb.js} +23 -23
- package/dist-lib/TenantParamsPage.impl-DMuSs3eP.js +306 -0
- package/dist-lib/TwoFA.impl-BClZ3ndk.js +125 -0
- package/dist-lib/{cardProjection-BnmWukxk.js → cardProjection-Cr7fG6wJ.js} +134 -133
- package/dist-lib/declarion-react.css +1 -1
- package/dist-lib/format-count-CSEFw2ht.js +943 -0
- package/dist-lib/headerActionZone-bef-tZZ7.js +14 -0
- package/dist-lib/{stores/icon-registry.d.ts → icon-registry-CUT4eF63.d.ts} +14 -11
- package/dist-lib/icons.d.ts +20 -4
- package/dist-lib/icons.js +3 -2
- package/dist-lib/index.d.ts +2516 -150
- package/dist-lib/index.js +1588 -5117
- package/dist-lib/page-inset-D_kkVwwN.js +9 -0
- package/dist-lib/page-state-eA6J_KIR.js +124 -0
- package/dist-lib/param-editors-9yJr7xmN.js +201 -0
- package/dist-lib/payload-B2wODLAX.js +86 -0
- package/dist-lib/{peekDraftStore-Dk1Ha5u3.js → peekDraftStore-D4GRsRKW.js} +44 -43
- package/dist-lib/registry-BpzE8-h8.js +119 -0
- package/dist-lib/screen-back-Cs4kzeqD.js +44 -0
- package/dist-lib/testing.d.ts +53 -56
- package/dist-lib/testing.js +54 -55
- package/dist-lib/use-filter-value-labels-DuqvAIVG.js +413 -0
- package/dist-lib/{useAgentConversation-nT5UypJX.js → useAgentConversation-D210VDCQ.js} +158 -169
- package/dist-lib/useAuth-CR2YKKXb.js +49 -0
- package/dist-lib/useBranding-Ckp_AuJb.js +41 -0
- package/dist-lib/useBrandingChrome-bKTXXDLy.js +170 -0
- package/dist-lib/useCurrentLocation-BdngVeQv.js +22 -0
- package/dist-lib/useCurrentScreen--UovgvRj.js +2511 -0
- package/dist-lib/useImpersonation-DNV23Ks1.js +35 -0
- package/dist-lib/useObject-1OCeV34A.js +26 -0
- package/dist-lib/useOwnRefresh-DkOuM4yo.js +435 -0
- package/dist-lib/useParams-ei6w4I7w.js +133 -0
- package/dist-lib/useProperties-CbdhlhZd.js +81 -0
- package/dist-lib/useResponsiveMode-DIR1bZfo.d.ts +1786 -0
- package/dist-lib/useScreenBack-J861tbwn.js +71 -0
- package/dist-lib/useTabNavigate-BZiW4q3M.js +78 -0
- package/dist-lib/useTabTitle-CZZnWIQi.js +22 -0
- package/dist-lib/utils-D_QDpB8_.js +11 -0
- package/dist-lib/{value-Dwfyghtj.js → value-CDCeHgOv.js} +8 -22
- package/dist-lib/{action-dispatch-gWmOYjOP.js → variants-CbAwl3Mn.js} +734 -740
- package/dist-lib/vite/index.d.ts +42 -16
- package/dist-lib/window-election-CHIvIZwx.js +45 -0
- package/package.json +16 -23
- package/dist-lib/DetailAuditStrip-CSXZoy7v.js +0 -288
- package/dist-lib/DynamicIcon-DW5krHuX.js +0 -280
- package/dist-lib/RefreshControl-DO9rYcdq.js +0 -399
- package/dist-lib/SmartDetailPage.impl-DFIIx80b.js +0 -1565
- package/dist-lib/SmartListPage.impl-D694R32H.js +0 -3051
- package/dist-lib/SmartRecordListPage.impl-CB5cuQJV.js +0 -780
- package/dist-lib/api/agents.d.ts +0 -140
- package/dist-lib/api/auth-redirect.d.ts +0 -3
- package/dist-lib/api/auth.d.ts +0 -26
- package/dist-lib/api/batch.d.ts +0 -25
- package/dist-lib/api/client.d.ts +0 -51
- package/dist-lib/api/data.d.ts +0 -153
- package/dist-lib/api/entities.d.ts +0 -149
- package/dist-lib/api/events.d.ts +0 -91
- package/dist-lib/api/params.d.ts +0 -28
- package/dist-lib/api/properties.d.ts +0 -3
- package/dist-lib/api/schema.d.ts +0 -2
- package/dist-lib/api/status.d.ts +0 -2
- package/dist-lib/app.d.ts +0 -1
- package/dist-lib/components/actions/ActionButton.d.ts +0 -18
- package/dist-lib/components/actions/ActionDialog.d.ts +0 -20
- package/dist-lib/components/actions/ActionResultDialog.d.ts +0 -22
- package/dist-lib/components/actions/ActionRunner.d.ts +0 -62
- package/dist-lib/components/actions/ObjectActionBar.d.ts +0 -29
- package/dist-lib/components/actions/PropertyGridEditor.d.ts +0 -20
- package/dist-lib/components/actions/ResponsiveActionBar.d.ts +0 -259
- package/dist-lib/components/actions/RowActionsKebab.d.ts +0 -20
- package/dist-lib/components/agents/AgentChatPanel.d.ts +0 -3
- package/dist-lib/components/agents/AgentChatPanel.impl.d.ts +0 -14
- package/dist-lib/components/agents/AgentConversationDrawer.d.ts +0 -11
- package/dist-lib/components/agents/AgentElicitForm.d.ts +0 -27
- package/dist-lib/components/agents/AgentPicker.d.ts +0 -8
- package/dist-lib/components/agents/transcript-runs.d.ts +0 -29
- package/dist-lib/components/chrome/AssociationTabs.d.ts +0 -9
- package/dist-lib/components/chrome/AuditMetaStrip.d.ts +0 -11
- package/dist-lib/components/chrome/Breadcrumbs.d.ts +0 -14
- package/dist-lib/components/chrome/HighlightsStrip.d.ts +0 -10
- package/dist-lib/components/chrome/PageHeader.d.ts +0 -16
- package/dist-lib/components/chrome/PageShell.d.ts +0 -7
- package/dist-lib/components/chrome/RecordHeader.d.ts +0 -17
- package/dist-lib/components/chrome/headerActionZone.d.ts +0 -27
- package/dist-lib/components/detail-layout/AssociatedBlock.d.ts +0 -20
- package/dist-lib/components/detail-layout/AssociatedToolbar.d.ts +0 -13
- package/dist-lib/components/detail-layout/ChildrenBlock.d.ts +0 -16
- package/dist-lib/components/detail-layout/ChildrenCards.d.ts +0 -2
- package/dist-lib/components/detail-layout/ChildrenList.d.ts +0 -2
- package/dist-lib/components/detail-layout/ChildrenTable.d.ts +0 -2
- package/dist-lib/components/detail-layout/ChildrenTimeline.d.ts +0 -2
- package/dist-lib/components/detail-layout/DetailAuditStrip.d.ts +0 -12
- package/dist-lib/components/detail-layout/DetailHighlights.d.ts +0 -14
- package/dist-lib/components/detail-layout/DraggableChildrenTable.d.ts +0 -16
- package/dist-lib/components/detail-layout/EditableChildrenTable.d.ts +0 -16
- package/dist-lib/components/detail-layout/ErrorSummary.d.ts +0 -11
- package/dist-lib/components/detail-layout/EvidenceBlock.d.ts +0 -6
- package/dist-lib/components/detail-layout/FieldRow.d.ts +0 -23
- package/dist-lib/components/detail-layout/FieldsBlock.d.ts +0 -8
- package/dist-lib/components/detail-layout/LayoutColumn.d.ts +0 -9
- package/dist-lib/components/detail-layout/LayoutRenderer.d.ts +0 -46
- package/dist-lib/components/detail-layout/LayoutRow.d.ts +0 -8
- package/dist-lib/components/detail-layout/LayoutTabs.d.ts +0 -8
- package/dist-lib/components/detail-layout/PropertiesBlock.d.ts +0 -8
- package/dist-lib/components/detail-layout/QuickAddForm.d.ts +0 -10
- package/dist-lib/components/detail-layout/SectionBlock.d.ts +0 -8
- package/dist-lib/components/detail-layout/StatusesBlock.d.ts +0 -8
- package/dist-lib/components/detail-layout/TimelineComposer.d.ts +0 -10
- package/dist-lib/components/detail-layout/blockMeta.d.ts +0 -5
- package/dist-lib/components/detail-layout/index.d.ts +0 -21
- package/dist-lib/components/detail-layout/useManualColumnResize.d.ts +0 -25
- package/dist-lib/components/detail-layout/useQuickAdd.d.ts +0 -16
- package/dist-lib/components/detail-layout/widgets/EntityScorecardWidget.d.ts +0 -2
- package/dist-lib/components/detail-layout/widgets/JsonDiffWidget.d.ts +0 -2
- package/dist-lib/components/detail-layout/widgets/MonacoJson.d.ts +0 -9
- package/dist-lib/components/detail-layout/widgets/WidgetHost.d.ts +0 -9
- package/dist-lib/components/detail-layout/widgets/builtins.d.ts +0 -1
- package/dist-lib/components/detail-layout/widgets/canonicalizeJson.d.ts +0 -1
- package/dist-lib/components/detail-layout/widgets/monacoBootstrap.d.ts +0 -1
- package/dist-lib/components/detail-layout/widgets/registry.d.ts +0 -14
- package/dist-lib/components/fields/BoolField.d.ts +0 -2
- package/dist-lib/components/fields/EmailField.d.ts +0 -2
- package/dist-lib/components/fields/EnumField.d.ts +0 -2
- package/dist-lib/components/fields/IntArrayField.d.ts +0 -2
- package/dist-lib/components/fields/JsonEditor.d.ts +0 -10
- package/dist-lib/components/fields/JsonField.d.ts +0 -3
- package/dist-lib/components/fields/MultilangArrayField.d.ts +0 -2
- package/dist-lib/components/fields/MultilangField.d.ts +0 -2
- package/dist-lib/components/fields/MultilangTextField.d.ts +0 -2
- package/dist-lib/components/fields/NumberField.d.ts +0 -2
- package/dist-lib/components/fields/PasswordField.d.ts +0 -2
- package/dist-lib/components/fields/PhoneField.d.ts +0 -2
- package/dist-lib/components/fields/RefCombobox.d.ts +0 -45
- package/dist-lib/components/fields/RefField.d.ts +0 -2
- package/dist-lib/components/fields/RichTextField.d.ts +0 -2
- package/dist-lib/components/fields/SecretField.d.ts +0 -2
- package/dist-lib/components/fields/StringArrayField.d.ts +0 -2
- package/dist-lib/components/fields/StringField.d.ts +0 -2
- package/dist-lib/components/fields/StructureField.d.ts +0 -2
- package/dist-lib/components/fields/TextField.d.ts +0 -2
- package/dist-lib/components/fields/TimestampField.d.ts +0 -2
- package/dist-lib/components/fields/UrlField.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/badge.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/boolPill.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/code.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/date.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/email.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/emptyCell.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/host-icons.d.ts +0 -17
- package/dist-lib/components/fields/cells/factories/json.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/link.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/markdown.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/markdownPreview.d.ts +0 -9
- package/dist-lib/components/fields/cells/factories/money.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/multilangInline.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/nextRun.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/number.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/passwordMask.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/phone.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/refLink.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/richTextPreview.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/statusPill.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/tagList.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/text.d.ts +0 -2
- package/dist-lib/components/fields/cells/factories/timestamp.d.ts +0 -3
- package/dist-lib/components/fields/cells/factories/url-helpers.d.ts +0 -12
- package/dist-lib/components/fields/cells/factories/url.d.ts +0 -2
- package/dist-lib/components/fields/cells/registry.d.ts +0 -21
- package/dist-lib/components/fields/index.d.ts +0 -28
- package/dist-lib/components/fields/langMap.d.ts +0 -2
- package/dist-lib/components/fields/secretValue.d.ts +0 -2
- package/dist-lib/components/file-widgets/CircleImage.d.ts +0 -2
- package/dist-lib/components/file-widgets/DocumentCard.d.ts +0 -2
- package/dist-lib/components/file-widgets/FileList.d.ts +0 -2
- package/dist-lib/components/file-widgets/Grid.d.ts +0 -2
- package/dist-lib/components/file-widgets/GridLazy.d.ts +0 -2
- package/dist-lib/components/file-widgets/ImageWidget.d.ts +0 -12
- package/dist-lib/components/file-widgets/LabeledSlots.d.ts +0 -2
- package/dist-lib/components/file-widgets/SquareImage.d.ts +0 -2
- package/dist-lib/components/file-widgets/UnknownFileWidget.d.ts +0 -3
- package/dist-lib/components/file-widgets/UploadFailureText.d.ts +0 -4
- package/dist-lib/components/file-widgets/WideBanner.d.ts +0 -2
- package/dist-lib/components/file-widgets/builtins.d.ts +0 -1
- package/dist-lib/components/file-widgets/cropper.d.ts +0 -14
- package/dist-lib/components/file-widgets/draft-scope.d.ts +0 -22
- package/dist-lib/components/file-widgets/helpers.d.ts +0 -15
- package/dist-lib/components/file-widgets/host.d.ts +0 -28
- package/dist-lib/components/file-widgets/index.d.ts +0 -16
- package/dist-lib/components/file-widgets/payload.d.ts +0 -21
- package/dist-lib/components/file-widgets/registry.d.ts +0 -5
- package/dist-lib/components/file-widgets/types.d.ts +0 -17
- package/dist-lib/components/file-widgets/upload.d.ts +0 -45
- package/dist-lib/components/file-widgets/useEmbedFileSrc.d.ts +0 -42
- package/dist-lib/components/file-widgets/value.d.ts +0 -4
- package/dist-lib/components/filters/FilterChips.d.ts +0 -14
- package/dist-lib/components/filters/FilterDrawer.d.ts +0 -32
- package/dist-lib/components/filters/filter-op-label.d.ts +0 -3
- package/dist-lib/components/layout/CommandPalette.d.ts +0 -21
- package/dist-lib/components/layout/DirtyTabsCloseDialog.d.ts +0 -9
- package/dist-lib/components/layout/ImpersonationBanner.d.ts +0 -11
- package/dist-lib/components/layout/ImpersonationFrame.d.ts +0 -11
- package/dist-lib/components/layout/ImpersonationStartModal.d.ts +0 -22
- package/dist-lib/components/layout/Layout.d.ts +0 -6
- package/dist-lib/components/layout/Rail.d.ts +0 -22
- package/dist-lib/components/layout/Sidebar.d.ts +0 -12
- package/dist-lib/components/layout/TabStrip.d.ts +0 -6
- package/dist-lib/components/layout/TenantChip.d.ts +0 -26
- package/dist-lib/components/layout/TopBar.d.ts +0 -22
- package/dist-lib/components/layout/tab-close.d.ts +0 -13
- package/dist-lib/components/list/ColumnPicker.d.ts +0 -20
- package/dist-lib/components/list/InlineEditCell.d.ts +0 -15
- package/dist-lib/components/list/PeekFieldCell.d.ts +0 -16
- package/dist-lib/components/list/QuickPeek.d.ts +0 -59
- package/dist-lib/components/list/ViewSwitcher.d.ts +0 -24
- package/dist-lib/components/list/peekDraftStore.d.ts +0 -6
- package/dist-lib/components/pages/AdminCatalogPage.d.ts +0 -1
- package/dist-lib/components/pages/DocumentsMenu.d.ts +0 -21
- package/dist-lib/components/pages/ExportMenu.d.ts +0 -30
- package/dist-lib/components/pages/NotFoundPage.d.ts +0 -1
- package/dist-lib/components/pages/RecordDocumentsPanel.d.ts +0 -41
- package/dist-lib/components/pages/SSOCallbackPage.d.ts +0 -1
- package/dist-lib/components/pages/SmartDetailPage.d.ts +0 -2
- package/dist-lib/components/pages/SmartDetailPage.impl.d.ts +0 -4
- package/dist-lib/components/pages/SmartListPage.d.ts +0 -2
- package/dist-lib/components/pages/SmartListPage.impl.d.ts +0 -4
- package/dist-lib/components/pages/SmartRecordListPage.d.ts +0 -2
- package/dist-lib/components/pages/SmartRecordListPage.impl.d.ts +0 -4
- package/dist-lib/components/pages/auth/AuthShell.d.ts +0 -18
- package/dist-lib/components/pages/auth/Forgot.d.ts +0 -1
- package/dist-lib/components/pages/auth/Reset.d.ts +0 -1
- package/dist-lib/components/pages/auth/SignIn.d.ts +0 -1
- package/dist-lib/components/pages/auth/SignUp.d.ts +0 -1
- package/dist-lib/components/pages/auth/TwoFA.d.ts +0 -1
- package/dist-lib/components/pages/auth/icons.d.ts +0 -6
- package/dist-lib/components/pages/exportRequest.d.ts +0 -69
- package/dist-lib/components/pages/list/DataCell.d.ts +0 -4
- package/dist-lib/components/pages/list/DeleteViewDialog.d.ts +0 -8
- package/dist-lib/components/pages/list/ListCardRow.d.ts +0 -39
- package/dist-lib/components/pages/list/ListCardsBody.d.ts +0 -33
- package/dist-lib/components/pages/list/ListFloatbar.d.ts +0 -29
- package/dist-lib/components/pages/list/ListFooter.d.ts +0 -26
- package/dist-lib/components/pages/list/ListHeader.d.ts +0 -26
- package/dist-lib/components/pages/list/ListNoRows.d.ts +0 -31
- package/dist-lib/components/pages/list/ListTable.d.ts +0 -33
- package/dist-lib/components/pages/list/ListTableRow.d.ts +0 -17
- package/dist-lib/components/pages/list/ListToolbar.d.ts +0 -46
- package/dist-lib/components/pages/list/ListUrlBanner.d.ts +0 -10
- package/dist-lib/components/pages/list/RowActionsCell.d.ts +0 -34
- package/dist-lib/components/pages/list/RowContextMenu.d.ts +0 -28
- package/dist-lib/components/pages/list/SaveViewDialog.d.ts +0 -10
- package/dist-lib/components/pages/list/SortHeaderMenu.d.ts +0 -14
- package/dist-lib/components/pages/list/cardProjection.d.ts +0 -67
- package/dist-lib/components/pages/list/column-sizing.d.ts +0 -14
- package/dist-lib/components/pages/list/columns.d.ts +0 -46
- package/dist-lib/components/pages/list/filter-meta.d.ts +0 -25
- package/dist-lib/components/pages/list/page-size.d.ts +0 -3
- package/dist-lib/components/pages/list/sortable-header.d.ts +0 -2
- package/dist-lib/components/pages/list/table-features.d.ts +0 -14
- package/dist-lib/components/pages/list/use-filter-value-labels.d.ts +0 -24
- package/dist-lib/components/pages/list/useActiveView.d.ts +0 -45
- package/dist-lib/components/pages/list/useHeaderReorder.d.ts +0 -26
- package/dist-lib/components/pages/list/useListColumnLayout.d.ts +0 -38
- package/dist-lib/components/pages/list/useListQuery.d.ts +0 -67
- package/dist-lib/components/pages/list/useListRowInteraction.d.ts +0 -61
- package/dist-lib/components/pages/list/useListSelection.d.ts +0 -31
- package/dist-lib/components/pages/list/useListSort.d.ts +0 -46
- package/dist-lib/components/pages/list/useListViews.d.ts +0 -57
- package/dist-lib/components/pages/list/useRowMenu.d.ts +0 -46
- package/dist-lib/components/pages/profile/Preferences.d.ts +0 -1
- package/dist-lib/components/pages/profile/Profile.d.ts +0 -7
- package/dist-lib/components/pages/tenant-params/TenantParamsPage.d.ts +0 -2
- package/dist-lib/components/params/ParamsBlock.d.ts +0 -13
- package/dist-lib/components/params/param-editors.d.ts +0 -20
- package/dist-lib/components/primitives/Avatar.d.ts +0 -6
- package/dist-lib/components/primitives/BoolToggle.d.ts +0 -7
- package/dist-lib/components/primitives/BrandGlyph.d.ts +0 -8
- package/dist-lib/components/primitives/BrandLogo.d.ts +0 -12
- package/dist-lib/components/primitives/Btn.d.ts +0 -19
- package/dist-lib/components/primitives/Check.d.ts +0 -7
- package/dist-lib/components/primitives/Chip.d.ts +0 -9
- package/dist-lib/components/primitives/ClassifiedFieldLocked.d.ts +0 -9
- package/dist-lib/components/primitives/Dropdown.d.ts +0 -20
- package/dist-lib/components/primitives/Fields.d.ts +0 -111
- package/dist-lib/components/primitives/HoverCard.d.ts +0 -15
- package/dist-lib/components/primitives/IconBtn.d.ts +0 -11
- package/dist-lib/components/primitives/Icons.d.ts +0 -136
- package/dist-lib/components/primitives/Kbd.d.ts +0 -4
- package/dist-lib/components/primitives/MenuItem.d.ts +0 -14
- package/dist-lib/components/primitives/Pill.d.ts +0 -11
- package/dist-lib/components/primitives/RecordIdBadge.d.ts +0 -8
- package/dist-lib/components/primitives/RowField.d.ts +0 -10
- package/dist-lib/components/primitives/SectionCard.d.ts +0 -24
- package/dist-lib/components/primitives/Spinner.d.ts +0 -3
- package/dist-lib/components/primitives/Tooltip.d.ts +0 -34
- package/dist-lib/components/primitives/dataTableStyles.d.ts +0 -4
- package/dist-lib/components/primitives/index.d.ts +0 -37
- package/dist-lib/components/shared/ChangePasswordDialog.d.ts +0 -9
- package/dist-lib/components/shared/ConfirmDialog.d.ts +0 -11
- package/dist-lib/components/shared/CopyButton.d.ts +0 -8
- package/dist-lib/components/shared/DynamicIcon.d.ts +0 -20
- package/dist-lib/components/shared/EmptyState.d.ts +0 -9
- package/dist-lib/components/shared/ErrorBoundary.d.ts +0 -17
- package/dist-lib/components/shared/LoadingSkeleton.d.ts +0 -6
- package/dist-lib/components/shared/LucideIcon.d.ts +0 -16
- package/dist-lib/components/shared/Markdown.d.ts +0 -3
- package/dist-lib/components/shared/MarkdownRenderer.d.ts +0 -11
- package/dist-lib/components/shared/RefreshControl.d.ts +0 -25
- package/dist-lib/components/shared/StatusGroupsDisplay.d.ts +0 -11
- package/dist-lib/components/shared/StatusStepper.d.ts +0 -13
- package/dist-lib/components/shared/toast/DeclarionToast.d.ts +0 -31
- package/dist-lib/components/shared/useOwnRefresh.d.ts +0 -9
- package/dist-lib/embed/EmbedAuthBootstrap.d.ts +0 -8
- package/dist-lib/embed/EmbedContext.d.ts +0 -50
- package/dist-lib/embed/EmbedDirtyReporter.d.ts +0 -10
- package/dist-lib/embed/EmbedHistoryTracker.d.ts +0 -1
- package/dist-lib/embed/EmbedLocationReporter.d.ts +0 -8
- package/dist-lib/embed/EmbedResizeReporter.d.ts +0 -6
- package/dist-lib/embed/EmbedUnsavedGuard.d.ts +0 -7
- package/dist-lib/embed/embed-dirty.d.ts +0 -24
- package/dist-lib/embed/embed-history.d.ts +0 -19
- package/dist-lib/embed/embed-nav-guard.d.ts +0 -20
- package/dist-lib/embed/file-src.d.ts +0 -63
- package/dist-lib/embed/handshake.d.ts +0 -57
- package/dist-lib/embed/index.d.ts +0 -19
- package/dist-lib/embed/params.d.ts +0 -75
- package/dist-lib/embed/protocol.d.ts +0 -165
- package/dist-lib/embed/screen-location.d.ts +0 -50
- package/dist-lib/embed/theme.d.ts +0 -34
- package/dist-lib/embed/token.d.ts +0 -57
- package/dist-lib/embed/useEmbedNavigate.d.ts +0 -48
- package/dist-lib/embed/useGlobalLinkInterceptor.d.ts +0 -66
- package/dist-lib/failure-BUxXuP4c.js +0 -158
- package/dist-lib/format-count-bXVfHzbI.js +0 -1771
- package/dist-lib/hooks/useActionData.d.ts +0 -61
- package/dist-lib/hooks/useAgentConversation.d.ts +0 -24
- package/dist-lib/hooks/useAllEntityData.d.ts +0 -16
- package/dist-lib/hooks/useAssociatedData.d.ts +0 -10
- package/dist-lib/hooks/useAuth.d.ts +0 -22
- package/dist-lib/hooks/useBranding.d.ts +0 -8
- package/dist-lib/hooks/useBrandingChrome.d.ts +0 -59
- package/dist-lib/hooks/useChildrenData.d.ts +0 -3
- package/dist-lib/hooks/useColumns.d.ts +0 -13
- package/dist-lib/hooks/useCurrentScreen.d.ts +0 -34
- package/dist-lib/hooks/useCursorEntityData.d.ts +0 -79
- package/dist-lib/hooks/useDebounce.d.ts +0 -1
- package/dist-lib/hooks/useEntity.d.ts +0 -2
- package/dist-lib/hooks/useEntityData.d.ts +0 -41
- package/dist-lib/hooks/useFilters.d.ts +0 -14
- package/dist-lib/hooks/useImpersonation.d.ts +0 -23
- package/dist-lib/hooks/useLanguage.d.ts +0 -4
- package/dist-lib/hooks/useLiveObject.d.ts +0 -9
- package/dist-lib/hooks/useLongPress.d.ts +0 -29
- package/dist-lib/hooks/useMutations.d.ts +0 -13
- package/dist-lib/hooks/useObject.d.ts +0 -11
- package/dist-lib/hooks/useObjectStatus.d.ts +0 -5
- package/dist-lib/hooks/usePageState.d.ts +0 -32
- package/dist-lib/hooks/usePageStateRuntime.d.ts +0 -27
- package/dist-lib/hooks/usePageStateTtl.d.ts +0 -11
- package/dist-lib/hooks/useParams.d.ts +0 -49
- package/dist-lib/hooks/useProperties.d.ts +0 -5
- package/dist-lib/hooks/useRealtimeThresholds.d.ts +0 -1
- package/dist-lib/hooks/useRegisterScreenTab.d.ts +0 -11
- package/dist-lib/hooks/useResponsiveMode.d.ts +0 -27
- package/dist-lib/hooks/useSSE.d.ts +0 -31
- package/dist-lib/hooks/useSchema.d.ts +0 -1
- package/dist-lib/hooks/useScreen.d.ts +0 -2
- package/dist-lib/hooks/useScreenBack.d.ts +0 -21
- package/dist-lib/hooks/useScreenTab.d.ts +0 -10
- package/dist-lib/hooks/useTabNavigate.d.ts +0 -34
- package/dist-lib/hooks/useTabSearchMirror.d.ts +0 -1
- package/dist-lib/hooks/useTabTitle.d.ts +0 -2
- package/dist-lib/hooks/useText.d.ts +0 -3
- package/dist-lib/hooks/useTimelineData.d.ts +0 -10
- package/dist-lib/hooks/useVersionWatcher.d.ts +0 -30
- package/dist-lib/hooks/useViews.d.ts +0 -26
- package/dist-lib/lib/action-dispatch.d.ts +0 -8
- package/dist-lib/lib/actions.d.ts +0 -254
- package/dist-lib/lib/anchor.d.ts +0 -36
- package/dist-lib/lib/brand-tokens.d.ts +0 -43
- package/dist-lib/lib/branding.d.ts +0 -20
- package/dist-lib/lib/canonical-url.d.ts +0 -27
- package/dist-lib/lib/capabilityPrefetch.d.ts +0 -6
- package/dist-lib/lib/child-config.d.ts +0 -24
- package/dist-lib/lib/children-validation.d.ts +0 -5
- package/dist-lib/lib/decimal-text.d.ts +0 -1
- package/dist-lib/lib/display-value.d.ts +0 -1
- package/dist-lib/lib/document-templates.d.ts +0 -11
- package/dist-lib/lib/download.d.ts +0 -21
- package/dist-lib/lib/evidence-verdict.d.ts +0 -11
- package/dist-lib/lib/failure.d.ts +0 -2
- package/dist-lib/lib/field-classification.d.ts +0 -61
- package/dist-lib/lib/field-regions.d.ts +0 -8
- package/dist-lib/lib/filter-evaluator.d.ts +0 -16
- package/dist-lib/lib/filters.d.ts +0 -93
- package/dist-lib/lib/format-count.d.ts +0 -41
- package/dist-lib/lib/html-state.d.ts +0 -11
- package/dist-lib/lib/language.d.ts +0 -19
- package/dist-lib/lib/longPressGesture.d.ts +0 -55
- package/dist-lib/lib/mass-edit.d.ts +0 -32
- package/dist-lib/lib/page-inset.d.ts +0 -3
- package/dist-lib/lib/quick-add.d.ts +0 -2
- package/dist-lib/lib/realtime-query-keys.d.ts +0 -22
- package/dist-lib/lib/realtime-reconcile.d.ts +0 -33
- package/dist-lib/lib/realtime-resync.d.ts +0 -23
- package/dist-lib/lib/record-documents-key.d.ts +0 -1
- package/dist-lib/lib/rich-text.d.ts +0 -14
- package/dist-lib/lib/rowClickGesture.d.ts +0 -26
- package/dist-lib/lib/safe-url.d.ts +0 -15
- package/dist-lib/lib/schema-routing.d.ts +0 -3
- package/dist-lib/lib/screen-back.d.ts +0 -70
- package/dist-lib/lib/scroll-restoration.d.ts +0 -90
- package/dist-lib/lib/size-value.d.ts +0 -16
- package/dist-lib/lib/sort.d.ts +0 -72
- package/dist-lib/lib/timestamp.d.ts +0 -53
- package/dist-lib/lib/toast.d.ts +0 -49
- package/dist-lib/lib/ui-actions.d.ts +0 -12
- package/dist-lib/lib/utils.d.ts +0 -9
- package/dist-lib/lib/variants.d.ts +0 -7
- package/dist-lib/lib/versionTracker.d.ts +0 -72
- package/dist-lib/lib/viewport-category.d.ts +0 -44
- package/dist-lib/main.d.ts +0 -1
- package/dist-lib/registry-nSeHd5si.js +0 -1956
- package/dist-lib/safe-url-oSJw5pzO.js +0 -34
- package/dist-lib/stores/auth.d.ts +0 -16
- package/dist-lib/stores/list-layout.d.ts +0 -85
- package/dist-lib/stores/page-state.d.ts +0 -61
- package/dist-lib/stores/preferences.d.ts +0 -37
- package/dist-lib/stores/realtime.d.ts +0 -96
- package/dist-lib/stores/screen-registry.d.ts +0 -17
- package/dist-lib/stores/tabs.d.ts +0 -73
- package/dist-lib/types/api.d.ts +0 -579
- package/dist-lib/types/fieldType.d.ts +0 -2
- package/dist-lib/types/files.d.ts +0 -79
- package/dist-lib/types/ordmap.d.ts +0 -39
- package/dist-lib/types/schema.d.ts +0 -1089
- package/dist-lib/useCurrentScreen-0WBj7wT6.js +0 -7860
- package/dist-lib/useListQuery-C7dq_sEo.js +0 -103
- package/dist-lib/useOwnRefresh-q80kCMMh.js +0 -1167
- package/dist-lib/useProperties-CeGKtq7Q.js +0 -83
- package/dist-lib/useTabSearchMirror-CzNAj82Q.js +0 -175
- package/dist-lib/useText-BsedsJ-J.js +0 -952
- 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 };
|