@sqlrooms/cells 0.29.0-rc.1 → 0.29.0-rc.2

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.
Files changed (158) hide show
  1. package/dist/cellsSlice.d.ts.map +1 -1
  2. package/dist/cellsSlice.js +191 -73
  3. package/dist/cellsSlice.js.map +1 -1
  4. package/dist/components/AggregationSelector.d.ts +8 -0
  5. package/dist/components/AggregationSelector.d.ts.map +1 -0
  6. package/dist/components/AggregationSelector.js +13 -0
  7. package/dist/components/AggregationSelector.js.map +1 -0
  8. package/dist/components/CellSourceSelector.d.ts +11 -0
  9. package/dist/components/CellSourceSelector.d.ts.map +1 -0
  10. package/dist/components/CellSourceSelector.js +35 -0
  11. package/dist/components/CellSourceSelector.js.map +1 -0
  12. package/dist/components/ChartTypeSelector.d.ts +8 -0
  13. package/dist/components/ChartTypeSelector.d.ts.map +1 -0
  14. package/dist/components/ChartTypeSelector.js +13 -0
  15. package/dist/components/ChartTypeSelector.js.map +1 -0
  16. package/dist/components/CollapsibleSectionButton.d.ts +10 -0
  17. package/dist/components/CollapsibleSectionButton.d.ts.map +1 -0
  18. package/dist/components/CollapsibleSectionButton.js +10 -0
  19. package/dist/components/CollapsibleSectionButton.js.map +1 -0
  20. package/dist/components/ColorSelector.d.ts +24 -0
  21. package/dist/components/ColorSelector.d.ts.map +1 -0
  22. package/dist/components/ColorSelector.js +17 -0
  23. package/dist/components/ColorSelector.js.map +1 -0
  24. package/dist/components/FieldSelector.d.ts +11 -0
  25. package/dist/components/FieldSelector.d.ts.map +1 -0
  26. package/dist/components/FieldSelector.js +11 -0
  27. package/dist/components/FieldSelector.js.map +1 -0
  28. package/dist/components/FieldTypeIcon.d.ts +8 -0
  29. package/dist/components/FieldTypeIcon.d.ts.map +1 -0
  30. package/dist/components/FieldTypeIcon.js +27 -0
  31. package/dist/components/FieldTypeIcon.js.map +1 -0
  32. package/dist/components/InputCellContent.d.ts.map +1 -1
  33. package/dist/components/InputCellContent.js +3 -3
  34. package/dist/components/InputCellContent.js.map +1 -1
  35. package/dist/components/SelectionListener.d.ts +15 -0
  36. package/dist/components/SelectionListener.d.ts.map +1 -0
  37. package/dist/components/SelectionListener.js +74 -0
  38. package/dist/components/SelectionListener.js.map +1 -0
  39. package/dist/components/SheetsTabBar.d.ts.map +1 -1
  40. package/dist/components/SheetsTabBar.js +2 -1
  41. package/dist/components/SheetsTabBar.js.map +1 -1
  42. package/dist/components/SqlCellBody.d.ts +6 -0
  43. package/dist/components/SqlCellBody.d.ts.map +1 -0
  44. package/dist/components/SqlCellBody.js +12 -0
  45. package/dist/components/SqlCellBody.js.map +1 -0
  46. package/dist/components/SqlCellConnectionSelector.d.ts +9 -0
  47. package/dist/components/SqlCellConnectionSelector.d.ts.map +1 -0
  48. package/dist/components/SqlCellConnectionSelector.js +21 -0
  49. package/dist/components/SqlCellConnectionSelector.js.map +1 -0
  50. package/dist/components/SqlCellContent.d.ts.map +1 -1
  51. package/dist/components/SqlCellContent.js +29 -154
  52. package/dist/components/SqlCellContent.js.map +1 -1
  53. package/dist/components/SqlCellDependentsMenu.d.ts +11 -0
  54. package/dist/components/SqlCellDependentsMenu.d.ts.map +1 -0
  55. package/dist/components/SqlCellDependentsMenu.js +62 -0
  56. package/dist/components/SqlCellDependentsMenu.js.map +1 -0
  57. package/dist/components/SqlCellEditor.d.ts +14 -0
  58. package/dist/components/SqlCellEditor.d.ts.map +1 -0
  59. package/dist/components/SqlCellEditor.js +17 -0
  60. package/dist/components/SqlCellEditor.js.map +1 -0
  61. package/dist/components/SqlCellResultNameEditor.d.ts +8 -0
  62. package/dist/components/SqlCellResultNameEditor.d.ts.map +1 -0
  63. package/dist/components/SqlCellResultNameEditor.js +38 -0
  64. package/dist/components/SqlCellResultNameEditor.js.map +1 -0
  65. package/dist/components/SqlCellResults.d.ts +17 -0
  66. package/dist/components/SqlCellResults.d.ts.map +1 -0
  67. package/dist/components/SqlCellResults.js +45 -0
  68. package/dist/components/SqlCellResults.js.map +1 -0
  69. package/dist/components/SqlCellRunButton.d.ts +5 -6
  70. package/dist/components/SqlCellRunButton.d.ts.map +1 -1
  71. package/dist/components/SqlCellRunButton.js +11 -7
  72. package/dist/components/SqlCellRunButton.js.map +1 -1
  73. package/dist/components/SqlQueryPreview.d.ts +9 -0
  74. package/dist/components/SqlQueryPreview.d.ts.map +1 -0
  75. package/dist/components/SqlQueryPreview.js +14 -0
  76. package/dist/components/SqlQueryPreview.js.map +1 -0
  77. package/dist/components/TextCellContent.d.ts.map +1 -1
  78. package/dist/components/TextCellContent.js +24 -7
  79. package/dist/components/TextCellContent.js.map +1 -1
  80. package/dist/components/VegaCellContent.d.ts +0 -1
  81. package/dist/components/VegaCellContent.d.ts.map +1 -1
  82. package/dist/components/VegaCellContent.js +61 -47
  83. package/dist/components/VegaCellContent.js.map +1 -1
  84. package/dist/components/VegaCellHeader.d.ts +11 -0
  85. package/dist/components/VegaCellHeader.d.ts.map +1 -0
  86. package/dist/components/VegaCellHeader.js +31 -0
  87. package/dist/components/VegaCellHeader.js.map +1 -0
  88. package/dist/components/VegaConfigPanel.d.ts +5 -0
  89. package/dist/components/VegaConfigPanel.d.ts.map +1 -1
  90. package/dist/components/VegaConfigPanel.js +53 -63
  91. package/dist/components/VegaConfigPanel.js.map +1 -1
  92. package/dist/crdt.d.ts +61 -0
  93. package/dist/crdt.d.ts.map +1 -0
  94. package/dist/crdt.js +82 -0
  95. package/dist/crdt.js.map +1 -0
  96. package/dist/dagSlice.d.ts +3 -0
  97. package/dist/dagSlice.d.ts.map +1 -0
  98. package/dist/dagSlice.js +51 -0
  99. package/dist/dagSlice.js.map +1 -0
  100. package/dist/dagUtils.d.ts +2 -1
  101. package/dist/dagUtils.d.ts.map +1 -1
  102. package/dist/dagUtils.js +35 -11
  103. package/dist/dagUtils.js.map +1 -1
  104. package/dist/defaultCellRegistry.d.ts.map +1 -1
  105. package/dist/defaultCellRegistry.js +63 -24
  106. package/dist/defaultCellRegistry.js.map +1 -1
  107. package/dist/execution.d.ts.map +1 -1
  108. package/dist/execution.js +2 -1
  109. package/dist/execution.js.map +1 -1
  110. package/dist/helpers.d.ts +14 -2
  111. package/dist/helpers.d.ts.map +1 -1
  112. package/dist/helpers.js +56 -2
  113. package/dist/helpers.js.map +1 -1
  114. package/dist/hooks/useVegaCellDataSource.d.ts +18 -0
  115. package/dist/hooks/useVegaCellDataSource.d.ts.map +1 -0
  116. package/dist/hooks/useVegaCellDataSource.js +40 -0
  117. package/dist/hooks/useVegaCellDataSource.js.map +1 -0
  118. package/dist/hooks/useVegaCellQuery.d.ts +16 -0
  119. package/dist/hooks/useVegaCellQuery.d.ts.map +1 -0
  120. package/dist/hooks/useVegaCellQuery.js +25 -0
  121. package/dist/hooks/useVegaCellQuery.js.map +1 -0
  122. package/dist/index.d.ts +3 -2
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +3 -2
  125. package/dist/index.js.map +1 -1
  126. package/dist/sqlHelpers.d.ts +3 -3
  127. package/dist/sqlHelpers.d.ts.map +1 -1
  128. package/dist/sqlHelpers.js +9 -5
  129. package/dist/sqlHelpers.js.map +1 -1
  130. package/dist/typeGuards.d.ts +2 -0
  131. package/dist/typeGuards.d.ts.map +1 -0
  132. package/dist/typeGuards.js +4 -0
  133. package/dist/typeGuards.js.map +1 -0
  134. package/dist/types.d.ts +97 -26
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/types.js +17 -2
  137. package/dist/types.js.map +1 -1
  138. package/dist/useValidateResultName.d.ts +34 -0
  139. package/dist/useValidateResultName.d.ts.map +1 -0
  140. package/dist/useValidateResultName.js +111 -0
  141. package/dist/useValidateResultName.js.map +1 -0
  142. package/dist/utils.d.ts +8 -0
  143. package/dist/utils.d.ts.map +1 -1
  144. package/dist/utils.js +16 -0
  145. package/dist/utils.js.map +1 -1
  146. package/dist/validation.d.ts +16 -0
  147. package/dist/validation.d.ts.map +1 -0
  148. package/dist/validation.js +40 -0
  149. package/dist/validation.js.map +1 -0
  150. package/dist/vegaSelectionUtils.d.ts +14 -0
  151. package/dist/vegaSelectionUtils.d.ts.map +1 -0
  152. package/dist/vegaSelectionUtils.js +97 -0
  153. package/dist/vegaSelectionUtils.js.map +1 -0
  154. package/dist/vegaSpecBuilder.d.ts +34 -0
  155. package/dist/vegaSpecBuilder.d.ts.map +1 -0
  156. package/dist/vegaSpecBuilder.js +90 -0
  157. package/dist/vegaSpecBuilder.js.map +1 -0
  158. package/package.json +12 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../src/typeGuards.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAI,KAAoB;IAC/C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC","sourcesContent":["export function isDefined<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n"]}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { DbSliceState } from '@sqlrooms/db';
