Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Sci-UI

Sci-UI is a web components library for scientific applications that aims to be user-friendly, modern and collaborative.

Motivation

Sci-UI is the result of many attempts at making a good GUI for various Public Invention projects that met the evolving needs of the organization. Volunteers are spread across the globe so it needed to be collaborative. The internet is the communication medium and volunteers have a wide-variety of devices, so it needed to be web-based. Volunteers have varying levels of ability so it needed to be quick and easy to use. Projects tend to outgrow off-the-shelf solutions quickly, so it needed to be customizable for experts. Many existing libraries and frameworks were evaluated (Qt, GTK, Dear ImGui, VTK, Vue, React, Angular, Svelte, Lit, Plotly, ChartJs, Ionic, StenclJs, webcomponents). These were compared to the needs outlined and unfortunately none quite fit the bill.

Compromises

The decision to use web technologies is not with compromises. There are performance limitations when using a web browser. Sci-UI isn't intended to do compute-intensive work so this shouldn't matter. In any case, the gap between desktop and web performance is closing, especially with new technologies such as WASM and WebGPU.

Web development is not a common tool in the toolbox of scientists. This could be a barrier to entry, however this has been mitigated with making the process as simple as possible by making all the components HTML tags that can be copied and pasted into an HTML page. In the future, the components could be arranged using a drag-and-drop editor.

Dependencies

StencilJS is used to "generate small, blazing fast, and 100% standards based Web Components that run in every browser." This allows SciUI components to integrate into Vue, React, Angular and vanilla JavaScript.

D3js is low level 2D visualization library for making custom plots.

three.js is a low level WebGL and WebGPU library for 3D visualization and GPGPU.

TypeScript is used (almost) exclusively.

Some services are provided for use with other Public Invention projects and as reference.

License

This program includes free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

About

Web components library for scientific user interfaces

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages