@ai-matrx/records-ui 0.38.0 → 0.40.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
@@ -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. */
@@ -2404,4 +2447,18 @@ declare function useCanShare(): boolean;
2404
2447
  declare function shareUnavailableReason(): string;
2405
2448
  declare function ShareControl({ kind, organizationId, subjectId, name, may, size, variant, className, }: ShareControlProps): ReactNode;
2406
2449
 
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 };
2450
+ interface PipelineBoardProps {
2451
+ tableId: Uuid;
2452
+ /** The rows the view holds — the SAME rows every other layout of this view draws. */
2453
+ rows: ReadRow$1[];
2454
+ /** A number column to total under each heading. The person picks it; nothing is guessed. */
2455
+ measure?: string | null;
2456
+ onMeasureChange?: ((key: string | null) => void) | undefined;
2457
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2458
+ /** Called after a move lands, so the host re-reads the rows it owns. */
2459
+ onMoved?: (() => void) | undefined;
2460
+ className?: string | undefined;
2461
+ }
2462
+ declare function PipelineBoard({ tableId, rows, measure, onMeasureChange, onOpenRecord, onMoved, className, }: PipelineBoardProps): react.JSX.Element;
2463
+
2464
+ 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, 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, 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, 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 };
package/dist/index.d.ts CHANGED
@@ -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. */
@@ -2404,4 +2447,18 @@ declare function useCanShare(): boolean;
2404
2447
  declare function shareUnavailableReason(): string;
2405
2448
  declare function ShareControl({ kind, organizationId, subjectId, name, may, size, variant, className, }: ShareControlProps): ReactNode;
2406
2449
 
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 };
2450
+ interface PipelineBoardProps {
2451
+ tableId: Uuid;
2452
+ /** The rows the view holds — the SAME rows every other layout of this view draws. */
2453
+ rows: ReadRow$1[];
2454
+ /** A number column to total under each heading. The person picks it; nothing is guessed. */
2455
+ measure?: string | null;
2456
+ onMeasureChange?: ((key: string | null) => void) | undefined;
2457
+ onOpenRecord?: ((recordId: Uuid) => void) | undefined;
2458
+ /** Called after a move lands, so the host re-reads the rows it owns. */
2459
+ onMoved?: (() => void) | undefined;
2460
+ className?: string | undefined;
2461
+ }
2462
+ declare function PipelineBoard({ tableId, rows, measure, onMeasureChange, onOpenRecord, onMoved, className, }: PipelineBoardProps): react.JSX.Element;
2463
+
2464
+ 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, 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, 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, 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 };