From 85a044cdec93c4eedf3f39d340de41ff90053862 Mon Sep 17 00:00:00 2001 From: Janosh Riebesell Date: Mon, 29 Jan 2024 10:27:59 +0100 Subject: [PATCH] define type AtomsGraph and subtypes for (Structure|Molecule)Graph rename symmetrize_structure() to get_pbc_image_sites() add number_electrons+electron_label_props to BohrAtom.svelte --- package.json | 30 +++++++------- src/lib/BohrAtom.svelte | 28 ++++++++++++- src/lib/material/index.ts | 1 + src/lib/structure/Structure.svelte | 8 ++-- src/lib/structure/StructureScene.svelte | 4 +- src/lib/structure/index.ts | 55 +++++++++++++++++++++---- tests/unit/structure-utils.test.ts | 14 +++---- 7 files changed, 102 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 7c1ce5c..40ad6b9 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,9 @@ }, "dependencies": { "@iconify/svelte": "^3.1.6", - "@sveltejs/kit": "^2.3.2", + "@sveltejs/kit": "^2.5.0", "@threlte/core": "7.0.12", - "@threlte/extras": "8.1.2", + "@threlte/extras": "8.3.0", "d3": "^7.8.5", "d3-array": "^3.2.4", "d3-color": "^3.1.0", @@ -36,15 +36,15 @@ "d3-scale-chromatic": "^3.0.0", "d3-shape": "^3.2.0", "highlight.js": "^11.9.0", - "svelte": "4.2.8", + "svelte": "4.2.9", "svelte-multiselect": "^10.2.0", "svelte-zoo": "^0.4.9", - "three": "^0.160.0" + "three": "^0.160.1" }, "devDependencies": { - "@playwright/test": "^1.40.1", + "@playwright/test": "^1.41.1", "@sveltejs/adapter-static": "3.0.1", - "@sveltejs/package": "^2.2.5", + "@sveltejs/package": "^2.2.6", "@sveltejs/vite-plugin-svelte": "^3.0.1", "@types/d3-array": "^3.2.1", "@types/d3-color": "^3.1.3", @@ -53,16 +53,16 @@ "@types/d3-scale-chromatic": "^3.0.3", "@types/d3-shape": "^3.1.6", "@types/three": "^0.160.0", - "@typescript-eslint/eslint-plugin": "^6.18.1", - "@typescript-eslint/parser": "^6.18.1", - "@vitest/coverage-v8": "^1.2.0", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", + "@vitest/coverage-v8": "^1.2.1", "eslint": "^8.56.0", "eslint-plugin-svelte": "^2.35.1", - "hastscript": "^8.0.0", - "jsdom": "^23.2.0", + "hastscript": "^9.0.0", + "jsdom": "^24.0.0", "mdsvex": "^0.11.0", "mdsvexamples": "^0.4.1", - "prettier": "^3.2.2", + "prettier": "^3.2.4", "prettier-plugin-svelte": "^3.1.2", "rehype-autolink-headings": "^7.1.0", "rehype-katex-svelte": "^1.2.0", @@ -71,11 +71,11 @@ "sharp": "^0.33.2", "svelte-check": "^3.6.3", "svelte-preprocess": "^5.1.3", - "svelte-toc": "^0.5.6", + "svelte-toc": "^0.5.7", "svelte2tsx": "^0.7.0", "typescript": "5.3.3", - "vite": "^5.0.11", - "vitest": "^1.2.0" + "vite": "^5.0.12", + "vitest": "^1.2.1" }, "keywords": [ "svelte", diff --git a/src/lib/BohrAtom.svelte b/src/lib/BohrAtom.svelte index 7f30582..638119e 100644 --- a/src/lib/BohrAtom.svelte +++ b/src/lib/BohrAtom.svelte @@ -4,7 +4,7 @@ export let name: string = `` // usually Hydrogen, Helium, etc. but can be anything export let shells: number[] // e.g. [2, 8, 6] for sulfur export let adapt_size = false - export let shell_width = 15 // TODO SVG is fixed so increasing this will make large atoms overflow + export let shell_width = 20 // TODO SVG is fixed so increasing this will make large atoms overflow export let size = adapt_size ? (shells.length + 1) * 2 * shell_width + 50 : 270 export let base_fill = `white` export let orbital_period = 3 // time for inner-most electron orbit in seconds, 0 for no motion @@ -14,6 +14,13 @@ export let electron_props: Record = {} export let highlight_shell: number | null = null export let style = `` + // if function, it'll be called with electron index and should return a string + export let number_electrons: + | boolean + | 'hierarchical' + | 'sequential' + | ((idx: number) => string) = false + export let electron_label_props: Record = {} // Bohr atom electron orbital period is given by // T = (n^3 h^3) / (4pi^2 m K e^4 Z^2) = 1.52 * 10^-16 * n^3 / Z^2 s @@ -77,6 +84,25 @@ Electron {elec_idx + 1} + {#if number_electrons} + + {#if typeof number_electrons === `function`} + {number_electrons(elec_idx)} + {:else if number_electrons === `hierarchical`} + {shell_idx + 1}.{elec_idx + 1} + + {:else} + {@const nth_electron = + shells.slice(0, shell_idx).reduce((a, b) => a + b, 0) + elec_idx + 1} + {nth_electron} + {/if} + + {/if} {/each} {/each} diff --git a/src/lib/material/index.ts b/src/lib/material/index.ts index da428c2..696fe69 100644 --- a/src/lib/material/index.ts +++ b/src/lib/material/index.ts @@ -1 +1,2 @@ export { default as MaterialCard } from './MaterialCard.svelte' +export { default as SymmetryCard } from './SymmetryCard.svelte' diff --git a/src/lib/structure/Structure.svelte b/src/lib/structure/Structure.svelte index c9c32e7..e45f808 100644 --- a/src/lib/structure/Structure.svelte +++ b/src/lib/structure/Structure.svelte @@ -1,7 +1,7 @@