@ai-matrx/records-ui 0.10.3 → 0.16.1

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/index.d.ts CHANGED
@@ -1,10 +1,48 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { Uuid as Uuid$1, Table, Field, RecordDocument, ReadRow, RecordsError, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, RuleExpression, AggregateBucket, AggregateMeasure, DocTemplateRow, DocRenderRow, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource } from '@ai-matrx/records';
3
+ import { PermissionLevel, Table, Uuid as Uuid$1, RecordsError, Field, RecordDocument, ReadRow, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, WorkInboxKind, RuleExpression, AggregateBucket, AggregateMeasure, DocTemplateRow, DocRenderRow, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource } from '@ai-matrx/records';
4
4
  import { Uuid, Field as Field$1, ReadRow as ReadRow$1 } from '@ai-matrx/records/react';
5
5
  import { RecordsClient } from '@ai-matrx/records/core';
6
6
  import { MatrxColumnDef } from '@ai-matrx/design-system/data-table/types';
7
7
 
8
+ /** The six things a person does to a record or a table, as the screens offer them. */
9
+ type Capability = "read" | "comment" | "write" | "remove" | "share" | "structure";
10
+ interface WhatYouMayDo {
11
+ /** The word the store answered, or null when it answered nothing. */
12
+ level: PermissionLevel | null;
13
+ /**
14
+ * Whether the store has ANSWERED yet. `false` is a third state and not a
15
+ * refusal: a screen that drew "you may not" while the answer was in flight
16
+ * would blink every control off on every reload, which is its own lie.
17
+ */
18
+ known: boolean;
19
+ read: boolean;
20
+ comment: boolean;
21
+ write: boolean;
22
+ remove: boolean;
23
+ share: boolean;
24
+ structure: boolean;
25
+ /** Why this person may not do that, in one sentence naming the way in. */
26
+ why: (what: Capability) => string;
27
+ }
28
+ /** What each rung of the ladder is called where a person reads it. */
29
+ declare const LEVEL_WORD: Record<PermissionLevel, string>;
30
+ /**
31
+ * WHAT ONE LEVEL LETS A PERSON DO. `level` null and `known` true means the
32
+ * store said "nothing" — a real answer. `known` false means it has not said.
33
+ */
34
+ declare function whatYouMayDo(level: PermissionLevel | null, known?: boolean): WhatYouMayDo;
35
+ /** Nothing offered, because nothing is known yet. */
36
+ declare const NOT_ANSWERED_YET: WhatYouMayDo;
37
+ /**
38
+ * REC-27. The nine Tables the platform ships are not administered from a
39
+ * person's screen whatever level they hold on them — so the structure controls
40
+ * are absent for a kernel Table and say why, and everything else follows the
41
+ * level as usual.
42
+ */
43
+ declare const KERNEL_REASON: string;
44
+ declare function whatYouMayDoWithTable(table: Table | null | undefined, level: PermissionLevel | null, known: boolean): WhatYouMayDo;
45
+
8
46
  /** One named piece of grounding, shaped the way the platform's context slice takes them. */
