react-semaphor 0.1.545 → 0.1.546
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/analytics-protocol/index.js +405 -442
- package/dist/assistant-context/index.js +1 -1
- package/dist/assistant-protocol/index.js +100 -76
- package/dist/brand-studio/index.js +4 -4
- package/dist/briefings/index.js +6 -6
- package/dist/chunks/{add-to-dashboard-BuAqfA2Y.js → add-to-dashboard-BQRAAnc3.js} +55 -33
- package/dist/chunks/{analytics-base-schemas-BFAoRlkU.js → analytics-base-schemas-BKs3flFS.js} +2 -2
- package/dist/chunks/{assistant-chat-D7sWTypJ.js → assistant-chat-BPXhulAx.js} +2826 -2595
- package/dist/chunks/{bookmark-state-CXw7lZ50.js → bookmark-state-C4vetoa0.js} +7 -8
- package/dist/chunks/column-catalog-BYnochWQ.js +3363 -0
- package/dist/chunks/comparison-window-caption-C2xF-eWw.js +1433 -0
- package/dist/chunks/{context-ClREvqCZ.js → context-BerEBuFR.js} +11 -6
- package/dist/chunks/custom-visual-inputs-CkJW9pBS.js +295 -0
- package/dist/chunks/{dashboard-B1tMju0u.js → dashboard-C3CoKbGY.js} +1 -1
- package/dist/chunks/dashboard-briefing-launcher-Be4h-7My.js +3734 -0
- package/dist/chunks/dashboard-controls-bxPrlSyp.js +2307 -0
- package/dist/chunks/{dashboard-json-CoYRPqxx.js → dashboard-json-BrjxIiRt.js} +5 -5
- package/dist/chunks/{document-dashboard-inputs-BesAHZvB.js → document-dashboard-inputs-CRVHpIHp.js} +872 -974
- package/dist/chunks/{edit-dashboard-visual-JPtNfJRb.js → edit-dashboard-visual-DYYYDjY6.js} +2361 -2447
- package/dist/chunks/{filter-value-text-ff7osJr7.js → filter-value-text-Ddf55Ku1.js} +9 -9
- package/dist/chunks/global-date-filter-utils-9d6m9-FE.js +11859 -0
- package/dist/chunks/index-CtoK1Lgu.js +586 -0
- package/dist/chunks/{index-DRWiuqyd.js → index-DkQkMKa1.js} +80 -79
- package/dist/chunks/list-filter-DsaTbM3J.js +15 -0
- package/dist/chunks/matrix-analytical-definition-B9vW-osb.js +717 -0
- package/dist/chunks/{matrix-card-DjwWcCo8.js → matrix-card-LiMEipvq.js} +3 -3
- package/dist/chunks/{matrix-formatter-DnCyRXJE.js → matrix-formatter-DWEeC0_c.js} +44 -44
- package/dist/chunks/{matrix-member-presentation-CQGdVks6.js → matrix-member-presentation-DqzG-UhQ.js} +1 -1
- package/dist/chunks/{matrix-operation-contract-8OIO4gob.js → matrix-operation-contract-D6vYkZK4.js} +72 -72
- package/dist/chunks/{metric-comparison-DEwi9uc2.js → metric-comparison-zpGw4lD6.js} +2 -2
- package/dist/chunks/normalize-dashboard-for-dirty-check-XKgH3GFX.js +119 -0
- package/dist/chunks/{pivot-header-presentation-DHcx1XGQ.js → pivot-header-presentation-CQnIDtUv.js} +1 -1
- package/dist/chunks/{pivot-result-identity-DJhXXcns.js → pivot-result-identity-C-Q1j1Wb.js} +1 -1
- package/dist/chunks/{pivot-result-lifecycle-DM4CyGKs.js → pivot-result-lifecycle-pwq3b7LC.js} +571 -380
- package/dist/chunks/{raw-temporal-contract-C51YG48G.js → raw-temporal-contract-WuXA8jBP.js} +1 -1
- package/dist/chunks/{raw-temporal-presentation-C3mUgnEx.js → raw-temporal-presentation-CBzrDOjM.js} +8 -8
- package/dist/chunks/{report-preferences-dialog-DUtuUL_5.js → report-preferences-dialog-4QEZWe5U.js} +111 -112
- package/dist/chunks/{report-runtime-context-Dq8XyODK.js → report-runtime-context-hWiTCzFV.js} +2 -2
- package/dist/chunks/resolve-dashboard-input-context-UpK_LBpL.js +5677 -0
- package/dist/chunks/{saved-dashboard-context-LrF_kW0l.js → saved-dashboard-context-D_I3Lxk0.js} +34 -34
- package/dist/chunks/{selection-reducer-Dj_8xD69.js → selection-reducer-CJzkTZio.js} +15 -15
- package/dist/chunks/{semaphor-ready-indicator-BxF96Yhv.js → semaphor-ready-indicator-4zpRHE-X.js} +45823 -47304
- package/dist/chunks/{shelf-drop-preview-context-CNaM_Gmh.js → shelf-drop-preview-context-Cfw7TRAx.js} +84 -84
- package/dist/chunks/{source-entity-resolution-BYn9giz3.js → source-entity-resolution-BIGRvtbG.js} +13 -13
- package/dist/chunks/{switch-uDtPgQlQ.js → switch-CEBOR4n7.js} +3 -3
- package/dist/chunks/{table-export-sheet-YzMioA7Y.js → table-export-sheet-4X9mAG3V.js} +1 -1
- package/dist/chunks/table-settings-CunhoDUi.js +605 -0
- package/dist/chunks/{temporal-bucket-D7NBrrtL.js → temporal-bucket-CQOSbv9-.js} +26 -26
- package/dist/chunks/{token-types-DBbZVQsm.js → token-types-BMqRmT-C.js} +1 -1
- package/dist/chunks/{use-create-flow-overlay-state-CjB7ig1o.js → use-create-flow-overlay-state-DZBZiiD-.js} +101 -101
- package/dist/chunks/{validators-DMHTpf7a.js → validators-C-aOQlTB.js} +713 -658
- package/dist/chunks/{relative-date-label-Bk2j94pA.js → zoned-wall-clock-MulfA26h.js} +64 -21
- package/dist/dashboard/index.js +2 -2
- package/dist/dashboard-authoring/index.js +1802 -1149
- package/dist/data-app-sdk/index.js +6 -6
- package/dist/data-app-sdk-adapters/index.js +3 -3
- package/dist/data-app-sdk-validation/index.js +14 -14
- package/dist/format-utils/index.js +133 -133
- package/dist/index.js +192 -186
- package/dist/layouts/index.js +5 -242
- package/dist/report-runtime-context/index.js +2 -2
- package/dist/shared/index.js +4 -5
- package/dist/style.css +1 -1
- package/dist/surfboard/index.js +2 -2
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/surfboard/arrange-layout-button.d.ts +8 -0
- package/dist/types/components/surfboard/screen-size-preview-button.d.ts +7 -0
- package/dist/types/index.js +6 -6
- package/dist/types/lib/charts/table-chart-types.d.ts +4 -0
- package/dist/types/lib/charts/types.d.ts +2 -2
- package/dist/types/lib/dashboard-inputs/dashboard-input-values.d.ts +6 -0
- package/dist/types/lib/dashboard-inputs/filter-settings.d.ts +2 -0
- package/dist/types/lib/dashboard-inputs/prepare-loaded-dashboard.d.ts +15 -0
- package/dist/types/lib/matrix-table/matrix-editor.d.ts +52 -0
- package/dist/types/lib/query-context/dashboard-filter-mapping-resolution.d.ts +69 -0
- package/dist/types/lib/stores/dashboard-store.d.ts +125 -6
- package/dist/types/lib/types/common-types.d.ts +8 -0
- package/dist/types/lib/types/explorer-types.d.ts +10 -0
- package/dist/types/lib/types/semantic-types.d.ts +84 -0
- package/dist/types/lib/utils/build-saved-editor-card.d.ts +20 -0
- package/dist/types/lib/utils/card-type-change.d.ts +16 -0
- package/dist/types/lib/utils/field-availability-context.d.ts +25 -0
- package/dist/types/lib/utils/field-placement.d.ts +96 -0
- package/dist/types/lib/utils/field-state-calculator.d.ts +161 -0
- package/dist/types/lib/utils/qualified-entity-name.d.ts +2 -0
- package/dist/types/shared/analytics-protocol/field-provenance.d.ts +89 -0
- package/dist/types/shared/analytics-protocol/index.d.ts +2 -0
- package/dist/types/shared/analytics-protocol/query-policies.d.ts +52 -0
- package/dist/types/shared/analytics-protocol/time-window-schema.d.ts +1 -1
- package/dist/types/shared/analytics-protocol/time-window.d.ts +40 -1
- package/dist/types/shared/assistant-context/saved-dashboard-context.d.ts +4 -1
- package/dist/types/shared/assistant-protocol/answer-text.d.ts +20 -0
- package/dist/types/shared/assistant-protocol/context.d.ts +21 -21
- package/dist/types/shared/assistant-protocol/index.d.ts +1 -0
- package/dist/types/shared/assistant-protocol/limits.d.ts +6 -1
- package/dist/types/shared/assistant-protocol/parts.d.ts +43 -3
- package/dist/types/shared/assistant-protocol/request.d.ts +14 -2
- package/dist/types/shared/dashboard-authoring/calculated-field-identity.d.ts +3 -0
- package/dist/types/shared/dashboard-authoring/changes/card-query-part.d.ts +487 -0
- package/dist/types/shared/dashboard-authoring/changes/card-types.d.ts +34 -0
- package/dist/types/shared/dashboard-authoring/changes/dashboard-change.d.ts +7886 -0
- package/dist/types/shared/dashboard-authoring/changes/diagnostics.d.ts +43 -0
- package/dist/types/shared/dashboard-authoring/changes/read-card-query.d.ts +54 -0
- package/dist/types/shared/dashboard-authoring/changes/resolve-dashboard-changes.d.ts +89 -0
- package/dist/types/shared/dashboard-authoring/column-catalog.d.ts +32 -0
- package/dist/types/shared/dashboard-authoring/contracts.d.ts +0 -55
- package/dist/types/shared/dashboard-authoring/control-execution-contract.d.ts +24 -14
- package/dist/types/shared/dashboard-authoring/dashboard-card-source-index.d.ts +9 -1
- package/dist/types/shared/dashboard-authoring/dashboard-input-scope.d.ts +26 -0
- package/dist/types/shared/dashboard-authoring/filter-applicability.d.ts +75 -0
- package/dist/types/shared/dashboard-authoring/index.d.ts +18 -2
- package/dist/types/shared/dashboard-authoring/operations/apply-dashboard-operations.d.ts +10 -37
- package/dist/types/shared/dashboard-authoring/operations/operation-types.d.ts +189 -0
- package/dist/types/shared/dashboard-authoring/outline/outline-dashboard.d.ts +94 -0
- package/dist/types/shared/dashboard-authoring/outline/outline-filters.d.ts +78 -0
- package/dist/types/shared/dashboard-authoring/validators.d.ts +1 -2
- package/dist/types/shared/layouts/engine/grid.d.ts +25 -0
- package/dist/types/shared/layouts/engine/index.d.ts +4 -0
- package/dist/types/shared/layouts/engine/sheet-layout.d.ts +7 -0
- package/dist/types/shared/layouts/engine/types.d.ts +125 -0
- package/dist/types/shared/layouts/index.d.ts +1 -2
- package/package.json +2 -2
- package/dist/chunks/apply-dashboard-operations-CZEMsx8E.js +0 -2080
- package/dist/chunks/calendar-day-equality-dvoQp1xW.js +0 -410
- package/dist/chunks/comparison-window-caption-D4E6IHPD.js +0 -1624
- package/dist/chunks/custom-visual-inputs-DLCD9Y5V.js +0 -329
- package/dist/chunks/dashboard-briefing-launcher-CePgIu0Z.js +0 -3720
- package/dist/chunks/dashboard-controls-Cq05n3e0.js +0 -2315
- package/dist/chunks/dashboard-filter-value-compatibility-CwQ_iSNb.js +0 -108
- package/dist/chunks/matrix-analytical-definition-C7Gb0e12.js +0 -117
- package/dist/chunks/normalize-dashboard-for-dirty-check-Bk3VYv_q.js +0 -67
- package/dist/chunks/numeric-presentation-7X_IrD58.js +0 -5226
- package/dist/chunks/resolve-dashboard-input-context-DJ2tICwz.js +0 -9415
- package/dist/chunks/stable-serialize-CfqXeiBP.js +0 -6
- package/dist/chunks/table-settings-CLZocegs.js +0 -501
- package/dist/chunks/use-debounced-dirty-check-BwAbnX_5.js +0 -59
- package/dist/chunks/zoned-wall-clock-BkxV9jS2.js +0 -46
- package/dist/types/shared/dashboard-authoring/change-compiler.d.ts +0 -7
- package/dist/types/shared/dashboard-authoring/layout-compiler.d.ts +0 -2
- package/dist/types/shared/layouts/create-frame-layouts.d.ts +0 -27
- package/dist/types/shared/layouts/frame-layouts.d.ts +0 -23
|
@@ -1,40 +1,13 @@
|
|
|
1
|
-
import { TDashboard
|
|
1
|
+
import { TDashboard } from '../../../lib/types/common-types.js';
|
|
2
|
+
import { DashboardOperation, DashboardOperationResult, OperationContext } from './operation-types.js';
|
|
3
|
+
export type { CardUpdate, CreatedEntity, DashboardOperation, DashboardOperationResult, DashboardRuntimeEffect, FrameCommit, FramePlacement, OperationContext, OperationDescription, OperationFailureCode, } from './operation-types.js';
|
|
2
4
|
/**
|
|
3
5
|
* Edits to a dashboard as operations on one pure reducer (analytics agent
|
|
4
|
-
* Plan 1
|
|
5
|
-
*
|
|
6
|
-
* server
|
|
7
|
-
*
|
|
6
|
+
* Plan 1 AG-D14; MCP dashboard editing SPEC 3.3, 3.8). The one writer of the
|
|
7
|
+
* saved document for these edits: the editor stores, the change resolver's
|
|
8
|
+
* dry run and the server's apply all call it. It writes only the document; it
|
|
9
|
+
* returns what it created, one plain sentence per change, and the runtime
|
|
10
|
+
* effects a live editor applies to its own state (DE-D49). It never mints ids
|
|
11
|
+
* and never reads the clock (S-INV-1).
|
|
8
12
|
*/
|
|
9
|
-
|
|
10
|
-
export type DashboardFramePlacement = 'start' | 'end' | {
|
|
11
|
-
beside: string;
|
|
12
|
-
};
|
|
13
|
-
export type DashboardOperation = {
|
|
14
|
-
op: 'frame.add';
|
|
15
|
-
sheetId: string;
|
|
16
|
-
/** The frame with its cards, ids included. */
|
|
17
|
-
frame: TFrame;
|
|
18
|
-
/** Default `end`. */
|
|
19
|
-
placement?: DashboardFramePlacement;
|
|
20
|
-
};
|
|
21
|
-
export type DashboardOperationFailureCode = 'sheet_not_found'
|
|
22
|
-
/** A document sheet places cards through its document, not its grid. */
|
|
23
|
-
| 'sheet_not_a_grid' | 'frame_id_taken';
|
|
24
|
-
export type DashboardOperationResult = {
|
|
25
|
-
ok: true;
|
|
26
|
-
dashboard: TDashboard;
|
|
27
|
-
} | {
|
|
28
|
-
ok: false;
|
|
29
|
-
failedAt: {
|
|
30
|
-
index: number;
|
|
31
|
-
op: DashboardOperation['op'];
|
|
32
|
-
code: DashboardOperationFailureCode;
|
|
33
|
-
message: string;
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Applies the operations in order, all or nothing. Never changes its input:
|
|
38
|
-
* the result shares every sheet it did not touch.
|
|
39
|
-
*/
|
|
40
|
-
export declare function applyDashboardOperations(dashboard: TDashboard, operations: DashboardOperation[]): DashboardOperationResult;
|
|
13
|
+
export declare function applyDashboardOperations(dashboard: TDashboard, operations: readonly DashboardOperation[], context: OperationContext): DashboardOperationResult;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { EmbeddedFilterDashboardInput, TDashboard, TFrame } from '../../../lib/types/common-types.js';
|
|
2
|
+
import { FilterSettingsChange, FilterValueEffect } from '../../../lib/dashboard-inputs/filter-settings.js';
|
|
3
|
+
import { DashboardFilterBoundCardApplication } from '../dashboard-filter-mapping-types.js';
|
|
4
|
+
import { Field } from '../../../lib/types/explorer-types.js';
|
|
5
|
+
import { TChartType } from '../../../lib/charts/types.js';
|
|
6
|
+
import { CalendarContext } from '../../report-runtime-context/index.js';
|
|
7
|
+
import { CardQueryPart, StatedLabel } from '../changes/card-query-part.js';
|
|
8
|
+
import { FramePlacement } from '../../layouts/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* The resolved operations the dashboard reducer applies (MCP dashboard
|
|
11
|
+
* editing SPEC 3.3, 3.8). Every id an operation creates is in it; the reducer
|
|
12
|
+
* never generates ids and never reads the clock (S-INV-1).
|
|
13
|
+
*/
|
|
14
|
+
/** Where a new frame goes on its sheet, by intent (responsive layouts SPEC §2.4). Absent: placed by kind. */
|
|
15
|
+
export type { FramePlacement };
|
|
16
|
+
export type CardUpdate =
|
|
17
|
+
/** Inline title and description edits; `description: null` removes it. */
|
|
18
|
+
{
|
|
19
|
+
kind: 'rename';
|
|
20
|
+
title?: string;
|
|
21
|
+
description?: string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A type transition: the editor's `changeCardType`, then the layout resize.
|
|
25
|
+
* `catalog` is the loaded column catalog a Matrix crossing needs; `newIds`
|
|
26
|
+
* every id the conversion mints, in the order it asks for them (DE-D54).
|
|
27
|
+
*/
|
|
28
|
+
| {
|
|
29
|
+
kind: 'retype';
|
|
30
|
+
type: TChartType;
|
|
31
|
+
catalog?: readonly Field[];
|
|
32
|
+
newIds: string[];
|
|
33
|
+
}
|
|
34
|
+
/** A new computed part for the card's current type; presentation is carried (SPEC 3.4). */
|
|
35
|
+
| {
|
|
36
|
+
kind: 'requery';
|
|
37
|
+
query: CardQueryPart;
|
|
38
|
+
}
|
|
39
|
+
/** Labels a change states on columns it doesn't rebuild, set in place by the label owner; nothing is recompiled (DE-D61). */
|
|
40
|
+
| {
|
|
41
|
+
kind: 'relabel';
|
|
42
|
+
labels: StatedLabel[];
|
|
43
|
+
};
|
|
44
|
+
/** Everything the editor's "Done", Save & Apply and Apply Local commit persists, as one operation (DE-D13). */
|
|
45
|
+
export type FrameCommit = {
|
|
46
|
+
sheetId: string;
|
|
47
|
+
/** The edited frame as the editor built it. Apply Local passes `visualId: undefined`. */
|
|
48
|
+
frame: TFrame;
|
|
49
|
+
/** Other frames on the sheet rewritten during the edit (calculated-field renames), applied with it. */
|
|
50
|
+
rewrittenFrames?: TFrame[];
|
|
51
|
+
/** Sheet calculated fields from the edited frame, persisted on the sheet. */
|
|
52
|
+
sheetCalculatedFields?: Field[];
|
|
53
|
+
/** Dashboard calculated fields rewritten during the edit. */
|
|
54
|
+
dashboardCalculatedFields?: Field[];
|
|
55
|
+
/** True when committed from the visual editor: resize the frame's layouts if its type changed. */
|
|
56
|
+
resizeLayouts: boolean;
|
|
57
|
+
};
|
|
58
|
+
export type DashboardOperation = ({
|
|
59
|
+
op: 'card.add';
|
|
60
|
+
sheetId: string;
|
|
61
|
+
/** The frame with its cards, ids included. */
|
|
62
|
+
frame: TFrame;
|
|
63
|
+
/** By intent; absent: placed by kind (responsive layouts SPEC §4.2). */
|
|
64
|
+
placement?: FramePlacement;
|
|
65
|
+
} | {
|
|
66
|
+
op: 'card.update';
|
|
67
|
+
cardId: string;
|
|
68
|
+
update: CardUpdate;
|
|
69
|
+
} | {
|
|
70
|
+
op: 'card.remove';
|
|
71
|
+
cardId: string;
|
|
72
|
+
}
|
|
73
|
+
/** Arrange a grid sheet by kind (responsive layouts RL-D7, SPEC §4.4); `keepOrder` keeps the reading order. */
|
|
74
|
+
| {
|
|
75
|
+
op: 'layout.arrange';
|
|
76
|
+
sheetId: string;
|
|
77
|
+
keepOrder?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** The editor's whole-frame commit; never produced by the resolver. */
|
|
80
|
+
| {
|
|
81
|
+
op: 'frame.commit';
|
|
82
|
+
commit: FrameCommit;
|
|
83
|
+
}
|
|
84
|
+
/** A new filter input, ids included; its defaults are in its definition, as the editor adds one. */
|
|
85
|
+
| {
|
|
86
|
+
op: 'filter.add';
|
|
87
|
+
input: EmbeddedFilterDashboardInput;
|
|
88
|
+
}
|
|
89
|
+
/** Settings through the editor's core (`applyFilterSettingsChange`); `filterId` is the input id. */
|
|
90
|
+
| {
|
|
91
|
+
op: 'filter.update';
|
|
92
|
+
filterId: string;
|
|
93
|
+
settings: FilterSettingsChange;
|
|
94
|
+
} | {
|
|
95
|
+
op: 'filter.remove';
|
|
96
|
+
filterId: string;
|
|
97
|
+
}
|
|
98
|
+
/** The card's bound entry in the filter's mapping, built as the mapping editor builds one. */
|
|
99
|
+
| {
|
|
100
|
+
op: 'filter.bind';
|
|
101
|
+
filterId: string;
|
|
102
|
+
cardId: string;
|
|
103
|
+
binding: DashboardFilterBoundCardApplication;
|
|
104
|
+
} | {
|
|
105
|
+
op: 'filter.exclude';
|
|
106
|
+
filterId: string;
|
|
107
|
+
cardId: string;
|
|
108
|
+
}) & {
|
|
109
|
+
/** Set by the resolver: the public change this operation came from. Descriptions group by it. */
|
|
110
|
+
changeIndex?: number;
|
|
111
|
+
};
|
|
112
|
+
export type OperationContext = {
|
|
113
|
+
/** The report calendar; filter defaults resolve in it. A proposal's has a fixed anchor (DE-D59). */
|
|
114
|
+
calendar: CalendarContext | null;
|
|
115
|
+
};
|
|
116
|
+
export type CreatedEntity = {
|
|
117
|
+
kind: 'card' | 'filter';
|
|
118
|
+
id: string;
|
|
119
|
+
title: string;
|
|
120
|
+
changeIndex?: number;
|
|
121
|
+
};
|
|
122
|
+
export type OperationDescription = {
|
|
123
|
+
/** Operations with the same changeIndex share one description. */
|
|
124
|
+
changeIndex?: number;
|
|
125
|
+
/** Indexes into the operations list. */
|
|
126
|
+
operations: number[];
|
|
127
|
+
sentence: string;
|
|
128
|
+
};
|
|
129
|
+
/** What a live editor must do to its own state after an operation. The server ignores them (DE-D49). */
|
|
130
|
+
export type DashboardRuntimeEffect =
|
|
131
|
+
/** card.remove, and frame.commit dropping tabs: drop live state keyed by these cards. */
|
|
132
|
+
{
|
|
133
|
+
kind: 'cards_removed';
|
|
134
|
+
cardIds: string[];
|
|
135
|
+
}
|
|
136
|
+
/** frame.commit: re-sync inline filter runtime values from the frame before and after. */
|
|
137
|
+
| {
|
|
138
|
+
kind: 'frame_committed';
|
|
139
|
+
sheetId: string;
|
|
140
|
+
before: TFrame;
|
|
141
|
+
after: TFrame;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* filter.update: `applyFilterSettingsChange`'s value effects, unchanged. One
|
|
145
|
+
* per update, even with none: the store still re-resolves forced selections,
|
|
146
|
+
* as `saveFilterSettings` always has (ledger P3-02).
|
|
147
|
+
*/
|
|
148
|
+
| {
|
|
149
|
+
kind: 'filter_value';
|
|
150
|
+
effects: FilterValueEffect[];
|
|
151
|
+
}
|
|
152
|
+
/** filter.remove: drop the input's live values. */
|
|
153
|
+
| {
|
|
154
|
+
kind: 'input_removed';
|
|
155
|
+
inputId: string;
|
|
156
|
+
};
|
|
157
|
+
export type OperationFailureCode = 'sheet_not_found'
|
|
158
|
+
/** A document sheet places cards through its document, not its grid. */
|
|
159
|
+
| 'sheet_not_a_grid' | 'frame_id_taken' | 'frame_not_found' | 'card_not_found' | 'filter_not_found' | 'filter_id_taken'
|
|
160
|
+
/** The filter settings or mapping fail the input contract; `details.issues` has the core's issues. */
|
|
161
|
+
| 'filter_invalid'
|
|
162
|
+
/** A requery part compiled for another type than the card's. */
|
|
163
|
+
| 'query_type_mismatch'
|
|
164
|
+
/** A requery part that doesn't make a valid card (a Matrix definition the Matrix contract refuses). */
|
|
165
|
+
| 'query_invalid'
|
|
166
|
+
/** A requery would change a part of the card its change doesn't state (DE-D61). */
|
|
167
|
+
| 'query_not_kept'
|
|
168
|
+
/** A conversion asked for more ids than the operation carries. */
|
|
169
|
+
| 'ids_exhausted'
|
|
170
|
+
/** A retype across the Matrix boundary without a catalog. */
|
|
171
|
+
| 'catalog_loading';
|
|
172
|
+
export type DashboardOperationResult = {
|
|
173
|
+
ok: true;
|
|
174
|
+
dashboard: TDashboard;
|
|
175
|
+
created: CreatedEntity[];
|
|
176
|
+
/** One plain sentence per public change (or per operation without a changeIndex). */
|
|
177
|
+
descriptions: OperationDescription[];
|
|
178
|
+
runtimeEffects: DashboardRuntimeEffect[];
|
|
179
|
+
} | {
|
|
180
|
+
ok: false;
|
|
181
|
+
failedAt: {
|
|
182
|
+
index: number;
|
|
183
|
+
op: DashboardOperation['op'];
|
|
184
|
+
code: OperationFailureCode;
|
|
185
|
+
message: string;
|
|
186
|
+
fix?: string;
|
|
187
|
+
details?: Record<string, unknown>;
|
|
188
|
+
};
|
|
189
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { TDashboard } from '../../../lib/types/common-types.js';
|
|
2
|
+
import { FrameWidth } from '../../layouts/index.js';
|
|
3
|
+
import { NotEditableReason, OutlineCardSource } from '../changes/read-card-query.js';
|
|
4
|
+
import { CardQuery, MatrixColumns } from '../changes/dashboard-change.js';
|
|
5
|
+
import { OutlineFilter } from './outline-filters.js';
|
|
6
|
+
import { CalendarContext } from '../../report-runtime-context/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* A dashboard in the change vocabulary (MCP dashboard editing SPEC 3.6,
|
|
9
|
+
* DE-D29, DE-D34): every sheet, every card the shared traversal lists
|
|
10
|
+
* (Document-section cards included, read only), every filter, and what the
|
|
11
|
+
* viewer may do. A pure function of the hydrated dashboard and the viewer
|
|
12
|
+
* (S-INV-8): no clock, no catalog, no network.
|
|
13
|
+
*/
|
|
14
|
+
export type OutlineViewer = {
|
|
15
|
+
dashboardId: string;
|
|
16
|
+
/** `Dashboard.updatedAt`, ISO 8601; the staleness token, never called "version" (DE-D37). */
|
|
17
|
+
updatedAt: string;
|
|
18
|
+
access: {
|
|
19
|
+
canEdit: boolean;
|
|
20
|
+
canCopy: boolean;
|
|
21
|
+
};
|
|
22
|
+
sql: boolean;
|
|
23
|
+
sheetIds?: string[];
|
|
24
|
+
cardIds?: string[];
|
|
25
|
+
/** Above this many cards (after narrowing), queries are left out. Default 50 (DE-D34). */
|
|
26
|
+
maxQueryCards?: number;
|
|
27
|
+
/** The report calendar filter defaults are read in; without one, a fixed calendar at `updatedAt` (S-INV-8). */
|
|
28
|
+
calendar?: CalendarContext;
|
|
29
|
+
};
|
|
30
|
+
export type OutlineCard = {
|
|
31
|
+
cardId: string;
|
|
32
|
+
title: string;
|
|
33
|
+
/** The public type name (DE-D43). */
|
|
34
|
+
type: string;
|
|
35
|
+
source: OutlineCardSource;
|
|
36
|
+
/** Shows a library visual; changing it makes it local (DE-D50). */
|
|
37
|
+
linkedVisualId?: string;
|
|
38
|
+
editable: true;
|
|
39
|
+
/** Absent only when the outline is truncated. */
|
|
40
|
+
query?: CardQuery;
|
|
41
|
+
matrix?: MatrixColumns;
|
|
42
|
+
} | {
|
|
43
|
+
cardId: string;
|
|
44
|
+
title: string;
|
|
45
|
+
type: string;
|
|
46
|
+
source?: OutlineCardSource;
|
|
47
|
+
linkedVisualId?: string;
|
|
48
|
+
editable: false;
|
|
49
|
+
notEditable: {
|
|
50
|
+
reason: NotEditableReason;
|
|
51
|
+
message: string;
|
|
52
|
+
detail?: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export type OutlineSheet = {
|
|
56
|
+
sheetId: string;
|
|
57
|
+
title: string;
|
|
58
|
+
/** Cards can be added only to "dashboard" sheets. */
|
|
59
|
+
kind: 'dashboard' | 'document';
|
|
60
|
+
/** On a Document sheet, its sections' cards (never editable). */
|
|
61
|
+
cards: OutlineCard[];
|
|
62
|
+
/**
|
|
63
|
+
* Grid sheets only: the desktop layout as rows, top to bottom, from the
|
|
64
|
+
* layout engine (responsive layouts RL-D10). Always the whole sheet, even
|
|
65
|
+
* when `cardIds` narrows the cards. Absent on Document sheets.
|
|
66
|
+
*/
|
|
67
|
+
layout?: OutlineLayoutRow[];
|
|
68
|
+
};
|
|
69
|
+
/** One row of a sheet's desktop layout. A tile is a frame: its cards, active first, and its width by intent. Never coordinates (RL-INV-5). */
|
|
70
|
+
export type OutlineLayoutRow = {
|
|
71
|
+
tiles: Array<{
|
|
72
|
+
cardIds: string[];
|
|
73
|
+
width: FrameWidth;
|
|
74
|
+
}>;
|
|
75
|
+
};
|
|
76
|
+
export type DashboardOutline = {
|
|
77
|
+
dashboardId: string;
|
|
78
|
+
title: string;
|
|
79
|
+
updatedAt: string;
|
|
80
|
+
access: {
|
|
81
|
+
canEdit: boolean;
|
|
82
|
+
canCopy: boolean;
|
|
83
|
+
};
|
|
84
|
+
/** Every dataset a card or filter uses. */
|
|
85
|
+
datasets: Array<{
|
|
86
|
+
domainId: string;
|
|
87
|
+
datasetName: string;
|
|
88
|
+
}>;
|
|
89
|
+
sheets: OutlineSheet[];
|
|
90
|
+
filters: OutlineFilter[];
|
|
91
|
+
/** Queries left out because the dashboard has more than `maxQueryCards` cards (DE-D34). */
|
|
92
|
+
truncated?: true;
|
|
93
|
+
};
|
|
94
|
+
export declare function outlineDashboard(dashboard: TDashboard, viewer: OutlineViewer): DashboardOutline;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { TDashboard } from '../../../lib/types/common-types.js';
|
|
2
|
+
import { FilterInputEntry } from '../filter-model/index.js';
|
|
3
|
+
import { CalendarContext } from '../../report-runtime-context/index.js';
|
|
4
|
+
import { FilterValue, TimeWindow } from '../changes/dashboard-change.js';
|
|
5
|
+
/**
|
|
6
|
+
* Every dashboard filter in the change vocabulary (MCP dashboard editing
|
|
7
|
+
* DE-D58, SPEC 3.6). A field filter on one semantic dataset shown on every
|
|
8
|
+
* grid sheet or a list of sheets is editable; any other filter is a
|
|
9
|
+
* read-only summary with its reach and a reason, never left out and never
|
|
10
|
+
* given invented coordinates. Reach is read the way each card runs the
|
|
11
|
+
* filter (`describeDashboardFilterCardReach`).
|
|
12
|
+
*/
|
|
13
|
+
export type FilterNotEditableReason = 'global_date' | 'not_semantic' | 'scope_not_expressible';
|
|
14
|
+
export type OutlineFilter = {
|
|
15
|
+
filterId: string;
|
|
16
|
+
label: string;
|
|
17
|
+
editable: true;
|
|
18
|
+
domainId: string;
|
|
19
|
+
datasetName: string;
|
|
20
|
+
field: string;
|
|
21
|
+
selection: 'single' | 'multiple';
|
|
22
|
+
/** The values it loads with, read through the default owner (a saved default first, else the definition). */
|
|
23
|
+
defaultValues?: FilterValue[];
|
|
24
|
+
/** The window it loads with, only when the loaded default keeps one (a day picker clamps a wider window to a day). */
|
|
25
|
+
defaultPeriod?: TimeWindow;
|
|
26
|
+
/** For a date filter, the picker a viewer gets: one day, one month, or a range. */
|
|
27
|
+
datePicker?: 'day' | 'month' | 'range';
|
|
28
|
+
/** "all": every grid sheet. */
|
|
29
|
+
sheetIds: string[] | 'all';
|
|
30
|
+
/** With "all": the sheets it leaves out ("every sheet except"); a sheet added later is reached. */
|
|
31
|
+
exceptSheetIds?: string[];
|
|
32
|
+
/** With "all": it also shows on Document sheets (their sections' cards). */
|
|
33
|
+
includesDocumentSheets?: true;
|
|
34
|
+
/** Card ids the filter applies to. */
|
|
35
|
+
reaches: string[];
|
|
36
|
+
/** Card ids excluded explicitly. */
|
|
37
|
+
excluded: string[];
|
|
38
|
+
/** In scope, not matched. */
|
|
39
|
+
notReached: Array<{
|
|
40
|
+
cardId: string;
|
|
41
|
+
title: string;
|
|
42
|
+
datasetName?: string;
|
|
43
|
+
}>;
|
|
44
|
+
/** In scope, and blocked when the filter has a value: a binding the card can't run, or two fields it could take. */
|
|
45
|
+
blocked?: Array<{
|
|
46
|
+
cardId: string;
|
|
47
|
+
title: string;
|
|
48
|
+
reason: 'blocked' | 'ambiguous';
|
|
49
|
+
}>;
|
|
50
|
+
} | {
|
|
51
|
+
filterId: string;
|
|
52
|
+
label: string;
|
|
53
|
+
editable: false;
|
|
54
|
+
kind: 'global_date' | 'field' | 'other';
|
|
55
|
+
notEditable: {
|
|
56
|
+
reason: FilterNotEditableReason;
|
|
57
|
+
message: string;
|
|
58
|
+
};
|
|
59
|
+
reaches: string[];
|
|
60
|
+
excluded: string[];
|
|
61
|
+
blocked?: Array<{
|
|
62
|
+
cardId: string;
|
|
63
|
+
title: string;
|
|
64
|
+
reason: 'blocked' | 'ambiguous';
|
|
65
|
+
}>;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The calendar a summary reads defaults in: the report's, else a fixed one at
|
|
69
|
+
* the dashboard's own time, so a summary stays a pure function of its inputs.
|
|
70
|
+
* Only whether a default keeps its window is reported, never the dates it
|
|
71
|
+
* resolves to.
|
|
72
|
+
*/
|
|
73
|
+
export declare function outlineCalendar(calendar: CalendarContext | undefined, updatedAt: string | undefined): CalendarContext;
|
|
74
|
+
export declare function summarizeFilter(dashboard: TDashboard, entry: FilterInputEntry, calendar?: CalendarContext): OutlineFilter;
|
|
75
|
+
/** Every filter on the dashboard, in the filter model's order. */
|
|
76
|
+
export declare function outlineFilters(dashboard: TDashboard, calendar?: CalendarContext): OutlineFilter[];
|
|
77
|
+
/** One filter by its input id, or undefined. */
|
|
78
|
+
export declare function outlineFilter(dashboard: TDashboard, filterId: string, calendar?: CalendarContext): OutlineFilter | undefined;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { DashboardAuthoringValidationResult,
|
|
1
|
+
import { DashboardAuthoringValidationResult, DashboardPlan } from './contracts.js';
|
|
2
2
|
export declare function validateDashboardPlan(plan: DashboardPlan): DashboardAuthoringValidationResult;
|
|
3
|
-
export declare function validateDashboardChangePlan(plan: DashboardChangePlan): DashboardAuthoringValidationResult;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Breakpoint, CustomizableBreakpoint } from '../../../lib/types/common-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The dashboard grid's breakpoints and columns: the only place these values
|
|
4
|
+
* exist (responsive layouts SPEC §2.1, RL-INV-1).
|
|
5
|
+
*/
|
|
6
|
+
export type { CustomizableBreakpoint };
|
|
7
|
+
/** Breakpoints the editor can edit: Desktop, Tablet, Phone (RL-D11, RL-D14). */
|
|
8
|
+
export type EditableBreakpoint = 'lg' | CustomizableBreakpoint;
|
|
9
|
+
/** Breakpoints a grid edit can arrive at: the editable ones, and `md`, an edit of Desktop at laptop width (RL-D17). */
|
|
10
|
+
export type GridEditBreakpoint = EditableBreakpoint | 'md';
|
|
11
|
+
export declare const DASHBOARD_GRID: {
|
|
12
|
+
/** Widest first. */
|
|
13
|
+
readonly breakpoints: readonly Breakpoint[];
|
|
14
|
+
readonly columns: Readonly<Record<Breakpoint, number>>;
|
|
15
|
+
/** react-grid-layout's default breakpoint widths, now stated. */
|
|
16
|
+
readonly minContainerWidthPx: Readonly<Record<Breakpoint, number>>;
|
|
17
|
+
readonly editable: readonly EditableBreakpoint[];
|
|
18
|
+
readonly customizable: readonly CustomizableBreakpoint[];
|
|
19
|
+
/** The preview canvas widths: Laptop, Tablet, Phone, Small phone (Desktop is at least `minContainerWidthPx.lg`; RL-D19). */
|
|
20
|
+
readonly previewWidthPx: Readonly<Record<Exclude<Breakpoint, "lg">, number>>;
|
|
21
|
+
};
|
|
22
|
+
export declare const LG_COLUMNS: number;
|
|
23
|
+
export declare function isCustomizableBreakpoint(value: unknown): value is CustomizableBreakpoint;
|
|
24
|
+
export declare function isEditableBreakpoint(value: unknown): value is EditableBreakpoint;
|
|
25
|
+
export declare function isGridEditBreakpoint(value: unknown): value is GridEditBreakpoint;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DASHBOARD_GRID } from './grid.js';
|
|
2
|
+
export type { CustomizableBreakpoint, EditableBreakpoint, GridEditBreakpoint } from './grid.js';
|
|
3
|
+
export type { FramePlacement, FramePosition, FrameWidth, LayoutItem, LayoutKind, SheetLayoutChange, SheetLayoutFailure, SheetLayoutInput, SheetLayoutResult, SheetLayoutRow, SheetLayouts, SheetLayoutTile, SheetLayoutView, } from './types.js';
|
|
4
|
+
export { applySheetLayoutChange, assertSheetLayouts, readSheetLayout } from './sheet-layout.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SheetLayoutChange, SheetLayoutInput, SheetLayoutResult, SheetLayouts, SheetLayoutView } from './types.js';
|
|
2
|
+
/** Every layout read (SPEC §3.2): complete, valid layouts; customized breakpoints, stored or inferred; `lg` as rows. Never fails. */
|
|
3
|
+
export declare function readSheetLayout(sheet: SheetLayoutInput): SheetLayoutView;
|
|
4
|
+
/** Every layout write (SPEC §3.1). `sheet` is the sheet before the change. */
|
|
5
|
+
export declare function applySheetLayoutChange(sheet: SheetLayoutInput, change: SheetLayoutChange): SheetLayoutResult;
|
|
6
|
+
/** Throws when layouts break invariants 1 to 4 (complete, in bounds, no overlaps, packed). For tests and development builds. */
|
|
7
|
+
export declare function assertSheetLayouts(layouts: SheetLayouts, frameIds: readonly string[]): void;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Breakpoint, TFrame, TSheet } from '../../../lib/types/common-types.js';
|
|
2
|
+
import { CustomizableBreakpoint, GridEditBreakpoint } from './grid.js';
|
|
3
|
+
/** One frame's tile on one breakpoint. The keys the dirty check persists (`PERSISTED_LAYOUT_KEYS`). */
|
|
4
|
+
export type LayoutItem = {
|
|
5
|
+
/** The frame id. */
|
|
6
|
+
i: string;
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
w: number;
|
|
10
|
+
h: number;
|
|
11
|
+
minW?: number;
|
|
12
|
+
minH?: number;
|
|
13
|
+
maxW?: number;
|
|
14
|
+
maxH?: number;
|
|
15
|
+
static?: boolean;
|
|
16
|
+
isResizable?: boolean;
|
|
17
|
+
isDraggable?: boolean;
|
|
18
|
+
};
|
|
19
|
+
/** Complete layouts: every breakpoint present. What the engine returns. */
|
|
20
|
+
export type SheetLayouts = Record<Breakpoint, LayoutItem[]>;
|
|
21
|
+
/** What the engine reads from a sheet. */
|
|
22
|
+
export type SheetLayoutInput = Pick<TSheet, 'id' | 'frames' | 'layouts' | 'layout' | 'customizedBreakpoints'>;
|
|
23
|
+
/** How a frame is sized and grouped (SPEC §2.4). */
|
|
24
|
+
export type LayoutKind = 'kpi' | 'chart' | 'table' | 'text';
|
|
25
|
+
/** A width by intent, as a share of the 48 `lg` columns: full 48, half 24, third 16, quarter 12. */
|
|
26
|
+
export type FrameWidth = 'full' | 'half' | 'third' | 'quarter';
|
|
27
|
+
/** Where a new frame goes on `lg`. Ids are frame ids. */
|
|
28
|
+
export type FramePosition = 'top' | 'end' | {
|
|
29
|
+
after: string;
|
|
30
|
+
} | {
|
|
31
|
+
beside: string;
|
|
32
|
+
};
|
|
33
|
+
/** How a caller states a new frame's place. Absent: placed by kind (SPEC §4.2). */
|
|
34
|
+
export type FramePlacement = {
|
|
35
|
+
position?: FramePosition;
|
|
36
|
+
width?: FrameWidth;
|
|
37
|
+
};
|
|
38
|
+
export type SheetLayoutChange =
|
|
39
|
+
/** A new frame, not in `sheet.frames` yet. Without `placement`: by kind. */
|
|
40
|
+
{
|
|
41
|
+
kind: 'frame_added';
|
|
42
|
+
frame: TFrame;
|
|
43
|
+
placement?: FramePlacement;
|
|
44
|
+
}
|
|
45
|
+
/** A frame in `sheet.frames` that leaves the sheet. */
|
|
46
|
+
| {
|
|
47
|
+
kind: 'frame_removed';
|
|
48
|
+
frameId: string;
|
|
49
|
+
}
|
|
50
|
+
/** A frame's content changed: the frame after the change, same id, in `sheet.frames`. */
|
|
51
|
+
| {
|
|
52
|
+
kind: 'frame_updated';
|
|
53
|
+
frame: TFrame;
|
|
54
|
+
resizeForNewKind: boolean;
|
|
55
|
+
}
|
|
56
|
+
/** The grid's items after a drag or resize stop at the breakpoint being edited. */
|
|
57
|
+
| {
|
|
58
|
+
kind: 'grid_edited';
|
|
59
|
+
breakpoint: GridEditBreakpoint;
|
|
60
|
+
items: readonly LayoutItem[];
|
|
61
|
+
}
|
|
62
|
+
/** "Back to automatic" for one customized breakpoint. */
|
|
63
|
+
| {
|
|
64
|
+
kind: 'reset_to_automatic';
|
|
65
|
+
breakpoint: CustomizableBreakpoint;
|
|
66
|
+
}
|
|
67
|
+
/** Arrange the sheet. */
|
|
68
|
+
| {
|
|
69
|
+
kind: 'arrange';
|
|
70
|
+
keepOrder?: boolean;
|
|
71
|
+
};
|
|
72
|
+
export type SheetLayoutFailure = {
|
|
73
|
+
code: 'frame_not_on_sheet';
|
|
74
|
+
frameId: string;
|
|
75
|
+
message: string;
|
|
76
|
+
} | {
|
|
77
|
+
code: 'frame_already_on_sheet';
|
|
78
|
+
frameId: string;
|
|
79
|
+
message: string;
|
|
80
|
+
} | {
|
|
81
|
+
code: 'position_target_not_found';
|
|
82
|
+
frameId: string;
|
|
83
|
+
message: string;
|
|
84
|
+
} | {
|
|
85
|
+
code: 'breakpoint_not_editable';
|
|
86
|
+
breakpoint: string;
|
|
87
|
+
message: string;
|
|
88
|
+
};
|
|
89
|
+
export type SheetLayoutResult = {
|
|
90
|
+
ok: true;
|
|
91
|
+
/** The sheet's frames in their new order; the input array itself when untouched. */
|
|
92
|
+
frames: TFrame[];
|
|
93
|
+
layouts: SheetLayouts;
|
|
94
|
+
customizedBreakpoints: CustomizableBreakpoint[];
|
|
95
|
+
/** False when `frames`, `layouts` and `customizedBreakpoints` equal what `readSheetLayout(sheet)` gives. */
|
|
96
|
+
changed: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* False when `layouts` and `customizedBreakpoints` equal the view's. Callers write them only when
|
|
99
|
+
* true, so a change with no layout effect (a frame update keeping its kind) leaves stored layouts
|
|
100
|
+
* untouched: a no-op editor Done stays clean (V-50).
|
|
101
|
+
*/
|
|
102
|
+
layoutsChanged: boolean;
|
|
103
|
+
} | {
|
|
104
|
+
ok: false;
|
|
105
|
+
failure: SheetLayoutFailure;
|
|
106
|
+
};
|
|
107
|
+
/** `width`: the `FrameWidth` whose column count is nearest the item's `lg` `w`; a tie goes to the wider. */
|
|
108
|
+
export type SheetLayoutTile = {
|
|
109
|
+
frameId: string;
|
|
110
|
+
kind: LayoutKind;
|
|
111
|
+
width: FrameWidth;
|
|
112
|
+
};
|
|
113
|
+
export type SheetLayoutRow = {
|
|
114
|
+
tiles: SheetLayoutTile[];
|
|
115
|
+
};
|
|
116
|
+
export type SheetLayoutView = {
|
|
117
|
+
/** Complete and valid on every breakpoint; what the grid renders. */
|
|
118
|
+
layouts: SheetLayouts;
|
|
119
|
+
/** Stored `customizedBreakpoints`, or inferred when absent (SPEC §4.6). */
|
|
120
|
+
customizedBreakpoints: CustomizableBreakpoint[];
|
|
121
|
+
/** The `lg` layout as rows, top to bottom, tiles left to right. */
|
|
122
|
+
rows: SheetLayoutRow[];
|
|
123
|
+
/** True when `layouts` differs from what is stored. */
|
|
124
|
+
repaired: boolean;
|
|
125
|
+
};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './frame-layouts.js';
|
|
1
|
+
export * from './engine/index.js';
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"email": "support@semaphor.cloud"
|
|
6
6
|
},
|
|
7
7
|
"license": "MIT",
|
|
8
|
-
"version": "0.1.
|
|
8
|
+
"version": "0.1.546",
|
|
9
9
|
"description": "Fully interactive and customizable dashboards for your apps.",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"react",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"build": "node scripts/build.mjs",
|
|
124
124
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
125
125
|
"lint:regressions": "node scripts/lint-regressions.mjs",
|
|
126
|
-
"check:guards": "node scripts/card-config-consumers.mjs && node scripts/components-entry-imports.mjs && node scripts/types-entry-imports.mjs && node scripts/card-query-assembly-imports.mjs && node scripts/assistant-chat-imports.mjs && node scripts/filter-model-reads.mjs",
|
|
126
|
+
"check:guards": "node scripts/card-config-consumers.mjs && node scripts/components-entry-imports.mjs && node scripts/types-entry-imports.mjs && node scripts/card-query-assembly-imports.mjs && node scripts/assistant-chat-imports.mjs && node scripts/filter-model-reads.mjs && node scripts/layout-engine.mjs",
|
|
127
127
|
"preview": "vite preview",
|
|
128
128
|
"test": "vitest run",
|
|
129
129
|
"test:changed": "vitest run --changed",
|