@nivaro/react 0.2.7 → 0.2.9
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/full.css +1 -1
- package/dist/index.d.ts +303 -30
- package/dist/index.js +60685 -55604
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -248,6 +248,11 @@ export declare interface ApiRequestLogFilters {
|
|
|
248
248
|
api_key?: number | null;
|
|
249
249
|
inbound?: boolean;
|
|
250
250
|
errors?: boolean;
|
|
251
|
+
/** ISO times bounding the list (a link to one request narrows to the seconds around it). */
|
|
252
|
+
from?: string;
|
|
253
|
+
to?: string;
|
|
254
|
+
/** Open the newest matching row once it loads (a deep link to one request). */
|
|
255
|
+
focus?: boolean;
|
|
251
256
|
}
|
|
252
257
|
|
|
253
258
|
/**
|
|
@@ -501,7 +506,7 @@ export declare function BulkActionButtons({ targets, enabledKeys, tone, disabled
|
|
|
501
506
|
onDone?: (result: BulkRunResult & {
|
|
502
507
|
action: AvailableBulkAction;
|
|
503
508
|
}) => void;
|
|
504
|
-
}): JSX.Element
|
|
509
|
+
}): JSX.Element;
|
|
505
510
|
|
|
506
511
|
declare interface BulkRunResult {
|
|
507
512
|
succeeded: number;
|
|
@@ -516,6 +521,8 @@ declare interface BulkRunResult {
|
|
|
516
521
|
declare interface BulkTarget {
|
|
517
522
|
collection: string;
|
|
518
523
|
id: string | number;
|
|
524
|
+
/** Optional display label — names the row in per-row result lists. */
|
|
525
|
+
label?: string | null;
|
|
519
526
|
}
|
|
520
527
|
|
|
521
528
|
/**
|
|
@@ -532,6 +539,15 @@ export declare function CacheStamp({ envelope, onRefresh, refreshing, className
|
|
|
532
539
|
className?: string;
|
|
533
540
|
}): JSX.Element | null;
|
|
534
541
|
|
|
542
|
+
export declare function CallerChangesSection({ caller, hours }: {
|
|
543
|
+
/** `k<api key id>` or `u<user id>`. */
|
|
544
|
+
caller: {
|
|
545
|
+
key: string;
|
|
546
|
+
label: string;
|
|
547
|
+
};
|
|
548
|
+
hours: number;
|
|
549
|
+
}): JSX.Element;
|
|
550
|
+
|
|
535
551
|
export declare function canOpenCatalogItem(collection: string | null | undefined): boolean;
|
|
536
552
|
|
|
537
553
|
export declare function canOpenChatRoom(): boolean;
|
|
@@ -540,6 +556,8 @@ export declare function canOpenDm(): boolean;
|
|
|
540
556
|
|
|
541
557
|
export declare function canPreviewFile(type: string | null | undefined): boolean;
|
|
542
558
|
|
|
559
|
+
export declare function canViewAs(): boolean;
|
|
560
|
+
|
|
543
561
|
/**
|
|
544
562
|
* Grab the replay link for an error being reported right now. Resolves null
|
|
545
563
|
* when no recorder is active (both settings off, recording failed, or the
|
|
@@ -1050,7 +1068,7 @@ export declare interface CollectionBrowserColumn {
|
|
|
1050
1068
|
filterable?: boolean;
|
|
1051
1069
|
}
|
|
1052
1070
|
|
|
1053
|
-
export declare function CollectionBrowserView({ collection, quickFilters, initialColumns, initialSort, pageSize, initialSearch, initialFilters, initialConditions, onOpenItem, showCreate, className }: CollectionBrowserViewProps): React_2.JSX.Element;
|
|
1071
|
+
export declare function CollectionBrowserView({ collection, quickFilters, initialColumns, initialSort, pageSize, initialSearch, initialFilters, initialConditions, onOpenItem, initialAiPrompt, extraViews, showCreate, className }: CollectionBrowserViewProps): React_2.JSX.Element;
|
|
1054
1072
|
|
|
1055
1073
|
export declare interface CollectionBrowserViewProps {
|
|
1056
1074
|
collection: string;
|
|
@@ -1078,6 +1096,17 @@ export declare interface CollectionBrowserViewProps {
|
|
|
1078
1096
|
}>;
|
|
1079
1097
|
/** Override row-open behavior; defaults to NavigationContext itemUrl. */
|
|
1080
1098
|
onOpenItem?: (id: string | number) => void;
|
|
1099
|
+
/** Ask the table this question once on open (e.g. a command-palette
|
|
1100
|
+
* hand-off, `?ai=` on the host route). */
|
|
1101
|
+
initialAiPrompt?: string;
|
|
1102
|
+
/** Host-supplied display modes beside the table (e.g. a spreadsheet or
|
|
1103
|
+
* calendar the host app owns). Each renders instead of the table. */
|
|
1104
|
+
extraViews?: Array<{
|
|
1105
|
+
key: string;
|
|
1106
|
+
label: string;
|
|
1107
|
+
icon?: React_2.ReactNode;
|
|
1108
|
+
render: () => React_2.ReactNode;
|
|
1109
|
+
}>;
|
|
1081
1110
|
showCreate?: boolean;
|
|
1082
1111
|
className?: string;
|
|
1083
1112
|
}
|
|
@@ -2081,6 +2110,16 @@ export declare function fiscalQuarterOf(d: Date, startMonth?: number): number;
|
|
|
2081
2110
|
|
|
2082
2111
|
export declare function fiscalYearOf(d: Date, startMonth?: number): number;
|
|
2083
2112
|
|
|
2113
|
+
/** Bring a field or a child row of the open record into view (ItemEditForm
|
|
2114
|
+
* listens for 'nvr:record-focus'). */
|
|
2115
|
+
export declare function focusRecordTarget(target: {
|
|
2116
|
+
collection: string;
|
|
2117
|
+
item: string;
|
|
2118
|
+
field?: string;
|
|
2119
|
+
childCollection?: string;
|
|
2120
|
+
rowId?: string;
|
|
2121
|
+
}): void;
|
|
2122
|
+
|
|
2084
2123
|
/** The window event a host's socket layer dispatches on `client:force-refresh`. */
|
|
2085
2124
|
export declare const FORCE_RELOAD_EVENT = "nvr:force-refresh";
|
|
2086
2125
|
|
|
@@ -2466,7 +2505,7 @@ export declare interface ImportDefinition {
|
|
|
2466
2505
|
description: string | null;
|
|
2467
2506
|
staging_table: string | null;
|
|
2468
2507
|
procedure: string | null;
|
|
2469
|
-
loader: 'bulk' | 'insert' | null;
|
|
2508
|
+
loader: 'bulk' | 'bulk_only' | 'insert' | null;
|
|
2470
2509
|
file_types: string | null;
|
|
2471
2510
|
is_active: boolean;
|
|
2472
2511
|
sort: number;
|
|
@@ -2484,6 +2523,13 @@ export declare interface ImportDefinition {
|
|
|
2484
2523
|
/** JSON array of flow ids run in order after a successful run (migration 294). */
|
|
2485
2524
|
post_run_flows?: string | null;
|
|
2486
2525
|
receipt?: string | null;
|
|
2526
|
+
/** #802 — runs sharing a group never overlap; null = the staging table. */
|
|
2527
|
+
lock_group?: string | null;
|
|
2528
|
+
/** #719 — JSON string[] of collections the procedure writes (rollups recomputed). */
|
|
2529
|
+
recalc_rollups?: string | null;
|
|
2530
|
+
/** #846 — days after the last completed run the staging table is emptied; opt-in, null/0 = keep. */
|
|
2531
|
+
staging_purge_days?: number | null;
|
|
2532
|
+
staging_purged_at?: string | null;
|
|
2487
2533
|
}
|
|
2488
2534
|
|
|
2489
2535
|
declare interface ImportDryRun {
|
|
@@ -2586,6 +2632,8 @@ export declare interface ImportJob {
|
|
|
2586
2632
|
started_at: string | null;
|
|
2587
2633
|
completed_at: string | null;
|
|
2588
2634
|
rolled_back_at?: string | null;
|
|
2635
|
+
/** #748 — rows were written through the items service. */
|
|
2636
|
+
through_items?: boolean;
|
|
2589
2637
|
}
|
|
2590
2638
|
|
|
2591
2639
|
export declare type ImportJobStatus = 'pending' | 'processing' | 'complete' | 'failed';
|
|
@@ -2653,7 +2701,7 @@ export declare interface ImportRun {
|
|
|
2653
2701
|
procedure: string | null;
|
|
2654
2702
|
/** null / 'proc' = stored procedure, 'service', or a registered processor key. */
|
|
2655
2703
|
processor?: string | null;
|
|
2656
|
-
loader: 'bulk' | 'insert' | null;
|
|
2704
|
+
loader: 'bulk' | 'bulk_only' | 'insert' | null;
|
|
2657
2705
|
definition_active: boolean | null;
|
|
2658
2706
|
file_name: string | null;
|
|
2659
2707
|
file_size: string | number | null;
|
|
@@ -2768,6 +2816,20 @@ export declare function InboundCallersView({ hours: initialHours }: {
|
|
|
2768
2816
|
hours?: number;
|
|
2769
2817
|
}): JSX.Element;
|
|
2770
2818
|
|
|
2819
|
+
/**
|
|
2820
|
+
* A trigger (any inline element) that opens the request behind an inbound
|
|
2821
|
+
* write. The event-path sheet opens AFTER the popover closes, so a sheet
|
|
2822
|
+
* never mounts inside a popover.
|
|
2823
|
+
*/
|
|
2824
|
+
export declare function InboundRequestPopover({ activityId, callerName, collection, itemId, children, align }: {
|
|
2825
|
+
activityId: number;
|
|
2826
|
+
callerName: string;
|
|
2827
|
+
collection: string;
|
|
2828
|
+
itemId: string;
|
|
2829
|
+
children: ReactNode;
|
|
2830
|
+
align?: 'start' | 'center' | 'end';
|
|
2831
|
+
}): JSX.Element;
|
|
2832
|
+
|
|
2771
2833
|
/**
|
|
2772
2834
|
* Inbound: health first — the host's own live queue (an ingest backlog, say), then whether
|
|
2773
2835
|
* scheduled imports are arriving on time — and investigation last, since who
|
|
@@ -2995,6 +3057,16 @@ export declare interface IntegrationPartnerCard {
|
|
|
2995
3057
|
missing: number;
|
|
2996
3058
|
overdue: number;
|
|
2997
3059
|
};
|
|
3060
|
+
/** #612 — health-probe uptime over 24h; null when the API is not probed. */
|
|
3061
|
+
uptime24?: {
|
|
3062
|
+
pct: number | null;
|
|
3063
|
+
probes: number;
|
|
3064
|
+
buckets: Array<{
|
|
3065
|
+
at: string;
|
|
3066
|
+
ok: number;
|
|
3067
|
+
failed: number;
|
|
3068
|
+
}>;
|
|
3069
|
+
} | null;
|
|
2998
3070
|
}
|
|
2999
3071
|
|
|
3000
3072
|
export declare interface IntegrationPartnerDetail {
|
|
@@ -3047,6 +3119,29 @@ export declare type IntegrationPathDetail = {
|
|
|
3047
3119
|
from?: string | null;
|
|
3048
3120
|
to?: string | null;
|
|
3049
3121
|
comment?: string | null;
|
|
3122
|
+
} | {
|
|
3123
|
+
type: 'notify';
|
|
3124
|
+
recipient: string;
|
|
3125
|
+
/** Admins only; null for everyone else. */
|
|
3126
|
+
subject: string | null;
|
|
3127
|
+
category?: string | null;
|
|
3128
|
+
lane?: string | null;
|
|
3129
|
+
channels: Array<{
|
|
3130
|
+
channel: string;
|
|
3131
|
+
status: string;
|
|
3132
|
+
reason?: string | null;
|
|
3133
|
+
}>;
|
|
3134
|
+
} | {
|
|
3135
|
+
type: 'mail';
|
|
3136
|
+
status: string;
|
|
3137
|
+
/** Admins only; null for everyone else. */
|
|
3138
|
+
subject: string | null;
|
|
3139
|
+
template?: string | null;
|
|
3140
|
+
/** Addresses — admins only; null for everyone else. */
|
|
3141
|
+
to?: string | null;
|
|
3142
|
+
recipients: number;
|
|
3143
|
+
mail_log_id: number;
|
|
3144
|
+
error?: string | null;
|
|
3050
3145
|
};
|
|
3051
3146
|
|
|
3052
3147
|
/** One step of an event's path, with the steps it set off under it. */
|
|
@@ -3078,11 +3173,11 @@ export declare interface IntegrationPathNode {
|
|
|
3078
3173
|
members?: IntegrationPathNode[];
|
|
3079
3174
|
}
|
|
3080
3175
|
|
|
3081
|
-
/** The filter
|
|
3082
|
-
*
|
|
3083
|
-
*
|
|
3084
|
-
*
|
|
3085
|
-
*
|
|
3176
|
+
/** The filter set the collection browser (a `$integrations` condition to
|
|
3177
|
+
* `/items/:collection`) and the queue (`filters.integrations`, #630 —
|
|
3178
|
+
* services/queue-integrations.ts) both offer. Values are the bucket names
|
|
3179
|
+
* `applyIntegrationsFilter` (api/src/services/items.ts) reads, so a picked
|
|
3180
|
+
* value needs no translation on either surface. */
|
|
3086
3181
|
export declare const INTEGRATIONS_FILTER_OPTIONS: {
|
|
3087
3182
|
value: string;
|
|
3088
3183
|
label: string;
|
|
@@ -3180,26 +3275,6 @@ export declare interface IntegrationSignalView {
|
|
|
3180
3275
|
shown: number;
|
|
3181
3276
|
}
|
|
3182
3277
|
|
|
3183
|
-
export declare function IntegrationStatusBanner({ collection, itemId }: IntegrationStatusBannerProps): JSX.Element | null;
|
|
3184
|
-
|
|
3185
|
-
/**
|
|
3186
|
-
* One line per partner on the record: were they told, when, and if not, why
|
|
3187
|
-
* not. Sits above `ErpFailureBanner`, which keeps the payload/response view
|
|
3188
|
-
* and the retry mutation — this answers a different question ("was the
|
|
3189
|
-
* partner told, and when") and does not replace it.
|
|
3190
|
-
*
|
|
3191
|
-
* Renders nothing when the record has no obligations, so a collection with
|
|
3192
|
-
* no integrations pays one cached request and shows no chrome.
|
|
3193
|
-
*
|
|
3194
|
-
* `roleForTone` is imported from `IntegrationObligationsView` (the board)
|
|
3195
|
-
* rather than duplicated here, so the board and this banner can never
|
|
3196
|
-
* disagree about what "overdue" looks like.
|
|
3197
|
-
*/
|
|
3198
|
-
export declare interface IntegrationStatusBannerProps {
|
|
3199
|
-
collection: string;
|
|
3200
|
-
itemId: string | number;
|
|
3201
|
-
}
|
|
3202
|
-
|
|
3203
3278
|
/** Whether this browser pinned the chat panel open — hosts read it for their
|
|
3204
3279
|
* initial open state, so a pinned panel is still there after a reload. */
|
|
3205
3280
|
export declare function isChatPanelPinned(): boolean;
|
|
@@ -4259,6 +4334,16 @@ export declare function OpsTasksView({ onNotice }: {
|
|
|
4259
4334
|
onNotice?: (message: string) => void;
|
|
4260
4335
|
}): JSX.Element;
|
|
4261
4336
|
|
|
4337
|
+
/** #615 — the Integrations dialog's "What goes out next" block. */
|
|
4338
|
+
export declare function OutboundPreviewSection({ collection, itemId, onShowRequest, onJump }: {
|
|
4339
|
+
collection: string;
|
|
4340
|
+
itemId: string;
|
|
4341
|
+
/** Open the request log row a comparison was made against. */
|
|
4342
|
+
onShowRequest?: (submissionId: number) => void;
|
|
4343
|
+
/** A readiness issue jumps to a line — the hosting dialog closes first. */
|
|
4344
|
+
onJump?: () => void;
|
|
4345
|
+
}): JSX.Element | null;
|
|
4346
|
+
|
|
4262
4347
|
/**
|
|
4263
4348
|
* Lets a host put transient overlay state — a drill-down sheet and how deep it
|
|
4264
4349
|
* is — into browser history, so Back closes the sheet instead of abandoning the
|
|
@@ -4408,6 +4493,11 @@ declare interface PartnerContract {
|
|
|
4408
4493
|
detail: string | null;
|
|
4409
4494
|
}
|
|
4410
4495
|
|
|
4496
|
+
export declare function PartnerDependenciesPanel({ callerKey, label }: {
|
|
4497
|
+
callerKey: string;
|
|
4498
|
+
label: string;
|
|
4499
|
+
}): JSX.Element;
|
|
4500
|
+
|
|
4411
4501
|
export declare function PartnerDetail({ apiId, onClose, initialTab }: PartnerDetailProps): JSX.Element;
|
|
4412
4502
|
|
|
4413
4503
|
export declare interface PartnerDetailProps {
|
|
@@ -4424,7 +4514,7 @@ export declare interface PartnersViewProps {
|
|
|
4424
4514
|
onOpenChange?: (id: number | null) => void;
|
|
4425
4515
|
}
|
|
4426
4516
|
|
|
4427
|
-
declare type PathStepKind = 'request' | 'cron' | 'import' | 'feed' | 'write' | 'transition' | 'flow' | 'push' | 'attempt' | 'partner_call' | 'group';
|
|
4517
|
+
declare type PathStepKind = 'request' | 'cron' | 'import' | 'feed' | 'write' | 'transition' | 'flow' | 'push' | 'attempt' | 'partner_call' | 'notify' | 'mail' | 'group';
|
|
4428
4518
|
|
|
4429
4519
|
declare interface PendingTask {
|
|
4430
4520
|
title: string;
|
|
@@ -4438,6 +4528,38 @@ declare interface PendingTask {
|
|
|
4438
4528
|
priority?: string;
|
|
4439
4529
|
}
|
|
4440
4530
|
|
|
4531
|
+
/**
|
|
4532
|
+
* The same, minus machine identities (bots, integrations, service accounts,
|
|
4533
|
+
* placeholders — `account_kind` set). A person picking a contact or an
|
|
4534
|
+
* assignee should only ever be offered people; admins keep the machine
|
|
4535
|
+
* accounts because they occasionally configure one on purpose.
|
|
4536
|
+
*/
|
|
4537
|
+
export declare const PEOPLE_USER_OPTION_FILTER: {
|
|
4538
|
+
_and: ({
|
|
4539
|
+
is_redacted: {
|
|
4540
|
+
_eq: boolean;
|
|
4541
|
+
};
|
|
4542
|
+
_or?: undefined;
|
|
4543
|
+
} | {
|
|
4544
|
+
_or: ({
|
|
4545
|
+
status: {
|
|
4546
|
+
_neq: string;
|
|
4547
|
+
_null?: undefined;
|
|
4548
|
+
};
|
|
4549
|
+
} | {
|
|
4550
|
+
status: {
|
|
4551
|
+
_null: boolean;
|
|
4552
|
+
_neq?: undefined;
|
|
4553
|
+
};
|
|
4554
|
+
})[];
|
|
4555
|
+
is_redacted?: undefined;
|
|
4556
|
+
} | {
|
|
4557
|
+
account_kind: {
|
|
4558
|
+
_null: boolean;
|
|
4559
|
+
};
|
|
4560
|
+
})[];
|
|
4561
|
+
};
|
|
4562
|
+
|
|
4441
4563
|
/**
|
|
4442
4564
|
* The identity band at the top of someone's page: who they are, whether
|
|
4443
4565
|
* they are reachable right now, and the three ways to reach them. Admin-only
|
|
@@ -4531,6 +4653,12 @@ export declare interface PersonProfileData {
|
|
|
4531
4653
|
values: string[];
|
|
4532
4654
|
}>;
|
|
4533
4655
|
open_tasks: number;
|
|
4656
|
+
/** When they are usually around (UTC hours, 10th–90th percentile of their actions). */
|
|
4657
|
+
typical_hours_utc?: {
|
|
4658
|
+
start: number;
|
|
4659
|
+
end: number;
|
|
4660
|
+
samples: number;
|
|
4661
|
+
} | null;
|
|
4534
4662
|
admin: {
|
|
4535
4663
|
account_kind: string | null;
|
|
4536
4664
|
city: string | null;
|
|
@@ -4668,6 +4796,33 @@ export declare function PipelineTransitionButtons({ collection, item, onBeforeTr
|
|
|
4668
4796
|
wrap?: boolean;
|
|
4669
4797
|
}): JSX.Element | null;
|
|
4670
4798
|
|
|
4799
|
+
export declare interface PlanGridHost {
|
|
4800
|
+
renderRowHistory?: (args: PlanGridRowHistoryArgs) => ReactNode | null;
|
|
4801
|
+
}
|
|
4802
|
+
|
|
4803
|
+
export declare const PlanGridHostContext: Context<PlanGridHost | null>;
|
|
4804
|
+
|
|
4805
|
+
/**
|
|
4806
|
+
* What a host may put in place of a plan grid's generic parts (#842). Core
|
|
4807
|
+
* stays domain-free: a host that has a richer history for a collection (a
|
|
4808
|
+
* forecast history with restores and accuracy) renders it here; returning
|
|
4809
|
+
* null keeps the generic row-history sheet.
|
|
4810
|
+
*/
|
|
4811
|
+
export declare interface PlanGridRowHistoryArgs {
|
|
4812
|
+
/** The plan rows' collection ("forecasts"). */
|
|
4813
|
+
collection: string;
|
|
4814
|
+
/** The record the grid belongs to. */
|
|
4815
|
+
parentId: string;
|
|
4816
|
+
/** The saved row, when there is one. */
|
|
4817
|
+
rowId: string | null;
|
|
4818
|
+
/** The row's key value ("2026"). */
|
|
4819
|
+
key: string;
|
|
4820
|
+
/** The row's category id when the key is split by category, else null. */
|
|
4821
|
+
category: string | null;
|
|
4822
|
+
categoryLabel: (id: string | number) => string;
|
|
4823
|
+
onClose: () => void;
|
|
4824
|
+
}
|
|
4825
|
+
|
|
4671
4826
|
/** Play the configured notification sound. No-op for 'off'/unknown/unavailable audio. */
|
|
4672
4827
|
export declare function playNotificationSound(kind: NotificationSound | string | null | undefined): void;
|
|
4673
4828
|
|
|
@@ -4761,6 +4916,24 @@ declare type ProposalPollAnswer = {
|
|
|
4761
4916
|
json: any;
|
|
4762
4917
|
};
|
|
4763
4918
|
|
|
4919
|
+
/**
|
|
4920
|
+
* "Ready" / "2 lines missing Sales order" beside a button that sends
|
|
4921
|
+
* something to a partner. Give it a transition id (the pipeline pre-flight)
|
|
4922
|
+
* or an item action id (the extension's own pre-flight).
|
|
4923
|
+
*/
|
|
4924
|
+
export declare function PushReadinessChip({ collection, itemId, transitionId, itemActionId, label, compact, onJump }: {
|
|
4925
|
+
collection: string;
|
|
4926
|
+
itemId: string;
|
|
4927
|
+
transitionId?: string;
|
|
4928
|
+
itemActionId?: string;
|
|
4929
|
+
/** What the button does — "Submit to Warehouse". */
|
|
4930
|
+
label: string;
|
|
4931
|
+
/** Header use: a dot + a short word; the popover says the rest. */
|
|
4932
|
+
compact?: boolean;
|
|
4933
|
+
/** Called before a jump — a hosting dialog closes so the line shows. */
|
|
4934
|
+
onJump?: () => void;
|
|
4935
|
+
}): JSX.Element | null;
|
|
4936
|
+
|
|
4764
4937
|
export declare function QualityRulesView({ className }: {
|
|
4765
4938
|
className?: string;
|
|
4766
4939
|
}): JSX.Element;
|
|
@@ -5326,6 +5499,48 @@ export declare function RecordDrilldownSheet({ collection, itemId, layoutId, roo
|
|
|
5326
5499
|
onClose: () => void;
|
|
5327
5500
|
}): JSX.Element;
|
|
5328
5501
|
|
|
5502
|
+
export declare function RecordGraphExplorer({ collection, itemId, className }: {
|
|
5503
|
+
collection: string;
|
|
5504
|
+
itemId: string;
|
|
5505
|
+
className?: string;
|
|
5506
|
+
}): JSX.Element;
|
|
5507
|
+
|
|
5508
|
+
export declare interface RecordGraphGroup {
|
|
5509
|
+
key: string;
|
|
5510
|
+
direction: 'out' | 'in' | 'm2m';
|
|
5511
|
+
field: string;
|
|
5512
|
+
label: string;
|
|
5513
|
+
collection: string;
|
|
5514
|
+
collection_label: string;
|
|
5515
|
+
total: number;
|
|
5516
|
+
items: RecordGraphNode[];
|
|
5517
|
+
}
|
|
5518
|
+
|
|
5519
|
+
/**
|
|
5520
|
+
* Relationship explorer (#998). A record's neighbourhood drawn as a tree that
|
|
5521
|
+
* grows one hop at a time: the record, the relations it takes part in
|
|
5522
|
+
* (grouped — "Purchase orders · 3"), and the records behind each group. Any
|
|
5523
|
+
* record node expands the same way, so a workflow → its PO → the PO's
|
|
5524
|
+
* invoices is three clicks. Clicking a record opens it in the drill sheet
|
|
5525
|
+
* (or navigates when the host has none).
|
|
5526
|
+
*
|
|
5527
|
+
* Every hop is read as the viewer by GET /record-graph/:collection/:id, so
|
|
5528
|
+
* the picture never shows a record the viewer could not open themselves.
|
|
5529
|
+
*/
|
|
5530
|
+
export declare interface RecordGraphNode {
|
|
5531
|
+
collection: string;
|
|
5532
|
+
id: string;
|
|
5533
|
+
label: string;
|
|
5534
|
+
}
|
|
5535
|
+
|
|
5536
|
+
/** Right sheet hosting the explorer — hosts mount it beside the record form. */
|
|
5537
|
+
export declare function RecordGraphSheet({ collection, itemId, open, onOpenChange }: {
|
|
5538
|
+
collection: string;
|
|
5539
|
+
itemId: string;
|
|
5540
|
+
open: boolean;
|
|
5541
|
+
onOpenChange: (v: boolean) => void;
|
|
5542
|
+
}): JSX.Element;
|
|
5543
|
+
|
|
5329
5544
|
export declare function RecordGridEditor({ config }: {
|
|
5330
5545
|
config: RecordGridEditorConfig;
|
|
5331
5546
|
}): JSX.Element;
|
|
@@ -5489,6 +5704,9 @@ export declare function registerLayoutSlot(plugin: LayoutSlotPlugin): void;
|
|
|
5489
5704
|
|
|
5490
5705
|
export declare function registerRoomOpener(fn: RoomOpener): () => void;
|
|
5491
5706
|
|
|
5707
|
+
/** Register the host's opener. Returns an unregister function. */
|
|
5708
|
+
export declare function registerViewAsOpener(fn: ViewAsOpener): () => void;
|
|
5709
|
+
|
|
5492
5710
|
export declare function RelatedRecordsPanel({ collection, itemId, title, defaultExpanded }: {
|
|
5493
5711
|
collection: string;
|
|
5494
5712
|
itemId: string;
|
|
@@ -6475,6 +6693,15 @@ export declare function toneForOutcome(outcome: string): 'danger' | 'warning' |
|
|
|
6475
6693
|
/** Install the listeners. Safe to call more than once. */
|
|
6476
6694
|
export declare function trackActivity(): void;
|
|
6477
6695
|
|
|
6696
|
+
export declare function TrafficMiniMap({ window: win, tone, href, refreshMs, className }: {
|
|
6697
|
+
window?: 60 | 300 | 900;
|
|
6698
|
+
tone?: 'auto' | 'dark';
|
|
6699
|
+
/** Where "Open" goes. An absolute URL (another app's admin) opens in a new tab; default /traffic-map. */
|
|
6700
|
+
href?: string;
|
|
6701
|
+
refreshMs?: number;
|
|
6702
|
+
className?: string;
|
|
6703
|
+
}): JSX.Element | null;
|
|
6704
|
+
|
|
6478
6705
|
/**
|
|
6479
6706
|
* Translate scope values (target-collection IDS) into a filter's value space.
|
|
6480
6707
|
* When the filter compares ids (valueField 'id'/undefined) this is identity;
|
|
@@ -6886,6 +7113,8 @@ export declare function usePeerReadAt(room: string | null): string | null;
|
|
|
6886
7113
|
|
|
6887
7114
|
export declare function usePersonProfile(userId: string | null | undefined): UseQueryResult<NoInfer<PersonProfileData | null>, Error>;
|
|
6888
7115
|
|
|
7116
|
+
export declare function usePlanGridHost(): PlanGridHost | null;
|
|
7117
|
+
|
|
6889
7118
|
/**
|
|
6890
7119
|
* The quick picker BEFORE a record exists — the "+ New" menus open it, and on
|
|
6891
7120
|
* Create the host navigates to the new-record page with the picks in
|
|
@@ -6979,6 +7208,33 @@ export declare function useRoomMembership(): {
|
|
|
6979
7208
|
|
|
6980
7209
|
export declare function useRoomPins(room: string | null): NoInfer<PinnedMessage[]>;
|
|
6981
7210
|
|
|
7211
|
+
/** The user-picker option filter for this viewer (#732). */
|
|
7212
|
+
export declare function userOptionFilter(isAdmin: boolean): {
|
|
7213
|
+
_and: ({
|
|
7214
|
+
is_redacted: {
|
|
7215
|
+
_eq: boolean;
|
|
7216
|
+
};
|
|
7217
|
+
_or?: undefined;
|
|
7218
|
+
} | {
|
|
7219
|
+
_or: ({
|
|
7220
|
+
status: {
|
|
7221
|
+
_neq: string;
|
|
7222
|
+
_null?: undefined;
|
|
7223
|
+
};
|
|
7224
|
+
} | {
|
|
7225
|
+
status: {
|
|
7226
|
+
_null: boolean;
|
|
7227
|
+
_neq?: undefined;
|
|
7228
|
+
};
|
|
7229
|
+
})[];
|
|
7230
|
+
is_redacted?: undefined;
|
|
7231
|
+
} | {
|
|
7232
|
+
account_kind: {
|
|
7233
|
+
_null: boolean;
|
|
7234
|
+
};
|
|
7235
|
+
})[];
|
|
7236
|
+
};
|
|
7237
|
+
|
|
6982
7238
|
/** Stacked avatar cluster (+N) with a hover/pinnable portal roster whose rows
|
|
6983
7239
|
* are UserChips — the single user-display primitive for owners/user lists.
|
|
6984
7240
|
* Reused by the item-header Owners chip and the collection browser. */
|
|
@@ -7085,6 +7341,23 @@ declare interface ValidationResult {
|
|
|
7085
7341
|
unknownTokens: string[];
|
|
7086
7342
|
}
|
|
7087
7343
|
|
|
7344
|
+
export declare function viewAs(person: {
|
|
7345
|
+
id: string;
|
|
7346
|
+
name: string;
|
|
7347
|
+
}): void | Promise<void>;
|
|
7348
|
+
|
|
7349
|
+
/**
|
|
7350
|
+
* "View as" registry (#640). A profile page offers "View as <person>" only
|
|
7351
|
+
* while the host app has said how it opens itself as someone else — the
|
|
7352
|
+
* admin opens a new tab on a per-tab masquerade token; a host without the
|
|
7353
|
+
* idea never registers and the button never shows. Same shape as the chat
|
|
7354
|
+
* DM opener registry.
|
|
7355
|
+
*/
|
|
7356
|
+
declare type ViewAsOpener = (person: {
|
|
7357
|
+
id: string;
|
|
7358
|
+
name: string;
|
|
7359
|
+
}) => void | Promise<void>;
|
|
7360
|
+
|
|
7088
7361
|
export declare function WidgetSlot({ widgetId, inputBindings, itemDraft, itemCollection, ready, label, defaultExpanded, frameless, apiBase: apiBaseProp, compact, strip, onClientAction, onWidgetType, onContentChange }: WidgetSlotProps): JSX.Element | null;
|
|
7089
7362
|
|
|
7090
7363
|
declare interface WidgetSlotProps {
|