@ai-matrx/records-ui 0.95.17 → 0.95.19

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
@@ -3,8 +3,8 @@ import { ReactNode, KeyboardEvent, ReactElement, ComponentType, RefObject, SVGAt
3
3
  import * as _ai_matrx_records from '@ai-matrx/records';
4
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, ImportRun, DeclarableFieldKind, NewerFieldKind, ParityFieldType, NewFieldDeclaration, ChoiceRehome, FieldOptionEdit, StoredRecord, ChoiceNudge, HiddenFieldNotice, ValueEnvelope, ChecklistRequirementKind, ContextPolicy, WorkDueState, FieldSensitivity, StageRuleOnFail, SubscriptionCadence, WorkApprovalState, WorkInboxKind, FieldKind, ArchiveLane, ArchivedRow, WorkInboxView, WorkInboxItem, PortalAccent, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, PublicPicture, PortalStyle, 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
5
  import { ReversibleAnnouncement } from '@ai-matrx/kit/reversible';
6
- import { W as WhatYouMayDo, T as TableActionHost, O as ObjectAction, a as ObjectActionIcon } from './objectActions-CUR8KdPr.cjs';
7
- export { A as ACTION_CHECKING_ACCESS_REASON, b as ACTION_NOT_HERE_REASON, c as ACTION_NO_ACCESS_REASON, d 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, e as OBJECT_ACTION_GROUPS, f as ObjectActionDropdownEntry, g as ObjectActionGroup, h as ObjectActionGroupDef, i as ObjectActionSection, S as STANDARD_VERBS, j as STRIP_FEATURE_ROWS, k as StandardVerbId, l as StripAndRows, m as TableActionSubject, n as TableActionsInput, o as dropdownActionIds, p as dropdownActions, q as groupObjectActions, r as levelNeededFor, s as rightsReason, t as tableActions, u as tableLink, v as toDropdownEntries, w as toStripAndRows, x as whatYouMayDo, y as whatYouMayDoWithTable, z as withExtensions } from './objectActions-CUR8KdPr.cjs';
6
+ import { W as WhatYouMayDo, T as TableActionHost, O as ObjectAction, a as ObjectActionIcon } from './objectActions-XkhxU-DP.cjs';
7
+ export { A as ACTION_CHECKING_ACCESS_REASON, b as ACTION_NOT_HERE_REASON, c as ACTION_NO_ACCESS_REASON, d 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, e as OBJECT_ACTION_GROUPS, f as ObjectActionDropdownEntry, g as ObjectActionGroup, h as ObjectActionGroupDef, i as ObjectActionSection, S as STANDARD_VERBS, j as STRIP_FEATURE_ROWS, k as StandardVerbId, l as StripAndRows, m as TableActionSubject, n as TableActionsInput, o as dropdownActionIds, p as dropdownActions, q as groupObjectActions, r as levelNeededFor, s as rightsReason, t as tableActions, u as tableLink, v as toDropdownEntries, w as toStripAndRows, x as whatYouMayDo, y as whatYouMayDoWithTable, z as withExtensions } from './objectActions-XkhxU-DP.cjs';
8
8
  import { Uuid, Field as Field$1, ReadRow as ReadRow$1, StoreFilter as StoreFilter$1, useRecordsClient } from '@ai-matrx/records/react';
9
9
  import { TableStyle, GroupAggregateSpec, GroupOrder, ChoiceColorLookup, MatrxTableCardProps, StyleColor, MatrxDrillDimension, MatrxDrillMeasure, MatrxDrillFilter, MatrxDrillQuestion, MatrxDataTableDrillConfig, MatrxDrillAnswers } from '@ai-matrx/design-system/data-table';
10
10
  import { FieldFormatConfig } from '@ai-matrx/design-system/field-formats';
@@ -1914,7 +1914,7 @@ declare const LAYOUT_FIELD_KIND: Record<ViewLayout, ViewNeedKind | null>;
1914
1914
  * WHICH VIEW A LINK NAMES — the address bar as a first-class control.
1915
1915
  *
1916
1916
  * 🚨 THE DEFECT THIS CLOSES (lane FRONT-DOOR, 2026-09-21; VERIFIER-8 HIGH-2).
1917
- * `/data-v2/<table>?view=kanban` returned 200 and rendered THE GRID. The
1917
+ * `/data/<table>?view=kanban` returned 200 and rendered THE GRID. The
1918
1918
  * switcher was there, the four buttons worked, and the parameter was read by
1919
1919
  * nobody — so a person who bookmarked a board, or sent one to a colleague, got
1920
1920
  * a grid, and nothing on the screen said the view had been dropped. A link that
@@ -5694,7 +5694,7 @@ interface TablesHomeProps {
5694
5694
  */
5695
5695
  makingOnly?: boolean | undefined;
5696
5696
  /**
5697
- * THE HOST'S OWN BUTTONS ASK (merged-grid review 2, J6: "New table" sat ~1,700 px down /data-v2,
5697
+ * THE HOST'S OWN BUTTONS ASK (merged-grid review 2, J6: "New table" sat ~1,700 px down /data,
5698
5698
  * then as a row of its own). A host whose page header already has an action bar puts "New table"
5699
5699
  * and "Start from an example" THERE and passes how many times each was pressed; this list then
5700
5700
  * draws no button row of its own, and opens the name box / the examples when asked. Absent: the
@@ -5772,7 +5772,7 @@ interface TablePageProps {
5772
5772
  *
5773
5773
  * 🚨 THE DEAD LINK THIS CLOSES (lane SCREENS-2, 2026-09-20). `ActionInbox` has always
5774
5774
  * handed its host `onOpenRecord(recordId, tableId)`, and the app has always routed that to
5775
- * `/data-v2/<table>?record=<record>` — and NOTHING read the parameter. Pressing Open on a
5775
+ * `/data/<table>?record=<record>` — and NOTHING read the parameter. Pressing Open on a
5776
5776
  * checklist step, an assignment or an agent's proposal landed you on the table with the
5777
5777
  * record still shut, which is the inbox not finishing the sentence it started. Measured in
5778
5778
  * the real app on a dental practice's onboarding steps.
@@ -5851,7 +5851,7 @@ interface TablePageProps {
5851
5851
  *
5852
5852
  * 🚨 THE DEAD LINK THIS CLOSES (lane HUB-FIX, 2026-09-23; VERIFIER-14 item 2).
5853
5853
  * The organization hub lists every form, digest, portal and outside share of
5854
- * an organization, and every one of those rows opened `/data-v2/<table>` —
5854
+ * an organization, and every one of those rows opened `/data/<table>` —
5855
5855
  * the table's GRID — because nothing in this page could be addressed below
5856
5856
  * the layout: the rails were `useState` with no prop and no URL spelling. A
5857
5857
  * person who clicked "Spring drain-cleaning intake" landed on 400 rows of jobs
@@ -6407,7 +6407,7 @@ interface RecordActionsInput {
6407
6407
  rights: WhatYouMayDo;
6408
6408
  host: RecordActionHost;
6409
6409
  }
6410
- /** The one link to a record: the table page with the record open, `<origin>/data-v2/<table>?record=<id>`. */
6410
+ /** The one link to a record: the table page with the record open, `<origin>/data/<table>?record=<id>`. */
6411
6411
  declare function recordLink(tableId: string, recordId: string, origin?: string): string;
6412
6412
  /**
6413
6413
  * THE RECORD'S ACTIONS, in the one order. Same ids, same order, same verbs for every seat and every
package/dist/index.d.ts CHANGED
@@ -3,8 +3,8 @@ import { ReactNode, KeyboardEvent, ReactElement, ComponentType, RefObject, SVGAt
3
3
  import * as _ai_matrx_records from '@ai-matrx/records';
4
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, ImportRun, DeclarableFieldKind, NewerFieldKind, ParityFieldType, NewFieldDeclaration, ChoiceRehome, FieldOptionEdit, StoredRecord, ChoiceNudge, HiddenFieldNotice, ValueEnvelope, ChecklistRequirementKind, ContextPolicy, WorkDueState, FieldSensitivity, StageRuleOnFail, SubscriptionCadence, WorkApprovalState, WorkInboxKind, FieldKind, ArchiveLane, ArchivedRow, WorkInboxView, WorkInboxItem, PortalAccent, FormSummary, PortalCard, PortalPrincipal, PortalPreviewRow, PublicPicture, PortalStyle, 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
5
  import { ReversibleAnnouncement } from '@ai-matrx/kit/reversible';
6
- import { W as WhatYouMayDo, T as TableActionHost, O as ObjectAction, a as ObjectActionIcon } from './objectActions-CUR8KdPr.js';
7
- export { A as ACTION_CHECKING_ACCESS_REASON, b as ACTION_NOT_HERE_REASON, c as ACTION_NO_ACCESS_REASON, d 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, e as OBJECT_ACTION_GROUPS, f as ObjectActionDropdownEntry, g as ObjectActionGroup, h as ObjectActionGroupDef, i as ObjectActionSection, S as STANDARD_VERBS, j as STRIP_FEATURE_ROWS, k as StandardVerbId, l as StripAndRows, m as TableActionSubject, n as TableActionsInput, o as dropdownActionIds, p as dropdownActions, q as groupObjectActions, r as levelNeededFor, s as rightsReason, t as tableActions, u as tableLink, v as toDropdownEntries, w as toStripAndRows, x as whatYouMayDo, y as whatYouMayDoWithTable, z as withExtensions } from './objectActions-CUR8KdPr.js';
6
+ import { W as WhatYouMayDo, T as TableActionHost, O as ObjectAction, a as ObjectActionIcon } from './objectActions-XkhxU-DP.js';
7
+ export { A as ACTION_CHECKING_ACCESS_REASON, b as ACTION_NOT_HERE_REASON, c as ACTION_NO_ACCESS_REASON, d 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, e as OBJECT_ACTION_GROUPS, f as ObjectActionDropdownEntry, g as ObjectActionGroup, h as ObjectActionGroupDef, i as ObjectActionSection, S as STANDARD_VERBS, j as STRIP_FEATURE_ROWS, k as StandardVerbId, l as StripAndRows, m as TableActionSubject, n as TableActionsInput, o as dropdownActionIds, p as dropdownActions, q as groupObjectActions, r as levelNeededFor, s as rightsReason, t as tableActions, u as tableLink, v as toDropdownEntries, w as toStripAndRows, x as whatYouMayDo, y as whatYouMayDoWithTable, z as withExtensions } from './objectActions-XkhxU-DP.js';
8
8
  import { Uuid, Field as Field$1, ReadRow as ReadRow$1, StoreFilter as StoreFilter$1, useRecordsClient } from '@ai-matrx/records/react';
9
9
  import { TableStyle, GroupAggregateSpec, GroupOrder, ChoiceColorLookup, MatrxTableCardProps, StyleColor, MatrxDrillDimension, MatrxDrillMeasure, MatrxDrillFilter, MatrxDrillQuestion, MatrxDataTableDrillConfig, MatrxDrillAnswers } from '@ai-matrx/design-system/data-table';
10
10
  import { FieldFormatConfig } from '@ai-matrx/design-system/field-formats';
@@ -1914,7 +1914,7 @@ declare const LAYOUT_FIELD_KIND: Record<ViewLayout, ViewNeedKind | null>;
1914
1914
  * WHICH VIEW A LINK NAMES — the address bar as a first-class control.
1915
1915
  *
1916
1916
  * 🚨 THE DEFECT THIS CLOSES (lane FRONT-DOOR, 2026-09-21; VERIFIER-8 HIGH-2).
1917
- * `/data-v2/<table>?view=kanban` returned 200 and rendered THE GRID. The
1917
+ * `/data/<table>?view=kanban` returned 200 and rendered THE GRID. The
1918
1918
  * switcher was there, the four buttons worked, and the parameter was read by
1919
1919
  * nobody — so a person who bookmarked a board, or sent one to a colleague, got
1920
1920
  * a grid, and nothing on the screen said the view had been dropped. A link that
@@ -5694,7 +5694,7 @@ interface TablesHomeProps {
5694
5694
  */
5695
5695
  makingOnly?: boolean | undefined;
5696
5696
  /**
5697
- * THE HOST'S OWN BUTTONS ASK (merged-grid review 2, J6: "New table" sat ~1,700 px down /data-v2,
5697
+ * THE HOST'S OWN BUTTONS ASK (merged-grid review 2, J6: "New table" sat ~1,700 px down /data,
5698
5698
  * then as a row of its own). A host whose page header already has an action bar puts "New table"
5699
5699
  * and "Start from an example" THERE and passes how many times each was pressed; this list then
5700
5700
  * draws no button row of its own, and opens the name box / the examples when asked. Absent: the
@@ -5772,7 +5772,7 @@ interface TablePageProps {
5772
5772
  *
5773
5773
  * 🚨 THE DEAD LINK THIS CLOSES (lane SCREENS-2, 2026-09-20). `ActionInbox` has always
5774
5774
  * handed its host `onOpenRecord(recordId, tableId)`, and the app has always routed that to
5775
- * `/data-v2/<table>?record=<record>` — and NOTHING read the parameter. Pressing Open on a
5775
+ * `/data/<table>?record=<record>` — and NOTHING read the parameter. Pressing Open on a
5776
5776
  * checklist step, an assignment or an agent's proposal landed you on the table with the
5777
5777
  * record still shut, which is the inbox not finishing the sentence it started. Measured in
5778
5778
  * the real app on a dental practice's onboarding steps.
@@ -5851,7 +5851,7 @@ interface TablePageProps {
5851
5851
  *
5852
5852
  * 🚨 THE DEAD LINK THIS CLOSES (lane HUB-FIX, 2026-09-23; VERIFIER-14 item 2).
5853
5853
  * The organization hub lists every form, digest, portal and outside share of
5854
- * an organization, and every one of those rows opened `/data-v2/<table>` —
5854
+ * an organization, and every one of those rows opened `/data/<table>` —
5855
5855
  * the table's GRID — because nothing in this page could be addressed below
5856
5856
  * the layout: the rails were `useState` with no prop and no URL spelling. A
5857
5857
  * person who clicked "Spring drain-cleaning intake" landed on 400 rows of jobs
@@ -6407,7 +6407,7 @@ interface RecordActionsInput {
6407
6407
  rights: WhatYouMayDo;
6408
6408
  host: RecordActionHost;
6409
6409
  }
6410
- /** The one link to a record: the table page with the record open, `<origin>/data-v2/<table>?record=<id>`. */
6410
+ /** The one link to a record: the table page with the record open, `<origin>/data/<table>?record=<id>`. */
6411
6411
  declare function recordLink(tableId: string, recordId: string, origin?: string): string;
6412
6412
  /**
6413
6413
  * THE RECORD'S ACTIONS, in the one order. Same ids, same order, same verbs for every seat and every
package/dist/index.js CHANGED
@@ -19771,9 +19771,27 @@ function GridBody({
19771
19771
  return { written, readBack, missing, refusals };
19772
19772
  }, [pastePlan, client, tableId, records, merged, applyPasteAsOne, versions]);
19773
19773
  const columnIds = useMemo32(() => ordered.map((field2) => field2.key), [ordered]);
19774
+ const lookWrites = useRef26(null);
19774
19775
  const writeLook = useCallback23(
19775
- (next) => onPresentationChange?.(next),
19776
- [onPresentationChange]
19776
+ (next) => {
19777
+ if (!onPresentationChange) return;
19778
+ const held = lookWrites.current?.base === presentation ? lookWrites.current : null;
19779
+ const merged2 = { ...held?.merged ?? presentation };
19780
+ const before = presentation;
19781
+ const after = next;
19782
+ for (const key of /* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)])) {
19783
+ if (before[key] === after[key]) continue;
19784
+ if (after[key] === void 0) delete merged2[key];
19785
+ else merged2[key] = after[key];
19786
+ }
19787
+ const entry = { base: presentation, merged: merged2 };
19788
+ lookWrites.current = entry;
19789
+ queueMicrotask(() => {
19790
+ if (lookWrites.current === entry) lookWrites.current = null;
19791
+ });
19792
+ onPresentationChange(merged2);
19793
+ },
19794
+ [onPresentationChange, presentation]
19777
19795
  );
19778
19796
  const chooseSummary = useCallback23(
19779
19797
  (key, op2) => {
@@ -19782,9 +19800,9 @@ function GridBody({
19782
19800
  else next[key] = op2;
19783
19801
  setLocalSummaries(next);
19784
19802
  const { summaries: _dropped, ...rest } = presentation;
19785
- onPresentationChange?.(Object.keys(next).length > 0 ? { ...rest, summaries: next } : rest);
19803
+ writeLook(Object.keys(next).length > 0 ? { ...rest, summaries: next } : rest);
19786
19804
  },
19787
- [chosenSummaries, presentation, onPresentationChange]
19805
+ [chosenSummaries, presentation, writeLook]
19788
19806
  );
19789
19807
  const handToAgent = useCallback23(
19790
19808
  (action3, row) => host.runAgentAction?.({
@@ -21971,7 +21989,7 @@ var OBJECT_ACTION_GROUPS = [
21971
21989
  var GROUP_IDS = new Set(OBJECT_ACTION_GROUPS.map((g) => g.id));
21972
21990
  var DEFAULT_ACTION_ORIGIN = "https://www.aimatrx.com";
21973
21991
  function tableLink(tableId, origin = DEFAULT_ACTION_ORIGIN) {
21974
- return `${origin.replace(/\/+$/, "")}/data-v2/${encodeURIComponent(tableId)}`;
21992
+ return `${origin.replace(/\/+$/, "")}/data/${encodeURIComponent(tableId)}`;
21975
21993
  }
21976
21994
  function makeDefaultWords(layoutLabel) {
21977
21995
  return layoutLabel ? `Make ${layoutLabel} the default` : "Make this the default";
@@ -25705,7 +25723,7 @@ import {
25705
25723
 
25706
25724
  // src/recordActions.ts
25707
25725
  function recordLink(tableId, recordId, origin = DEFAULT_ACTION_ORIGIN) {
25708
- return `${origin.replace(/\/+$/, "")}/data-v2/${encodeURIComponent(tableId)}?record=${encodeURIComponent(recordId)}`;
25726
+ return `${origin.replace(/\/+$/, "")}/data/${encodeURIComponent(tableId)}?record=${encodeURIComponent(recordId)}`;
25709
25727
  }
25710
25728
  var NOOP2 = () => {
25711
25729
  };