2
- import type { BaseRoomStoreState } from '@sqlrooms/room-store';
2
+ import type { BaseRoomStoreState, SliceFunctions } from '@sqlrooms/room-store';
3
3
  import type * as arrow from 'apache-arrow';
4
4
  import type React from 'react';
5
5
  import { z } from 'zod';
@@ -68,12 +68,27 @@ export declare const TextCellData: z.ZodObject<{
68
68
  text: z.ZodDefault<z.ZodString>;
69
69
  }, z.core.$strip>;
70
70
  export type TextCellData = z.infer<typeof TextCellData>;
71
+ /** Field type category for cross-filter predicates */
72
+ export type BrushFieldType = 'numeric' | 'temporal' | 'string';
73
+ /** Cross-filter configuration for Vega chart cells */
74
+ export declare const CrossFilterConfig: z.ZodObject<{
75
+ enabled: z.ZodDefault<z.ZodBoolean>;
76
+ brushField: z.ZodOptional<z.ZodString>;
77
+ brushFieldType: z.ZodOptional<z.ZodType<BrushFieldType>>;
78
+ }, z.core.$strip>;
79
+ export type CrossFilterConfig = z.infer<typeof CrossFilterConfig>;
71
80
  /** Vega Cell */
72
81
  export declare const VegaCellData: z.ZodObject<{
73
82
  title: z.ZodDefault<z.ZodString>;
74
83
  sqlId: z.ZodOptional<z.ZodString>;
84
+ tableRef: z.ZodOptional<z.ZodString>;
75
85
  sql: z.ZodOptional<z.ZodString>;
76
86
  vegaSpec: z.ZodOptional<z.ZodAny>;
87
+ crossFilter: z.ZodDefault<z.ZodObject<{
88
+ enabled: z.ZodDefault<z.ZodBoolean>;
89
+ brushField: z.ZodOptional<z.ZodString>;
90
+ brushFieldType: z.ZodOptional<z.ZodType<BrushFieldType>>;
91
+ }, z.core.$strip>>;
77
92
  }, z.core.$strip>;
78
93
  export type VegaCellData = z.infer<typeof VegaCellData>;
79
94
  /** Input Cell Data */
@@ -133,8 +148,14 @@ export declare const VegaCell: z.ZodObject<{
133
148
  data: z.ZodObject<{
134
149
  title: z.ZodDefault<z.ZodString>;
135
150
  sqlId: z.ZodOptional<z.ZodString>;
151
+ tableRef: z.ZodOptional<z.ZodString>;
136
152
  sql: z.ZodOptional<z.ZodString>;
137
153
  vegaSpec: z.ZodOptional<z.ZodAny>;
154
+ crossFilter: z.ZodDefault<z.ZodObject<{
155
+ enabled: z.ZodDefault<z.ZodBoolean>;
156
+ brushField: z.ZodOptional<z.ZodString>;
157
+ brushFieldType: z.ZodOptional<z.ZodType<BrushFieldType>>;
158
+ }, z.core.$strip>>;
138
159
  }, z.core.$strip>;
139
160
  }, z.core.$strip>;
140
161
  export type VegaCell = z.infer<typeof VegaCell>;
@@ -187,8 +208,14 @@ export declare const VegaCellSchema: z.ZodObject<{
187
208
  data: z.ZodObject<{
188
209
  title: z.ZodDefault<z.ZodString>;
189
210
  sqlId: z.ZodOptional<z.ZodString>;
211
+ tableRef: z.ZodOptional<z.ZodString>;
190
212
  sql: z.ZodOptional<z.ZodString>;
191
213
  vegaSpec: z.ZodOptional<z.ZodAny>;
214
+ crossFilter: z.ZodDefault<z.ZodObject<{
215
+ enabled: z.ZodDefault<z.ZodBoolean>;
216
+ brushField: z.ZodOptional<z.ZodString>;
217
+ brushFieldType: z.ZodOptional<z.ZodType<BrushFieldType>>;
218
+ }, z.core.$strip>>;
192
219
  }, z.core.$strip>;
193
220
  }, z.core.$strip>;
