@sqlrooms/notebook 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.
- package/dist/NotebookSlice.js +1 -1
- package/dist/NotebookSlice.js.map +1 -1
- package/dist/NotebookUtils.d.ts.map +1 -1
- package/dist/NotebookUtils.js +1 -0
- package/dist/NotebookUtils.js.map +1 -1
- package/dist/cellOperations/AddNewCellDropdown.js +2 -2
- package/dist/cellOperations/AddNewCellDropdown.js.map +1 -1
- package/dist/cellOperations/AddNewCellTabs.js +1 -1
- package/dist/cellOperations/AddNewCellTabs.js.map +1 -1
- package/dist/cellOperations/AddSqlCellResultToNewTable.d.ts +4 -0
- package/dist/cellOperations/AddSqlCellResultToNewTable.d.ts.map +1 -0
- package/dist/cellOperations/AddSqlCellResultToNewTable.js +12 -0
- package/dist/cellOperations/AddSqlCellResultToNewTable.js.map +1 -0
- package/dist/cellOperations/IconWithTooltip.d.ts +10 -0
- package/dist/cellOperations/IconWithTooltip.d.ts.map +1 -0
- package/dist/cellOperations/IconWithTooltip.js +9 -0
- package/dist/cellOperations/IconWithTooltip.js.map +1 -0
- package/dist/cellSchemas.d.ts +40 -3
- package/dist/cellSchemas.d.ts.map +1 -1
- package/dist/cellSchemas.js +9 -2
- package/dist/cellSchemas.js.map +1 -1
- package/dist/cells/CellContainer.d.ts +4 -2
- package/dist/cells/CellContainer.d.ts.map +1 -1
- package/dist/cells/CellContainer.js +10 -6
- package/dist/cells/CellContainer.js.map +1 -1
- package/dist/cells/CellView.d.ts.map +1 -1
- package/dist/cells/CellView.js +1 -1
- package/dist/cells/CellView.js.map +1 -1
- package/dist/cells/Input/InputCell.d.ts +8 -0
- package/dist/cells/Input/InputCell.d.ts.map +1 -0
- package/dist/cells/Input/InputCell.js +40 -0
- package/dist/cells/Input/InputCell.js.map +1 -0
- package/dist/cells/Input/InputConfigPanel/DropdownConfig.d.ts +2 -0
- package/dist/cells/Input/InputConfigPanel/DropdownConfig.d.ts.map +1 -0
- package/dist/cells/Input/InputConfigPanel/DropdownConfig.js +44 -0
- package/dist/cells/Input/InputConfigPanel/DropdownConfig.js.map +1 -0
- package/dist/cells/Input/InputConfigPanel/InputConfigPanel.d.ts +11 -0
- package/dist/cells/Input/InputConfigPanel/InputConfigPanel.d.ts.map +1 -0
- package/dist/cells/Input/InputConfigPanel/InputConfigPanel.js +65 -0
- package/dist/cells/Input/InputConfigPanel/InputConfigPanel.js.map +1 -0
- package/dist/cells/Input/InputConfigPanel/SliderConfig.d.ts +2 -0
- package/dist/cells/Input/InputConfigPanel/SliderConfig.d.ts.map +1 -0
- package/dist/cells/Input/InputConfigPanel/SliderConfig.js +18 -0
- package/dist/cells/Input/InputConfigPanel/SliderConfig.js.map +1 -0
- package/dist/cells/Input/InputConfigPanel/TextConfig.d.ts +2 -0
- package/dist/cells/Input/InputConfigPanel/TextConfig.d.ts.map +1 -0
- package/dist/cells/Input/InputConfigPanel/TextConfig.js +8 -0
- package/dist/cells/Input/InputConfigPanel/TextConfig.js.map +1 -0
- package/dist/cells/InputBar.d.ts +9 -0
- package/dist/cells/InputBar.d.ts.map +1 -0
- package/dist/cells/InputBar.js +23 -0
- package/dist/cells/InputBar.js.map +1 -0
- package/dist/cells/SqlCell.d.ts +5 -0
- package/dist/cells/SqlCell.d.ts.map +1 -0
- package/dist/cells/SqlCell.js +29 -0
- package/dist/cells/SqlCell.js.map +1 -0
- package/dist/cells/TextCell.d.ts +5 -0
- package/dist/cells/TextCell.d.ts.map +1 -0
- package/dist/cells/TextCell.js +36 -0
- package/dist/cells/TextCell.js.map +1 -0
- package/dist/cells/Vega/VegaCell.d.ts +5 -0
- package/dist/cells/Vega/VegaCell.d.ts.map +1 -0
- package/dist/cells/Vega/VegaCell.js +78 -0
- package/dist/cells/Vega/VegaCell.js.map +1 -0
- package/dist/cells/Vega/VegaConfigPanel.d.ts +8 -0
- package/dist/cells/Vega/VegaConfigPanel.d.ts.map +1 -0
- package/dist/cells/Vega/VegaConfigPanel.js +72 -0
- package/dist/cells/Vega/VegaConfigPanel.js.map +1 -0
- package/dist/crdt.d.ts +51 -0
- package/dist/crdt.d.ts.map +1 -0
- package/dist/crdt.js +74 -0
- package/dist/crdt.js.map +1 -0
- package/package.json +9 -9
package/dist/NotebookSlice.js
CHANGED
|
@@ -83,7 +83,7 @@ export function createNotebookSlice(props) {
|
|
|
83
83
|
const reg = get().cells.cellRegistry[type];
|
|
84
84
|
if (!reg)
|
|
85
85
|
return id;
|
|
86
|
-
const cell = reg.createCell(id);
|
|
86
|
+
const cell = reg.createCell({ id, get, set });
|
|
87
87
|
// Assign a readable unique name using shared utility
|
|
88
88
|
const allCells = Object.values(get().cells.config.data);
|
|
89
89
|
const usedNames = allCells
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookSlice.js","sourceRoot":"","sources":["../src/NotebookSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {\n type Cell,\n type CellsSliceState,\n getSheetsByType,\n} from '@sqlrooms/cells';\nimport {DbSliceState} from '@sqlrooms/db';\nimport {BaseRoomStoreState, createSlice} from '@sqlrooms/room-store';\nimport {generateUniqueName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {NotebookCell, NotebookSliceConfig} from './cellSchemas';\nimport type {NotebookSliceState} from './NotebookStateTypes';\nimport {getCellTypeLabel} from './NotebookUtils';\n\n/**\n * Create default `notebook.config` structure with no cells.\n */\nexport function createDefaultNotebookConfig(\n props: Partial<NotebookSliceConfig> = {},\n): NotebookSliceConfig {\n const base: NotebookSliceConfig = {\n sheets: {},\n currentCellId: undefined,\n };\n\n // If already a DAG config, merge over the base\n return {...base, ...props};\n}\n\nfunction getSheet(config: NotebookSliceConfig, sheetId: string) {\n return config.sheets[sheetId];\n}\n\nfunction findSheetIdByCellId(\n config: NotebookSliceConfig,\n cellId: string,\n): string | undefined {\n for (const [sheetId, sheet] of Object.entries(config.sheets)) {\n if (sheet?.meta.cellOrder.includes(cellId)) {\n return sheetId;\n }\n }\n return undefined;\n}\n\n/**\n * Create the Notebook slice with tabs, cells, execution and dependency handling.\n * Supports pluggable custom renderers via options.\n */\nexport function createNotebookSlice(props?: {\n config?: Partial<NotebookSliceConfig>;\n}) {\n type NotebookRootState = BaseRoomStoreState &\n DbSliceState &\n NotebookSliceState &\n CellsSliceState;\n\n return createSlice<NotebookSliceState, NotebookRootState>(\n (set, get, _store) => {\n return {\n notebook: {\n schemaName: 'notebook',\n\n config: createDefaultNotebookConfig(props?.config ?? {}),\n\n setSchemaName: (name) =>\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.schemaName = name;\n }),\n ),\n\n getNotebookSheets: () => getSheetsByType(get(), 'notebook'),\n\n addTab: (title) => {\n const existingTitles = Object.values(get().cells.config.sheets).map(\n (s) => s.title,\n );\n const finalTitle =\n title || generateUniqueName('Notebook 1', existingTitles, ' ');\n const id = get().cells.addSheet(finalTitle, 'notebook');\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.config.sheets[id] = {\n id,\n meta: {\n cellOrder: [],\n },\n };\n }),\n );\n return id;\n },\n\n renameTab: (id, title) => {\n get().cells.renameSheet(id, title);\n },\n\n setCurrentTab: (id) => {\n get().cells.setCurrentSheet(id);\n },\n\n removeTab: (id) => {\n get().cells.removeSheet(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.notebook.config.sheets[id];\n }),\n );\n },\n\n initializeSheet: (id) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.notebook.config.sheets[id]) {\n draft.notebook.config.sheets[id] = {\n id,\n meta: {\n cellOrder: [],\n },\n };\n }\n }),\n );\n },\n\n addCell: async (tabId, type, index) => {\n const id = createId();\n const reg = get().cells.cellRegistry[type];\n if (!reg) return id;\n\n const cell = reg.createCell(id) as Cell;\n\n // Assign a readable unique name using shared utility\n const allCells = Object.values(get().cells.config.data);\n const usedNames = allCells\n .map((c) => {\n const title = (c.data as Record<string, unknown>).title;\n return typeof title === 'string' ? title : undefined;\n })\n .filter((v): v is string => Boolean(v));\n const baseLabel = getCellTypeLabel(cell.type);\n if (baseLabel) {\n const current = cell.data as Record<string, unknown>;\n current.title = generateUniqueName(\n `${baseLabel} 1`,\n usedNames,\n ' ',\n );\n }\n\n if (type === 'input') {\n const usedInputNames = allCells\n .filter((c) => c.type === 'input')\n .map(\n (c) =>\n (c.data as {input?: {varName?: string}}).input?.varName ??\n '',\n )\n .filter((name) => Boolean(name));\n if (cell.type === 'input') {\n cell.data.input.varName = generateUniqueName(\n cell.data.input.varName,\n usedInputNames,\n );\n }\n }\n\n await get().cells.addCell(tabId, cell, index);\n\n set((state) =>\n produce(state, (draft) => {\n let sheet = getSheet(draft.notebook.config, tabId);\n if (!sheet) {\n // Initialize metadata if needed\n sheet = {\n id: tabId,\n meta: {\n cellOrder: [],\n },\n };\n draft.notebook.config.sheets[tabId] = sheet;\n }\n\n // cellOrder\n const newIndex = index ?? sheet.meta.cellOrder.length;\n sheet.meta.cellOrder.splice(newIndex, 0, id);\n\n draft.notebook.config.currentCellId = id;\n }),\n );\n return id;\n },\n\n moveCell: (tabId, cellId, direction) => {\n set((state) =>\n produce(state, (draft) => {\n const sheet = getSheet(draft.notebook.config, tabId);\n if (!sheet) return;\n\n const idx = sheet.meta.cellOrder.indexOf(cellId);\n if (idx >= 0) {\n const newIndex = direction === 'up' ? idx - 1 : idx + 1;\n if (newIndex < 0 || newIndex >= sheet.meta.cellOrder.length)\n return;\n\n sheet.meta.cellOrder.splice(idx, 1);\n sheet.meta.cellOrder.splice(newIndex, 0, cellId);\n }\n }),\n );\n },\n\n removeCell: (cellId) => {\n get().cells.removeCell(cellId);\n set((state) =>\n produce(state, (draft) => {\n const sheetId = findSheetIdByCellId(\n draft.notebook.config,\n cellId,\n );\n if (!sheetId) return;\n const sheet = getSheet(draft.notebook.config, sheetId);\n if (!sheet) return;\n\n sheet.meta.cellOrder = sheet.meta.cellOrder.filter(\n (id) => id !== cellId,\n );\n }),\n );\n },\n\n renameCell: (cellId, name) => {\n void get().cells.updateCell(cellId, (cell) => ({\n ...cell,\n data: {...cell.data, title: name},\n }));\n },\n\n updateCell: (cellId, updater) => {\n void get().cells.updateCell(cellId, (cell) => {\n return updater(cell as NotebookCell) as Cell;\n });\n },\n\n setCurrentCell: (id) => {\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.config.currentCellId = id;\n }),\n );\n },\n\n cancelRunCell: (cellId) => {\n get().cells.cancelCell(cellId);\n },\n\n runAllCells: async (tabId) => {\n const sheet = getSheet(get().notebook.config, tabId);\n if (!sheet) return;\n for (const cellId of sheet.meta.cellOrder) {\n await get().cells.runCell(cellId, {cascade: false});\n }\n },\n\n runAllCellsCascade: async (tabId) => {\n await get().cells.runAllCellsCascade(tabId);\n },\n\n runCell: async (cellId, opts) => {\n await get().cells.runCell(cellId, opts);\n },\n },\n };\n },\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NotebookSlice.js","sourceRoot":"","sources":["../src/NotebookSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {\n type Cell,\n type CellsSliceState,\n getSheetsByType,\n} from '@sqlrooms/cells';\nimport {DbSliceState} from '@sqlrooms/db';\nimport {BaseRoomStoreState, createSlice} from '@sqlrooms/room-store';\nimport {generateUniqueName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {NotebookCell, NotebookSliceConfig} from './cellSchemas';\nimport type {NotebookSliceState} from './NotebookStateTypes';\nimport {getCellTypeLabel} from './NotebookUtils';\n\n/**\n * Create default `notebook.config` structure with no cells.\n */\nexport function createDefaultNotebookConfig(\n props: Partial<NotebookSliceConfig> = {},\n): NotebookSliceConfig {\n const base: NotebookSliceConfig = {\n sheets: {},\n currentCellId: undefined,\n };\n\n // If already a DAG config, merge over the base\n return {...base, ...props};\n}\n\nfunction getSheet(config: NotebookSliceConfig, sheetId: string) {\n return config.sheets[sheetId];\n}\n\nfunction findSheetIdByCellId(\n config: NotebookSliceConfig,\n cellId: string,\n): string | undefined {\n for (const [sheetId, sheet] of Object.entries(config.sheets)) {\n if (sheet?.meta.cellOrder.includes(cellId)) {\n return sheetId;\n }\n }\n return undefined;\n}\n\n/**\n * Create the Notebook slice with tabs, cells, execution and dependency handling.\n * Supports pluggable custom renderers via options.\n */\nexport function createNotebookSlice(props?: {\n config?: Partial<NotebookSliceConfig>;\n}) {\n type NotebookRootState = BaseRoomStoreState &\n DbSliceState &\n NotebookSliceState &\n CellsSliceState;\n\n return createSlice<NotebookSliceState, NotebookRootState>(\n (set, get, _store) => {\n return {\n notebook: {\n schemaName: 'notebook',\n\n config: createDefaultNotebookConfig(props?.config ?? {}),\n\n setSchemaName: (name) =>\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.schemaName = name;\n }),\n ),\n\n getNotebookSheets: () => getSheetsByType(get(), 'notebook'),\n\n addTab: (title) => {\n const existingTitles = Object.values(get().cells.config.sheets).map(\n (s) => s.title,\n );\n const finalTitle =\n title || generateUniqueName('Notebook 1', existingTitles, ' ');\n const id = get().cells.addSheet(finalTitle, 'notebook');\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.config.sheets[id] = {\n id,\n meta: {\n cellOrder: [],\n },\n };\n }),\n );\n return id;\n },\n\n renameTab: (id, title) => {\n get().cells.renameSheet(id, title);\n },\n\n setCurrentTab: (id) => {\n get().cells.setCurrentSheet(id);\n },\n\n removeTab: (id) => {\n get().cells.removeSheet(id);\n set((state) =>\n produce(state, (draft) => {\n delete draft.notebook.config.sheets[id];\n }),\n );\n },\n\n initializeSheet: (id) => {\n set((state) =>\n produce(state, (draft) => {\n if (!draft.notebook.config.sheets[id]) {\n draft.notebook.config.sheets[id] = {\n id,\n meta: {\n cellOrder: [],\n },\n };\n }\n }),\n );\n },\n\n addCell: async (tabId, type, index) => {\n const id = createId();\n const reg = get().cells.cellRegistry[type];\n if (!reg) return id;\n\n const cell = reg.createCell({id, get, set}) as Cell;\n\n // Assign a readable unique name using shared utility\n const allCells = Object.values(get().cells.config.data);\n const usedNames = allCells\n .map((c) => {\n const title = (c.data as Record<string, unknown>).title;\n return typeof title === 'string' ? title : undefined;\n })\n .filter((v): v is string => Boolean(v));\n const baseLabel = getCellTypeLabel(cell.type);\n if (baseLabel) {\n const current = cell.data as Record<string, unknown>;\n current.title = generateUniqueName(\n `${baseLabel} 1`,\n usedNames,\n ' ',\n );\n }\n\n if (type === 'input') {\n const usedInputNames = allCells\n .filter((c) => c.type === 'input')\n .map(\n (c) =>\n (c.data as {input?: {varName?: string}}).input?.varName ??\n '',\n )\n .filter((name) => Boolean(name));\n if (cell.type === 'input') {\n cell.data.input.varName = generateUniqueName(\n cell.data.input.varName,\n usedInputNames,\n );\n }\n }\n\n await get().cells.addCell(tabId, cell, index);\n\n set((state) =>\n produce(state, (draft) => {\n let sheet = getSheet(draft.notebook.config, tabId);\n if (!sheet) {\n // Initialize metadata if needed\n sheet = {\n id: tabId,\n meta: {\n cellOrder: [],\n },\n };\n draft.notebook.config.sheets[tabId] = sheet;\n }\n\n // cellOrder\n const newIndex = index ?? sheet.meta.cellOrder.length;\n sheet.meta.cellOrder.splice(newIndex, 0, id);\n\n draft.notebook.config.currentCellId = id;\n }),\n );\n return id;\n },\n\n moveCell: (tabId, cellId, direction) => {\n set((state) =>\n produce(state, (draft) => {\n const sheet = getSheet(draft.notebook.config, tabId);\n if (!sheet) return;\n\n const idx = sheet.meta.cellOrder.indexOf(cellId);\n if (idx >= 0) {\n const newIndex = direction === 'up' ? idx - 1 : idx + 1;\n if (newIndex < 0 || newIndex >= sheet.meta.cellOrder.length)\n return;\n\n sheet.meta.cellOrder.splice(idx, 1);\n sheet.meta.cellOrder.splice(newIndex, 0, cellId);\n }\n }),\n );\n },\n\n removeCell: (cellId) => {\n get().cells.removeCell(cellId);\n set((state) =>\n produce(state, (draft) => {\n const sheetId = findSheetIdByCellId(\n draft.notebook.config,\n cellId,\n );\n if (!sheetId) return;\n const sheet = getSheet(draft.notebook.config, sheetId);\n if (!sheet) return;\n\n sheet.meta.cellOrder = sheet.meta.cellOrder.filter(\n (id) => id !== cellId,\n );\n }),\n );\n },\n\n renameCell: (cellId, name) => {\n void get().cells.updateCell(cellId, (cell) => ({\n ...cell,\n data: {...cell.data, title: name},\n }));\n },\n\n updateCell: (cellId, updater) => {\n void get().cells.updateCell(cellId, (cell) => {\n return updater(cell as NotebookCell) as Cell;\n });\n },\n\n setCurrentCell: (id) => {\n set((state) =>\n produce(state, (draft) => {\n draft.notebook.config.currentCellId = id;\n }),\n );\n },\n\n cancelRunCell: (cellId) => {\n get().cells.cancelCell(cellId);\n },\n\n runAllCells: async (tabId) => {\n const sheet = getSheet(get().notebook.config, tabId);\n if (!sheet) return;\n for (const cellId of sheet.meta.cellOrder) {\n await get().cells.runCell(cellId, {cascade: false});\n }\n },\n\n runAllCellsCascade: async (tabId) => {\n await get().cells.runAllCellsCascade(tabId);\n },\n\n runCell: async (cellId, opts) => {\n await get().cells.runCell(cellId, opts);\n },\n },\n };\n },\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookUtils.d.ts","sourceRoot":"","sources":["../src/NotebookUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,mBAAmB,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAElE,eAAO,MAAM,OAAO,GAClB,OAAO,cAAc,GAAG;IAAC,QAAQ,EAAE;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAC,CAAA;CAAC,EACjE,OAAO,MAAM,KACZ,WAOF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,cAAc,GAAG;IAAC,QAAQ,EAAE;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAC,CAAA;CAAC,EACjE,QAAQ,MAAM;;;;;;;;;;;;;;aAWf,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,WAAW,YAAY,
|
|
1
|
+
{"version":3,"file":"NotebookUtils.d.ts","sourceRoot":"","sources":["../src/NotebookUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,mBAAmB,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAElE,eAAO,MAAM,OAAO,GAClB,OAAO,cAAc,GAAG;IAAC,QAAQ,EAAE;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAC,CAAA;CAAC,EACjE,OAAO,MAAM,KACZ,WAOF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,cAAc,GAAG;IAAC,QAAQ,EAAE;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAC,CAAA;CAAC,EACjE,QAAQ,MAAM;;;;;;;;;;;;;;aAWf,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,WAAW,YAAY,WAWrE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAUtE"}
|
package/dist/NotebookUtils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookUtils.js","sourceRoot":"","sources":["../src/NotebookUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAInD,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,KAAiE,EACjE,KAAa,EACA,EAAE;IACf,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAiE,EACjE,MAAc,EACd,EAAE;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,IAAK,KAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,QAAuB,EAAE,EAAE;IACxE,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAElD,MAAM,WAAW,GAA2B;QAC1C,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,QAAuB;IAC5D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import {useEffect, useMemo, useState} from 'react';\nimport {formatTimeRelative} from '@sqlrooms/utils';\nimport {NotebookSliceConfig, NotebookTab, NotebookSheet} from './cellSchemas';\nimport type {CellsRootState, CellRegistry} from '@sqlrooms/cells';\n\nexport const findTab = (\n state: CellsRootState & {notebook: {config: NotebookSliceConfig}},\n tabId: string,\n): NotebookTab => {\n const sheet = state.notebook.config.sheets[tabId];\n const cellsSheet = state.cells.config.sheets[tabId];\n if (!sheet || !cellsSheet) {\n throw new Error(`Tab with id ${tabId} not found`);\n }\n return {id: sheet.id, ...sheet.meta, name: cellsSheet.title};\n};\n\nexport const findCellInNotebook = (\n state: CellsRootState & {notebook: {config: NotebookSliceConfig}},\n cellId: string,\n) => {\n const cell = state.cells.config.data[cellId];\n if (!cell) return undefined;\n\n for (const [sheetId, sheet] of Object.entries(state.notebook.config.sheets)) {\n if ((sheet as NotebookSheet).meta.cellOrder.includes(cellId)) {\n return {cell, sheetId};\n }\n }\n return {cell, sheetId: undefined};\n};\n\nexport const getCellTypeLabel = (type: string, registry?: CellRegistry) => {\n if (registry?.[type]) return registry[type].title;\n\n const typeToLabel: Record<string, string> = {\n sql: 'SQL',\n vega: 'Chart',\n text: 'Text',\n input: 'Input',\n };\n return typeToLabel[type] || type.charAt(0).toUpperCase() + type.slice(1);\n};\n\nexport function useRelativeTimeDisplay(pastDate: number | null): string {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!pastDate) return;\n const interval = setInterval(() => setTick((value) => value + 1), 60000);\n return () => clearInterval(interval);\n }, [pastDate]);\n\n return useMemo(() => formatTimeRelative(pastDate), [pastDate, tick]);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NotebookUtils.js","sourceRoot":"","sources":["../src/NotebookUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAInD,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,KAAiE,EACjE,KAAa,EACA,EAAE;IACf,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAiE,EACjE,MAAc,EACd,EAAE;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,IAAK,KAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,QAAuB,EAAE,EAAE;IACxE,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAElD,MAAM,WAAW,GAA2B;QAC1C,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,OAAO;KACf,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,QAAuB;IAC5D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import {useEffect, useMemo, useState} from 'react';\nimport {formatTimeRelative} from '@sqlrooms/utils';\nimport {NotebookSliceConfig, NotebookTab, NotebookSheet} from './cellSchemas';\nimport type {CellsRootState, CellRegistry} from '@sqlrooms/cells';\n\nexport const findTab = (\n state: CellsRootState & {notebook: {config: NotebookSliceConfig}},\n tabId: string,\n): NotebookTab => {\n const sheet = state.notebook.config.sheets[tabId];\n const cellsSheet = state.cells.config.sheets[tabId];\n if (!sheet || !cellsSheet) {\n throw new Error(`Tab with id ${tabId} not found`);\n }\n return {id: sheet.id, ...sheet.meta, name: cellsSheet.title};\n};\n\nexport const findCellInNotebook = (\n state: CellsRootState & {notebook: {config: NotebookSliceConfig}},\n cellId: string,\n) => {\n const cell = state.cells.config.data[cellId];\n if (!cell) return undefined;\n\n for (const [sheetId, sheet] of Object.entries(state.notebook.config.sheets)) {\n if ((sheet as NotebookSheet).meta.cellOrder.includes(cellId)) {\n return {cell, sheetId};\n }\n }\n return {cell, sheetId: undefined};\n};\n\nexport const getCellTypeLabel = (type: string, registry?: CellRegistry) => {\n if (registry?.[type]) return registry[type].title;\n\n const typeToLabel: Record<string, string> = {\n sql: 'SQL',\n vega: 'Chart',\n text: 'Text',\n input: 'Input',\n pivot: 'Pivot',\n };\n return typeToLabel[type] || type.charAt(0).toUpperCase() + type.slice(1);\n};\n\nexport function useRelativeTimeDisplay(pastDate: number | null): string {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!pastDate) return;\n const interval = setInterval(() => setTick((value) => value + 1), 60000);\n return () => clearInterval(interval);\n }, [pastDate]);\n\n return useMemo(() => formatTimeRelative(pastDate), [pastDate, tick]);\n}\n"]}
|
|
@@ -26,11 +26,11 @@ export const AddNewCellDropdown = ({ onAdd, enableShortcut = false, triggerCompo
|
|
|
26
26
|
export const AddNewCellDropdownContent = ({ onAddCell, currentTabId, align = 'center', setOpen, }) => {
|
|
27
27
|
const cellRegistry = useStoreWithNotebook((s) => s.cells.cellRegistry);
|
|
28
28
|
const availableTypes = Object.keys(cellRegistry);
|
|
29
|
-
return (_jsx(PopoverContent, { align: align, className: "w-
|
|
29
|
+
return (_jsx(PopoverContent, { align: align, className: "w-auto p-0", onCloseAutoFocus: (e) => e.preventDefault(), children: _jsx(Command, { tabIndex: 0, loop: true, className: "focus-visible:outline-none", children: _jsx(CommandList, { className: "focus-visible:outline-none", children: _jsx(CommandGroup, { className: "**:[[cmdk-group-heading]]:text-foreground p-1 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-sm **:[[cmdk-group-heading]]:font-semibold", children: availableTypes.map((type) => {
|
|
30
30
|
return (_jsx(CommandItem, { disabled: !currentTabId, onSelect: () => {
|
|
31
31
|
onAddCell(type);
|
|
32
32
|
setOpen?.(false);
|
|
33
|
-
}, className: "cursor-pointer", children: _jsx("span", { className: "text-xs capitalize", children: getCellTypeLabel(type, cellRegistry) }) }, type));
|
|
33
|
+
}, className: "cursor-pointer", children: _jsx("span", { className: "text-xs whitespace-nowrap capitalize", children: getCellTypeLabel(type, cellRegistry) }) }, type));
|
|
34
34
|
}) }) }) }) }));
|
|
35
35
|
};
|
|
36
36
|
//# sourceMappingURL=AddNewCellDropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddNewCellDropdown.js","sourceRoot":"","sources":["../../src/cellOperations/AddNewCellDropdown.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,OAAO,EACP,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAQlD,MAAM,CAAC,MAAM,kBAAkB,GAAc,CAAC,EAC5C,KAAK,EACL,cAAc,GAAG,KAAK,EACtB,gBAAgB,GAAG,KAAC,aAAa,KAAG,GACrC,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,oBAAoB,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACrC,CAAC;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAgB,EAAE,EAAE;YACrC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChE,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBAAE,gBAAgB,GAAkB,EAE3D,KAAC,yBAAyB,IACxB,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,GAChB,IACM,CACX,CAAC;AACJ,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,yBAAyB,GAAqB,CAAC,EAC1D,SAAS,EACT,YAAY,EACZ,KAAK,GAAG,QAAQ,EAChB,OAAO,GACR,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEjD,OAAO,CACL,KAAC,cAAc,IACb,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"AddNewCellDropdown.js","sourceRoot":"","sources":["../../src/cellOperations/AddNewCellDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Command,\n CommandList,\n CommandItem,\n CommandGroup,\n PopoverContent,\n Popover,\n PopoverTrigger,\n} from '@sqlrooms/ui';\nimport {FC, useEffect, useState} from 'react';\n\nimport {useStoreWithNotebook} from '../useStoreWithNotebook';\nimport {TriggerButton} from './AddNewCellTrigger';\nimport {getCellTypeLabel} from '../NotebookUtils';\n\ntype Props = {\n onAdd: (type: string) => void;\n enableShortcut?: boolean;\n triggerComponent?: React.ReactNode;\n};\n\nexport const AddNewCellDropdown: FC<Props> = ({\n onAdd,\n enableShortcut = false,\n triggerComponent = <TriggerButton />,\n}) => {\n const currentTabId = useStoreWithNotebook(\n (s) => s.cells.config.currentSheetId,\n );\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!currentTabId || !enableShortcut) {\n return;\n }\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'j' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>{triggerComponent}</PopoverTrigger>\n\n <AddNewCellDropdownContent\n onAddCell={onAdd}\n currentTabId={currentTabId}\n setOpen={setOpen}\n />\n </Popover>\n );\n};\n\ntype ContentProps = {\n onAddCell: (type: string) => void;\n currentTabId?: string | null;\n align?: 'center' | 'start' | 'end';\n setOpen?: (open: boolean) => void;\n};\n\nexport const AddNewCellDropdownContent: FC<ContentProps> = ({\n onAddCell,\n currentTabId,\n align = 'center',\n setOpen,\n}) => {\n const cellRegistry = useStoreWithNotebook((s) => s.cells.cellRegistry);\n const availableTypes = Object.keys(cellRegistry);\n\n return (\n <PopoverContent\n align={align}\n className=\"w-auto p-0\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <Command tabIndex={0} loop className=\"focus-visible:outline-none\">\n <CommandList className=\"focus-visible:outline-none\">\n <CommandGroup className=\"**:[[cmdk-group-heading]]:text-foreground p-1 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-sm **:[[cmdk-group-heading]]:font-semibold\">\n {availableTypes.map((type: string) => {\n return (\n <CommandItem\n key={type}\n disabled={!currentTabId}\n onSelect={() => {\n onAddCell(type);\n setOpen?.(false);\n }}\n className=\"cursor-pointer\"\n >\n <span className=\"text-xs whitespace-nowrap capitalize\">\n {getCellTypeLabel(type, cellRegistry)}\n </span>\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n );\n};\n"]}
|
|
@@ -8,7 +8,7 @@ export const AddNewCellTabs = ({ onAdd }) => {
|
|
|
8
8
|
const cellRegistry = useStoreWithNotebook((s) => s.cells.cellRegistry);
|
|
9
9
|
const cellTypes = Object.keys(cellRegistry);
|
|
10
10
|
return (_jsxs("div", { className: "grid w-full grid-cols-[1fr_auto_1fr] items-center gap-2 opacity-0 transition-opacity hover:opacity-100", children: [_jsx(Separator, { className: "w-full bg-gray-500" }), _jsx("div", { className: "flex gap-1", children: cellTypes.map((type) => {
|
|
11
|
-
return (_jsxs(Button, { disabled: !currentTabId, onClick: () => onAdd(type), className: "h-6 gap-1 py-0
|
|
11
|
+
return (_jsxs(Button, { disabled: !currentTabId, onClick: () => onAdd(type), className: "h-6 gap-1 py-0 text-gray-500 capitalize", variant: "ghost", size: "xs", children: [_jsx(PlusIcon, { size: 12, strokeWidth: 1.5 }), getCellTypeLabel(type, cellRegistry)] }, type));
|
|
12
12
|
}) }), _jsx(Separator, { className: "w-full bg-gray-500" })] }));
|
|
13
13
|
};
|
|
14
14
|
//# sourceMappingURL=AddNewCellTabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddNewCellTabs.js","sourceRoot":"","sources":["../../src/cellOperations/AddNewCellTabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAMtC,MAAM,CAAC,MAAM,cAAc,GAAc,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,oBAAoB,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACrC,CAAC;IACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE5C,OAAO,CACL,eAAK,SAAS,EAAC,wGAAwG,aACrH,KAAC,SAAS,IAAC,SAAS,EAAC,oBAAoB,GAAG,EAC5C,cAAK,SAAS,EAAC,YAAY,YACxB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;oBAC9B,OAAO,CACL,MAAC,MAAM,IAEL,QAAQ,EAAE,CAAC,YAAY,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAC1B,SAAS,EAAC,yCAAyC,EACnD,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,aAET,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACvC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,KARhC,IAAI,CASF,CACV,CAAC;gBACJ,CAAC,CAAC,GACE,EACN,KAAC,SAAS,IAAC,SAAS,EAAC,oBAAoB,GAAG,IACxC,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Separator, Button} from '@sqlrooms/ui';\nimport {FC} from 'react';\n\nimport {useStoreWithNotebook} from '../useStoreWithNotebook';\nimport {getCellTypeLabel} from '../NotebookUtils';\nimport {PlusIcon} from 'lucide-react';\n\ntype Props = {\n onAdd: (type: string) => void;\n};\n\nexport const AddNewCellTabs: FC<Props> = ({onAdd}) => {\n const currentTabId = useStoreWithNotebook(\n (s) => s.cells.config.currentSheetId,\n );\n const cellRegistry = useStoreWithNotebook((s) => s.cells.cellRegistry);\n const cellTypes = Object.keys(cellRegistry);\n\n return (\n <div className=\"grid w-full grid-cols-[1fr_auto_1fr] items-center gap-2 opacity-0 transition-opacity hover:opacity-100\">\n <Separator className=\"w-full bg-gray-500\" />\n <div className=\"flex gap-1\">\n {cellTypes.map((type: string) => {\n return (\n <Button\n key={type}\n disabled={!currentTabId}\n onClick={() => onAdd(type)}\n className=\"h-6 gap-1 py-0
|
|
1
|
+
{"version":3,"file":"AddNewCellTabs.js","sourceRoot":"","sources":["../../src/cellOperations/AddNewCellTabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAMtC,MAAM,CAAC,MAAM,cAAc,GAAc,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,oBAAoB,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CACrC,CAAC;IACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE5C,OAAO,CACL,eAAK,SAAS,EAAC,wGAAwG,aACrH,KAAC,SAAS,IAAC,SAAS,EAAC,oBAAoB,GAAG,EAC5C,cAAK,SAAS,EAAC,YAAY,YACxB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;oBAC9B,OAAO,CACL,MAAC,MAAM,IAEL,QAAQ,EAAE,CAAC,YAAY,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAC1B,SAAS,EAAC,yCAAyC,EACnD,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,aAET,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,GAAI,EACvC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,KARhC,IAAI,CASF,CACV,CAAC;gBACJ,CAAC,CAAC,GACE,EACN,KAAC,SAAS,IAAC,SAAS,EAAC,oBAAoB,GAAG,IACxC,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Separator, Button} from '@sqlrooms/ui';\nimport {FC} from 'react';\n\nimport {useStoreWithNotebook} from '../useStoreWithNotebook';\nimport {getCellTypeLabel} from '../NotebookUtils';\nimport {PlusIcon} from 'lucide-react';\n\ntype Props = {\n onAdd: (type: string) => void;\n};\n\nexport const AddNewCellTabs: FC<Props> = ({onAdd}) => {\n const currentTabId = useStoreWithNotebook(\n (s) => s.cells.config.currentSheetId,\n );\n const cellRegistry = useStoreWithNotebook((s) => s.cells.cellRegistry);\n const cellTypes = Object.keys(cellRegistry);\n\n return (\n <div className=\"grid w-full grid-cols-[1fr_auto_1fr] items-center gap-2 opacity-0 transition-opacity hover:opacity-100\">\n <Separator className=\"w-full bg-gray-500\" />\n <div className=\"flex gap-1\">\n {cellTypes.map((type: string) => {\n return (\n <Button\n key={type}\n disabled={!currentTabId}\n onClick={() => onAdd(type)}\n className=\"h-6 gap-1 py-0 text-gray-500 capitalize\"\n variant=\"ghost\"\n size=\"xs\"\n >\n <PlusIcon size={12} strokeWidth={1.5} />\n {getCellTypeLabel(type, cellRegistry)}\n </Button>\n );\n })}\n </div>\n <Separator className=\"w-full bg-gray-500\" />\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddSqlCellResultToNewTable.d.ts","sourceRoot":"","sources":["../../src/cellOperations/AddSqlCellResultToNewTable.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;CACf,CA0BA,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useBaseRoomShellStore } from '@sqlrooms/room-shell';
|
|
3
|
+
import { CreateTableModal } from '@sqlrooms/sql-editor';
|
|
4
|
+
import { Button } from '@sqlrooms/ui';
|
|
5
|
+
import { PlusIcon } from 'lucide-react';
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
export const AddSqlCellResultToNewTable = ({ query }) => {
|
|
8
|
+
const [createTableModalOpen, setCreateTableModalOpen] = useState(false);
|
|
9
|
+
const addOrUpdateSqlQueryDataSource = useBaseRoomShellStore((state) => state.room.addOrUpdateSqlQueryDataSource);
|
|
10
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex gap-2", children: _jsxs(Button, { variant: "secondary", size: "xs", onClick: () => setCreateTableModalOpen(true), className: "h-7", children: [_jsx(PlusIcon, { size: 16 }), "New table"] }) }), _jsx(CreateTableModal, { query: query, isOpen: createTableModalOpen, onClose: () => setCreateTableModalOpen(false), onAddOrUpdateSqlQuery: addOrUpdateSqlQueryDataSource })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=AddSqlCellResultToNewTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddSqlCellResultToNewTable.js","sourceRoot":"","sources":["../../src/cellOperations/AddSqlCellResultToNewTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,MAAM,CAAC,MAAM,0BAA0B,GAElC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACf,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE,MAAM,6BAA6B,GAAG,qBAAqB,CACzD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CACpD,CAAC;IACF,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,YAAY,YACzB,MAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAC5C,SAAS,EAAC,KAAK,aAEf,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,iBAEf,GACL,EACN,KAAC,gBAAgB,IACf,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAC7C,qBAAqB,EAAE,6BAA6B,GACpD,IACD,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {useBaseRoomShellStore} from '@sqlrooms/room-shell';\nimport {CreateTableModal} from '@sqlrooms/sql-editor';\nimport {Button} from '@sqlrooms/ui';\nimport {PlusIcon} from 'lucide-react';\nimport {useState} from 'react';\n\nexport const AddSqlCellResultToNewTable: React.FC<{\n query: string;\n}> = ({query}) => {\n const [createTableModalOpen, setCreateTableModalOpen] = useState(false);\n const addOrUpdateSqlQueryDataSource = useBaseRoomShellStore(\n (state) => state.room.addOrUpdateSqlQueryDataSource,\n );\n return (\n <>\n <div className=\"flex gap-2\">\n <Button\n variant=\"secondary\"\n size=\"xs\"\n onClick={() => setCreateTableModalOpen(true)}\n className=\"h-7\"\n >\n <PlusIcon size={16} />\n New table\n </Button>\n </div>\n <CreateTableModal\n query={query}\n isOpen={createTableModalOpen}\n onClose={() => setCreateTableModalOpen(false)}\n onAddOrUpdateSqlQuery={addOrUpdateSqlQueryDataSource}\n />\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const IconWithTooltip: import("react").ForwardRefExoticComponent<{
|
|
2
|
+
tooltipContent?: React.ReactNode;
|
|
3
|
+
icon: React.ReactNode;
|
|
4
|
+
side?: "right" | "left" | "top" | "bottom";
|
|
5
|
+
align?: "start" | "center" | "end";
|
|
6
|
+
sideOffset?: number;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
} & import("react").HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
|
|
10
|
+
//# sourceMappingURL=IconWithTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconWithTooltip.d.ts","sourceRoot":"","sources":["../../src/cellOperations/IconWithTooltip.tsx"],"names":[],"mappings":"AAaA,eAAO,MAAM,eAAe;qBATT,KAAK,CAAC,SAAS;UAC1B,KAAK,CAAC,SAAS;WACd,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ;YAClC,OAAO,GAAG,QAAQ,GAAG,KAAK;iBACrB,MAAM;cACT,MAAM,IAAI;eACT,OAAO;mGA8CnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn, Tooltip, TooltipContent, TooltipTrigger } from '@sqlrooms/ui';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
export const IconWithTooltip = forwardRef((props, ref) => {
|
|
5
|
+
const { className, title, tooltipContent, icon, align = 'center', side = 'bottom', sideOffset = 10, onClick, disabled = false, ...restOfProps } = props;
|
|
6
|
+
return (_jsxs(Tooltip, { delayDuration: 100, children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { ref: ref, ...restOfProps, className: cn('flex w-full cursor-pointer items-center justify-center rounded', disabled && 'pointer-events-none cursor-not-allowed opacity-50', className), onClick: onClick, children: icon }) }), title && (_jsx(TooltipContent, { className: "text-xs", side: side, align: align, sideOffset: sideOffset, children: tooltipContent ? tooltipContent : title }))] }));
|
|
7
|
+
});
|
|
8
|
+
IconWithTooltip.displayName = 'IconWithTooltip';
|
|
9
|
+
//# sourceMappingURL=IconWithTooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconWithTooltip.js","sourceRoot":"","sources":["../../src/cellOperations/IconWithTooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AACzE,OAAO,EAAa,UAAU,EAAC,MAAM,OAAO,CAAC;AAY7C,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CACvC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACb,MAAM,EACJ,SAAS,EACT,KAAK,EACL,cAAc,EACd,IAAI,EACJ,KAAK,GAAG,QAAQ,EAChB,IAAI,GAAG,QAAQ,EACf,UAAU,GAAG,EAAE,EACf,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,GAAG,WAAW,EACf,GAAG,KAAK,CAAC;IACV,OAAO,CACL,MAAC,OAAO,IAAC,aAAa,EAAE,GAAG,aACzB,KAAC,cAAc,IAAC,OAAO,kBACrB,cACE,GAAG,EAAE,GAAG,KACJ,WAAW,EACf,SAAS,EAAE,EAAE,CACX,gEAAgE,EAChE,QAAQ,IAAI,mDAAmD,EAC/D,SAAS,CACV,EACD,OAAO,EAAE,OAAO,YAEf,IAAI,GACD,GACS,EAChB,KAAK,IAAI,CACR,KAAC,cAAc,IACb,SAAS,EAAC,SAAS,EACnB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,YAErB,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,GACzB,CAClB,IACO,CACX,CAAC;AACJ,CAAC,CACF,CAAC;AACF,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC","sourcesContent":["import {cn, Tooltip, TooltipContent, TooltipTrigger} from '@sqlrooms/ui';\nimport {ElementRef, forwardRef} from 'react';\n\ntype Props = {\n tooltipContent?: React.ReactNode;\n icon: React.ReactNode;\n side?: 'right' | 'left' | 'top' | 'bottom';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n onClick?: () => void;\n disabled?: boolean;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport const IconWithTooltip = forwardRef<ElementRef<'div'>, Props>(\n (props, ref) => {\n const {\n className,\n title,\n tooltipContent,\n icon,\n align = 'center',\n side = 'bottom',\n sideOffset = 10,\n onClick,\n disabled = false,\n ...restOfProps\n } = props;\n return (\n <Tooltip delayDuration={100}>\n <TooltipTrigger asChild>\n <div\n ref={ref}\n {...restOfProps}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-center rounded',\n disabled && 'pointer-events-none cursor-not-allowed opacity-50',\n className,\n )}\n onClick={onClick}\n >\n {icon}\n </div>\n </TooltipTrigger>\n {title && (\n <TooltipContent\n className=\"text-xs\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n >\n {tooltipContent ? tooltipContent : title}\n </TooltipContent>\n )}\n </Tooltip>\n );\n },\n);\nIconWithTooltip.displayName = 'IconWithTooltip';\n"]}
|
package/dist/cellSchemas.d.ts
CHANGED
|
@@ -26,8 +26,38 @@ export declare const InputCell: z.ZodObject<{
|
|
|
26
26
|
}, z.core.$strip>;
|
|
27
27
|
}, z.core.$strip>;
|
|
28
28
|
export type InputCell = z.infer<typeof InputCell>;
|
|
29
|
-
export
|
|
30
|
-
|
|
29
|
+
export declare const NotebookCell: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
30
|
+
id: z.ZodString;
|
|
31
|
+
type: z.ZodLiteral<"sql">;
|
|
32
|
+
data: z.ZodObject<{
|
|
33
|
+
title: z.ZodDefault<z.ZodString>;
|
|
34
|
+
sql: z.ZodDefault<z.ZodString>;
|
|
35
|
+
resultName: z.ZodOptional<z.ZodString>;
|
|
36
|
+
connectorId: z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
39
|
+
id: z.ZodString;
|
|
40
|
+
type: z.ZodLiteral<"text">;
|
|
41
|
+
data: z.ZodObject<{
|
|
42
|
+
title: z.ZodDefault<z.ZodString>;
|
|
43
|
+
text: z.ZodDefault<z.ZodString>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
id: z.ZodString;
|
|
47
|
+
type: z.ZodLiteral<"vega">;
|
|
48
|
+
data: z.ZodObject<{
|
|
49
|
+
title: z.ZodDefault<z.ZodString>;
|
|
50
|
+
sqlId: z.ZodOptional<z.ZodString>;
|
|
51
|
+
tableRef: z.ZodOptional<z.ZodString>;
|
|
52
|
+
sql: z.ZodOptional<z.ZodString>;
|
|
53
|
+
vegaSpec: z.ZodOptional<z.ZodAny>;
|
|
54
|
+
crossFilter: z.ZodDefault<z.ZodObject<{
|
|
55
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
+
brushField: z.ZodOptional<z.ZodString>;
|
|
57
|
+
brushFieldType: z.ZodOptional<z.ZodType<import("@sqlrooms/cells").BrushFieldType>>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
31
61
|
id: z.ZodString;
|
|
32
62
|
type: z.ZodLiteral<"input">;
|
|
33
63
|
data: z.ZodObject<{
|
|
@@ -50,8 +80,15 @@ export declare const NotebookCell: z.ZodObject<{
|
|
|
50
80
|
value: z.ZodDefault<z.ZodString>;
|
|
51
81
|
}, z.core.$strip>], "kind">;
|
|
52
82
|
}, z.core.$strip>;
|
|
53
|
-
}, z.core.$strip
|
|
83
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
84
|
+
id: z.ZodString;
|
|
85
|
+
type: z.ZodLiteral<"pivot">;
|
|
86
|
+
data: z.ZodObject<{
|
|
87
|
+
pivotId: z.ZodString;
|
|
88
|
+
}, z.core.$strip>;
|
|
89
|
+
}, z.core.$strip>], "type">;
|
|
54
90
|
export type NotebookCell = z.infer<typeof NotebookCell>;
|
|
91
|
+
export type NotebookCellType = NotebookCell['type'];
|
|
55
92
|
/** Notebook View Meta */
|
|
56
93
|
export declare const NotebookSheetMeta: z.ZodObject<{
|
|
57
94
|
cellOrder: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellSchemas.d.ts","sourceRoot":"","sources":["../src/cellSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"cellSchemas.d.ts","sourceRoot":"","sources":["../src/cellSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAGL,UAAU,EAIX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAC,UAAU,EAAC,CAAC;AAEpB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;iBAIpB,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAElD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAMvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAEpD,yBAAyB;AACzB,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,aAAa;;;;;iBAGxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,wCAAwC;AACxC,eAAO,MAAM,mBAAmB;;;;;;;;iBAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,WAAW;;;;iBAItB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,iBAAiB,EAAE,UAAU,CAAC,CAAC"}
|
package/dist/cellSchemas.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { InputCellData, InputTypes } from '@sqlrooms/cells';
|
|
2
|
+
import { InputCellData, InputCellSchema, InputTypes, SqlCellSchema, TextCellSchema, VegaCellSchema, } from '@sqlrooms/cells';
|
|
3
|
+
import { PivotCellSchema } from '@sqlrooms/pivot';
|
|
3
4
|
export { InputTypes };
|
|
4
5
|
export const InputCell = z.object({
|
|
5
6
|
id: z.string(),
|
|
6
7
|
type: z.literal('input'),
|
|
7
8
|
data: InputCellData,
|
|
8
9
|
});
|
|
9
|
-
export const NotebookCell =
|
|
10
|
+
export const NotebookCell = z.discriminatedUnion('type', [
|
|
11
|
+
SqlCellSchema,
|
|
12
|
+
TextCellSchema,
|
|
13
|
+
VegaCellSchema,
|
|
14
|
+
InputCellSchema,
|
|
15
|
+
PivotCellSchema,
|
|
16
|
+
]);
|
|
10
17
|
/** Notebook View Meta */
|
|
11
18
|
export const NotebookSheetMeta = z.object({
|
|
12
19
|
cellOrder: z.array(z.string()).default([]),
|
package/dist/cellSchemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellSchemas.js","sourceRoot":"","sources":["../src/cellSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"cellSchemas.js","sourceRoot":"","sources":["../src/cellSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAC,UAAU,EAAC,CAAC;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,aAAa;CACpB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,aAAa;IACb,cAAc;IACd,cAAc;IACd,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAIH,yBAAyB;AACzB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAGH,wCAAwC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,wBAAwB;CAC3C,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\nimport {\n InputCellData,\n InputCellSchema,\n InputTypes,\n SqlCellSchema,\n TextCellSchema,\n VegaCellSchema,\n} from '@sqlrooms/cells';\nimport {PivotCellSchema} from '@sqlrooms/pivot';\n\nexport {InputTypes};\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>;\n\nexport const NotebookCell = z.discriminatedUnion('type', [\n SqlCellSchema,\n TextCellSchema,\n VegaCellSchema,\n InputCellSchema,\n PivotCellSchema,\n]);\nexport type NotebookCell = z.infer<typeof NotebookCell>;\nexport type NotebookCellType = NotebookCell['type'];\n\n/** Notebook View Meta */\nexport const NotebookSheetMeta = z.object({\n cellOrder: z.array(z.string()).default([]),\n});\nexport type NotebookSheetMeta = z.infer<typeof NotebookSheetMeta>;\n\nexport const NotebookSheet = z.object({\n id: z.string(),\n meta: NotebookSheetMeta,\n});\nexport type NotebookSheet = z.infer<typeof NotebookSheet>;\n\n/** Notebook Slice Config (View only) */\nexport const NotebookSliceConfig = z.object({\n sheets: z.record(z.string(), NotebookSheet).default({}),\n currentCellId: z.string().optional(),\n});\nexport type NotebookSliceConfig = z.infer<typeof NotebookSliceConfig>;\n\nexport const NotebookTab = z.object({\n id: z.string(),\n cellOrder: z.array(z.string()).default([]),\n name: z.string(), // Title from CellsSlice\n});\nexport type NotebookTab = z.infer<typeof NotebookTab>;\n\nexport type InputUnion = z.infer<typeof import('@sqlrooms/cells').InputUnion>;\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export
|
|
2
|
+
export type CellContainerProps = {
|
|
3
3
|
id: string;
|
|
4
4
|
header?: React.ReactNode;
|
|
5
5
|
footer?: React.ReactNode;
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
className?: string;
|
|
8
|
-
|
|
8
|
+
showHeader?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const CellContainer: React.FC<CellContainerProps>;
|
|
9
11
|
//# sourceMappingURL=CellContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContainer.d.ts","sourceRoot":"","sources":["../../src/cells/CellContainer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CellContainer.d.ts","sourceRoot":"","sources":["../../src/cells/CellContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2EtD,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn, EditableText } from '@sqlrooms/ui';
|
|
3
|
-
import { useStoreWithNotebook } from '../useStoreWithNotebook';
|
|
4
3
|
import { DeleteCellDialog } from '../cellOperations/DeleteCellDialog';
|
|
5
4
|
import { MoveCellButtons } from '../cellOperations/MoveCellButtons';
|
|
6
5
|
import { findCellInNotebook } from '../NotebookUtils';
|
|
7
|
-
|
|
6
|
+
import { useStoreWithNotebook } from '../useStoreWithNotebook';
|
|
7
|
+
export const CellContainer = ({ id, header, footer, children, className, showHeader = true, }) => {
|
|
8
8
|
const cell = useStoreWithNotebook((s) => findCellInNotebook(s, id)?.cell);
|
|
9
9
|
const onRename = useStoreWithNotebook((s) => s.notebook.renameCell);
|
|
10
10
|
const setCurrentCell = useStoreWithNotebook((s) => s.notebook.setCurrentCell);
|
|
@@ -12,11 +12,15 @@ export const CellContainer = ({ id, header, footer, children, className }) => {
|
|
|
12
12
|
const isCurrent = currentCellId === id;
|
|
13
13
|
if (!cell)
|
|
14
14
|
return null;
|
|
15
|
-
return (_jsxs("div", { id: `cell-${id}`, "data-cell-container-id": id, className: cn('
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
return (_jsxs("div", { id: `cell-${id}`, "data-cell-container-id": id, className: cn('group relative rounded', !showHeader
|
|
16
|
+
? isCurrent
|
|
17
|
+
? 'border-primary border'
|
|
18
|
+
: ''
|
|
19
|
+
: cn('bg-card border', isCurrent && 'border-primary'), className), onClick: () => setCurrentCell(id), children: [!showHeader ? (_jsxs("div", { className: cn('absolute top-1 right-1 z-10 items-center gap-1', isCurrent
|
|
20
|
+
? 'flex'
|
|
21
|
+
: 'hidden group-focus-within:flex group-hover:flex'), onMouseDown: (e) => e.preventDefault(), children: [_jsx(DeleteCellDialog, { cell: cell }), _jsx(MoveCellButtons, { id: id })] })) : (_jsxs("div", { className: "flex min-h-[36px] items-center justify-between gap-2 border-b px-2", children: [_jsx("div", { className: "flex h-6 flex-1 items-center gap-2", children: _jsx(EditableText, { editTrigger: "doubleClick", value: cell.data.title, onChange: (v) => onRename(id, v), className: "h-full text-sm font-medium shadow-none ring-0 outline-none" }) }), _jsxs("div", { className: "flex items-center justify-end gap-2 text-xs", children: [_jsxs("div", { className: cn('flex items-center gap-2', {
|
|
18
22
|
'group-hover:flex': !isCurrent,
|
|
19
23
|
hidden: !isCurrent,
|
|
20
|
-
}), children: [_jsx(DeleteCellDialog, { cell: cell }), _jsx(MoveCellButtons, { id: id })] }), _jsx("div", { children: header })] })] }), _jsx("div", { className: "flex-1 overflow-auto", children: children }), footer && _jsx("div", { className: "border-t", children: footer })] }));
|
|
24
|
+
}), children: [_jsx(DeleteCellDialog, { cell: cell }), _jsx(MoveCellButtons, { id: id })] }), _jsx("div", { children: header })] })] })), _jsx("div", { className: "flex-1 overflow-auto", children: children }), footer && _jsx("div", { className: "border-t", children: footer })] }));
|
|
21
25
|
};
|
|
22
26
|
//# sourceMappingURL=CellContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContainer.js","sourceRoot":"","sources":["../../src/cells/CellContainer.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"CellContainer.js","sourceRoot":"","sources":["../../src/cells/CellContainer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,EAAE,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAC,eAAe,EAAC,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAW7D,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,EAAE,EACF,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAU,GAAG,IAAI,GAClB,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,oBAAoB,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAC9C,CAAC;IACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,oBAAoB,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CACvC,CAAC;IACF,MAAM,SAAS,GAAG,aAAa,KAAK,EAAE,CAAC;IAEvC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,CACL,eACE,EAAE,EAAE,QAAQ,EAAE,EAAE,4BACQ,EAAE,EAC1B,SAAS,EAAE,EAAE,CACX,wBAAwB,EACxB,CAAC,UAAU;YACT,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,EAAE;YACN,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,IAAI,gBAAgB,CAAC,EACvD,SAAS,CACV,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,aAEhC,CAAC,UAAU,CAAC,CAAC,CAAC,CACb,eACE,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,SAAS;oBACP,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,iDAAiD,CACtD,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,aAEtC,KAAC,gBAAgB,IAAC,IAAI,EAAE,IAAW,GAAI,EACvC,KAAC,eAAe,IAAC,EAAE,EAAE,EAAE,GAAI,IACvB,CACP,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,oEAAoE,aACjF,cAAK,SAAS,EAAC,oCAAoC,YACjD,KAAC,YAAY,IACX,WAAW,EAAC,aAAa,EACzB,KAAK,EAAG,IAAI,CAAC,IAAY,CAAC,KAAK,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAChC,SAAS,EAAC,4DAA4D,GACtE,GACE,EACN,eAAK,SAAS,EAAC,6CAA6C,aAC1D,eACE,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE;oCACvC,kBAAkB,EAAE,CAAC,SAAS;oCAC9B,MAAM,EAAE,CAAC,SAAS;iCACnB,CAAC,aAEF,KAAC,gBAAgB,IAAC,IAAI,EAAE,IAAW,GAAI,EACvC,KAAC,eAAe,IAAC,EAAE,EAAE,EAAE,GAAI,IACvB,EACN,wBAAM,MAAM,GAAO,IACf,IACF,CACP,EACD,cAAK,SAAS,EAAC,sBAAsB,YAAE,QAAQ,GAAO,EACrD,MAAM,IAAI,cAAK,SAAS,EAAC,UAAU,YAAE,MAAM,GAAO,IAC/C,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {cn, EditableText} from '@sqlrooms/ui';\nimport React from 'react';\n\nimport {DeleteCellDialog} from '../cellOperations/DeleteCellDialog';\nimport {MoveCellButtons} from '../cellOperations/MoveCellButtons';\nimport {findCellInNotebook} from '../NotebookUtils';\nimport {useStoreWithNotebook} from '../useStoreWithNotebook';\n\nexport type CellContainerProps = {\n id: string;\n header?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n showHeader?: boolean;\n};\n\nexport const CellContainer: React.FC<CellContainerProps> = ({\n id,\n header,\n footer,\n children,\n className,\n showHeader = true,\n}) => {\n const cell = useStoreWithNotebook(\n (s) => findCellInNotebook(s as any, id)?.cell,\n );\n const onRename = useStoreWithNotebook((s) => s.notebook.renameCell);\n const setCurrentCell = useStoreWithNotebook((s) => s.notebook.setCurrentCell);\n const currentCellId = useStoreWithNotebook(\n (s) => s.notebook.config.currentCellId,\n );\n const isCurrent = currentCellId === id;\n\n if (!cell) return null;\n return (\n <div\n id={`cell-${id}`}\n data-cell-container-id={id}\n className={cn(\n 'group relative rounded',\n !showHeader\n ? isCurrent\n ? 'border-primary border'\n : ''\n : cn('bg-card border', isCurrent && 'border-primary'),\n className,\n )}\n onClick={() => setCurrentCell(id)}\n >\n {!showHeader ? (\n <div\n className={cn(\n 'absolute top-1 right-1 z-10 items-center gap-1',\n isCurrent\n ? 'flex'\n : 'hidden group-focus-within:flex group-hover:flex',\n )}\n onMouseDown={(e) => e.preventDefault()}\n >\n <DeleteCellDialog cell={cell as any} />\n <MoveCellButtons id={id} />\n </div>\n ) : (\n <div className=\"flex min-h-[36px] items-center justify-between gap-2 border-b px-2\">\n <div className=\"flex h-6 flex-1 items-center gap-2\">\n <EditableText\n editTrigger=\"doubleClick\"\n value={(cell.data as any).title}\n onChange={(v) => onRename(id, v)}\n className=\"h-full text-sm font-medium shadow-none ring-0 outline-none\"\n />\n </div>\n <div className=\"flex items-center justify-end gap-2 text-xs\">\n <div\n className={cn('flex items-center gap-2', {\n 'group-hover:flex': !isCurrent,\n hidden: !isCurrent,\n })}\n >\n <DeleteCellDialog cell={cell as any} />\n <MoveCellButtons id={id} />\n </div>\n <div>{header}</div>\n </div>\n </div>\n )}\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {footer && <div className=\"border-t\">{footer}</div>}\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellView.d.ts","sourceRoot":"","sources":["../../src/cells/CellView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,
|
|
1
|
+
{"version":3,"file":"CellView.d.ts","sourceRoot":"","sources":["../../src/cells/CellView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAuB3C,CAAC"}
|
package/dist/cells/CellView.js
CHANGED
|
@@ -10,7 +10,7 @@ export const CellView = ({ id }) => {
|
|
|
10
10
|
return registryItem.renderCell({
|
|
11
11
|
id,
|
|
12
12
|
cell,
|
|
13
|
-
renderContainer: ({ header, content, footer }) => (_jsx(CellContainer, { id: id, header: header, footer: footer, children: content })),
|
|
13
|
+
renderContainer: ({ header, content, footer, showHeader }) => (_jsx(CellContainer, { id: id, header: header, footer: footer, showHeader: showHeader, children: content })),
|
|
14
14
|
});
|
|
15
15
|
};
|
|
16
16
|
//# sourceMappingURL=CellView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellView.js","sourceRoot":"","sources":["../../src/cells/CellView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAA2B,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE;IACvD,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC;IAC5B,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACtD,CAAC;IAEF,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAExC,OAAO,YAAY,CAAC,UAAU,CAAC;QAC7B,EAAE;QACF,IAAI;QACJ,eAAe,EAAE,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAC,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"CellView.js","sourceRoot":"","sources":["../../src/cells/CellView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAA2B,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE;IACvD,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC;IAC5B,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACtD,CAAC;IAEF,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAExC,OAAO,YAAY,CAAC,UAAU,CAAC;QAC7B,EAAE;QACF,IAAI;QACJ,eAAe,EAAE,CAAC,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAC,EAAE,EAAE,CAAC,CAC1D,KAAC,aAAa,IACZ,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,YAErB,OAAO,GACM,CACjB;KACF,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport {useStoreWithNotebook} from '../useStoreWithNotebook';\nimport {CellContainer} from './CellContainer';\n\nexport const CellView: React.FC<{id: string}> = ({id}) => {\n const cell = useStoreWithNotebook((s) => s.cells.config.data[id]);\n const cellType = cell?.type;\n const registryItem = useStoreWithNotebook((s) =>\n cellType ? s.cells.cellRegistry[cellType] : undefined,\n );\n\n if (!cell || !registryItem) return null;\n\n return registryItem.renderCell({\n id,\n cell,\n renderContainer: ({header, content, footer, showHeader}) => (\n <CellContainer\n id={id}\n header={header}\n footer={footer}\n showHeader={showHeader}\n >\n {content}\n </CellContainer>\n ),\n });\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputCell.d.ts","sourceRoot":"","sources":["../../../src/cells/Input/InputCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAqE1B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAqC5C,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAQ5C,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EditableText, Input, Slider, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@sqlrooms/ui';
|
|
3
|
+
import { CellContainer } from '../CellContainer';
|
|
4
|
+
import { useStoreWithNotebook } from '../../useStoreWithNotebook';
|
|
5
|
+
import { InputConfigPanel } from './InputConfigPanel/InputConfigPanel';
|
|
6
|
+
import { findCellInNotebook } from '../../NotebookUtils';
|
|
7
|
+
const RenderInput = ({ input, updateInput }) => {
|
|
8
|
+
switch (input.kind) {
|
|
9
|
+
case 'text':
|
|
10
|
+
return (_jsx(Input, { className: "h-8 w-full rounded border px-2 py-1 text-sm", value: input.value, onChange: (e) => updateInput({ value: e.target.value }) }));
|
|
11
|
+
case 'slider':
|
|
12
|
+
return (_jsxs("div", { className: "flex h-8 items-center space-x-1", children: [_jsx(Slider, { min: input.min, max: input.max, step: input.step, value: [input.value], onValueChange: (value) => updateInput({ value: Number(value) }) }), _jsx("span", { className: "min-w-[3ch] text-right text-sm font-medium", children: input.value })] }));
|
|
13
|
+
case 'dropdown':
|
|
14
|
+
return (_jsxs(Select, { value: input.value, onValueChange: (value) => updateInput({ value }), children: [_jsx(SelectTrigger, { className: "h-8 text-xs shadow-none", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: input.options.map((option) => (_jsx(SelectItem, { className: "text-xs", value: option, children: option }, option))) })] }));
|
|
15
|
+
default:
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const InputItem = ({ id }) => {
|
|
20
|
+
const cell = useStoreWithNotebook((s) => findCellInNotebook(s, id)?.cell);
|
|
21
|
+
const remove = useStoreWithNotebook((s) => s.notebook.removeCell);
|
|
22
|
+
const update = useStoreWithNotebook((s) => s.notebook.updateCell);
|
|
23
|
+
if (!cell || cell.type !== 'input')
|
|
24
|
+
return null;
|
|
25
|
+
const input = cell.data.input;
|
|
26
|
+
const updateInput = (patch) => update(id, (c) => {
|
|
27
|
+
return {
|
|
28
|
+
...c,
|
|
29
|
+
data: {
|
|
30
|
+
...c.data,
|
|
31
|
+
input: { ...c.data.input, ...patch },
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
return (_jsxs("div", { className: "mx-2 flex w-[200px] flex-col gap-1 py-1 text-sm", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(EditableText, { value: input.varName, onChange: (varName) => updateInput({ varName }), className: "h-6 text-xs font-semibold shadow-none outline-none ring-0" }), _jsx(InputConfigPanel, { input: input, updateInput: updateInput, onRemove: () => remove(id) })] }), _jsx(RenderInput, { input: input, updateInput: updateInput })] }));
|
|
36
|
+
};
|
|
37
|
+
export const InputCell = ({ id }) => {
|
|
38
|
+
return (_jsx(CellContainer, { id: id, typeLabel: "Input", children: _jsx("div", { className: "p-2", children: _jsx(InputItem, { id: id }) }) }));
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=InputCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputCell.js","sourceRoot":"","sources":["../../../src/cells/Input/InputCell.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n EditableText,\n Input,\n Slider,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@sqlrooms/ui';\n\nimport {CellContainer} from '../CellContainer';\nimport {useStoreWithNotebook} from '../../useStoreWithNotebook';\nimport {InputConfigPanel} from './InputConfigPanel/InputConfigPanel';\nimport {InputUnion, InputCell as InputCellType} from '../../cellSchemas';\nimport {findCellInNotebook} from '../../NotebookUtils';\n\nconst RenderInput: React.FC<{\n input: InputUnion;\n updateInput: (patch: Partial<InputUnion>) => void;\n}> = ({input, updateInput}) => {\n switch (input.kind) {\n case 'text':\n return (\n <Input\n className=\"h-8 w-full rounded border px-2 py-1 text-sm\"\n value={input.value}\n onChange={(e) => updateInput({value: e.target.value})}\n />\n );\n case 'slider':\n return (\n <div className=\"flex h-8 items-center space-x-1\">\n <Slider\n min={input.min}\n max={input.max}\n step={input.step}\n value={[input.value as number]}\n onValueChange={(value) => updateInput({value: Number(value)})}\n />\n <span className=\"min-w-[3ch] text-right text-sm font-medium\">\n {input.value}\n </span>\n </div>\n );\n case 'dropdown':\n return (\n <Select\n value={input.value as string}\n onValueChange={(value) => updateInput({value})}\n >\n <SelectTrigger className=\"h-8 text-xs shadow-none\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent onCloseAutoFocus={(e) => e.preventDefault()}>\n {input.options.map((option) => (\n <SelectItem className=\"text-xs\" key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n default:\n return null;\n }\n};\n\nexport const InputItem: React.FC<{id: string}> = ({id}) => {\n const cell = useStoreWithNotebook(\n (s) => findCellInNotebook(s as any, id)?.cell,\n );\n const remove = useStoreWithNotebook((s) => s.notebook.removeCell);\n const update = useStoreWithNotebook((s) => s.notebook.updateCell);\n if (!cell || cell.type !== 'input') return null;\n const input = cell.data.input;\n\n const updateInput = (patch: Partial<InputUnion>) =>\n update(id, (c: any) => {\n return {\n ...c,\n data: {\n ...c.data,\n input: {...c.data.input, ...patch},\n },\n } as any;\n });\n\n return (\n <div className=\"mx-2 flex w-[200px] flex-col gap-1 py-1 text-sm\">\n <div className=\"flex items-center justify-between gap-2\">\n <EditableText\n value={input.varName}\n onChange={(varName) => updateInput({varName})}\n className=\"h-6 text-xs font-semibold shadow-none outline-none ring-0\"\n />\n <InputConfigPanel\n input={input}\n updateInput={updateInput}\n onRemove={() => remove(id)}\n />\n </div>\n <RenderInput input={input} updateInput={updateInput} />\n </div>\n );\n};\n\nexport const InputCell: React.FC<{id: string}> = ({id}) => {\n return (\n <CellContainer id={id} typeLabel=\"Input\">\n <div className=\"p-2\">\n <InputItem id={id} />\n </div>\n </CellContainer>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownConfig.d.ts","sourceRoot":"","sources":["../../../../src/cells/Input/InputConfigPanel/DropdownConfig.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc,+CA0H1B,CAAC"}
|