@ai-matrx/records-ui 0.93.133 → 0.93.140
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/CHANGELOG.md +65 -1
- package/dist/index.cjs +10580 -6613
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +672 -158
- package/dist/index.d.ts +672 -158
- package/dist/index.js +9965 -5949
- package/dist/index.js.map +1 -1
- package/dist/object-actions.cjs +240 -0
- package/dist/object-actions.cjs.map +1 -0
- package/dist/object-actions.d.cts +2 -0
- package/dist/object-actions.d.ts +2 -0
- package/dist/object-actions.js +218 -0
- package/dist/object-actions.js.map +1 -0
- package/dist/objectActions-BSbblgf-.d.cts +168 -0
- package/dist/objectActions-BSbblgf-.d.ts +168 -0
- package/dist/pickers.cjs +4532 -0
- package/dist/pickers.cjs.map +1 -0
- package/dist/pickers.d.cts +137 -0
- package/dist/pickers.d.ts +137 -0
- package/dist/pickers.js +4559 -0
- package/dist/pickers.js.map +1 -0
- package/dist/table-shape.cjs +2 -1
- package/dist/table-shape.cjs.map +1 -1
- package/dist/table-shape.d.cts +1 -1
- package/dist/table-shape.d.ts +1 -1
- package/dist/table-shape.js +4 -1
- package/dist/table-shape.js.map +1 -1
- package/package.json +27 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,54 +1,20 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ReactNode, ComponentType, RefObject } from 'react';
|
|
2
|
+
import { ReactNode, KeyboardEvent, ReactElement, ComponentType, RefObject } from 'react';
|
|
3
3
|
import * as _ai_matrx_records from '@ai-matrx/records';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { RecordScopeContext, EnrichCell, RecordsError, Field, TableDecorations, Uuid as Uuid$1, RowAction, RecordDocument, Table, ReadRow, StoreFilter, PermissionLevel, AggregateFilter, RelationDisplay, WriteConflict, RecordsErrorCode, RecordFilter, RuleExpression, RecordsResult, SavedViewRow, DeclarableFieldKind, NewerFieldKind, ParityFieldType, NewFieldDeclaration, ChoiceRehome, FieldOptionEdit, StoredRecord, ChoiceNudge, HiddenFieldNotice, ValueEnvelope, ChecklistRequirementKind, ContextPolicy, WorkDueState, FieldSensitivity, StageRuleOnFail, SubscriptionCadence, WorkApprovalState, WorkInboxKind, FieldKind, ArchiveLane, ArchivedRow, WorkInboxView, WorkInboxItem, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, MySubscription, DashboardBlockKind, AggregateBucket, AggregateMeasure, AggregateCompare, DashboardTarget, DashboardBlock, DashboardSummary, DocTemplateRow, DocRenderRow, QuietHours, DashboardBlockResult, ChecklistRunStep, BookingSummary, CaptureSheetFace, CaptureField, AnonTokenBinding, RecordsConfig, RecordsActor, RecordsDataSource, HistoryActor, FieldHistoryEntry, DrillDefinition, DrillSource } from '@ai-matrx/records';
|
|
5
|
+
import { ReversibleAnnouncement } from '@ai-matrx/kit/reversible';
|
|
6
|
+
import { W as WhatYouMayDo, O as ObjectAction } from './objectActions-BSbblgf-.cjs';
|
|
7
|
+
export { A as ACTION_CHECKING_ACCESS_REASON, a as ACTION_NOT_HERE_REASON, b as ACTION_NO_ACCESS_REASON, c as ACTION_PLATFORM_TABLE_REASON, B as BuiltOnDestination, C as Capability, D as DEFAULT_ACTION_ORIGIN, K as KERNEL_REASON, L as LEVEL_WORD, N as NOT_ANSWERED_YET, d as OBJECT_ACTION_GROUPS, e as ObjectActionDropdownEntry, f as ObjectActionGroup, g as ObjectActionGroupDef, h as ObjectActionIcon, i as ObjectActionSection, T as TableActionHost, j as TableActionSubject, k as TableActionsInput, l as dropdownActionIds, m as groupObjectActions, n as levelNeededFor, r as rightsReason, t as tableActions, o as tableLink, p as toDropdownEntries, w as whatYouMayDo, q as whatYouMayDoWithTable, s as withExtensions } from './objectActions-BSbblgf-.cjs';
|
|
8
|
+
import { Uuid, Field as Field$1, ReadRow as ReadRow$1, StoreFilter as StoreFilter$1, useRecordsClient } from '@ai-matrx/records/react';
|
|
9
|
+
import { TableStyle, GroupAggregateSpec, GroupOrder, ChoiceColorLookup, MatrxTableCardProps, StyleColor, MatrxDrillDimension, MatrxDrillMeasure, MatrxDrillFilter, MatrxDrillQuestion, MatrxDataTableDrillConfig, MatrxDrillAnswers } from '@ai-matrx/design-system/data-table';
|
|
7
10
|
import { FieldFormatConfig } from '@ai-matrx/design-system/field-formats';
|
|
8
11
|
import { RecordsClient, ParsedImport } from '@ai-matrx/records/core';
|
|
9
12
|
export { DEFAULT_FIELDS, DeclareResult, NewFieldSpec, NewTableSpec, addFields, declareTable, fieldDeclarationFor, tokenFor } from '@ai-matrx/records/core';
|
|
10
13
|
import { GuessedFieldType, TableShape } from './table-shape.cjs';
|
|
11
14
|
export { ColumnGuess, FEWEST_KEY_VALUE_PAIRS, FEWEST_LIST_ITEMS, TableShapeKind, TableShapeSplit, cellWords, guessColumn, hasTableShape, parseDelimited, readTableShape, readTableShapes, shapeOfGrid, shapeOfValue, shapeTextOfNode } from './table-shape.cjs';
|
|
15
|
+
export { ColumnValuesEditor, ColumnValuesEditorProps, ColumnValuesText, DATA_BINDING_MISSING, DATA_BINDING_SHAPES, DataBinding, DataBindingPicker, DataBindingPickerProps, DataBindingShape, RecordNameText, RecordPicker, RecordPickerProps, TableAnywhere, TableNameText, TablePicker, TablePickerProps, TableScope, TableScopeProps, TablesAnywhere, bindingPlaceholdersFor, defaultBindingTemplate, emptyDataBinding, isCompleteDataBinding, isDataBinding, useTablesAnywhere } from './pickers.cjs';
|
|
12
16
|
import { MatrxColumnDef } from '@ai-matrx/design-system/data-table/types';
|
|
13
17
|
|
|
14
|
-
/** The six things a person does to a record or a table, as the screens offer them. */
|
|
15
|
-
type Capability = "read" | "comment" | "write" | "remove" | "share" | "structure";
|
|
16
|
-
interface WhatYouMayDo {
|
|
17
|
-
/** The word the store answered, or null when it answered nothing. */
|
|
18
|
-
level: PermissionLevel | null;
|
|
19
|
-
/**
|
|
20
|
-
* Whether the store has ANSWERED yet. `false` is a third state and not a
|
|
21
|
-
* refusal: a screen that drew "you may not" while the answer was in flight
|
|
22
|
-
* would blink every control off on every reload, which is its own lie.
|
|
23
|
-
*/
|
|
24
|
-
known: boolean;
|
|
25
|
-
read: boolean;
|
|
26
|
-
comment: boolean;
|
|
27
|
-
write: boolean;
|
|
28
|
-
remove: boolean;
|
|
29
|
-
share: boolean;
|
|
30
|
-
structure: boolean;
|
|
31
|
-
/** Why this person may not do that, in one sentence naming the way in. */
|
|
32
|
-
why: (what: Capability) => string;
|
|
33
|
-
}
|
|
34
|
-
/** What each rung of the ladder is called where a person reads it. */
|
|
35
|
-
declare const LEVEL_WORD: Record<PermissionLevel, string>;
|
|
36
|
-
/**
|
|
37
|
-
* WHAT ONE LEVEL LETS A PERSON DO. `level` null and `known` true means the
|
|
38
|
-
* store said "nothing" — a real answer. `known` false means it has not said.
|
|
39
|
-
*/
|
|
40
|
-
declare function whatYouMayDo(level: PermissionLevel | null, known?: boolean): WhatYouMayDo;
|
|
41
|
-
/** Nothing offered, because nothing is known yet. */
|
|
42
|
-
declare const NOT_ANSWERED_YET: WhatYouMayDo;
|
|
43
|
-
/**
|
|
44
|
-
* REC-27. The nine Tables the platform ships are not administered from a
|
|
45
|
-
* person's screen whatever level they hold on them — so the structure controls
|
|
46
|
-
* are absent for a kernel Table and say why, and everything else follows the
|
|
47
|
-
* level as usual.
|
|
48
|
-
*/
|
|
49
|
-
declare const KERNEL_REASON: string;
|
|
50
|
-
declare function whatYouMayDoWithTable(table: Table | null | undefined, level: PermissionLevel | null, known: boolean): WhatYouMayDo;
|
|
51
|
-
|
|
52
18
|
/** One named piece of grounding, shaped the way the platform's context slice takes them. */
|
|
53
19
|
interface RecordChatEntry {
|
|
54
20
|
key: string;
|
|
@@ -721,6 +687,15 @@ interface RecordsUiHost {
|
|
|
721
687
|
run: () => void;
|
|
722
688
|
}) => void;
|
|
723
689
|
error: (message: string) => void;
|
|
690
|
+
/**
|
|
691
|
+
* OPTIONAL. THE REVERSIBLE ACTION (`@ai-matrx/kit/reversible`): something this package did
|
|
692
|
+
* that can be undone — a table archived — handed to the host's one announcer, which acts it
|
|
693
|
+
* out at the person's level (taught the first time, a long Undo toast the next few, an ordinary
|
|
694
|
+
* one after) and answers ⌘Z. The package says WHAT happened and HOW to undo it; where the
|
|
695
|
+
* thing went (`foundAt`) is the host's routes. Unbound, the package falls back to `success`
|
|
696
|
+
* with an Undo button.
|
|
697
|
+
*/
|
|
698
|
+
reversible?: (announcement: ReversibleAnnouncement) => void;
|
|
724
699
|
};
|
|
725
700
|
/** Density for every table this package renders. */
|
|
726
701
|
density?: "condensed" | "normal" | "spacious";
|
|
@@ -1450,11 +1425,13 @@ interface Options {
|
|
|
1450
1425
|
* A CELL THE STORE ACCEPTED, with what it held before and what it holds now (merge tranche 6d):
|
|
1451
1426
|
* the merged grid's undo pushes one step per accepted cell. Unbound, nothing is told.
|
|
1452
1427
|
*/
|
|
1428
|
+
/** One cell the store took: its value before and after, and the record version that write made. */
|
|
1453
1429
|
onWritten?: ((write: {
|
|
1454
1430
|
rowId: Uuid$1;
|
|
1455
1431
|
key: string;
|
|
1456
1432
|
before: unknown;
|
|
1457
1433
|
after: unknown;
|
|
1434
|
+
version?: number;
|
|
1458
1435
|
}) => void) | undefined;
|
|
1459
1436
|
/**
|
|
1460
1437
|
* THE GRID GETS ITS KEYS BACK (merged-grid review 2026-09-26, A1). Bound, an editor that closes
|
|
@@ -1563,8 +1540,101 @@ declare function refusalOr(error: RecordsError | null | undefined, code: Records
|
|
|
1563
1540
|
*/
|
|
1564
1541
|
declare function asRefusal(thrown: unknown, sentence: string, remedy?: string | null, code?: RecordsErrorCode): RecordsError;
|
|
1565
1542
|
|
|
1566
|
-
/**
|
|
1567
|
-
|
|
1543
|
+
/** Every surface a saved view is drawn by. `sheet` is the spreadsheet surface (G-lanes). */
|
|
1544
|
+
type ViewKeyLayout = "grid" | "kanban" | "calendar" | "gallery" | "sheet" | "timeline";
|
|
1545
|
+
/**
|
|
1546
|
+
* 🚩 THE ONE SWITCH FOR THE TIMELINE'S STORE KEYS (lane VIEWS-AND-FIELDS, sublane TL).
|
|
1547
|
+
*
|
|
1548
|
+
* `vk_a_calendar_keeps_where_a_record_ends_and_a_timeline_is_a_view.sql` (sublane VK) teaches
|
|
1549
|
+
* `custom.view_keys()` the layout `timeline`, the keys `start_field` and `end_field` (calendar +
|
|
1550
|
+
* timeline), and `group_field` for the timeline. Until that migration is on production this stays
|
|
1551
|
+
* `false`, and:
|
|
1552
|
+
* · `timeline` is not a layout the store keeps (`STORE_KEPT_LAYOUTS`), so it is drawn for the visit;
|
|
1553
|
+
* · `start_field` / `end_field` are held for the visit, never sent (`viewSettingsPatch`), and the
|
|
1554
|
+
* Start also rides `date_field`, which the store already keeps;
|
|
1555
|
+
* · the timeline's toolbar says "Kept for this visit only".
|
|
1556
|
+
* Flipped to `true`, VIEW_KEYS below mirrors the migrated registry row for row (the live walk
|
|
1557
|
+
* compares them) and every one of those is kept on the view.
|
|
1558
|
+
*/
|
|
1559
|
+
declare const STORE_KEEPS_TIMELINE = true;
|
|
1560
|
+
/** Who may write a key: anyone who may save the view, an input the door rewrites, or the server only. */
|
|
1561
|
+
type ViewKeyWriter = "caller" | "input" | "server";
|
|
1562
|
+
interface ViewKeyDeclaration {
|
|
1563
|
+
/** Where it lives in `platform.saved_view.definition` (dotted under `presentation`). */
|
|
1564
|
+
path: string;
|
|
1565
|
+
/** What the store's guard checks (`custom._view_key_value`). */
|
|
1566
|
+
shape: string;
|
|
1567
|
+
/** The layouts that read it. */
|
|
1568
|
+
layouts: readonly ViewKeyLayout[];
|
|
1569
|
+
writer: ViewKeyWriter;
|
|
1570
|
+
}
|
|
1571
|
+
/**
|
|
1572
|
+
* THE REGISTRY, as `custom.view_keys()` declares it (uichamp_s1_a_view_keeps_every_setting_it_is_given.sql).
|
|
1573
|
+
* Order and content are compared with the store by the live walk.
|
|
1574
|
+
*/
|
|
1575
|
+
declare const VIEW_KEYS: readonly ViewKeyDeclaration[];
|
|
1576
|
+
/**
|
|
1577
|
+
* THE LAYOUTS THE STORE KEEPS ON A VIEW. `custom.view_keys()` judges a view's `layout` against its
|
|
1578
|
+
* own list (grid, kanban, calendar, gallery, sheet) and refuses any other word by name. A layout this
|
|
1579
|
+
* package draws before the store keeps it — the timeline, 2026-10-02 — is never sent as a view's or a
|
|
1580
|
+
* look's layout (`viewSettingsPatch`, `viewDocument`): it is drawn for this visit and says so. When the
|
|
1581
|
+
* store's registry admits it, add it here and nothing else changes.
|
|
1582
|
+
*/
|
|
1583
|
+
declare const STORE_KEPT_LAYOUTS: readonly string[];
|
|
1584
|
+
/** Whether the store keeps this layout on a saved view. */
|
|
1585
|
+
declare function storeKeepsLayout(layout: string): boolean;
|
|
1586
|
+
/** The keys one layout reads, by path. */
|
|
1587
|
+
declare function viewKeysFor(layout: ViewKeyLayout): string[];
|
|
1588
|
+
/** One sort clause: a Field key and a direction. */
|
|
1589
|
+
interface ViewSortKey {
|
|
1590
|
+
field: string;
|
|
1591
|
+
direction: "asc" | "desc";
|
|
1592
|
+
}
|
|
1593
|
+
/**
|
|
1594
|
+
* EVERY DECLARED KEY OF A VIEW, TYPED. Absent keys are `null` / empty, never guessed.
|
|
1595
|
+
* `presentation` is the parsed look (colour field, pinned fields, row height, grouping with its
|
|
1596
|
+
* sub-groups and shut sections, hidden fields, gallery size, summaries).
|
|
1597
|
+
*/
|
|
1598
|
+
interface ViewSettings {
|
|
1599
|
+
layout: "grid" | "kanban" | "calendar" | "gallery";
|
|
1600
|
+
filters: RecordFilter | null;
|
|
1601
|
+
where: RuleExpression | null;
|
|
1602
|
+
groupField: string | null;
|
|
1603
|
+
swimlaneField: string | null;
|
|
1604
|
+
collapsedColumns: string[];
|
|
1605
|
+
measure: string | null;
|
|
1606
|
+
dateField: string | null;
|
|
1607
|
+
/** Timeline: where a record's bar starts (`start_field`). */
|
|
1608
|
+
startField: string | null;
|
|
1609
|
+
/** Calendar and timeline: where a record ends (`end_field`). */
|
|
1610
|
+
endField: string | null;
|
|
1611
|
+
imageField: string | null;
|
|
1612
|
+
sorts: ViewSortKey[];
|
|
1613
|
+
ruleId: string | null;
|
|
1614
|
+
isDefault: boolean;
|
|
1615
|
+
presentation: GridPresentation;
|
|
1616
|
+
movedFrom: Record<string, unknown> | null;
|
|
1617
|
+
}
|
|
1618
|
+
/** THE READER. A stored `definition` (and the row's flat `filters`) in, every declared key out. */
|
|
1619
|
+
declare function viewSettings(definition: Record<string, unknown> | null | undefined, rowFilters?: RecordFilter | null): ViewSettings;
|
|
1620
|
+
/** The settings as the spec names them — what `viewSettingsPatch` takes. */
|
|
1621
|
+
type ViewSettingsPatch = Partial<Omit<ViewSettings, "movedFrom" | "layout">> & {
|
|
1622
|
+
/** Any layout the package draws; one the store does not keep is not sent. */
|
|
1623
|
+
layout?: string;
|
|
1624
|
+
};
|
|
1625
|
+
/**
|
|
1626
|
+
* THE KEYS ONE LAYOUT READS, and nothing else. A layout that does not use a key never sees it:
|
|
1627
|
+
* a calendar is not told the board's swimlanes, a board is not told the grid's pinned fields.
|
|
1628
|
+
*/
|
|
1629
|
+
declare function viewSettingsFor(settings: ViewSettings, layout: ViewKeyLayout): Partial<ViewSettings>;
|
|
1630
|
+
/**
|
|
1631
|
+
* THE WRITER'S SHAPE. Only the keys a press changed; a cleared Field is `null` (the door removes
|
|
1632
|
+
* it); lists are sent whole. `presentation` is sent whole because the door judges it as one key.
|
|
1633
|
+
*/
|
|
1634
|
+
declare function viewSettingsPatch(patch: ViewSettingsPatch): Record<string, unknown>;
|
|
1635
|
+
|
|
1636
|
+
/** The ways one saved view can be looked at (SCR-6; the timeline, lane VIEWS-AND-FIELDS TL). */
|
|
1637
|
+
declare const VIEW_LAYOUTS: readonly ["grid", "kanban", "calendar", "gallery", "timeline"];
|
|
1568
1638
|
type ViewLayout = (typeof VIEW_LAYOUTS)[number];
|
|
1569
1639
|
declare const LAYOUT_LABEL: Record<ViewLayout, string>;
|
|
1570
1640
|
/**
|
|
@@ -1587,8 +1657,9 @@ declare const LAYOUT_LABEL: Record<ViewLayout, string>;
|
|
|
1587
1657
|
* · calendar a DATE column (it places each record on a day). Blocking.
|
|
1588
1658
|
* · gallery a FILE column for the card's picture. NOT blocking: the cards draw without one,
|
|
1589
1659
|
* so the offer sits above them instead of in place of them.
|
|
1660
|
+
* · timeline a DATE column each bar starts on (the calendar's `dateField`). Blocking.
|
|
1590
1661
|
* `PAGE_VIEWS`' two extra values (dashboards, archived) and the host's layouts (the Sheet) read
|
|
1591
|
-
* nothing a table can lack. This package ships no
|
|
1662
|
+
* nothing a table can lack. This package ships no map layout; the day it does,
|
|
1592
1663
|
* `Record<ViewLayout, …>` below refuses to compile until the new layout names what it needs.
|
|
1593
1664
|
*/
|
|
1594
1665
|
type ViewNeedKind = "choice" | "date" | "file";
|
|
@@ -1656,6 +1727,10 @@ interface SavedViewSpec {
|
|
|
1656
1727
|
collapsedColumns?: string[];
|
|
1657
1728
|
/** Calendar: the Field that places a record in the month. */
|
|
1658
1729
|
dateField?: string | null;
|
|
1730
|
+
/** Timeline: the Field a record's bar starts on (`start_field`). */
|
|
1731
|
+
startField?: string | null;
|
|
1732
|
+
/** Calendar and timeline: the Field a record ends on (`end_field`). */
|
|
1733
|
+
endField?: string | null;
|
|
1659
1734
|
/** Gallery: the Field shown large on the card. */
|
|
1660
1735
|
imageField?: string | null;
|
|
1661
1736
|
sorts?: ViewSort[];
|
|
@@ -1808,7 +1883,7 @@ declare const LAYOUT_FIELD_KIND: Record<ViewLayout, ViewNeedKind | null>;
|
|
|
1808
1883
|
* exists, and never a per-table screen. Every Table inherits it the moment it
|
|
1809
1884
|
* is in this list.
|
|
1810
1885
|
*/
|
|
1811
|
-
declare const PAGE_VIEWS: readonly ["grid", "kanban", "calendar", "gallery", "dashboards", "archived"];
|
|
1886
|
+
declare const PAGE_VIEWS: readonly ["grid", "kanban", "calendar", "gallery", "timeline", "dashboards", "archived"];
|
|
1812
1887
|
type PageView = (typeof PAGE_VIEWS)[number];
|
|
1813
1888
|
declare const PAGE_VIEW_LABEL: Record<PageView, string>;
|
|
1814
1889
|
/**
|
|
@@ -2260,12 +2335,27 @@ interface CustomFieldsSectionProps {
|
|
|
2260
2335
|
* it returns is called on unmount. The door reads live state on every call.
|
|
2261
2336
|
*/
|
|
2262
2337
|
agentDoor?: ((door: CustomFieldsAgentDoor) => () => void) | undefined;
|
|
2338
|
+
/**
|
|
2339
|
+
* T1.2 (Doctrine R8): a person who may not change this table's shape makes her own table
|
|
2340
|
+
* instead. The host knows where tables are made; without it the offer is absent.
|
|
2341
|
+
*/
|
|
2342
|
+
onMakeOwnTable?: (() => void) | undefined;
|
|
2343
|
+
/**
|
|
2344
|
+
* The name this page gives its records ("Contact"), when the registry's label is not the word a
|
|
2345
|
+
* person reads here. Used in the editor's header and in place of the registry's label inside the
|
|
2346
|
+
* store's sentence.
|
|
2347
|
+
*/
|
|
2348
|
+
entityLabel?: string | undefined;
|
|
2263
2349
|
}
|
|
2264
2350
|
/** One field an agent (or anyone) asks the section to add. */
|
|
2265
2351
|
interface CustomFieldAddRequest {
|
|
2266
2352
|
label: string;
|
|
2267
2353
|
/** One of `ADDABLE_TYPES[].value`. Defaults to `text`. */
|
|
2268
2354
|
type?: string | undefined;
|
|
2355
|
+
/** A Choice's choices, one per entry. A Choice may start with none. */
|
|
2356
|
+
options?: string[] | undefined;
|
|
2357
|
+
/** For "Points at another record": the id of the table it points at. */
|
|
2358
|
+
relation_target?: string | undefined;
|
|
2269
2359
|
}
|
|
2270
2360
|
type CustomFieldAddResult = {
|
|
2271
2361
|
ok: true;
|
|
@@ -2292,6 +2382,7 @@ interface CustomFieldsAgentState {
|
|
|
2292
2382
|
label: string;
|
|
2293
2383
|
type: string;
|
|
2294
2384
|
value?: unknown;
|
|
2385
|
+
withheld?: string;
|
|
2295
2386
|
}>;
|
|
2296
2387
|
types: ReadonlyArray<{
|
|
2297
2388
|
value: string;
|
|
@@ -2330,8 +2421,20 @@ interface CustomFieldsAgentDoor {
|
|
|
2330
2421
|
/** Writes this record's values in ONE `custom.entity_value_write` (a key left out is left alone). */
|
|
2331
2422
|
setValues: (values: CustomFieldValuesRequest) => Promise<CustomFieldSetResult>;
|
|
2332
2423
|
}
|
|
2424
|
+
/**
|
|
2425
|
+
* WHAT A PERSON CAN ADD FROM A RECORD PAGE: EVERYTHING A TABLE'S COLUMN CAN BE.
|
|
2426
|
+
*
|
|
2427
|
+
* 🚨 G3 — ONE PALETTE (lane 7 STANDARD-TABLES, wave 1). This used to be a hand-kept list of
|
|
2428
|
+
* eleven types (`ADDABLE_TYPE_IDS`) "that need nothing more than a name", so a CRM contact could
|
|
2429
|
+
* not get a Choice, a Yes / no or a link to another record, and none of the column's governance —
|
|
2430
|
+
* while `custom.entity_field_declare` resolves its spec through the very `custom._field_document_for`
|
|
2431
|
+
* a custom table's column goes through. A standard table and a custom table are one primitive, so
|
|
2432
|
+
* the record page opens the table's own `FieldEditor` and offers `fieldTypes.ts`'s pickable set,
|
|
2433
|
+
* nothing more and nothing less. `a-record-page-adds-a-field-with-the-tables-own-palette.test.tsx`
|
|
2434
|
+
* fails the moment this list and that set differ.
|
|
2435
|
+
*/
|
|
2333
2436
|
declare const ADDABLE_TYPES: {
|
|
2334
|
-
value:
|
|
2437
|
+
value: string;
|
|
2335
2438
|
label: string;
|
|
2336
2439
|
}[];
|
|
2337
2440
|
/**
|
|
@@ -2339,7 +2442,7 @@ declare const ADDABLE_TYPES: {
|
|
|
2339
2442
|
* never just the first. Pure, so it is tested without a store.
|
|
2340
2443
|
*/
|
|
2341
2444
|
declare function customFieldRequestProblems(requests: readonly CustomFieldAddRequest[], existingLabels: readonly string[]): string[];
|
|
2342
|
-
declare function CustomFieldsSection({ entityToken, recordId, title, className, agentDoor, }: CustomFieldsSectionProps): react.JSX.Element | null;
|
|
2445
|
+
declare function CustomFieldsSection({ entityToken, recordId, title, className, agentDoor, onMakeOwnTable, entityLabel, }: CustomFieldsSectionProps): react.JSX.Element | null;
|
|
2343
2446
|
|
|
2344
2447
|
/** The three behaviours that carry no parity type of their own. */
|
|
2345
2448
|
type PlainFieldType = "text" | "long_text" | "number";
|
|
@@ -2379,7 +2482,15 @@ type RelationFieldType = "relation";
|
|
|
2379
2482
|
* `FIELD_TYPE_CHOICES`'s coverage and as a red `kindsWithNoChoice()` below — never as a
|
|
2380
2483
|
* silence.
|
|
2381
2484
|
*/
|
|
2382
|
-
type PickableFieldType = DeclarableFieldKind | SystemFieldKind | "entity_reference";
|
|
2485
|
+
type PickableFieldType = DeclarableFieldKind | SystemFieldKind | "entity_reference" | NewerFieldKind;
|
|
2486
|
+
/**
|
|
2487
|
+
* LANE 10 P4: THE NINE NEWER KINDS (rating, duration, created by, last changed by, status, address,
|
|
2488
|
+
* barcode, formatted text, count). Each is listed in `FIELD_TYPE_CATALOGUE` below, so every reader
|
|
2489
|
+
* (Settings, the column panel, every layout) names a column of one by its own word; the MENU offers
|
|
2490
|
+
* one only once `custom.field_kinds()` publishes it (after the chair's apply and
|
|
2491
|
+
* `pnpm records:generate`), so a person is never offered a kind the live store would refuse.
|
|
2492
|
+
*/
|
|
2493
|
+
declare function storePublishesKind(kind: string): boolean;
|
|
2383
2494
|
/**
|
|
2384
2495
|
* THE STORE'S OWN STAMPS AS COLUMNS (GRID-PRIMITIVES G5; TABLE-PARITY H2 H3, lane
|
|
2385
2496
|
* DEFAULT-GRID-PARITY). `custom.field_declare` takes these three WORDS and makes each a formula
|
|
@@ -2400,6 +2511,11 @@ interface FieldTypeChoice {
|
|
|
2400
2511
|
/** The heading it sits under, so seventeen choices read as four short lists. */
|
|
2401
2512
|
group: "Words" | "Numbers and dates" | "Choices and people" | "Worked out";
|
|
2402
2513
|
}
|
|
2514
|
+
/**
|
|
2515
|
+
* EVERY KIND THIS PACKAGE CAN NAME AND DRAW, in menu order. The menu (`FIELD_TYPE_CHOICES`) is this
|
|
2516
|
+
* list less the kinds the live store does not take yet; every reader names a column from this one.
|
|
2517
|
+
*/
|
|
2518
|
+
declare const FIELD_TYPE_CATALOGUE: FieldTypeChoice[];
|
|
2403
2519
|
declare const FIELD_TYPE_CHOICES: FieldTypeChoice[];
|
|
2404
2520
|
declare const FIELD_TYPE_GROUPS: FieldTypeChoice["group"][];
|
|
2405
2521
|
declare function fieldTypeChoice(id: string): FieldTypeChoice | undefined;
|
|
@@ -2453,29 +2569,48 @@ declare function kindsWithNoChoice(): string[];
|
|
|
2453
2569
|
|
|
2454
2570
|
/** `Day rate` → `day_rate`. Shown, so nothing about it is a surprise. */
|
|
2455
2571
|
declare function keyFor(label: string): string;
|
|
2456
|
-
interface
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2572
|
+
interface FieldEditorCommon {
|
|
2573
|
+
/**
|
|
2574
|
+
* The name the host's page gives this table's records ("Contact"), when the store's own label
|
|
2575
|
+
* is not the word a person reads there. Shown in the header and in place of the store's label
|
|
2576
|
+
* inside its refusal sentence.
|
|
2577
|
+
*/
|
|
2578
|
+
tableLabel?: string | undefined;
|
|
2460
2579
|
onSaved?: (() => void) | undefined;
|
|
2461
2580
|
onCancel?: (() => void) | undefined;
|
|
2462
2581
|
/** Called after the store has accepted the removal, so the list can re-read. */
|
|
2463
2582
|
onRemoved?: (() => void) | undefined;
|
|
2464
2583
|
className?: string | undefined;
|
|
2465
2584
|
}
|
|
2466
|
-
declare function FieldEditor({ tableId, field, onSaved, onCancel, onRemoved, className }: FieldEditorProps): react.JSX.Element;
|
|
2467
2585
|
/**
|
|
2468
|
-
*
|
|
2586
|
+
* ONE EDITOR FOR BOTH KINDS OF TABLE (lane 7 STANDARD-TABLES, wave 1; Doctrine R13).
|
|
2469
2587
|
*
|
|
2470
|
-
*
|
|
2471
|
-
*
|
|
2472
|
-
*
|
|
2473
|
-
*
|
|
2588
|
+
* A column of one of an organization's own tables is named by its Table's uuid (`tableId`). A
|
|
2589
|
+
* custom field of a STANDARD table — a CRM contact, a deal, any registry Entity or Detail — has no
|
|
2590
|
+
* Table record and is named by its registry token (`entityToken`). Both are the same primitive to
|
|
2591
|
+
* a person: the same palette (`fieldTypes.ts`), the same questions, the same governance (who sees
|
|
2592
|
+
* it, whether an assistant reads it, what counts as a good value). The only difference is which
|
|
2593
|
+
* store door takes the declaration — `custom.field_declare` or `custom.entity_field_declare`,
|
|
2594
|
+
* which resolves the spec through the same `custom._field_document_for` — and who may change the
|
|
2595
|
+
* shape: the table's own Owner/Admin level, or the organization's admins
|
|
2596
|
+
* (`custom.entity_field_rights`, whose sentence is shown as it is).
|
|
2474
2597
|
*
|
|
2475
|
-
*
|
|
2476
|
-
*
|
|
2477
|
-
*
|
|
2598
|
+
* A standard table's field is DECLARED here; editing an existing one stays with the record page's
|
|
2599
|
+
* own section (rename, remove), because the edit arms below (choice re-homing, retype, look) are
|
|
2600
|
+
* custom-table doors.
|
|
2478
2601
|
*/
|
|
2602
|
+
type FieldEditorProps = FieldEditorCommon & ({
|
|
2603
|
+
tableId: Uuid$1;
|
|
2604
|
+
entityToken?: undefined;
|
|
2605
|
+
/** The Field being edited. Absent means a new one. */
|
|
2606
|
+
field?: Field | undefined;
|
|
2607
|
+
} | {
|
|
2608
|
+
/** The standard table's registry token (REC-33), e.g. `party`, `crm_deal`. */
|
|
2609
|
+
entityToken: string;
|
|
2610
|
+
tableId?: undefined;
|
|
2611
|
+
field?: undefined;
|
|
2612
|
+
});
|
|
2613
|
+
declare function FieldEditor(props: FieldEditorProps): react.JSX.Element | null;
|
|
2479
2614
|
declare function whatIsMissing(state: {
|
|
2480
2615
|
type: PickableFieldType;
|
|
2481
2616
|
label: string;
|
|
@@ -2693,6 +2828,64 @@ interface RelationPickerProps {
|
|
|
2693
2828
|
}
|
|
2694
2829
|
declare function RelationPicker({ field, value, onChange, disabled, id, className, allowCreate }: RelationPickerProps): react.JSX.Element;
|
|
2695
2830
|
|
|
2831
|
+
interface PickOrAddItem {
|
|
2832
|
+
id: string;
|
|
2833
|
+
label: string;
|
|
2834
|
+
/** A second line that tells two same-named items apart. */
|
|
2835
|
+
detail?: string | null | undefined;
|
|
2836
|
+
picked: boolean;
|
|
2837
|
+
/** The tooltip; defaults to the label. */
|
|
2838
|
+
title?: string | undefined;
|
|
2839
|
+
/**
|
|
2840
|
+
* The item drawn AS A CHIP in these classes — a choice in the colour its column keeps for it
|
|
2841
|
+
* (`choiceChipLookOf`), so the list reads the way the cell does. Absent: plain words.
|
|
2842
|
+
*/
|
|
2843
|
+
chip?: string | undefined;
|
|
2844
|
+
/** Attributes a caller's tests and walks select by (e.g. `data-relation-candidate`). */
|
|
2845
|
+
attrs?: Record<string, string> | undefined;
|
|
2846
|
+
}
|
|
2847
|
+
interface PickOrAddProps {
|
|
2848
|
+
/** The trigger's accessible name, e.g. "Pick for Category". */
|
|
2849
|
+
triggerLabel: string;
|
|
2850
|
+
/** The trigger's visible word, e.g. "Pick", "Change", "Choose". */
|
|
2851
|
+
triggerText: string;
|
|
2852
|
+
triggerId?: string | undefined;
|
|
2853
|
+
open: boolean;
|
|
2854
|
+
onOpenChange: (open: boolean) => void;
|
|
2855
|
+
search: string;
|
|
2856
|
+
onSearch: (search: string) => void;
|
|
2857
|
+
items: PickOrAddItem[];
|
|
2858
|
+
onPick: (id: string) => void;
|
|
2859
|
+
/** Above the list: a refusal, a "Reading…", a ceiling reached. */
|
|
2860
|
+
notice?: ReactNode;
|
|
2861
|
+
/** When the list is empty. */
|
|
2862
|
+
empty?: ReactNode;
|
|
2863
|
+
/** The add line at the foot. Absent = no add line. */
|
|
2864
|
+
add?: {
|
|
2865
|
+
label: string;
|
|
2866
|
+
onAdd: () => void;
|
|
2867
|
+
disabled?: boolean | undefined;
|
|
2868
|
+
} | null | undefined;
|
|
2869
|
+
/** The foot's own state, drawn in place of the add line when there is one (a name box, a "Reading that table…"). */
|
|
2870
|
+
foot?: ReactNode;
|
|
2871
|
+
/** Under the add line: a refusal of the add, with its own doors. */
|
|
2872
|
+
footNote?: ReactNode;
|
|
2873
|
+
/**
|
|
2874
|
+
* ENTER WITH NOTHING TO PICK when the foot is the caller's own (a choice cell's Add / Keep as
|
|
2875
|
+
* typed / Cancel question): what the question's first answer does (grids review 3, 2026-09-30: a
|
|
2876
|
+
* new choice word + Enter did nothing, while Tab then Enter added it). Absent: the add line.
|
|
2877
|
+
*/
|
|
2878
|
+
onEnterWithNoMatch?: (() => void) | undefined;
|
|
2879
|
+
}
|
|
2880
|
+
declare function PickOrAdd({ triggerLabel, triggerText, triggerId, open, onOpenChange, search, onSearch, items, onPick, notice, empty, add, foot, footNote, onEnterWithNoMatch, }: PickOrAddProps): react.JSX.Element;
|
|
2881
|
+
|
|
2882
|
+
declare function ExampleTables({ onBuilt, onClose, className, }: {
|
|
2883
|
+
/** Called with the first table the example built, once it is there. */
|
|
2884
|
+
onBuilt: (tableId: Uuid) => void;
|
|
2885
|
+
onClose: () => void;
|
|
2886
|
+
className?: string | undefined;
|
|
2887
|
+
}): react.JSX.Element;
|
|
2888
|
+
|
|
2696
2889
|
/** What the panel says while the chosen list is empty. */
|
|
2697
2890
|
declare const ENTITY_REFERENCE_KINDS_MISSING = "Choose at least one kind of thing this column points at.";
|
|
2698
2891
|
/**
|
|
@@ -2797,6 +2990,12 @@ interface FieldEditorControlProps {
|
|
|
2797
2990
|
* a choice control adds the words through `fieldUpdate`'s `options_add` and hands back words.
|
|
2798
2991
|
*/
|
|
2799
2992
|
addsChoices?: boolean | undefined;
|
|
2993
|
+
/**
|
|
2994
|
+
* DRAWN AS A FORM QUESTION (lane VIEWS-AND-FIELDS W1-B item 3): a choice is answered from its
|
|
2995
|
+
* choices laid out — pills for a few, a searchable list for more (`ChoiceAnswer`) — never a
|
|
2996
|
+
* drop-down or a "Choose" button. Every other control ignores it.
|
|
2997
|
+
*/
|
|
2998
|
+
asForm?: boolean | undefined;
|
|
2800
2999
|
}
|
|
2801
3000
|
/** The label row every editor shares: one line, the label, the unit, the required mark. */
|
|
2802
3001
|
declare function FieldLabel({ field, htmlFor, children }: {
|
|
@@ -2804,7 +3003,7 @@ declare function FieldLabel({ field, htmlFor, children }: {
|
|
|
2804
3003
|
htmlFor: string;
|
|
2805
3004
|
children?: ReactNode;
|
|
2806
3005
|
}): react.JSX.Element;
|
|
2807
|
-
declare function FieldControl({ field, value, onChange, disabled, id, autoOpen, onClose, onCommit, onCancel, addsChoices, initialSearch }: FieldEditorControlProps): string | number | bigint |
|
|
3006
|
+
declare function FieldControl({ field, value, onChange, disabled, id, autoOpen, onClose, onCommit, onCancel, addsChoices, initialSearch, asForm }: FieldEditorControlProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react.JSX.Element | null;
|
|
2808
3007
|
/** The chip a picked record shows as — REC-2's "a record is a chip" in one place. */
|
|
2809
3008
|
declare function RecordChip({ title, onRemove, className, }: {
|
|
2810
3009
|
title: string;
|
|
@@ -2820,9 +3019,11 @@ interface ChoiceListRow {
|
|
|
2820
3019
|
words: string;
|
|
2821
3020
|
/** A stable React key for a row that has no id yet. */
|
|
2822
3021
|
row: string;
|
|
3022
|
+
/** The colour it wears (`display_format.options.choices`); null or absent: none. */
|
|
3023
|
+
color?: StyleColor | null | undefined;
|
|
2823
3024
|
}
|
|
2824
|
-
/** The rows a column's live options start as, in the store's order. */
|
|
2825
|
-
declare function choiceRowsFrom(options: readonly StoredRecord[]): ChoiceListRow[];
|
|
3025
|
+
/** The rows a column's live options start as, in the store's order, each in the colour its Field keeps. */
|
|
3026
|
+
declare function choiceRowsFrom(options: readonly StoredRecord[], field?: Field): ChoiceListRow[];
|
|
2826
3027
|
/**
|
|
2827
3028
|
* WHAT A SAVE SENDS as `options`, or `undefined` when the list is what the store already holds
|
|
2828
3029
|
* (so a rename of the column alone does not rewrite its choices).
|
|
@@ -2830,12 +3031,15 @@ declare function choiceRowsFrom(options: readonly StoredRecord[]): ChoiceListRow
|
|
|
2830
3031
|
declare function choiceListPatch(start: readonly ChoiceListRow[], rows: readonly ChoiceListRow[]): Array<string | FieldOptionEdit> | undefined;
|
|
2831
3032
|
/** Why this list cannot be saved yet, in the panel's words, or null. */
|
|
2832
3033
|
declare function whatTheChoiceListIsMissing(rows: readonly ChoiceListRow[] | null): string | null;
|
|
2833
|
-
declare function ChoiceListEditor({ field, rows, onRows, onStart, allowOther, rehome, onRehome, }: {
|
|
2834
|
-
|
|
3034
|
+
declare function ChoiceListEditor({ field, isNew, rows, onRows, onStart, allowOther, rehome, onRehome, }: {
|
|
3035
|
+
/** The column, when it exists. Absent: a column being made, whose rows the panel holds. */
|
|
3036
|
+
field?: Field | undefined;
|
|
3037
|
+
/** A column being made: no store read, no removal question. */
|
|
3038
|
+
isNew?: boolean | undefined;
|
|
2835
3039
|
rows: ChoiceListRow[] | null;
|
|
2836
3040
|
onRows: (next: ChoiceListRow[]) => void;
|
|
2837
3041
|
/** The list as the store answered it, once — what a save is compared against. */
|
|
2838
|
-
onStart
|
|
3042
|
+
onStart?: ((start: ChoiceListRow[]) => void) | undefined;
|
|
2839
3043
|
/** Whether the column takes other values — the only case "keep the words" is offered. */
|
|
2840
3044
|
allowOther?: boolean | undefined;
|
|
2841
3045
|
/**
|
|
@@ -2858,7 +3062,7 @@ declare function useChoiceNudge(enabled?: boolean): ChoiceNudge | null;
|
|
|
2858
3062
|
|
|
2859
3063
|
/** The envelope for one key, when the document carries one. */
|
|
2860
3064
|
declare function envelopeFor(document: RecordDocument | undefined, key: string): ValueEnvelope | undefined;
|
|
2861
|
-
declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null): react.JSX.Element;
|
|
3065
|
+
declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react.JSX.Element | null;
|
|
2862
3066
|
/**
|
|
2863
3067
|
* The text of one scalar, with the Field's UNIT and FORMAT applied — FLD-N-1
|
|
2864
3068
|
* says both change the MEANING — and with an id resolved to the NAME of the
|
|
@@ -3000,6 +3204,20 @@ type EditorKind = FieldKind;
|
|
|
3000
3204
|
* decides anything the core does not.
|
|
3001
3205
|
*/
|
|
3002
3206
|
declare function editorKindFor(field: Field): EditorKind;
|
|
3207
|
+
/**
|
|
3208
|
+
* WHICH KIND A PERSON PICKED, read back off the Field the store keeps — the ONE reader every
|
|
3209
|
+
* "what does this column hold" answer goes through (the Settings column list, the column panel).
|
|
3210
|
+
*
|
|
3211
|
+
* `editorKindFor` answers which EDITOR to draw, and for two families that is not the kind a
|
|
3212
|
+
* person picked: a Signature is a text Field whose format is `signature` (it draws a line of
|
|
3213
|
+
* text), and the store's stamps — Record number, Created time, Last changed time — are formula
|
|
3214
|
+
* Fields whose `config.system` names the stamp. Read through the editor classifier alone, the
|
|
3215
|
+
* Settings list called a Signature "Text" and a Record number "Worked out from other columns"
|
|
3216
|
+
* (lane 10 W1-A, guard `every-pickable-kind-reads-back-as-itself.test.tsx`).
|
|
3217
|
+
*
|
|
3218
|
+
* `undefined` when the Field is none of the kinds the menu offers.
|
|
3219
|
+
*/
|
|
3220
|
+
declare function pickableTypeOf(field: Field): PickableFieldType | undefined;
|
|
3003
3221
|
/**
|
|
3004
3222
|
* The type word a person sees in a header or a settings row — and it is the
|
|
3005
3223
|
* SAME word the field panel offers, read from `FIELD_TYPE_CHOICES`, so a column
|
|
@@ -3007,6 +3225,112 @@ declare function editorKindFor(field: Field): EditorKind;
|
|
|
3007
3225
|
*/
|
|
3008
3226
|
declare function fieldTypeLabel(field: Field): string;
|
|
3009
3227
|
|
|
3228
|
+
/** The one token form, written the way the store's own pattern reads it. */
|
|
3229
|
+
declare function fieldToken(fieldId: Uuid$1): string;
|
|
3230
|
+
/** THE DECLARATIVE SPEC an agent writes. One template, whole, in one object. */
|
|
3231
|
+
interface DocTemplateSpec {
|
|
3232
|
+
name: string;
|
|
3233
|
+
/** The body, tokens and all. */
|
|
3234
|
+
body: string;
|
|
3235
|
+
}
|
|
3236
|
+
/**
|
|
3237
|
+
* A template written in terms of Field KEYS — which is how an agent thinks and
|
|
3238
|
+
* how a person reads — turned into the store's id-based tokens. The agent writes
|
|
3239
|
+
* `{{title}}`; what is stored points at the Field's id, so a rename never
|
|
3240
|
+
* silently empties the document.
|
|
3241
|
+
*
|
|
3242
|
+
* A key this Table does not have is LEFT EXACTLY AS IT IS, so
|
|
3243
|
+
* `custom.doc_unresolved_tokens` names it and the screen shows the store's own
|
|
3244
|
+
* reason — it is never quietly deleted from the body.
|
|
3245
|
+
*/
|
|
3246
|
+
declare function bodyFromKeys(body: string, fields: Field[]): string;
|
|
3247
|
+
/** The reverse, for a person reading a stored body: ids shown as the Field's label. */
|
|
3248
|
+
declare function bodyForReading(body: string, fields: Field[]): string;
|
|
3249
|
+
/** VAL-10: a signature is a Value on a text Field whose format is `signature`. */
|
|
3250
|
+
declare function isSignatureField(field: Field): boolean;
|
|
3251
|
+
|
|
3252
|
+
/** The drawing a signature value holds, or null when it holds none (empty, or a signer's name). */
|
|
3253
|
+
declare function drawnSignatureOf(value: unknown): string | null;
|
|
3254
|
+
/** The word a text-only place (a card title, a sentence, an export) writes for a drawn signature. */
|
|
3255
|
+
declare const SIGNED_WORD = "Signed";
|
|
3256
|
+
/** A signature value in words: a drawing is "Signed"; a sealed name stays the name. */
|
|
3257
|
+
declare function signatureWords(value: unknown): string | null;
|
|
3258
|
+
/** A signature as it reads anywhere a value is shown: the drawing, or the signer's name. */
|
|
3259
|
+
declare function SignatureValue({ value, inCell }: {
|
|
3260
|
+
value: unknown;
|
|
3261
|
+
inCell?: boolean | undefined;
|
|
3262
|
+
}): react.JSX.Element;
|
|
3263
|
+
/**
|
|
3264
|
+
* THE ONE SIGNATURE PAD. Draw with a finger, a pen or a mouse; Clear starts again. `onChange`
|
|
3265
|
+
* receives the drawing as a PNG data URL when a stroke ends, and `null` when cleared.
|
|
3266
|
+
*/
|
|
3267
|
+
declare function SignaturePad({ value, onChange, disabled, id, className, }: {
|
|
3268
|
+
value: unknown;
|
|
3269
|
+
onChange: (value: string | null) => void;
|
|
3270
|
+
disabled?: boolean | undefined;
|
|
3271
|
+
id?: string | undefined;
|
|
3272
|
+
className?: string | undefined;
|
|
3273
|
+
}): react.JSX.Element;
|
|
3274
|
+
|
|
3275
|
+
/** The facts a picker needs about one table, whichever list it came from. */
|
|
3276
|
+
interface PickerTable {
|
|
3277
|
+
id: string;
|
|
3278
|
+
name: string;
|
|
3279
|
+
kept_by_the_app?: boolean | null | undefined;
|
|
3280
|
+
/** `custom.table_facts`: which feature keeps it (`choices` for a value set). */
|
|
3281
|
+
kept_for?: string | null | undefined;
|
|
3282
|
+
/** `custom.data_home_tables`: the store's one word for what it is (`list` for a value set). */
|
|
3283
|
+
kind?: string | null | undefined;
|
|
3284
|
+
/** The table a value set belongs to (`custom.table_facts.used_in_table_id`). */
|
|
3285
|
+
used_in_table_id?: string | null | undefined;
|
|
3286
|
+
/** A checklist's steps, a booking page's slots, a workflow's states. */
|
|
3287
|
+
work_kind?: unknown;
|
|
3288
|
+
slug?: string | null | undefined;
|
|
3289
|
+
/** When the table was made — what tells two lists apart once their column is gone. */
|
|
3290
|
+
created_at?: string | null | undefined;
|
|
3291
|
+
}
|
|
3292
|
+
/** A value set: the List a choice column keeps its choices in. */
|
|
3293
|
+
declare function isValueSet(table: PickerTable): boolean;
|
|
3294
|
+
/** Anything the app keeps for itself rather than a table a person keeps. */
|
|
3295
|
+
declare function isKeptTable(table: PickerTable): boolean;
|
|
3296
|
+
interface TablePickerEntry<T extends PickerTable> {
|
|
3297
|
+
table: T;
|
|
3298
|
+
id: string;
|
|
3299
|
+
/** Unique among the entries returned. */
|
|
3300
|
+
label: string;
|
|
3301
|
+
/** A value set (shown only with "Show lists", or because it is the chosen one). */
|
|
3302
|
+
isList: boolean;
|
|
3303
|
+
}
|
|
3304
|
+
interface TablePickerEntries<T extends PickerTable> {
|
|
3305
|
+
entries: TablePickerEntry<T>[];
|
|
3306
|
+
/** How many value sets "Show lists" would add — 0 means the control is not worth drawing. */
|
|
3307
|
+
listCount: number;
|
|
3308
|
+
}
|
|
3309
|
+
/**
|
|
3310
|
+
* THE ONE RULE. Tables first (by name), then — with `showLists` — the value sets, each named
|
|
3311
|
+
* "<column> — <owning table>". Any names still equal get " (2)", " (3)" so no two entries match.
|
|
3312
|
+
*/
|
|
3313
|
+
declare function tablePickerEntries<T extends PickerTable>(tables: readonly T[], options?: {
|
|
3314
|
+
showLists?: boolean;
|
|
3315
|
+
keep?: string | null | undefined;
|
|
3316
|
+
}): TablePickerEntries<T>;
|
|
3317
|
+
/**
|
|
3318
|
+
* The organization's tables with the store's placement facts folded on (`kept_for`,
|
|
3319
|
+
* `used_in_table_id`), for a picker that reads `tableList()`. A store with no facts door, or one
|
|
3320
|
+
* that did not answer, leaves each table as `tableList()` gave it — its own `kept_by_the_app`.
|
|
3321
|
+
*/
|
|
3322
|
+
declare function usePickerTables(): {
|
|
3323
|
+
loading: boolean;
|
|
3324
|
+
data: Array<Table & PickerTable>;
|
|
3325
|
+
};
|
|
3326
|
+
/** The "Show lists" control beside a table picker. Drawn only when there are lists to show. */
|
|
3327
|
+
declare function ShowListsToggle({ count, on, onChange, className, }: {
|
|
3328
|
+
count: number;
|
|
3329
|
+
on: boolean;
|
|
3330
|
+
onChange: (on: boolean) => void;
|
|
3331
|
+
className?: string | undefined;
|
|
3332
|
+
}): react.JSX.Element | null;
|
|
3333
|
+
|
|
3010
3334
|
/** One Field of a package-owned Table, in the store's own words. */
|
|
3011
3335
|
interface SystemFieldSpec {
|
|
3012
3336
|
key: string;
|
|
@@ -3078,75 +3402,31 @@ interface TrackedVersion {
|
|
|
3078
3402
|
note: (version: number) => void;
|
|
3079
3403
|
}
|
|
3080
3404
|
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
layouts: readonly ViewKeyLayout[];
|
|
3092
|
-
writer: ViewKeyWriter;
|
|
3093
|
-
}
|
|
3094
|
-
/**
|
|
3095
|
-
* THE REGISTRY, as `custom.view_keys()` declares it (uichamp_s1_a_view_keeps_every_setting_it_is_given.sql).
|
|
3096
|
-
* Order and content are compared with the store by the live walk.
|
|
3097
|
-
*/
|
|
3098
|
-
declare const VIEW_KEYS: readonly ViewKeyDeclaration[];
|
|
3099
|
-
/** The keys one layout reads, by path. */
|
|
3100
|
-
declare function viewKeysFor(layout: ViewKeyLayout): string[];
|
|
3101
|
-
/** One sort clause: a Field key and a direction. */
|
|
3102
|
-
interface ViewSortKey {
|
|
3103
|
-
field: string;
|
|
3104
|
-
direction: "asc" | "desc";
|
|
3405
|
+
declare function archiveConfirmSentence(what: string): string;
|
|
3406
|
+
|
|
3407
|
+
interface AnnounceTableArchived {
|
|
3408
|
+
notify: RecordsUiHost["notify"];
|
|
3409
|
+
client: Pick<RecordsClient, "recordRestore">;
|
|
3410
|
+
tableId: Uuid$1;
|
|
3411
|
+
/** The table's name as the store gave it. */
|
|
3412
|
+
name: string;
|
|
3413
|
+
/** Called once the table is back, so the surface can show it again. */
|
|
3414
|
+
onRestored?: (() => void) | undefined;
|
|
3105
3415
|
}
|
|
3106
|
-
/**
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
interface ViewSettings {
|
|
3112
|
-
layout: "grid" | "kanban" | "calendar" | "gallery";
|
|
3113
|
-
filters: RecordFilter | null;
|
|
3114
|
-
where: RuleExpression | null;
|
|
3115
|
-
groupField: string | null;
|
|
3116
|
-
swimlaneField: string | null;
|
|
3117
|
-
collapsedColumns: string[];
|
|
3118
|
-
measure: string | null;
|
|
3119
|
-
dateField: string | null;
|
|
3120
|
-
imageField: string | null;
|
|
3121
|
-
sorts: ViewSortKey[];
|
|
3122
|
-
ruleId: string | null;
|
|
3123
|
-
isDefault: boolean;
|
|
3124
|
-
presentation: GridPresentation;
|
|
3125
|
-
movedFrom: Record<string, unknown> | null;
|
|
3416
|
+
/** Thrown by the undo when the store refuses it; its message is the store's one sentence. */
|
|
3417
|
+
declare class TableRestoreRefused extends Error {
|
|
3418
|
+
readonly refusal: RecordsError;
|
|
3419
|
+
readonly sentence: string;
|
|
3420
|
+
constructor(refusal: RecordsError);
|
|
3126
3421
|
}
|
|
3127
|
-
|
|
3128
|
-
declare function viewSettings(definition: Record<string, unknown> | null | undefined, rowFilters?: RecordFilter | null): ViewSettings;
|
|
3129
|
-
/** The settings as the spec names them — what `viewSettingsPatch` takes. */
|
|
3130
|
-
type ViewSettingsPatch = Partial<Omit<ViewSettings, "movedFrom">>;
|
|
3131
|
-
/**
|
|
3132
|
-
* THE KEYS ONE LAYOUT READS, and nothing else. A layout that does not use a key never sees it:
|
|
3133
|
-
* a calendar is not told the board's swimlanes, a board is not told the grid's pinned fields.
|
|
3134
|
-
*/
|
|
3135
|
-
declare function viewSettingsFor(settings: ViewSettings, layout: ViewKeyLayout): Partial<ViewSettings>;
|
|
3136
|
-
/**
|
|
3137
|
-
* THE WRITER'S SHAPE. Only the keys a press changed; a cleared Field is `null` (the door removes
|
|
3138
|
-
* it); lists are sent whole. `presentation` is sent whole because the door judges it as one key.
|
|
3139
|
-
*/
|
|
3140
|
-
declare function viewSettingsPatch(patch: ViewSettingsPatch): Record<string, unknown>;
|
|
3141
|
-
|
|
3142
|
-
declare function archiveConfirmSentence(what: string): string;
|
|
3422
|
+
declare function announceTableArchived({ notify, client, tableId, name, onRestored }: AnnounceTableArchived): void;
|
|
3143
3423
|
|
|
3144
3424
|
/**
|
|
3145
3425
|
* WHAT A LOOK MAY HOLD — how a person looks, never what the view is: not its name, not whether it
|
|
3146
3426
|
* is the default (`view_designate`), not its Rule, not the flat filters the digests read, not the
|
|
3147
3427
|
* order the store writes. The store refuses anything else by name.
|
|
3148
3428
|
*/
|
|
3149
|
-
type ViewLook = Partial<Pick<SavedViewSpec, "layout" | "groupField" | "swimlaneField" | "collapsedColumns" | "measure" | "dateField" | "imageField" | "sorts" | "where" | "presentation">>;
|
|
3429
|
+
type ViewLook = Partial<Pick<SavedViewSpec, "layout" | "groupField" | "swimlaneField" | "collapsedColumns" | "measure" | "dateField" | "startField" | "endField" | "imageField" | "sorts" | "where" | "presentation">>;
|
|
3150
3430
|
/** Only the look's own keys of a press — a name, a default, a Rule or an order is never a look. */
|
|
3151
3431
|
declare function lookPart(patch: Partial<SavedViewSpec>): ViewLook;
|
|
3152
3432
|
/** The look as the definition keys the store keeps (`view_look_set`); a cleared key is null. */
|
|
@@ -3296,6 +3576,228 @@ declare function useViewRecords(view: SavedViewSpec, pageSize?: number, filter?:
|
|
|
3296
3576
|
};
|
|
3297
3577
|
declare function ViewSwitcher({ view, onLayoutChange, onViewChange, onOpenRecord, openRecordId, onMoved, onNewRecordForm, onAskWhoChanged, pageSize, titleField, filter, onClearFilter, hostLayout, onHostLayoutChange, chooser, openExport, viewId, onOrderPlaced, footer, className, }: ViewSwitcherProps): react.JSX.Element;
|
|
3298
3578
|
|
|
3579
|
+
type CalendarMode = "month" | "week" | "day" | "list";
|
|
3580
|
+
interface CalendarViewProps {
|
|
3581
|
+
/** The table the records live in — the undo history's table, and where a new record is made. */
|
|
3582
|
+
tableId: Uuid;
|
|
3583
|
+
rows: readonly ReadRow$1[];
|
|
3584
|
+
/** The column a record's day (and, when it carries one, its time) is read from and written to. */
|
|
3585
|
+
dateField: Field$1;
|
|
3586
|
+
/** The table's columns, for the End and Colour by pickers and the default colour. */
|
|
3587
|
+
fields?: readonly Field$1[] | undefined;
|
|
3588
|
+
/**
|
|
3589
|
+
* THE END COLUMN THE VIEW KEEPS (`end_field`). Left out or null: the table's ONE other date column
|
|
3590
|
+
* when it has exactly one, else none until the person picks.
|
|
3591
|
+
*/
|
|
3592
|
+
endKey?: string | null | undefined;
|
|
3593
|
+
/** The person picked an End: the host keeps it on the view (`end_field`). Unbound: kept for this visit. */
|
|
3594
|
+
onEndFieldChange?: ((key: string | null) => void) | undefined;
|
|
3595
|
+
/** Does the host save what `onEndFieldChange` hands it? Default: when it is bound. */
|
|
3596
|
+
endKept?: boolean | undefined;
|
|
3597
|
+
/** The column that names each card (`cardTitleField`). */
|
|
3598
|
+
titleField: Field$1 | undefined;
|
|
3599
|
+
onOpenRecord?: ((recordId: Uuid) => void) | undefined;
|
|
3600
|
+
/** A move landed (or was undone, or refused): the host re-reads the rows it owns. */
|
|
3601
|
+
onMoved?: (() => void) | undefined;
|
|
3602
|
+
/** The person picked a Colour by column: the host keeps it on the view (`presentation.style.colorBy`). */
|
|
3603
|
+
onColorFieldChange?: ((key: string | null) => void) | undefined;
|
|
3604
|
+
/** May this person make records here? Without it the calendar offers no way to add one. */
|
|
3605
|
+
canCreate?: boolean | undefined;
|
|
3606
|
+
/** The view's membership sentence (`useViewRecords().membership`). */
|
|
3607
|
+
note?: string | undefined;
|
|
3608
|
+
/** The table's and the view's colours (`resolveTableStyle`); its `colorBy` is the Colour by column. */
|
|
3609
|
+
style?: TableStyle | undefined;
|
|
3610
|
+
/** How long a record with no End lasts in the week grid, in minutes. A knob; starts at an hour. */
|
|
3611
|
+
defaultMinutes?: number | undefined;
|
|
3612
|
+
/** What a drop or a drag across hours snaps to, in minutes. A knob; starts at 15. */
|
|
3613
|
+
snapMinutes?: number | undefined;
|
|
3614
|
+
/** The day the calendar opens on; today when left out. `YYYY-MM-DD`. */
|
|
3615
|
+
initialDate?: string | undefined;
|
|
3616
|
+
/** The layout it opens in. Left out: Month, or List on a phone-width screen. */
|
|
3617
|
+
initialMode?: CalendarMode | undefined;
|
|
3618
|
+
className?: string | undefined;
|
|
3619
|
+
}
|
|
3620
|
+
/**
|
|
3621
|
+
* THE VALUE A DROP WRITES (pure). A date column gets a bare `YYYY-MM-DD`. A value that carries a time
|
|
3622
|
+
* keeps its time of day on the new day; a drop at a minute writes that minute; a value with no time
|
|
3623
|
+
* dropped on a DATE-AND-TIME column (`moments`) is that day's LOCAL midnight as a full instant —
|
|
3624
|
+
* never the bare day, which the store would read as UTC midnight (the day before, west of Greenwich).
|
|
3625
|
+
*/
|
|
3626
|
+
declare function rescheduledValue(before: unknown, toDay: string, toMinute: number | null, moments?: boolean): unknown;
|
|
3627
|
+
/** Lay out one day's timed blocks side by side where they overlap (Google's column packing). */
|
|
3628
|
+
declare function packOverlaps<T extends {
|
|
3629
|
+
start: number;
|
|
3630
|
+
end: number;
|
|
3631
|
+
}>(blocks: readonly T[]): Array<T & {
|
|
3632
|
+
col: number;
|
|
3633
|
+
cols: number;
|
|
3634
|
+
}>;
|
|
3635
|
+
declare function CalendarView({ tableId, rows, dateField, fields, endKey, onEndFieldChange, endKept, titleField, onOpenRecord, onMoved, onColorFieldChange, canCreate, note, style, defaultMinutes, snapMinutes, initialDate, initialMode, className, }: CalendarViewProps): react.JSX.Element;
|
|
3636
|
+
|
|
3637
|
+
type TimelineZoom = "day" | "week" | "month" | "quarter";
|
|
3638
|
+
declare const TIMELINE_ZOOMS: readonly TimelineZoom[];
|
|
3639
|
+
/** The settings a timeline is drawn by, by Field key. */
|
|
3640
|
+
interface TimelineSettings {
|
|
3641
|
+
startKey: string | null;
|
|
3642
|
+
endKey: string | null;
|
|
3643
|
+
groupKey: string | null;
|
|
3644
|
+
colorKey: string | null;
|
|
3645
|
+
}
|
|
3646
|
+
interface TimelineViewProps {
|
|
3647
|
+
/** The table the records live in — the undo history's table. */
|
|
3648
|
+
tableId: Uuid;
|
|
3649
|
+
rows: readonly ReadRow$1[];
|
|
3650
|
+
/** The table's columns: the pickers, the lanes and the colours read them. */
|
|
3651
|
+
fields: readonly Field$1[];
|
|
3652
|
+
/** The column that names each bar (`cardTitleField`). */
|
|
3653
|
+
titleField: Field$1 | undefined;
|
|
3654
|
+
/** The view's Start column (`date_field`). Left out: the table's one date column, else asked. */
|
|
3655
|
+
startKey?: string | null | undefined;
|
|
3656
|
+
/** The End column. Left out: the table's one other date column, else none. */
|
|
3657
|
+
endKey?: string | null | undefined;
|
|
3658
|
+
/** The Group by column (`group_field`). Left out: no lanes. */
|
|
3659
|
+
groupKey?: string | null | undefined;
|
|
3660
|
+
/** The Colour by column. Left out: the view's `style.colorBy`, else the table's one choice column. */
|
|
3661
|
+
colorKey?: string | null | undefined;
|
|
3662
|
+
/** A setting changed: the host keeps what it can on the view. */
|
|
3663
|
+
onSettingsChange?: ((patch: Partial<TimelineSettings>) => void) | undefined;
|
|
3664
|
+
/** False when the host cannot keep the layout or the End on the view: the toolbar says so. */
|
|
3665
|
+
layoutKept?: boolean | undefined;
|
|
3666
|
+
onOpenRecord?: ((recordId: Uuid) => void) | undefined;
|
|
3667
|
+
/** A move landed (or was undone): the host re-reads the rows it owns. */
|
|
3668
|
+
onMoved?: (() => void) | undefined;
|
|
3669
|
+
/** The view's membership sentence (`useViewRecords().membership`). */
|
|
3670
|
+
note?: string | undefined;
|
|
3671
|
+
/** The table's and the view's colours (`resolveTableStyle`). */
|
|
3672
|
+
style?: TableStyle | undefined;
|
|
3673
|
+
initialZoom?: TimelineZoom | undefined;
|
|
3674
|
+
/** The day the timeline opens on; today when left out. `YYYY-MM-DD`. */
|
|
3675
|
+
initialDate?: string | undefined;
|
|
3676
|
+
className?: string | undefined;
|
|
3677
|
+
}
|
|
3678
|
+
/** THE ONE COLUMN THERE IS, or null — a setting picks itself only when nothing else could be meant. */
|
|
3679
|
+
declare function onlyCandidate(candidates: readonly Field$1[]): string | null;
|
|
3680
|
+
/** The columns a timeline can lay lanes out by: a choice, a person, a link, yes / no, or a worked-out column. */
|
|
3681
|
+
declare function groupableFields(all: readonly Field$1[]): Field$1[];
|
|
3682
|
+
declare function TimelineView({ tableId, rows, fields, titleField, startKey, endKey, groupKey, colorKey, onSettingsChange, layoutKept, onOpenRecord, onMoved, note, style, initialZoom, initialDate, className, }: TimelineViewProps): react.JSX.Element;
|
|
3683
|
+
|
|
3684
|
+
/** The colour of each record's card under `colorKey` (null: the table's own decorations only). */
|
|
3685
|
+
declare function useRowColorBy(all: readonly Field$1[], colorKey: string | null, style?: TableStyle | undefined): (row: ReadRow$1) => StyleColor | null;
|
|
3686
|
+
|
|
3687
|
+
/** One cell a change touched: its value before and after, by Field key. */
|
|
3688
|
+
interface TouchedCell {
|
|
3689
|
+
rowId: Uuid$1;
|
|
3690
|
+
key: string;
|
|
3691
|
+
before: unknown;
|
|
3692
|
+
after: unknown;
|
|
3693
|
+
/**
|
|
3694
|
+
* THE RECORD'S VERSION RIGHT AFTER THIS STEP'S WRITE (lane CAL, 2026-10-02). The history keeps the
|
|
3695
|
+
* newest version it knows per record (its own writes, undos and redos), and an undo or redo is
|
|
3696
|
+
* written against THAT — so a change anybody else made since is REFUSED and said, never
|
|
3697
|
+
* overwritten, while a person undoing their own steps in order is never refused by themselves.
|
|
3698
|
+
*/
|
|
3699
|
+
version?: number | undefined;
|
|
3700
|
+
}
|
|
3701
|
+
/** What one step of undo holds. */
|
|
3702
|
+
interface GridUndoStep {
|
|
3703
|
+
/** What the person did, in words: "Set Visit status on 20 appointments". */
|
|
3704
|
+
label: string;
|
|
3705
|
+
cells: TouchedCell[];
|
|
3706
|
+
/** Records this change created — undo archives them. */
|
|
3707
|
+
created?: Uuid$1[] | undefined;
|
|
3708
|
+
/** Records this change archived — undo restores them. */
|
|
3709
|
+
archived?: Uuid$1[] | undefined;
|
|
3710
|
+
/** The after-values are the store's own (a row action worked them out), so it cannot be redone. */
|
|
3711
|
+
noRedo?: boolean | undefined;
|
|
3712
|
+
/**
|
|
3713
|
+
* A COLUMN THIS STEP RETIRED (grids review 3, lane H item 1): undo brings it back through
|
|
3714
|
+
* `custom.field_restore` with every value it held, redo retires it again. Before this a column
|
|
3715
|
+
* delete was no step at all, so Cmd-Z after it silently undid the OLDER cell edit beneath it.
|
|
3716
|
+
*/
|
|
3717
|
+
retiredField?: {
|
|
3718
|
+
fieldId: Uuid$1;
|
|
3719
|
+
} | undefined;
|
|
3720
|
+
}
|
|
3721
|
+
interface GridUndo {
|
|
3722
|
+
push: (step: GridUndoStep) => void;
|
|
3723
|
+
undo: () => Promise<void>;
|
|
3724
|
+
redo: () => Promise<void>;
|
|
3725
|
+
canUndo: boolean;
|
|
3726
|
+
canRedo: boolean;
|
|
3727
|
+
/** How many steps back / forward, for the buttons. */
|
|
3728
|
+
depth: {
|
|
3729
|
+
back: number;
|
|
3730
|
+
forward: number;
|
|
3731
|
+
};
|
|
3732
|
+
busy: boolean;
|
|
3733
|
+
/** The last thing said: what was done or undone, or the store's refusal. */
|
|
3734
|
+
notice: {
|
|
3735
|
+
says: string;
|
|
3736
|
+
refusal: RecordsError | null;
|
|
3737
|
+
canUndo: boolean;
|
|
3738
|
+
} | null;
|
|
3739
|
+
dismiss: () => void;
|
|
3740
|
+
/**
|
|
3741
|
+
* Say something beside the last step without a step. `sticky` (a paste the store refused, a
|
|
3742
|
+
* read-back that came up short) stays until dismissed; otherwise it leaves by itself.
|
|
3743
|
+
*/
|
|
3744
|
+
say: (says: string, sticky?: boolean) => void;
|
|
3745
|
+
}
|
|
3746
|
+
|
|
3747
|
+
/** What one write answered: done (with the version it made), or the store's refusal. */
|
|
3748
|
+
type MoveWritten = {
|
|
3749
|
+
ok: true;
|
|
3750
|
+
version: number | null;
|
|
3751
|
+
} | {
|
|
3752
|
+
ok: false;
|
|
3753
|
+
error: RecordsError;
|
|
3754
|
+
};
|
|
3755
|
+
/**
|
|
3756
|
+
* THE WRITE ITSELF: ONE `recordUpdate`, against the version the caller drew the record at. `null`
|
|
3757
|
+
* means the caller does not know it — the write is then NOT sent, because a write with no version
|
|
3758
|
+
* is a write that can overwrite a colleague (said as a refusal, never silently).
|
|
3759
|
+
*/
|
|
3760
|
+
declare function moveRecordValue(client: Pick<ReturnType<typeof useRecordsClient>, "recordUpdate">, recordId: Uuid$1, patch: Record<string, unknown>, expectedVersion: number | null): Promise<MoveWritten>;
|
|
3761
|
+
interface RecordMoves {
|
|
3762
|
+
/**
|
|
3763
|
+
* Move one record: `patch` is the new values by Field key, `before` the values it held (read from
|
|
3764
|
+
* the row the person dragged), `label` what happened in words ("Rosa Delgado moved to Oct 14").
|
|
3765
|
+
* Answers whether the store took it.
|
|
3766
|
+
*/
|
|
3767
|
+
move: (args: {
|
|
3768
|
+
recordId: Uuid$1;
|
|
3769
|
+
patch: Record<string, unknown>;
|
|
3770
|
+
before: Record<string, unknown>;
|
|
3771
|
+
label: string;
|
|
3772
|
+
}) => Promise<boolean>;
|
|
3773
|
+
/** Make one record from a gesture (a click on a day, a drag across hours): ONE write, one undo step. */
|
|
3774
|
+
create: (args: {
|
|
3775
|
+
tableId: Uuid$1;
|
|
3776
|
+
data: Record<string, unknown>;
|
|
3777
|
+
label: string;
|
|
3778
|
+
}) => Promise<Uuid$1 | null>;
|
|
3779
|
+
/** The refusal the store gave the last move, and the record it is about — a badge on that card. */
|
|
3780
|
+
refused: {
|
|
3781
|
+
recordId: Uuid$1;
|
|
3782
|
+
error: RecordsError;
|
|
3783
|
+
changedElsewhere: boolean;
|
|
3784
|
+
} | null;
|
|
3785
|
+
/** Say a sentence in the notice without a step (`sticky`: stays until dismissed). */
|
|
3786
|
+
say: (says: string, sticky?: boolean) => void;
|
|
3787
|
+
/** The package's undo history these moves are steps of. */
|
|
3788
|
+
undo: GridUndo;
|
|
3789
|
+
/** Cmd/Ctrl-Z and Shift-Cmd-Z, for the layout's frame (`onKeyDown`). */
|
|
3790
|
+
onKeyDown: (event: KeyboardEvent) => void;
|
|
3791
|
+
/** The floating notice (what moved, Undo, or the refusal). The frame around it is `relative`. */
|
|
3792
|
+
notice: ReactElement;
|
|
3793
|
+
}
|
|
3794
|
+
declare function useRecordMoves({ tableId, rows, onMoved, }: {
|
|
3795
|
+
tableId: Uuid$1;
|
|
3796
|
+
/** The rows the layout drew — their versions are what a move is written against. */
|
|
3797
|
+
rows: readonly ReadRow[];
|
|
3798
|
+
onMoved?: (() => void) | undefined;
|
|
3799
|
+
}): RecordMoves;
|
|
3800
|
+
|
|
3299
3801
|
/** What the screen says above the list, so nobody has to be told twice that nothing was destroyed. */
|
|
3300
3802
|
declare const ARCHIVE_MEANS = "Archiving never destroys anything. A record you remove from the grid waits here until somebody brings it back.";
|
|
3301
3803
|
/** The sentence a person who may not restore reads INSTEAD of a control they cannot use. */
|
|
@@ -3916,9 +4418,18 @@ interface FormBuilderProps {
|
|
|
3916
4418
|
* empty builder that needs a second press on "New form" (lane HANDOVER, 2026-09-28).
|
|
3917
4419
|
*/
|
|
3918
4420
|
startWithOne?: boolean | undefined;
|
|
4421
|
+
/**
|
|
4422
|
+
* MAKE A NEW FORM ON OPEN, whatever the table already has (lane MAKE-HOME, 2026-10-02): a host
|
|
4423
|
+
* whose person pressed "make a form" (the /make hub) gets a new form beside the existing ones,
|
|
4424
|
+
* named for the table and never colliding with one already there — once per mount. Until it is
|
|
4425
|
+
* made the builder shows its loading state, so the host is never handed an older form.
|
|
4426
|
+
*/
|
|
4427
|
+
createOnMount?: boolean | undefined;
|
|
3919
4428
|
className?: string | undefined;
|
|
3920
4429
|
}
|
|
3921
|
-
|
|
4430
|
+
/** The table's form name, numbered past any form of that name already on it ("Intake form 2"). */
|
|
4431
|
+
declare function freshFormName(base: string, taken: readonly string[]): string;
|
|
4432
|
+
declare function FormBuilder({ tableId, seed, activeFormId, onActiveForm, startWithOne, createOnMount, className }: FormBuilderProps): react.JSX.Element;
|
|
3922
4433
|
|
|
3923
4434
|
/**
|
|
3924
4435
|
* The shapes a block can take. There is exactly ONE closed set and it is the
|
|
@@ -4062,30 +4573,6 @@ declare function ChartLegendContent({ payload, config, className, }: {
|
|
|
4062
4573
|
className?: string | undefined;
|
|
4063
4574
|
}): react.JSX.Element | null;
|
|
4064
4575
|
|
|
4065
|
-
/** The one token form, written the way the store's own pattern reads it. */
|
|
4066
|
-
declare function fieldToken(fieldId: Uuid$1): string;
|
|
4067
|
-
/** THE DECLARATIVE SPEC an agent writes. One template, whole, in one object. */
|
|
4068
|
-
interface DocTemplateSpec {
|
|
4069
|
-
name: string;
|
|
4070
|
-
/** The body, tokens and all. */
|
|
4071
|
-
body: string;
|
|
4072
|
-
}
|
|
4073
|
-
/**
|
|
4074
|
-
* A template written in terms of Field KEYS — which is how an agent thinks and
|
|
4075
|
-
* how a person reads — turned into the store's id-based tokens. The agent writes
|
|
4076
|
-
* `{{title}}`; what is stored points at the Field's id, so a rename never
|
|
4077
|
-
* silently empties the document.
|
|
4078
|
-
*
|
|
4079
|
-
* A key this Table does not have is LEFT EXACTLY AS IT IS, so
|
|
4080
|
-
* `custom.doc_unresolved_tokens` names it and the screen shows the store's own
|
|
4081
|
-
* reason — it is never quietly deleted from the body.
|
|
4082
|
-
*/
|
|
4083
|
-
declare function bodyFromKeys(body: string, fields: Field[]): string;
|
|
4084
|
-
/** The reverse, for a person reading a stored body: ids shown as the Field's label. */
|
|
4085
|
-
declare function bodyForReading(body: string, fields: Field[]): string;
|
|
4086
|
-
/** VAL-10: a signature is a Value on a text Field whose format is `signature`. */
|
|
4087
|
-
declare function isSignatureField(field: Field): boolean;
|
|
4088
|
-
|
|
4089
4576
|
interface DocTemplateProps {
|
|
4090
4577
|
/** The Table these templates render. */
|
|
4091
4578
|
tableId: Uuid;
|
|
@@ -4163,9 +4650,16 @@ interface DashboardCanvasProps {
|
|
|
4163
4650
|
activeDashboardId?: Uuid | null | undefined;
|
|
4164
4651
|
/** The one filter bar across the canvas. Merged UNDER each block's own filter. */
|
|
4165
4652
|
filter?: Record<string, AggregateFilter> | undefined;
|
|
4653
|
+
/**
|
|
4654
|
+
* MAKE A NEW DASHBOARD ON OPEN, whatever the table already has (lane MAKE-HOME, 2026-10-02): the
|
|
4655
|
+
* /make hub's "Dashboard" gets the starter dashboard "New dashboard" makes, once per mount.
|
|
4656
|
+
*/
|
|
4657
|
+
createOnMount?: boolean | undefined;
|
|
4658
|
+
/** Told the id of a dashboard this canvas made (the starter, or `createOnMount`'s). */
|
|
4659
|
+
onCreated?: ((dashboardId: Uuid) => void) | undefined;
|
|
4166
4660
|
className?: string | undefined;
|
|
4167
4661
|
}
|
|
4168
|
-
declare function DashboardCanvas({ tableId, activeDashboardId, filter, className }: DashboardCanvasProps): react.JSX.Element;
|
|
4662
|
+
declare function DashboardCanvas({ tableId, activeDashboardId, filter, createOnMount, onCreated, className }: DashboardCanvasProps): react.JSX.Element;
|
|
4169
4663
|
|
|
4170
4664
|
interface FormsPanelProps {
|
|
4171
4665
|
tableId: Uuid;
|
|
@@ -4378,9 +4872,16 @@ interface BookingBuilderProps {
|
|
|
4378
4872
|
form_id: string;
|
|
4379
4873
|
}) => void) | undefined;
|
|
4380
4874
|
onClose?: (() => void) | undefined;
|
|
4875
|
+
/**
|
|
4876
|
+
* A NEW PAGE, whatever the table already has (lane MAKE-HOME, 2026-10-02). Without it and without
|
|
4877
|
+
* `bookingId` the builder opens the table's first page; a host whose person pressed "make a
|
|
4878
|
+
* booking page" (the /make hub) passes this, and the first Save makes a second page beside the
|
|
4879
|
+
* old one. After that Save the builder keeps editing the page it just made.
|
|
4880
|
+
*/
|
|
4881
|
+
startNew?: boolean | undefined;
|
|
4381
4882
|
className?: string | undefined;
|
|
4382
4883
|
}
|
|
4383
|
-
declare function BookingBuilder({ tableId, bookingId, onSaved, onClose, className }: BookingBuilderProps): react.JSX.Element;
|
|
4884
|
+
declare function BookingBuilder({ tableId, bookingId, onSaved, onClose, startNew, className }: BookingBuilderProps): react.JSX.Element;
|
|
4384
4885
|
|
|
4385
4886
|
interface BookingSlotsProps {
|
|
4386
4887
|
/**
|
|
@@ -5183,6 +5684,14 @@ declare function dateText(field: Pick<Field, "type" | "config" | "format">, valu
|
|
|
5183
5684
|
declare function calendarDayOf(value: unknown): string | null;
|
|
5184
5685
|
/** The heading of one calendar day — `Apr 1, 2026` — built on local midnight, never UTC. */
|
|
5185
5686
|
declare function calendarDayLabel(day: string): string;
|
|
5687
|
+
/** The day key of a moment, on the viewer's calendar. */
|
|
5688
|
+
declare function dayKeyOf(at: Date): string;
|
|
5689
|
+
/** A day key as local midnight. */
|
|
5690
|
+
declare function dayAt(day: string): Date;
|
|
5691
|
+
/** The day `n` days after (or before, when negative) `day`. */
|
|
5692
|
+
declare function addDays(day: string, n: number): string;
|
|
5693
|
+
/** Whole days from `from` to `to` (negative when `to` is earlier). DST-safe: rounds the hour away. */
|
|
5694
|
+
declare function daysBetween(from: string, to: string): number;
|
|
5186
5695
|
|
|
5187
5696
|
/** The word a withheld cell shows in place of a value. Never "—", which means empty. */
|
|
5188
5697
|
declare const WITHHELD_WORD = "Withheld";
|
|
@@ -5298,4 +5807,9 @@ declare function useDrill(args: {
|
|
|
5298
5807
|
def: DrillDefinition | null;
|
|
5299
5808
|
};
|
|
5300
5809
|
|
|
5301
|
-
export { ABSENCE_WORD_LABEL, ABSENCE_WORD_VALUES, ACTION_KINDS, ARCHIVED_NEVER_DESTROYED, ARCHIVE_MEANS, type AbsenceWord, ActionInbox, type ActionInboxProps, type ActionKind, type AgentBuildAsk, ArchivedDisclosure, type ArchivedDisclosureProps, ArchivedPortals, type ArchivedPortalsProps, ArchivedView, type ArchivedViewProps, BOOKING_NOT_HERE_LINE, BOOKING_PAGE_STATE_LABEL, BOOKING_PAGE_STATE_VALUES, BookingBuilder, type BookingBuilderProps, type BookingPageState, BookingSlots, type BookingSlotsProps, BuildOrAsk, type BuildOrAskProps, type BuildableKind, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_REQUIREMENT_KINDS, CHECKLIST_REQUIREMENT_LABEL, CONDITION_OPS, CONTEXT_POLICY_LABEL, ADDABLE_TYPES as CUSTOM_FIELD_ADDABLE_TYPES, 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, type ChoiceAddition, type ChoiceAsk, ChoiceAskButtons, ChoiceListEditor, type ChoiceListRow, CommentThread, type CommentThreadProps, type ConditionField, ConditionGroup, type ConditionGroupProps, ConditionRow, type ConditionRowProps, type CustomFieldAddRequest, type CustomFieldAddResult, type CustomFieldSetResult, type CustomFieldValuesRequest, type CustomFieldsAgentDoor, type CustomFieldsAgentState, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FOOTER, DEFAULT_VIEW_NAME, DUE_STATE_LABEL, DashboardCanvas, type DashboardCanvasProps, DigestScheduler, type DigestSchedulerProps, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, ENGINEER_TEXT, ENTITY_REFERENCE_KINDS_MISSING, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, EntityReferenceKindPicker, type EntityReferenceKindPickerProps, ExportMenu, type ExportMenuProps, FIELD_RULE_KIND_LABEL, FIELD_RULE_KIND_VALUES, FIELD_SENSITIVITY_LABEL, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FOOTER_WORDS, FORMULA_OP_JOINS, FORMULA_OP_LABEL, FORMULA_OP_VALUES, FORM_FLOWS, FORM_NOT_HERE_LINE, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, FieldLabel, type FieldProposalRow, type FieldRuleKindValue, type FieldTypeChoice, FilePicker, type FilePickerProps, type FooterPlacement, type FormAsked, FormBuilder, type FormBuilderProps, type FormFlow, type FormQuestionSpec, FormRunner, type FormRunnerProps, type FormSpec, type FormSubmitOutcome, type FormTheme, FormsPanel, type FormsPanelProps, type FormulaOp, Grid, GridCell, type GridContextRecord, type GridContextSnapshot, type GridEditing, type GridGrouping, type GridPresentation, type GridProps, GuessedFieldType, HistoryPanel, type HistoryPanelProps, type HostLayout, INBOX_GROUPINGS, INBOX_VIEWS, IN_MEMORY_QUEUE_REASON, type ImportSource, ImportWizard, type ImportWizardProps, InTableToolbar, type InboxGroup, type InboxGrouping, KERNEL_REASON, LANE_EMPTY, LANE_TITLE, LAYOUT_FIELD_KIND, LAYOUT_LABEL, LEVEL_WORD, LOOK_WORDS, type LabelLookup, type LinkRail, MACHINE_IDENTITY, MANUAL_SORT, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, type MainView, MyChecklistSteps, NEEDS_A_SENTENCE, NOT_ANSWERED_YET, NOT_DRAWN_HERE, NO_AGENT_PORT, 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_RULES_YET, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, type OpenRecordsAsk, type OrganizationMember, PAGE_VIEWS, PAGE_VIEW_LABEL, PARITY_LABEL, PARITY_MADE_OF, PORTAL_NOT_HERE_LINE, PROPOSED_CHANGE_ACT_LABEL, PROPOSED_CHANGE_ACT_VALUES, type PageView, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, type PickableFieldType, PipelineBoard, type PipelineBoardProps, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalBuilder, type PortalBuilderProps, PortalCardView, type PortalCardViewProps, PortalLookEditor, type PortalLookEditorProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, type ProposedChangeAct, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, ROLLUP_AGG_LABEL, ROLLUP_AGG_VALUES, RULE_NOT_HERE_LINE, type ReaskContext, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, RecordValue, RecordsMount, type RecordsMountProps, RecordsTableCard, type RecordsTableCardProps, type RecordsUiHost, RecordsUiProvider, ReferenceBuilder, type ReferenceBuilderProps, type ReferenceChoice, RefusalLine, RefusalNotice, type RelationFieldType, RelationPicker, type RelationPickerProps, type RenderTextSlot, type ResolveName, type RollupAgg, SAVED_VIEWS_UNAVAILABLE, SAVE_TO_TABLE_TYPES, SAY_WHAT_YOU_ARE_WAITING_FOR_AFTER_MS, SECTIONS_UNKNOWN, SERIES_COLORS, SHARE_NOT_YOURS_LINE, SOMEBODY, STAGE_RULE_ON_FAIL_LABEL, STORE_ANSWERS_THESE, STORE_DECIDES_REASON, SUBSCRIPTION_CADENCES, SUBSCRIPTION_CADENCE_LABEL, SUBSCRIPTION_CHANNEL_LABEL, SUBSCRIPTION_CHANNEL_VALUES, SaveToTable, type SaveToTableProps, type SaveToTableSource, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, type ShownViewReport, SignBlock, type SignBlockProps, type SnoozeChoice, type SortStateAction, SortStateControl, type SortStateControlProps, StageRulesSection, type StageRulesSectionProps, StepRow, type SubscriptionChannel, SubscriptionsPanel, type SubscriptionsPanelProps, type Surface, type SurfacePress, type SystemFieldSpec, type SystemTableSpec, TABLE_LANES, TABLE_MENU, TABLE_NAME_MAX, TABLE_NOT_REACHABLE, THE_SYSTEM, type TableLane, type TableOpening, TablePage, type TablePageHeaderChrome, type TablePageProps, TableRenameDialog, type TableRights, TableSettings, type TableSettingsProps, TableShape, TableToolbarSlotContext, TablesHome, type TablesHomeProps, type TrackedVersion, type UseSystemTableState, VIEW_KEYS, VIEW_LAYOUTS, VIEW_NEEDS, VIEW_NOT_SAVED_YET, VISIBILITY_LANES, VISIBILITY_LANE_TITLE, ViewBar, type ViewBarProps, type ViewKeyDeclaration, type ViewKeyLayout, type ViewKeyWriter, type ViewLayout, type ViewLook, type ViewNeed, type ViewNeedKind, ViewNeeds, type ViewNeedsProps, type ViewSettings, type ViewSettingsPatch, type ViewSort, type ViewSortKey, ViewSwitcher, type ViewSwitcherProps, type VisibilityLane, WITHHELD_RECORD_LABEL, WITHHELD_WORD, WORK_APPROVAL_STATES, WORK_APPROVAL_STATE_LABEL, WORK_DUE_STATES, WORK_INBOX_KINDS, WORK_INBOX_KIND_GROUP_LABEL, WORK_INBOX_KIND_LABEL, type WhatYouMayDo, WhereItLives, type WhereItLivesProps, type WhoChanged, WhoChangedSource, WithheldValue, actorBadge, actorWords, applyLook, archiveConfirmSentence, archivedRowLine, asRefusal, askableFields, blockFromSpec, bodyForReading, bodyFromKeys, calendarDayLabel, calendarDayOf, cameFromLine, cardTitleField, cardWords, carriesTimeOfDay, cellState, choiceAddition, choiceAskSentence, choiceListPatch, choiceNudgeOf, choiceRowsFrom, chooseSurface, colorFromTheValue, columnDeclarationFor, columnForField, conditionInWords, conditionIsDrawable, conditionIsSimple, conditionValue, controlFor, currencyCodeFor, customFieldRequestProblems, dashboardDeclareArgs, dashboardFromSummary, dateFormatFor, dateText, declareView, defaultViewOf, designatedLayoutOf, drillDimensionsOf, drillMeasuresOf, drillPathsOf, drillWhere, editorKindFor, ensureSystemTable, entityReferenceSpec, envelopeFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, footerOf, formDeclareArgs, formFromSummary, formPresentation, formatForField, freeColumnName, gridContextKey, gridContextSnapshot, groupInbox, groupLabel, handOrderLine, handOrderSortState, hasTimePart, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isChoiceAddition, isDateField, isEngineerText, isId, isMachineIdentity, isParityFieldType, isPlainFieldType, isRelationFieldType, isSignatureField, keepLook, keptByTheApp, keyFor, kindsWithNoChoice, laneFor, lastChangeSentence, lookDiffers, lookDocument, lookFromDocument, lookPart, looksLikeId, machineIdentityIn, mayNotRestoreLine, memberName, nextInWords, nextSummaryAt, notAChoiceSentence, openingRail, openingView, pageViewFromParam, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, previewWords, publiclyAnswerable, railFromParam, readLooks, recordName, recordNameIn, recordsDataSource, refusal, refusalForAPerson, refusalFromThrown, refusalLineForAPerson, refusalOr, renderValue, resolveTableStyle, revokeConsequence, rowName, rowNameIn, saveToViewPlan, saveViewPatch, scalarText, seedIsSatisfied, shapesOfSource, shareUnavailableReason, singularNoun, snoozeChoices, specFromBlock, storeDecidesRights, styleFromDecorations, submissionStamp, surfaceChosen, tableName, tableNameProblem, tableOpening, tableRightsAt, unknownRailLine, unknownViewLine, useCanShare, useChoiceNudge, useDrill, useDrillAnswers, useDrillDefinition, useEmbedHandshake, useEnrichCells, useGridEditing, useLabelWait, useMeasuredWidth, useMyChecklistSteps, useRecordLabels, useRecordRights, useRecordsUi, useRowRights, useSystemTable, useTableRights, useTableToolbarSlot, useViewRecords, useWhoChanged, viewDocument, viewFromRow, viewKeysFor, viewNeedFor, viewPatchDocument, viewSettings, viewSettingsFor, viewSettingsPatch, visibilityLaneFor, whatIsMissing, whatIsMissingForEntityReference, whatTheChoiceListIsMissing, whatYouMayDo, whatYouMayDoWithTable, whenWords, whyNotAskable, withheldNoticeOf, withheldSentence, withoutAddition, wordsList };
|
|
5810
|
+
interface ObjectActionMenuItemsProps {
|
|
5811
|
+
actions: readonly ObjectAction[];
|
|
5812
|
+
}
|
|
5813
|
+
declare function ObjectActionMenuItems({ actions }: ObjectActionMenuItemsProps): react.JSX.Element;
|
|
5814
|
+
|
|
5815
|
+
export { ABSENCE_WORD_LABEL, ABSENCE_WORD_VALUES, ACTION_KINDS, ARCHIVED_NEVER_DESTROYED, ARCHIVE_MEANS, type AbsenceWord, ActionInbox, type ActionInboxProps, type ActionKind, type AgentBuildAsk, type AnnounceTableArchived, ArchivedDisclosure, type ArchivedDisclosureProps, ArchivedPortals, type ArchivedPortalsProps, ArchivedView, type ArchivedViewProps, BOOKING_NOT_HERE_LINE, BOOKING_PAGE_STATE_LABEL, BOOKING_PAGE_STATE_VALUES, BookingBuilder, type BookingBuilderProps, type BookingPageState, BookingSlots, type BookingSlotsProps, BuildOrAsk, type BuildOrAskProps, type BuildableKind, CAPTURE_MODES, CHART_KINDS, CHART_KIND_LABEL, CHART_NEEDS, CHECKLIST_REQUIREMENT_KINDS, CHECKLIST_REQUIREMENT_LABEL, CONDITION_OPS, CONTEXT_POLICY_LABEL, ADDABLE_TYPES as CUSTOM_FIELD_ADDABLE_TYPES, type CalendarMode, CalendarView, type CalendarViewProps, 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, type ChoiceAddition, type ChoiceAsk, ChoiceAskButtons, ChoiceListEditor, type ChoiceListRow, CommentThread, type CommentThreadProps, type ConditionField, ConditionGroup, type ConditionGroupProps, ConditionRow, type ConditionRowProps, type CustomFieldAddRequest, type CustomFieldAddResult, type CustomFieldSetResult, type CustomFieldValuesRequest, type CustomFieldsAgentDoor, type CustomFieldsAgentState, CustomFieldsSection, type CustomFieldsSectionProps, DEFAULT_FOOTER, DEFAULT_VIEW_NAME, DUE_STATE_LABEL, DashboardCanvas, type DashboardCanvasProps, DigestScheduler, type DigestSchedulerProps, DocRender, type DocRenderProps, DocTemplate, type DocTemplateProps, type DocTemplateSpec, EMPTY_PRESENTATION, ENGINEER_TEXT, ENTITY_REFERENCE_KINDS_MISSING, type EditorKind, EmbedFrame, type EmbedFrameProps, type EnrichAsk, EnrichBadge, type EnrichBadgeProps, type EnrichOutcome, EnrichPanel, type EnrichPanelProps, EntityReferenceKindPicker, type EntityReferenceKindPickerProps, ExampleTables, ExportMenu, type ExportMenuProps, FIELD_RULE_KIND_LABEL, FIELD_RULE_KIND_VALUES, FIELD_SENSITIVITY_LABEL, FIELD_TYPE_CATALOGUE, FIELD_TYPE_CHOICES, FIELD_TYPE_GROUPS, FOOTER_WORDS, FORMULA_OP_JOINS, FORMULA_OP_LABEL, FORMULA_OP_VALUES, FORM_FLOWS, FORM_NOT_HERE_LINE, FROZEN_COLUMN_WIDTH, FieldControl, FieldEditor, type FieldEditorControlProps, type FieldEditorProps, FieldHistoryPanel, type FieldHistoryPanelProps, FieldLabel, type FieldProposalRow, type FieldRuleKindValue, type FieldTypeChoice, FilePicker, type FilePickerProps, type FooterPlacement, type FormAsked, FormBuilder, type FormBuilderProps, type FormFlow, type FormQuestionSpec, FormRunner, type FormRunnerProps, type FormSpec, type FormSubmitOutcome, type FormTheme, FormsPanel, type FormsPanelProps, type FormulaOp, Grid, GridCell, type GridContextRecord, type GridContextSnapshot, type GridEditing, type GridGrouping, type GridPresentation, type GridProps, GuessedFieldType, HistoryPanel, type HistoryPanelProps, type HostLayout, INBOX_GROUPINGS, INBOX_VIEWS, IN_MEMORY_QUEUE_REASON, type ImportSource, ImportWizard, type ImportWizardProps, InTableToolbar, type InboxGroup, type InboxGrouping, LANE_EMPTY, LANE_TITLE, LAYOUT_FIELD_KIND, LAYOUT_LABEL, LOOK_WORDS, type LabelLookup, type LinkRail, MACHINE_IDENTITY, MANUAL_SORT, MAX_ROW_HEIGHT, MIN_ROW_HEIGHT, type MainView, type MoveWritten, MyChecklistSteps, NEEDS_A_SENTENCE, NOT_DRAWN_HERE, NO_AGENT_PORT, 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_RULES_YET, NO_SAVED_VIEWS_REASON, NO_SHARE_REASON, NO_UPLOAD_REASON, NotifyRuleEditor, type NotifyRuleEditorProps, type NotifyRuleSpec, ObjectAction, ObjectActionMenuItems, type ObjectActionMenuItemsProps, type OpenRecordsAsk, type OrganizationMember, PAGE_VIEWS, PAGE_VIEW_LABEL, PARITY_LABEL, PARITY_MADE_OF, PORTAL_NOT_HERE_LINE, PROPOSED_CHANGE_ACT_LABEL, PROPOSED_CHANGE_ACT_VALUES, type PageView, Peek, type PeekProps, type PendingCapture, PersonPicker, type PersonPickerProps, PickOrAdd, type PickOrAddItem, type PickOrAddProps, type PickableFieldType, type PickerTable, PipelineBoard, type PipelineBoardProps, type PlainFieldType, type PlainRefusal, type PortalAnswer, PortalBuilder, type PortalBuilderProps, PortalCardView, type PortalCardViewProps, PortalLookEditor, type PortalLookEditorProps, PortalShell, type PortalShellProps, PortalsPanel, type PortalsPanelProps, type ProposalOutcome, ProposalRow, type ProposalRowProps, type ProposedChange, type ProposedChangeAct, ProvenanceBadge, PublicViewPage, type PublicViewPageProps, ROLLUP_AGG_LABEL, ROLLUP_AGG_VALUES, RULE_NOT_HERE_LINE, type ReaskContext, RecordChat, type RecordChatContext, type RecordChatEntry, type RecordChatProps, type RecordChatWithheld, RecordChip, RecordForm, type RecordFormProps, RecordLabelProvider, type RecordMoves, RecordValue, RecordsMount, type RecordsMountProps, RecordsTableCard, type RecordsTableCardProps, type RecordsUiHost, RecordsUiProvider, ReferenceBuilder, type ReferenceBuilderProps, type ReferenceChoice, RefusalLine, RefusalNotice, type RelationFieldType, RelationPicker, type RelationPickerProps, type RenderTextSlot, type ResolveName, type RollupAgg, SAVED_VIEWS_UNAVAILABLE, SAVE_TO_TABLE_TYPES, SAY_WHAT_YOU_ARE_WAITING_FOR_AFTER_MS, SECTIONS_UNKNOWN, SERIES_COLORS, SHARE_NOT_YOURS_LINE, SIGNED_WORD, SOMEBODY, STAGE_RULE_ON_FAIL_LABEL, STORE_ANSWERS_THESE, STORE_DECIDES_REASON, STORE_KEEPS_TIMELINE, STORE_KEPT_LAYOUTS, SUBSCRIPTION_CADENCES, SUBSCRIPTION_CADENCE_LABEL, SUBSCRIPTION_CHANNEL_LABEL, SUBSCRIPTION_CHANNEL_VALUES, SaveToTable, type SaveToTableProps, type SaveToTableSource, type SavedDashboard, type SavedForm, type SavedView, type SavedViewSpec, ShareControl, type ShareControlProps, type ShareSubject, ShowListsToggle, type ShownViewReport, SignBlock, type SignBlockProps, SignaturePad, SignatureValue, type SnoozeChoice, type SortStateAction, SortStateControl, type SortStateControlProps, StageRulesSection, type StageRulesSectionProps, StepRow, type SubscriptionChannel, SubscriptionsPanel, type SubscriptionsPanelProps, type Surface, type SurfacePress, type SystemFieldSpec, type SystemTableSpec, TABLE_LANES, TABLE_MENU, TABLE_NAME_MAX, TABLE_NOT_REACHABLE, THE_SYSTEM, TIMELINE_ZOOMS, type TableLane, type TableOpening, TablePage, type TablePageHeaderChrome, type TablePageProps, type TablePickerEntries, type TablePickerEntry, TableRenameDialog, TableRestoreRefused, type TableRights, TableSettings, type TableSettingsProps, TableShape, TableToolbarSlotContext, TablesHome, type TablesHomeProps, type TimelineSettings, TimelineView, type TimelineViewProps, type TimelineZoom, type TrackedVersion, type UseSystemTableState, VIEW_KEYS, VIEW_LAYOUTS, VIEW_NEEDS, VIEW_NOT_SAVED_YET, VISIBILITY_LANES, VISIBILITY_LANE_TITLE, ViewBar, type ViewBarProps, type ViewKeyDeclaration, type ViewKeyLayout, type ViewKeyWriter, type ViewLayout, type ViewLook, type ViewNeed, type ViewNeedKind, ViewNeeds, type ViewNeedsProps, type ViewSettings, type ViewSettingsPatch, type ViewSort, type ViewSortKey, ViewSwitcher, type ViewSwitcherProps, type VisibilityLane, WITHHELD_RECORD_LABEL, WITHHELD_WORD, WORK_APPROVAL_STATES, WORK_APPROVAL_STATE_LABEL, WORK_DUE_STATES, WORK_INBOX_KINDS, WORK_INBOX_KIND_GROUP_LABEL, WORK_INBOX_KIND_LABEL, WhatYouMayDo, WhereItLives, type WhereItLivesProps, type WhoChanged, WhoChangedSource, WithheldValue, actorBadge, actorWords, addDays, announceTableArchived, applyLook, archiveConfirmSentence, archivedRowLine, asRefusal, askableFields, blockFromSpec, bodyForReading, bodyFromKeys, calendarDayLabel, calendarDayOf, cameFromLine, cardTitleField, cardWords, carriesTimeOfDay, cellState, choiceAddition, choiceAskSentence, choiceListPatch, choiceNudgeOf, choiceRowsFrom, chooseSurface, colorFromTheValue, columnDeclarationFor, columnForField, conditionInWords, conditionIsDrawable, conditionIsSimple, conditionValue, controlFor, currencyCodeFor, customFieldRequestProblems, dashboardDeclareArgs, dashboardFromSummary, dateFormatFor, dateText, dayAt, dayKeyOf, daysBetween, declareView, defaultViewOf, designatedLayoutOf, drawnSignatureOf, drillDimensionsOf, drillMeasuresOf, drillPathsOf, drillWhere, editorKindFor, ensureSystemTable, entityReferenceSpec, envelopeFor, fieldIsEditable, fieldName, fieldToken, fieldTypeChoice, fieldTypeLabel, footerOf, formDeclareArgs, formFromSummary, formPresentation, formatForField, freeColumnName, freshFormName, gridContextKey, gridContextSnapshot, groupInbox, groupLabel, groupableFields, handOrderLine, handOrderSortState, hasTimePart, hintForAPerson, hintIsMachineIdentity, humanize, idsOf, isChoiceAddition, isDateField, isEngineerText, isId, isKeptTable, isMachineIdentity, isParityFieldType, isPlainFieldType, isRelationFieldType, isSignatureField, isValueSet, keepLook, keptByTheApp, keyFor, kindsWithNoChoice, laneFor, lastChangeSentence, lookDiffers, lookDocument, lookFromDocument, lookPart, looksLikeId, machineIdentityIn, mayNotRestoreLine, memberName, moveRecordValue, nextInWords, nextSummaryAt, notAChoiceSentence, onlyCandidate, openingRail, openingView, packOverlaps, pageViewFromParam, parityTypesWithNoExplanation, parseGridPresentation, personActor, personRecordForMember, pickableTypeOf, pointsAtRecords, presentationDocument, presentationIsEmpty, previewLine, previewWords, publiclyAnswerable, railFromParam, readLooks, recordName, recordNameIn, recordsDataSource, refusal, refusalForAPerson, refusalFromThrown, refusalLineForAPerson, refusalOr, renderValue, rescheduledValue, resolveTableStyle, revokeConsequence, rowName, rowNameIn, saveToViewPlan, saveViewPatch, scalarText, seedIsSatisfied, shapesOfSource, shareUnavailableReason, signatureWords, singularNoun, snoozeChoices, specFromBlock, storeDecidesRights, storeKeepsLayout, storePublishesKind, styleFromDecorations, submissionStamp, surfaceChosen, tableName, tableNameProblem, tableOpening, tablePickerEntries, tableRightsAt, unknownRailLine, unknownViewLine, useCanShare, useChoiceNudge, useDrill, useDrillAnswers, useDrillDefinition, useEmbedHandshake, useEnrichCells, useGridEditing, useLabelWait, useMeasuredWidth, useMyChecklistSteps, usePickerTables, useRecordLabels, useRecordMoves, useRecordRights, useRecordsUi, useRowColorBy, useRowRights, useSystemTable, useTableRights, useTableToolbarSlot, useViewRecords, useWhoChanged, viewDocument, viewFromRow, viewKeysFor, viewNeedFor, viewPatchDocument, viewSettings, viewSettingsFor, viewSettingsPatch, visibilityLaneFor, whatIsMissing, whatIsMissingForEntityReference, whatTheChoiceListIsMissing, whenWords, whyNotAskable, withheldNoticeOf, withheldSentence, withoutAddition, wordsList };
|