194
221
  export declare const InputCellSchema: z.ZodObject<{
@@ -231,6 +258,7 @@ export type CellContainerProps = {
231
258
  header?: React.ReactNode;
232
259
  content: React.ReactNode;
233
260
  footer?: React.ReactNode;
261
+ showHeader?: boolean;
234
262
  };
235
263
  /** Type for SQL AST parsing function from DuckDB slice */
236
264
  export type SqlSelectToJsonFn = (sql: string) => Promise<{
@@ -238,10 +266,20 @@ export type SqlSelectToJsonFn = (sql: string) => Promise<{
238
266
  error_type?: string;
239
267
  statements?: unknown[];
240
268
  }>;
269
+ /** Return type from findDependencies: cell IDs and optional table names. */
270
+ export type CellDependencies = {
271
+ cellIds: string[];
272
+ tableNames?: string[];
273
+ };
274
+ export type CreateCellArgs = {
275
+ id: string;
276
+ get: () => CellsRootState;
277
+ set: (updater: (state: CellsRootState) => CellsRootState) => void;
278
+ };
241
279
  export type CellRegistryItem<TCell extends Cell = Cell> = {
242
280
  type: string;
243
281
  title: string;
244
- createCell: (id: string) => TCell;
282
+ createCell: (args: CreateCellArgs) => TCell;
245
283
  renderCell: (props: {
246
284
  id: string;
247
285
  cell: TCell;
@@ -253,7 +291,7 @@ export type CellRegistryItem<TCell extends Cell = Cell> = {
253
291
  cells: Record<string, Cell>;
254
292
  sheetId: string;
255
293
  sqlSelectToJson: SqlSelectToJsonFn;
256
- }) => Promise<string[]>;
294
+ }) => Promise<string[] | CellDependencies>;
257
295
  /** Optional: custom execution logic (defaults to SQL execution for sql type) */
258
296
  runCell?: (args: {
259
297
  id: string;
@@ -271,6 +309,32 @@ export type CellRegistryItem<TCell extends Cell = Cell> = {
271
309
  get: () => CellsRootState;
272
310
  set: (updater: (state: CellsRootState) => CellsRootState) => void;
273
311
  }) => Promise<void>;
312
+ /** Return initial CellStatus when a cell is first added. Default: {type:'other'} */
313
+ createStatus?: (id: string) => CellStatus;
314
+ /** Called once during cells.initialize() for each cell of this type. Reset ephemeral runtime state after hydration. */
315
+ onInitialize?: (args: {
316
+ id: string;
317
+ status: CellStatus | undefined;
318
+ get: () => CellsRootState;
319
+ set: (updater: (state: CellsRootState) => CellsRootState) => void;
320
+ }) => void;
321
+ /** Called when cell is removed. Clean up DuckDB relations, caches, etc. */
322
+ onRemove?: (args: {
323
+ id: string;
324
+ status: CellStatus | undefined;
325
+ get: () => CellsRootState;
326
+ set: (updater: (state: CellsRootState) => CellsRootState) => void;
327
+ }) => Promise<void> | void;
328
+ /** Detect whether an updateCell change is semantically significant for this cell type. */
329
+ hasSemanticChange?: (oldCell: TCell, newCell: TCell) => boolean;
330
+ /** Reset status to idle/stale. Called by invalidateCellStatus. If not provided, status is set to {type:'other'}. */
331
+ invalidateStatus?: (currentStatus: CellStatus) => CellStatus;
332
+ /** Collect DuckDB relation names that should be dropped when this cell is removed. */
333
+ getRelationsToDrop?: (status: CellStatus) => string[];
334
+ /** Record an error on the cell status during cascade execution. */
335
+ recordError?: (currentStatus: CellStatus, message: string) => CellStatus;
336
+ /** Return the query relation name for paged fetches, if applicable. */
337
+ getResultRelation?: (status: CellStatus) => string | undefined;
274
338
  };
275
339
  export type CellRegistry = Record<string, CellRegistryItem<any>>;
276
340
  /** Sheet and Edge types */
@@ -278,6 +342,7 @@ export declare const SheetType: z.ZodEnum<{
278
342
  notebook: "notebook";
279
343
  canvas: "canvas";
280
344
  app: "app";
345
+ dashboard: "dashboard";
281
346
  }>;
282
347
  export type SheetType = z.infer<typeof SheetType>;
283
348
  export declare const EdgeKind: z.ZodEnum<{
@@ -299,6 +364,7 @@ export declare const SheetGraphCache: z.ZodObject<{
299
364
  dependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
300
365
  dependents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
301
366
  contentHashByCell: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
367
+ tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
302
368
  }, z.core.$strip>;
303
369
  export type SheetGraphCache = z.infer<typeof SheetGraphCache>;
304
370
  export declare const Sheet: z.ZodObject<{
@@ -307,6 +373,7 @@ export declare const Sheet: z.ZodObject<{
307
373
  notebook: "notebook";
308
374
  canvas: "canvas";
309
375
  app: "app";
376
+ dashboard: "dashboard";
310
377
  }>;
311
378
  title: z.ZodString;
312
379
  schemaName: z.ZodOptional<z.ZodString>;
@@ -324,6 +391,7 @@ export declare const Sheet: z.ZodObject<{
324
391
  dependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
325
392
  dependents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
326
393
  contentHashByCell: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
394
+ tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
327
395
  }, z.core.$strip>>;
328
396
  }, z.core.$strip>;
329
397
  export type Sheet = z.infer<typeof Sheet>;
@@ -352,28 +420,11 @@ export declare const OtherCellStatus: z.ZodObject<{
352
420
  type: z.ZodLiteral<"other">;
353
421
  }, z.core.$strip>;
354
422
  export type OtherCellStatus = z.infer<typeof OtherCellStatus>;
355
- export declare const CellStatus: z.ZodUnion<readonly [z.ZodObject<{
356
- type: z.ZodLiteral<"sql">;
357
- status: z.ZodEnum<{
358
- success: "success";
359
- idle: "idle";
360
- running: "running";
361
- cancel: "cancel";
362
- error: "error";
363
- }>;
364
- lastError: z.ZodOptional<z.ZodString>;
365
- referencedTables: z.ZodDefault<z.ZodArray<z.ZodString>>;
366
- resultName: z.ZodOptional<z.ZodString>;
367
- resultView: z.ZodOptional<z.ZodString>;
368
- resultRelationType: z.ZodOptional<z.ZodEnum<{
369
- view: "view";
370
- table: "table";
371
- }>>;
372
- lastRunTime: z.ZodOptional<z.ZodNumber>;
373
- }, z.core.$strip>, z.ZodObject<{
374
- type: z.ZodLiteral<"other">;
375
- }, z.core.$strip>]>;
376
- export type CellStatus = z.infer<typeof CellStatus>;
423
+ /** Extensible cell status -- each cell type defines its own shape with a discriminating `type` field. */
424
+ export type CellStatus = {
425
+ type: string;
426
+ [key: string]: unknown;
427
+ };
377
428
  /** SQL execution results */
378
429
  export type SqlRunResult = {
379
430
  resultName?: string;
@@ -411,6 +462,7 @@ export declare const CellsSliceConfig: z.ZodObject<{
411
462
  notebook: "notebook";
412
463
  canvas: "canvas";
413
464
  app: "app";
465
+ dashboard: "dashboard";
414
466
  }>;
415
467
  title: z.ZodString;
416
468
  schemaName: z.ZodOptional<z.ZodString>;
@@ -428,10 +480,12 @@ export declare const CellsSliceConfig: z.ZodObject<{
428
480
  dependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
429
481
  dependents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
430
482
  contentHashByCell: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
483
+ tableDependencies: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
431
484
  }, z.core.$strip>>;
432
485
  }, z.core.$strip>>>;
433
486
  sheetOrder: z.ZodDefault<z.ZodArray<z.ZodString>>;
434
487
  currentSheetId: z.ZodOptional<z.ZodString>;
488
+ tableDepSchemas: z.ZodDefault<z.ZodArray<z.ZodString>>;
435
489
  }, z.core.$strip>;
436
490
  export type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;
437
491
  export type CellsSliceOptions = {
@@ -444,8 +498,15 @@ export type CellResultData = {
444
498
  arrowTable: arrow.Table;
445
499
  totalRows: number;
446
500
  };
501
+ /** Cross-filter selection value emitted by a Vega chart brush */
502
+ export type CrossFilterSelection = {
503
+ field: string;
504
+ fieldType?: BrushFieldType;
505
+ type: 'interval' | 'point';
506
+ value: unknown;
507
+ };
447
508
  export type CellsSliceState = {
448
- cells: {
509
+ cells: SliceFunctions & {
449
510
  config: CellsSliceConfig;
450
511
  status: Record<string, CellStatus>;
451
512
  activeAbortControllers: Record<string, AbortController>;
@@ -455,6 +516,14 @@ export type CellsSliceState = {
455
516
  resultVersion: Record<string, number>;
456
517
  /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */
457
518
  pageVersion: Record<string, number>;
519
+ /**
520
+ * Ephemeral cross-filter selections (not persisted).
521
+ * Outer key: sqlId (the shared data source), inner key: chartCellId.
522
+ */
523
+ crossFilterSelections: Record<string, Record<string, CrossFilterSelection | null>>;
524
+ setCrossFilterSelection: (chartCellId: string, sqlId: string, selection: CrossFilterSelection | null) => void;
525
+ getCrossFilterPredicate: (chartCellId: string, sqlId: string) => string | null;
526
+ clearCrossFilterGroup: (sqlId: string) => void;
458
527
  addCell: (sheetId: string, cell: Cell, index?: number) => Promise<void>;
459
528
  removeCell: (id: string) => void;
460
529
  updateCell: (id: string, updater: (cell: Cell) => Cell, opts?: {
@@ -492,10 +561,12 @@ export type CellsSliceState = {
492
561
  runAllCellsCascade: (sheetId: string) => Promise<void>;
493
562
  runDownstreamCascade: (sheetId: string, sourceCellId: string) => Promise<void>;
494
563
  };
564
+ initialize?: () => Promise<void>;
495
565
  };
496
566
  export type CellsRootState = BaseRoomStoreState & DbSliceState & CellsSliceState;
497
567
  export declare function isSqlCell(cell: Cell): cell is SqlCell;
498
568
  export declare function isTextCell(cell: Cell): cell is TextCell;
499
569
  export declare function isVegaCell(cell: Cell): cell is VegaCell;
500
570
  export declare function isInputCell(cell: Cell): cell is InputCell;
571
+ export declare function isSqlCellStatus(status: CellStatus | undefined): status is SqlCellStatus;
501
572
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,iBAAiB;AACjB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAChE,MAAM,MAAM,QAAQ,GAAG,eAAe,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AACvD,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,uBAAuB;AACvB,eAAO,MAAM,UAAU;;;;EAAyC,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,SAAS;;;;iBAIpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,eAAO,MAAM,WAAW;;;;;;;iBAOtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,aAAa;;;;;iBAKxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;2BAIrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAe;AACf,eAAO,MAAM,WAAW;;;;;iBAKtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,gBAAgB;AAChB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,gBAAgB;AAChB,eAAO,MAAM,YAAY;;;;;iBAKvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,sBAAsB;AACtB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;iBAGxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wBAAwB;AACxB,eAAO,MAAM,QAAQ;;;iBAGnB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;iBAIlB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,QAAQ;;;;;;;iBAInB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;iBAInB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;iBAIpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,eAAO,MAAM,aAAa;;;;;;;;;iBAAU,CAAC;AACrC,eAAO,MAAM,cAAc;;;;;;;iBAAW,CAAC;AACvC,eAAO,MAAM,cAAc;;;;;;;;;iBAAW,CAAC;AACvC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;iBAAY,CAAC;AAEzC,qBAAqB;AACrB,eAAO,MAAM,IAAI;;;;iBAIf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,CAAC;AAEF,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,IAAI;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC;IAClC,UAAU,EAAE,CAAC,KAAK,EAAE;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,KAAK,CAAC;QACZ,eAAe,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,YAAY,CAAC;KACpE,KAAK,KAAK,CAAC,YAAY,CAAC;IACzB,oEAAoE;IACpE,gBAAgB,EAAE,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,iBAAiB,CAAC;KACpC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxB,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAChD,GAAG,EAAE,MAAM,cAAc,CAAC;QAC1B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,KAAK,IAAI,CAAC;KACnE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,cAAc,CAAC;QAC1B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,KAAK,IAAI,CAAC;KACnE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,2BAA2B;AAC3B,eAAO,MAAM,SAAS;;;;EAAwC,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ;;;EAAmC,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,IAAI;;;;;;;;iBAKf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC,eAAO,MAAM,eAAe;;;;iBAI1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;iBAQhB,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;AAE1C,kBAAkB;AAClB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;iBASxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;iBAE1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;mBAA4C,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IACE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD,SAAS,CAAC;AAEd,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC;CACnC,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,gBAAgB,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACxD,YAAY,EAAE,YAAY,CAAC;QAC3B,mBAAmB,EAAE,SAAS,EAAE,CAAC;QACjC,mIAAmI;QACnI,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,iJAAiJ;QACjJ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAGpC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QACjC,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,EAC7B,IAAI,CAAC,EAAE;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAC,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;QAGnB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;QACvD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACvC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QAC9C,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAG3C,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;QAC3D,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAGvE,OAAO,EAAE,CACP,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE;YAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAC,KAC5C,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QACjC,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QAG3C,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;QAC1D,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;QAC9D,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;QAC1D,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;QACtC,mBAAmB,EAAE,CACnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,EACjD,OAAO,CAAC,EAAE;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAC,EAAE,KACpC,OAAO,CAAC,IAAI,CAAC,CAAC;QAGnB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QACnE,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,oBAAoB,EAAE,CACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAC7C,YAAY,GACZ,eAAe,CAAC;AAElB,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAErD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,SAAS,CAEzD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -38,12 +38,22 @@ export const TextCellData = z.object({
38
38
  title: z.string().default('Text'),
39
39
  text: z.string().default(''),
40
40
  });
41
+ /** Cross-filter configuration for Vega chart cells */
42
+ export const CrossFilterConfig = z.object({
43
+ enabled: z.boolean().default(true),
44
+ brushField: z.string().optional(),
45
+ brushFieldType: z
46
+ .enum(['numeric', 'temporal', 'string'])
47
+ .optional(),
48
+ });
41
49
  /** Vega Cell */
42
50
  export const VegaCellData = z.object({
43
51
  title: z.string().default('Chart'),
44
52
  sqlId: z.string().optional(), // In notebook, it links to another cell. In canvas, it might be the same.
53
+ tableRef: z.string().optional(), // Direct table reference, e.g. "main.flights"
45
54
  sql: z.string().optional(), // In canvas, it often has its own SQL.
46
55
  vegaSpec: z.any().optional(),
56
+ crossFilter: CrossFilterConfig.default({ enabled: true }),
47
57
  });
48
58
  /** Input Cell Data */
49
59
  export const InputCellData = z.object({
@@ -86,7 +96,7 @@ export const Cell = z.object({
86
96
  data: z.record(z.string(), z.any()),
87
97
  });
88
98
  /** Sheet and Edge types */
89
- export const SheetType = z.enum(['notebook', 'canvas', 'app']);
99
+ export const SheetType = z.enum(['notebook', 'canvas', 'app', 'dashboard']);
90
100
  export const EdgeKind = z.enum(['dependency', 'manual']);
91
101
  export const Edge = z.object({
92
102
  id: z.string(),
@@ -98,6 +108,7 @@ export const SheetGraphCache = z.object({
98
108
  dependencies: z.record(z.string(), z.array(z.string())).default({}),
99
109
  dependents: z.record(z.string(), z.array(z.string())).default({}),
100
110
  contentHashByCell: z.record(z.string(), z.string()).optional(),
111
+ tableDependencies: z.record(z.string(), z.array(z.string())).default({}),
101
112
  });
102
113
  export const Sheet = z.object({
103
114
  id: z.string(),
@@ -122,12 +133,13 @@ export const SqlCellStatus = z.object({
122
133
  export const OtherCellStatus = z.object({
123
134
  type: z.literal('other'),
124
135
  });
125
- export const CellStatus = z.union([SqlCellStatus, OtherCellStatus]);
126
136
  export const CellsSliceConfig = z.object({
127
137
  data: z.record(z.string(), Cell).default({}),
128
138
  sheets: z.record(z.string(), Sheet).default({}),
129
139
  sheetOrder: z.array(z.string()).default([]),
130
140
  currentSheetId: z.string().optional(),
141
+ /** Which database schemas' tables are eligible for direct table dependencies. */
142
+ tableDepSchemas: z.array(z.string()).default(['main']),
131
143
  });
132
144
  export function isSqlCell(cell) {
133
145
  return cell.type === 'sql';
@@ -141,4 +153,7 @@ export function isVegaCell(cell) {
141
153
  export function isInputCell(cell) {
142
154
  return cell.type === 'input';
143
155
  }
156
+ export function isSqlCellStatus(status) {
157
+ return status?.type === 'sql';
158
+ }
144
159
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {DbSliceState} from '@sqlrooms/db';\nimport type {BaseRoomStoreState} from '@sqlrooms/room-store';\nimport type * as arrow from 'apache-arrow';\nimport type React from 'react';\nimport {z} from 'zod';\n\n/** Cell types */\nexport type BuiltInCellType = 'sql' | 'text' | 'vega' | 'input';\nexport type CellType = BuiltInCellType | (string & {});\nexport const CellType = z.string();\n\n/** Input Cell types */\nexport const InputTypes = z.enum(['text', 'slider', 'dropdown']);\nexport type InputTypes = z.infer<typeof InputTypes>;\n\nexport const InputText = z.object({\n kind: z.literal(InputTypes.enum.text),\n varName: z.string(),\n value: z.string().default(''),\n});\nexport type InputText = z.infer<typeof InputText>;\n\nexport const InputSlider = z.object({\n kind: z.literal(InputTypes.enum.slider),\n varName: z.string(),\n min: z.number().default(0),\n max: z.number().default(100),\n step: z.number().default(1),\n value: z.number().default(0),\n});\nexport type InputSlider = z.infer<typeof InputSlider>;\n\nexport const InputDropdown = z.object({\n kind: z.literal(InputTypes.enum.dropdown),\n varName: z.string(),\n options: z.array(z.string()).default([]),\n value: z.string().default(''),\n});\nexport type InputDropdown = z.infer<typeof InputDropdown>;\n\nexport const InputUnion = z.discriminatedUnion('kind', [\n InputText,\n InputSlider,\n InputDropdown,\n]);\nexport type InputUnion = z.infer<typeof InputUnion>;\n\n/** SQL Cell */\nexport const SqlCellData = z.object({\n title: z.string().default('Untitled'),\n sql: z.string().default(''),\n resultName: z.string().optional(), // SQL-friendly identifier for the result view\n connectorId: z.string().optional(),\n});\nexport type SqlCellData = z.infer<typeof SqlCellData>;\n\n/** Text Cell */\nexport const TextCellData = z.object({\n title: z.string().default('Text'),\n text: z.string().default(''),\n});\nexport type TextCellData = z.infer<typeof TextCellData>;\n\n/** Vega Cell */\nexport const VegaCellData = z.object({\n title: z.string().default('Chart'),\n sqlId: z.string().optional(), // In notebook, it links to another cell. In canvas, it might be the same.\n sql: z.string().optional(), // In canvas, it often has its own SQL.\n vegaSpec: z.any().optional(),\n});\nexport type VegaCellData = z.infer<typeof VegaCellData>;\n\n/** Input Cell Data */\nexport const InputCellData = z.object({\n title: z.string().default('Input'),\n input: InputUnion,\n});\nexport type InputCellData = z.infer<typeof InputCellData>;\n\n/** Unified Cell Data */\nexport const CellData = z.object({\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type CellData = {\n type: CellType;\n data: Record<string, any>;\n};\n\nexport const SqlCell = z.object({\n id: z.string(),\n type: z.literal('sql'),\n data: SqlCellData,\n});\nexport type SqlCell = z.infer<typeof SqlCell>;\n\nexport const TextCell = z.object({\n id: z.string(),\n type: z.literal('text'),\n data: TextCellData,\n});\nexport type TextCell = z.infer<typeof TextCell>;\n\nexport const VegaCell = z.object({\n id: z.string(),\n type: z.literal('vega'),\n data: VegaCellData,\n});\nexport type VegaCell = z.infer<typeof VegaCell>;\n\nexport const InputCell = z.object({\n id: z.string(),\n type: z.literal('input'),\n data: InputCellData,\n});\nexport type InputCell = z.infer<typeof InputCell>;\nexport const SqlCellSchema = SqlCell;\nexport const TextCellSchema = TextCell;\nexport const VegaCellSchema = VegaCell;\nexport const InputCellSchema = InputCell;\n\n/** Canonical Cell */\nexport const Cell = z.object({\n id: z.string(),\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type Cell = {\n id: string;\n type: CellType;\n data: Record<string, any>;\n};\n\n/** Unified Cell Registry */\nexport type CellContainerProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n};\n\n/** Type for SQL AST parsing function from DuckDB slice */\nexport type SqlSelectToJsonFn = (sql: string) => Promise<{\n error: boolean;\n error_type?: string;\n statements?: unknown[];\n}>;\n\nexport type CellRegistryItem<TCell extends Cell = Cell> = {\n type: string;\n title: string;\n createCell: (id: string) => TCell;\n renderCell: (props: {\n id: string;\n cell: TCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n }) => React.ReactElement;\n /** Find dependencies for DAG using AST-enabled async resolution. */\n findDependencies: (args: {\n cell: TCell;\n cells: Record<string, Cell>;\n sheetId: string;\n sqlSelectToJson: SqlSelectToJsonFn;\n }) => Promise<string[]>;\n /** Optional: custom execution logic (defaults to SQL execution for sql type) */\n runCell?: (args: {\n id: string;\n opts?: {cascade?: boolean; schemaName?: string};\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n /** Optional: rename the result view when resultName changes */\n renameResult?: (args: {\n id: string;\n oldResultView: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n};\n\nexport type CellRegistry = Record<string, CellRegistryItem<any>>;\n\n/** Sheet and Edge types */\nexport const SheetType = z.enum(['notebook', 'canvas', 'app']);\nexport type SheetType = z.infer<typeof SheetType>;\n\nexport const EdgeKind = z.enum(['dependency', 'manual']);\nexport type EdgeKind = z.infer<typeof EdgeKind>;\n\nexport const Edge = z.object({\n id: z.string(),\n source: z.string(), // cellId\n target: z.string(), // cellId\n kind: EdgeKind.optional(),\n});\nexport type Edge = z.infer<typeof Edge>;\n\nexport const SheetGraphCache = z.object({\n dependencies: z.record(z.string(), z.array(z.string())).default({}),\n dependents: z.record(z.string(), z.array(z.string())).default({}),\n contentHashByCell: z.record(z.string(), z.string()).optional(),\n});\nexport type SheetGraphCache = z.infer<typeof SheetGraphCache>;\n\nexport const Sheet = z.object({\n id: z.string(),\n type: SheetType,\n title: z.string(),\n schemaName: z.string().optional(),\n cellIds: z.array(z.string()).default([]), // Which cells belong to this sheet\n edges: z.array(Edge).default([]), // Dependencies\n graphCache: SheetGraphCache.optional(),\n});\nexport type Sheet = z.infer<typeof Sheet>;\n\n/** Cell Status */\nexport const SqlCellStatus = z.object({\n type: z.literal('sql'),\n status: z.enum(['idle', 'running', 'success', 'cancel', 'error']),\n lastError: z.string().optional(),\n referencedTables: z.array(z.string()).default([]),\n resultName: z.string().optional(),\n resultView: z.string().optional(),\n resultRelationType: z.enum(['view', 'table']).optional(),\n lastRunTime: z.number().optional(),\n});\nexport type SqlCellStatus = z.infer<typeof SqlCellStatus>;\n\nexport const OtherCellStatus = z.object({\n type: z.literal('other'),\n});\nexport type OtherCellStatus = z.infer<typeof OtherCellStatus>;\n\nexport const CellStatus = z.union([SqlCellStatus, OtherCellStatus]);\nexport type CellStatus = z.infer<typeof CellStatus>;\n\n/** SQL execution results */\nexport type SqlRunResult = {\n resultName?: string;\n referencedTables?: string[];\n lastRunTime?: number;\n};\n\nexport type SqlRunCallbacks = {\n onStart?: () => void;\n onSuccess?: (result: SqlRunResult) => void;\n onError?: (message: string) => void;\n onFinally?: () => void;\n};\n\nexport type SqlRenderInput = {\n varName: string;\n value: string | number;\n};\n\nexport type SqlDependencyOptions = {\n inputTypes?: string[];\n sqlTypes?: string[];\n};\n\nexport type SqlCellRunStatus =\n | {\n state: 'idle' | 'running' | 'success' | 'cancel' | 'error';\n message?: string;\n resultName?: string;\n }\n | undefined;\n\nexport const CellsSliceConfig = z.object({\n data: z.record(z.string(), Cell).default({}),\n sheets: z.record(z.string(), Sheet).default({}),\n sheetOrder: z.array(z.string()).default([]),\n currentSheetId: z.string().optional(),\n});\nexport type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;\n\nexport type CellsSliceOptions = {\n config?: Partial<CellsSliceConfig>;\n cellRegistry: CellRegistry;\n supportedSheetTypes?: SheetType[];\n};\n\n/** Data stored for a cell's query result */\nexport type CellResultData = {\n arrowTable: arrow.Table;\n totalRows: number;\n};\n\nexport type CellsSliceState = {\n cells: {\n config: CellsSliceConfig;\n status: Record<string, CellStatus>;\n activeAbortControllers: Record<string, AbortController>;\n cellRegistry: CellRegistry;\n supportedSheetTypes: SheetType[];\n /** Monotonic counter per cell, incremented when a new execution result arrives. Used to trigger pagination reset and re-render. */\n resultVersion: Record<string, number>;\n /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */\n pageVersion: Record<string, number>;\n\n // Cell CRUD\n addCell: (sheetId: string, cell: Cell, index?: number) => Promise<void>;\n removeCell: (id: string) => void;\n updateCell: (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n\n // Sheet CRUD\n addSheet: (title?: string, type?: SheetType) => string;\n removeSheet: (sheetId: string) => void;\n closeSheet: (sheetId: string) => void;\n openSheet: (sheetId: string) => void;\n setSheetOrder: (sheetOrder: string[]) => void;\n renameSheet: (sheetId: string, title: string) => void;\n setCurrentSheet: (sheetId: string) => void;\n\n // Edge management\n addEdge: (sheetId: string, edge: Omit<Edge, 'id'>) => void;\n removeEdge: (sheetId: string, edgeId: string) => void;\n updateEdgesFromSql: (sheetId: string, cellId: string) => Promise<void>;\n\n // Execution\n runCell: (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => Promise<void>;\n cancelCell: (id: string) => void;\n invalidateCellStatus: (id: string) => void;\n\n // Cell result cache\n setCellResult: (id: string, data: CellResultData) => void;\n setCellResultPage: (id: string, data: CellResultData) => void;\n getCellResult: (id: string) => CellResultData | undefined;\n clearCellResult: (id: string) => void;\n fetchCellResultPage: (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => Promise<void>;\n\n // DAG methods\n getDownstream: (sheetId: string, sourceCellId: string) => string[];\n getRootCells: (sheetId: string) => string[];\n runAllCellsCascade: (sheetId: string) => Promise<void>;\n runDownstreamCascade: (\n sheetId: string,\n sourceCellId: string,\n ) => Promise<void>;\n };\n};\n\nexport type CellsRootState = BaseRoomStoreState &\n DbSliceState &\n CellsSliceState;\n\nexport function isSqlCell(cell: Cell): cell is SqlCell {\n return cell.type === 'sql';\n}\n\nexport function isTextCell(cell: Cell): cell is TextCell {\n return cell.type === 'text';\n}\n\nexport function isVegaCell(cell: Cell): cell is VegaCell {\n return cell.type === 'vega';\n}\n\nexport function isInputCell(cell: Cell): cell is InputCell {\n return cell.type === 'input';\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type {DbSliceState} from '@sqlrooms/db';\nimport type {BaseRoomStoreState, SliceFunctions} from '@sqlrooms/room-store';\nimport type * as arrow from 'apache-arrow';\nimport type React from 'react';\nimport {z} from 'zod';\n\n/** Cell types */\nexport type BuiltInCellType = 'sql' | 'text' | 'vega' | 'input';\nexport type CellType = BuiltInCellType | (string & {});\nexport const CellType = z.string();\n\n/** Input Cell types */\nexport const InputTypes = z.enum(['text', 'slider', 'dropdown']);\nexport type InputTypes = z.infer<typeof InputTypes>;\n\nexport const InputText = z.object({\n kind: z.literal(InputTypes.enum.text),\n varName: z.string(),\n value: z.string().default(''),\n});\nexport type InputText = z.infer<typeof InputText>;\n\nexport const InputSlider = z.object({\n kind: z.literal(InputTypes.enum.slider),\n varName: z.string(),\n min: z.number().default(0),\n max: z.number().default(100),\n step: z.number().default(1),\n value: z.number().default(0),\n});\nexport type InputSlider = z.infer<typeof InputSlider>;\n\nexport const InputDropdown = z.object({\n kind: z.literal(InputTypes.enum.dropdown),\n varName: z.string(),\n options: z.array(z.string()).default([]),\n value: z.string().default(''),\n});\nexport type InputDropdown = z.infer<typeof InputDropdown>;\n\nexport const InputUnion = z.discriminatedUnion('kind', [\n InputText,\n InputSlider,\n InputDropdown,\n]);\nexport type InputUnion = z.infer<typeof InputUnion>;\n\n/** SQL Cell */\nexport const SqlCellData = z.object({\n title: z.string().default('Untitled'),\n sql: z.string().default(''),\n resultName: z.string().optional(), // SQL-friendly identifier for the result view\n connectorId: z.string().optional(),\n});\nexport type SqlCellData = z.infer<typeof SqlCellData>;\n\n/** Text Cell */\nexport const TextCellData = z.object({\n title: z.string().default('Text'),\n text: z.string().default(''),\n});\nexport type TextCellData = z.infer<typeof TextCellData>;\n\n/** Field type category for cross-filter predicates */\nexport type BrushFieldType = 'numeric' | 'temporal' | 'string';\n\n/** Cross-filter configuration for Vega chart cells */\nexport const CrossFilterConfig = z.object({\n enabled: z.boolean().default(true),\n brushField: z.string().optional(),\n brushFieldType: z\n .enum(['numeric', 'temporal', 'string'])\n .optional() as z.ZodOptional<z.ZodType<BrushFieldType>>,\n});\nexport type CrossFilterConfig = z.infer<typeof CrossFilterConfig>;\n\n/** Vega Cell */\nexport const VegaCellData = z.object({\n title: z.string().default('Chart'),\n sqlId: z.string().optional(), // In notebook, it links to another cell. In canvas, it might be the same.\n tableRef: z.string().optional(), // Direct table reference, e.g. \"main.flights\"\n sql: z.string().optional(), // In canvas, it often has its own SQL.\n vegaSpec: z.any().optional(),\n crossFilter: CrossFilterConfig.default({enabled: true}),\n});\nexport type VegaCellData = z.infer<typeof VegaCellData>;\n\n/** Input Cell Data */\nexport const InputCellData = z.object({\n title: z.string().default('Input'),\n input: InputUnion,\n});\nexport type InputCellData = z.infer<typeof InputCellData>;\n\n/** Unified Cell Data */\nexport const CellData = z.object({\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type CellData = {\n type: CellType;\n data: Record<string, any>;\n};\n\nexport const SqlCell = z.object({\n id: z.string(),\n type: z.literal('sql'),\n data: SqlCellData,\n});\nexport type SqlCell = z.infer<typeof SqlCell>;\n\nexport const TextCell = z.object({\n id: z.string(),\n type: z.literal('text'),\n data: TextCellData,\n});\nexport type TextCell = z.infer<typeof TextCell>;\n\nexport const VegaCell = z.object({\n id: z.string(),\n type: z.literal('vega'),\n data: VegaCellData,\n});\nexport type VegaCell = z.infer<typeof VegaCell>;\n\nexport const InputCell = z.object({\n id: z.string(),\n type: z.literal('input'),\n data: InputCellData,\n});\nexport type InputCell = z.infer<typeof InputCell>;\nexport const SqlCellSchema = SqlCell;\nexport const TextCellSchema = TextCell;\nexport const VegaCellSchema = VegaCell;\nexport const InputCellSchema = InputCell;\n\n/** Canonical Cell */\nexport const Cell = z.object({\n id: z.string(),\n type: CellType,\n data: z.record(z.string(), z.any()),\n});\nexport type Cell = {\n id: string;\n type: CellType;\n data: Record<string, any>;\n};\n\n/** Unified Cell Registry */\nexport type CellContainerProps = {\n header?: React.ReactNode;\n content: React.ReactNode;\n footer?: React.ReactNode;\n showHeader?: boolean;\n};\n\n/** Type for SQL AST parsing function from DuckDB slice */\nexport type SqlSelectToJsonFn = (sql: string) => Promise<{\n error: boolean;\n error_type?: string;\n statements?: unknown[];\n}>;\n\n/** Return type from findDependencies: cell IDs and optional table names. */\nexport type CellDependencies = {\n cellIds: string[];\n tableNames?: string[];\n};\n\nexport type CreateCellArgs = {\n id: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n};\n\nexport type CellRegistryItem<TCell extends Cell = Cell> = {\n type: string;\n title: string;\n createCell: (args: CreateCellArgs) => TCell;\n renderCell: (props: {\n id: string;\n cell: TCell;\n renderContainer: (props: CellContainerProps) => React.ReactElement;\n }) => React.ReactElement;\n /** Find dependencies for DAG using AST-enabled async resolution. */\n findDependencies: (args: {\n cell: TCell;\n cells: Record<string, Cell>;\n sheetId: string;\n sqlSelectToJson: SqlSelectToJsonFn;\n }) => Promise<string[] | CellDependencies>;\n /** Optional: custom execution logic (defaults to SQL execution for sql type) */\n runCell?: (args: {\n id: string;\n opts?: {cascade?: boolean; schemaName?: string};\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n /** Optional: rename the result view when resultName changes */\n renameResult?: (args: {\n id: string;\n oldResultView: string;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void>;\n\n /** Return initial CellStatus when a cell is first added. Default: {type:'other'} */\n createStatus?: (id: string) => CellStatus;\n /** Called once during cells.initialize() for each cell of this type. Reset ephemeral runtime state after hydration. */\n onInitialize?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => void;\n /** Called when cell is removed. Clean up DuckDB relations, caches, etc. */\n onRemove?: (args: {\n id: string;\n status: CellStatus | undefined;\n get: () => CellsRootState;\n set: (updater: (state: CellsRootState) => CellsRootState) => void;\n }) => Promise<void> | void;\n /** Detect whether an updateCell change is semantically significant for this cell type. */\n hasSemanticChange?: (oldCell: TCell, newCell: TCell) => boolean;\n /** Reset status to idle/stale. Called by invalidateCellStatus. If not provided, status is set to {type:'other'}. */\n invalidateStatus?: (currentStatus: CellStatus) => CellStatus;\n /** Collect DuckDB relation names that should be dropped when this cell is removed. */\n getRelationsToDrop?: (status: CellStatus) => string[];\n /** Record an error on the cell status during cascade execution. */\n recordError?: (currentStatus: CellStatus, message: string) => CellStatus;\n /** Return the query relation name for paged fetches, if applicable. */\n getResultRelation?: (status: CellStatus) => string | undefined;\n};\n\nexport type CellRegistry = Record<string, CellRegistryItem<any>>;\n\n/** Sheet and Edge types */\nexport const SheetType = z.enum(['notebook', 'canvas', 'app', 'dashboard']);\nexport type SheetType = z.infer<typeof SheetType>;\n\nexport const EdgeKind = z.enum(['dependency', 'manual']);\nexport type EdgeKind = z.infer<typeof EdgeKind>;\n\nexport const Edge = z.object({\n id: z.string(),\n source: z.string(), // cellId\n target: z.string(), // cellId\n kind: EdgeKind.optional(),\n});\nexport type Edge = z.infer<typeof Edge>;\n\nexport const SheetGraphCache = z.object({\n dependencies: z.record(z.string(), z.array(z.string())).default({}),\n dependents: z.record(z.string(), z.array(z.string())).default({}),\n contentHashByCell: z.record(z.string(), z.string()).optional(),\n tableDependencies: z.record(z.string(), z.array(z.string())).default({}),\n});\nexport type SheetGraphCache = z.infer<typeof SheetGraphCache>;\n\nexport const Sheet = z.object({\n id: z.string(),\n type: SheetType,\n title: z.string(),\n schemaName: z.string().optional(),\n cellIds: z.array(z.string()).default([]), // Which cells belong to this sheet\n edges: z.array(Edge).default([]), // Dependencies\n graphCache: SheetGraphCache.optional(),\n});\nexport type Sheet = z.infer<typeof Sheet>;\n\n/** Cell Status */\nexport const SqlCellStatus = z.object({\n type: z.literal('sql'),\n status: z.enum(['idle', 'running', 'success', 'cancel', 'error']),\n lastError: z.string().optional(),\n referencedTables: z.array(z.string()).default([]),\n resultName: z.string().optional(),\n resultView: z.string().optional(),\n resultRelationType: z.enum(['view', 'table']).optional(),\n lastRunTime: z.number().optional(),\n});\nexport type SqlCellStatus = z.infer<typeof SqlCellStatus>;\n\nexport const OtherCellStatus = z.object({\n type: z.literal('other'),\n});\nexport type OtherCellStatus = z.infer<typeof OtherCellStatus>;\n\n/** Extensible cell status -- each cell type defines its own shape with a discriminating `type` field. */\nexport type CellStatus = {type: string; [key: string]: unknown};\n\n/** SQL execution results */\nexport type SqlRunResult = {\n resultName?: string;\n referencedTables?: string[];\n lastRunTime?: number;\n};\n\nexport type SqlRunCallbacks = {\n onStart?: () => void;\n onSuccess?: (result: SqlRunResult) => void;\n onError?: (message: string) => void;\n onFinally?: () => void;\n};\n\nexport type SqlRenderInput = {\n varName: string;\n value: string | number;\n};\n\nexport type SqlDependencyOptions = {\n inputTypes?: string[];\n sqlTypes?: string[];\n};\n\nexport type SqlCellRunStatus =\n | {\n state: 'idle' | 'running' | 'success' | 'cancel' | 'error';\n message?: string;\n resultName?: string;\n }\n | undefined;\n\nexport const CellsSliceConfig = z.object({\n data: z.record(z.string(), Cell).default({}),\n sheets: z.record(z.string(), Sheet).default({}),\n sheetOrder: z.array(z.string()).default([]),\n currentSheetId: z.string().optional(),\n /** Which database schemas' tables are eligible for direct table dependencies. */\n tableDepSchemas: z.array(z.string()).default(['main']),\n});\nexport type CellsSliceConfig = z.infer<typeof CellsSliceConfig>;\n\nexport type CellsSliceOptions = {\n config?: Partial<CellsSliceConfig>;\n cellRegistry: CellRegistry;\n supportedSheetTypes?: SheetType[];\n};\n\n/** Data stored for a cell's query result */\nexport type CellResultData = {\n arrowTable: arrow.Table;\n totalRows: number;\n};\n\n/** Cross-filter selection value emitted by a Vega chart brush */\nexport type CrossFilterSelection = {\n field: string;\n fieldType?: BrushFieldType;\n type: 'interval' | 'point';\n value: unknown;\n};\n\nexport type CellsSliceState = {\n cells: SliceFunctions & {\n config: CellsSliceConfig;\n status: Record<string, CellStatus>;\n activeAbortControllers: Record<string, AbortController>;\n cellRegistry: CellRegistry;\n supportedSheetTypes: SheetType[];\n /** Monotonic counter per cell, incremented when a new execution result arrives. Used to trigger pagination reset and re-render. */\n resultVersion: Record<string, number>;\n /** Monotonic counter per cell, incremented when a pagination/sorting fetch completes. Used to trigger re-render without resetting pagination. */\n pageVersion: Record<string, number>;\n\n /**\n * Ephemeral cross-filter selections (not persisted).\n * Outer key: sqlId (the shared data source), inner key: chartCellId.\n */\n crossFilterSelections: Record<\n string,\n Record<string, CrossFilterSelection | null>\n >;\n setCrossFilterSelection: (\n chartCellId: string,\n sqlId: string,\n selection: CrossFilterSelection | null,\n ) => void;\n getCrossFilterPredicate: (\n chartCellId: string,\n sqlId: string,\n ) => string | null;\n clearCrossFilterGroup: (sqlId: string) => void;\n\n // Cell CRUD\n addCell: (sheetId: string, cell: Cell, index?: number) => Promise<void>;\n removeCell: (id: string) => void;\n updateCell: (\n id: string,\n updater: (cell: Cell) => Cell,\n opts?: {cascade?: boolean},\n ) => Promise<void>;\n\n // Sheet CRUD\n addSheet: (title?: string, type?: SheetType) => string;\n removeSheet: (sheetId: string) => void;\n closeSheet: (sheetId: string) => void;\n openSheet: (sheetId: string) => void;\n setSheetOrder: (sheetOrder: string[]) => void;\n renameSheet: (sheetId: string, title: string) => void;\n setCurrentSheet: (sheetId: string) => void;\n\n // Edge management\n addEdge: (sheetId: string, edge: Omit<Edge, 'id'>) => void;\n removeEdge: (sheetId: string, edgeId: string) => void;\n updateEdgesFromSql: (sheetId: string, cellId: string) => Promise<void>;\n\n // Execution\n runCell: (\n id: string,\n opts?: {cascade?: boolean; schemaName?: string},\n ) => Promise<void>;\n cancelCell: (id: string) => void;\n invalidateCellStatus: (id: string) => void;\n\n // Cell result cache\n setCellResult: (id: string, data: CellResultData) => void;\n setCellResultPage: (id: string, data: CellResultData) => void;\n getCellResult: (id: string) => CellResultData | undefined;\n clearCellResult: (id: string) => void;\n fetchCellResultPage: (\n id: string,\n pagination: {pageIndex: number; pageSize: number},\n sorting?: {id: string; desc: boolean}[],\n ) => Promise<void>;\n\n // DAG methods\n getDownstream: (sheetId: string, sourceCellId: string) => string[];\n getRootCells: (sheetId: string) => string[];\n runAllCellsCascade: (sheetId: string) => Promise<void>;\n runDownstreamCascade: (\n sheetId: string,\n sourceCellId: string,\n ) => Promise<void>;\n };\n // Slice lifecycle\n initialize?: () => Promise<void>;\n};\n\nexport type CellsRootState = BaseRoomStoreState &\n DbSliceState &\n CellsSliceState;\n\nexport function isSqlCell(cell: Cell): cell is SqlCell {\n return cell.type === 'sql';\n}\n\nexport function isTextCell(cell: Cell): cell is TextCell {\n return cell.type === 'text';\n}\n\nexport function isVegaCell(cell: Cell): cell is VegaCell {\n return cell.type === 'vega';\n}\n\nexport function isInputCell(cell: Cell): cell is InputCell {\n return cell.type === 'input';\n}\n\nexport function isSqlCellStatus(\n status: CellStatus | undefined,\n): status is SqlCellStatus {\n return status?.type === 'sql';\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import type { Cell } from './types';
2
+ /**
3
+ * Validates whether a proposed result name is available for a SQL cell.
4
+ *
5
+ * Returns a human-readable error message if the name is taken or would cause
6
+ * problems, or `null` if the name is acceptable.
7
+ *
8
+ * Checks performed (in order):
9
+ * 1. Basic validation (empty, valid SQL identifier)
10
+ * 2. Not already used by another SQL cell in the same sheet (name collision).
11
+ * 3. Not conflicting with a main-schema table name (would shadow real data).
12
+ * 4. Not creating a self-reference cycle (SQL references the proposed name).
13
+ */
14
+ export declare function validateResultName(opts: {
15
+ proposedName: string;
16
+ currentCellId: string;
17
+ currentCellSql: string;
18
+ sheetCellIds: string[];
19
+ cells: Record<string, Cell>;
20
+ mainSchemaTableNames: ReadonlyArray<string>;
21
+ convertToValidName: (name: string) => string;
22
+ }): string | null;
23
+ /**
24
+ * Hook to validate SQL cell result names.
25
+ * Returns an error message if invalid, or null if valid.
26
+ *
27
+ * Performs all validation checks via validateResultName:
28
+ * 1. Basic validation (empty, valid SQL identifier)
29
+ * 2. Name collision with other cells
30
+ * 3. Conflict with main-schema tables
31
+ * 4. Self-reference cycle detection
32
+ */
33
+ export declare function useValidateResultName(cellId: string, name: string): string | null;
34
+ //# sourceMappingURL=useValidateResultName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useValidateResultName.d.ts","sourceRoot":"","sources":["../src/useValidateResultName.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,IAAI,EAAc,MAAM,SAAS,CAAC;AA4B/C;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C,GAAG,MAAM,GAAG,IAAI,CAwDhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAyCf"}
@@ -0,0 +1,111 @@
1
+ import { convertToValidColumnOrTableName } from '@sqlrooms/utils';
2
+ import { useMemo } from 'react';
3
+ import { useCellsStore } from './hooks';
4
+ import { getEffectiveResultName, isValidSqlIdentifier } from './utils';
5
+ function escapeRegExp(s) {
6
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
7
+ }
8
+ /**
9
+ * Strips single-quoted SQL string literals from text so that identifier
10
+ * checks don't produce false positives on quoted string content.
11
+ * Handles escaped single-quotes inside literals (e.g. 'it''s fine').
12
+ */
13
+ function stripStringLiterals(sql) {
14
+ return sql.replace(/'(?:[^']|'')*'/g, "''");
15
+ }
16
+ function containsIdentifier(text, name) {
17
+ // The lookbehind includes '.' so that qualified names like `schema.my_result`
18
+ // are NOT matched — we only want to detect unqualified references.
19
+ // The lookahead intentionally omits '.' so that column-access expressions like
20
+ // `my_result.column` ARE matched (they reference the `my_result` table).
21
+ const pattern = new RegExp(`(?<![a-zA-Z0-9_.])${escapeRegExp(name)}(?![a-zA-Z0-9_])`, 'i');
22
+ return pattern.test(stripStringLiterals(text));
23
+ }
24
+ /**
25
+ * Validates whether a proposed result name is available for a SQL cell.
26
+ *
27
+ * Returns a human-readable error message if the name is taken or would cause
28
+ * problems, or `null` if the name is acceptable.
29
+ *
30
+ * Checks performed (in order):
31
+ * 1. Basic validation (empty, valid SQL identifier)
32
+ * 2. Not already used by another SQL cell in the same sheet (name collision).
33
+ * 3. Not conflicting with a main-schema table name (would shadow real data).
34
+ * 4. Not creating a self-reference cycle (SQL references the proposed name).
35
+ */
36
+ export function validateResultName(opts) {
37
+ const { proposedName, currentCellId, currentCellSql, sheetCellIds, cells, mainSchemaTableNames, convertToValidName, } = opts;
38
+ const trimmedName = proposedName.trim();
39
+ // 1. Basic validation first
40
+ if (!trimmedName) {
41
+ return 'Cannot be empty';
42
+ }
43
+ if (!isValidSqlIdentifier(trimmedName)) {
44
+ return 'Must be a valid SQL identifier';
45
+ }
46
+ const nameLower = trimmedName.toLowerCase();
47
+ // 2. Check for name collision with other SQL cells in the same sheet
48
+ for (const cellId of sheetCellIds) {
49
+ if (cellId === currentCellId) {
50
+ continue;
51
+ }
52
+ const cell = cells[cellId];
53
+ if (!cell || cell.type !== 'sql') {
54
+ continue;
55
+ }
56
+ const otherName = getEffectiveResultName(cell.data, convertToValidName);
57
+ if (otherName.toLowerCase() === nameLower) {
58
+ return 'Already used by another cell';
59
+ }
60
+ }
61
+ // 3. Check for conflict with main-schema table names
62
+ if (mainSchemaTableNames.some((t) => t.toLowerCase() === nameLower)) {
63
+ return 'Conflicts with existing table';
64
+ }
65
+ // 4. Check for self-reference cycle: the cell's SQL references the proposed name
66
+ if (containsIdentifier(currentCellSql, trimmedName)) {
67
+ return 'Name creates a dependency cycle';
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Hook to validate SQL cell result names.
73
+ * Returns an error message if invalid, or null if valid.
74
+ *
75
+ * Performs all validation checks via validateResultName:
76
+ * 1. Basic validation (empty, valid SQL identifier)
77
+ * 2. Name collision with other cells
78
+ * 3. Conflict with main-schema tables
79
+ * 4. Self-reference cycle detection
80
+ */
81
+ export function useValidateResultName(cellId, name) {
82
+ const currentSheetId = useCellsStore((s) => s.cells.config.currentSheetId);
83
+ const cellsData = useCellsStore((s) => s.cells.config.data);
84
+ const sheets = useCellsStore((s) => s.cells.config.sheets);
85
+ const tableSchemas = useCellsStore((s) => s.db.tables);
86
+ const currentCell = cellsData[cellId];
87
+ const currentCellSql = currentCell?.type === 'sql' ? currentCell.data.sql : '';
88
+ const sheetCellIds = useMemo(() => (currentSheetId ? (sheets[currentSheetId]?.cellIds ?? []) : []), [currentSheetId, sheets]);
89
+ const mainSchemaTableNames = useMemo(() => tableSchemas
90
+ .filter((t) => (t.table.schema ?? t.schema) === 'main')
91
+ .map((t) => t.table.table ?? t.tableName), [tableSchemas]);
92
+ return useMemo(() => {
93
+ return validateResultName({
94
+ proposedName: name,
95
+ currentCellId: cellId,
96
+ currentCellSql,
97
+ sheetCellIds,
98
+ cells: cellsData,
99
+ mainSchemaTableNames,
100
+ convertToValidName: convertToValidColumnOrTableName,
101
+ });
102
+ }, [
103
+ name,
104
+ cellId,
105
+ currentCellSql,
106
+ sheetCellIds,
107
+ cellsData,
108
+ mainSchemaTableNames,
109
+ ]);
110
+ }
111
+ //# sourceMappingURL=useValidateResultName.js.map