9
47
  interface RecordChatEntry {
10
48
  key: string;
@@ -70,21 +108,37 @@ interface EnrichPanelProps {
70
108
  }
71
109
  declare function EnrichPanel({ tableId, recordId, className }: EnrichPanelProps): react.JSX.Element;
72
110
 
73
- /** What a person may do to one table. The words are the store's, not ours. */
74
- interface TableRights {
111
+ /**
112
+ * What a person may do to one table. The four words and the ladder are the
113
+ * store's (`rights.ts`), not ours.
114
+ *
115
+ * `admin`, `comment` and `write` are kept with the names they have always had,
116
+ * because every screen in this package and in the host apps reads them; they
117
+ * are now the store's ANSWER rather than a host's guess.
118
+ */
119
+ interface TableRights extends WhatYouMayDo {
75
120
  /** SCR-2: holders of `admin` on the table see the "+" and the settings panel. */
76
121
  admin: boolean;
77
- /** SCR-18: `commenter` and no higher right. */
78
- comment: boolean;
79
- /** May write records at all. */
80
- write: boolean;
81
122
  /**
82
- * Why this answer, in a sentence a person can read. Never empty: a right that
83
- * is false without a reason is the silent failure this package refuses.
123
+ * Why this answer, in one sentence. Kept for callers that show a single
124
+ * reason; `why(what)` is the per-control sentence and is what the screens use.
84
125
  */
85
126
  reason: string;
86
127
  }
128
+ /**
129
+ * Kept so a host that imported it still compiles. It is no longer any screen's
130
+ * default: the store answers this question now, and a package that said "I
131
+ * assume nothing" while holding the answer would be hiding controls from the
132
+ * people who hold them.
133
+ */
87
134
  declare const NO_RIGHTS: TableRights;
135
+ /**
136
+ * THE ONE WAY TO BUILD A `TableRights` BY HAND — for a host with its own
137
+ * authority, and for a suite that wants to mount one seat's screen. It takes
138
+ * the LEVEL, never six booleans, so nobody can hand a screen a combination the
139
+ * ladder cannot produce (write without read, share without edit).
140
+ */
141
+ declare function tableRightsAt(level: PermissionLevel | null): TableRights;
88
142
  interface RecordsUiHost {
89
143
  /** Answer the rights question for one table. Synchronous: a screen renders now. */
90
144
  rights?: (table: Table) => TableRights;
@@ -122,6 +176,14 @@ interface RecordsUiHost {
122
176
  ok: false;
123
177
  reason: string;
124
178
  }>;
179
+ /**
180
+ * Where this app serves its PUBLIC pages from, when that is not the origin
181
+ * the screen is running on. A form's link is built here, so an owner copying
182
+ * it from an admin host, a preview deployment or a desktop shell gets the
183
+ * address a stranger can actually open — never `http://localhost:3000/f/…`
184
+ * pasted into an email. Unbound, the browser's own origin is used.
185
+ */
186
+ publicOrigin?: string;
125
187
  /**
126
188
  * OPTIONAL. The organization's saved views as `platform.saved_view` holds
127
189
  * them — which is what a subscription points at (DOOR-18). The record store
@@ -267,8 +329,81 @@ declare function RecordsUiProvider({ value, children }: {
267
329
  children: ReactNode;
268
330
  }): react.JSX.Element;
269
331
  declare function useRecordsUi(): RecordsUiHost;
270
- /** The rights for one table — `NO_RIGHTS`, with its reason, when nothing is bound. */
332
+ /**
333
+ * WHAT THIS PERSON MAY DO TO THIS TABLE — asked, once per table.
334
+ *
335
+ * A host that binds `rights` still wins: a portal, an embed or an app with its
336
+ * own authority is entitled to a narrower answer than the store's. An unbound
337
+ * host no longer gets a guess in either direction — while the door is
338
+ * answering, `known` is false and NOTHING is offered and nothing is claimed.
339
+ */
271
340
  declare function useTableRights(table: Table | null | undefined): TableRights;
341
+ /**
342
+ * WHAT THIS PERSON MAY DO TO ONE RECORD — which is a different question from
343
+ * the table's, and the sixth-pass verdict is the proof: a record shared with a
344
+ * colleague at Editor inside a table she holds at Viewer. The grid used to
345
+ * label that row "viewer" while the store let her write to it.
346
+ */
347
+ declare function useRecordRights(recordId: Uuid$1 | null): WhatYouMayDo;
348
+ /**
349
+ * The same question for a whole page of records, in ONE call — the door takes a
350
+ * list precisely so a grid never makes one call per row.
351
+ *
352
+ * `enabled` is how a grid avoids asking at all in the ordinary case: when the
353
+ * table level already admits editing, every row it returned is editable and
354
+ * there is nothing a per-record answer could add.
355
+ */
356
+ declare function useRowRights(rowIds: Uuid$1[], enabled: boolean): (rowId: Uuid$1) => WhatYouMayDo | null;
357
+
358
+ /**
359
+ * MACHINE IDENTITY, BY SHAPE — never by a list of the sentences we happen to
360
+ * have seen, because the next refusal is one nobody has read yet.
361
+ *
362
+ * `FLD-11:` / `REC-29:` / `AGT-7:` a contract row id
363
+ * `custom.field_declare` a schema-qualified database object
364
+ * `config.via` / `data.fields` a path inside a stored document
365
+ * `retention_days` a document key, snake_case
366
+ * `8f2c1b0a-…` a uuid
367
+ * `23514` / `PT409` a SQLSTATE
368
+ */
369
+ declare const MACHINE_IDENTITY: RegExp[];
370
+ /** Whether any shape above appears in this text. */
371
+ declare function isMachineIdentity(text: string): boolean;
372
+ /**
373
+ * Every fragment of `text` that a person should never have been shown. Used by
374
+ * the suite to say WHAT it found rather than only that it found something.
375
+ */
376
+ declare function machineIdentityIn(text: string): string[];
377
+ /** The one shape every screen in this package renders a refusal from. */
378
+ interface PlainRefusal {
379
+ /** The heading. Never the store's code. */
380
+ title: string;
381
+ /**
382
+ * What happened, in the store's own words where they are a person's words
383
+ * and in ours where they are not. Never empty.
384
+ */
385
+ sentence: string;
386
+ /** What to do now. Never empty. */
387
+ remedy: string;
388
+ /**
389
+ * Everything a person should not read, kept for whoever has to debug it: the
390
+ * SQLSTATE, the hint written for a caller, and any clause dropped above.
391
+ * Rendered out of sight (the notice's `title` attribute and a screen-reader-
392
+ * only line), never deleted.
393
+ */
394
+ forEngineers: string;
395
+ }
396
+ /**
397
+ * THE FORMATTER. Every refusal a screen in this package shows goes through
398
+ * here, and nothing in this package renders `error.message` directly.
399
+ */
400
+ declare function refusalForAPerson(error: RecordsError): PlainRefusal;
401
+ /**
402
+ * The same answer as one line, for a cell or a field where a block would break
403
+ * the layout. Still one sentence and one remedy — never the sentence alone,
404
+ * because half of this formatter's job is the thing to do next.
405
+ */
406
+ declare function refusalLineForAPerson(error: RecordsError): string;
272
407
 
273
408
  /**
274
409
  * A token (`records_ui_view`, `long_text`, `v78_widget2`) as a person would
@@ -383,8 +518,19 @@ interface Options {
383
518
  reload: () => void;
384
519
  /** May this person write records at all? A read-only grid opens no editor. */
385
520
  canWrite: boolean;
521
+ /**
522
+ * MAY THIS PERSON WRITE *THIS* ROW — asked before an editor is opened, never
523
+ * after it has been typed into.
524
+ *
525
+ * A level on the TABLE is not the answer for a row: the sixth-pass verdict
526
+ * found a record shared with a colleague at Editor inside a table she held at
527
+ * Viewer, and the grid labelled the row "viewer" while the store let her
528
+ * write to it. Unbound, every row follows the table, which is what the
529
+ * ordinary case is.
530
+ */
531
+ mayWriteRow?: ((rowId: Uuid$1) => boolean) | undefined;
386
532
  }
387
- declare function useGridEditing({ tableId, fields, rows, reload, canWrite }: Options): GridEditing;
533
+ declare function useGridEditing({ tableId, fields, rows, reload, canWrite, mayWriteRow }: Options): GridEditing;
388
534
  /**
389
535
  * ONE CELL. Read, until somebody asks to change it; then the Field's own
390
536
  * editor, in place, with the keys a person expects from a grid.
@@ -392,15 +538,26 @@ declare function useGridEditing({ tableId, fields, rows, reload, canWrite }: Opt
392
538
  * `data-matrx-cell-control` is the data table's own opt-out from whole-row
393
539
  * click, so opening a cell never also opens the record panel behind it.
394
540
  */
395
- declare function GridCell({ field, row, editing, canWrite, }: {
541
+ declare function GridCell({ field, row, editing, canWrite, whyNot, }: {
396
542
  field: Field;
397
543
  row: ReadRow;
398
544
  editing: GridEditing;
545
+ /** Whether this person may write THIS row. Asked before the cell is drawn. */
399
546
  canWrite: boolean;
547
+ /**
548
+ * Why not, when not — one sentence naming the level it would take and who can
549
+ * give it. A cell that is simply not a control, with nothing to say about it,
550
+ * is the silent half of the same defect this file closes.
551
+ */
552
+ whyNot?: string | undefined;
400
553
  }): react.JSX.Element;
401
554
 
555
+ /**
556
+ * Kept for callers outside this package that already ask the question. The
557
+ * answer is `plainWords.ts`'s, so there is one shape list and not two.
558
+ */
402
559
  declare function hintIsMachineIdentity(hint: string): boolean;
403
- /** The hint a PERSON should read, or null when the hint is for an engineer. */
560
+ /** The hint a PERSON should read, or null when it is written for an engineer. */
404
561
  declare function hintForAPerson(hint: string | null | undefined): string | null;
405
562
  declare function RefusalNotice({ error, className, actions, }: {
406
563
  error: RecordsError;
@@ -439,7 +596,7 @@ declare function Grid({ tableId, pageSize, onOpenRecord, onAddField, onNewRecord
439
596
  * key (`names.ts`) — and the cell is the value, rendered by its parity type and
440
597
  * editable in place when an editing session is passed.
441
598
  */
442
- declare function columnForField(field: Field$1, editing?: GridEditing | null): MatrxColumnDef<ReadRow$1>;
599
+ declare function columnForField(field: Field$1, editing?: GridEditing | null, mayWriteRow?: (rowId: Uuid) => boolean, whyNotRow?: (rowId: Uuid) => string): MatrxColumnDef<ReadRow$1>;
443
600
 
444
601
  interface ExportMenuProps {
445
602
  tableId: Uuid;
@@ -461,24 +618,15 @@ interface ImportWizardProps {
461
618
  declare function ImportWizard({ tableId, onProposeField, onDone, className }: ImportWizardProps): react.JSX.Element;
462
619
 
463
620
  interface CustomFieldsSectionProps {
464
- /**
465
- * The Table the Fields extend. For a standard entity this is the Table record
466
- * that stands for that entity — the host passes it, because which entity a
467
- * page is showing is the page's own fact.
468
- *
469
- * A page that knows the entity's TOKEN rather than its id passes `entityToken`
470
- * instead, and this section resolves it: an entity page must not have to run
471
- * a lookup of its own to add one line.
472
- */
473
- tableId?: Uuid | undefined;
474
- /** The entity's registered token (REC-33), e.g. `party`. Resolved to its Table. */
475
- entityToken?: string | undefined;
621
+ /** The standard table's registered token (REC-33), e.g. `party`, `crm_deal`. */
622
+ entityToken: string;
623
+ /** The id of the row this page is showing. */
476
624
  recordId: Uuid;
477
625
  /** The heading. One row, no subtitle restating it. */
478
626
  title?: string | undefined;
479
627
  className?: string | undefined;
480
628
  }
481
- declare function CustomFieldsSection({ tableId, entityToken, recordId, title, className, }: CustomFieldsSectionProps): react.JSX.Element | null;
629
+ declare function CustomFieldsSection({ entityToken, recordId, title, className, }: CustomFieldsSectionProps): react.JSX.Element | null;
482
630
 
483
631
  /** The three behaviours that carry no parity type of their own. */
484
632
  type PlainFieldType = "text" | "long_text" | "number";
@@ -937,54 +1085,22 @@ interface ProposalRowProps {
937
1085
  }
938
1086
  declare function ProposalRow({ change, outcome, onApply, onReject, readOnlyReason, onSettled, className, }: ProposalRowProps): react.JSX.Element;
939
1087
 
940
- /** The three things that land in the queue. One word each, closed. */
1088
+ /** The three things that land in the queue, exactly as the door names them. */
941
1089
  declare const ACTION_KINDS: readonly ["approval", "assignment", "proposal"];
942
- type ActionKind = (typeof ACTION_KINDS)[number];
943
- /** The package-owned Table every queued action is a record of. */
944
- declare const ACTION_TABLE: SystemTableSpec;
945
- /**
946
- * THE DECLARATIVE SPEC an agent writes. One `record_write` of this document puts
947
- * a decision in front of a person — there is no per-feature approval plumbing
948
- * anywhere in the platform.
949
- */
950
- interface QueuedActionSpec {
951
- kind: ActionKind;
952
- title: string;
953
- why?: string | undefined;
954
- assignee?: Uuid | null | undefined;
955
- subjectTable?: Uuid | null | undefined;
956
- subject?: Uuid | null | undefined;
957
- /** For a proposal: the exact acts being asked for. */
958
- changes?: ProposedChange[] | undefined;
959
- }
960
- interface QueuedAction extends QueuedActionSpec {
961
- id: Uuid;
1090
+ type ActionKind = WorkInboxKind;
1091
+ interface ActionInboxProps {
962
1092
  /**
963
- * The version this row was read at. The read door answers documents and not
964
- * versions, so a queue row carries null and settling it is the store's
965
- * ordinary last-writer-wins write — the row's own `status` is what a second
966
- * settler then sees.
1093
+ * Narrow to one table's work. The door answers the organization; this filters
1094
+ * the assignments to the table a person is looking at, and leaves approvals
1095
+ * and proposals alone because those are about a change, not about a table.
967
1096
  */
968
- version: number | null;
969
- status: "open" | "accepted" | "rejected" | "refused";
970
- answer: string | null;
971
- at: string;
972
- }
973
- declare function actionDocument(spec: QueuedActionSpec): Record<string, unknown>;
974
- interface ActionInboxProps {
975
- /** Narrow the queue to one table's actions. Left out, it is everything waiting. */
976
1097
  tableId?: Uuid | null | undefined;
977
- /** Show settled actions too. The default is what is still waiting. */
1098
+ /** Show decided rows too. The default is what is still waiting. */
978
1099
  includeSettled?: boolean | undefined;
979
- /**
980
- * COMPLETE DECLARATIVE SPECS an agent wrote. Any of these the queue does not
981
- * already hold (by title) is filed as a record on first load.
982
- */
983
- seed?: QueuedActionSpec[] | undefined;
984
1100
  onOpenRecord?: ((recordId: Uuid, tableId: Uuid) => void) | undefined;
985
1101
  className?: string | undefined;
986
1102
  }
987
- declare function ActionInbox({ tableId, includeSettled, seed, onOpenRecord, className }: ActionInboxProps): react.JSX.Element;
1103
+ declare function ActionInbox({ tableId, includeSettled, onOpenRecord, className }: ActionInboxProps): react.JSX.Element;
988
1104
 
989
1105
  interface HistoryPanelProps {
990
1106
  tableId: Uuid;
@@ -1249,15 +1365,48 @@ interface DashboardCanvasProps {
1249
1365
  }
1250
1366
  declare function DashboardCanvas({ tableId, seed, activeDashboardId, className }: DashboardCanvasProps): react.JSX.Element;
1251
1367
 
1368
+ interface FormsPanelProps {
1369
+ tableId: Uuid;
1370
+ className?: string | undefined;
1371
+ }
1372
+ declare function FormsPanel({ tableId, className }: FormsPanelProps): react.JSX.Element;
1373
+
1374
+ /** What the public arm's `onSubmit` answers. A refusal carries the door's words. */
1375
+ type FormSubmitOutcome = {
1376
+ ok: true;
1377
+ message?: string | null;
1378
+ recordId?: Uuid | null;
1379
+ } | {
1380
+ ok: false;
1381
+ message: string;
1382
+ };
1252
1383
  interface FormRunnerProps {
1253
1384
  /** The complete spec. An agent wrote it; `FormBuilder` saved it; this runs it. */
1254
1385
  form: FormSpec | SavedForm;
1386
+ /**
1387
+ * PUBLIC ARM — the subject Table's Fields, already resolved by the server
1388
+ * through `custom.form_public`. Given together with `onSubmit`, this component
1389
+ * mounts no store client at all and the browser never touches the store.
1390
+ */
1391
+ fields?: readonly Field[] | undefined;
1392
+ /** PUBLIC ARM — where an answer goes. Server action or route handler. */
1393
+ onSubmit?: ((values: Record<string, unknown>) => Promise<FormSubmitOutcome>) | undefined;
1394
+ /**
1395
+ * PUBLIC ARM — the name of a decoy input. A person never fills it; a script
1396
+ * fills everything. The door decides what a filled one means, not this screen.
1397
+ */
1398
+ honeypotKey?: string | null | undefined;
1255
1399
  /** Preview mode answers the questions but writes nothing, and says so. */
1256
1400
  preview?: boolean | undefined;
1257
- onSubmitted?: ((recordId: Uuid) => void) | undefined;
1401
+ onSubmitted?: ((recordId: Uuid | null) => void) | undefined;
1258
1402
  className?: string | undefined;
1259
1403
  }
1260
- declare function FormRunner({ form, preview, onSubmitted, className }: FormRunnerProps): react.JSX.Element;
1404
+ /**
1405
+ * THE ONE ENTRY POINT. It picks the arm and nothing else: a caller that brought
1406
+ * the Fields and a place to send the answers gets the stage on its own, and
1407
+ * everybody else gets the connected half, which reads both from the store.
1408
+ */
1409
+ declare function FormRunner(props: FormRunnerProps): react.JSX.Element;
1261
1410
 
1262
1411
  /** THE COMPLETE DECLARATIVE SPEC — one object, one `record_write`, a whole checklist. */
1263
1412
  interface ChecklistSpec {
@@ -1307,7 +1456,8 @@ interface BookingSlotsProps {
1307
1456
  };
1308
1457
  /** How long a hold lasts before the store lets the slot go. Default 15 minutes. */
1309
1458
  holdFor?: string;
1310
- onBooked?: ((recordId: Uuid) => void) | undefined;
1459
+ /** `null` when the answer was HELD rather than written — see the runner's own note. */
1460
+ onBooked?: ((recordId: Uuid | null) => void) | undefined;
1311
1461
  className?: string | undefined;
1312
1462
  }
1313
1463
  declare function BookingSlots({ tableId, form, availability, holdFor, onBooked, className, }: BookingSlotsProps): react.JSX.Element;
@@ -1382,12 +1532,18 @@ declare function useEmbedHandshake(args: {
1382
1532
  };
1383
1533
 
1384
1534
  declare const STORE_DECIDES_REASON: string;
1385
- declare const KERNEL_REASON: string;
1535
+
1386
1536
  /**
1387
- * The rights answer for a host whose authority IS the record store's doors.
1388
- * Offers the control; the store refuses with its own sentence if it must.
1537
+ * DEPRECATED, and kept only so a host that imported it still compiles.
1538
+ *
1539
+ * It used to answer yes to everything for every non-kernel table. It cannot
1540
+ * answer honestly at all, because the honest answer needs a door call and this
1541
+ * signature is synchronous — which is exactly why the guess was here. Binding
1542
+ * it now would be binding a port that OVERRIDES the store's real answer, so it
1543
+ * returns the not-yet-answered set and every caller should simply stop passing
1544
+ * a `rights` port: unbound is the honest path (`useTableRights`).
1389
1545
  */
1390
- declare function storeDecidesRights(table: Table): TableRights;
1546
+ declare function storeDecidesRights(_table: Table): TableRights;
1391
1547
  interface RecordsMountProps {
1392
1548
  /** The store config: the host's session-carrying client, the actor, the organization. */
1393
1549
  config: RecordsConfig;
@@ -1576,6 +1732,14 @@ interface ShareControlProps {
1576
1732
  subjectId: Uuid$1;
1577
1733
  /** What to call it in the dialog's title. */
1578
1734
  name?: string | undefined;
1735
+ /**
1736
+ * Whether this person may pass this on — `custom.share_grant` asks for Admin
1737
+ * ON THE THING. A caller that already holds the answer (a table screen has
1738
+ * the table's rights in its hand) passes it; left out, this asks the store
1739
+ * itself for the subject named above. Either way it is an ANSWER and never an
1740
+ * assumption, which is the whole of this lane.
1741
+ */
1742
+ may?: boolean | undefined;
1579
1743
  size?: "sm" | "default" | undefined;
1580
1744
  variant?: "ghost" | "outline" | "default" | undefined;
1581
1745
  className?: string | undefined;
@@ -1584,6 +1748,6 @@ interface ShareControlProps {
1584
1748
  declare function useCanShare(): boolean;
1585
1749
  /** Why there is no Share button here, for anything that asks. */
1586
1750
  declare function shareUnavailableReason(): string;
1587
- declare function ShareControl({ kind, organizationId, subjectId, name, size, variant, className, }: ShareControlProps): ReactNode;
1751
+ declare function ShareControl({ kind, organizationId, subjectId, name, may, size, variant, className, }: ShareControlProps): ReactNode;
1588
1752
 
1589
- export { ACTION_KINDS, ACTION_TABLE, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_TABLE, COMMENT_TABLE, type CaptureMode, type CaptureQueuePort, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartKind, type ChartSpec, ChecklistRunner, type ChecklistRunnerProps, type ChecklistSpec, type ChecklistStepSpec, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DASHBOARD_TABLE, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DashboardSpec, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FORM_TABLE, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldLabel, type FieldProposalRow, type FieldTypeChoice, FormBuilder, type FormBuilderProps, type FormFlow, type FormQuestionSpec, FormRunner, type FormRunnerProps, type FormSpec, type FormTheme, Grid, GridCell, type GridEditing, type GridProps, HistoryPanel, type HistoryPanelProps, IN_MEMORY_QUEUE_REASON, ImportWizard, type ImportWizardProps, KERNEL_REASON, LANE_EMPTY, LANE_TITLE, LAYOUT_FIELD_KIND, LAYOUT_LABEL, LAYOUT_NEEDS, LAYOUT_NO_FIELD, type LabelLookup, NO_CHAT_REASON, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, type PlainFieldType, PortalShell, type PortalShellProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, type QueuedAction, type QueuedActionSpec, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, RecordValue, RecordsMount, type RecordsMountProps, type RecordsUiHost, RecordsUiProvider, RefusalLine, RefusalNotice, RelationPicker, type RelationPickerProps, SERIES_COLORS, STORE_DECIDES_REASON, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, SignBlock, type SignBlockProps, type SystemFieldSpec, type SystemTableSpec, TABLE_LANES, TABLE_NOT_REACHABLE, type TableLane, TablePage, type TablePageProps, type TableRights, TableSettings, type TableSettingsProps, TablesHome, type TablesHomeProps, type TrackedVersion, type UseSystemTableState, VIEW_LAYOUTS, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, actionDocument, addFields, bodyForReading, bodyFromKeys, columnForField, dashboardDocument, dashboardFromRecord, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDocument, formFromRecord, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isPlainFieldType, isSignatureField, keyFor, laneFor, memberName, parityTypesWithNoExplanation, personActor, personRecordForMember, pointsAtRecords, recordName, recordsDataSource, renderValue, rowName, scalarText, shareUnavailableReason, storeDecidesRights, submissionStamp, tableName, tokenFor, useCanShare, useEmbedHandshake, useGridEditing, useRecordLabels, useRecordsUi, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing };
1753
+ export { ACTION_KINDS, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_TABLE, COMMENT_TABLE, type Capability, type CaptureMode, type CaptureQueuePort, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartKind, type ChartSpec, ChecklistRunner, type ChecklistRunnerProps, type ChecklistSpec, type ChecklistStepSpec, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DASHBOARD_TABLE, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DashboardSpec, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FORM_TABLE, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldLabel, type FieldProposalRow, type FieldTypeChoice, FormBuilder, type FormBuilderProps, type FormFlow, type FormQuestionSpec, FormRunner, type FormRunnerProps, type FormSpec, type FormSubmitOutcome, type FormTheme, FormsPanel, type FormsPanelProps, Grid, GridCell, type GridEditing, type GridProps, HistoryPanel, type HistoryPanelProps, IN_MEMORY_QUEUE_REASON, ImportWizard, type ImportWizardProps, KERNEL_REASON, LANE_EMPTY, LANE_TITLE, LAYOUT_FIELD_KIND, LAYOUT_LABEL, LAYOUT_NEEDS, LAYOUT_NO_FIELD, LEVEL_WORD, type LabelLookup, MACHINE_IDENTITY, NOT_ANSWERED_YET, NO_CHAT_REASON, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, type PlainFieldType, type PlainRefusal, PortalShell, type PortalShellProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, RecordValue, RecordsMount, type RecordsMountProps, type RecordsUiHost, RecordsUiProvider, RefusalLine, RefusalNotice, RelationPicker, type RelationPickerProps, SERIES_COLORS, STORE_DECIDES_REASON, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, SignBlock, type SignBlockProps, type SystemFieldSpec, type SystemTableSpec, TABLE_LANES, TABLE_NOT_REACHABLE, type TableLane, TablePage, type TablePageProps, type TableRights, TableSettings, type TableSettingsProps, TablesHome, type TablesHomeProps, type TrackedVersion, type UseSystemTableState, VIEW_LAYOUTS, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, type WhatYouMayDo, addFields, bodyForReading, bodyFromKeys, columnForField, dashboardDocument, dashboardFromRecord, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDocument, formFromRecord, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isMachineIdentity, isPlainFieldType, isSignatureField, keyFor, laneFor, machineIdentityIn, memberName, parityTypesWithNoExplanation, personActor, personRecordForMember, pointsAtRecords, recordName, recordsDataSource, refusalForAPerson, refusalLineForAPerson, renderValue, rowName, scalarText, shareUnavailableReason, storeDecidesRights, submissionStamp, tableName, tableRightsAt, tokenFor, useCanShare, useEmbedHandshake, useGridEditing, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing, whatYouMayDo, whatYouMayDoWithTable };