diff --git a/.changeset/cool-knives-drop.md b/.changeset/cool-knives-drop.md new file mode 100644 index 0000000..69eeacf --- /dev/null +++ b/.changeset/cool-knives-drop.md @@ -0,0 +1,5 @@ +--- +"sqlseal": minor +--- + +adding global tables support - you can now define table that will be available in all your files diff --git a/src/modules/editor/codeblockHandler/CodeblockProcessor.ts b/src/modules/editor/codeblockHandler/CodeblockProcessor.ts index 2f6c801..8fe47d3 100644 --- a/src/modules/editor/codeblockHandler/CodeblockProcessor.ts +++ b/src/modules/editor/codeblockHandler/CodeblockProcessor.ts @@ -184,10 +184,11 @@ export class CodeblockProcessor extends MarkdownRenderChild { const canvasViews = this.app.workspace.getLeavesOfType("canvas"); for (const leaf of canvasViews) { - const nodes = JSON.parse(leaf.view.data).nodes - const node = nodes.filter(n => n.text).find(n => n.text.contains(this.source)) + const canvasView = leaf.view as any; // Canvas view has data and file properties not exposed in base View type + const nodes = JSON.parse(canvasView.data).nodes + const node = nodes.filter((n: any) => n.text).find((n: any) => n.text.contains(this.source)) if (node) { - this.cachedName = leaf.view.file.path + this.cachedName = canvasView.file.path return this.cachedName as string } } diff --git a/src/modules/explorer/Editor.ts b/src/modules/explorer/Editor.ts index 4bfb57e..4365f37 100644 --- a/src/modules/explorer/Editor.ts +++ b/src/modules/explorer/Editor.ts @@ -47,7 +47,6 @@ export class Editor { this.createCodeblockProcessor(this.codeblockElement, this.query); if (this.db) { - // Use enhanced schema visualizer with memory database const vis = new SchemaVisualiser(this.db) vis.show(structure) } else { diff --git a/src/modules/explorer/schemaVisualiser/TableVisualiser.ts b/src/modules/explorer/schemaVisualiser/TableVisualiser.ts index daee11a..902f0f3 100644 --- a/src/modules/explorer/schemaVisualiser/TableVisualiser.ts +++ b/src/modules/explorer/schemaVisualiser/TableVisualiser.ts @@ -2,8 +2,6 @@ export interface ColumnInfo { name: string type: string } - -// Legacy interface - kept for backward compatibility export interface TableInfo { name: string columns: ColumnInfo[] diff --git a/src/modules/globalTables/cells/StatsRenderer.ts b/src/modules/globalTables/cells/StatsRenderer.ts index 52e2c70..29414d7 100644 --- a/src/modules/globalTables/cells/StatsRenderer.ts +++ b/src/modules/globalTables/cells/StatsRenderer.ts @@ -16,7 +16,7 @@ export class StatsRenderer implements ICellRendererComp { this.sync() } - public async init(params: ICellRendererParams) { + public init(params: ICellRendererParams) { const { value, data, context } = params; this.context = context this.data = data! diff --git a/styles.css b/styles.css deleted file mode 100644 index f100edc..0000000 --- a/styles.css +++ /dev/null @@ -1,2 +0,0 @@ -.sqlseal-table-container{overflow-y:scroll}.sqlseal-table-container table{width:100%;border-collapse:collapse}.sqlseal-grid-wrapper{height:auto;position:relative}.block-language-sqlseal{overflow-y:auto}.sqlseal-error{padding:1em;background:#b80f0f;color:#fff}.sqlseal-notice{padding:1em;background:#1f3f98;color:#fff}.sqlseal-grid-error-message{box-sizing:border-box;width:80%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;background:#b80f0f;font-size:.8em;color:#fff;padding:.5em 2em}.sqlseal-grid-error-message-overlay{content:"";position:absolute;inset:0;background:#fffc;z-index:5}.sqlseal-grid-error-message-overlay.hidden{display:none}.edit-block-button{z-index:1000}.sqlseal-markdown-table{font-family:monospace;white-space:pre-wrap}.sqlseal-markdown-table.no-wrap{display:inline-block;overflow-x:scroll;width:fit-content}.sqlseal-parse-error{background:#b80f0f;color:#fff;padding:.2em;border-radius:2px}.sqlseal-notice-error{color:#f26464}.sqlseal-notice-error:before{content:"";width:16px;height:16px;display:inline-block;margin-right:8px;transform:translateY(3px);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23ff0000' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z'/%3E%3C/svg%3E")}.sql-seal-csv-editor{display:flex;flex-direction:column;height:100%;gap:var(--size-4-4)}.sql-seal-csv-viewer{flex:1;display:flex;flex-direction:column}.sqlseal-grid-wrapper{height:100%;flex:1;display:flex;flex-direction:column}.ag-theme-quartz{flex:1}.sql-seal-csv-viewer-buttons{display:flex;gap:var(--size-4-4)}.sql-seal-modal-code{width:100%;font-family:monospace;padding:8px}.sqlseal-inline-result{display:inline-block;padding:0 4px;margin:0 2px;background-color:var(--background-secondary);border-radius:4px;font-size:.9em;cursor:pointer}.sqlseal-inline-result .error{color:var(--text-error);font-style:italic}.sqlseal-list-element-single .sqlseal-column-name{display:none}.sqlseal-list-element-single .sqlseal-column-name:after{content:": "}.sqlseal-list.show-column-names .sqlseal-list-element-single .sqlseal-column-name{display:inline}.sqlseal-element-inline-list{display:inline-block}.cm-sqlseal-block-query{--color: #297f30}.cm-sqlseal-block-view{--color: #c834dd}.cm-sqlseal-block-flag{--color: #d08306;font-weight:700;color:var(--color)}.cm-sqlseal-block-table{--color: #4985af}.cm-sqlseal-identifier{color:#2d7b33}.cm-sqlseal-function,.cm-sqlseal-parameter{color:#2c0e9b}.cm-sqlseal-comment{color:#7a7a7a;font-style:italic}.cm-sqlseal-keyword{color:var(--color);font-weight:700}.cm-sqlseal-literal{color:#03f}.cm-sqlseal-error{color:#eb2f2f;font-style:italic}.cm-sqlseal-template-keyword{color:#e3ab53}.theme-dark .cm-sqlseal-template-keyword{color:#dd8e10}.theme-dark .cm-sqlseal-block-error{color:red}.theme-dark .cm-sqlseal-block-query{--color: #5eff6a}.theme-dark .cm-sqlseal-comment{color:#898787}.theme-dark .cm-sqlseal-parameter{color:#95ed22}.theme-dark .cm-sqlseal-literal{color:#ff0}.theme-dark .cm-sqlseal-block-view{--color: #e945ff}.theme-dark .cm-sqlseal-block-flag{--color: #e3ab53}.theme-dark .cm-sqlseal-block-table{--color: #56b5fa}.theme-dark .cm-sqlseal-function{color:#c4b8ef}.theme-dark .cm-sqlseal-identifier{color:#6ff77a}:is(.cm-sqlseal-block-query,.cm-sqlseal-block-view,.cm-sqlseal-block-flag,.cm-sqlseal-block-table,.cm-sqlseal-explorer):before{background-color:var(--color);width:5px;top:-3px;bottom:-3px;left:0;content:"";display:block;position:absolute}.cm-indent+:is(.cm-sqlseal-block-query,.cm-sqlseal-block-view,.cm-sqlseal-block-flag,.cm-sqlseal-block-table):before{display:none}.cm-sqlseal-explorer .cm-line{position:relative}.cm-sqlseal-overlay{border:1px solid #AAA;padding:1em;border-radius:5px}.cm-sqlseal-overlay .cm-line{position:relative}.cm-sqlseal-overlay .cm-editor{outline:none}.sqlseal-modal-copycode .setting-item{border:0}.cm-sqlseal-explorer :is(.cm-sqlseal-block-query,.cm-sqlseal-block-view,.cm-sqlseal-block-flag,.cm-sqlseal-block-table):before{left:-3px}.cm-sqlseal-explorer .cm-focused{outline:none}.cm-sqlseal-explorer .cm-editor{border-left-width:0;background:var(--color-base-20);padding:8px}.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>:has(>.block-language-sqlseal table.dataview){width:var(--container-dataview-table-width);max-width:var(--container-table-max-width)}.ag-checkbox-input{opacity:1!important}.sqlseal-hidden-column{opacity:.5}.sqlseal-settings-warn{background:#ffa600;padding:16px;border:2px solid rgb(134,87,0);border-radius:5px;margin:.5em 2em}.sqlseal-autocomplete-container{position:relative;width:100%}.sqlseal-autocomplete-container input[type=text]{width:100%}.sqlseal-autocomplete-dropdown{position:absolute;top:100%;left:0;margin-top:.5em;right:0;text-align:left;background:#fff;max-height:200px;overflow-y:scroll;border-radius:5px;box-shadow:0 3px 5px #ccc}.modal-overflow{overflow:visible}.sqlseal-dropdown-el{padding:4px 16px 4px 8px;border-top:1px solid #EEE;overflow:hidden}.sqlseal-dropdown-el:first-child{border-top:0}.sqlseal-dropdown-el:hover{background:#a8c4ef}.sqlseal-dropdown-el-name{font-weight:700;font-size:.9em;text-overflow:ellipsis;max-width:100%;overflow:hidden;text-wrap:nowrap}.sqlseal-dropdown-el-path{opacity:.9;font-size:.7em;text-overflow:ellipsis;max-width:100%;overflow:hidden;text-wrap:nowrap}.sqlseal-global-tables-container{height:100%;display:flex;flex-direction:column;gap:1em}.sqlseal-tv-container{gap:1em}.sqlseal-tv-table{display:inline-block;border:1px solid black;margin-right:1em;margin-bottom:1em}.sqlseal-tv-table-name{padding:.5em 1em;background:#ddd;border-bottom:2px solid black}.sqlseal-tv-columns{list-style:none;margin:0;padding:.5em 1em}.sqlseal-tv-columns li{display:flex;flex-direction:row;gap:1em;justify-content:space-between}.sqlseal-mermaid-container{width:100%;height:100%;overflow:hidden;background:var(--background-primary)}.sqlseal-mermaid-container svg{width:100%;height:100%;display:block}.sqlseal-mermaid-container [id^=entity-]{cursor:pointer;transition:all .2s ease}.sqlseal-mermaid-container [id^=entity-]:hover{opacity:.8}.sqlseal-mermaid-container [id^=entity-].highlighted{filter:drop-shadow(2px 2px 4px rgba(0,0,0,.3))}.sqlseal-mermaid-container .er.relationshipLine{stroke:var(--text-accent)!important;stroke-width:2px!important;opacity:.8}.sqlseal-mermaid-container .er.relationshipLabel{fill:var(--text-accent)!important;font-family:var(--font-interface);font-size:11px!important;font-weight:500}.sqlseal-mermaid-container .er marker{fill:var(--text-accent)!important;stroke:var(--text-accent)!important}.sqlseal-mermaid-container .er.entityBox{fill:var(--background-secondary);stroke:var(--background-modifier-border);stroke-width:1px}.sqlseal-mermaid-container .er.entityLabel{fill:var(--text-normal);font-family:var(--font-interface);font-size:14px;font-weight:600}.sqlseal-mermaid-container .er.attributeBoxEven,.sqlseal-mermaid-container .er.attributeBoxOdd{fill:var(--background-primary-alt);stroke:var(--background-modifier-border)}.sqlseal-mermaid-container .er.attributeBoxEven{fill:var(--background-primary)}.sqlseal-mermaid-container .er .cardinality text{fill:var(--text-accent)!important;font-family:var(--font-interface);font-size:14px!important;font-weight:700}.sqlseal-mermaid-container path[id*=relationship]{stroke:var(--text-accent)!important;stroke-width:2px!important;marker-end:url(#arrowhead)!important}.sqlseal-mermaid-container g[id*=relationship] path{stroke:var(--text-accent)!important;stroke-width:2px!important;fill:none!important}.sqlseal-mermaid-container defs marker path{fill:var(--text-accent)!important;stroke:var(--text-accent)!important}.sqlseal-zoom-controls{position:absolute;bottom:10px;right:10px;display:flex;align-items:center;gap:2px;z-index:10}.sqlseal-zoom-controls .sqlseal-zoom-btn{width:28px;height:28px;background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:4px;color:var(--text-normal);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;transition:all .2s ease;box-shadow:0 1px 3px #0000001a}.sqlseal-zoom-controls .sqlseal-zoom-btn:hover{background:var(--background-modifier-hover);border-color:var(--text-accent);transform:translateY(-1px);box-shadow:0 2px 6px #00000026}.sqlseal-zoom-controls .sqlseal-zoom-btn:active{transform:translateY(0) scale(.95)}.sqlseal-zoom-controls .sqlseal-zoom-display{font-size:10px;color:var(--text-muted);font-family:var(--font-monospace);padding:2px 6px;background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:4px;margin-left:4px;box-shadow:0 1px 3px #0000001a;min-width:42px;text-align:center;font-weight:500}.sqlseal-mermaid-container{position:relative}.sqlseal-mermaid-container svg{transition:none}.sqlseal-mermaid-container svg.grabbing{cursor:grabbing!important}.sqlseal-mermaid-container .pan-zoom-group{transform-origin:0 0}.sqlseal-table-details-modal{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.sqlseal-table-details-modal .sqlseal-modal-content{background:var(--background-primary);border:1px solid var(--background-modifier-border);border-radius:8px;padding:24px;max-width:80vw;max-height:80vh;overflow-y:auto;position:relative}.sqlseal-table-details-modal .sqlseal-modal-content h3,.sqlseal-table-details-modal .sqlseal-modal-content h4{color:var(--text-normal);margin:0 0 16px}.sqlseal-table-details-modal .sqlseal-modal-content h4{margin-top:24px;font-size:1.1em}.sqlseal-table-details-modal .sqlseal-modal-close{position:absolute;top:12px;right:16px;background:none;border:none;font-size:24px;cursor:pointer;color:var(--text-muted);padding:4px 8px;border-radius:4px}.sqlseal-table-details-modal .sqlseal-modal-close:hover{background:var(--background-modifier-hover);color:var(--text-normal)}.sqlseal-columns-table,.sqlseal-fk-table{width:100%;border-collapse:collapse;margin:12px 0;font-family:var(--font-interface)}.sqlseal-columns-table th,.sqlseal-columns-table td,.sqlseal-fk-table th,.sqlseal-fk-table td{border:1px solid var(--background-modifier-border);padding:8px 12px;text-align:left}.sqlseal-columns-table th,.sqlseal-fk-table th{background:var(--background-secondary);font-weight:600;color:var(--text-normal)}.sqlseal-columns-table td,.sqlseal-fk-table td{background:var(--background-primary);color:var(--text-normal)}.sqlseal-columns-table tr:nth-child(2n) td,.sqlseal-fk-table tr:nth-child(2n) td{background:var(--background-primary-alt)}.sqlseal-error{color:var(--text-error);padding:16px;text-align:center;font-style:italic}.sqlseal-fallback-schema{padding:16px;font-family:var(--font-interface)}.sqlseal-fallback-schema h3{color:var(--text-normal);margin:0 0 20px;text-align:center}.sqlseal-fallback-schema .sqlseal-empty-schema{color:var(--text-muted);text-align:center;font-style:italic;padding:40px}.sqlseal-fallback-table{margin-bottom:24px;border:1px solid var(--background-modifier-border);border-radius:6px;overflow:hidden}.sqlseal-fallback-table .sqlseal-fallback-table-title{background:var(--background-secondary);color:var(--text-normal);margin:0;padding:12px 16px;font-size:1.1em;font-weight:600;border-bottom:1px solid var(--background-modifier-border)}.sqlseal-fallback-table .sqlseal-fallback-fk-title{color:var(--text-normal);margin:16px 16px 8px;font-size:.95em;font-weight:600}.sqlseal-fallback-table .sqlseal-fallback-fk-list{margin:0 16px 16px;padding-left:20px}.sqlseal-fallback-table .sqlseal-fallback-fk-list li{color:var(--text-muted);font-size:.9em;margin-bottom:4px;font-family:var(--font-monospace)}.sqlseal-fallback-columns-table{width:100%;border-collapse:collapse;margin:0}.sqlseal-fallback-columns-table th,.sqlseal-fallback-columns-table td{border:none;border-bottom:1px solid var(--background-modifier-border);padding:8px 16px;text-align:left;font-size:.9em}.sqlseal-fallback-columns-table th{background:var(--background-primary-alt);font-weight:600;color:var(--text-normal);font-size:.85em;text-transform:uppercase;letter-spacing:.5px}.sqlseal-fallback-columns-table td{background:var(--background-primary);color:var(--text-normal)}.sqlseal-fallback-columns-table tr:nth-child(2n) td{background:var(--background-primary-alt)}.sqlseal-fallback-columns-table tr:last-child td{border-bottom:none}.sqlseal-explorer-container{height:100%;width:100%;max-height:100%;display:grid;grid-template-rows:auto 1fr}.sqlseal-explorer-grid-container{display:grid;grid-template-columns:50% 50%;gap:1em;height:100%;width:100%;padding:1em}.sqlseal-explorer-render{overflow:scroll}.sqlseal-menubar-container{padding:.2em 0;display:flex}.sqlseal-menubar-container .separator{flex:1}.sqlseal-menubar-button{border:0;--input-shadow: none}.sqlseal-explorer-right-pane{display:grid;container-type:inline-size;height:100%}.sqlseal-explorer-right-pane>*{grid-area:1/1;height:100%}.sqlseal-explorer-right-pane .ag-root-wrapper{height:100%}.sqlseal-explorer-right-pane .ag-root-wrapper-body{flex:1}.sqlseal-explorer-right-pane .ag-paging-page-size,.sqlseal-explorer-right-pane .ag-paging-row-summary-panel{display:none}.sqlseal-explorer-right-pane .ag-paging-panel{justify-content:center} -/*# sourceMappingURL=styles.css.map */