@declarion/react 0.60.0 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-BY-Ir7Sh.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-CtL7rdT6.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-CYERLdXO.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-B08IJKsZ.js → LayoutRenderer-DEHtYtzV.js} +965 -942
- package/dist-lib/{ListCardsBody-Dje_rays.js → ListCardsBody-BAwFR3yO.js} +46 -52
- package/dist-lib/{MarkdownRenderer-N0IWjTH5.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-DKKeCGTH.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-nveYLvHR.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 +1532 -5053
- 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-DSExeoAh.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-BavrHfrU.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-By1-WJ8J.js → value-CDCeHgOv.js} +8 -22
- package/dist-lib/{action-dispatch-DbiOpvd6.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 +17 -24
- package/dist-lib/DetailAuditStrip-B9p1XhjC.js +0 -288
- package/dist-lib/DynamicIcon-DW5krHuX.js +0 -280
- package/dist-lib/RefreshControl-BEWSHtAC.js +0 -399
- package/dist-lib/SmartDetailPage.impl-CYiM-ITJ.js +0 -1565
- package/dist-lib/SmartListPage.impl-Db_Pv9Xc.js +0 -3051
- package/dist-lib/SmartRecordListPage.impl-hbbLglC1.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 -109
- 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-BT54OLHy.js +0 -158
- package/dist-lib/format-count-DLFCdtME.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-CRPxNbkk.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 -580
- 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-BPq7HMF1.js +0 -7840
- package/dist-lib/useListQuery-CG1WM4cv.js +0 -103
- package/dist-lib/useOwnRefresh-C18iWRgr.js +0 -1167
- package/dist-lib/useProperties-C35JrjwQ.js +0 -83
- package/dist-lib/useTabSearchMirror-DKktWWLB.js +0 -175
- package/dist-lib/useText-BFDCTUSo.js +0 -952
- package/dist-lib/vite/fingerprint-plugin.d.ts +0 -44
package/dist-lib/index.d.ts
CHANGED
|
@@ -1,150 +1,2516 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
export
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
1
|
+
import { i as DynamicIcon, n as IconName, r as IconProps, t as Icon } from "./Icons-Dzl-AkD_.js";
|
|
2
|
+
import { i as setIconRegistry, n as getIcon, t as IconDef } from "./icon-registry-CUT4eF63.js";
|
|
3
|
+
import { $ as EntityField, A as ListParams, At as pickLocalized, B as TenantEnv, Bt as hasOrGroups, C as CURSOR_LANGUAGE_CHANGED, Ct as pkValuesToDetailId, D as EnrichedRow, Dt as TextFn, E as DataResponse, Et as MANDATORY_LANGUAGE, F as PublicParam, Ft as FilterURLState, G as V2PropertyInstance, Gt as FileFieldDisplay, H as V2ListResponse, Ht as parseFiltersFromURL, I as PublicParamsResponse, It as FilterValueResolver, J as Action, Jt as HydratedFile, K as V2StatusInstance, Kt as FileFieldMode, L as Refs, Lt as NO_VALUE_OPS, M as LoginResponse, Mt as textWithNodes, N as ParamLookup, Nt as FilterNode, O as ImpersonationInfo, Ot as TextVars, P as PropertyValue, Pt as FilterOp, Q as Entity, R as StatusInfo, Rt as OP_LABELS, S as BrandingIdentity, St as pkValuesFromId, T as CheckSetupResponse, Tt as resolveDetailRoute, U as V2Meta, Ut as setFiltersInURL, V as V2ListParams, Vt as parseFilterURLState, W as V2ParamInstance, Wt as FileFieldDef, X as ChildRelation, Xt as UploadedFile, Y as AreaDef, Yt as UploadProgress, Z as ClassificationTierDef, Zt as OrderedMap, _ as executeAction$1, _t as buildRowDetailHref, a as ResponsiveMode, at as NavNode, b as ApiErrorBody, bt as getPrimaryKeyFields, c as resolveViewportCategory, ct as PropertyDef, d as ActionExecuteResponse, dt as Screen, et as EnumDef, f as ActionItemError, ft as StatusDef, g as deleteObject, gt as buildEntityDetailHref, h as buildActionBody, ht as buildDetailHrefFromId, i as ResponsiveBreakpoints, it as LocalizedString, j as ListResponse, jt as pluralText, k as ListMeta, kt as makeTextFn, l as ActionBatchError, lt as RefConfig, m as GetEntityOptions, mt as StructureDef, n as useResponsiveMode, nt as FilterSpecialValue, o as ResponsiveViewport, ot as ParameterDef, p as ActionItemSkip, pt as StatusGroupDef, q as isCursorStaleError, qt as FileFieldValue, r as DEFAULT_RESPONSIVE_BREAKPOINTS, rt as LanguageDef, s as ViewportCategory, st as PkValues, t as ResponsiveModeProvider, tt as FieldAccessInfo, u as ActionExecuteRequest, ut as Schema, v as restoreObject, vt as extractPkValues, w as CURSOR_SEMANTICS_MISMATCH, wt as pkValuesToId, x as AuthUser, xt as pkValuePartsToId, y as ApiError, yt as fieldDisplayName, z as Tenant, zt as countActiveFilters } from "./useResponsiveMode-DIR1bZfo.js";
|
|
4
|
+
import { ButtonHTMLAttributes, CSSProperties, ComponentType, InputHTMLAttributes, MouseEvent, ReactNode, RefObject } from "react";
|
|
5
|
+
import { QueryClient, QueryKey, UseQueryResult } from "@tanstack/react-query";
|
|
6
|
+
import { useLocation, useNavigate, useParams, useSearchParams } from "react-router";
|
|
7
|
+
//#region src/app.d.ts
|
|
8
|
+
export declare function App(): import("react").JSX.Element;
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/lib/display-value.d.ts
|
|
11
|
+
export declare function coerceDisplayString(value: unknown): string;
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/lib/timestamp.d.ts
|
|
14
|
+
/**
|
|
15
|
+
* Format an offset-aware timestamp for display WITHOUT browser-local
|
|
16
|
+
* conversion.
|
|
17
|
+
*
|
|
18
|
+
* `DD-MM-YYYY HH:mm`, the same in every language. Deliberately NOT
|
|
19
|
+
* `dateStyle: "medium"`: that renders "Aug 15, 2026" for one reader and
|
|
20
|
+
* "15 авг. 2026 г." for another, so two people reading the same screen cannot
|
|
21
|
+
* quote the same date to each other.
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatOffsetTimestamp(raw: string): string;
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/api/entities.d.ts
|
|
26
|
+
/** Helper methods injected onto enriched rows. */
|
|
27
|
+
interface RowHelpers {
|
|
28
|
+
$status(groupCode: string): V2StatusInstance | undefined;
|
|
29
|
+
$property(propertyCode: string): V2PropertyInstance | undefined;
|
|
30
|
+
}
|
|
31
|
+
/** Normalized ref cache that merges $refs across multiple responses. */
|
|
32
|
+
export declare class RefCache {
|
|
33
|
+
private cache;
|
|
34
|
+
/** Merge incoming refs into the cache. */
|
|
35
|
+
merge(refs: Refs | undefined): void;
|
|
36
|
+
/** Get a snapshot of all cached refs. */
|
|
37
|
+
all(): Refs;
|
|
38
|
+
/** Look up a single ref by entity code and id. */
|
|
39
|
+
get(entityCode: string, id: string): Record<string, unknown> | undefined;
|
|
40
|
+
/** Clear the cache. */
|
|
41
|
+
clear(): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generic, type-safe client for a single entity's v2 API.
|
|
45
|
+
*
|
|
46
|
+
* Single-item methods wrap arrays and unwrap the first result.
|
|
47
|
+
* Bulk methods pass arrays through directly.
|
|
48
|
+
*
|
|
49
|
+
* All write responses return enriched rows with $refs, $statuses, etc.
|
|
50
|
+
*/
|
|
51
|
+
export declare class EntityClient<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
52
|
+
readonly entity: string;
|
|
53
|
+
readonly refs: RefCache;
|
|
54
|
+
constructor(entity: string, refCache?: RefCache);
|
|
55
|
+
/** Get a single record through the query-PK detail contract.
|
|
56
|
+
*
|
|
57
|
+
* Pass a string to address by the `id` field (the common single-`id`-PK case,
|
|
58
|
+
* unchanged). Pass a PkValues object to address an entity whose primary key is
|
|
59
|
+
* a different single field (e.g. `{ code: "files.gc_sweep" }` for `schedule`)
|
|
60
|
+
* or a composite key (`{ region: "eu", code: "r1" }`) - each field becomes its
|
|
61
|
+
* own query param, which is how the detail contract resolves a row. A bare
|
|
62
|
+
* string with a non-`id` PK would send `?id=...` and 400. */
|
|
63
|
+
get(pk: string | Record<string, string>): Promise<T & EnrichedRow & RowHelpers>;
|
|
64
|
+
/** List records with cursor-based pagination, field selection, and expansion.
|
|
65
|
+
*
|
|
66
|
+
* Recovery on cursor-stale signals: when the server returns
|
|
67
|
+
* `cursor.semantics_mismatch` (sort grammar version bump),
|
|
68
|
+
* `cursor.language_changed` (the reader's language switched mid-pagination), or
|
|
69
|
+
* `cursor.archive_invalid` (an undecodable cross-store archive cursor), the
|
|
70
|
+
* `after` token is dropped and the request is retried once from the top.
|
|
71
|
+
*
|
|
72
|
+
* CRITICAL for accumulating callers (infinite scroll): the returned
|
|
73
|
+
* `reset` flag is `true` when this recovery fired. The refetched data is
|
|
74
|
+
* WINDOW 1, not the next page - an accumulating `useInfiniteQuery` MUST
|
|
75
|
+
* discard its prior pages and start from this one, never append it as the
|
|
76
|
+
* next page (which would duplicate the head and drop the middle). Callers
|
|
77
|
+
* that fetch a single window can ignore `reset`. See Decisions Log #14.
|
|
78
|
+
*/
|
|
79
|
+
list(params?: V2ListParams): Promise<{
|
|
80
|
+
data: (T & RowHelpers)[];
|
|
81
|
+
meta: V2Meta;
|
|
82
|
+
$refs: Refs;
|
|
83
|
+
reset: boolean;
|
|
84
|
+
}>;
|
|
85
|
+
/** Create a single record. Wraps in array, returns unwrapped result. */
|
|
86
|
+
create(item: Partial<T> & Record<string, unknown>): Promise<T & EnrichedRow & RowHelpers>;
|
|
87
|
+
/**
|
|
88
|
+
* Create multiple records in one transactional batch.
|
|
89
|
+
*
|
|
90
|
+
* `data.create` is one row per dispatch; N independent
|
|
91
|
+
* inserts compose through the platform batch primitive (`system.batch`,
|
|
92
|
+
* atomic READ COMMITTED tx). Each child op targets `<entity>.__create`
|
|
93
|
+
* with a FLAT `{entity, fields}` body inside `BatchOp.params`.
|
|
94
|
+
*
|
|
95
|
+
* Returns rows in input order. The batch fails atomically: any per-op
|
|
96
|
+
* error surfaces as a thrown Error with the first failing op's code +
|
|
97
|
+
* message; `committed: false` (4xx/200-soft-fail) means no row was
|
|
98
|
+
* written. The HTTP transport itself failing (5xx, network) keeps
|
|
99
|
+
* propagating as ApiError unchanged.
|
|
100
|
+
*/
|
|
101
|
+
createMany(items: (Partial<T> & Record<string, unknown>)[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
102
|
+
/** Update a single record. Wraps in array, returns unwrapped result. */
|
|
103
|
+
update(id: string, data: Partial<T> & Record<string, unknown>): Promise<T & EnrichedRow & RowHelpers>;
|
|
104
|
+
/**
|
|
105
|
+
* Update multiple records in one request. Each item must include its id.
|
|
106
|
+
*
|
|
107
|
+
* `data.update` is one fields map per dispatch
|
|
108
|
+
* ({object_ids, entity, fields}); per-row variation composes through
|
|
109
|
+
* `system.batch` (atomic READ COMMITTED tx) — one __update child op per
|
|
110
|
+
* input item, mirroring createMany / upsertMany. The batch is atomic:
|
|
111
|
+
* any per-op failure rolls back all rows. The first per-op error
|
|
112
|
+
* surfaces as a thrown Error.
|
|
113
|
+
*
|
|
114
|
+
* Returns rows in input order.
|
|
115
|
+
*/
|
|
116
|
+
updateMany(items: (Partial<T> & Record<string, unknown> & {
|
|
117
|
+
id: string;
|
|
118
|
+
})[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
119
|
+
/** Delete a single record by ID. */
|
|
120
|
+
delete(id: string): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Delete multiple records in one request. Returns the count of deleted
|
|
123
|
+
* records.
|
|
124
|
+
*
|
|
125
|
+
* Dispatches /api/actions/<entity>.__delete with a FLAT envelope
|
|
126
|
+
* ({object_ids, entity}); the server derives the rows from `object_ids`
|
|
127
|
+
* and the entity's PK fields.
|
|
128
|
+
*/
|
|
129
|
+
deleteMany(ids: string[]): Promise<{
|
|
130
|
+
count: number;
|
|
131
|
+
}>;
|
|
132
|
+
/** Restore a single soft-deleted record by ID. */
|
|
133
|
+
restore(id: string): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Restore multiple soft-deleted records. Returns the count of restored
|
|
136
|
+
* records.
|
|
137
|
+
*
|
|
138
|
+
* Routes through the platform-default `__restore` action. The legacy CRUD route
|
|
139
|
+
* POST /api/data/{entity}/restore is retired (returns 410). The FLAT
|
|
140
|
+
* envelope ({object_ids, entity}) lands directly in DataRestoreParams
|
|
141
|
+
* via JSON tags; no `params:` wrapper on the wire.
|
|
142
|
+
*/
|
|
143
|
+
restoreMany(ids: string[]): Promise<{
|
|
144
|
+
count: number;
|
|
145
|
+
}>;
|
|
146
|
+
/** Upsert a single record. Wraps in array, returns unwrapped result. */
|
|
147
|
+
upsert(item: Partial<T> & Record<string, unknown>, uniqueFields: string[]): Promise<T & EnrichedRow & RowHelpers>;
|
|
148
|
+
/**
|
|
149
|
+
* Upsert multiple records. Existing matches (by uniqueFields) are
|
|
150
|
+
* updated; absent rows are inserted.
|
|
151
|
+
*
|
|
152
|
+
* `data.upsert` is one row per dispatch (per-row uniqueness matching), so N
|
|
153
|
+
* rows compose through `system.batch`. Each child op targets
|
|
154
|
+
* `<entity>.__upsert` with FLAT `{entity, fields, unique_by}` params.
|
|
155
|
+
* The handler returns `DataUpsertResult.rows[]` where each
|
|
156
|
+
* DataUpsertRowResult carries `{pk, action, row}`; the row payload is
|
|
157
|
+
* extracted to preserve the prior API shape (array of enriched rows).
|
|
158
|
+
*
|
|
159
|
+
* The batch is atomic: any per-op failure rolls back all rows. The
|
|
160
|
+
* first per-op error surfaces as a thrown Error.
|
|
161
|
+
*/
|
|
162
|
+
upsertMany(items: (Partial<T> & Record<string, unknown>)[], uniqueFields: string[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Create an EntityClient for the given entity code.
|
|
166
|
+
* Optionally share a RefCache across multiple clients.
|
|
167
|
+
*
|
|
168
|
+
* NOTE(T5): Each call creates a new EntityClient (and a new RefCache if none is
|
|
169
|
+
* provided). For cross-page ref accumulation, callers should create a persistent
|
|
170
|
+
* RefCache instance and pass it to every entityClient() call, e.g. via React
|
|
171
|
+
* context or a module-level singleton.
|
|
172
|
+
*/
|
|
173
|
+
export declare function entityClient<T extends Record<string, unknown> = Record<string, unknown>>(entity: string, refCache?: RefCache): EntityClient<T>;
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/api/batch.d.ts
|
|
176
|
+
interface BatchOp {
|
|
177
|
+
action: string;
|
|
178
|
+
params?: Record<string, unknown> | null;
|
|
179
|
+
}
|
|
180
|
+
interface BatchOpResult {
|
|
181
|
+
index: number;
|
|
182
|
+
/** The dispatched action, so an entry says WHICH op it describes. */
|
|
183
|
+
action?: string;
|
|
184
|
+
ok: boolean;
|
|
185
|
+
result?: unknown;
|
|
186
|
+
/** The failure, in the one shape every carrier sends. */
|
|
187
|
+
error?: ApiErrorBody;
|
|
188
|
+
}
|
|
189
|
+
interface BatchResponse {
|
|
190
|
+
results: BatchOpResult[];
|
|
191
|
+
committed: boolean;
|
|
192
|
+
}
|
|
193
|
+
export declare class Batch {
|
|
194
|
+
private ops;
|
|
195
|
+
call(action: string, params?: unknown): this;
|
|
196
|
+
upsert(entity: string, records: Array<Record<string, unknown>>, mode?: "upsert" | "insert_if_missing", uniqueBy?: string[]): this;
|
|
197
|
+
execute(): Promise<BatchResponse>;
|
|
198
|
+
_ops(): readonly BatchOp[];
|
|
199
|
+
}
|
|
200
|
+
//#endregion
|
|
201
|
+
//#region src/hooks/useSchema.d.ts
|
|
202
|
+
export declare function useSchema(): import("@tanstack/react-query").UseQueryResult<Schema, Error>;
|
|
203
|
+
//#endregion
|
|
204
|
+
//#region src/hooks/useEntity.d.ts
|
|
205
|
+
export declare function useEntity(entityCode: string | undefined): Entity | undefined;
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region src/hooks/useScreen.d.ts
|
|
208
|
+
export declare function useScreen(screenCode: string | undefined): Screen | undefined;
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/hooks/useCurrentScreen.d.ts
|
|
211
|
+
/**
|
|
212
|
+
* The screen a component is currently rendering inside.
|
|
213
|
+
*
|
|
214
|
+
* Standard pages have always been told which screen they are (`SmartListPage`,
|
|
215
|
+
* `SmartDetailPage` and `SmartRecordListPage` all take `screenCode`). A CUSTOM screen
|
|
216
|
+
* was told nothing - it was mounted as a bare `<Component />` - so it could not read
|
|
217
|
+
* its own declaration and had no choice but to hardcode what the schema already said.
|
|
218
|
+
* That is why a screen renamed or translated in YAML kept an English literal in its
|
|
219
|
+
* header while the sidebar followed the schema.
|
|
220
|
+
*
|
|
221
|
+
* This context closes that gap: every routed screen, custom included, is rendered
|
|
222
|
+
* inside it, so any component in the tree can ask what it is looking at without prop
|
|
223
|
+
* drilling. `PageHeader` uses it to default its title and description - which is what
|
|
224
|
+
* makes `<PageHeader />` with no props the correct, complete header for a custom screen.
|
|
225
|
+
*/
|
|
226
|
+
interface CurrentScreen {
|
|
227
|
+
/** The screen's code in the schema (e.g. `events_compare`). */
|
|
228
|
+
code: string;
|
|
229
|
+
/** Its full declaration, or undefined if the schema has not loaded yet. */
|
|
230
|
+
screen: Screen | undefined;
|
|
231
|
+
}
|
|
232
|
+
export declare function CurrentScreenProvider({ code, children }: {
|
|
233
|
+
code: string;
|
|
234
|
+
children: ReactNode;
|
|
235
|
+
}): import("react").JSX.Element;
|
|
236
|
+
/**
|
|
237
|
+
* The screen this component is rendering inside, or undefined outside a routed screen.
|
|
238
|
+
*
|
|
239
|
+
* Use it to read anything the schema already declares - the localized name, the
|
|
240
|
+
* description, the entity, the route - instead of restating it in the component.
|
|
241
|
+
*/
|
|
242
|
+
export declare function useCurrentScreen(): CurrentScreen | undefined;
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/hooks/useAuth.d.ts
|
|
245
|
+
export declare function useAuth(): {
|
|
246
|
+
user: AuthUser | null;
|
|
247
|
+
isAuthenticated: boolean;
|
|
248
|
+
isLoading: boolean;
|
|
249
|
+
activeTenant: Tenant | null;
|
|
250
|
+
tenants: Tenant[];
|
|
251
|
+
login: import("@tanstack/react-query").UseMutateFunction<LoginResponse, Error, {
|
|
252
|
+
email: string;
|
|
253
|
+
password: string;
|
|
254
|
+
remember?: boolean;
|
|
255
|
+
}, unknown>;
|
|
256
|
+
signup: import("@tanstack/react-query").UseMutateFunction<LoginResponse, Error, {
|
|
257
|
+
email: string;
|
|
258
|
+
password: string;
|
|
259
|
+
displayName: string;
|
|
260
|
+
}, unknown>;
|
|
261
|
+
switchTenant: import("@tanstack/react-query").UseMutateFunction<LoginResponse, Error, string, unknown>;
|
|
262
|
+
logout: () => Promise<void>;
|
|
263
|
+
isLoginPending: boolean;
|
|
264
|
+
isSignupPending: boolean;
|
|
265
|
+
isSwitchingTenant: boolean;
|
|
266
|
+
};
|
|
267
|
+
//#endregion
|
|
268
|
+
//#region src/hooks/useEntityData.d.ts
|
|
269
|
+
/**
|
|
270
|
+
* The React Query key for an entity list-window read. The single source of
|
|
271
|
+
* truth for both `useEntityData` and a screen registering its PRIMARY read with
|
|
272
|
+
* its retained page (`useRegisterRetainedQuery`), so the registered key matches
|
|
273
|
+
* the live query exactly. See hooks/usePageStateRuntime.ts.
|
|
274
|
+
*/
|
|
275
|
+
export declare function entityDataQueryKey(entity: string | undefined, params: ListParams): QueryKey;
|
|
276
|
+
/**
|
|
277
|
+
* useEntityData fetches one page-window of entity rows.
|
|
278
|
+
*
|
|
279
|
+
* Decoupled-count contract:
|
|
280
|
+
* this hook issues the WINDOW request only - `count: "window"`, so the
|
|
281
|
+
* server returns the page of rows and never blocks on a COUNT(*). The total
|
|
282
|
+
* is fetched separately by `useEntityCount`; the table renders rows the
|
|
283
|
+
* moment this query resolves, independent of count latency.
|
|
284
|
+
*/
|
|
285
|
+
export declare function useEntityData(entity: string | undefined, params: ListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<ListResponse<Record<string, unknown>>, Error>;
|
|
286
|
+
/**
|
|
287
|
+
* useEntityCount fetches the total row count for a list view in a SEPARATE
|
|
288
|
+
* request from the window (`count: "only"` - the server skips the data
|
|
289
|
+
* query entirely and returns just `meta.total` + `meta.count_mode`).
|
|
290
|
+
*
|
|
291
|
+
* The count is page-independent: `page` and `sort` are stripped from the
|
|
292
|
+
* params so a page change or a re-sort does not refetch the count - only a
|
|
293
|
+
* filter / search / screen / include_deleted change invalidates it.
|
|
294
|
+
*
|
|
295
|
+
* The server picks exact vs estimated per the entity's declared `count`
|
|
296
|
+
* strategy; the resolved `meta.count_mode` tells the caller which precision
|
|
297
|
+
* to render. A count failure does NOT break the table: callers treat a
|
|
298
|
+
* failed/absent count as "unknown" and fall back to the loaded row count.
|
|
299
|
+
*/
|
|
300
|
+
export declare function useEntityCount(entity: string | undefined, params: ListParams, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<ListResponse<Record<string, unknown>>, Error>;
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/hooks/useCursorEntityData.d.ts
|
|
303
|
+
/**
|
|
304
|
+
* The stable JSON segment of the cursor list's query key (the view-defining
|
|
305
|
+
* params, order-independent). Extracted so both the hook and the key builder
|
|
306
|
+
* compute it identically.
|
|
307
|
+
*/
|
|
308
|
+
export declare function cursorEntityStableKey(params: CursorEntityDataParams): string;
|
|
309
|
+
/**
|
|
310
|
+
* The React Query key for the cursor (infinite) entity list. Single source of
|
|
311
|
+
* truth for both `useCursorEntityData` and a screen registering its PRIMARY
|
|
312
|
+
* cursor read with its retained page (`useRegisterRetainedQuery`).
|
|
313
|
+
*/
|
|
314
|
+
export declare function cursorEntityDataQueryKey(entity: string | undefined, params: CursorEntityDataParams): QueryKey;
|
|
315
|
+
interface CursorEntityDataParams {
|
|
316
|
+
sort?: string;
|
|
317
|
+
filters?: FilterNode[];
|
|
318
|
+
search?: string;
|
|
319
|
+
select?: string[];
|
|
320
|
+
expand?: string[];
|
|
321
|
+
includeDeleted?: boolean;
|
|
322
|
+
screen?: string;
|
|
323
|
+
preview?: boolean;
|
|
324
|
+
limit: number;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* useCursorEntityData drives the cursor-native admin list for an archive entity
|
|
328
|
+
* whose `list_pagination` is `cursor` (Postgres-hot + ClickHouse-cold). It
|
|
329
|
+
* accumulates windows with `useInfiniteQuery` over `EntityClient.list` (so the
|
|
330
|
+
* stale-cursor `reset` signal is available), requests the estimated count on
|
|
331
|
+
* the FIRST window only, and resets to window 1 when a stale cursor is hit
|
|
332
|
+
* mid-scroll. Realtime resets are driven centrally by the SSE handler via
|
|
333
|
+
* resetQueries on CURSOR_ENTITY_DATA_KEY.
|
|
334
|
+
*
|
|
335
|
+
* `enabled` gates the query so a NON-cursor entity (offset mode) pays nothing -
|
|
336
|
+
* the page calls both this and useEntityData and enables exactly one.
|
|
337
|
+
*/
|
|
338
|
+
export declare function useCursorEntityData(entity: string | undefined, params: CursorEntityDataParams, enabled: boolean): {
|
|
339
|
+
rows: (Record<string, unknown> & RowHelpers)[];
|
|
340
|
+
refs: Refs | undefined;
|
|
341
|
+
total: number | undefined;
|
|
342
|
+
countMode: string | undefined;
|
|
343
|
+
countUnknown: boolean;
|
|
344
|
+
hasMore: boolean;
|
|
345
|
+
fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<{
|
|
346
|
+
data: (Record<string, unknown> & RowHelpers)[];
|
|
347
|
+
meta: V2Meta;
|
|
348
|
+
$refs: Refs;
|
|
349
|
+
reset: boolean;
|
|
350
|
+
}, unknown>, Error>>;
|
|
351
|
+
isFetchingNextPage: boolean;
|
|
352
|
+
isLoading: boolean;
|
|
353
|
+
isFetching: boolean;
|
|
354
|
+
isPlaceholderData: boolean;
|
|
355
|
+
isError: boolean;
|
|
356
|
+
error: Error | null;
|
|
357
|
+
refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<{
|
|
358
|
+
data: (Record<string, unknown> & RowHelpers)[];
|
|
359
|
+
meta: V2Meta;
|
|
360
|
+
$refs: Refs;
|
|
361
|
+
reset: boolean;
|
|
362
|
+
}, unknown>, Error>>;
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* CursorEntityDataResult is the public return contract of useCursorEntityData -
|
|
366
|
+
* the digested infinite-list shape (accumulated `rows`, `hasMore` +
|
|
367
|
+
* `fetchNextPage` for scroll, the first-window `total`/`countUnknown`, and the
|
|
368
|
+
* react-query status flags). Named (not inferred) so SDK consumers have a stable
|
|
369
|
+
* type to annotate against. Derived from the hook so it never drifts.
|
|
370
|
+
*/
|
|
371
|
+
type CursorEntityDataResult = ReturnType<typeof useCursorEntityData>;
|
|
372
|
+
//#endregion
|
|
373
|
+
//#region src/hooks/useAllEntityData.d.ts
|
|
374
|
+
/**
|
|
375
|
+
* Fetches every page of an entity list and concatenates the result into a
|
|
376
|
+
* single ListResponse whose `meta.total` is the true row count.
|
|
377
|
+
*
|
|
378
|
+
* For board / kanban screens that group the entire result set client-side
|
|
379
|
+
* and therefore cannot use one server-capped page. It fetches page 1 to
|
|
380
|
+
* learn `total_pages`, then fetches the remaining pages in parallel and
|
|
381
|
+
* merges their `$refs`.
|
|
382
|
+
*
|
|
383
|
+
* Prefer `useEntityData` for paginated list screens. This hook holds the
|
|
384
|
+
* full result set in memory and is only appropriate for bounded entities.
|
|
385
|
+
* The caller's `page` / `per_page` in `params` are ignored - this hook owns
|
|
386
|
+
* pagination - while `filters`, `search`, `sort`, and `expand` are honored.
|
|
387
|
+
*/
|
|
388
|
+
export declare function useAllEntityData(entity: string | undefined, params?: ListParams): import("@tanstack/react-query").UseQueryResult<ListResponse<Record<string, unknown>>, Error>;
|
|
389
|
+
//#endregion
|
|
390
|
+
//#region src/hooks/useObject.d.ts
|
|
391
|
+
/**
|
|
392
|
+
* The React Query key for a single-record read. Single source of truth for both
|
|
393
|
+
* `useObject` and a detail screen registering its PRIMARY read with its
|
|
394
|
+
* retained page (`useRegisterRetainedQuery`). For a string PK uses it directly;
|
|
395
|
+
* for a composite PK sorts the parts so key order does not fork the cache.
|
|
396
|
+
*/
|
|
397
|
+
export declare function objectQueryKey(entity: string | undefined, pkValues: PkValues | string | undefined, options?: GetEntityOptions): QueryKey;
|
|
398
|
+
export declare function useObject(entity: string | undefined, pkValues: PkValues | string | undefined, options?: GetEntityOptions): import("@tanstack/react-query").UseQueryResult<DataResponse<Record<string, unknown>>, Error>;
|
|
399
|
+
//#endregion
|
|
400
|
+
//#region src/hooks/useFileReferenceJSON.d.ts
|
|
401
|
+
export declare function fileReferenceJSONQueryKey(entityCode: string | undefined, pkValues: PkValues | string | undefined, fieldCode: string | undefined, reference: string | null | undefined): QueryKey;
|
|
402
|
+
export declare function useFileReferenceJSON(entityCode: string | undefined, pkValues: PkValues | string | undefined, fieldCode: string | undefined, reference: string | null | undefined): import("@tanstack/react-query").UseQueryResult<unknown, Error>;
|
|
403
|
+
//#endregion
|
|
404
|
+
//#region src/components/fields/index.d.ts
|
|
405
|
+
interface FieldRendererProps {
|
|
406
|
+
field: EntityField;
|
|
407
|
+
entityCode?: string;
|
|
408
|
+
fieldName: string;
|
|
409
|
+
value: unknown;
|
|
410
|
+
mode: "display" | "edit";
|
|
411
|
+
onChange?: (value: unknown) => void;
|
|
412
|
+
fieldId?: string;
|
|
413
|
+
labelId?: string;
|
|
414
|
+
record?: Record<string, unknown>;
|
|
415
|
+
refs?: Refs;
|
|
416
|
+
fill?: boolean;
|
|
417
|
+
compact?: boolean;
|
|
418
|
+
surface?: "list" | "detail";
|
|
419
|
+
entity?: Entity;
|
|
420
|
+
entities?: Record<string, Entity>;
|
|
421
|
+
screens?: Record<string, Screen>;
|
|
422
|
+
t: TextFn;
|
|
423
|
+
detailScreen?: string;
|
|
424
|
+
}
|
|
425
|
+
//#endregion
|
|
426
|
+
//#region src/components/fields/StructureField.d.ts
|
|
427
|
+
export declare function StructureField(props: FieldRendererProps & {
|
|
428
|
+
nested?: boolean;
|
|
429
|
+
}): import("react").JSX.Element;
|
|
430
|
+
//#endregion
|
|
431
|
+
//#region src/hooks/useLiveObject.d.ts
|
|
432
|
+
type LiveObjectResult<T extends Record<string, unknown> = EnrichedRow> = UseQueryResult<DataResponse<T>, Error> & {
|
|
433
|
+
object: T | undefined;
|
|
434
|
+
isLive: boolean;
|
|
435
|
+
isNotFound: boolean;
|
|
436
|
+
};
|
|
437
|
+
export declare function useLiveObject<T extends Record<string, unknown> = EnrichedRow>(entity: string | undefined, pkValues: PkValues | string | undefined): LiveObjectResult<T>;
|
|
438
|
+
//#endregion
|
|
439
|
+
//#region src/hooks/useActionData.d.ts
|
|
440
|
+
/** The canonical list-page envelope a paginated action returns in its `result` -
|
|
441
|
+
* the same shape `data.list` (ListResponse) produces. */
|
|
442
|
+
interface ActionListPage<T> {
|
|
443
|
+
data: T[];
|
|
444
|
+
meta?: {
|
|
445
|
+
cursor?: string;
|
|
446
|
+
has_more?: boolean;
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/** Query-key root for a one-shot action read. Mirrors the entity root
|
|
450
|
+
* `entity-data`. */
|
|
451
|
+
export declare const ACTION_DATA_KEY = "action-data";
|
|
452
|
+
/** Query-key root for a cursor (infinite) action read. Mirrors the entity cursor
|
|
453
|
+
* root `entity-data-cursor`; distinct from the one-shot read so it is
|
|
454
|
+
* reaped/registered independently. */
|
|
455
|
+
export declare const ACTION_DATA_CURSOR_KEY = "action-data-cursor";
|
|
456
|
+
/**
|
|
457
|
+
* The React Query key for a one-shot action read. Single source of truth for
|
|
458
|
+
* both `useActionData` and a screen registering it as its PRIMARY read with its
|
|
459
|
+
* retained page (`useRegisterRetainedQuery`). `params` is embedded directly;
|
|
460
|
+
* React Query hashes it stably (sorted keys).
|
|
461
|
+
*/
|
|
462
|
+
export declare function actionDataQueryKey(actionCode: string | undefined, params: Record<string, unknown>): QueryKey;
|
|
463
|
+
/**
|
|
464
|
+
* Read an arbitrary action ONCE and cache its `result` - the action mirror of
|
|
465
|
+
* `useEntityData`. `T` is whatever the action returns (a summary object, or a
|
|
466
|
+
* plain array that is not cursor-paginated). Returns the raw React Query result;
|
|
467
|
+
* the caller registers the key via `actionDataQueryKey` +
|
|
468
|
+
* `useRegisterRetainedQuery` for retention.
|
|
469
|
+
*/
|
|
470
|
+
export declare function useActionData<T>(actionCode: string | undefined, params: Record<string, unknown>, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<T, Error>;
|
|
471
|
+
/**
|
|
472
|
+
* The React Query key for a cursor (infinite) action read. Single source of
|
|
473
|
+
* truth for both `useCursorActionData` and its retained-page registration. The
|
|
474
|
+
* key excludes the cursor (the cursor is the page param, not part of identity).
|
|
475
|
+
*/
|
|
476
|
+
export declare function cursorActionDataQueryKey(actionCode: string | undefined, params: Record<string, unknown>): QueryKey;
|
|
477
|
+
/** The accumulated, table-ready result of a cursor action read - mirrors the
|
|
478
|
+
* shape `useCursorEntityData` feeds a list. */
|
|
479
|
+
interface CursorActionDataResult<T> {
|
|
480
|
+
rows: T[];
|
|
481
|
+
hasMore: boolean;
|
|
482
|
+
fetchNextPage: () => void;
|
|
483
|
+
isFetchingNextPage: boolean;
|
|
484
|
+
isLoading: boolean;
|
|
485
|
+
isError: boolean;
|
|
486
|
+
error: Error | null;
|
|
487
|
+
refetch: () => void;
|
|
488
|
+
queryKey: QueryKey;
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Drive a cursor-paginated table from an action that returns an `ActionListPage`
|
|
492
|
+
* in its `result`. The mirror of `useCursorEntityData`, differing only in the
|
|
493
|
+
* source (an action via `executeAction`, not `EntityClient.list`): it
|
|
494
|
+
* accumulates windows with `useInfiniteQuery`, advancing `meta.cursor` while
|
|
495
|
+
* `meta.has_more`, and exposes the flattened rows. Register the returned
|
|
496
|
+
* `queryKey` with `useRegisterRetainedQuery` so the pages survive a tab switch /
|
|
497
|
+
* Back within the retention window and die with the retained page.
|
|
498
|
+
*/
|
|
499
|
+
export declare function useCursorActionData<T>(actionCode: string | undefined, params: Record<string, unknown>, enabled?: boolean): CursorActionDataResult<T>;
|
|
500
|
+
//#endregion
|
|
501
|
+
//#region src/hooks/useMutations.d.ts
|
|
502
|
+
export declare function useCreateObject(entityCode: string): import("@tanstack/react-query").UseMutationResult<DataResponse<Record<string, unknown>>, Error, Record<string, unknown>, unknown>;
|
|
503
|
+
export declare function useUpdateObject(entityCode: string): import("@tanstack/react-query").UseMutationResult<DataResponse<Record<string, unknown>>, Error, {
|
|
504
|
+
pkValues: PkValues | string;
|
|
505
|
+
data: Record<string, unknown>;
|
|
506
|
+
}, unknown>;
|
|
507
|
+
export declare function useDeleteObject(entityCode: string): import("@tanstack/react-query").UseMutationResult<void, Error, string | PkValues, unknown>;
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region src/hooks/useDebounce.d.ts
|
|
510
|
+
export declare function useDebounce<T>(value: T, delay: number): T;
|
|
511
|
+
//#endregion
|
|
512
|
+
//#region src/hooks/useParams.d.ts
|
|
513
|
+
export declare function usePublicParams(): import("@tanstack/react-query").UseQueryResult<PublicParamsResponse, Error>;
|
|
514
|
+
export declare function useResolvedParam(code: string, options?: {
|
|
515
|
+
enabled?: boolean;
|
|
516
|
+
}): import("@tanstack/react-query").UseQueryResult<ParamLookup, Error>;
|
|
517
|
+
export declare function useEffectiveParam<T = unknown>(code: string): {
|
|
518
|
+
value: T | undefined;
|
|
519
|
+
found: boolean;
|
|
520
|
+
source: ParamLookup["source"] | "public" | undefined;
|
|
521
|
+
loading: boolean;
|
|
522
|
+
error: Error | null;
|
|
523
|
+
};
|
|
524
|
+
/** A failed read returns the default AND `error`; a gate on anything sensitive checks `error`. */
|
|
525
|
+
export declare function useParam<T>(code: string, defaultValue: T): {
|
|
526
|
+
value: T;
|
|
527
|
+
found: boolean;
|
|
528
|
+
source: ParamLookup["source"] | undefined;
|
|
529
|
+
loading: boolean;
|
|
530
|
+
error: Error | null;
|
|
531
|
+
};
|
|
532
|
+
//#endregion
|
|
533
|
+
//#region src/hooks/useObjectStatus.d.ts
|
|
534
|
+
export declare function useSetStatus(entity: string | undefined, id: string | undefined): import("@tanstack/react-query").UseMutationResult<StatusInfo, Error, {
|
|
535
|
+
groupCode: string;
|
|
536
|
+
statusCode: string;
|
|
537
|
+
note?: string;
|
|
538
|
+
}, unknown>;
|
|
539
|
+
//#endregion
|
|
540
|
+
//#region src/hooks/useProperties.d.ts
|
|
541
|
+
export declare function useSetProperty(entity: string | undefined, id: string | undefined): import("@tanstack/react-query").UseMutationResult<PropertyValue, Error, {
|
|
542
|
+
propertyCode: string;
|
|
543
|
+
value: unknown;
|
|
544
|
+
}, unknown>;
|
|
545
|
+
export declare function useDeleteProperty(entity: string | undefined, id: string | undefined): import("@tanstack/react-query").UseMutationResult<void, Error, string, unknown>;
|
|
546
|
+
//#endregion
|
|
547
|
+
//#region src/hooks/useFilters.d.ts
|
|
548
|
+
interface FiltersInput {
|
|
549
|
+
defaults?: FilterNode[];
|
|
550
|
+
}
|
|
551
|
+
/** `filters=[]` and an absent parameter are different states: the first says
|
|
552
|
+
* the caller removed every condition, the second says `defaults` apply. */
|
|
553
|
+
export declare function useFilters({ defaults }?: FiltersInput): {
|
|
554
|
+
filters: FilterNode[];
|
|
555
|
+
filterError: string | null;
|
|
556
|
+
activeCount: number;
|
|
557
|
+
setFilters: (newFilters: FilterNode[]) => void;
|
|
558
|
+
clearFilters: () => void;
|
|
559
|
+
};
|
|
560
|
+
//#endregion
|
|
561
|
+
//#region src/hooks/useColumns.d.ts
|
|
562
|
+
/**
|
|
563
|
+
* useColumns manages visible columns via URL `columns` param.
|
|
564
|
+
* Falls back to screen defaults when no URL param is set.
|
|
565
|
+
*/
|
|
566
|
+
export declare function useColumns(availableColumns: string[], defaultColumns: string[]): {
|
|
567
|
+
visibleColumns: string[];
|
|
568
|
+
availableColumns: string[];
|
|
569
|
+
setColumns: (cols: string[]) => void;
|
|
570
|
+
resetToDefaults: () => void;
|
|
571
|
+
showAll: () => void;
|
|
572
|
+
isColumnVisible: (col: string) => boolean;
|
|
573
|
+
toggleColumn: (col: string) => void;
|
|
574
|
+
};
|
|
575
|
+
//#endregion
|
|
576
|
+
//#region src/components/list/ViewSwitcher.d.ts
|
|
577
|
+
interface ViewItem {
|
|
578
|
+
id: string;
|
|
579
|
+
name: Record<string, string>;
|
|
580
|
+
icon?: string;
|
|
581
|
+
source: "system" | "personal" | "shared";
|
|
582
|
+
is_default?: boolean;
|
|
583
|
+
filters?: FilterNode[];
|
|
584
|
+
columns?: string[];
|
|
585
|
+
sort?: string;
|
|
586
|
+
}
|
|
587
|
+
interface ViewSwitcherProps {
|
|
588
|
+
views: ViewItem[];
|
|
589
|
+
activeViewId: string | null;
|
|
590
|
+
isDirty: boolean;
|
|
591
|
+
onSelect: (view: ViewItem) => void;
|
|
592
|
+
onSave?: () => void;
|
|
593
|
+
onSaveAs?: () => void;
|
|
594
|
+
onDiscard?: () => void;
|
|
595
|
+
onDelete?: (view: ViewItem) => void;
|
|
596
|
+
deletePending?: boolean;
|
|
597
|
+
}
|
|
598
|
+
export declare function ViewSwitcher({ views, activeViewId, isDirty, onSelect, onSave, onSaveAs, onDiscard, onDelete, deletePending }: ViewSwitcherProps): import("react").JSX.Element;
|
|
599
|
+
//#endregion
|
|
600
|
+
//#region src/hooks/useViews.d.ts
|
|
601
|
+
/**
|
|
602
|
+
* useViews fetches DB views for a screen and merges with system views (presets) from DSL.
|
|
603
|
+
* Returns a unified list with source tagging.
|
|
604
|
+
*/
|
|
605
|
+
export declare function useViews(screenCode: string, userId?: string): ViewItem[];
|
|
606
|
+
//#endregion
|
|
607
|
+
//#region src/stores/screen-registry.d.ts
|
|
608
|
+
/**
|
|
609
|
+
* What the platform hands a custom screen when it mounts it.
|
|
610
|
+
*
|
|
611
|
+
* `screenCode` is the same handle every standard page already receives, so a custom
|
|
612
|
+
* screen can read its own declaration (name, description, entity, route) instead of
|
|
613
|
+
* restating it in code. Prefer the `useCurrentScreen()` hook - it reaches any component
|
|
614
|
+
* in the tree, not just the top one - and take this prop only when the top-level
|
|
615
|
+
* component itself needs the code.
|
|
616
|
+
*
|
|
617
|
+
* It is optional: a screen registered before this existed keeps compiling and running.
|
|
618
|
+
*/
|
|
619
|
+
interface CustomScreenProps {
|
|
620
|
+
screenCode?: string;
|
|
621
|
+
}
|
|
622
|
+
export declare function registerScreen(code: string, component: ComponentType<CustomScreenProps>): void;
|
|
623
|
+
//#endregion
|
|
624
|
+
//#region src/components/detail-layout/LayoutRenderer.d.ts
|
|
625
|
+
interface PendingChildRow {
|
|
626
|
+
_key: string;
|
|
627
|
+
_deleted?: boolean;
|
|
628
|
+
_dirty?: boolean;
|
|
629
|
+
[field: string]: unknown;
|
|
630
|
+
}
|
|
631
|
+
interface LayoutContext {
|
|
632
|
+
schema: Schema;
|
|
633
|
+
entity: Entity;
|
|
634
|
+
entityCode: string;
|
|
635
|
+
recordId: string;
|
|
636
|
+
record: Record<string, unknown>;
|
|
637
|
+
isNew: boolean;
|
|
638
|
+
mode: "display" | "edit";
|
|
639
|
+
onFieldChange?: (field: string, value: unknown) => void;
|
|
640
|
+
refs?: Refs;
|
|
641
|
+
columns?: number;
|
|
642
|
+
hideEmptyFields?: boolean;
|
|
643
|
+
objectProperties?: PropertyValue[];
|
|
644
|
+
onSetProperty?: (propertyCode: string, value: unknown) => void;
|
|
645
|
+
isPropertyPending?: boolean;
|
|
646
|
+
objectStatuses?: StatusInfo[];
|
|
647
|
+
onSetStatus?: (groupCode: string, statusCode: string) => void;
|
|
648
|
+
isStatusPending?: boolean;
|
|
649
|
+
pendingChildren?: Record<string, PendingChildRow[]>;
|
|
650
|
+
onChildrenChange?: (childCode: string, rows: PendingChildRow[]) => void;
|
|
651
|
+
childValidationErrors?: Record<string, Record<string, string[]>>;
|
|
652
|
+
fieldErrors?: Record<string, string>;
|
|
653
|
+
withinCard?: boolean;
|
|
654
|
+
detailTabsPresentation?: "sections" | "scroll";
|
|
655
|
+
relatedRecordsPresentation?: "cards" | "table";
|
|
656
|
+
}
|
|
657
|
+
//#endregion
|
|
658
|
+
//#region src/components/detail-layout/widgets/registry.d.ts
|
|
659
|
+
interface LayoutWidgetProps {
|
|
660
|
+
inputs: Record<string, string>;
|
|
661
|
+
values: Record<string, unknown>;
|
|
662
|
+
record: Record<string, unknown>;
|
|
663
|
+
options?: Record<string, unknown>;
|
|
664
|
+
ctx: LayoutContext;
|
|
665
|
+
}
|
|
666
|
+
type LayoutWidget = (props: LayoutWidgetProps) => ReactNode;
|
|
667
|
+
export declare function registerLayoutWidget(code: string, widget: LayoutWidget): void;
|
|
668
|
+
export declare function getLayoutWidget(code: string): LayoutWidget | undefined;
|
|
669
|
+
export declare function hasLayoutWidget(code: string): boolean;
|
|
670
|
+
//#endregion
|
|
671
|
+
//#region src/hooks/useLanguage.d.ts
|
|
672
|
+
export declare function useLanguage(): string;
|
|
673
|
+
export declare function useDeploymentLanguage(): string;
|
|
674
|
+
export declare function reresolveLanguage(queryClient: QueryClient): Promise<void>;
|
|
675
|
+
//#endregion
|
|
676
|
+
//#region src/hooks/useText.d.ts
|
|
677
|
+
export declare function useText(catalog?: "messages" | "errors"): TextFn;
|
|
678
|
+
//#endregion
|
|
679
|
+
//#region src/lib/failure.d.ts
|
|
680
|
+
export declare function failureTitle(errorTitle: TextFn, err: unknown): string;
|
|
681
|
+
//#endregion
|
|
682
|
+
//#region src/stores/tabs.d.ts
|
|
683
|
+
type TabMode = "view" | "edit" | "create";
|
|
684
|
+
type TabCloseScope = "current" | "others" | "right" | "all";
|
|
685
|
+
/**
|
|
686
|
+
* Origin-aware Back return target. The CANONICAL stored shape: `pathname` is an
|
|
687
|
+
* in-app path (no origin, starts `/` not `//`), `search` is the query string
|
|
688
|
+
* WITHOUT a leading `?` (matches `TabItem.search`), `hash` carries its leading
|
|
689
|
+
* `#`. Converted to the `?`-prefixed router form only at the navigate boundary.
|
|
690
|
+
*
|
|
691
|
+
* `hash` lives here but NOT on `TabItem` (which has no `hash` field): a closed
|
|
692
|
+
* origin tab with a hash is reopened via pathname+search, and the hash is
|
|
693
|
+
* applied only in the `navigate()` call. `tabId`/`title`/`icon`/`screen` are
|
|
694
|
+
* hints for switching to (or reopening) the origin tab. Never stores secrets,
|
|
695
|
+
* external URLs, or row data.
|
|
696
|
+
*/
|
|
697
|
+
interface ReturnTarget {
|
|
698
|
+
pathname: string;
|
|
699
|
+
search?: string;
|
|
700
|
+
hash?: string;
|
|
701
|
+
tabId?: string;
|
|
702
|
+
title?: string;
|
|
703
|
+
icon?: string;
|
|
704
|
+
screen?: string;
|
|
705
|
+
}
|
|
706
|
+
interface TabItem {
|
|
707
|
+
id: string;
|
|
708
|
+
pathname: string;
|
|
709
|
+
search: string;
|
|
710
|
+
title: string;
|
|
711
|
+
derivedTitle?: boolean;
|
|
712
|
+
icon?: string;
|
|
713
|
+
closable: boolean;
|
|
714
|
+
area?: string;
|
|
715
|
+
screen?: string;
|
|
716
|
+
navId?: string;
|
|
717
|
+
entity?: string;
|
|
718
|
+
record?: Record<string, unknown>;
|
|
719
|
+
mode?: TabMode;
|
|
720
|
+
dirty?: boolean;
|
|
721
|
+
returnTo?: ReturnTarget | null;
|
|
722
|
+
}
|
|
723
|
+
interface OpenTabOptions {
|
|
724
|
+
activate?: boolean;
|
|
725
|
+
}
|
|
726
|
+
interface TabState {
|
|
727
|
+
tabs: TabItem[];
|
|
728
|
+
activeTabId: string | null;
|
|
729
|
+
openTab: (tab: Omit<TabItem, "id">, options?: OpenTabOptions) => string;
|
|
730
|
+
closeTab: (id: string) => void;
|
|
731
|
+
closeTabs: (ids: string[]) => TabItem | null;
|
|
732
|
+
switchTab: (id: string) => void;
|
|
733
|
+
findTabByPathname: (pathname: string) => TabItem | undefined;
|
|
734
|
+
updateTabTitle: (id: string, title: string, derived?: boolean) => void;
|
|
735
|
+
updateTabSearch: (id: string, search: string) => void;
|
|
736
|
+
setReturnTarget: (id: string, rt: ReturnTarget | null) => void;
|
|
737
|
+
commitTabNavigation: (id: string, patch: {
|
|
738
|
+
search: string;
|
|
739
|
+
returnTo?: ReturnTarget | null;
|
|
740
|
+
}) => void;
|
|
741
|
+
setDirty: (id: string, dirty: boolean) => void;
|
|
742
|
+
setMode: (id: string, mode: TabMode) => void;
|
|
743
|
+
updateTab: (id: string, patch: Partial<TabItem>) => void;
|
|
744
|
+
setScope: (tenantId: string | null, userId: string | null) => void;
|
|
745
|
+
hydrate: () => void;
|
|
746
|
+
}
|
|
747
|
+
export declare const useTabStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TabState>>;
|
|
748
|
+
//#endregion
|
|
749
|
+
//#region src/hooks/useTabNavigate.d.ts
|
|
750
|
+
interface TabNavigateOptions {
|
|
751
|
+
title?: string;
|
|
752
|
+
icon?: string;
|
|
753
|
+
search?: string;
|
|
754
|
+
replace?: boolean;
|
|
755
|
+
/**
|
|
756
|
+
* Top-level (chrome) navigation: do NOT capture the current screen as the
|
|
757
|
+
* destination's Back origin; CLEAR the destination tab's origin to `null`
|
|
758
|
+
* (the menu-cleared sentinel) so a menu/sidebar/command-palette-opened
|
|
759
|
+
* screen shows no Back. Default `false` = capture by default, which is what
|
|
760
|
+
* makes every drill-in (content anchors, row clicks, association, action
|
|
761
|
+
* href, custom `tabNavigate`) origin-aware with no per-site change.
|
|
762
|
+
*/
|
|
763
|
+
topLevel?: boolean;
|
|
764
|
+
}
|
|
765
|
+
export declare function useTabNavigate(): (to: string, opts?: TabNavigateOptions) => void;
|
|
766
|
+
//#endregion
|
|
767
|
+
//#region src/hooks/useScreenBack.d.ts
|
|
768
|
+
interface UseScreenBackOptions {
|
|
769
|
+
/** Static/parent fallback invoked when there is no valid origin (e.g. a
|
|
770
|
+
* detail's `backToList`, a custom screen's static `PageHeader.backTo`).
|
|
771
|
+
* Callers make this embed-correct themselves; the hook never tab-ops it. */
|
|
772
|
+
fallback?: () => void;
|
|
773
|
+
}
|
|
774
|
+
interface ScreenBack {
|
|
775
|
+
/** True when `goBack` will navigate (an origin exists, or a fallback is
|
|
776
|
+
* provided and permitted). Drives whether to render a Back affordance when a
|
|
777
|
+
* surface has no other visibility rule. */
|
|
778
|
+
canGoBack: boolean;
|
|
779
|
+
/** True when the active screen has a captured origin to return to. */
|
|
780
|
+
hasOriginBack: boolean;
|
|
781
|
+
/** True when a static/parent fallback is permitted (false ONLY for a
|
|
782
|
+
* menu-cleared origin). Surfaces combine it with their own rule. */
|
|
783
|
+
allowFallbackBack: boolean;
|
|
784
|
+
/** Navigate Back: switch to / reopen the origin tab, else invoke the
|
|
785
|
+
* fallback. Never closes the current tab; never throws. */
|
|
786
|
+
goBack: () => void;
|
|
787
|
+
}
|
|
788
|
+
export declare function useScreenBack(opts?: UseScreenBackOptions): ScreenBack;
|
|
789
|
+
//#endregion
|
|
790
|
+
//#region src/hooks/usePageState.d.ts
|
|
791
|
+
/** A `useState`-style setter accepting a value or an updater. */
|
|
792
|
+
type PageStateSetter<T> = (next: T | ((prev: T) => T)) => void;
|
|
793
|
+
/**
|
|
794
|
+
* How coarsely a value is keyed.
|
|
795
|
+
* - `"url"` (default): keyed by the full canonical URL, so it FORKS when
|
|
796
|
+
* filters/sort/sub-view change (per-view memory - e.g. scroll position,
|
|
797
|
+
* expanded rows). A filter change is a new view with its own value.
|
|
798
|
+
* - `"path"`: keyed by the screen pathname only, so it PERSISTS across
|
|
799
|
+
* in-screen query changes (e.g. row selection, which survives a filter or
|
|
800
|
+
* column change and is pruned to the visible rows, not reset).
|
|
801
|
+
*/
|
|
802
|
+
type PageStateScope = "url" | "path";
|
|
803
|
+
interface PageStateOptions {
|
|
804
|
+
scope?: PageStateScope;
|
|
805
|
+
}
|
|
806
|
+
/**
|
|
807
|
+
* Bind a deep value to the current screen's retained page.
|
|
808
|
+
*
|
|
809
|
+
* Returns `[value, setValue]`:
|
|
810
|
+
* - `value` is the stored value for the live canonical URL, or `defaultValue`
|
|
811
|
+
* when absent / reaped / retention disabled. Re-renders only when THIS
|
|
812
|
+
* pageKey's value for THIS key changes.
|
|
813
|
+
* - `setValue` writes through to the store under the LIVE canonical URL
|
|
814
|
+
* (tracked via a per-render ref, so the stable setter always targets the
|
|
815
|
+
* currently-mounted view - never a key captured at mount, never the
|
|
816
|
+
* destination's after a navigation). Accepts a value or an updater.
|
|
817
|
+
*
|
|
818
|
+
* Writes are immediate (write-through), so there is no deferred unmount flush to
|
|
819
|
+
* lose: a value set while mounted at a URL is already stored under that URL when
|
|
820
|
+
* the screen unmounts. The retained page is created lazily on first write.
|
|
821
|
+
*/
|
|
822
|
+
export declare function usePageState<T>(key: string, defaultValue: T, opts?: PageStateOptions): [T, PageStateSetter<T>];
|
|
823
|
+
//#endregion
|
|
824
|
+
//#region src/lib/canonical-url.d.ts
|
|
825
|
+
/** The minimal location shape canonicalUrl needs (a router `Location` satisfies
|
|
826
|
+
* it; tests can pass a bare object). */
|
|
827
|
+
interface CanonicalLocation {
|
|
828
|
+
pathname: string;
|
|
829
|
+
search?: string;
|
|
830
|
+
}
|
|
831
|
+
/**
|
|
832
|
+
* Build the canonical URL key for a location: normalized pathname + the
|
|
833
|
+
* view-defining query, sorted by key, with the embed transport params removed.
|
|
834
|
+
*
|
|
835
|
+
* Sorting makes `?a=1&b=2` and `?b=2&a=1` one key. Removing `EMBED_PARAM_KEYS`
|
|
836
|
+
* makes the same screen one key whether or not the embed params ride along, so
|
|
837
|
+
* a retained page is shared between the embedded and non-embedded view of the
|
|
838
|
+
* same URL. Default query values are NOT collapsed (which params have a default
|
|
839
|
+
* is screen-specific and collapsing the wrong one would silently merge or fork
|
|
840
|
+
* pages); two URLs that differ only by an explicit-vs-implicit default are
|
|
841
|
+
* treated as distinct, which is safe (at worst slightly less sharing).
|
|
842
|
+
*/
|
|
843
|
+
export declare function canonicalUrl(location: CanonicalLocation): string;
|
|
844
|
+
//#endregion
|
|
845
|
+
//#region src/hooks/usePageStateRuntime.d.ts
|
|
846
|
+
/**
|
|
847
|
+
* Register a screen's PRIMARY heavy read (its list or detail query key) with the
|
|
848
|
+
* current retained page, so a kill/sweep `removeQueries` releases the cached
|
|
849
|
+
* data alongside the deep state. Call from the standard pages (and custom
|
|
850
|
+
* screens) with the key from the matching key-builder (`entityDataQueryKey` /
|
|
851
|
+
* `cursorEntityDataQueryKey` / `objectQueryKey`).
|
|
852
|
+
*
|
|
853
|
+
* Pass ONLY primary heavy reads - never a shared ref/lookup query, or a
|
|
854
|
+
* sibling screen that shares its key would lose it on this page's eviction.
|
|
855
|
+
* `enabled` (default true) lets the cursor/offset pages register exactly the
|
|
856
|
+
* read they actually use.
|
|
857
|
+
*/
|
|
858
|
+
export declare function useRegisterRetainedQuery(queryKey: QueryKey | undefined, enabled?: boolean): void;
|
|
859
|
+
//#endregion
|
|
860
|
+
//#region src/hooks/usePageStateTtl.d.ts
|
|
861
|
+
/** The platform parameter governing retained-page retention. Declared in
|
|
862
|
+
* modules/declarion-core/schema/core_parameters.yaml (int, category `ui`,
|
|
863
|
+
* `[tenant]`, env `DECLARION_UI_PAGE_STATE_TTL_MS`). */
|
|
864
|
+
export declare const PAGE_STATE_TTL_PARAM = "ui_page_state_ttl_ms";
|
|
865
|
+
/**
|
|
866
|
+
* Resolve the retention window in milliseconds. Returns the per-tenant value
|
|
867
|
+
* once the parameter loads, the YAML-mirrored default before then, and clamps a
|
|
868
|
+
* malformed value to the default (never NaN/negative). `0` is honored as
|
|
869
|
+
* "retention disabled".
|
|
870
|
+
*/
|
|
871
|
+
export declare function usePageStateTtl(): number;
|
|
872
|
+
//#endregion
|
|
873
|
+
//#region src/hooks/useScreenTab.d.ts
|
|
874
|
+
interface UseScreenTabOptions {
|
|
875
|
+
/** The tab's route. Defaults to the live `location.pathname` - the right value
|
|
876
|
+
* for a param-less custom screen, which is the common case. */
|
|
877
|
+
route?: string;
|
|
878
|
+
/** Tab title. Defaults to the route when omitted. */
|
|
879
|
+
title?: string;
|
|
880
|
+
/** Tab icon name (resolved by the icon registry). */
|
|
881
|
+
icon?: string;
|
|
882
|
+
}
|
|
883
|
+
export declare function useScreenTab(opts?: UseScreenTabOptions): void;
|
|
884
|
+
//#endregion
|
|
885
|
+
//#region src/hooks/useTabSearchMirror.d.ts
|
|
886
|
+
export declare function useTabSearchMirror(route: string | undefined): void;
|
|
887
|
+
//#endregion
|
|
888
|
+
//#region src/lib/scroll-restoration.d.ts
|
|
889
|
+
/** The default deep-state bag key under which a screen's scroll anchor is
|
|
890
|
+
* stored. A screen with one scroll container uses this; a screen with several
|
|
891
|
+
* passes distinct keys. */
|
|
892
|
+
export declare const SCROLL_STATE_KEY = "scroll";
|
|
893
|
+
/**
|
|
894
|
+
* A saved scroll position. `key` is the stable key of the row at the top of the
|
|
895
|
+
* viewport (empty when the container had no rows / is non-virtualized); `delta`
|
|
896
|
+
* is the sub-row pixel offset; `offset` is the raw scroll offset kept as a
|
|
897
|
+
* last-resort fallback when the anchor row is gone.
|
|
898
|
+
*/
|
|
899
|
+
interface ScrollAnchor {
|
|
900
|
+
key: string;
|
|
901
|
+
delta: number;
|
|
902
|
+
offset: number;
|
|
903
|
+
}
|
|
904
|
+
/** The minimal virtualizer surface the seam needs. A
|
|
905
|
+
* `Virtualizer<HTMLElement, Element>` is structurally assignable; a test can
|
|
906
|
+
* pass a fake. */
|
|
907
|
+
interface ScrollableVirtualizer {
|
|
908
|
+
scrollOffset: number | null;
|
|
909
|
+
getVirtualItemForOffset: (offset: number) => {
|
|
910
|
+
index: number;
|
|
911
|
+
start: number;
|
|
912
|
+
} | undefined;
|
|
913
|
+
getOffsetForIndex: (index: number, align?: "start") => readonly [number, unknown] | undefined;
|
|
914
|
+
getTotalSize: () => number;
|
|
915
|
+
scrollToOffset: (offset: number, opts?: {
|
|
916
|
+
align?: "start";
|
|
917
|
+
behavior?: "auto";
|
|
918
|
+
}) => void;
|
|
919
|
+
}
|
|
920
|
+
/** Read the saved raw scroll offset for the current page ONCE, for seeding a
|
|
921
|
+
* virtualizer's `initialOffset` (read-once at init). Returns 0 when none /
|
|
922
|
+
* retention off. The full anchor re-restore happens after rows measure. */
|
|
923
|
+
export declare function useSavedScrollOffset(stateKey?: string): number;
|
|
924
|
+
/**
|
|
925
|
+
* Bind scroll save + anchor-row restore for a VIRTUALIZED list to the retained
|
|
926
|
+
* page keyed by the live canonical URL.
|
|
927
|
+
*
|
|
928
|
+
* - Restore: once per pageKey, after `rowKeys` first become non-empty, scrolls
|
|
929
|
+
* to `resolveScrollOffset(...)` (anchor row -> clamped raw -> top).
|
|
930
|
+
* - Save: a throttled scroll listener captures the top-of-viewport anchor and
|
|
931
|
+
* writes it imperatively (no re-render); the final position flushes on
|
|
932
|
+
* unmount / pageKey change to the DEPARTING view's own URL (tracked via a
|
|
933
|
+
* per-render ref).
|
|
934
|
+
*
|
|
935
|
+
* `enabled` (default true) lets a caller gate the seam; when false it is inert.
|
|
936
|
+
*/
|
|
937
|
+
export declare function useVirtualScrollRestoration(opts: {
|
|
938
|
+
virtualizer: ScrollableVirtualizer | null;
|
|
939
|
+
scrollElementRef: {
|
|
940
|
+
current: HTMLElement | null;
|
|
941
|
+
};
|
|
942
|
+
rowKeys: string[];
|
|
943
|
+
stateKey?: string;
|
|
944
|
+
enabled?: boolean;
|
|
945
|
+
}): void;
|
|
946
|
+
/**
|
|
947
|
+
* Scroll save + restore for a PLAIN (non-virtualized) scroll container - the
|
|
948
|
+
* detail page. Stores the raw `scrollTop` (no anchor rows to key by) under the
|
|
949
|
+
* live canonical URL; restores after first layout; saves throttled-on-scroll +
|
|
950
|
+
* on unmount flush.
|
|
951
|
+
*/
|
|
952
|
+
export declare function usePlainScrollRestoration(opts: {
|
|
953
|
+
scrollElementRef: {
|
|
954
|
+
current: HTMLElement | null;
|
|
955
|
+
};
|
|
956
|
+
stateKey?: string;
|
|
957
|
+
enabled?: boolean;
|
|
958
|
+
}): void;
|
|
959
|
+
//#endregion
|
|
960
|
+
//#region src/components/pages/SmartListPage.impl.d.ts
|
|
961
|
+
interface SmartListPageProps {
|
|
962
|
+
screenCode: string;
|
|
963
|
+
}
|
|
964
|
+
//#endregion
|
|
965
|
+
//#region src/components/pages/SmartListPage.d.ts
|
|
966
|
+
export declare function SmartListPage(props: SmartListPageProps): import("react").JSX.Element;
|
|
967
|
+
//#endregion
|
|
968
|
+
//#region src/components/pages/SmartDetailPage.impl.d.ts
|
|
969
|
+
interface SmartDetailPageProps {
|
|
970
|
+
screenCode: string;
|
|
971
|
+
}
|
|
972
|
+
//#endregion
|
|
973
|
+
//#region src/components/pages/SmartDetailPage.d.ts
|
|
974
|
+
export declare function SmartDetailPage(props: SmartDetailPageProps): import("react").JSX.Element;
|
|
975
|
+
//#endregion
|
|
976
|
+
//#region src/components/pages/SmartRecordListPage.impl.d.ts
|
|
977
|
+
interface SmartRecordListPageProps {
|
|
978
|
+
screenCode: string;
|
|
979
|
+
}
|
|
980
|
+
//#endregion
|
|
981
|
+
//#region src/components/pages/SmartRecordListPage.d.ts
|
|
982
|
+
export declare function SmartRecordListPage(props: SmartRecordListPageProps): import("react").JSX.Element;
|
|
983
|
+
//#endregion
|
|
984
|
+
//#region src/components/chrome/PageHeader.d.ts
|
|
985
|
+
interface PageHeaderProps {
|
|
986
|
+
/** Overrides the screen's declared name. Omit it: `<PageHeader />` renders the
|
|
987
|
+
* screen's own `display.name` from the schema, already localized, so a rename or a
|
|
988
|
+
* translation in YAML reaches the page instead of only the sidebar. Pass a string
|
|
989
|
+
* only for a title the schema cannot know (a record's name, a wizard step). */
|
|
990
|
+
title?: string;
|
|
991
|
+
/** Overrides the screen's declared `display.description`. When either is present the
|
|
992
|
+
* header shows the same small info affordance a list and a record already show;
|
|
993
|
+
* when neither is, the header renders exactly as before. */
|
|
994
|
+
description?: string;
|
|
995
|
+
backTo?: string;
|
|
996
|
+
actions?: ReactNode;
|
|
997
|
+
}
|
|
998
|
+
export declare function PageHeader({ title, description, backTo, actions }: PageHeaderProps): import("react").JSX.Element | null;
|
|
999
|
+
//#endregion
|
|
1000
|
+
//#region src/components/shared/EmptyState.d.ts
|
|
1001
|
+
interface EmptyStateProps {
|
|
1002
|
+
icon?: string;
|
|
1003
|
+
title: string;
|
|
1004
|
+
description?: ReactNode;
|
|
1005
|
+
action?: ReactNode;
|
|
1006
|
+
}
|
|
1007
|
+
export declare function EmptyState({ icon, title, description, action }: EmptyStateProps): import("react").JSX.Element;
|
|
1008
|
+
//#endregion
|
|
1009
|
+
//#region src/components/shared/ConfirmDialog.d.ts
|
|
1010
|
+
interface ConfirmDialogProps {
|
|
1011
|
+
open: boolean;
|
|
1012
|
+
onOpenChange: (open: boolean) => void;
|
|
1013
|
+
title: string;
|
|
1014
|
+
description: string;
|
|
1015
|
+
confirmLabel?: string;
|
|
1016
|
+
onConfirm: () => void;
|
|
1017
|
+
destructive?: boolean;
|
|
1018
|
+
}
|
|
1019
|
+
export declare function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, onConfirm, destructive }: ConfirmDialogProps): import("react").JSX.Element | null;
|
|
1020
|
+
//#endregion
|
|
1021
|
+
//#region src/components/filters/FilterDrawer.d.ts
|
|
1022
|
+
interface FilterFieldMeta {
|
|
1023
|
+
code: string;
|
|
1024
|
+
label: string;
|
|
1025
|
+
type: "string" | "enum" | "int" | "float" | "date" | "timestamp" | "bool" | "ref" | "status" | "property" | (string & {});
|
|
1026
|
+
operators: FilterOp[];
|
|
1027
|
+
options?: {
|
|
1028
|
+
value: string;
|
|
1029
|
+
label: string;
|
|
1030
|
+
color?: string;
|
|
1031
|
+
}[];
|
|
1032
|
+
ref?: RefConfig;
|
|
1033
|
+
specialValues?: FilterSpecialValue[];
|
|
1034
|
+
}
|
|
1035
|
+
interface FilterDrawerProps {
|
|
1036
|
+
open: boolean;
|
|
1037
|
+
onClose: () => void;
|
|
1038
|
+
filters: FilterNode[];
|
|
1039
|
+
onApply: (filters: FilterNode[]) => void;
|
|
1040
|
+
availableFields: FilterFieldMeta[];
|
|
1041
|
+
allFields?: FilterFieldMeta[];
|
|
1042
|
+
fieldLabel?: (field: string) => string;
|
|
1043
|
+
resolveValue?: FilterValueResolver;
|
|
1044
|
+
/** Screen `default_filters`: field codes pre-seeded as empty-valued rows when
|
|
1045
|
+
* the panel opens with no active filters. Never pre-applies a value. */
|
|
1046
|
+
defaultFilters?: string[];
|
|
1047
|
+
/** Shared resolved-ref map (from the list page's filter-value resolver),
|
|
1048
|
+
* passed to each ref editor's RefCombobox so it labels the selected value
|
|
1049
|
+
* from this cache instead of firing its own per-value hydration fetch. */
|
|
1050
|
+
refs?: Refs;
|
|
1051
|
+
}
|
|
1052
|
+
export declare function FilterDrawer({ open, onClose, filters, onApply, availableFields, allFields, fieldLabel, resolveValue, defaultFilters, refs }: FilterDrawerProps): import("react").JSX.Element | null;
|
|
1053
|
+
//#endregion
|
|
1054
|
+
//#region src/components/filters/FilterChips.d.ts
|
|
1055
|
+
interface FilterChipsProps {
|
|
1056
|
+
filters: FilterNode[];
|
|
1057
|
+
onRemove?: (field: string) => void;
|
|
1058
|
+
onRemoveAtPath?: (path: number[]) => void;
|
|
1059
|
+
onClearAll: () => void;
|
|
1060
|
+
onChipClick?: () => void;
|
|
1061
|
+
fieldLabel?: (field: string) => string;
|
|
1062
|
+
/** Humanizes each chip VALUE (special -> label, enum/status -> label, ref ->
|
|
1063
|
+
* record label, with a skeleton while a ref label loads). Absent -> raw
|
|
1064
|
+
* values, so FilterChips stays usable standalone / in tests. */
|
|
1065
|
+
resolveValue?: FilterValueResolver;
|
|
1066
|
+
}
|
|
1067
|
+
export declare function FilterChips({ filters, onRemove, onRemoveAtPath, onClearAll, onChipClick, fieldLabel, resolveValue }: FilterChipsProps): import("react").JSX.Element | null;
|
|
1068
|
+
//#endregion
|
|
1069
|
+
//#region src/components/list/ColumnPicker.d.ts
|
|
1070
|
+
interface ColumnPickerProps {
|
|
1071
|
+
/** Full column pool for the screen (data columns; never `_select`/`_actions`). */
|
|
1072
|
+
availableColumns: string[];
|
|
1073
|
+
/** Ordered visible columns (the `?columns` array). Order is meaningful. */
|
|
1074
|
+
visibleColumns: string[];
|
|
1075
|
+
onToggle: (col: string) => void;
|
|
1076
|
+
/** Move a visible column one slot up/down in the order (the drag-free,
|
|
1077
|
+
* keyboard + touch reorder path - WCAG 2.2 SC 2.5.7). Optional: when
|
|
1078
|
+
* omitted, the reorder controls are not rendered (additive SDK evolution). */
|
|
1079
|
+
onMove?: (col: string, dir: "up" | "down") => void;
|
|
1080
|
+
onReset: () => void;
|
|
1081
|
+
onShowAll: () => void;
|
|
1082
|
+
/** Reset this device's column widths for the screen to the YAML defaults.
|
|
1083
|
+
* Widths are a separate, device-local lifecycle from order/visibility.
|
|
1084
|
+
* Optional: omitting it hides the width-reset item. */
|
|
1085
|
+
onResetWidths?: () => void;
|
|
1086
|
+
columnLabel?: (code: string) => string;
|
|
1087
|
+
}
|
|
1088
|
+
export declare function ColumnPicker({ availableColumns, visibleColumns, onToggle, onMove, onReset, onShowAll, onResetWidths, columnLabel }: ColumnPickerProps): import("react").JSX.Element;
|
|
1089
|
+
//#endregion
|
|
1090
|
+
//#region src/components/actions/ActionRunner.d.ts
|
|
1091
|
+
interface RunActionOptions {
|
|
1092
|
+
/** Full YAML action when available; drives destructive/long_running/resolved_params. */
|
|
1093
|
+
action?: Action;
|
|
1094
|
+
title?: string;
|
|
1095
|
+
/** When `action` is absent, individual flags still steer dispatch. */
|
|
1096
|
+
destructive?: boolean;
|
|
1097
|
+
longRunning?: boolean;
|
|
1098
|
+
/** Invoked after the user confirms / fills params. May return a promise
|
|
1099
|
+
* (awaited by the runner) or a sync value; `unknown` covers both. */
|
|
1100
|
+
execute: (params: Record<string, unknown>) => unknown;
|
|
1101
|
+
/**
|
|
1102
|
+
* Caller-side hook fired after `execute` resolves with a `success`
|
|
1103
|
+
* outcome. Reason: navigation and cache-invalidation decisions that
|
|
1104
|
+
* follow an action depend on the caller's screen context, not on
|
|
1105
|
+
* the action declaration. Detail pages use it to navigate back to
|
|
1106
|
+
* the entity list after `__delete`; list pages can use it to clear
|
|
1107
|
+
* row selection; SSE-driven pages may rely on the realtime stream
|
|
1108
|
+
* instead and omit it entirely.
|
|
1109
|
+
*/
|
|
1110
|
+
onSuccess?: (result: unknown) => void;
|
|
1111
|
+
/**
|
|
1112
|
+
* The current bulk selection (full row objects). Forwarded to
|
|
1113
|
+
* ActionDialog so entity_patch params can pre-fill same-value
|
|
1114
|
+
* editors from the selected rows. Omit for single-row or global
|
|
1115
|
+
* action invocations.
|
|
1116
|
+
*/
|
|
1117
|
+
bulkSelection?: ReadonlyArray<Record<string, unknown>>;
|
|
1118
|
+
/**
|
|
1119
|
+
* The record the action is bound to, for single-row invocations
|
|
1120
|
+
* (detail header/toolbar, list row, quick peek). Forwarded to
|
|
1121
|
+
* ActionDialog so `$row.*` param defaults resolve against it -
|
|
1122
|
+
* without it every schema-declared prefill silently renders the
|
|
1123
|
+
* param's empty state. Omit for global and bulk invocations.
|
|
1124
|
+
*/
|
|
1125
|
+
row?: Record<string, unknown>;
|
|
1126
|
+
/**
|
|
1127
|
+
* Acted-entity override for the post-outcome query invalidation. Normally
|
|
1128
|
+
* the runner reads `action.entity`; pass this when the dispatched action
|
|
1129
|
+
* may lack its binding (e.g. a platform-default bulk action resolved from
|
|
1130
|
+
* screen context).
|
|
1131
|
+
*/
|
|
1132
|
+
entity?: string;
|
|
1133
|
+
}
|
|
1134
|
+
interface ActionRunnerContextValue {
|
|
1135
|
+
/**
|
|
1136
|
+
* Dispatch an action. Resolves when the action settles: for a direct-run
|
|
1137
|
+
* action (no params, non-destructive) that is when `execute` finishes, so
|
|
1138
|
+
* callers can await it to keep a trigger button disabled for the whole
|
|
1139
|
+
* operation. For modal paths (params dialog / destructive confirm) it
|
|
1140
|
+
* resolves immediately - the dialog owns its own pending UI.
|
|
1141
|
+
*/
|
|
1142
|
+
run: (opts: RunActionOptions) => Promise<void>;
|
|
1143
|
+
isRunning: boolean;
|
|
1144
|
+
}
|
|
1145
|
+
export declare function useActionRunner(): ActionRunnerContextValue;
|
|
1146
|
+
export declare function ActionRunnerProvider({ children }: {
|
|
1147
|
+
children: ReactNode;
|
|
1148
|
+
}): import("react").JSX.Element;
|
|
1149
|
+
//#endregion
|
|
1150
|
+
//#region src/lib/actions.d.ts
|
|
1151
|
+
/**
|
|
1152
|
+
* Resolved leaf node. Kind discriminator "action".
|
|
1153
|
+
* Enabled defaults true from server; client sets false when enabled_if fails.
|
|
1154
|
+
* Reason carries the localized tooltip text when Enabled is false.
|
|
1155
|
+
*
|
|
1156
|
+
* Wire format: {"kind":"action","code":"approve","enabled":true,"reason":null}
|
|
1157
|
+
*/
|
|
1158
|
+
interface ResolvedActionLeaf {
|
|
1159
|
+
kind: "action";
|
|
1160
|
+
code: string;
|
|
1161
|
+
enabled: boolean;
|
|
1162
|
+
reason: string | null;
|
|
1163
|
+
}
|
|
1164
|
+
/**
|
|
1165
|
+
* Resolved group node. Kind discriminator "group".
|
|
1166
|
+
* Items is always non-empty after pruning (empty groups are dropped).
|
|
1167
|
+
*
|
|
1168
|
+
* Wire format: {"kind":"group","name":{...},"icon":"...","items":[...]}
|
|
1169
|
+
*/
|
|
1170
|
+
interface ResolvedActionGroup {
|
|
1171
|
+
kind: "group";
|
|
1172
|
+
name?: LocalizedString;
|
|
1173
|
+
icon?: string;
|
|
1174
|
+
items: ResolvedActionLayoutNode[];
|
|
1175
|
+
}
|
|
1176
|
+
/**
|
|
1177
|
+
* Discriminated union for a resolved action layout node.
|
|
1178
|
+
* Narrow via node.kind === "action" or node.kind === "group".
|
|
1179
|
+
*/
|
|
1180
|
+
type ResolvedActionLayoutNode = ResolvedActionLeaf | ResolvedActionGroup;
|
|
1181
|
+
//#endregion
|
|
1182
|
+
//#region src/components/actions/ResponsiveActionBar.d.ts
|
|
1183
|
+
/**
|
|
1184
|
+
* Tab navigation options accepted by SDK tabNavigate. Kept loose here so the
|
|
1185
|
+
* caller can pass through the full TabMeta from useTabNavigate without forcing
|
|
1186
|
+
* a re-export.
|
|
1187
|
+
*
|
|
1188
|
+
* Reason: ResponsiveActionBar only forwards the value - tighter typing belongs
|
|
1189
|
+
* with the navigation API, not with the dispatcher that hands the value off.
|
|
1190
|
+
*/
|
|
1191
|
+
interface TabMeta {
|
|
1192
|
+
title?: string;
|
|
1193
|
+
icon?: string;
|
|
1194
|
+
search?: string;
|
|
1195
|
+
replace?: boolean;
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Minimal dispatch surface assembled by SmartListPage/DetailLayout and passed
|
|
1199
|
+
* to ResponsiveActionBar. It carries what `href` dispatch needs plus the seat
|
|
1200
|
+
* for a future widget registry mount.
|
|
1201
|
+
*
|
|
1202
|
+
* Reason: defining the full WidgetContext now would freeze a surface before
|
|
1203
|
+
* the widget registry has a real consumer. It holds exactly the fields the
|
|
1204
|
+
* href dispatch reads and extends without breaking callers.
|
|
1205
|
+
*/
|
|
1206
|
+
interface WidgetContext {
|
|
1207
|
+
/** Resolved entity for the current page; widget code reads schema metadata. */
|
|
1208
|
+
entity: Entity;
|
|
1209
|
+
/** Wire-format entity code used to interpolate `${entity}` in href templates. */
|
|
1210
|
+
entityCode: string;
|
|
1211
|
+
/** Active screen, if any. Optional because some pages predate screens. */
|
|
1212
|
+
screen?: Screen;
|
|
1213
|
+
/** Pathname of the current screen, used by widgets that deep-link back. */
|
|
1214
|
+
screenRoute: string;
|
|
1215
|
+
/** Currently selected rows (full row objects). */
|
|
1216
|
+
selectedRows: Record<string, unknown>[];
|
|
1217
|
+
/** PK values of the currently selected rows, in selection order. */
|
|
1218
|
+
selectedIds: string[];
|
|
1219
|
+
/** Reads declared words in the reader's language; `t.language` formats values. */
|
|
1220
|
+
t: TextFn;
|
|
1221
|
+
/** Opens or switches to a tab in the SDK shell. */
|
|
1222
|
+
tabNavigate: (url: string, meta?: TabMeta) => void;
|
|
1223
|
+
/** Invokes a server action and returns its response envelope. */
|
|
1224
|
+
runActionApi: (code: string, params: unknown) => Promise<unknown>;
|
|
1225
|
+
/**
|
|
1226
|
+
* Opens the Quick peek drawer for `row`. Present only where peek is available
|
|
1227
|
+
* (list surfaces that pass it); the `__peek` platform default dispatches
|
|
1228
|
+
* through here as a pure client verb - the mode-less counterpart of `__open`'s
|
|
1229
|
+
* href navigation. Absent surfaces never receive a `__peek` leaf, so a missing
|
|
1230
|
+
* callback is never invoked.
|
|
1231
|
+
*/
|
|
1232
|
+
openPeek?: (row: Record<string, unknown> | undefined) => void;
|
|
1233
|
+
/**
|
|
1234
|
+
* The route this surface opens a record on: a list's own detail screen, a detail page's
|
|
1235
|
+
* own route. `__open` and `__edit` follow it before the entity-wide href, so a screen
|
|
1236
|
+
* outside the entity's primary area keeps its record in that area.
|
|
1237
|
+
*/
|
|
1238
|
+
recordHref?: (rowId: string) => string | null;
|
|
1239
|
+
}
|
|
1240
|
+
//#endregion
|
|
1241
|
+
//#region src/components/actions/ObjectActionBar.d.ts
|
|
1242
|
+
type ObjectActionBarSlot = "detail" | "detail_toolbar" | "list_row" | "quick_peek";
|
|
1243
|
+
type ObjectActionSelection = {
|
|
1244
|
+
include: string[];
|
|
1245
|
+
exclude?: never;
|
|
1246
|
+
} | {
|
|
1247
|
+
exclude: string[];
|
|
1248
|
+
include?: never;
|
|
1249
|
+
};
|
|
1250
|
+
interface ObjectActionBarProps {
|
|
1251
|
+
entity: string;
|
|
1252
|
+
object: Record<string, unknown> | undefined;
|
|
1253
|
+
slot: ObjectActionBarSlot;
|
|
1254
|
+
screen?: string;
|
|
1255
|
+
select?: ObjectActionSelection;
|
|
1256
|
+
extraActions?: ReactNode;
|
|
1257
|
+
onAfterRun?: (code: string, result: unknown) => void;
|
|
1258
|
+
}
|
|
1259
|
+
interface UseObjectActionsResult {
|
|
1260
|
+
nodes: ResolvedActionLayoutNode[];
|
|
1261
|
+
run: (code: string, action: Action) => void | Promise<void>;
|
|
1262
|
+
isBusy: boolean;
|
|
1263
|
+
widgetContext?: WidgetContext;
|
|
1264
|
+
}
|
|
1265
|
+
export declare function useObjectActions({ entity: entityCode, object, slot, screen: screenCode, select, onAfterRun }: Omit<ObjectActionBarProps, "extraActions">): UseObjectActionsResult;
|
|
1266
|
+
export declare function ObjectActionBar({ entity, object, slot, screen, select, extraActions, onAfterRun }: ObjectActionBarProps): import("react").JSX.Element | null;
|
|
1267
|
+
//#endregion
|
|
1268
|
+
//#region src/components/shared/RefreshControl.d.ts
|
|
1269
|
+
/**
|
|
1270
|
+
* What the control needs, which is less than any one caller happens to have.
|
|
1271
|
+
*
|
|
1272
|
+
* A detail page hands it a `useLiveObject` result; a list hands it a refresh
|
|
1273
|
+
* that cancels in-flight queries first and returns nothing. Typing `refetch` as
|
|
1274
|
+
* react-query's own signature would have made the second caller impossible and
|
|
1275
|
+
* left the list with a copy of this component - which is how the two surfaces
|
|
1276
|
+
* drifted in the first place.
|
|
1277
|
+
*/
|
|
1278
|
+
interface RefreshControlProps {
|
|
1279
|
+
liveObject: {
|
|
1280
|
+
/** Resolves when the refresh it starts has settled. See useOwnRefresh. */
|
|
1281
|
+
refetch: () => unknown;
|
|
1282
|
+
isLoading: boolean;
|
|
1283
|
+
isLive: boolean;
|
|
1284
|
+
/**
|
|
1285
|
+
* @deprecated Ignored; the control reports only the refresh a person
|
|
1286
|
+
* started. Passing it changes nothing. Declared so a consumer that builds
|
|
1287
|
+
* this object literally still compiles.
|
|
1288
|
+
*/
|
|
1289
|
+
isFetching?: boolean;
|
|
1290
|
+
};
|
|
1291
|
+
realtime?: boolean;
|
|
1292
|
+
}
|
|
1293
|
+
export declare function RefreshControl({ liveObject, realtime }: RefreshControlProps): import("react").JSX.Element;
|
|
1294
|
+
//#endregion
|
|
1295
|
+
//#region src/components/fields/RefCombobox.d.ts
|
|
1296
|
+
interface RefComboboxProps {
|
|
1297
|
+
ref: RefConfig | undefined;
|
|
1298
|
+
/** Current stored ref target value (the `ref.field` value, or target PK). */
|
|
1299
|
+
value: unknown;
|
|
1300
|
+
onChange: (value: string | null) => void;
|
|
1301
|
+
/**
|
|
1302
|
+
* Server-embedded `$refs` enrichment map, keyed by the stored ref value.
|
|
1303
|
+
* Used to label the current selection when it is outside the loaded page.
|
|
1304
|
+
*/
|
|
1305
|
+
refs?: Refs;
|
|
1306
|
+
/** FieldDisplay-level display override (`field.display.ref_display_field`). */
|
|
1307
|
+
displayFieldOverride?: string;
|
|
1308
|
+
id?: string;
|
|
1309
|
+
labelId?: string;
|
|
1310
|
+
ariaLabel?: string;
|
|
1311
|
+
required?: boolean;
|
|
1312
|
+
placeholder?: string;
|
|
1313
|
+
/** Filter-only declared options (e.g. "Myself" -> $user.id) rendered as a
|
|
1314
|
+
* "Special values" group above the relation results. Selecting one stores its
|
|
1315
|
+
* `code` verbatim (a `$user.*` token is NOT resolved locally). Filter use only. */
|
|
1316
|
+
specialValues?: FilterSpecialValue[];
|
|
1317
|
+
}
|
|
1318
|
+
/**
|
|
1319
|
+
* RefCombobox is the ONE relation picker shared by every surface that selects a
|
|
1320
|
+
* referenced record: SmartDetailPage create/edit ref fields, the list filter
|
|
1321
|
+
* value editor, ActionDialog `type: ref` params, and inline-edit table ref
|
|
1322
|
+
* cells. It loads a bounded page of accessible referenced rows through the
|
|
1323
|
+
* normal data API (so RBAC/ABAC/tenant scoping all apply) and labels them via
|
|
1324
|
+
* the canonical ref-label resolver.
|
|
1325
|
+
*
|
|
1326
|
+
* It stores the RESOLVED ref target value: `ref.field` when declared, otherwise
|
|
1327
|
+
* the target entity's primary-key object id. (The legacy per-surface code stored
|
|
1328
|
+
* the PK unconditionally and ignored `ref.field`.)
|
|
1329
|
+
*
|
|
1330
|
+
* Typed search hits the SERVER (debounced 300ms, via the `?search=` API over the
|
|
1331
|
+
* entity's search fields), so a record past the bounded first page is findable;
|
|
1332
|
+
* the `Select` primitive runs in server mode (`onSearchChange`) and renders the
|
|
1333
|
+
* returned options without re-filtering them client-side. An empty search loads
|
|
1334
|
+
* the default sorted page.
|
|
1335
|
+
*/
|
|
1336
|
+
export declare function RefCombobox({ ref: refConfig, value, onChange, refs, displayFieldOverride, id, labelId, ariaLabel, required, placeholder: placeholderOverride, specialValues }: RefComboboxProps): import("react").JSX.Element;
|
|
1337
|
+
//#endregion
|
|
1338
|
+
//#region src/components/list/QuickPeek.d.ts
|
|
1339
|
+
interface QuickPeekRegularFieldSpec {
|
|
1340
|
+
key: string;
|
|
1341
|
+
label: string;
|
|
1342
|
+
kind: "field";
|
|
1343
|
+
field: EntityField;
|
|
1344
|
+
readOnly?: boolean;
|
|
1345
|
+
}
|
|
1346
|
+
interface QuickPeekFileFieldSpec {
|
|
1347
|
+
key: string;
|
|
1348
|
+
label: string;
|
|
1349
|
+
kind: "file";
|
|
1350
|
+
readOnly?: boolean;
|
|
1351
|
+
}
|
|
1352
|
+
type QuickPeekFieldSpec = QuickPeekRegularFieldSpec | QuickPeekFileFieldSpec;
|
|
1353
|
+
interface QuickPeekProps<R extends Record<string, unknown> = Record<string, unknown>> {
|
|
1354
|
+
entity: Pick<Entity, "fields" | "files" | "variants">;
|
|
1355
|
+
entityCode?: string;
|
|
1356
|
+
record: R;
|
|
1357
|
+
title: string;
|
|
1358
|
+
recordId?: string;
|
|
1359
|
+
avatarName?: string;
|
|
1360
|
+
fields: QuickPeekFieldSpec[];
|
|
1361
|
+
/** $refs payload from the list/detail API; used by RefField-style renderers. */
|
|
1362
|
+
refs?: Refs;
|
|
1363
|
+
/** Full screen YAML — honors `screen.quick_peek.width`. */
|
|
1364
|
+
screen?: Screen;
|
|
1365
|
+
/** All actions available on this record. */
|
|
1366
|
+
actions: Record<string, Action>;
|
|
1367
|
+
/**
|
|
1368
|
+
* Resolved action_layout (screen overrides entity). The peek footer renders
|
|
1369
|
+
* the `quick_peek` slot through the SAME ResponsiveActionBar as the list
|
|
1370
|
+
* toolbar and detail header: declared top-level actions are buttons, the rest
|
|
1371
|
+
* collapse into the overflow menu. One mechanism everywhere.
|
|
1372
|
+
*/
|
|
1373
|
+
screenActionLayout?: ResolvedActionLayoutNode[];
|
|
1374
|
+
entityActionLayout?: ResolvedActionLayoutNode[];
|
|
1375
|
+
executeAction: (code: string, action: Action, params: Record<string, unknown>) => Promise<unknown>;
|
|
1376
|
+
/**
|
|
1377
|
+
* Close the peek.
|
|
1378
|
+
*/
|
|
1379
|
+
onClose: () => void;
|
|
1380
|
+
/**
|
|
1381
|
+
* Open full detail. Receives the draft when dirty, else null — caller seeds
|
|
1382
|
+
* ShellDetailPage.initialDirty + initial values from this draft.
|
|
1383
|
+
*/
|
|
1384
|
+
onOpen: (draft: R | null) => void;
|
|
1385
|
+
/** Fires once per explicit user commit — never on keystroke. */
|
|
1386
|
+
onSave?: (next: R) => void;
|
|
1387
|
+
}
|
|
1388
|
+
export declare function QuickPeek<R extends Record<string, unknown>>({ entity, entityCode, record, title, recordId, avatarName, fields, refs, screen, actions, screenActionLayout, entityActionLayout, executeAction, onClose, onOpen, onSave }: QuickPeekProps<R>): import("react").JSX.Element;
|
|
1389
|
+
interface QEFieldProps {
|
|
1390
|
+
label: string;
|
|
1391
|
+
children: ReactNode;
|
|
1392
|
+
}
|
|
1393
|
+
export declare function QEField({ label, children }: QEFieldProps): import("react").JSX.Element;
|
|
1394
|
+
//#endregion
|
|
1395
|
+
//#region src/components/primitives/Btn.d.ts
|
|
1396
|
+
type BtnKind = "primary" | "ghost" | "subtle" | "default";
|
|
1397
|
+
type BtnSize = "xs" | "sm" | "md" | "lg";
|
|
1398
|
+
type BtnProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "size"> & {
|
|
1399
|
+
kind?: BtnKind;
|
|
1400
|
+
size?: BtnSize;
|
|
1401
|
+
icon?: ReactNode;
|
|
1402
|
+
iconRight?: ReactNode;
|
|
1403
|
+
active?: boolean;
|
|
1404
|
+
danger?: boolean;
|
|
1405
|
+
};
|
|
1406
|
+
export declare const Btn: import("react").ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "size"> & {
|
|
1407
|
+
kind?: BtnKind;
|
|
1408
|
+
size?: BtnSize;
|
|
1409
|
+
icon?: ReactNode;
|
|
1410
|
+
iconRight?: ReactNode;
|
|
1411
|
+
active?: boolean;
|
|
1412
|
+
danger?: boolean;
|
|
1413
|
+
} & import("react").RefAttributes<HTMLButtonElement>>;
|
|
1414
|
+
//#endregion
|
|
1415
|
+
//#region src/components/primitives/IconBtn.d.ts
|
|
1416
|
+
type IconBtnProps = {
|
|
1417
|
+
icon: ReactNode;
|
|
1418
|
+
onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
|
|
1419
|
+
title?: string;
|
|
1420
|
+
size?: number;
|
|
1421
|
+
active?: boolean;
|
|
1422
|
+
disabled?: boolean;
|
|
1423
|
+
style?: CSSProperties;
|
|
1424
|
+
};
|
|
1425
|
+
export declare const IconBtn: import("react").ForwardRefExoticComponent<IconBtnProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
1426
|
+
//#endregion
|
|
1427
|
+
//#region src/components/primitives/Pill.d.ts
|
|
1428
|
+
type PillTone = "indigo" | "emerald" | "amber" | "rose" | "sky" | "violet" | "slate" | "teal";
|
|
1429
|
+
type PillSize = "xs" | "sm" | "md";
|
|
1430
|
+
type PillProps = {
|
|
1431
|
+
tone?: PillTone;
|
|
1432
|
+
size?: PillSize;
|
|
1433
|
+
dot?: boolean;
|
|
1434
|
+
style?: CSSProperties;
|
|
1435
|
+
children?: ReactNode;
|
|
1436
|
+
};
|
|
1437
|
+
export declare function Pill({ tone, children, size, dot, style }: PillProps): import("react").JSX.Element;
|
|
1438
|
+
//#endregion
|
|
1439
|
+
//#region src/components/primitives/Kbd.d.ts
|
|
1440
|
+
export declare function Kbd({ children }: {
|
|
1441
|
+
children?: ReactNode;
|
|
1442
|
+
}): import("react").JSX.Element;
|
|
1443
|
+
//#endregion
|
|
1444
|
+
//#region src/components/primitives/Avatar.d.ts
|
|
1445
|
+
type AvatarProps = {
|
|
1446
|
+
name: string;
|
|
1447
|
+
size?: number;
|
|
1448
|
+
color?: string;
|
|
1449
|
+
};
|
|
1450
|
+
export declare function Avatar({ name, size, color }: AvatarProps): import("react").JSX.Element;
|
|
1451
|
+
//#endregion
|
|
1452
|
+
//#region src/components/primitives/BrandGlyph.d.ts
|
|
1453
|
+
interface BrandGlyphProps {
|
|
1454
|
+
/** Pixel edge of the rendered SVG. Defaults to 24. */
|
|
1455
|
+
size?: number;
|
|
1456
|
+
className?: string;
|
|
1457
|
+
/** ARIA label; omit for purely decorative usages. */
|
|
1458
|
+
title?: string;
|
|
1459
|
+
}
|
|
1460
|
+
export declare function BrandGlyph({ size, className, title }: BrandGlyphProps): import("react").JSX.Element;
|
|
1461
|
+
//#endregion
|
|
1462
|
+
//#region src/components/primitives/Dropdown.d.ts
|
|
1463
|
+
type DropdownProps = {
|
|
1464
|
+
open: boolean;
|
|
1465
|
+
onClose?: () => void;
|
|
1466
|
+
anchor: HTMLElement | null;
|
|
1467
|
+
/**
|
|
1468
|
+
* Cursor-point anchoring for context menus: when set (and `anchor` is null),
|
|
1469
|
+
* the menu opens at the point and gets the same viewport clamping / above-
|
|
1470
|
+
* flip as element anchoring. One positioning engine for every popover.
|
|
1471
|
+
*/
|
|
1472
|
+
anchorPoint?: {
|
|
1473
|
+
x: number;
|
|
1474
|
+
y: number;
|
|
1475
|
+
};
|
|
1476
|
+
align?: "start" | "end";
|
|
1477
|
+
width?: number;
|
|
1478
|
+
style?: CSSProperties;
|
|
1479
|
+
children?: ReactNode;
|
|
1480
|
+
};
|
|
1481
|
+
export declare function Dropdown({ open, onClose, anchor, anchorPoint, children, align, width, style }: DropdownProps): import("react").ReactPortal | null;
|
|
1482
|
+
//#endregion
|
|
1483
|
+
//#region src/components/primitives/HoverCard.d.ts
|
|
1484
|
+
type HoverCardAlign = "start" | "center" | "end";
|
|
1485
|
+
type HoverCardProps = {
|
|
1486
|
+
/** The card body shown on hover. Caller controls the rendered content. */
|
|
1487
|
+
content: ReactNode;
|
|
1488
|
+
/** The trigger node. Wrapped in an inline span. */
|
|
1489
|
+
children: ReactNode;
|
|
1490
|
+
/** Card width in pixels. Default 320. */
|
|
1491
|
+
width?: number;
|
|
1492
|
+
/** Horizontal alignment relative to the anchor. Default `center`. */
|
|
1493
|
+
align?: HoverCardAlign;
|
|
1494
|
+
/** Optional inline style overrides on the card body. */
|
|
1495
|
+
style?: CSSProperties;
|
|
1496
|
+
};
|
|
1497
|
+
export declare function HoverCard({ content, children, width, align, style }: HoverCardProps): import("react").JSX.Element;
|
|
1498
|
+
//#endregion
|
|
1499
|
+
//#region src/components/primitives/Tooltip.d.ts
|
|
1500
|
+
interface TooltipProps {
|
|
1501
|
+
/** Tooltip text. Empty/absent renders the trigger with no tooltip. */
|
|
1502
|
+
content?: string;
|
|
1503
|
+
children: ReactNode;
|
|
1504
|
+
/** Extra props forwarded to the trigger wrapper (e.g. data-testid). */
|
|
1505
|
+
triggerProps?: React.HTMLAttributes<HTMLSpanElement>;
|
|
1506
|
+
}
|
|
1507
|
+
export declare function Tooltip({ content, children, triggerProps }: TooltipProps): import("react").JSX.Element;
|
|
1508
|
+
interface InfoTooltipProps {
|
|
1509
|
+
label: string;
|
|
1510
|
+
size?: number;
|
|
1511
|
+
"data-testid"?: string;
|
|
1512
|
+
}
|
|
1513
|
+
export declare function InfoTooltip({ label, size, ...rest }: InfoTooltipProps): import("react").JSX.Element;
|
|
1514
|
+
//#endregion
|
|
1515
|
+
//#region src/components/primitives/Chip.d.ts
|
|
1516
|
+
type ChipProps = {
|
|
1517
|
+
tone?: string;
|
|
1518
|
+
icon?: ReactNode;
|
|
1519
|
+
children?: ReactNode;
|
|
1520
|
+
onRemove?: () => void;
|
|
1521
|
+
removeLabel?: string;
|
|
1522
|
+
onClick?: () => void;
|
|
1523
|
+
};
|
|
1524
|
+
export declare function Chip({ icon, children, onRemove, removeLabel, onClick }: ChipProps): import("react").JSX.Element;
|
|
1525
|
+
//#endregion
|
|
1526
|
+
//#region src/components/primitives/SectionCard.d.ts
|
|
1527
|
+
type SectionBadge = {
|
|
1528
|
+
text: string;
|
|
1529
|
+
tone?: PillTone;
|
|
1530
|
+
dot?: boolean;
|
|
1531
|
+
};
|
|
1532
|
+
type SectionEmphasis = "primary" | "secondary";
|
|
1533
|
+
type SectionCardProps = {
|
|
1534
|
+
title: ReactNode;
|
|
1535
|
+
subtitle?: ReactNode;
|
|
1536
|
+
right?: ReactNode;
|
|
1537
|
+
badge?: SectionBadge;
|
|
1538
|
+
count?: number;
|
|
1539
|
+
children?: ReactNode;
|
|
1540
|
+
footer?: ReactNode;
|
|
1541
|
+
collapsible?: boolean;
|
|
1542
|
+
defaultOpen?: boolean;
|
|
1543
|
+
icon?: ReactNode;
|
|
1544
|
+
emphasis?: SectionEmphasis;
|
|
1545
|
+
headingLevel?: number;
|
|
1546
|
+
padding?: string;
|
|
1547
|
+
};
|
|
1548
|
+
export declare function SectionCard({ title, subtitle, right, badge, count, children, footer, collapsible, defaultOpen, icon, emphasis, headingLevel, padding }: SectionCardProps): import("react").JSX.Element;
|
|
1549
|
+
//#endregion
|
|
1550
|
+
//#region src/components/primitives/RecordIdBadge.d.ts
|
|
1551
|
+
type RecordIdBadgeProps = {
|
|
1552
|
+
value: string;
|
|
1553
|
+
};
|
|
1554
|
+
/**
|
|
1555
|
+
* Compact record-ID badge. Truncates UUIDs to their first segment for readability
|
|
1556
|
+
* and copies the full value on click. Non-UUID ids render in full.
|
|
1557
|
+
*/
|
|
1558
|
+
export declare function RecordIdBadge({ value }: RecordIdBadgeProps): import("react").JSX.Element;
|
|
1559
|
+
//#endregion
|
|
1560
|
+
//#region src/components/primitives/RowField.d.ts
|
|
1561
|
+
type RowFieldProps = {
|
|
1562
|
+
label: ReactNode;
|
|
1563
|
+
children?: ReactNode;
|
|
1564
|
+
wide?: boolean;
|
|
1565
|
+
editing?: boolean;
|
|
1566
|
+
required?: boolean;
|
|
1567
|
+
hint?: string;
|
|
1568
|
+
};
|
|
1569
|
+
export declare function RowField({ label, children, wide, editing, required }: RowFieldProps): import("react").JSX.Element;
|
|
1570
|
+
//#endregion
|
|
1571
|
+
//#region src/components/primitives/BoolToggle.d.ts
|
|
1572
|
+
type BoolToggleProps = {
|
|
1573
|
+
value?: boolean;
|
|
1574
|
+
onChange?: (v: boolean) => void;
|
|
1575
|
+
id?: string;
|
|
1576
|
+
ariaLabelledby?: string;
|
|
1577
|
+
};
|
|
1578
|
+
export declare function BoolToggle({ value, onChange, id, ariaLabelledby }: BoolToggleProps): import("react").JSX.Element;
|
|
1579
|
+
//#endregion
|
|
1580
|
+
//#region src/components/primitives/MenuItem.d.ts
|
|
1581
|
+
type MenuItemProps = {
|
|
1582
|
+
icon?: ReactNode;
|
|
1583
|
+
children?: ReactNode;
|
|
1584
|
+
onClick?: () => void;
|
|
1585
|
+
danger?: boolean;
|
|
1586
|
+
kbd?: ReactNode;
|
|
1587
|
+
active?: boolean;
|
|
1588
|
+
divider?: boolean;
|
|
1589
|
+
disabled?: boolean;
|
|
1590
|
+
title?: string;
|
|
1591
|
+
"data-testid"?: string;
|
|
1592
|
+
};
|
|
1593
|
+
export declare function MenuItem({ icon, children, onClick, danger, kbd, active, divider, disabled, title, "data-testid": dataTestId }: MenuItemProps): import("react").JSX.Element;
|
|
1594
|
+
//#endregion
|
|
1595
|
+
//#region src/components/primitives/Check.d.ts
|
|
1596
|
+
type CheckProps = {
|
|
1597
|
+
checked?: boolean;
|
|
1598
|
+
onChange?: (v: boolean) => void;
|
|
1599
|
+
indeterminate?: boolean;
|
|
1600
|
+
size?: number;
|
|
1601
|
+
};
|
|
1602
|
+
export declare function Check({ checked, onChange, indeterminate, size }: CheckProps): import("react").JSX.Element;
|
|
1603
|
+
//#endregion
|
|
1604
|
+
//#region src/components/primitives/Spinner.d.ts
|
|
1605
|
+
export declare function Spinner({ size }: {
|
|
1606
|
+
size?: number;
|
|
1607
|
+
}): import("react").JSX.Element;
|
|
1608
|
+
//#endregion
|
|
1609
|
+
//#region src/components/primitives/ClassifiedFieldLocked.d.ts
|
|
1610
|
+
interface ClassifiedFieldLockedProps {
|
|
1611
|
+
tier: string;
|
|
1612
|
+
tierDef?: ClassificationTierDef;
|
|
1613
|
+
requiredPermission?: string;
|
|
1614
|
+
variant?: "value" | "input";
|
|
1615
|
+
}
|
|
1616
|
+
export declare function ClassifiedFieldLocked({ tier, tierDef, requiredPermission, variant }: ClassifiedFieldLockedProps): import("react").JSX.Element;
|
|
1617
|
+
//#endregion
|
|
1618
|
+
//#region src/components/primitives/Fields.d.ts
|
|
1619
|
+
type FieldLabelProps = {
|
|
1620
|
+
children?: ReactNode;
|
|
1621
|
+
required?: boolean;
|
|
1622
|
+
hint?: string;
|
|
1623
|
+
htmlFor?: string;
|
|
1624
|
+
id?: string;
|
|
1625
|
+
};
|
|
1626
|
+
export declare const FieldLabel: ({ children, required, hint, htmlFor, id }: FieldLabelProps) => import("react").JSX.Element;
|
|
1627
|
+
type TextInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "prefix"> & {
|
|
1628
|
+
value?: string | null;
|
|
1629
|
+
onChange?: (v: string) => void;
|
|
1630
|
+
prefix?: ReactNode;
|
|
1631
|
+
suffix?: ReactNode;
|
|
1632
|
+
style?: CSSProperties;
|
|
1633
|
+
};
|
|
1634
|
+
export declare function TextInput({ value, onChange, placeholder, prefix, suffix, style, ...rest }: TextInputProps): import("react").JSX.Element;
|
|
1635
|
+
type TextAreaProps = {
|
|
1636
|
+
value?: string | null;
|
|
1637
|
+
onChange?: (v: string) => void;
|
|
1638
|
+
placeholder?: string;
|
|
1639
|
+
rows?: number;
|
|
1640
|
+
fill?: boolean;
|
|
1641
|
+
id?: string;
|
|
1642
|
+
name?: string;
|
|
1643
|
+
ariaRequired?: boolean;
|
|
1644
|
+
};
|
|
1645
|
+
export declare function TextArea({ value, onChange, placeholder, rows, fill, id, name, ariaRequired }: TextAreaProps): import("react").JSX.Element;
|
|
1646
|
+
type SelectOption = {
|
|
1647
|
+
value: string;
|
|
1648
|
+
label: ReactNode;
|
|
1649
|
+
heading?: boolean;
|
|
1650
|
+
divider?: boolean;
|
|
1651
|
+
};
|
|
1652
|
+
type SelectProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "value" | "onChange"> & {
|
|
1653
|
+
value?: string;
|
|
1654
|
+
options: SelectOption[];
|
|
1655
|
+
onChange: (v: string) => void;
|
|
1656
|
+
placeholder?: string;
|
|
1657
|
+
/**
|
|
1658
|
+
* Server-search mode. When set, the typed query is reported here (instead of
|
|
1659
|
+
* filtering the options client-side) so the parent can fetch matching
|
|
1660
|
+
* options from the server; the dropdown renders the given `options` as-is.
|
|
1661
|
+
* The search input is always shown in this mode. Absent -> client-side
|
|
1662
|
+
* filtering over `options`, as before.
|
|
1663
|
+
*/
|
|
1664
|
+
onSearchChange?: (query: string) => void;
|
|
1665
|
+
};
|
|
1666
|
+
export declare function Select({ value, options, onChange, placeholder, onSearchChange, ...rest }: SelectProps): import("react").JSX.Element;
|
|
1667
|
+
type MultiSelectProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "value" | "onChange"> & {
|
|
1668
|
+
value?: string[];
|
|
1669
|
+
options: SelectOption[];
|
|
1670
|
+
onChange: (v: string[]) => void;
|
|
1671
|
+
placeholder?: string;
|
|
1672
|
+
};
|
|
1673
|
+
export declare function MultiSelect({ value, options, onChange, placeholder, ...rest }: MultiSelectProps): import("react").JSX.Element;
|
|
1674
|
+
type DateInputProps = {
|
|
1675
|
+
value?: string | null;
|
|
1676
|
+
onChange?: (v: string) => void;
|
|
1677
|
+
};
|
|
1678
|
+
export declare function DateInput({ value, onChange }: DateInputProps): import("react").JSX.Element;
|
|
1679
|
+
type PasswordInputProps = {
|
|
1680
|
+
value?: string | null;
|
|
1681
|
+
onChange?: (v: string) => void;
|
|
1682
|
+
placeholder?: string;
|
|
1683
|
+
showStrength?: boolean;
|
|
1684
|
+
id?: string;
|
|
1685
|
+
name?: string;
|
|
1686
|
+
ariaRequired?: boolean;
|
|
1687
|
+
};
|
|
1688
|
+
export declare function PasswordInput({ value, onChange, placeholder, showStrength, id, name, ariaRequired }: PasswordInputProps): import("react").JSX.Element;
|
|
1689
|
+
type TagsInputProps = {
|
|
1690
|
+
value?: string[];
|
|
1691
|
+
onChange: (v: string[]) => void;
|
|
1692
|
+
};
|
|
1693
|
+
export declare function TagsInput({ value, onChange }: TagsInputProps): import("react").JSX.Element;
|
|
1694
|
+
type JsonFieldProps = {
|
|
1695
|
+
value?: string;
|
|
1696
|
+
onChange?: (v: string) => void;
|
|
1697
|
+
};
|
|
1698
|
+
export declare function JsonField({ value, onChange }: JsonFieldProps): import("react").JSX.Element;
|
|
1699
|
+
type RefFieldItem = {
|
|
1700
|
+
id: string;
|
|
1701
|
+
name: string;
|
|
1702
|
+
};
|
|
1703
|
+
type RefFieldProps = {
|
|
1704
|
+
value?: string;
|
|
1705
|
+
entity?: string;
|
|
1706
|
+
onChange?: (v: string) => void;
|
|
1707
|
+
items?: RefFieldItem[];
|
|
1708
|
+
id?: string;
|
|
1709
|
+
ariaLabelledby?: string;
|
|
1710
|
+
ariaRequired?: boolean;
|
|
1711
|
+
};
|
|
1712
|
+
export declare function RefField({ value, entity, onChange, items, id, ariaLabelledby, ariaRequired }: RefFieldProps): import("react").JSX.Element;
|
|
1713
|
+
type ViewFieldProps = {
|
|
1714
|
+
label: ReactNode;
|
|
1715
|
+
children?: ReactNode;
|
|
1716
|
+
mono?: boolean;
|
|
1717
|
+
wide?: boolean;
|
|
1718
|
+
empty?: boolean;
|
|
1719
|
+
};
|
|
1720
|
+
export declare function ViewField({ label, children, mono, wide, empty }: ViewFieldProps): import("react").JSX.Element;
|
|
1721
|
+
type QuickEditCellProps = {
|
|
1722
|
+
value?: string;
|
|
1723
|
+
onChange?: (v: string) => void;
|
|
1724
|
+
type?: "text" | "select" | "bool";
|
|
1725
|
+
options?: SelectOption[];
|
|
1726
|
+
tone?: string;
|
|
1727
|
+
};
|
|
1728
|
+
export declare function QuickEditCell({ value, onChange, type, options }: QuickEditCellProps): import("react").JSX.Element;
|
|
1729
|
+
//#endregion
|
|
1730
|
+
//#region src/components/list/InlineEditCell.d.ts
|
|
1731
|
+
type InlineEditTrigger = "dblclick" | "enter" | "always";
|
|
1732
|
+
type InlineEditKind = "text" | "select" | "bool";
|
|
1733
|
+
interface InlineEditCellProps {
|
|
1734
|
+
value?: string;
|
|
1735
|
+
onSave: (v: string) => Promise<void> | void;
|
|
1736
|
+
type?: InlineEditKind;
|
|
1737
|
+
options?: SelectOption[];
|
|
1738
|
+
/** Drives when a display cell flips to edit. Default `always` (matches QuickEditCell). */
|
|
1739
|
+
trigger?: InlineEditTrigger;
|
|
1740
|
+
/** Field label — surfaces in the error toast so the user knows which cell rolled back. */
|
|
1741
|
+
label?: string;
|
|
1742
|
+
placeholder?: string;
|
|
1743
|
+
}
|
|
1744
|
+
export declare function InlineEditCell({ value, onSave, type, options, trigger, label, placeholder }: InlineEditCellProps): import("react").JSX.Element;
|
|
1745
|
+
//#endregion
|
|
1746
|
+
//#region src/components/pages/auth/SignIn.d.ts
|
|
1747
|
+
export declare function SignIn(): import("react").JSX.Element;
|
|
1748
|
+
//#endregion
|
|
1749
|
+
//#region src/components/pages/auth/SignUp.d.ts
|
|
1750
|
+
export declare function SignUp(): import("react").JSX.Element;
|
|
1751
|
+
//#endregion
|
|
1752
|
+
//#region src/components/pages/auth/Forgot.d.ts
|
|
1753
|
+
export declare function Forgot(): import("react").JSX.Element;
|
|
1754
|
+
//#endregion
|
|
1755
|
+
//#region src/components/pages/auth/Reset.d.ts
|
|
1756
|
+
export declare function Reset(): import("react").JSX.Element;
|
|
1757
|
+
//#endregion
|
|
1758
|
+
//#region src/components/pages/auth/TwoFA.d.ts
|
|
1759
|
+
export declare function TwoFA(): import("react").JSX.Element;
|
|
1760
|
+
//#endregion
|
|
1761
|
+
//#region src/components/pages/auth/AuthShell.d.ts
|
|
1762
|
+
type AuthShellProps = {
|
|
1763
|
+
children: ReactNode;
|
|
1764
|
+
/** With `branding.identity.workspace_domain`, shows the `<tenantSlug>.<domain>` pill. No SDK caller
|
|
1765
|
+
* passes it until tenant-from-host resolution exists. */
|
|
1766
|
+
tenantSlug?: string;
|
|
1767
|
+
tagline?: string;
|
|
1768
|
+
subTagline?: string;
|
|
1769
|
+
version?: string;
|
|
1770
|
+
badges?: Array<[string, keyof typeof Icon]>;
|
|
1771
|
+
/** Optional override for the wordmark / app name shown in topbar + brand panel. */
|
|
1772
|
+
brandName?: string;
|
|
1773
|
+
};
|
|
1774
|
+
export declare function AuthShell({ children, tenantSlug, tagline, subTagline, version, badges, brandName }: AuthShellProps): import("react").JSX.Element;
|
|
1775
|
+
//#endregion
|
|
1776
|
+
//#region src/components/pages/profile/Profile.d.ts
|
|
1777
|
+
export declare function Profile(): import("react").JSX.Element;
|
|
1778
|
+
//#endregion
|
|
1779
|
+
//#region src/components/pages/profile/Preferences.d.ts
|
|
1780
|
+
export declare function Preferences(): import("react").JSX.Element;
|
|
1781
|
+
//#endregion
|
|
1782
|
+
//#region src/components/shared/ChangePasswordDialog.impl.d.ts
|
|
1783
|
+
type ChangePasswordDialogProps = {
|
|
1784
|
+
open: boolean;
|
|
1785
|
+
onClose: () => void;
|
|
1786
|
+
onSubmit: (input: {
|
|
1787
|
+
current: string;
|
|
1788
|
+
next: string;
|
|
1789
|
+
}) => Promise<void> | void;
|
|
1790
|
+
};
|
|
1791
|
+
//#endregion
|
|
1792
|
+
//#region src/components/shared/ChangePasswordDialog.d.ts
|
|
1793
|
+
export declare function ChangePasswordDialog(props: ChangePasswordDialogProps): import("react").JSX.Element;
|
|
1794
|
+
//#endregion
|
|
1795
|
+
//#region src/components/file-widgets/types.d.ts
|
|
1796
|
+
interface FileWidgetProps {
|
|
1797
|
+
field: FileFieldDef;
|
|
1798
|
+
fieldName: string;
|
|
1799
|
+
entityCode?: string;
|
|
1800
|
+
value: FileFieldValue;
|
|
1801
|
+
mode: "display" | "edit";
|
|
1802
|
+
onChange?: (next: FileFieldValue) => void;
|
|
1803
|
+
disabled?: boolean;
|
|
1804
|
+
alt?: string;
|
|
1805
|
+
recordTitle?: string;
|
|
1806
|
+
uploadFieldCode?: string;
|
|
1807
|
+
uploadSlotCode?: string;
|
|
1808
|
+
fieldId?: string;
|
|
1809
|
+
}
|
|
1810
|
+
type FileWidget = React.ComponentType<FileWidgetProps>;
|
|
1811
|
+
//#endregion
|
|
1812
|
+
//#region src/components/file-widgets/SquareImage.d.ts
|
|
1813
|
+
export declare function SquareImage(props: FileWidgetProps): import("react").JSX.Element;
|
|
1814
|
+
//#endregion
|
|
1815
|
+
//#region src/components/file-widgets/CircleImage.d.ts
|
|
1816
|
+
export declare function CircleImage(props: FileWidgetProps): import("react").JSX.Element;
|
|
1817
|
+
//#endregion
|
|
1818
|
+
//#region src/components/file-widgets/WideBanner.d.ts
|
|
1819
|
+
export declare function WideBanner(props: FileWidgetProps): import("react").JSX.Element;
|
|
1820
|
+
//#endregion
|
|
1821
|
+
//#region src/components/file-widgets/registry.d.ts
|
|
1822
|
+
export declare function registerFileWidget(code: string, widget: FileWidget): void;
|
|
1823
|
+
export declare function getFileWidget(code: string): FileWidget | undefined;
|
|
1824
|
+
export declare function hasFileWidget(code: string): boolean;
|
|
1825
|
+
//#endregion
|
|
1826
|
+
//#region src/components/file-widgets/upload.d.ts
|
|
1827
|
+
interface UploadOptions {
|
|
1828
|
+
file: File;
|
|
1829
|
+
entityCode?: string;
|
|
1830
|
+
fieldCode?: string;
|
|
1831
|
+
slotCode?: string;
|
|
1832
|
+
onProgress?: (p: UploadProgress) => void;
|
|
1833
|
+
signal?: AbortSignal;
|
|
1834
|
+
}
|
|
1835
|
+
export declare class UploadError extends Error {
|
|
1836
|
+
/** The declared type's identifier, e.g. `file.too_large`. */
|
|
1837
|
+
code: string;
|
|
1838
|
+
status: number;
|
|
1839
|
+
/** The untouched body, so a declared member reaches a caller through ext(). */
|
|
1840
|
+
raw?: unknown;
|
|
1841
|
+
constructor(status: number, code: string, message: string, raw?: unknown);
|
|
1842
|
+
/** A declared member of this error's type, read the one way. */
|
|
1843
|
+
ext<T = unknown>(member: string): T | undefined;
|
|
1844
|
+
}
|
|
1845
|
+
export declare function uploadFile(opts: UploadOptions): Promise<UploadedFile>;
|
|
1846
|
+
export declare function discardFile(fileId: string): Promise<void>;
|
|
1847
|
+
type UploadCheck = {
|
|
1848
|
+
code: "file.too_large";
|
|
1849
|
+
message: string;
|
|
1850
|
+
size: number;
|
|
1851
|
+
max: number;
|
|
1852
|
+
} | {
|
|
1853
|
+
code: "file.field_violation";
|
|
1854
|
+
message: string;
|
|
1855
|
+
type: string;
|
|
1856
|
+
};
|
|
1857
|
+
export declare function validateClientSide(file: File, accepts: string[] | undefined, maxBytes: number | undefined): UploadCheck | null;
|
|
1858
|
+
export declare function formatBytes(n: number): string;
|
|
1859
|
+
//#endregion
|
|
1860
|
+
//#region src/components/file-widgets/cropper.d.ts
|
|
1861
|
+
interface CropperOptions {
|
|
1862
|
+
aspectRatio?: number;
|
|
1863
|
+
file: File;
|
|
1864
|
+
}
|
|
1865
|
+
interface CropperResult {
|
|
1866
|
+
blob: Blob;
|
|
1867
|
+
filename: string;
|
|
1868
|
+
}
|
|
1869
|
+
type ImageCropper = (opts: CropperOptions) => Promise<CropperResult>;
|
|
1870
|
+
export declare function setImageCropper(c: ImageCropper | null): void;
|
|
1871
|
+
export declare function getImageCropper(): ImageCropper;
|
|
1872
|
+
//#endregion
|
|
1873
|
+
//#region src/components/file-widgets/draft-scope.d.ts
|
|
1874
|
+
interface DraftEntry {
|
|
1875
|
+
fileId: string;
|
|
1876
|
+
discard: () => Promise<void> | void;
|
|
1877
|
+
}
|
|
1878
|
+
interface FileDraftScopeApi {
|
|
1879
|
+
registerDraft(entry: DraftEntry): void;
|
|
1880
|
+
unregisterDraft(fileId: string): void;
|
|
1881
|
+
hasDraft(fileId: string): boolean;
|
|
1882
|
+
flushAllDrafts(): Promise<void>;
|
|
1883
|
+
markCommitted(fileId: string): void;
|
|
1884
|
+
}
|
|
1885
|
+
export declare function FileDraftScope({ children }: {
|
|
1886
|
+
children: ReactNode;
|
|
1887
|
+
}): import("react").JSX.Element;
|
|
1888
|
+
export declare function useFileDraftScope(): FileDraftScopeApi;
|
|
1889
|
+
export declare function useDraftRegistration(): {
|
|
1890
|
+
register: (fileId: string, discard: () => Promise<void> | void) => void;
|
|
1891
|
+
unregister: (fileId: string) => void;
|
|
1892
|
+
markCommitted: (fileId: string) => void;
|
|
1893
|
+
isDraft: (fileId: string) => boolean;
|
|
1894
|
+
};
|
|
1895
|
+
//#endregion
|
|
1896
|
+
//#region src/components/layout/Rail.d.ts
|
|
1897
|
+
interface RailAreaItem {
|
|
1898
|
+
id: string;
|
|
1899
|
+
icon: string | undefined;
|
|
1900
|
+
label: string;
|
|
1901
|
+
}
|
|
1902
|
+
interface RailProps {
|
|
1903
|
+
activeArea: string;
|
|
1904
|
+
onPick: (id: string) => void;
|
|
1905
|
+
onToggleAI: () => void;
|
|
1906
|
+
aiOpen: boolean;
|
|
1907
|
+
onCmdK: () => void;
|
|
1908
|
+
areas?: AreaDef[];
|
|
1909
|
+
/**
|
|
1910
|
+
* Consumer branding identity. When `app_logo` is present
|
|
1911
|
+
* the rail's brand tile renders the consumer image. Otherwise `app_name`
|
|
1912
|
+
* supplies an initial and tooltip; with neither value the tile is empty.
|
|
1913
|
+
*/
|
|
1914
|
+
branding?: BrandingIdentity;
|
|
1915
|
+
}
|
|
1916
|
+
export declare function Rail({ activeArea, onPick, onToggleAI, aiOpen, onCmdK, areas, branding }: RailProps): import("react").JSX.Element;
|
|
1917
|
+
//#endregion
|
|
1918
|
+
//#region src/components/layout/Sidebar.d.ts
|
|
1919
|
+
interface SidebarProps {
|
|
1920
|
+
activeArea: string;
|
|
1921
|
+
}
|
|
1922
|
+
export declare function Sidebar({ activeArea }: SidebarProps): import("react").JSX.Element;
|
|
1923
|
+
interface SidebarSection {
|
|
1924
|
+
title: string;
|
|
1925
|
+
items: NavNode[];
|
|
1926
|
+
}
|
|
1927
|
+
export declare function buildSections(t: TextFn, nodes: NavNode[], activeArea: string): SidebarSection[];
|
|
1928
|
+
//#endregion
|
|
1929
|
+
//#region src/components/chrome/Breadcrumbs.d.ts
|
|
1930
|
+
interface Crumb {
|
|
1931
|
+
label: string;
|
|
1932
|
+
icon?: IconName | (string & {});
|
|
1933
|
+
onClick?: () => void;
|
|
1934
|
+
target?: unknown;
|
|
1935
|
+
/** True for the final segment (rendered bold per design spec). */
|
|
1936
|
+
isLast?: boolean;
|
|
1937
|
+
}
|
|
1938
|
+
interface BreadcrumbsProps {
|
|
1939
|
+
items: Crumb[];
|
|
1940
|
+
onCrumbClick?: (crumb: Crumb) => void;
|
|
1941
|
+
}
|
|
1942
|
+
export declare function Breadcrumbs({ items, onCrumbClick }: BreadcrumbsProps): import("react").JSX.Element | null;
|
|
1943
|
+
//#endregion
|
|
1944
|
+
//#region src/components/layout/TopBar.d.ts
|
|
1945
|
+
interface TopBarProps {
|
|
1946
|
+
breadcrumbs?: Crumb[];
|
|
1947
|
+
onCrumbClick?: (c: Crumb) => void;
|
|
1948
|
+
onOpenNav?: () => void;
|
|
1949
|
+
navButtonRef?: RefObject<HTMLButtonElement | null>;
|
|
1950
|
+
showNavButton?: boolean;
|
|
1951
|
+
onOpenTabs?: () => void;
|
|
1952
|
+
tabsButtonRef?: RefObject<HTMLButtonElement | null>;
|
|
1953
|
+
showTabsButton?: boolean;
|
|
1954
|
+
mobileTabCount?: number;
|
|
1955
|
+
onCmdK?: () => void;
|
|
1956
|
+
onToggleAI?: () => void;
|
|
1957
|
+
aiOpen?: boolean;
|
|
1958
|
+
onOpenProfile?: () => void;
|
|
1959
|
+
onOpenPrefs?: () => void;
|
|
1960
|
+
showTenantSwitcher?: boolean;
|
|
1961
|
+
showBreadcrumbs?: boolean;
|
|
1962
|
+
showThemeToggle?: boolean;
|
|
1963
|
+
}
|
|
1964
|
+
export declare function TopBar({ breadcrumbs, onCrumbClick, onOpenNav, navButtonRef, showNavButton, onOpenTabs, tabsButtonRef, showTabsButton, mobileTabCount, onCmdK, onToggleAI, aiOpen, onOpenProfile, onOpenPrefs, showTenantSwitcher, showBreadcrumbs, showThemeToggle }?: TopBarProps): import("react").JSX.Element;
|
|
1965
|
+
//#endregion
|
|
1966
|
+
//#region src/components/layout/TenantChip.d.ts
|
|
1967
|
+
interface TenantChipProps {
|
|
1968
|
+
tenant: Tenant | null;
|
|
1969
|
+
tenants: Tenant[];
|
|
1970
|
+
onSwitch: (tenant: Tenant) => void;
|
|
1971
|
+
busy?: boolean;
|
|
1972
|
+
compact?: boolean;
|
|
1973
|
+
/**
|
|
1974
|
+
* When true, the chip is disabled with a tooltip explaining why.
|
|
1975
|
+
* Used during impersonation: cross-tenant targeting at start is
|
|
1976
|
+
* supported, but mid-session tenant switching is undefined and
|
|
1977
|
+
* locked.
|
|
1978
|
+
*/
|
|
1979
|
+
locked?: boolean;
|
|
1980
|
+
lockedReason?: string;
|
|
1981
|
+
}
|
|
1982
|
+
interface EnvTone {
|
|
1983
|
+
fg: string;
|
|
1984
|
+
bg: string;
|
|
1985
|
+
border?: string;
|
|
1986
|
+
darkFg?: string;
|
|
1987
|
+
darkBg?: string;
|
|
1988
|
+
}
|
|
1989
|
+
export declare function envTone(env?: TenantEnv): EnvTone;
|
|
1990
|
+
export declare function TenantChip({ tenant, tenants, onSwitch, busy, compact, locked, lockedReason }: TenantChipProps): import("react").JSX.Element;
|
|
1991
|
+
//#endregion
|
|
1992
|
+
//#region src/components/layout/TabStrip.d.ts
|
|
1993
|
+
interface TabStripProps {
|
|
1994
|
+
onNew?: () => void;
|
|
1995
|
+
onCloseRequest?: (scope: TabCloseScope, targetId?: string) => void;
|
|
1996
|
+
}
|
|
1997
|
+
export declare function TabStrip({ onNew: onNewProp, onCloseRequest }?: TabStripProps): import("react").JSX.Element | null;
|
|
1998
|
+
//#endregion
|
|
1999
|
+
//#region src/components/layout/ImpersonationBanner.d.ts
|
|
2000
|
+
export declare function ImpersonationBanner(): import("react").JSX.Element;
|
|
2001
|
+
//#endregion
|
|
2002
|
+
//#region src/components/layout/ImpersonationFrame.d.ts
|
|
2003
|
+
/**
|
|
2004
|
+
* Fixed 4px viewport overlay frame that surrounds every route. Visible
|
|
2005
|
+
* for the duration of an impersonation session. The
|
|
2006
|
+
* pointer-events:none guarantees the frame never blocks clicks.
|
|
2007
|
+
*
|
|
2008
|
+
* Color comes from --impersonation-accent (amber by default). When
|
|
2009
|
+
* impersonation.allow_destructive=true, this component sets a body
|
|
2010
|
+
* attribute that flips the variable to red across the banner, chip,
|
|
2011
|
+
* and frame in lockstep (one CSS variable, no parallel state).
|
|
2012
|
+
*/
|
|
2013
|
+
export declare function ImpersonationFrame(): import("react").JSX.Element | null;
|
|
2014
|
+
//#endregion
|
|
2015
|
+
//#region src/components/layout/ImpersonationStartModal.impl.d.ts
|
|
2016
|
+
interface ImpersonationStartModalProps {
|
|
2017
|
+
/** Open state controlled by the caller. */
|
|
2018
|
+
open: boolean;
|
|
2019
|
+
/** Target user the admin is about to impersonate. */
|
|
2020
|
+
targetUserId: string;
|
|
2021
|
+
targetUserLabel?: string;
|
|
2022
|
+
/** Closes the modal without dispatching. Caller resets state. */
|
|
2023
|
+
onClose: () => void;
|
|
2024
|
+
/**
|
|
2025
|
+
* Called after the start mutation succeeds. Useful for closing the
|
|
2026
|
+
* modal and navigating; auth state is rehydrated by the hook itself.
|
|
2027
|
+
*/
|
|
2028
|
+
onStarted?: () => void;
|
|
2029
|
+
}
|
|
2030
|
+
//#endregion
|
|
2031
|
+
//#region src/components/layout/ImpersonationStartModal.d.ts
|
|
2032
|
+
/**
|
|
2033
|
+
* Reason modal for impersonation.start. Enforces a minimum reason
|
|
2034
|
+
* length (server-side param impersonation.require_reason_min_length,
|
|
2035
|
+
* default 10) before submitting. The "Duration" input is optional and
|
|
2036
|
+
* is capped server-side by impersonation.max_duration.
|
|
2037
|
+
*/
|
|
2038
|
+
export declare function ImpersonationStartModal(props: ImpersonationStartModalProps): import("react").JSX.Element;
|
|
2039
|
+
//#endregion
|
|
2040
|
+
//#region src/api/auth.d.ts
|
|
2041
|
+
/**
|
|
2042
|
+
* Impersonation client surface. Each call dispatches through
|
|
2043
|
+
* POST /api/actions/{code} like every other auth handler. The server
|
|
2044
|
+
* sets / clears the impersonation cookies via the LoginResult
|
|
2045
|
+
* HTTPCustomizer; the client receives the public response shape
|
|
2046
|
+
* (user / tenant / expires_at) and reloads the auth context.
|
|
2047
|
+
*/
|
|
2048
|
+
interface ImpersonationStartResponse extends LoginResponse {
|
|
2049
|
+
impersonation_session_id: string;
|
|
2050
|
+
session_expires_at: string;
|
|
2051
|
+
}
|
|
2052
|
+
//#endregion
|
|
2053
|
+
//#region src/hooks/useImpersonation.d.ts
|
|
2054
|
+
/**
|
|
2055
|
+
* useImpersonation centralizes the three lifecycle calls (start, stop,
|
|
2056
|
+
* revoke) and re-hydrates auth state on success so the topbar / banner /
|
|
2057
|
+
* viewport frame react in lockstep.
|
|
2058
|
+
*
|
|
2059
|
+
* isImpersonating is derived from auth.me's impersonation field which the
|
|
2060
|
+
* server populates only when the request was issued under an active
|
|
2061
|
+
* impersonation session. Direct human action and agent flows (without an
|
|
2062
|
+
* impersonation channel) leave it null.
|
|
2063
|
+
*/
|
|
2064
|
+
export declare function useImpersonation(): {
|
|
2065
|
+
info: ImpersonationInfo | null;
|
|
2066
|
+
isImpersonating: boolean;
|
|
2067
|
+
start: import("@tanstack/react-query").UseMutateFunction<ImpersonationStartResponse, Error, {
|
|
2068
|
+
targetUserId: string;
|
|
2069
|
+
reason: string;
|
|
2070
|
+
durationMinutes?: number;
|
|
2071
|
+
}, unknown>;
|
|
2072
|
+
stop: import("@tanstack/react-query").UseMutateFunction<LoginResponse, Error, void, unknown>;
|
|
2073
|
+
revoke: import("@tanstack/react-query").UseMutateFunction<void, Error, string, unknown>;
|
|
2074
|
+
isStarting: boolean;
|
|
2075
|
+
isStopping: boolean;
|
|
2076
|
+
};
|
|
2077
|
+
//#endregion
|
|
2078
|
+
//#region src/components/layout/CommandPalette.impl.d.ts
|
|
2079
|
+
type CommandActionType = "nav" | "new" | "open" | "ai" | "ai-panel" | "theme" | "tab-close";
|
|
2080
|
+
interface CommandAction {
|
|
2081
|
+
type: CommandActionType;
|
|
2082
|
+
id?: string;
|
|
2083
|
+
route?: string;
|
|
2084
|
+
q?: string;
|
|
2085
|
+
tabCloseScope?: TabCloseScope;
|
|
2086
|
+
}
|
|
2087
|
+
interface CommandPaletteProps {
|
|
2088
|
+
open: boolean;
|
|
2089
|
+
onClose: () => void;
|
|
2090
|
+
onAction: (a: CommandAction) => void;
|
|
2091
|
+
mode?: "default" | "new";
|
|
2092
|
+
navigation?: NavNode[];
|
|
2093
|
+
screens?: Record<string, Screen>;
|
|
2094
|
+
includeAI?: boolean;
|
|
2095
|
+
aiName?: string;
|
|
2096
|
+
}
|
|
2097
|
+
//#endregion
|
|
2098
|
+
//#region src/components/layout/CommandPalette.d.ts
|
|
2099
|
+
export declare function CommandPalette(props: CommandPaletteProps): import("react").JSX.Element;
|
|
2100
|
+
//#endregion
|
|
2101
|
+
//#region src/api/agents.d.ts
|
|
2102
|
+
type AgentRole = "user" | "assistant" | "tool" | "system";
|
|
2103
|
+
type AgentContentBlock = {
|
|
2104
|
+
type: "text";
|
|
2105
|
+
text: string;
|
|
2106
|
+
} | {
|
|
2107
|
+
type: "tool_use";
|
|
2108
|
+
id: string;
|
|
2109
|
+
name: string;
|
|
2110
|
+
input: Record<string, unknown>;
|
|
2111
|
+
} | {
|
|
2112
|
+
type: "tool_result";
|
|
2113
|
+
id: string;
|
|
2114
|
+
name?: string;
|
|
2115
|
+
output: unknown;
|
|
2116
|
+
is_error?: boolean;
|
|
2117
|
+
} | {
|
|
2118
|
+
type: "elicit";
|
|
2119
|
+
id: string;
|
|
2120
|
+
schema: Record<string, unknown>;
|
|
2121
|
+
message: string;
|
|
2122
|
+
} | {
|
|
2123
|
+
type: "elicit_response";
|
|
2124
|
+
id: string;
|
|
2125
|
+
data: Record<string, unknown>;
|
|
2126
|
+
} | {
|
|
2127
|
+
type: "attachment";
|
|
2128
|
+
kind: string;
|
|
2129
|
+
content: string;
|
|
2130
|
+
} | {
|
|
2131
|
+
type: "summary";
|
|
2132
|
+
covers: string[];
|
|
2133
|
+
text: string;
|
|
2134
|
+
} | {
|
|
2135
|
+
type: "system";
|
|
2136
|
+
reason: string;
|
|
2137
|
+
} | {
|
|
2138
|
+
type: "location";
|
|
2139
|
+
screen: string;
|
|
2140
|
+
record?: string;
|
|
2141
|
+
} | {
|
|
2142
|
+
type: "decision";
|
|
2143
|
+
tool_use_id?: string;
|
|
2144
|
+
tool_code: string;
|
|
2145
|
+
decision: "approved" | "rejected";
|
|
2146
|
+
decided_by?: string;
|
|
2147
|
+
decided_at?: string;
|
|
2148
|
+
note?: string;
|
|
2149
|
+
};
|
|
2150
|
+
interface AgentMessage {
|
|
2151
|
+
id: string;
|
|
2152
|
+
conversation_id: string;
|
|
2153
|
+
seq: number;
|
|
2154
|
+
role: AgentRole;
|
|
2155
|
+
content: AgentContentBlock[];
|
|
2156
|
+
created_at: string;
|
|
2157
|
+
streaming?: boolean;
|
|
2158
|
+
}
|
|
2159
|
+
type AgentTurnStatus = "queued" | "running" | "waiting" | "completed" | "failed" | "canceled";
|
|
2160
|
+
interface AgentTurn {
|
|
2161
|
+
id: string;
|
|
2162
|
+
conversation_id: string;
|
|
2163
|
+
trigger_message_id: string;
|
|
2164
|
+
runnable_message_seq: number;
|
|
2165
|
+
status: AgentTurnStatus;
|
|
2166
|
+
model_step: number;
|
|
2167
|
+
reserved_assistant_message_id?: string | null;
|
|
2168
|
+
error_code?: string | null;
|
|
2169
|
+
error_details?: unknown;
|
|
2170
|
+
}
|
|
2171
|
+
type AgentInvocationStatus = "proposed" | "pending_input" | "pending_approval" | "approved" | "rejected" | "running" | "succeeded" | "failed" | "canceled" | "interrupted" | "outcome_unknown";
|
|
2172
|
+
type AgentInvocationKind = "action" | "input_request" | "tool";
|
|
2173
|
+
interface AgentToolInvocation {
|
|
2174
|
+
id: string;
|
|
2175
|
+
updated_at?: string;
|
|
2176
|
+
conversation_id: string | null;
|
|
2177
|
+
message_id: string | null;
|
|
2178
|
+
kind: AgentInvocationKind;
|
|
2179
|
+
turn_id: string | null;
|
|
2180
|
+
assistant_message_id: string | null;
|
|
2181
|
+
response_message_id: string | null;
|
|
2182
|
+
provider_call_id: string | null;
|
|
2183
|
+
call_ordinal: number | null;
|
|
2184
|
+
server_code: string;
|
|
2185
|
+
tool_code: string;
|
|
2186
|
+
params: Record<string, unknown>;
|
|
2187
|
+
requester_user_id: string;
|
|
2188
|
+
real_user_id: string | null;
|
|
2189
|
+
question?: {
|
|
2190
|
+
key?: string;
|
|
2191
|
+
message?: string;
|
|
2192
|
+
schema?: Record<string, unknown>;
|
|
2193
|
+
};
|
|
2194
|
+
status: AgentInvocationStatus;
|
|
2195
|
+
approval?: {
|
|
2196
|
+
decided_by?: string;
|
|
2197
|
+
decided_at?: string;
|
|
2198
|
+
reason?: string;
|
|
2199
|
+
edits?: Record<string, unknown>;
|
|
2200
|
+
};
|
|
2201
|
+
confirmation_mode?: "never" | "once_per_conversation" | "always";
|
|
2202
|
+
result?: unknown;
|
|
2203
|
+
audit_operation_id?: string;
|
|
2204
|
+
reason?: string;
|
|
2205
|
+
confidence?: number;
|
|
2206
|
+
}
|
|
2207
|
+
type AgentConversationStatus = "active" | "canceling" | "interrupted" | "closed";
|
|
2208
|
+
interface AgentConversation {
|
|
2209
|
+
id: string;
|
|
2210
|
+
tenant_id: string;
|
|
2211
|
+
created_by?: string;
|
|
2212
|
+
agent_id?: string;
|
|
2213
|
+
agent?: string;
|
|
2214
|
+
title?: string;
|
|
2215
|
+
model?: string;
|
|
2216
|
+
status: AgentConversationStatus;
|
|
2217
|
+
token_usage?: {
|
|
2218
|
+
in?: number;
|
|
2219
|
+
out?: number;
|
|
2220
|
+
cached_in?: number;
|
|
2221
|
+
};
|
|
2222
|
+
}
|
|
2223
|
+
interface AvailableAgent {
|
|
2224
|
+
id: string;
|
|
2225
|
+
code: string;
|
|
2226
|
+
name?: Record<string, string>;
|
|
2227
|
+
description?: Record<string, string>;
|
|
2228
|
+
is_default: boolean;
|
|
2229
|
+
}
|
|
2230
|
+
export declare function listAvailableAgents(): Promise<AvailableAgent[]>;
|
|
2231
|
+
export declare function createConversation(input: {
|
|
2232
|
+
agent_id?: string;
|
|
2233
|
+
}): Promise<AgentConversation>;
|
|
2234
|
+
interface AgentMessageContext {
|
|
2235
|
+
screen: string;
|
|
2236
|
+
record?: string;
|
|
2237
|
+
}
|
|
2238
|
+
export declare function sendMessage(text: string, conversationId: string, context?: AgentMessageContext): Promise<AgentMessage>;
|
|
2239
|
+
export declare function answerQuestion(invocationId: string, answer: Record<string, unknown>): Promise<void>;
|
|
2240
|
+
export declare function sendElicitResponse(_conversationId: string, invocationId: string, data: Record<string, unknown>): Promise<void>;
|
|
2241
|
+
/** What a person permitted: this call alone, or the action for the rest of
|
|
2242
|
+
* the conversation. Absent means this call alone - the safe reading, and
|
|
2243
|
+
* what every row written before the choice existed means. */
|
|
2244
|
+
type ApprovalScope = "call" | "conversation";
|
|
2245
|
+
export declare function approveInvocation(id: string, scope?: ApprovalScope): Promise<void>;
|
|
2246
|
+
export declare function rejectInvocation(id: string, note?: string): Promise<void>;
|
|
2247
|
+
export declare function cancelInvocation(id: string): Promise<void>;
|
|
2248
|
+
export declare function cancelConversation(id: string): Promise<void>;
|
|
2249
|
+
export declare function listConversations(): Promise<AgentConversation[]>;
|
|
2250
|
+
export declare function loadConversationTurns(conversationId: string): Promise<AgentTurn[]>;
|
|
2251
|
+
export declare function loadConversationInvocations(conversationId: string): Promise<AgentToolInvocation[]>;
|
|
2252
|
+
export declare function loadHistory(conversationId: string): Promise<AgentMessage[]>;
|
|
2253
|
+
//#endregion
|
|
2254
|
+
//#region src/components/agents/AgentChatPanel.impl.d.ts
|
|
2255
|
+
interface AgentChatPanelProps {
|
|
2256
|
+
open: boolean;
|
|
2257
|
+
onClose: () => void;
|
|
2258
|
+
/** The screen the person is on, sent with each message. */
|
|
2259
|
+
context?: AgentMessageContext;
|
|
2260
|
+
title?: string;
|
|
2261
|
+
/** A question typed somewhere else - the command palette - to send once
|
|
2262
|
+
* the panel opens. The palette promises "Press Enter to ask"; without
|
|
2263
|
+
* this it opened the panel and threw the question away. */
|
|
2264
|
+
askOnOpen?: string;
|
|
2265
|
+
docked?: boolean;
|
|
2266
|
+
}
|
|
2267
|
+
//#endregion
|
|
2268
|
+
//#region src/components/agents/AgentChatPanel.d.ts
|
|
2269
|
+
export declare function AgentChatPanel(props: AgentChatPanelProps): import("react").JSX.Element | null;
|
|
2270
|
+
//#endregion
|
|
2271
|
+
//#region src/components/agents/AgentElicitForm.d.ts
|
|
2272
|
+
type JSONSchemaProp = {
|
|
2273
|
+
type?: string | string[];
|
|
2274
|
+
enum?: unknown[];
|
|
2275
|
+
format?: string;
|
|
2276
|
+
minimum?: number;
|
|
2277
|
+
maximum?: number;
|
|
2278
|
+
title?: string;
|
|
2279
|
+
description?: string;
|
|
2280
|
+
default?: unknown;
|
|
2281
|
+
items?: {
|
|
2282
|
+
enum?: unknown[];
|
|
2283
|
+
type?: string;
|
|
2284
|
+
};
|
|
2285
|
+
};
|
|
2286
|
+
interface JSONSchema {
|
|
2287
|
+
type?: string;
|
|
2288
|
+
properties?: Record<string, JSONSchemaProp>;
|
|
2289
|
+
required?: string[];
|
|
2290
|
+
}
|
|
2291
|
+
interface AgentElicitFormProps {
|
|
2292
|
+
message: string;
|
|
2293
|
+
schema: JSONSchema;
|
|
2294
|
+
onSubmit: (data: Record<string, unknown>) => void;
|
|
2295
|
+
onCancel?: () => void;
|
|
2296
|
+
}
|
|
2297
|
+
export declare function AgentElicitForm({ message, schema, onSubmit, onCancel }: AgentElicitFormProps): import("react").JSX.Element;
|
|
2298
|
+
//#endregion
|
|
2299
|
+
//#region src/components/agents/AgentPicker.d.ts
|
|
2300
|
+
interface AgentPickerProps {
|
|
2301
|
+
agents: AvailableAgent[];
|
|
2302
|
+
selectedId?: string;
|
|
2303
|
+
onSelect: (id: string) => void;
|
|
2304
|
+
label: string;
|
|
2305
|
+
}
|
|
2306
|
+
export declare function AgentPicker({ agents, selectedId, onSelect, label }: AgentPickerProps): import("react").JSX.Element | null;
|
|
2307
|
+
//#endregion
|
|
2308
|
+
//#region src/components/agents/AgentConversationDrawer.d.ts
|
|
2309
|
+
interface AgentConversationDrawerProps {
|
|
2310
|
+
open: boolean;
|
|
2311
|
+
onClose: () => void;
|
|
2312
|
+
conversations: AgentConversation[];
|
|
2313
|
+
activeId?: string;
|
|
2314
|
+
onSelect: (id: string) => void;
|
|
2315
|
+
onNew: () => void;
|
|
2316
|
+
onRefresh: () => Promise<void>;
|
|
2317
|
+
}
|
|
2318
|
+
export declare function AgentConversationDrawer({ open, onClose, conversations, activeId, onSelect, onNew, onRefresh }: AgentConversationDrawerProps): import("react").JSX.Element | null;
|
|
2319
|
+
//#endregion
|
|
2320
|
+
//#region src/hooks/useAgentConversation.d.ts
|
|
2321
|
+
interface AgentTurnState {
|
|
2322
|
+
streaming: boolean;
|
|
2323
|
+
}
|
|
2324
|
+
export declare function useAgentConversation(initialConversationId?: string): {
|
|
2325
|
+
conversationId: string | undefined;
|
|
2326
|
+
messages: AgentMessage[];
|
|
2327
|
+
turn: AgentTurnState;
|
|
2328
|
+
turns: AgentTurn[];
|
|
2329
|
+
invocations: AgentToolInvocation[];
|
|
2330
|
+
conversations: AgentConversation[];
|
|
2331
|
+
send: (text: string, context?: AgentMessageContext) => Promise<void>;
|
|
2332
|
+
approve: (invocationId: string, scope?: ApprovalScope) => Promise<void>;
|
|
2333
|
+
reject: (invocationId: string, note?: string) => Promise<void>;
|
|
2334
|
+
submitInput: (invocationId: string, data: Record<string, unknown>) => Promise<void>;
|
|
2335
|
+
cancelInput: (invocationId: string) => Promise<void>;
|
|
2336
|
+
cancel: () => Promise<void>;
|
|
2337
|
+
refreshConversations: () => Promise<void>;
|
|
2338
|
+
startNew: () => void;
|
|
2339
|
+
agents: AvailableAgent[];
|
|
2340
|
+
selectedAgentId: string | undefined;
|
|
2341
|
+
selectAgent: import("react").Dispatch<import("react").SetStateAction<string | undefined>>;
|
|
2342
|
+
setConversationId: (id: string | undefined) => void;
|
|
2343
|
+
};
|
|
2344
|
+
//#endregion
|
|
2345
|
+
//#region src/lib/filter-evaluator.d.ts
|
|
2346
|
+
/** Metadata needed to evaluate a record-only filter condition. */
|
|
2347
|
+
interface FilterRecordField {
|
|
2348
|
+
type: "string" | "text" | "rich_text" | "email" | "url" | "phone" | "enum" | "int" | "float" | "decimal" | "date" | "timestamp" | "time" | "bool" | "ref" | "uuid" | (string & {});
|
|
2349
|
+
}
|
|
2350
|
+
type FilterRecordFields = Readonly<Record<string, FilterRecordField>>;
|
|
2351
|
+
type FilterRecord = Readonly<Record<string, unknown>>;
|
|
2352
|
+
/**
|
|
2353
|
+
* Evaluate a loader-validated filter tree against one already-loaded record.
|
|
2354
|
+
*
|
|
2355
|
+
* This deliberately accepts only the deterministic record subset: it has no
|
|
2356
|
+
* caller, clock, relation lookup, or value coercion input. A missing field is
|
|
2357
|
+
* the same as null for `is_empty`; every other operator returns false for a
|
|
2358
|
+
* missing, null, or empty value.
|
|
2359
|
+
*/
|
|
2360
|
+
export declare function evaluateFilterTree(nodes: FilterNode[], fields: FilterRecordFields, record: FilterRecord): boolean;
|
|
2361
|
+
//#endregion
|
|
2362
|
+
//#region src/lib/variants.d.ts
|
|
2363
|
+
export declare function resolveEntityVariantCode(entity: Entity, record: FilterRecord): string | undefined;
|
|
2364
|
+
export declare function variantActionCodesForRecord(entity: Entity | undefined, record: FilterRecord): ReadonlySet<string> | undefined;
|
|
2365
|
+
export declare function commonVariantActionCodes(entity: Entity | undefined, records: readonly FilterRecord[]): ReadonlySet<string> | undefined;
|
|
2366
|
+
export declare function resolveScreenVariantCode(entity: Entity, screen: Screen, record: FilterRecord): string | undefined;
|
|
2367
|
+
export declare function effectiveScreenForRecord(entity: Entity | undefined, screen: Screen | undefined, record: FilterRecord): Screen | undefined;
|
|
2368
|
+
//#endregion
|
|
2369
|
+
//#region src/lib/format-count.d.ts
|
|
2370
|
+
/**
|
|
2371
|
+
* Row-count formatting for list views. Display precision MUST match data
|
|
2372
|
+
* accuracy:
|
|
2373
|
+
*
|
|
2374
|
+
* - an exact count renders to the unit with thousands separators
|
|
2375
|
+
* (3,613,711) - it is known precisely;
|
|
2376
|
+
* - an estimate renders coarse (~3.6M) - showing an estimate to the unit
|
|
2377
|
+
* is false precision and is wrong.
|
|
2378
|
+
*
|
|
2379
|
+
* This is the single shared count formatter; the SDK has no other. Field
|
|
2380
|
+
* cell factories that call `toLocaleString` for per-cell numbers are a
|
|
2381
|
+
* separate concern and are not routed through here.
|
|
2382
|
+
*/
|
|
2383
|
+
/**
|
|
2384
|
+
* formatEstimatedCount renders a coarse estimate: a `~` prefix, ~2
|
|
2385
|
+
* significant figures, and the magnitude suffix of Intl compact notation in
|
|
2386
|
+
* `language` (K/M/B in English, "mil"/"M" in Spanish, "тыс."/"млн" in Russian).
|
|
2387
|
+
*
|
|
2388
|
+
* 3_613_711 -> "~3.6M"
|
|
2389
|
+
* 850_000 -> "~850K"
|
|
2390
|
+
* 12_000 -> "~12K"
|
|
2391
|
+
* 940 -> "~940" (below 1000: no suffix, the ~ still signals an estimate)
|
|
2392
|
+
*
|
|
2393
|
+
* Two significant figures: a value's first 2 digits are kept and the rest
|
|
2394
|
+
* collapse to the magnitude suffix. 3_613_711 -> 3.6M (one decimal because
|
|
2395
|
+
* the leading digit is single); 12_000 -> 12K (no decimal because 2 leading
|
|
2396
|
+
* digits already give 2 sig figs).
|
|
2397
|
+
*/
|
|
2398
|
+
export declare function formatEstimatedCount(total: number, language?: string): string;
|
|
2399
|
+
/**
|
|
2400
|
+
* formatExactCount renders an exact count to the unit with the thousands
|
|
2401
|
+
* separators of `language`: 3613711 -> "3,613,711" in English.
|
|
2402
|
+
*/
|
|
2403
|
+
export declare function formatExactCount(total: number, language?: string): string;
|
|
2404
|
+
/**
|
|
2405
|
+
* formatCount picks the rendering by the count strategy actually used to
|
|
2406
|
+
* produce `total` (the server's `meta.count_mode`), NOT the entity schema:
|
|
2407
|
+
* a forced exact count must render exact even on a `count: estimated`
|
|
2408
|
+
* entity.
|
|
2409
|
+
*/
|
|
2410
|
+
export declare function formatCount(total: number, mode: "exact" | "estimated", language?: string): string;
|
|
2411
|
+
//#endregion
|
|
2412
|
+
//#region src/lib/mass-edit.d.ts
|
|
2413
|
+
/** Target kinds mirror engine.MassEditTargetKind in Go. */
|
|
2414
|
+
type MassEditTargetKind = "field" | "status" | "property";
|
|
2415
|
+
/** Metadata a property-grid row needs to render a target + editable value cell. */
|
|
2416
|
+
interface MassEditTarget {
|
|
2417
|
+
/** Picker key — bare field code, or `$status.<group>` / `$property.<code>`. */
|
|
2418
|
+
code: string;
|
|
2419
|
+
/** Bare identifier (without prefix) — "priority", "approval", "color". */
|
|
2420
|
+
bare: string;
|
|
2421
|
+
kind: MassEditTargetKind;
|
|
2422
|
+
label: string;
|
|
2423
|
+
/** For field targets, the underlying EntityField drives the value renderer. */
|
|
2424
|
+
field?: EntityField;
|
|
2425
|
+
/** For status targets, the group definition drives the status-picker options. */
|
|
2426
|
+
statusGroup?: StatusGroupDef;
|
|
2427
|
+
/** For property targets, the property definition drives type/widget/ref. */
|
|
2428
|
+
property?: PropertyDef;
|
|
2429
|
+
}
|
|
2430
|
+
/** Parse `HandlerParam.Filter["targets"]` into a list of allowed keys. */
|
|
2431
|
+
export declare function parseTargetFilter(raw: string | undefined): string[];
|
|
2432
|
+
/**
|
|
2433
|
+
* Build the list of writable mass-edit targets for an entity.
|
|
2434
|
+
* - When `whitelist` is set, narrows to those keys only (preserves the
|
|
2435
|
+
* order in the whitelist so action authors can curate a picker order).
|
|
2436
|
+
* - Without a whitelist, emits every non-PK, non-auto field plus all
|
|
2437
|
+
* status groups and properties (when not composite PK). Matches the
|
|
2438
|
+
* engine-side BuildMassEditTargets contract.
|
|
2439
|
+
* - entities without generic update globally hide every target (UI mirrors
|
|
2440
|
+
* the server gate; the dispatcher still enforces permissions).
|
|
2441
|
+
*/
|
|
2442
|
+
export declare function buildMassEditTargets(t: TextFn, entity: Entity | undefined, whitelistRaw?: string | string[]): MassEditTarget[];
|
|
2443
|
+
//#endregion
|
|
2444
|
+
//#region src/components/actions/PropertyGridEditor.d.ts
|
|
2445
|
+
/** Raw patch shape: field codes + optional $statuses / $properties subresource arrays. */
|
|
2446
|
+
type PatchMap = Record<string, unknown>;
|
|
2447
|
+
interface PropertyGridEditorProps {
|
|
2448
|
+
entity: Entity | undefined;
|
|
2449
|
+
/** Optional YAML-declared target whitelist (HandlerParam.Filter["targets"]). */
|
|
2450
|
+
filterTargets?: string;
|
|
2451
|
+
/** The current bulk selection. Used for same-value pre-fill per target. */
|
|
2452
|
+
selectedRows?: ReadonlyArray<Record<string, unknown>>;
|
|
2453
|
+
/** Current patch value (controlled). */
|
|
2454
|
+
value: PatchMap;
|
|
2455
|
+
/** Emitted whenever the user adds, changes, or removes a target. */
|
|
2456
|
+
onChange: (next: PatchMap) => void;
|
|
2457
|
+
}
|
|
2458
|
+
/** UI-only marker for cells whose selected rows disagree on the current value. */
|
|
2459
|
+
declare const MULTIPLE_VALUES: unique symbol;
|
|
2460
|
+
export declare function PropertyGridEditor({ entity, filterTargets, selectedRows, value, onChange }: PropertyGridEditorProps): import("react").JSX.Element;
|
|
2461
|
+
export declare function detectCommonValue(target: MassEditTarget, selectedRows: ReadonlyArray<Record<string, unknown>> | undefined): unknown;
|
|
2462
|
+
//#endregion
|
|
2463
|
+
//#region src/lib/field-classification.d.ts
|
|
2464
|
+
/**
|
|
2465
|
+
* isFieldReadable returns true when the caller can see the field's
|
|
2466
|
+
* value. Non-classified fields are always readable (no entry in
|
|
2467
|
+
* field_access). Classified fields are readable when field_access
|
|
2468
|
+
* marks read="granted".
|
|
2469
|
+
*/
|
|
2470
|
+
export declare function isFieldReadable(entity: Pick<Entity, "field_access"> | undefined, fieldName: string): boolean;
|
|
2471
|
+
/**
|
|
2472
|
+
* isFieldWritable returns true when the caller can submit a new value
|
|
2473
|
+
* for the field. Form components disable input + show a lock badge
|
|
2474
|
+
* when this returns false. Non-classified fields are always writable
|
|
2475
|
+
* (gating happens via entity-level RBAC at the HTTP layer).
|
|
2476
|
+
*/
|
|
2477
|
+
export declare function isFieldWritable(entity: Entity | undefined, fieldName: string): boolean;
|
|
2478
|
+
/**
|
|
2479
|
+
* fieldClassification returns the classification tier code gating
|
|
2480
|
+
* the field, or undefined when the field is non-classified. Lets
|
|
2481
|
+
* UI code render a tier badge without re-implementing the field_access
|
|
2482
|
+
* lookup.
|
|
2483
|
+
*/
|
|
2484
|
+
export declare function fieldClassification(entity: Entity | undefined, fieldName: string): string | undefined;
|
|
2485
|
+
/**
|
|
2486
|
+
* fieldRequiredPermission returns the exact grant string an
|
|
2487
|
+
* administrator must add to a role to unlock the field for the
|
|
2488
|
+
* current caller. Returns undefined when the field is readable +
|
|
2489
|
+
* writable (no hint needed).
|
|
2490
|
+
*/
|
|
2491
|
+
export declare function fieldRequiredPermission(entity: Entity | undefined, fieldName: string): string | undefined;
|
|
2492
|
+
/**
|
|
2493
|
+
* classificationTier returns the localized tier metadata for a field
|
|
2494
|
+
* (display name, description, audit_on_read flag, icon). Resolves
|
|
2495
|
+
* via the top-level schema.classifications map. Returns undefined when
|
|
2496
|
+
* the field is non-classified or the tier code is unknown in the
|
|
2497
|
+
* catalog (defense — points at a misconfigured registry).
|
|
2498
|
+
*/
|
|
2499
|
+
export declare function classificationTier(schema: Schema | undefined, entity: Entity | undefined, fieldName: string): ClassificationTierDef | undefined;
|
|
2500
|
+
/**
|
|
2501
|
+
* isFieldSoDProtected reports whether the field's tier carries
|
|
2502
|
+
* sod_protected:true in the catalog. Used by UI to surface a stronger
|
|
2503
|
+
* visual treatment (e.g. red lock vs. grey lock) for tiers that
|
|
2504
|
+
* trigger the stricter SoD controls (superadmin-bypass-disabled
|
|
2505
|
+
* tenants, role self-assignment refusal, etc).
|
|
2506
|
+
*/
|
|
2507
|
+
export declare function isFieldSoDProtected(schema: Schema | undefined, entity: Entity | undefined, fieldName: string): boolean;
|
|
2508
|
+
/**
|
|
2509
|
+
* fieldAccessInfo returns the raw FieldAccessInfo entry for a field,
|
|
2510
|
+
* or undefined when the field is non-classified. Convenience for
|
|
2511
|
+
* components that need the full structure (e.g. a tooltip rendering
|
|
2512
|
+
* both classification name + required_permission hint).
|
|
2513
|
+
*/
|
|
2514
|
+
export declare function fieldAccessInfo(entity: Entity | undefined, fieldName: string): FieldAccessInfo | undefined;
|
|
2515
|
+
//#endregion
|
|
2516
|
+
export { type Action, ActionBatchError, type ActionExecuteRequest, type ActionExecuteResponse, type ActionItemError, type ActionItemSkip, type ActionListPage, type AgentChatPanelProps, type AgentContentBlock, type AgentConversation, type AgentConversationDrawerProps, type AgentConversationStatus, type AgentElicitFormProps, type AgentInvocationKind, type AgentInvocationStatus, type AgentMessage, type AgentPickerProps, type AgentRole, type AgentToolInvocation, type AgentTurn, type AgentTurnState, type AgentTurnStatus, type ApiError, App as Declarion, type ApprovalScope, type AuthShellProps, type AuthUser, type AvailableAgent, type AvatarProps, type BatchOp, type BatchOpResult, type BatchResponse, type BoolToggleProps, type BrandGlyphProps, type BreadcrumbsProps, type BtnKind, type BtnProps, type BtnSize, CURSOR_LANGUAGE_CHANGED, CURSOR_SEMANTICS_MISMATCH, type CanonicalLocation, type ChangePasswordDialogProps, type CheckProps, type CheckSetupResponse, type ChildRelation, type ChipProps, type ClassificationTierDef, type CommandAction, type CommandActionType, type CommandPaletteProps, type CropperOptions, type CropperResult, type Crumb, type CurrentScreen, type CursorActionDataResult, type CursorEntityDataParams, type CursorEntityDataResult, type CustomScreenProps, DEFAULT_RESPONSIVE_BREAKPOINTS, type DataResponse, type DateInputProps, type DraftEntry, type DropdownProps, DynamicIcon, type EnrichedRow, type Entity, type EntityField, type EnumDef, type FieldAccessInfo, type FieldLabelProps, type FileDraftScopeApi, type FileFieldDef, type FileFieldDisplay, type FileFieldMode, type FileWidget, type FileWidgetProps, type FilterNode, type FilterOp, type FilterRecord, type FilterRecordField, type FilterRecordFields, type FilterURLState, type HoverCardAlign, type HoverCardProps, type HydratedFile, Icon, type IconBtnProps, type IconDef, type IconName, type IconProps, type ImageCropper, type InfoTooltipProps, type InlineEditCellProps, type InlineEditKind, type InlineEditTrigger, type JsonFieldProps, type LanguageDef, type LayoutWidget, type LayoutWidgetProps, type ListMeta, type ListParams, type ListResponse, type LiveObjectResult, type LocalizedString, type LoginResponse, MANDATORY_LANGUAGE, MULTIPLE_VALUES, type MassEditTarget, type MassEditTargetKind, type MenuItemProps, type MultiSelectProps, NO_VALUE_OPS, type NavNode, OP_LABELS, type ObjectActionBarProps, type ObjectActionBarSlot, type ObjectActionSelection, OrderedMap, type PageStateSetter, type ParameterDef, type PasswordInputProps, type PatchMap, type PillProps, type PillSize, type PillTone, type PkValues, type PropertyDef, type PropertyValue, type PublicParam, type QEFieldProps, type QuickEditCellProps, type QuickPeekFieldSpec, type QuickPeekProps, type RailAreaItem, type RailProps, type RecordIdBadgeProps, type RefComboboxProps, type RefFieldItem, type RefFieldProps, type RefreshControlProps, type Refs, type ResponsiveBreakpoints, type ResponsiveMode, ResponsiveModeProvider, type ResponsiveViewport, type ReturnTarget, type RowFieldProps, type RowHelpers, type RunActionOptions, type Schema, type Screen, type ScreenBack, type ScrollAnchor, type ScrollableVirtualizer, type SectionBadge, type SectionCardProps, type SectionEmphasis, type SelectOption, type SelectProps, type SidebarProps, type StatusDef, type StatusGroupDef, type StatusInfo, type StructureDef, type TabItem, type TabStripProps, type TagsInputProps, type Tenant, type TenantChipProps, type TextAreaProps, type TextFn, type TextInputProps, type TextVars, type TooltipProps, type TopBarProps, type UploadCheck, type UploadProgress, type UploadedFile, type UseObjectActionsResult, type UseScreenBackOptions, type UseScreenTabOptions, type V2ListParams, type V2ListResponse, type V2Meta, type V2ParamInstance, type V2PropertyInstance, type V2StatusInstance, type ViewFieldProps, type ViewportCategory, buildActionBody, buildDetailHrefFromId, buildEntityDetailHref, buildRowDetailHref, countActiveFilters, deleteObject, executeAction$1 as executeAction, extractPkValues, fieldDisplayName, getIcon, getPrimaryKeyFields, hasOrGroups, isCursorStaleError, makeTextFn, parseFilterURLState, parseFiltersFromURL, pickLocalized, pkValuePartsToId, pkValuesFromId, pkValuesToDetailId, pkValuesToId, pluralText, resolveDetailRoute, resolveViewportCategory, restoreObject, setFiltersInURL, setIconRegistry, textWithNodes, useLocation, useNavigate, useParams, useResponsiveMode, useSearchParams };
|