@ai-matrx/records-ui 0.38.0 → 0.41.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/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ComponentType, RefObject } from 'react';
3
3
  import * as _ai_matrx_records from '@ai-matrx/records';
4
- import { PermissionLevel, Table, RecordScopeContext, EnrichCell, RecordsError, Uuid as Uuid$1, AggregateFilter, Field, RecordDocument, ReadRow, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, WorkInboxKind, RuleExpression, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, DashboardBlockKind, AggregateBucket, AggregateMeasure, DashboardBlock, DashboardSummary, DocTemplateRow, DocRenderRow, QuietHours, DashboardBlockResult, CaptureSheetFace, CaptureField, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource, FieldTypeWord } from '@ai-matrx/records';
4
+ import { PermissionLevel, Table, RecordScopeContext, EnrichCell, RecordsError, Uuid as Uuid$1, AggregateFilter, Field, RecordDocument, ReadRow, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, WorkInboxKind, RuleExpression, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, DashboardBlockKind, AggregateBucket, AggregateMeasure, DashboardBlock, DashboardSummary, DocTemplateRow, DocRenderRow, QuietHours, DashboardBlockResult, ChecklistRunStep, BookingSummary, CaptureSheetFace, CaptureField, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource, FieldTypeWord } from '@ai-matrx/records';
5
5
  import { Uuid, Field as Field$1, ReadRow as ReadRow$1 } from '@ai-matrx/records/react';
6
6
  import { RecordsClient } from '@ai-matrx/records/core';
7
7
  import { FieldFormatConfig } from '@ai-matrx/design-system/field-formats';
@@ -974,15 +974,33 @@ declare function CustomFieldsSection({ entityToken, recordId, title, className,
974
974
 
975
975
  /** The three behaviours that carry no parity type of their own. */
976
976
  type PlainFieldType = "text" | "long_text" | "number";
977
- /** What a person picks in the panel: one of the thirteen, or one of the three. */
978
- type PickableFieldType = ParityFieldType | PlainFieldType;
977
+ /**
978
+ * THE ONE A PERSON COMING FROM AIRTABLE REACHES FOR FIRST, AND IT WAS NOT HERE.
979
+ *
980
+ * The list above offered `member` (a Person) and `attachment` (a File) — the two
981
+ * relations whose target is a Table the PLATFORM keeps — and nothing at all for
982
+ * "this job belongs to that customer". The store has taken it since 2026-09-20
983
+ * (`custom.field_declare` with `type: "relation"` and a `relation_target`), the
984
+ * Field type has named it since the same day, and `editorKindFor` has answered
985
+ * `"relation"` for one since long before that. Only the menu did not offer it,
986
+ * so the guide's section 3 told a person to pick a kind that did not exist.
987
+ *
988
+ * It is NOT a fourteenth parity type. `custom.parity_field_types()` ships
989
+ * thirteen and a relation is a BEHAVIOUR — the same behaviour `member` and
990
+ * `attachment` are made of — so it sits beside the three plain ones as its own
991
+ * word, and `parityTypesWithNoExplanation()` is unaffected by it in both
992
+ * directions: it does not appear there, and it cannot hide a real gap there.
993
+ */
994
+ type RelationFieldType = "relation";
995
+ /** What a person picks in the panel: one of the thirteen, one of the three, or a link. */
996
+ type PickableFieldType = ParityFieldType | PlainFieldType | RelationFieldType;
979
997
  interface FieldTypeChoice {
980
998
  id: PickableFieldType;
981
999
  /** The word on the menu. */
982
1000
  label: string;
983
1001
  /** One line, under the word, saying what it is FOR. Never what it is made of. */
984
1002
  explanation: string;
985
- /** The heading it sits under, so sixteen choices read as four short lists. */
1003
+ /** The heading it sits under, so seventeen choices read as four short lists. */
986
1004
  group: "Words" | "Numbers and dates" | "Choices and people" | "Worked out";
987
1005
  }
988
1006
  declare const FIELD_TYPE_CHOICES: FieldTypeChoice[];
@@ -990,12 +1008,23 @@ declare const FIELD_TYPE_GROUPS: FieldTypeChoice["group"][];
990
1008
  declare function fieldTypeChoice(id: string): FieldTypeChoice | undefined;
991
1009
  /** The three that are a plain behaviour rather than one of the thirteen. */
992
1010
  declare function isPlainFieldType(id: string): id is PlainFieldType;
1011
+ /**
1012
+ * The one that is a relation a person aims themselves. It is neither plain nor
1013
+ * one of the thirteen, so every caller that branched on `isPlainFieldType`
1014
+ * alone has to answer this question too — which is why it is a named function
1015
+ * and not an inline string comparison at four call sites.
1016
+ */
1017
+ declare function isRelationFieldType(id: string): id is RelationFieldType;
993
1018
  /**
994
1019
  * THE GUARD THIS FILE NEEDS, because the list it explains is generated.
995
1020
  *
996
1021
  * Returns the parity types the store ships that nothing here explains. The
997
1022
  * suite asserts it is empty; a fourteenth type would otherwise reach the menu
998
1023
  * with a blank line under it and nobody would notice until a person did.
1024
+ *
1025
+ * `relation` is deliberately NOT one of the thirteen and therefore never
1026
+ * appears in this answer: `PARITY_FIELD_TYPES` is the store's own generated
1027
+ * list and a behaviour that carries no parity type is not in it.
999
1028
  */
1000
1029
  declare function parityTypesWithNoExplanation(): string[];
1001
1030
 
@@ -1034,6 +1063,8 @@ declare function whatIsMissing(state: {
1034
1063
  of: string;
1035
1064
  relations: Field[];
1036
1065
  formulaFields: string[];
1066
+ /** Only a link asks for one, so a caller about any other kind leaves it out. */
1067
+ relationTarget?: string;
1037
1068
  }): string | null;
1038
1069
 
1039
1070
  interface FieldProposalRow {
@@ -1299,6 +1330,12 @@ interface SavedViewSpec {
1299
1330
  layout: ViewLayout;
1300
1331
  /** Kanban: the Field whose value becomes a column. */
1301
1332
  groupField?: string | null;
1333
+ /**
1334
+ * Kanban: a number Field to TOTAL under each column heading. It lives on the VIEW for
1335
+ * the same reason the colours do — two people read one board two ways and neither
1336
+ * reading is a fact about the records.
1337
+ */
1338
+ measure?: string | null;
1302
1339
  /** Calendar: the Field that places a record in the month. */
1303
1340
  dateField?: string | null;
1304
1341
  /** Gallery: the Field shown large on the card. */
@@ -1379,6 +1416,12 @@ interface ViewSwitcherProps {
1379
1416
  */
1380
1417
  onViewChange?: ((patch: Partial<SavedViewSpec>) => void) | undefined;
1381
1418
  onOpenRecord?: ((recordId: Uuid) => void) | undefined;
1419
+ /**
1420
+ * Called after a card moves between columns, so the host re-reads the rows it owns. A
1421
+ * board that moved a card and left the row list alone would show the card in two places
1422
+ * until something else happened to reload.
1423
+ */
1424
+ onMoved?: (() => void) | undefined;
1382
1425
  /** The host's whole-record form, offered by the grid when an empty record is refused. */
1383
1426
  onNewRecordForm?: (() => void) | undefined;
1384
1427
  /** "Who changed this?" from a grid cell — the host opens that column's timeline. */
@@ -1394,7 +1437,7 @@ declare function useViewRecords(view: SavedViewSpec, pageSize?: number): {
1394
1437
  /** Where membership came from, in a sentence. A screen that hides this is hiding the view's meaning. */
1395
1438
  membership: string;
1396
1439
  };
1397
- declare function ViewSwitcher({ view, onLayoutChange, onViewChange, onOpenRecord, onNewRecordForm, onAskWhoChanged, pageSize, className, }: ViewSwitcherProps): react.JSX.Element;
1440
+ declare function ViewSwitcher({ view, onLayoutChange, onViewChange, onOpenRecord, onMoved, onNewRecordForm, onAskWhoChanged, pageSize, className, }: ViewSwitcherProps): react.JSX.Element;
1398
1441
 
1399
1442
  interface ViewBarProps {
1400
1443
  /** The Table whose views these are. */
@@ -1980,59 +2023,98 @@ interface FormRunnerProps {
1980
2023
  */
1981
2024
  declare function FormRunner(props: FormRunnerProps): react.JSX.Element;
1982
2025
 
1983
- /** THE COMPLETE DECLARATIVE SPEC — one object, one `record_write`, a whole checklist. */
1984
- interface ChecklistSpec {
1985
- name: string;
1986
- /** The Table the steps become records in. */
1987
- subject: Uuid;
1988
- steps: ChecklistStepSpec[];
1989
- }
1990
- interface ChecklistStepSpec {
1991
- /** The document this step's record starts life with. `title` is what a person reads. */
1992
- title: string;
1993
- /** Anything else the subject Table's Fields take. */
1994
- data?: Record<string, unknown>;
2026
+ interface ChecklistRunnerProps {
2027
+ /** The Table runs are ABOUT. On a record page, the record's own table. */
2028
+ tableId?: Uuid | null | undefined;
2029
+ /** Runs about THIS record a new hire, a matter, a job. */
2030
+ recordId?: Uuid | null | undefined;
2031
+ /** One run, named outright. Overrides the two above. */
2032
+ runId?: Uuid | null | undefined;
2033
+ /** Show runs that have been closed too. The default is what is still open. */
2034
+ includeClosed?: boolean | undefined;
2035
+ /** Offer the templates that could be started here. On by default with a record. */
2036
+ offerToStart?: boolean | undefined;
2037
+ className?: string | undefined;
1995
2038
  }
2039
+ declare function ChecklistRunner({ tableId, recordId, runId, includeClosed, offerToStart, className, }: ChecklistRunnerProps): react.JSX.Element;
1996
2040
  /**
1997
- * The package-owned Table a checklist RUN is recorded in. The steps are records
1998
- * in the subject Table — this holds only which template was instantiated and
1999
- * when, so re-opening a checklist finds the same steps rather than making new
2000
- * ones. (Running the same checklist twice on purpose is two rows here, which is
2001
- * the correct answer: they are two runs.)
2041
+ * ONE STEP, AND WHAT IT ASKS FOR.
2042
+ *
2043
+ * `may_complete` and `refusal` come from the store. A step that cannot be
2044
+ * finished carries the store's own sentence and NO button never a button that
2045
+ * fails when clicked, and never a button that quietly does nothing.
2002
2046
  */
2003
- declare const CHECKLIST_TABLE: SystemTableSpec;
2004
- interface ChecklistRunnerProps {
2005
- /** The Table the steps live in — normally the same Table the checklist is about. */
2047
+ declare function StepRow({ step, busy, onComplete, className, }: {
2048
+ step: ChecklistRunStep;
2049
+ busy: boolean;
2050
+ onComplete: (evidence: Record<string, unknown>) => void;
2051
+ className?: string | undefined;
2052
+ }): react.JSX.Element;
2053
+ /**
2054
+ * THE STEPS THAT ARE MINE, across every checklist running in this organization.
2055
+ *
2056
+ * A checklist step is a work item in the ONE work layer, so it is already in
2057
+ * `custom.work_inbox` — this is that same work, asked through the door that also
2058
+ * knows what the step ASKS FOR and whether it may be finished. The inbox renders
2059
+ * it as a group so a person finishes a step where it reached them, instead of
2060
+ * being sent to find the checklist it came from.
2061
+ */
2062
+ declare function useMyChecklistSteps(limit?: number): {
2063
+ steps: Array<ChecklistRunStep & {
2064
+ run_id: Uuid;
2065
+ run_name: string;
2066
+ }>;
2067
+ loading: boolean;
2068
+ error: RecordsError | null;
2069
+ refresh: () => Promise<void>;
2070
+ };
2071
+ /** The inbox's checklist group. Absent entirely when this person has no steps. */
2072
+ declare function MyChecklistSteps({ className }: {
2073
+ className?: string | undefined;
2074
+ }): react.JSX.Element | null;
2075
+ interface ChecklistsPanelProps {
2006
2076
  tableId: Uuid;
2007
- /** The agent's half. Each spec not already run is instantiated once. */
2008
- seed?: ChecklistSpec[] | undefined;
2077
+ /** Open the record a run is about. */
2078
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2009
2079
  className?: string | undefined;
2010
2080
  }
2011
- declare function ChecklistRunner({ tableId, seed, className }: ChecklistRunnerProps): react.JSX.Element;
2081
+ /**
2082
+ * ONE TABLE'S CHECKLISTS — the templates written for it, the runs of them, and
2083
+ * how far each has got. It is a rail on the table's own page beside its forms
2084
+ * and its inbox, never a Checklists area of the app somebody has to find.
2085
+ */
2086
+ declare function ChecklistsPanel({ tableId, onOpenRecord, className }: ChecklistsPanelProps): react.JSX.Element;
2087
+ /**
2088
+ * A CHECKLIST, AS PLAIN ROWS. One row per step: what it is called, whose it is,
2089
+ * how many days in, what it waits for, and what it asks for.
2090
+ *
2091
+ * THE STORE JUDGES IT, NOT THIS SCREEN. `custom.checklist_refusal` is pure — it
2092
+ * reads no row and writes nothing — so it is asked on every change and the
2093
+ * sentence arrives BEFORE the save rather than after it. There is no second
2094
+ * validator here: a rule written twice is a rule that will disagree with itself.
2095
+ */
2096
+ declare function ChecklistTemplateEditor({ aboutTableId, templateId, onDone, className, }: {
2097
+ aboutTableId: Uuid;
2098
+ templateId?: Uuid | null | undefined;
2099
+ onDone?: (() => void) | undefined;
2100
+ className?: string | undefined;
2101
+ }): react.JSX.Element;
2012
2102
 
2013
2103
  interface BookingSlotsProps {
2014
- /** The Table holds are taken against, and the Table a booking lands in. */
2015
- tableId: Uuid;
2016
- /** The form a person fills in once they hold a slot. Its `subject` is the Table. */
2017
- form: FormSpec;
2018
- /** Availability — the organization's opinion, with a default rather than a question. */
2019
- availability?: {
2020
- /** First hour offered, 24h. Default 9. */
2021
- fromHour?: number;
2022
- /** Last hour offered, exclusive. Default 17. */
2023
- toHour?: number;
2024
- /** Minutes per slot. Default 60. */
2025
- everyMinutes?: number;
2026
- /** How many days ahead to offer. Default 5. */
2027
- days?: number;
2028
- };
2029
- /** How long a hold lasts before the store lets the slot go. Default 15 minutes. */
2030
- holdFor?: string;
2031
- /** `null` when the answer was HELD rather than written — see the runner's own note. */
2032
- onBooked?: ((recordId: Uuid | null) => void) | undefined;
2104
+ /**
2105
+ * One Table's booking pages. Omitted — on the Records home — it is every
2106
+ * booking page in this organization, which is the same door asked the wider
2107
+ * question, never a second list.
2108
+ */
2109
+ tableId?: Uuid | null | undefined;
2033
2110
  className?: string | undefined;
2034
2111
  }
2035
- declare function BookingSlots({ tableId, form, availability, holdFor, onBooked, className, }: BookingSlotsProps): react.JSX.Element;
2112
+ declare function BookingSlots({ tableId, className }: BookingSlotsProps): react.JSX.Element | null;
2113
+ /**
2114
+ * The next appointment, as a sentence. `next_at` is the store's answer over
2115
+ * every appointment this person may see — not over the page this screen loaded.
2116
+ */
2117
+ declare function nextInWords(page: Pick<BookingSummary, "next_at" | "timezone" | "state">): string;
2036
2118
 
2037
2119
  /** The three things a phone captures. Each one writes the SAME kind of record. */
2038
2120
  declare const CAPTURE_MODES: readonly ["reading", "photo", "voice"];
@@ -2404,4 +2486,18 @@ declare function useCanShare(): boolean;
2404
2486
  declare function shareUnavailableReason(): string;
2405
2487
  declare function ShareControl({ kind, organizationId, subjectId, name, may, size, variant, className, }: ShareControlProps): ReactNode;
2406
2488
 
2407
- export { ACTION_KINDS, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_TABLE, type Capability, type CaptureMode, type CaptureQueuePort, CaptureRun, type CaptureRunProps, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartConfig, ChartFrame, type ChartKind, ChartLegendContent, type ChartSpec, ChartTooltipContent, ChecklistRunner, type ChecklistRunnerProps, type ChecklistSpec, type ChecklistStepSpec, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, 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 GridGrouping, type GridPresentation, 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, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, NOT_ANSWERED_YET, NO_CHAT_REASON, NO_COLUMNS_WHY, NO_COLUMNS_YET, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_OPEN_RECORDS_REASON, NO_REASK_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OpenRecordsAsk, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalCardView, type PortalCardViewProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, type ReaskContext, 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, SubscriptionsPanel, type SubscriptionsPanelProps, 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_NOT_SAVED_YET, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, type WhatYouMayDo, addFields, blockFromSpec, bodyForReading, bodyFromKeys, cellState, colorFromTheValue, columnForField, controlFor, currencyCodeFor, dashboardDeclareArgs, dashboardFromSummary, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldDeclarationFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDeclareArgs, formFromSummary, formPresentation, formatForField, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isMachineIdentity, isPlainFieldType, isSignatureField, keyFor, laneFor, machineIdentityIn, memberName, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, recordName, recordsDataSource, refusalForAPerson, refusalLineForAPerson, renderValue, revokeConsequence, rowName, scalarText, shareUnavailableReason, specFromBlock, storeDecidesRights, submissionStamp, tableName, tableRightsAt, tokenFor, useCanShare, useEmbedHandshake, useEnrichCells, useGridEditing, useMeasuredWidth, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing, whatYouMayDo, whatYouMayDoWithTable };
2489
+ interface PipelineBoardProps {
2490
+ tableId: Uuid;
2491
+ /** The rows the view holds — the SAME rows every other layout of this view draws. */
2492
+ rows: ReadRow$1[];
2493
+ /** A number column to total under each heading. The person picks it; nothing is guessed. */
2494
+ measure?: string | null;
2495
+ onMeasureChange?: ((key: string | null) => void) | undefined;
2496
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2497
+ /** Called after a move lands, so the host re-reads the rows it owns. */
2498
+ onMoved?: (() => void) | undefined;
2499
+ className?: string | undefined;
2500
+ }
2501
+ declare function PipelineBoard({ tableId, rows, measure, onMeasureChange, onOpenRecord, onMoved, className, }: PipelineBoardProps): react.JSX.Element;
2502
+
2503
+ export { ACTION_KINDS, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, type Capability, type CaptureMode, type CaptureQueuePort, CaptureRun, type CaptureRunProps, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartConfig, ChartFrame, type ChartKind, ChartLegendContent, type ChartSpec, ChartTooltipContent, ChecklistRunner, type ChecklistRunnerProps, ChecklistTemplateEditor, ChecklistsPanel, type ChecklistsPanelProps, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, 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 GridGrouping, type GridPresentation, 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, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, MyChecklistSteps, NOT_ANSWERED_YET, NO_CHAT_REASON, NO_COLUMNS_WHY, NO_COLUMNS_YET, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_OPEN_RECORDS_REASON, NO_REASK_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OpenRecordsAsk, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, PipelineBoard, type PipelineBoardProps, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalCardView, type PortalCardViewProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, type ReaskContext, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, RecordValue, RecordsMount, type RecordsMountProps, type RecordsUiHost, RecordsUiProvider, RefusalLine, RefusalNotice, type RelationFieldType, RelationPicker, type RelationPickerProps, SERIES_COLORS, STORE_DECIDES_REASON, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, SignBlock, type SignBlockProps, StepRow, SubscriptionsPanel, type SubscriptionsPanelProps, 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_NOT_SAVED_YET, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, type WhatYouMayDo, addFields, blockFromSpec, bodyForReading, bodyFromKeys, cellState, colorFromTheValue, columnForField, controlFor, currencyCodeFor, dashboardDeclareArgs, dashboardFromSummary, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldDeclarationFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDeclareArgs, formFromSummary, formPresentation, formatForField, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isMachineIdentity, isPlainFieldType, isRelationFieldType, isSignatureField, keyFor, laneFor, machineIdentityIn, memberName, nextInWords, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, recordName, recordsDataSource, refusalForAPerson, refusalLineForAPerson, renderValue, revokeConsequence, rowName, scalarText, shareUnavailableReason, specFromBlock, storeDecidesRights, submissionStamp, tableName, tableRightsAt, tokenFor, useCanShare, useEmbedHandshake, useEnrichCells, useGridEditing, useMeasuredWidth, useMyChecklistSteps, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing, whatYouMayDo, whatYouMayDoWithTable };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ComponentType, RefObject } from 'react';
3
3
  import * as _ai_matrx_records from '@ai-matrx/records';
4
- import { PermissionLevel, Table, RecordScopeContext, EnrichCell, RecordsError, Uuid as Uuid$1, AggregateFilter, Field, RecordDocument, ReadRow, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, WorkInboxKind, RuleExpression, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, DashboardBlockKind, AggregateBucket, AggregateMeasure, DashboardBlock, DashboardSummary, DocTemplateRow, DocRenderRow, QuietHours, DashboardBlockResult, CaptureSheetFace, CaptureField, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource, FieldTypeWord } from '@ai-matrx/records';
4
+ import { PermissionLevel, Table, RecordScopeContext, EnrichCell, RecordsError, Uuid as Uuid$1, AggregateFilter, Field, RecordDocument, ReadRow, WriteConflict, ParityFieldType, NewFieldDeclaration, ValueEnvelope, WorkInboxKind, RuleExpression, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, DashboardBlockKind, AggregateBucket, AggregateMeasure, DashboardBlock, DashboardSummary, DocTemplateRow, DocRenderRow, QuietHours, DashboardBlockResult, ChecklistRunStep, BookingSummary, CaptureSheetFace, CaptureField, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource, FieldTypeWord } from '@ai-matrx/records';
5
5
  import { Uuid, Field as Field$1, ReadRow as ReadRow$1 } from '@ai-matrx/records/react';
6
6
  import { RecordsClient } from '@ai-matrx/records/core';
7
7
  import { FieldFormatConfig } from '@ai-matrx/design-system/field-formats';
@@ -974,15 +974,33 @@ declare function CustomFieldsSection({ entityToken, recordId, title, className,
974
974
 
975
975
  /** The three behaviours that carry no parity type of their own. */
976
976
  type PlainFieldType = "text" | "long_text" | "number";
977
- /** What a person picks in the panel: one of the thirteen, or one of the three. */
978
- type PickableFieldType = ParityFieldType | PlainFieldType;
977
+ /**
978
+ * THE ONE A PERSON COMING FROM AIRTABLE REACHES FOR FIRST, AND IT WAS NOT HERE.
979
+ *
980
+ * The list above offered `member` (a Person) and `attachment` (a File) — the two
981
+ * relations whose target is a Table the PLATFORM keeps — and nothing at all for
982
+ * "this job belongs to that customer". The store has taken it since 2026-09-20
983
+ * (`custom.field_declare` with `type: "relation"` and a `relation_target`), the
984
+ * Field type has named it since the same day, and `editorKindFor` has answered
985
+ * `"relation"` for one since long before that. Only the menu did not offer it,
986
+ * so the guide's section 3 told a person to pick a kind that did not exist.
987
+ *
988
+ * It is NOT a fourteenth parity type. `custom.parity_field_types()` ships
989
+ * thirteen and a relation is a BEHAVIOUR — the same behaviour `member` and
990
+ * `attachment` are made of — so it sits beside the three plain ones as its own
991
+ * word, and `parityTypesWithNoExplanation()` is unaffected by it in both
992
+ * directions: it does not appear there, and it cannot hide a real gap there.
993
+ */
994
+ type RelationFieldType = "relation";
995
+ /** What a person picks in the panel: one of the thirteen, one of the three, or a link. */
996
+ type PickableFieldType = ParityFieldType | PlainFieldType | RelationFieldType;
979
997
  interface FieldTypeChoice {
980
998
  id: PickableFieldType;
981
999
  /** The word on the menu. */
982
1000
  label: string;
983
1001
  /** One line, under the word, saying what it is FOR. Never what it is made of. */
984
1002
  explanation: string;
985
- /** The heading it sits under, so sixteen choices read as four short lists. */
1003
+ /** The heading it sits under, so seventeen choices read as four short lists. */
986
1004
  group: "Words" | "Numbers and dates" | "Choices and people" | "Worked out";
987
1005
  }
988
1006
  declare const FIELD_TYPE_CHOICES: FieldTypeChoice[];
@@ -990,12 +1008,23 @@ declare const FIELD_TYPE_GROUPS: FieldTypeChoice["group"][];
990
1008
  declare function fieldTypeChoice(id: string): FieldTypeChoice | undefined;
991
1009
  /** The three that are a plain behaviour rather than one of the thirteen. */
992
1010
  declare function isPlainFieldType(id: string): id is PlainFieldType;
1011
+ /**
1012
+ * The one that is a relation a person aims themselves. It is neither plain nor
1013
+ * one of the thirteen, so every caller that branched on `isPlainFieldType`
1014
+ * alone has to answer this question too — which is why it is a named function
1015
+ * and not an inline string comparison at four call sites.
1016
+ */
1017
+ declare function isRelationFieldType(id: string): id is RelationFieldType;
993
1018
  /**
994
1019
  * THE GUARD THIS FILE NEEDS, because the list it explains is generated.
995
1020
  *
996
1021
  * Returns the parity types the store ships that nothing here explains. The
997
1022
  * suite asserts it is empty; a fourteenth type would otherwise reach the menu
998
1023
  * with a blank line under it and nobody would notice until a person did.
1024
+ *
1025
+ * `relation` is deliberately NOT one of the thirteen and therefore never
1026
+ * appears in this answer: `PARITY_FIELD_TYPES` is the store's own generated
1027
+ * list and a behaviour that carries no parity type is not in it.
999
1028
  */
1000
1029
  declare function parityTypesWithNoExplanation(): string[];
1001
1030
 
@@ -1034,6 +1063,8 @@ declare function whatIsMissing(state: {
1034
1063
  of: string;
1035
1064
  relations: Field[];
1036
1065
  formulaFields: string[];
1066
+ /** Only a link asks for one, so a caller about any other kind leaves it out. */
1067
+ relationTarget?: string;
1037
1068
  }): string | null;
1038
1069
 
1039
1070
  interface FieldProposalRow {
@@ -1299,6 +1330,12 @@ interface SavedViewSpec {
1299
1330
  layout: ViewLayout;
1300
1331
  /** Kanban: the Field whose value becomes a column. */
1301
1332
  groupField?: string | null;
1333
+ /**
1334
+ * Kanban: a number Field to TOTAL under each column heading. It lives on the VIEW for
1335
+ * the same reason the colours do — two people read one board two ways and neither
1336
+ * reading is a fact about the records.
1337
+ */
1338
+ measure?: string | null;
1302
1339
  /** Calendar: the Field that places a record in the month. */
1303
1340
  dateField?: string | null;
1304
1341
  /** Gallery: the Field shown large on the card. */
@@ -1379,6 +1416,12 @@ interface ViewSwitcherProps {
1379
1416
  */
1380
1417
  onViewChange?: ((patch: Partial<SavedViewSpec>) => void) | undefined;
1381
1418
  onOpenRecord?: ((recordId: Uuid) => void) | undefined;
1419
+ /**
1420
+ * Called after a card moves between columns, so the host re-reads the rows it owns. A
1421
+ * board that moved a card and left the row list alone would show the card in two places
1422
+ * until something else happened to reload.
1423
+ */
1424
+ onMoved?: (() => void) | undefined;
1382
1425
  /** The host's whole-record form, offered by the grid when an empty record is refused. */
1383
1426
  onNewRecordForm?: (() => void) | undefined;
1384
1427
  /** "Who changed this?" from a grid cell — the host opens that column's timeline. */
@@ -1394,7 +1437,7 @@ declare function useViewRecords(view: SavedViewSpec, pageSize?: number): {
1394
1437
  /** Where membership came from, in a sentence. A screen that hides this is hiding the view's meaning. */
1395
1438
  membership: string;
1396
1439
  };
1397
- declare function ViewSwitcher({ view, onLayoutChange, onViewChange, onOpenRecord, onNewRecordForm, onAskWhoChanged, pageSize, className, }: ViewSwitcherProps): react.JSX.Element;
1440
+ declare function ViewSwitcher({ view, onLayoutChange, onViewChange, onOpenRecord, onMoved, onNewRecordForm, onAskWhoChanged, pageSize, className, }: ViewSwitcherProps): react.JSX.Element;
1398
1441
 
1399
1442
  interface ViewBarProps {
1400
1443
  /** The Table whose views these are. */
@@ -1980,59 +2023,98 @@ interface FormRunnerProps {
1980
2023
  */
1981
2024
  declare function FormRunner(props: FormRunnerProps): react.JSX.Element;
1982
2025
 
1983
- /** THE COMPLETE DECLARATIVE SPEC — one object, one `record_write`, a whole checklist. */
1984
- interface ChecklistSpec {
1985
- name: string;
1986
- /** The Table the steps become records in. */
1987
- subject: Uuid;
1988
- steps: ChecklistStepSpec[];
1989
- }
1990
- interface ChecklistStepSpec {
1991
- /** The document this step's record starts life with. `title` is what a person reads. */
1992
- title: string;
1993
- /** Anything else the subject Table's Fields take. */
1994
- data?: Record<string, unknown>;
2026
+ interface ChecklistRunnerProps {
2027
+ /** The Table runs are ABOUT. On a record page, the record's own table. */
2028
+ tableId?: Uuid | null | undefined;
2029
+ /** Runs about THIS record a new hire, a matter, a job. */
2030
+ recordId?: Uuid | null | undefined;
2031
+ /** One run, named outright. Overrides the two above. */
2032
+ runId?: Uuid | null | undefined;
2033
+ /** Show runs that have been closed too. The default is what is still open. */
2034
+ includeClosed?: boolean | undefined;
2035
+ /** Offer the templates that could be started here. On by default with a record. */
2036
+ offerToStart?: boolean | undefined;
2037
+ className?: string | undefined;
1995
2038
  }
2039
+ declare function ChecklistRunner({ tableId, recordId, runId, includeClosed, offerToStart, className, }: ChecklistRunnerProps): react.JSX.Element;
1996
2040
  /**
1997
- * The package-owned Table a checklist RUN is recorded in. The steps are records
1998
- * in the subject Table — this holds only which template was instantiated and
1999
- * when, so re-opening a checklist finds the same steps rather than making new
2000
- * ones. (Running the same checklist twice on purpose is two rows here, which is
2001
- * the correct answer: they are two runs.)
2041
+ * ONE STEP, AND WHAT IT ASKS FOR.
2042
+ *
2043
+ * `may_complete` and `refusal` come from the store. A step that cannot be
2044
+ * finished carries the store's own sentence and NO button never a button that
2045
+ * fails when clicked, and never a button that quietly does nothing.
2002
2046
  */
2003
- declare const CHECKLIST_TABLE: SystemTableSpec;
2004
- interface ChecklistRunnerProps {
2005
- /** The Table the steps live in — normally the same Table the checklist is about. */
2047
+ declare function StepRow({ step, busy, onComplete, className, }: {
2048
+ step: ChecklistRunStep;
2049
+ busy: boolean;
2050
+ onComplete: (evidence: Record<string, unknown>) => void;
2051
+ className?: string | undefined;
2052
+ }): react.JSX.Element;
2053
+ /**
2054
+ * THE STEPS THAT ARE MINE, across every checklist running in this organization.
2055
+ *
2056
+ * A checklist step is a work item in the ONE work layer, so it is already in
2057
+ * `custom.work_inbox` — this is that same work, asked through the door that also
2058
+ * knows what the step ASKS FOR and whether it may be finished. The inbox renders
2059
+ * it as a group so a person finishes a step where it reached them, instead of
2060
+ * being sent to find the checklist it came from.
2061
+ */
2062
+ declare function useMyChecklistSteps(limit?: number): {
2063
+ steps: Array<ChecklistRunStep & {
2064
+ run_id: Uuid;
2065
+ run_name: string;
2066
+ }>;
2067
+ loading: boolean;
2068
+ error: RecordsError | null;
2069
+ refresh: () => Promise<void>;
2070
+ };
2071
+ /** The inbox's checklist group. Absent entirely when this person has no steps. */
2072
+ declare function MyChecklistSteps({ className }: {
2073
+ className?: string | undefined;
2074
+ }): react.JSX.Element | null;
2075
+ interface ChecklistsPanelProps {
2006
2076
  tableId: Uuid;
2007
- /** The agent's half. Each spec not already run is instantiated once. */
2008
- seed?: ChecklistSpec[] | undefined;
2077
+ /** Open the record a run is about. */
2078
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2009
2079
  className?: string | undefined;
2010
2080
  }
2011
- declare function ChecklistRunner({ tableId, seed, className }: ChecklistRunnerProps): react.JSX.Element;
2081
+ /**
2082
+ * ONE TABLE'S CHECKLISTS — the templates written for it, the runs of them, and
2083
+ * how far each has got. It is a rail on the table's own page beside its forms
2084
+ * and its inbox, never a Checklists area of the app somebody has to find.
2085
+ */
2086
+ declare function ChecklistsPanel({ tableId, onOpenRecord, className }: ChecklistsPanelProps): react.JSX.Element;
2087
+ /**
2088
+ * A CHECKLIST, AS PLAIN ROWS. One row per step: what it is called, whose it is,
2089
+ * how many days in, what it waits for, and what it asks for.
2090
+ *
2091
+ * THE STORE JUDGES IT, NOT THIS SCREEN. `custom.checklist_refusal` is pure — it
2092
+ * reads no row and writes nothing — so it is asked on every change and the
2093
+ * sentence arrives BEFORE the save rather than after it. There is no second
2094
+ * validator here: a rule written twice is a rule that will disagree with itself.
2095
+ */
2096
+ declare function ChecklistTemplateEditor({ aboutTableId, templateId, onDone, className, }: {
2097
+ aboutTableId: Uuid;
2098
+ templateId?: Uuid | null | undefined;
2099
+ onDone?: (() => void) | undefined;
2100
+ className?: string | undefined;
2101
+ }): react.JSX.Element;
2012
2102
 
2013
2103
  interface BookingSlotsProps {
2014
- /** The Table holds are taken against, and the Table a booking lands in. */
2015
- tableId: Uuid;
2016
- /** The form a person fills in once they hold a slot. Its `subject` is the Table. */
2017
- form: FormSpec;
2018
- /** Availability — the organization's opinion, with a default rather than a question. */
2019
- availability?: {
2020
- /** First hour offered, 24h. Default 9. */
2021
- fromHour?: number;
2022
- /** Last hour offered, exclusive. Default 17. */
2023
- toHour?: number;
2024
- /** Minutes per slot. Default 60. */
2025
- everyMinutes?: number;
2026
- /** How many days ahead to offer. Default 5. */
2027
- days?: number;
2028
- };
2029
- /** How long a hold lasts before the store lets the slot go. Default 15 minutes. */
2030
- holdFor?: string;
2031
- /** `null` when the answer was HELD rather than written — see the runner's own note. */
2032
- onBooked?: ((recordId: Uuid | null) => void) | undefined;
2104
+ /**
2105
+ * One Table's booking pages. Omitted — on the Records home — it is every
2106
+ * booking page in this organization, which is the same door asked the wider
2107
+ * question, never a second list.
2108
+ */
2109
+ tableId?: Uuid | null | undefined;
2033
2110
  className?: string | undefined;
2034
2111
  }
2035
- declare function BookingSlots({ tableId, form, availability, holdFor, onBooked, className, }: BookingSlotsProps): react.JSX.Element;
2112
+ declare function BookingSlots({ tableId, className }: BookingSlotsProps): react.JSX.Element | null;
2113
+ /**
2114
+ * The next appointment, as a sentence. `next_at` is the store's answer over
2115
+ * every appointment this person may see — not over the page this screen loaded.
2116
+ */
2117
+ declare function nextInWords(page: Pick<BookingSummary, "next_at" | "timezone" | "state">): string;
2036
2118
 
2037
2119
  /** The three things a phone captures. Each one writes the SAME kind of record. */
2038
2120
  declare const CAPTURE_MODES: readonly ["reading", "photo", "voice"];
@@ -2404,4 +2486,18 @@ declare function useCanShare(): boolean;
2404
2486
  declare function shareUnavailableReason(): string;
2405
2487
  declare function ShareControl({ kind, organizationId, subjectId, name, may, size, variant, className, }: ShareControlProps): ReactNode;
2406
2488
 
2407
- export { ACTION_KINDS, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_TABLE, type Capability, type CaptureMode, type CaptureQueuePort, CaptureRun, type CaptureRunProps, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartConfig, ChartFrame, type ChartKind, ChartLegendContent, type ChartSpec, ChartTooltipContent, ChecklistRunner, type ChecklistRunnerProps, type ChecklistSpec, type ChecklistStepSpec, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, 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 GridGrouping, type GridPresentation, 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, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, NOT_ANSWERED_YET, NO_CHAT_REASON, NO_COLUMNS_WHY, NO_COLUMNS_YET, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_OPEN_RECORDS_REASON, NO_REASK_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OpenRecordsAsk, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalCardView, type PortalCardViewProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, type ReaskContext, 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, SubscriptionsPanel, type SubscriptionsPanelProps, 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_NOT_SAVED_YET, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, type WhatYouMayDo, addFields, blockFromSpec, bodyForReading, bodyFromKeys, cellState, colorFromTheValue, columnForField, controlFor, currencyCodeFor, dashboardDeclareArgs, dashboardFromSummary, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldDeclarationFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDeclareArgs, formFromSummary, formPresentation, formatForField, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isMachineIdentity, isPlainFieldType, isSignatureField, keyFor, laneFor, machineIdentityIn, memberName, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, recordName, recordsDataSource, refusalForAPerson, refusalLineForAPerson, renderValue, revokeConsequence, rowName, scalarText, shareUnavailableReason, specFromBlock, storeDecidesRights, submissionStamp, tableName, tableRightsAt, tokenFor, useCanShare, useEmbedHandshake, useEnrichCells, useGridEditing, useMeasuredWidth, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing, whatYouMayDo, whatYouMayDoWithTable };
2489
+ interface PipelineBoardProps {
2490
+ tableId: Uuid;
2491
+ /** The rows the view holds — the SAME rows every other layout of this view draws. */
2492
+ rows: ReadRow$1[];
2493
+ /** A number column to total under each heading. The person picks it; nothing is guessed. */
2494
+ measure?: string | null;
2495
+ onMeasureChange?: ((key: string | null) => void) | undefined;
2496
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2497
+ /** Called after a move lands, so the host re-reads the rows it owns. */
2498
+ onMoved?: (() => void) | undefined;
2499
+ className?: string | undefined;
2500
+ }
2501
+ declare function PipelineBoard({ tableId, rows, measure, onMeasureChange, onOpenRecord, onMoved, className, }: PipelineBoardProps): react.JSX.Element;
2502
+
2503
+ export { ACTION_KINDS, ActionInbox, type ActionInboxProps, type ActionKind, BookingSlots, type BookingSlotsProps, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, type Capability, type CaptureMode, type CaptureQueuePort, CaptureRun, type CaptureRunProps, CaptureSheet, type CaptureSheetProps, type CellAddress, type CellRefusal, type CellState, ChartBlock, type ChartBlockProps, type ChartConfig, ChartFrame, type ChartKind, ChartLegendContent, type ChartSpec, ChartTooltipContent, ChecklistRunner, type ChecklistRunnerProps, ChecklistTemplateEditor, ChecklistsPanel, type ChecklistsPanelProps, CommentThread, type CommentThreadProps, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FIELDS, DEFAULT_VIEW_NAME, DashboardCanvas, type DashboardCanvasProps, type DeclareResult, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, ExportMenu, type ExportMenuProps, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FORM_FLOWS, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, 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 GridGrouping, type GridPresentation, 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, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, MyChecklistSteps, NOT_ANSWERED_YET, NO_CHAT_REASON, NO_COLUMNS_WHY, NO_COLUMNS_YET, NO_ENRICH_REASON, NO_MEMBERS_REASON, NO_OPEN_RECORDS_REASON, NO_REASK_REASON, NO_RIGHTS, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, type NewFieldSpec, type NewTableSpec, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OpenRecordsAsk, type OrganizationMember, PARITY_LABEL, PARITY_MADE_OF, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, PipelineBoard, type PipelineBoardProps, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalCardView, type PortalCardViewProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, type ReaskContext, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, RecordValue, RecordsMount, type RecordsMountProps, type RecordsUiHost, RecordsUiProvider, RefusalLine, RefusalNotice, type RelationFieldType, RelationPicker, type RelationPickerProps, SERIES_COLORS, STORE_DECIDES_REASON, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, SignBlock, type SignBlockProps, StepRow, SubscriptionsPanel, type SubscriptionsPanelProps, 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_NOT_SAVED_YET, VIEW_TABLE, ViewBar, type ViewBarProps, type ViewLayout, type ViewSort, ViewSwitcher, type ViewSwitcherProps, type WhatYouMayDo, addFields, blockFromSpec, bodyForReading, bodyFromKeys, cellState, colorFromTheValue, columnForField, controlFor, currencyCodeFor, dashboardDeclareArgs, dashboardFromSummary, declareTable, editorKindFor, ensureSystemTable, envelopeFor, fieldDeclarationFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, formDeclareArgs, formFromSummary, formPresentation, formatForField, groupLabel, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isId, isMachineIdentity, isPlainFieldType, isRelationFieldType, isSignatureField, keyFor, laneFor, machineIdentityIn, memberName, nextInWords, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, recordName, recordsDataSource, refusalForAPerson, refusalLineForAPerson, renderValue, revokeConsequence, rowName, scalarText, shareUnavailableReason, specFromBlock, storeDecidesRights, submissionStamp, tableName, tableRightsAt, tokenFor, useCanShare, useEmbedHandshake, useEnrichCells, useGridEditing, useMeasuredWidth, useMyChecklistSteps, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useViewRecords, viewDocument, viewFromRecord, viewPatchDocument, whatIsMissing, whatYouMayDo, whatYouMayDoWithTable };