diff --git a/xas-standards-client/package.json b/xas-standards-client/package.json
index b9e4492..050c1b9 100644
--- a/xas-standards-client/package.json
+++ b/xas-standards-client/package.json
@@ -14,7 +14,10 @@
},
"dependencies": {
"@celadora/periodic-table": "^0.1.32",
+ "@emotion/react": "^11.11.4",
+ "@emotion/styled": "^11.11.5",
"@h5web/lib": "11.0.0",
+ "@mui/material": "^5.15.18",
"@types/ndarray": "^1.0.14",
"axios": "^1.6.7",
"ndarray": "^1.0.19",
@@ -45,10 +48,16 @@
"eslint-plugin-react-refresh": "^0.4.5",
"eslint-plugin-storybook": "^0.8.0",
"jsdom": "^24.0.0",
+ "msw": "^2.3.0",
"react-test-renderer": "^18.2.0",
"storybook": "^8.0.5",
"typescript": "^5.2.2",
"vite": "^5.0.8",
"vitest": "^1.2.2"
+ },
+ "msw": {
+ "workerDirectory": [
+ "public"
+ ]
}
-}
+}
\ No newline at end of file
diff --git a/xas-standards-client/pnpm-lock.yaml b/xas-standards-client/pnpm-lock.yaml
index 2dd41fb..1a7476c 100644
--- a/xas-standards-client/pnpm-lock.yaml
+++ b/xas-standards-client/pnpm-lock.yaml
@@ -8,9 +8,18 @@ dependencies:
'@celadora/periodic-table':
specifier: ^0.1.32
version: 0.1.32
+ '@emotion/react':
+ specifier: ^11.11.4
+ version: 11.11.4(@types/react@18.2.48)(react@18.2.0)
+ '@emotion/styled':
+ specifier: ^11.11.5
+ version: 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.48)(react@18.2.0)
'@h5web/lib':
specifier: 11.0.0
version: 11.0.0(@react-three/fiber@8.15.15)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)(three@0.160.1)(typescript@5.3.3)
+ '@mui/material':
+ specifier: ^5.15.18
+ version: 5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
'@types/ndarray':
specifier: ^1.0.14
version: 1.0.14
@@ -97,6 +106,9 @@ devDependencies:
jsdom:
specifier: ^24.0.0
version: 24.0.0
+ msw:
+ specifier: ^2.3.0
+ version: 2.3.0(typescript@5.3.3)
react-test-renderer:
specifier: ^18.2.0
version: 18.2.0(react@18.2.0)
@@ -145,7 +157,6 @@ packages:
dependencies:
'@babel/highlight': 7.23.4
chalk: 2.4.2
- dev: true
/@babel/code-frame@7.24.2:
resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
@@ -340,7 +351,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
@@ -435,12 +445,10 @@ packages:
/@babel/helper-string-parser@7.23.4:
resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-identifier@7.22.20:
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-option@7.23.5:
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
@@ -485,7 +493,6 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2
js-tokens: 4.0.0
- dev: true
/@babel/highlight@7.24.2:
resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
@@ -1551,12 +1558,23 @@ packages:
'@babel/helper-string-parser': 7.23.4
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- dev: true
/@base2/pretty-print-object@1.0.1:
resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
dev: true
+ /@bundled-es-modules/cookie@2.0.0:
+ resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==}
+ dependencies:
+ cookie: 0.5.0
+ dev: true
+
+ /@bundled-es-modules/statuses@1.0.1:
+ resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
+ dependencies:
+ statuses: 2.0.1
+ dev: true
+
/@celadora/periodic-table@0.1.32:
resolution: {integrity: sha512-TcmpVSlWfLIBWmyV8Em4Q4O+D6tXaJ9em5xEOYs19Pz8nJxlhZpvp5oknHP6MibEUCwpplX53N3F+sVo2de++g==}
dev: false
@@ -1588,13 +1606,120 @@ packages:
engines: {node: '>=10.0.0'}
dev: true
+ /@emotion/babel-plugin@11.11.0:
+ resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
+ dependencies:
+ '@babel/helper-module-imports': 7.24.3
+ '@babel/runtime': 7.23.9
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/serialize': 1.1.4
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/cache@11.11.0:
+ resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ '@emotion/sheet': 1.2.2
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ stylis: 4.2.0
+ dev: false
+
+ /@emotion/hash@0.9.1:
+ resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
+ dev: false
+
+ /@emotion/is-prop-valid@1.2.2:
+ resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==}
+ dependencies:
+ '@emotion/memoize': 0.8.1
+ dev: false
+
+ /@emotion/memoize@0.8.1:
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
+ dev: false
+
+ /@emotion/react@11.11.4(@types/react@18.2.48)(react@18.2.0):
+ resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/cache': 11.11.0
+ '@emotion/serialize': 1.1.4
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@emotion/utils': 1.2.1
+ '@emotion/weak-memoize': 0.3.1
+ '@types/react': 18.2.48
+ hoist-non-react-statics: 3.3.2
+ react: 18.2.0
+ dev: false
+
+ /@emotion/serialize@1.1.4:
+ resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==}
+ dependencies:
+ '@emotion/hash': 0.9.1
+ '@emotion/memoize': 0.8.1
+ '@emotion/unitless': 0.8.1
+ '@emotion/utils': 1.2.1
+ csstype: 3.1.3
+ dev: false
+
+ /@emotion/sheet@1.2.2:
+ resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
+ dev: false
+
+ /@emotion/styled@11.11.5(@emotion/react@11.11.4)(@types/react@18.2.48)(react@18.2.0):
+ resolution: {integrity: sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==}
+ peerDependencies:
+ '@emotion/react': ^11.0.0-rc.0
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@emotion/babel-plugin': 11.11.0
+ '@emotion/is-prop-valid': 1.2.2
+ '@emotion/react': 11.11.4(@types/react@18.2.48)(react@18.2.0)
+ '@emotion/serialize': 1.1.4
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@emotion/utils': 1.2.1
+ '@types/react': 18.2.48
+ react: 18.2.0
+ dev: false
+
+ /@emotion/unitless@0.8.1:
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
+ dev: false
+
/@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0):
resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==}
peerDependencies:
react: '>=16.8.0'
dependencies:
react: 18.2.0
- dev: true
+
+ /@emotion/utils@1.2.1:
+ resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
+ dev: false
+
+ /@emotion/weak-memoize@0.3.1:
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
+ dev: false
/@esbuild/aix-ppc64@0.19.11:
resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==}
@@ -1844,6 +1969,34 @@ packages:
resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
dev: true
+ /@floating-ui/core@1.6.2:
+ resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==}
+ dependencies:
+ '@floating-ui/utils': 0.2.2
+ dev: false
+
+ /@floating-ui/dom@1.6.5:
+ resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==}
+ dependencies:
+ '@floating-ui/core': 1.6.2
+ '@floating-ui/utils': 0.2.2
+ dev: false
+
+ /@floating-ui/react-dom@2.0.9(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@floating-ui/dom': 1.6.5
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@floating-ui/utils@0.2.2:
+ resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==}
+ dev: false
+
/@h5web/lib@11.0.0(@react-three/fiber@8.15.15)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)(three@0.160.1)(typescript@5.3.3):
resolution: {integrity: sha512-3ILudma+6Z/MTPU94dUTRLKh2sbsEzRH/i47irV4fxOo5WGH/hMjATUcyt6dnFYq2Ykenhi639/yu2M1c3bpOA==}
peerDependencies:
@@ -1909,6 +2062,43 @@ packages:
resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
dev: true
+ /@inquirer/confirm@3.1.8:
+ resolution: {integrity: sha512-f3INZ+ca4dQdn+MQiq1yP/mOIR/Oc8BLRYuDh6ciToWd6z4W8yArfzjBCMQ0BPY8PcJKwZxGIt8Z6yNT32eSTw==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/core': 8.2.1
+ '@inquirer/type': 1.3.2
+ dev: true
+
+ /@inquirer/core@8.2.1:
+ resolution: {integrity: sha512-TIcuQMn2qrtyYe0j136UpHeYpk7AcR/trKeT/7YY0vRgcS9YSfJuQ2+PudPhSofLLsHNnRYAHScQCcVZrJkMqA==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@inquirer/figures': 1.0.2
+ '@inquirer/type': 1.3.2
+ '@types/mute-stream': 0.0.4
+ '@types/node': 20.12.12
+ '@types/wrap-ansi': 3.0.0
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-spinners: 2.9.2
+ cli-width: 4.1.0
+ mute-stream: 1.0.0
+ signal-exit: 4.1.0
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ dev: true
+
+ /@inquirer/figures@1.0.2:
+ resolution: {integrity: sha512-4F1MBwVr3c/m4bAUef6LgkvBfSjzwH+OfldgHqcuacWwSUetFebM2wi58WfG9uk1rR98U6GwLed4asLJbwdV5w==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /@inquirer/type@1.3.2:
+ resolution: {integrity: sha512-5Frickan9c89QbPkSu6I6y8p+9eR6hZkdPahGmNDsTFX8FHLPAozyzCZMKUeW8FyYwnlCKUjqIEqxY+UctARiw==}
+ engines: {node: '>=18'}
+ dev: true
+
/@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2007,6 +2197,184 @@ packages:
react: 18.2.0
dev: true
+ /@mswjs/cookies@1.1.0:
+ resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /@mswjs/interceptors@0.29.1:
+ resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@open-draft/deferred-promise': 2.2.0
+ '@open-draft/logger': 0.3.0
+ '@open-draft/until': 2.1.0
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ strict-event-emitter: 0.5.1
+ dev: true
+
+ /@mui/base@5.0.0-beta.40(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0)(react@18.2.0)
+ '@mui/types': 7.2.14(@types/react@18.2.48)
+ '@mui/utils': 5.15.14(@types/react@18.2.48)(react@18.2.0)
+ '@popperjs/core': 2.11.8
+ '@types/react': 18.2.48
+ clsx: 2.1.1
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
+ /@mui/core-downloads-tracker@5.15.18:
+ resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==}
+ dev: false
+
+ /@mui/material@5.15.18(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@emotion/react': 11.11.4(@types/react@18.2.48)(react@18.2.0)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.48)(react@18.2.0)
+ '@mui/base': 5.0.0-beta.40(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
+ '@mui/core-downloads-tracker': 5.15.18
+ '@mui/system': 5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.48)(react@18.2.0)
+ '@mui/types': 7.2.14(@types/react@18.2.48)
+ '@mui/utils': 5.15.14(@types/react@18.2.48)(react@18.2.0)
+ '@types/react': 18.2.48
+ '@types/react-transition-group': 4.4.10
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-is: 18.2.0
+ react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
+ dev: false
+
+ /@mui/private-theming@5.15.14(@types/react@18.2.48)(react@18.2.0):
+ resolution: {integrity: sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@mui/utils': 5.15.14(@types/react@18.2.48)(react@18.2.0)
+ '@types/react': 18.2.48
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/styled-engine@5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.2.0):
+ resolution: {integrity: sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.4.1
+ '@emotion/styled': ^11.3.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@emotion/cache': 11.11.0
+ '@emotion/react': 11.11.4(@types/react@18.2.48)(react@18.2.0)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.48)(react@18.2.0)
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/system@5.15.15(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.48)(react@18.2.0):
+ resolution: {integrity: sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@emotion/react': ^11.5.0
+ '@emotion/styled': ^11.3.0
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@emotion/react':
+ optional: true
+ '@emotion/styled':
+ optional: true
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@emotion/react': 11.11.4(@types/react@18.2.48)(react@18.2.0)
+ '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.48)(react@18.2.0)
+ '@mui/private-theming': 5.15.14(@types/react@18.2.48)(react@18.2.0)
+ '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.2.0)
+ '@mui/types': 7.2.14(@types/react@18.2.48)
+ '@mui/utils': 5.15.14(@types/react@18.2.48)(react@18.2.0)
+ '@types/react': 18.2.48
+ clsx: 2.1.1
+ csstype: 3.1.3
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
+ /@mui/types@7.2.14(@types/react@18.2.48):
+ resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@types/react': 18.2.48
+ dev: false
+
+ /@mui/utils@5.15.14(@types/react@18.2.48)(react@18.2.0):
+ resolution: {integrity: sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ '@types/react': ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.23.9
+ '@types/prop-types': 15.7.11
+ '@types/react': 18.2.48
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-is: 18.2.0
+ dev: false
+
/@ndelangen/get-tarball@3.0.9:
resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==}
dependencies:
@@ -2036,6 +2404,21 @@ packages:
fastq: 1.16.0
dev: true
+ /@open-draft/deferred-promise@2.2.0:
+ resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
+ dev: true
+
+ /@open-draft/logger@0.3.0:
+ resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==}
+ dependencies:
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ dev: true
+
+ /@open-draft/until@2.1.0:
+ resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ dev: true
+
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -3130,6 +3513,10 @@ packages:
'@types/node': 20.12.2
dev: true
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ dev: true
+
/@types/cross-spawn@6.0.6:
resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==}
dependencies:
@@ -3289,6 +3676,12 @@ packages:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
dev: true
+ /@types/mute-stream@0.0.4:
+ resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
+ dependencies:
+ '@types/node': 20.12.12
+ dev: true
+
/@types/ndarray@1.0.14:
resolution: {integrity: sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg==}
dev: false
@@ -3299,6 +3692,12 @@ packages:
undici-types: 5.26.5
dev: true
+ /@types/node@20.12.12:
+ resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
+ dependencies:
+ undici-types: 5.26.5
+ dev: true
+
/@types/node@20.12.2:
resolution: {integrity: sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==}
dependencies:
@@ -3309,6 +3708,10 @@ packages:
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
dev: true
+ /@types/parse-json@4.0.2:
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+ dev: false
+
/@types/pretty-hrtime@1.0.3:
resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==}
dev: true
@@ -3341,6 +3744,12 @@ packages:
'@types/react': 18.2.48
dev: false
+ /@types/react-transition-group@4.4.10:
+ resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==}
+ dependencies:
+ '@types/react': 18.2.48
+ dev: false
+
/@types/react@18.2.48:
resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==}
dependencies:
@@ -3374,6 +3783,10 @@ packages:
'@types/node': 20.12.2
dev: true
+ /@types/statuses@2.0.5:
+ resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==}
+ dev: true
+
/@types/unist@3.0.2:
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
dev: true
@@ -3386,6 +3799,10 @@ packages:
resolution: {integrity: sha512-bo3K4UFBwP1RbMjuMin9cgyThD5YxjIWjQHJT7O7PVU2DB81qop7JnZAXRmrrGPbEsoHcdUmjmQDXI6zfqkVIQ==}
dev: false
+ /@types/wrap-ansi@3.0.0:
+ resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==}
+ dev: true
+
/@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -3945,6 +4362,13 @@ packages:
uri-js: 4.4.1
dev: true
+ /ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.21.3
+ dev: true
+
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -3960,7 +4384,6 @@ packages:
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
- dev: true
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -4069,6 +4492,15 @@ packages:
'@babel/core': 7.23.7
dev: true
+ /babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+ dependencies:
+ '@babel/runtime': 7.23.9
+ cosmiconfig: 7.1.0
+ resolve: 1.22.8
+ dev: false
+
/babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.23.7):
resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==}
peerDependencies:
@@ -4276,7 +4708,6 @@ packages:
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- dev: true
/caniuse-lite@1.0.30001579:
resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==}
@@ -4306,7 +4737,6 @@ packages:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- dev: true
/chalk@3.0.0:
resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
@@ -4403,6 +4833,20 @@ packages:
'@colors/colors': 1.5.0
dev: true
+ /cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
/clone-deep@4.0.1:
resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
engines: {node: '>=6'}
@@ -4417,11 +4861,15 @@ packages:
engines: {node: '>=0.8'}
dev: true
+ /clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+ dev: false
+
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
- dev: true
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -4432,7 +4880,6 @@ packages:
/color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: true
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -4496,6 +4943,10 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: false
+
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
dev: true
@@ -4504,6 +4955,11 @@ packages:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
dev: true
+ /cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
@@ -4519,6 +4975,17 @@ packages:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
+ /cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+ dev: false
+
/cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -4854,6 +5321,13 @@ packages:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
dev: true
+ /dom-helpers@5.2.1:
+ resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+ dependencies:
+ '@babel/runtime': 7.23.9
+ csstype: 3.1.3
+ dev: false
+
/dotenv-expand@10.0.0:
resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
engines: {node: '>=12'}
@@ -4931,7 +5405,6 @@ packages:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
is-arrayish: 0.2.1
- dev: true
/es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
@@ -5021,12 +5494,10 @@ packages:
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
- dev: true
/escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- dev: true
/escodegen@2.1.0:
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
@@ -5367,6 +5838,10 @@ packages:
pkg-dir: 4.2.0
dev: true
+ /find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+ dev: false
+
/find-up@3.0.0:
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
engines: {node: '>=6'}
@@ -5497,7 +5972,6 @@ packages:
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- dev: true
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
@@ -5508,6 +5982,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ dev: true
+
/get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
dev: true
@@ -5649,6 +6128,11 @@ packages:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
+ /graphql@16.8.1:
+ resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+ dev: true
+
/gunzip-maybe@1.4.2:
resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
hasBin: true
@@ -5681,7 +6165,6 @@ packages:
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
- dev: true
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -5722,7 +6205,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
- dev: true
/hast-util-heading-rank@3.0.0:
resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
@@ -5742,6 +6224,16 @@ packages:
'@types/hast': 3.0.4
dev: true
+ /headers-polyfill@4.0.3:
+ resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
+ dev: true
+
+ /hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+ dependencies:
+ react-is: 16.13.1
+ dev: false
+
/hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
dev: true
@@ -5827,7 +6319,6 @@ packages:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
- dev: true
/imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@@ -5900,7 +6391,6 @@ packages:
/is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: true
/is-bigint@1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
@@ -5936,7 +6426,6 @@ packages:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
hasown: 2.0.0
- dev: true
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
@@ -6001,6 +6490,10 @@ packages:
define-properties: 1.2.1
dev: true
+ /is-node-process@1.2.0:
+ resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
+ dev: true
+
/is-number-object@1.0.7:
resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
engines: {node: '>= 0.4'}
@@ -6254,7 +6747,6 @@ packages:
/json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -6322,7 +6814,6 @@ packages:
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
/local-pkg@0.5.0:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
@@ -6612,6 +7103,42 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true
+ /msw@2.3.0(typescript@5.3.3):
+ resolution: {integrity: sha512-cDr1q/QTMzaWhY8n9lpGhceY209k29UZtdTgJ3P8Bzne3TSMchX2EM/ldvn4ATLOktpCefCU2gcEgzHc31GTPw==}
+ engines: {node: '>=18'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ typescript: '>= 4.7.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@bundled-es-modules/cookie': 2.0.0
+ '@bundled-es-modules/statuses': 1.0.1
+ '@inquirer/confirm': 3.1.8
+ '@mswjs/cookies': 1.1.0
+ '@mswjs/interceptors': 0.29.1
+ '@open-draft/until': 2.1.0
+ '@types/cookie': 0.6.0
+ '@types/statuses': 2.0.5
+ chalk: 4.1.2
+ graphql: 16.8.1
+ headers-polyfill: 4.0.3
+ is-node-process: 1.2.0
+ outvariant: 1.4.2
+ path-to-regexp: 6.2.2
+ strict-event-emitter: 0.5.1
+ type-fest: 4.18.2
+ typescript: 5.3.3
+ yargs: 17.7.2
+ dev: true
+
+ /mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -6818,6 +7345,10 @@ packages:
wcwidth: 1.0.1
dev: true
+ /outvariant@1.4.2:
+ resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==}
+ dev: true
+
/p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
@@ -6881,7 +7412,6 @@ packages:
engines: {node: '>=6'}
dependencies:
callsites: 3.1.0
- dev: true
/parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
@@ -6891,7 +7421,6 @@ packages:
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
- dev: true
/parse5@7.1.2:
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
@@ -6931,7 +7460,6 @@ packages:
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
/path-scurry@1.10.2:
resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==}
@@ -6945,10 +7473,13 @@ packages:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
dev: true
+ /path-to-regexp@6.2.2:
+ resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
+ dev: true
+
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
- dev: true
/pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -7383,6 +7914,20 @@ packages:
scheduler: 0.23.0
dev: true
+ /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+ peerDependencies:
+ react: '>=16.6.0'
+ react-dom: '>=16.6.0'
+ dependencies:
+ '@babel/runtime': 7.23.9
+ dom-helpers: 5.2.1
+ loose-envify: 1.4.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
/react-use-measure@2.1.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==}
peerDependencies:
@@ -7562,6 +8107,11 @@ packages:
unist-util-visit: 5.0.0
dev: true
+ /require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/requireindex@1.2.0:
resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==}
engines: {node: '>=0.10.5'}
@@ -7578,7 +8128,6 @@ packages:
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
- dev: true
/resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
@@ -7592,7 +8141,6 @@ packages:
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: true
/restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
@@ -7846,6 +8394,11 @@ packages:
source-map: 0.6.1
dev: true
+ /source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
@@ -7920,6 +8473,10 @@ packages:
resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
dev: true
+ /strict-event-emitter@0.5.1:
+ resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
+ dev: true
+
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -8004,12 +8561,15 @@ packages:
acorn: 8.11.3
dev: true
+ /stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+ dev: false
+
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
- dev: true
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -8021,7 +8581,6 @@ packages:
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dev: true
/suspend-react@0.1.3(react@18.2.0):
resolution: {integrity: sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==}
@@ -8136,7 +8695,6 @@ packages:
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
- dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -8242,6 +8800,11 @@ packages:
engines: {node: '>=10'}
dev: true
+ /type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+ dev: true
+
/type-fest@0.6.0:
resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
engines: {node: '>=8'}
@@ -8257,6 +8820,11 @@ packages:
engines: {node: '>=12.20'}
dev: true
+ /type-fest@4.18.2:
+ resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==}
+ engines: {node: '>=16'}
+ dev: true
+
/type-is@1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
@@ -8690,6 +9258,15 @@ packages:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
dev: true
+ /wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
/wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -8747,6 +9324,11 @@ packages:
engines: {node: '>=0.4'}
dev: true
+ /y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+ dev: true
+
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: true
@@ -8755,6 +9337,29 @@ packages:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
+ /yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
diff --git a/xas-standards-client/public/mockServiceWorker.js b/xas-standards-client/public/mockServiceWorker.js
new file mode 100644
index 0000000..bdfdb11
--- /dev/null
+++ b/xas-standards-client/public/mockServiceWorker.js
@@ -0,0 +1,284 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker.
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ * - Please do NOT serve this file on production.
+ */
+
+const PACKAGE_VERSION = '2.3.0'
+const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423'
+const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
+const activeClientIds = new Set()
+
+self.addEventListener('install', function () {
+ self.skipWaiting()
+})
+
+self.addEventListener('activate', function (event) {
+ event.waitUntil(self.clients.claim())
+})
+
+self.addEventListener('message', async function (event) {
+ const clientId = event.source.id
+
+ if (!clientId || !self.clients) {
+ return
+ }
+
+ const client = await self.clients.get(clientId)
+
+ if (!client) {
+ return
+ }
+
+ const allClients = await self.clients.matchAll({
+ type: 'window',
+ })
+
+ switch (event.data) {
+ case 'KEEPALIVE_REQUEST': {
+ sendToClient(client, {
+ type: 'KEEPALIVE_RESPONSE',
+ })
+ break
+ }
+
+ case 'INTEGRITY_CHECK_REQUEST': {
+ sendToClient(client, {
+ type: 'INTEGRITY_CHECK_RESPONSE',
+ payload: {
+ packageVersion: PACKAGE_VERSION,
+ checksum: INTEGRITY_CHECKSUM,
+ },
+ })
+ break
+ }
+
+ case 'MOCK_ACTIVATE': {
+ activeClientIds.add(clientId)
+
+ sendToClient(client, {
+ type: 'MOCKING_ENABLED',
+ payload: true,
+ })
+ break
+ }
+
+ case 'MOCK_DEACTIVATE': {
+ activeClientIds.delete(clientId)
+ break
+ }
+
+ case 'CLIENT_CLOSED': {
+ activeClientIds.delete(clientId)
+
+ const remainingClients = allClients.filter((client) => {
+ return client.id !== clientId
+ })
+
+ // Unregister itself when there are no more clients
+ if (remainingClients.length === 0) {
+ self.registration.unregister()
+ }
+
+ break
+ }
+ }
+})
+
+self.addEventListener('fetch', function (event) {
+ const { request } = event
+
+ // Bypass navigation requests.
+ if (request.mode === 'navigate') {
+ return
+ }
+
+ // Opening the DevTools triggers the "only-if-cached" request
+ // that cannot be handled by the worker. Bypass such requests.
+ if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+ return
+ }
+
+ // Bypass all requests when there are no active clients.
+ // Prevents the self-unregistered worked from handling requests
+ // after it's been deleted (still remains active until the next reload).
+ if (activeClientIds.size === 0) {
+ return
+ }
+
+ // Generate unique request ID.
+ const requestId = crypto.randomUUID()
+ event.respondWith(handleRequest(event, requestId))
+})
+
+async function handleRequest(event, requestId) {
+ const client = await resolveMainClient(event)
+ const response = await getResponse(event, client, requestId)
+
+ // Send back the response clone for the "response:*" life-cycle events.
+ // Ensure MSW is active and ready to handle the message, otherwise
+ // this message will pend indefinitely.
+ if (client && activeClientIds.has(client.id)) {
+ ;(async function () {
+ const responseClone = response.clone()
+
+ sendToClient(
+ client,
+ {
+ type: 'RESPONSE',
+ payload: {
+ requestId,
+ isMockedResponse: IS_MOCKED_RESPONSE in response,
+ type: responseClone.type,
+ status: responseClone.status,
+ statusText: responseClone.statusText,
+ body: responseClone.body,
+ headers: Object.fromEntries(responseClone.headers.entries()),
+ },
+ },
+ [responseClone.body],
+ )
+ })()
+ }
+
+ return response
+}
+
+// Resolve the main client for the given event.
+// Client that issues a request doesn't necessarily equal the client
+// that registered the worker. It's with the latter the worker should
+// communicate with during the response resolving phase.
+async function resolveMainClient(event) {
+ const client = await self.clients.get(event.clientId)
+
+ if (client?.frameType === 'top-level') {
+ return client
+ }
+
+ const allClients = await self.clients.matchAll({
+ type: 'window',
+ })
+
+ return allClients
+ .filter((client) => {
+ // Get only those clients that are currently visible.
+ return client.visibilityState === 'visible'
+ })
+ .find((client) => {
+ // Find the client ID that's recorded in the
+ // set of clients that have registered the worker.
+ return activeClientIds.has(client.id)
+ })
+}
+
+async function getResponse(event, client, requestId) {
+ const { request } = event
+
+ // Clone the request because it might've been already used
+ // (i.e. its body has been read and sent to the client).
+ const requestClone = request.clone()
+
+ function passthrough() {
+ const headers = Object.fromEntries(requestClone.headers.entries())
+
+ // Remove internal MSW request header so the passthrough request
+ // complies with any potential CORS preflight checks on the server.
+ // Some servers forbid unknown request headers.
+ delete headers['x-msw-intention']
+
+ return fetch(requestClone, { headers })
+ }
+
+ // Bypass mocking when the client is not active.
+ if (!client) {
+ return passthrough()
+ }
+
+ // Bypass initial page load requests (i.e. static assets).
+ // The absence of the immediate/parent client in the map of the active clients
+ // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+ // and is not ready to handle requests.
+ if (!activeClientIds.has(client.id)) {
+ return passthrough()
+ }
+
+ // Notify the client that a request has been intercepted.
+ const requestBuffer = await request.arrayBuffer()
+ const clientMessage = await sendToClient(
+ client,
+ {
+ type: 'REQUEST',
+ payload: {
+ id: requestId,
+ url: request.url,
+ mode: request.mode,
+ method: request.method,
+ headers: Object.fromEntries(request.headers.entries()),
+ cache: request.cache,
+ credentials: request.credentials,
+ destination: request.destination,
+ integrity: request.integrity,
+ redirect: request.redirect,
+ referrer: request.referrer,
+ referrerPolicy: request.referrerPolicy,
+ body: requestBuffer,
+ keepalive: request.keepalive,
+ },
+ },
+ [requestBuffer],
+ )
+
+ switch (clientMessage.type) {
+ case 'MOCK_RESPONSE': {
+ return respondWithMock(clientMessage.data)
+ }
+
+ case 'PASSTHROUGH': {
+ return passthrough()
+ }
+ }
+
+ return passthrough()
+}
+
+function sendToClient(client, message, transferrables = []) {
+ return new Promise((resolve, reject) => {
+ const channel = new MessageChannel()
+
+ channel.port1.onmessage = (event) => {
+ if (event.data && event.data.error) {
+ return reject(event.data.error)
+ }
+
+ resolve(event.data)
+ }
+
+ client.postMessage(
+ message,
+ [channel.port2].concat(transferrables.filter(Boolean)),
+ )
+ })
+}
+
+async function respondWithMock(response) {
+ // Setting response status code to 0 is a no-op.
+ // However, when responding with a "Response.error()", the produced Response
+ // instance will have status code set to 0. Since it's not possible to create
+ // a Response instance with status code 0, handle that use-case separately.
+ if (response.status === 0) {
+ return Response.error()
+ }
+
+ const mockedResponse = new Response(response.body, response)
+
+ Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
+ value: true,
+ enumerable: true,
+ })
+
+ return mockedResponse
+}
diff --git a/xas-standards-client/src/App.css b/xas-standards-client/src/App.css
deleted file mode 100644
index 7e6daef..0000000
--- a/xas-standards-client/src/App.css
+++ /dev/null
@@ -1,51 +0,0 @@
-#root {
- width: 100vw;
- height: 100vh;
- margin: 0;
- text-align: center;
-}
-
-.mainwindow {
- display: flex;
- height: 100%;
- flex-direction: column;
-}
-
-.mainbody {
- display: flex;
- align-content: center;
- height: 100vh;
- width: 100vw;
-}
-
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
-
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/xas-standards-client/src/App.tsx b/xas-standards-client/src/App.tsx
index 27a6e71..f338def 100644
--- a/xas-standards-client/src/App.tsx
+++ b/xas-standards-client/src/App.tsx
@@ -1,10 +1,9 @@
-import "./App.css";
-
import Header from "./components/Header.tsx";
import { Routes, Route } from "react-router-dom";
-import StandardViewer from "./components/StandardViewer.tsx";
+import StandardViewerMui from "./components/StandardViewer.tsx";
import StandardSubmission from "./components/StandardSubmission.tsx";
import WelcomePage from "./components/WelcomePage.tsx";
+import BasicSelect from "./components/SelectTest.tsx";
import { MetadataProvider } from "./contexts/MetadataContext.tsx";
import { UserProvider } from "./contexts/UserContext.tsx";
@@ -12,29 +11,63 @@ import { UserProvider } from "./contexts/UserContext.tsx";
import LogInPage from "./components/LogInPage.tsx";
import RequireAuth from "./components/RequireAuth.tsx";
+import { CssBaseline } from "@mui/material";
+
+import { useState, useMemo } from "react";
+import { Stack } from "@mui/material";
+import { createTheme, ThemeProvider } from "@mui/material/styles";
+
+import ColorModeContext from "./contexts/ColorModeContext.tsx";
+
function App() {
+ const [mode, setMode] = useState<"light" | "dark">("light");
+ const colorMode = useMemo(
+ () => ({
+ toggleColorMode: () => {
+ setMode((prevMode) => (prevMode === "light" ? "dark" : "light"));
+ },
+ }),
+ []
+ );
+
+ const theme = useMemo(
+ () =>
+ createTheme({
+ palette: {
+ mode,
+ },
+ }),
+ [mode]
+ );
+
return (
-
-
-
-
-
- } />
- } />
-
-
-
- }
- />
- } />
- {/* } /> */}
-
-
-
-
+
+
+
+
+
+
+
+
+ } />
+ } />
+ } />
+
+
+
+ }
+ />
+ } />
+ {/* } /> */}
+
+
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/AdditionalInfoForm.tsx b/xas-standards-client/src/components/AdditionalInfoForm.tsx
index ff511a1..dae8311 100644
--- a/xas-standards-client/src/components/AdditionalInfoForm.tsx
+++ b/xas-standards-client/src/components/AdditionalInfoForm.tsx
@@ -1,20 +1,45 @@
-function AdditionalInformationForm(props) {
+
+import { Grid, TextField, Button} from "@mui/material";
+
+import VisuallyHiddenInput from "./VisuallyHiddenInput";
+
+function AdditionalInformationForm(props : {
+ comments : string;
+ setComments: React.Dispatch>;
+ handleFile2 : React.ChangeEventHandler;
+
+}) {
const comments = props.comments;
const setComments = props.setComments;
const handleFile2 = props.handleFile2;
return (
-
+
Additional Information
- Comments
- setComments(e.target.value)}
- >
-
-
+
+
+
+
+
+ Upload
+
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/CitationForm.tsx b/xas-standards-client/src/components/CitationForm.tsx
index b6eade3..3f15060 100644
--- a/xas-standards-client/src/components/CitationForm.tsx
+++ b/xas-standards-client/src/components/CitationForm.tsx
@@ -1,10 +1,17 @@
import axios from "axios";
import { useState } from "react";
+import { Grid, TextField, Button, Typography } from "@mui/material";
+
const crossref_url = "https://api.crossref.org/works/";
const mailto = "?mailto=dataanalysis@diamond.ac.uk";
-function CitationForm(props) {
+function CitationForm(props : {
+ citation : string;
+ setCitation: React.Dispatch>;
+ doi: string;
+ setDOI: React.Dispatch>;
+}) {
const citation = props.citation;
const setCitation = props.setCitation;
const doi = props.doi;
@@ -22,39 +29,45 @@ function CitationForm(props) {
if (matches) {
axios
.get(full_url)
- .then((res) => {
+ .then(() => {
setValidDOI(true);
})
- .catch((error) => {
+ .catch(() => {
setValidDOI(false);
});
}
};
return (
-
+
Reference
- Citation
- setCitation(e.target.value)}
- required
- >
- DOI
- setDOI(e.target.value)}
- required
- >
-
+
+ setCitation(e.target.value)}
+ />
+
+
+ setDOI(e.target.value)}
+ />
+
+
+
Validate DOI
-
- {isValidDOI ? "Valid DOI" : "Invalid DOI"}
-
+
+
+
+ {isValidDOI ? "Valid DOI" : "Invalid DOI"}
+
+
);
}
diff --git a/xas-standards-client/src/components/ElementForm.tsx b/xas-standards-client/src/components/ElementForm.tsx
index 83cef9c..80df9e8 100644
--- a/xas-standards-client/src/components/ElementForm.tsx
+++ b/xas-standards-client/src/components/ElementForm.tsx
@@ -1,4 +1,15 @@
-function ElementForm(props) {
+import { Select, Box, MenuItem, FormControl, InputLabel, Stack } from "@mui/material";
+
+import { Element, Edge } from "../models";
+
+function ElementForm(props: {
+ elementId: number;
+ setElementId: React.Dispatch>;
+ edgeId: number;
+ setEdgeId: React.Dispatch>;
+ elements: Element[];
+ edges: Edge[];
+}) {
const elementId = props.elementId;
const setElementID = props.setElementId;
const edgeId = props.edgeId;
@@ -7,35 +18,46 @@ function ElementForm(props) {
const edges = props.edges;
return (
-
+
XAS Measurement
- Element
- setElementID(e.target.value)}
- >
- {elements.map((x, y) => (
-
- {x.symbol}
-
- ))}
-
- Edge
- setEdgeID(e.target.value)}
- value={edgeId}
- >
- {edges.map((x, y) => (
-
- {x.name}
-
- ))}
-
-
+
+
+ Element
+ setElementID(e.target.value as number)}
+ >
+ {elements.map((x, y) => (
+
+ {x.symbol}
+
+ ))}
+
+
+
+
+ Edge
+ setEdgeID(e.target.value as number)}
+ value={edgeId}
+ >
+ {edges.map((x, y) => (
+
+ {x.name}
+
+ ))}
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/ElementSelector.css b/xas-standards-client/src/components/ElementSelector.css
deleted file mode 100644
index 9d1bfc2..0000000
--- a/xas-standards-client/src/components/ElementSelector.css
+++ /dev/null
@@ -1,22 +0,0 @@
-.ptpop {
- background-color: var(--diamond-100);
- border: 1px solid var(--diamond-800);
- z-index: 1000;
-}
-
-.elementselector {
- display: flex;
- justify-content: flex-start;
- gap: 10px;
- align-items: stretch;
-}
-
-.elementLabel {
- font-weight: bold;
- font-size: 28px;
-}
-
-#elementMain {
- padding: 5px;
- font-size: 20px;
-}
diff --git a/xas-standards-client/src/components/ElementSelector.tsx b/xas-standards-client/src/components/ElementSelector.tsx
index 2a83186..aa5c4ec 100644
--- a/xas-standards-client/src/components/ElementSelector.tsx
+++ b/xas-standards-client/src/components/ElementSelector.tsx
@@ -1,8 +1,13 @@
-import "./ElementSelector.css";
-import React, { useRef, useState } from "react";
-import { usePopper } from "react-popper";
import SimplePeriodicTable from "./PeriodicTable";
import { Element } from "../models";
+import { Popover } from "@mui/material";
+import { Stack, Button } from "@mui/material";
+import Select from "@mui/material/Select";
+import { MenuItem } from "@mui/material";
+
+import { useState } from "react";
+
+import { FormControl, InputLabel } from "@mui/material";
function ElementSelector(props: {
elements: Element[];
@@ -10,52 +15,65 @@ function ElementSelector(props: {
setSelectedElement: React.Dispatch;
}) {
const elements = props.elements;
- const [pop, setPop] = useState(false);
- const boxRef = useRef();
- const tooltipRef = useRef();
- const { styles, attributes } = usePopper(boxRef.current, tooltipRef.current);
+ const [anchorEl, setAnchorEl] = useState(null);
+ const handleClick = (event: React.MouseEvent) => {
+ setAnchorEl(event.currentTarget);
+ };
+
+ const handleClose = () => {
+ setAnchorEl(null);
+ };
+
+ const open = Boolean(anchorEl);
+ const id = open ? "simple-popover" : undefined;
return (
-
-
Element
-
{
- props.setSelectedElement(e.target.value);
+
+
+ Element
+ props.setSelectedElement(e.target.value as number)}
+ >
+ All Elements
+ {elements.map((x, y) => (
+
+ {x.symbol}
+
+ ))}
+
+
+
+ Periodic Table
+
+
-
- All
-
- {elements.map((x, y) => (
-
- {x.symbol}
-
- ))}
-
-
-
setPop(!pop)}>
- Periodic Table
-
-
- {
- props.setSelectedElement(el);
- setPop(false);
- }}
- elementSize={55}
- />
-
-
-
+ {
+ props.setSelectedElement(el);
+ setAnchorEl(null);
+ }}
+ elementSize={55}
+ />
+
+
);
}
diff --git a/xas-standards-client/src/components/Header.css b/xas-standards-client/src/components/Header.css
deleted file mode 100644
index 87b3756..0000000
--- a/xas-standards-client/src/components/Header.css
+++ /dev/null
@@ -1,35 +0,0 @@
-.header {
- display: flex;
- width: 100%;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- background-color: var(--diamond-700);
- color: var(--diamond-100);
-}
-
-.headerbuttons {
- display: flex;
- flex-direction: row;
-}
-
-.headerstart {
- align-self: stretch;
-}
-
-.headerend {
- align-items: center;
-}
-
-nav {
- display: flex;
- justify-content: space-between;
- flex-direction: row;
-}
-
-.headernavitem {
- border-style: solid;
- margin: auto;
- padding: 5px;
- color: var(--diamond-75);
-}
diff --git a/xas-standards-client/src/components/Header.tsx b/xas-standards-client/src/components/Header.tsx
index 27e2d14..b5c3e05 100644
--- a/xas-standards-client/src/components/Header.tsx
+++ b/xas-standards-client/src/components/Header.tsx
@@ -1,69 +1,87 @@
-import "./Header.css";
-import { NavLink } from "react-router-dom";
+import AppBar from "@mui/material/AppBar";
+import Toolbar from "@mui/material/Toolbar";
+import Typography from "@mui/material/Typography";
+
import { useContext } from "react";
import { UserContext } from "../contexts/UserContext";
+import ListItemButton from "@mui/material/ListItemButton";
+import ListItem from "@mui/material/ListItem";
+import List from "@mui/material/List";
+import ListItemText from "@mui/material/ListItemText";
+import Stack from "@mui/material/Stack";
+import { Switch } from "@mui/material";
+
+import { NavLink } from "react-router-dom";
+
+import ColorModeContext from "../contexts/ColorModeContext";
+
+function NavListItem(props: { to: string; label: string }) {
+ const to = props.to;
+ const label = props.label;
+ return (
+
+ theme.palette.text.secondary,
+ },
+ }}
+ >
+
+
+
+ );
+}
+
export default function Header() {
const user = useContext(UserContext);
console.log(user);
const loggedIn = user != null;
+ console.log(loggedIn);
+
+ const navitems = {
+ Home: "/",
+ View: "/view",
+ };
+
+ Object.keys(navitems).forEach((k) => console.log(k));
+
+ const colorMode = useContext(ColorModeContext);
return (
-
-
XAS Standards
-
-
- ({
- color: isActive ? "#CCCCCC" : "gray",
- })}
- >
- Home
-
- {loggedIn ? null : (
- ({
- color: isActive ? "#CCCCCC" : "gray",
- })}
- >
- Log In
-
- )}
- ({
- color: isActive ? "#CCCCCC" : "gray",
- })}
- >
- View
-
+
+
+
+ XAS Standards
+
+
+
+ {Object.entries(navitems).map(([key, value]) => (
+
+ theme.palette.text.secondary,
+ },
+ }}
+ >
+
+
+
+ ))}
{loggedIn ? (
- ({
- color: isActive ? "#CCCCCC" : "gray",
- })}
- >
- Submit
-
- ) : null}
- ;
- {/* ({ color: isActive ? "#CCCCCC" : "gray" })}
- >
- Review
-
- ({ color: isActive ? "#CCCCCC" : "gray" })}
- >
- Log in
- */}
-
-
-
+
+ ) : (
+
+ )}
+
+
+
);
}
diff --git a/xas-standards-client/src/components/InstrumentForm.tsx b/xas-standards-client/src/components/InstrumentForm.tsx
index e7b1689..9e40b7c 100644
--- a/xas-standards-client/src/components/InstrumentForm.tsx
+++ b/xas-standards-client/src/components/InstrumentForm.tsx
@@ -1,4 +1,23 @@
-function InstrumentForm(props) {
+import {
+ Grid,
+ FormControl,
+ InputLabel,
+ Select,
+ MenuItem,
+ Typography,
+ TextField,
+} from "@mui/material";
+
+import { Beamline } from "../models";
+
+function InstrumentForm(props : {
+ beamlines : Beamline[]
+ beamlineHeader: string;
+ beamlineId: number;
+ setBeamlineId: React.Dispatch>;
+ date: string;
+ setDate: React.Dispatch>;
+}) {
const beamlines = props.beamlines;
const beamlineHeader = props.beamlineHeader;
const setBeamlineId = props.setBeamlineId;
@@ -7,31 +26,44 @@ function InstrumentForm(props) {
const setDate = props.setDate;
return (
-
+
Instrument
- Beamline
- setBeamlineId(e.target.value)}
- >
- {beamlines.map((x, y) => (
-
- {x.name + " " + x.facility.name}
-
- ))}
-
- Beamline from Header:
- {beamlineHeader}
- Date Measured
-
+
+ Beamline
+ setBeamlineId(e.target.value as number)}
+ >
+ {beamlines.map((x, y) => (
+
+ {x.name + " " + x.facility.name}
+
+ ))}
+
+
+
+
+
+ setDate(e.target.value)}
- >
-
+ />
+
+
+
+ Beamline from Header: {beamlineHeader}
+
+
);
}
diff --git a/xas-standards-client/src/components/PeriodicTable.tsx b/xas-standards-client/src/components/PeriodicTable.tsx
index 42a2f38..b34d4b3 100644
--- a/xas-standards-client/src/components/PeriodicTable.tsx
+++ b/xas-standards-client/src/components/PeriodicTable.tsx
@@ -3,52 +3,63 @@ import { Context } from "@celadora/periodic-table";
import elements from "@celadora/periodic-table/elements";
import { useContext } from "react";
+import { useTheme } from "@mui/material";
+
+import { Box } from "@mui/material";
+
type Props = {
atomicNumber: number;
};
-function NewElement({ atomicNumber }: Props) {
- const { onClick } = useContext(Context);
+type OuterProps = {
+ backgroundColor: string;
+ textColor: string;
+};
- const element = elements[atomicNumber - 1];
- if (!element) {
- return
;
- }
+function OuterNewElement({ backgroundColor, textColor }: OuterProps) {
+ return function NewElement({ atomicNumber }: Props) {
+ const { onClick } = useContext(Context);
- return (
- {
- onClick?.apply(null, [e, element]);
- }}
- style={{
- backgroundColor: "var(--diamond-800)",
- textAlign: "center",
- position: "relative",
- display: "flex",
- flexDirection: "column",
- border: "1px solid black",
- borderRadius: 3,
- height: "100%",
- justifyContent: "center",
- alignItems: "center",
- }}
- >
+ const element = elements[atomicNumber - 1];
+ if (!element) {
+ return
;
+ }
+
+ return (
{
+ onClick?.apply(null, [e, element]);
+ }}
style={{
- color: "#fcd021",
- fontSize: "small",
- width: "100%",
- overflow: "hidden",
- textOverflow: "ellipsis",
+ backgroundColor: backgroundColor,
+ textAlign: "center",
+ position: "relative",
+ display: "flex",
+ flexDirection: "column",
+ border: "1px solid black",
+ borderRadius: 3,
+ height: "100%",
+ justifyContent: "center",
+ alignItems: "center",
}}
>
- {element.Symbol}
+
+ {element.Symbol}
+
+ {/*
{atomicNumber}
*/}
- {/*
{atomicNumber}
*/}
-
- );
+ );
+ };
}
function SimplePeriodicTable(props: {
@@ -59,13 +70,21 @@ function SimplePeriodicTable(props: {
props.onClickElement(Number(element.Number));
};
+ const theme = useTheme();
+
+ const bg = theme.palette.background.default;
+ const fg = theme.palette.primary.main;
+ const text = theme.palette.primary.contrastText;
+
return (
-
+
+
+
);
}
diff --git a/xas-standards-client/src/components/SampleForm.tsx b/xas-standards-client/src/components/SampleForm.tsx
index 935493e..ae523cc 100644
--- a/xas-standards-client/src/components/SampleForm.tsx
+++ b/xas-standards-client/src/components/SampleForm.tsx
@@ -1,4 +1,13 @@
-function SampleForm(props) {
+import { Grid, TextField } from "@mui/material";
+
+function SampleForm(props: {
+ sampleName: string;
+ setSampleName: React.Dispatch>;
+ sampleComp: string;
+ setSampleComp: React.Dispatch>;
+ samplePrep: string;
+ setSamplePrep: React.Dispatch>;
+}) {
const sampleName = props.sampleName;
const setSampleName = props.setSampleName;
const sampleComp = props.sampleComp;
@@ -7,32 +16,42 @@ function SampleForm(props) {
const setSamplePrep = props.setSamplePrep;
return (
-
+
Sample Information
- Sample Name
- setSampleName(e.target.value)}
- >
- Sample Composition
- setSampleComp(e.target.value)}
- >
- Sample Prep
- setSamplePrep(e.target.value)}
- >
- Sample Form
-
-
+
+ setSampleName(e.target.value)}
+ />
+
+
+ setSampleComp(e.target.value)}
+ />
+
+
+ setSamplePrep(e.target.value)}
+ />
+
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/SelectTest.tsx b/xas-standards-client/src/components/SelectTest.tsx
new file mode 100644
index 0000000..890b5f7
--- /dev/null
+++ b/xas-standards-client/src/components/SelectTest.tsx
@@ -0,0 +1,34 @@
+import * as React from "react";
+import Box from "@mui/material/Box";
+import InputLabel from "@mui/material/InputLabel";
+import MenuItem from "@mui/material/MenuItem";
+import FormControl from "@mui/material/FormControl";
+import Select, { SelectChangeEvent } from "@mui/material/Select";
+
+export default function BasicSelect() {
+ const [age, setAge] = React.useState("");
+
+ const handleChange = (event: SelectChangeEvent) => {
+ console.log(event.target.value);
+ setAge(event.target.value);
+ };
+
+ return (
+
+
+ Age
+
+ Ten
+ Twenty
+ Thirty
+
+
+
+ );
+}
diff --git a/xas-standards-client/src/components/StandardMetadataCard.tsx b/xas-standards-client/src/components/StandardMetadataCard.tsx
new file mode 100644
index 0000000..3067865
--- /dev/null
+++ b/xas-standards-client/src/components/StandardMetadataCard.tsx
@@ -0,0 +1,56 @@
+import { XASStandard } from "../models";
+import {
+ Card,
+ CardContent,
+ Typography,
+ CardActions,
+ Link,
+} from "@mui/material";
+
+const data_url = "/api/data";
+
+function StandardMetadataCard(props: { standard: XASStandard | undefined }) {
+ const standard = props.standard;
+
+ if (!standard) {
+ return ;
+ }
+
+ return (
+
+
+
+ XAS Standard
+
+
+ {standard.sample_name}
+
+
+ {standard.sample_comp}
+
+
+ {standard.sample_prep}
+
+
+ Measured at {standard.facility} on beamline {standard.beamline.name}
+
+ {standard.collection_date}
+
+ {standard.citation}
+
+ {standard.doi}
+
+
+
+
+ Download
+
+
+
+ );
+}
+
+export default StandardMetadataCard;
diff --git a/xas-standards-client/src/components/StandardMetadataTable.tsx b/xas-standards-client/src/components/StandardMetadataTable.tsx
index b82d210..c4d9bb4 100644
--- a/xas-standards-client/src/components/StandardMetadataTable.tsx
+++ b/xas-standards-client/src/components/StandardMetadataTable.tsx
@@ -1,7 +1,38 @@
import { XASStandard } from "../models";
+import Table from "@mui/material/Table";
+import TableBody from "@mui/material/TableBody";
+import TableContainer from "@mui/material/TableContainer";
+import TableHead from "@mui/material/TableHead";
+import TableRow from "@mui/material/TableRow";
+import Paper from "@mui/material/Paper";
+
+import { styled } from "@mui/material/styles";
+
+import TableCell, { tableCellClasses } from "@mui/material/TableCell";
+
const data_url = "/api/data";
+const StyledTableCell = styled(TableCell)(({ theme }) => ({
+ [`&.${tableCellClasses.head}`]: {
+ backgroundColor: theme.palette.common.black,
+ color: theme.palette.common.white,
+ },
+ [`&.${tableCellClasses.body}`]: {
+ fontSize: 14,
+ },
+}));
+
+const StyledTableRow = styled(TableRow)(({ theme }) => ({
+ "&:nth-of-type(odd)": {
+ backgroundColor: theme.palette.action.hover,
+ },
+ // hide last border
+ "&:last-child td, &:last-child th": {
+ border: 0,
+ },
+}));
+
function StandardMetadataTable(props: { standard: XASStandard | undefined }) {
const standard = props.standard;
@@ -10,53 +41,55 @@ function StandardMetadataTable(props: { standard: XASStandard | undefined }) {
}
return (
-
-
-
- Sample Name
- {standard.sample_name}
-
-
- Sample Prep
- {standard.sample_prep}
-
-
- Sample Comp
- {standard.sample_comp}
-
-
- DOI
- {standard.doi}
-
-
- Citation
- {standard.citation}
-
-
- Beamline
- {standard.beamline.name}
-
-
- Facility
- {standard.beamline.facility.name}
-
-
- Collection Date
- {standard.collection_date}
-
-
- Download
-
-
- link
-
-
-
-
-
+
+
+
+
+ Sample Name
+ {standard.sample_name}
+
+
+ Sample Prep
+ {standard.sample_prep}
+
+
+ Sample Comp
+ {standard.sample_comp}
+
+
+ DOI
+ {standard.doi}
+
+
+ Citation
+ {standard.citation}
+
+
+ Beamline
+ {standard.beamline.name}
+
+
+ Facility
+ {standard.beamline.facility.name}
+
+
+ Collection Date
+ {standard.collection_date}
+
+
+ Download
+
+
+ link
+
+
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/StandardSubmission.css b/xas-standards-client/src/components/StandardSubmission.css
deleted file mode 100644
index bc6c97e..0000000
--- a/xas-standards-client/src/components/StandardSubmission.css
+++ /dev/null
@@ -1,13 +0,0 @@
-.submissionpage {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- gap: 5px;
-}
-
-.twocolumn {
- display: grid;
- grid-template-columns: auto auto;
- gap: 5px;
-}
diff --git a/xas-standards-client/src/components/StandardSubmission.tsx b/xas-standards-client/src/components/StandardSubmission.tsx
index ace40d2..a516498 100644
--- a/xas-standards-client/src/components/StandardSubmission.tsx
+++ b/xas-standards-client/src/components/StandardSubmission.tsx
@@ -7,16 +7,16 @@ import { AxiosResponse, AxiosError } from "axios";
import XDIFile from "../xdifile";
-import "./StandardSubmission.css";
import ElementForm from "./ElementForm";
import SampleForm from "./SampleForm";
import InstrumentForm from "./InstrumentForm";
import CitationForm from "./CitationForm";
import AdditionalInformationForm from "./AdditionalInfoForm";
+import { useNavigate } from "react-router-dom";
-import { UserContext } from "../contexts/UserContext";
+import VisuallyHiddenInput from "./VisuallyHiddenInput";
-import { useNavigate } from "react-router-dom";
+import { Box, Typography, Button, Grid, Select, MenuItem,InputLabel, FormControl, FormControlLabel, Checkbox } from "@mui/material";
const standards_url = "/api/standards";
@@ -39,8 +39,6 @@ function StandardSubmission() {
const [citation, setCitation] = useState("");
const [comments, setComments] = useState("");
- const { user } = useContext(UserContext);
-
const navigate = useNavigate();
const handleSubmit = (event: React.FormEvent) => {
@@ -140,84 +138,117 @@ function StandardSubmission() {
};
return (
-
-
Upload A Standard XDI file
-
-
+
+
+
+ } label="By ticking I confirm info is correct and I grant permission for
+ diamond to publish data under selected licence" />
+
+
+
+
+
+ Submit
+
+
);
}
diff --git a/xas-standards-client/src/components/StandardSubmissionStepper.tsx b/xas-standards-client/src/components/StandardSubmissionStepper.tsx
new file mode 100644
index 0000000..aca6392
--- /dev/null
+++ b/xas-standards-client/src/components/StandardSubmissionStepper.tsx
@@ -0,0 +1,249 @@
+import { useState, useContext } from "react";
+
+import { MetadataContext } from "../contexts/MetadataContext";
+
+import axios from "axios";
+import { AxiosResponse, AxiosError } from "axios";
+
+import XDIFile from "../xdifile";
+
+import "./StandardSubmission.css";
+import ElementForm from "./ElementForm";
+import SampleForm from "./SampleForm";
+import InstrumentForm from "./InstrumentForm";
+import CitationForm from "./CitationForm";
+import AdditionalInformationForm from "./AdditionalInfoForm";
+
+import { UserContext } from "../contexts/UserContext";
+
+import { useNavigate } from "react-router-dom";
+
+import {
+ Box,
+ Typography,
+ Input,
+ Button,
+ Stepper,
+ Step,
+ StepLabel,
+ Container,
+} from "@mui/material";
+
+const standards_url = "/api/standards";
+
+const steps = [
+ "Upload standard XDI file",
+ "Add measurement metadata",
+ "Add sample metadata",
+ "Add citation and additional information",
+ "Confirm and submit",
+];
+
+function XDIFileUpload(props) {
+ return (
+ <>
+
+
+
+ Submitted file must be in xdi format and contain an energy column, and
+ either "mu" datasets or "i" datasets with corresponding i0. Inclusion
+ of Reference datasets (murefer or irefer with i0) is mandatory.
+
+
+ >
+ );
+}
+
+function StandardSubmissionStepper() {
+ const { elements, edges, beamlines, licences } = useContext(MetadataContext);
+
+ const [file, setFile] = useState();
+ const [file2, setFile2] = useState();
+
+ const [elementId, setElementId] = useState(1);
+ const [edgeId, setEdgeId] = useState(1);
+ const [sampleName, setSampleName] = useState("");
+ const [sampleComp, setSampleComp] = useState("");
+ const [samplePrep, setSamplePrep] = useState("");
+ const [beamlineId, setBeamlineId] = useState(1);
+ const [beamlineHeader, setBeamlineHeader] = useState("");
+ const [doi, setDOI] = useState("");
+ const [date, setDate] = useState("");
+ const [licence, setLicence] = useState(licences[0]);
+ const [citation, setCitation] = useState("");
+ const [comments, setComments] = useState("");
+
+ const { user } = useContext(UserContext);
+
+ const navigate = useNavigate();
+
+ const handleSubmit = (event: React.FormEvent) => {
+ event.preventDefault();
+
+ //build form data by hand to get correct
+ //serialisation of addition_files
+ //so it is not called additional_files[]
+ const form = new FormData();
+
+ if (!file) {
+ throw Error("File not defined");
+ }
+
+ form.append("xdi_file", file);
+ form.append("element_id", elementId.toString());
+ form.append("edge_id", edgeId.toString());
+ //BEAMLINE
+ form.append("beamline_id", beamlineId.toString());
+ form.append("sample_name", sampleName);
+ form.append("sample_comp", sampleComp);
+ form.append("sample_prep", samplePrep);
+ form.append("doi", doi);
+ form.append("citation", citation);
+ form.append("comments", comments);
+ form.append("date", date);
+ //LICENCE
+ form.append("licence", licence);
+
+ if (file2 != null) {
+ for (let i = 0; i < file2.length; i++) {
+ form.append("additional_files", file2[i]);
+ }
+ }
+
+ axios
+ .post(standards_url, form)
+ .then((response: AxiosResponse) => {
+ console.log(response);
+ window.alert("Thank you for your submission");
+ navigate("/view");
+ })
+ .catch((reason: AxiosError) => {
+ window.alert(reason.message);
+ });
+ };
+
+ const handleFile = (event: React.ChangeEvent) => {
+ if (event.target.files != null) {
+ const fileReader = new FileReader();
+
+ fileReader.onload = async (e: ProgressEvent) => {
+ if (e.target != null && typeof e.target.result === "string") {
+ let xdifile: XDIFile;
+ try {
+ xdifile = XDIFile.parseFile(e.target.result);
+ } catch (error) {
+ let message = "Unknown Error";
+ if (error instanceof Error) {
+ message = error.message;
+ }
+ window.alert("Invalid file: " + message);
+ const resetForm: HTMLFormElement = document.getElementById(
+ "submissionform"
+ ) as HTMLFormElement;
+ if (resetForm) {
+ resetForm.reset();
+ }
+
+ return;
+ }
+
+ const el = elements.find((e) => e.symbol === xdifile.element);
+ const ed = edges.find((e) => e.name === xdifile.edge);
+
+ setElementId(el?.z ?? elementId);
+ setEdgeId(ed?.id ?? edgeId);
+ setSampleName(xdifile.sample?.name ?? sampleName);
+ setSampleComp(xdifile.sample?.stoichiometry ?? sampleComp);
+ setSamplePrep(xdifile.sample?.prep ?? samplePrep);
+ setDate(xdifile.date ?? date);
+ setBeamlineHeader(xdifile.beamline ?? beamlineHeader);
+ setComments(xdifile.comments ?? comments);
+ }
+ };
+
+ fileReader.readAsText(event.target.files[0]);
+
+ setFile(event.target.files[0]);
+ }
+ };
+
+ const handleFile2 = (event: React.ChangeEvent) => {
+ if (event.target.files != null) {
+ setFile2(event.target.files);
+ }
+ };
+
+ const [activeStep, setActiveStep] = useState(0);
+ const [skipped, setSkipped] = useState(new Set());
+
+ const isStepOptional = (step: number) => {
+ return step === 1;
+ };
+
+ const isStepSkipped = (step: number) => {
+ return skipped.has(step);
+ };
+
+ const handleNext = () => {
+ let newSkipped = skipped;
+ if (isStepSkipped(activeStep)) {
+ newSkipped = new Set(newSkipped.values());
+ newSkipped.delete(activeStep);
+ }
+
+ setActiveStep((prevActiveStep) => prevActiveStep + 1);
+ setSkipped(newSkipped);
+ };
+
+ const handleBack = () => {
+ setActiveStep((prevActiveStep) => prevActiveStep - 1);
+ };
+
+ const handleSkip = () => {
+ if (!isStepOptional(activeStep)) {
+ // You probably want to guard against something like this,
+ // it should never occur unless someone's actively trying to break something.
+ throw new Error("You can't skip a step that isn't optional.");
+ }
+
+ setActiveStep((prevActiveStep) => prevActiveStep + 1);
+ setSkipped((prevSkipped) => {
+ const newSkipped = new Set(prevSkipped.values());
+ newSkipped.add(activeStep);
+ return newSkipped;
+ });
+ };
+
+ const handleReset = () => {
+ setActiveStep(0);
+ };
+
+ return (
+
+
+ {steps.map((label, index) => {
+ const stepProps: { completed?: boolean } = {};
+ const labelProps: {
+ optional?: React.ReactNode;
+ } = {};
+ if (isStepOptional(index)) {
+ labelProps.optional = (
+ Optional
+ );
+ }
+ if (isStepSkipped(index)) {
+ stepProps.completed = false;
+ }
+ return (
+
+ {label}
+
+ );
+ })}
+
+ {[ ][activeStep]}
+
+ );
+}
+
+export default StandardSubmissionStepper;
diff --git a/xas-standards-client/src/components/StandardViewer.tsx b/xas-standards-client/src/components/StandardViewer.tsx
index b4160c5..52f2523 100644
--- a/xas-standards-client/src/components/StandardViewer.tsx
+++ b/xas-standards-client/src/components/StandardViewer.tsx
@@ -7,6 +7,8 @@ import StandardsTable from "./StandardsTable.tsx";
import { XASStandard, XASData } from "../models.ts";
import { MetadataContext } from "../contexts/MetadataContext.tsx";
+import { Grid } from "@mui/material";
+
const data_url = "/api/data";
function StandardViewer() {
@@ -41,24 +43,28 @@ function StandardViewer() {
const onClick = getData(setXASData);
return (
-
-
-
-
+
+
+
+
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/StandardsChart.css b/xas-standards-client/src/components/StandardsChart.css
deleted file mode 100644
index 15187d6..0000000
--- a/xas-standards-client/src/components/StandardsChart.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.chartbody {
- flex: 2;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- align-items: stretch;
-}
-
-.chartarea {
- display: flex;
- flex: 1;
-}
diff --git a/xas-standards-client/src/components/StandardsChart.tsx b/xas-standards-client/src/components/StandardsChart.tsx
index 0ef00f9..75e4762 100644
--- a/xas-standards-client/src/components/StandardsChart.tsx
+++ b/xas-standards-client/src/components/StandardsChart.tsx
@@ -11,11 +11,13 @@ import {
} from "@h5web/lib";
import "@h5web/lib/dist/styles.css";
-import "./StandardsChart.css";
+import Paper from "@mui/material/Paper";
-import { useEffect, useState } from "react";
+import { useTheme } from "@mui/material";
+import { useState } from "react";
import ndarray from "ndarray";
+import { Box } from "@mui/material";
import { XASData } from "../models";
function CurveOption(props: { option: CurveType }) {
@@ -28,7 +30,16 @@ function CurveOption(props: { option: CurveType }) {
);
}
-function XASChart(props) {
+function XASChart(props: {
+ xasdata: XASData;
+ showTrans: boolean;
+ showFluor: boolean;
+ showRef: boolean;
+ setShowTrans: React.Dispatch>;
+ setShowFluor: React.Dispatch>;
+ setShowRef: React.Dispatch>;
+ contains: boolean[];
+}) {
const curveOptions: CurveType[] = Object.values(
CurveType
) as Array;
@@ -36,6 +47,8 @@ function XASChart(props) {
const [useGrid, setUseGrid] = useState(true);
const [curveOption, setCurveOption] = useState(curveOptions[0]);
+ const theme = useTheme();
+
let xdata: ndarray.NdArray = ndarray([0]);
let ydata: ndarray.NdArray = ndarray([0]);
@@ -57,7 +70,7 @@ function XASChart(props) {
}
if (props.showFluor) {
- const fdata = ndarray(props.xasdata.mufluro, [
+ const fdata = ndarray(props.xasdata.mufluor, [
props.xasdata.mutrans.length,
]);
if (!primaryFound) {
@@ -83,11 +96,46 @@ function XASChart(props) {
}
}
+ const toolbarstyle = {
+ "--h5w-toolbar--bgColor": theme.palette.action.hover,
+ "--h5w-tickLabels--color": theme.palette.text.primary,
+ "--h5w-ticks--color": theme.palette.text.primary,
+ "--h5w-grid--color": "black",
+ "--h5w-toolbar-label--color": theme.palette.primary.dark,
+ "--h5w-btn-hover--bgColor": theme.palette.action.hover,
+ "--h5w-btnPressed--bgColor": theme.palette.action.selected,
+ "--h5w-selector-menu--bgColor": theme.palette.background.default,
+ "--h5w-selector-option-selected--bgColor": theme.palette.action.selected,
+ } as React.CSSProperties;
+
+ const plotstyle = {
+ "--h5w-tickLabels--color": theme.palette.text.primary,
+ "--h5w-ticks--color": theme.palette.text.primary,
+ "--h5w-grid--color": theme.palette.text.secondary,
+ "--h5w-axisLabels--color": theme.palette.text.primary,
+ "--h5w-line--color": theme.palette.primary.dark,
+ "--h5w-line--colorAux": [
+ theme.palette.success.light,
+ theme.palette.secondary.dark,
+ ],
+ } as React.CSSProperties;
+
const domain = getDomain(ydata);
return (
-
-
+
theme.palette.background.default,
+ fontFamily: (theme) => theme.typography.fontFamily,
+ }}
+ >
+
setUseGrid(!useGrid)} value={useGrid} />
-
-
+
+
-
-
+
+
);
}
diff --git a/xas-standards-client/src/components/StandardsTable.css b/xas-standards-client/src/components/StandardsTable.css
deleted file mode 100644
index a7dd4e9..0000000
--- a/xas-standards-client/src/components/StandardsTable.css
+++ /dev/null
@@ -1,45 +0,0 @@
-.standards-list {
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- gap: 10px;
-}
-
-#standards {
- font-family: Arial, Helvetica, sans-serif;
- border-collapse: collapse;
- align-items: stretch;
-}
-
-#standards td,
-#standards th {
- border: 1px solid #ddd;
- padding: 4px;
-}
-
-#standards .activeclicked {
- background-color: var(--diamond-400);
-}
-
-#standards tr {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#standards tr:nth-child(even):not(.activeclicked) {
- background-color: #f2f2f2;
-}
-
-#standards tr:not(.activeclicked):hover {
- background-color: #ddd;
-}
-
-#standards th {
- padding-top: 12px;
- padding-bottom: 12px;
- text-align: left;
- background-color: var(--diamond-800);
- color: var(--diamond-500);
-}
diff --git a/xas-standards-client/src/components/StandardsTable.tsx b/xas-standards-client/src/components/StandardsTable.tsx
index 0dc5cfa..8589321 100644
--- a/xas-standards-client/src/components/StandardsTable.tsx
+++ b/xas-standards-client/src/components/StandardsTable.tsx
@@ -1,13 +1,47 @@
import { JSX, useState, useEffect } from "react";
import { XASStandard } from "../models";
-import StandardMetadataTable from "./StandardMetadataTable";
-import "./StandardsTable.css";
+import StandardMetadataCard from "./StandardMetadataCard";
import axios from "axios";
+import Stack from "@mui/material/Stack";
+
import { Element } from "../models";
import ElementSelector from "./ElementSelector";
+import Table from "@mui/material/Table";
+import TableBody from "@mui/material/TableBody";
+import TableContainer from "@mui/material/TableContainer";
+import TableHead from "@mui/material/TableHead";
+import TableRow from "@mui/material/TableRow";
+import Paper from "@mui/material/Paper";
+
+import TableCell, { tableCellClasses } from "@mui/material/TableCell";
+
+import { styled } from "@mui/material/styles";
+import { Button } from "@mui/material";
+
+const StyledTableCell = styled(TableCell)(({ theme }) => ({
+ [`&.${tableCellClasses.head}`]: {
+ backgroundColor: theme.palette.common.black,
+ color: theme.palette.common.white,
+ },
+ [`&.${tableCellClasses.body}`]: {
+ fontSize: 14,
+ },
+}));
+
+const StyledTableRow = styled(TableRow)(({ theme }) => ({
+ "&:nth-of-type(odd):not(:hover):not(.activeclicked)": {
+ backgroundColor: theme.palette.action.selected,
+ },
+
+ // hide last border
+ "&:last-child td, &:last-child th": {
+ border: 0,
+ },
+}));
+
const standards_url = "/api/standards";
const nResults = 7;
@@ -17,21 +51,39 @@ function StandardMetadata(props: {
xasstandard: XASStandard | null;
selected: XASStandard | undefined;
updatePlot: React.Dispatch;
+ selectedRow: number;
+ setSelectedRow: React.Dispatch>;
}): JSX.Element {
const className = props.xasstandard === props.selected ? "activeclicked" : "";
return (
- props.updatePlot(props.xasstandard!)}
+ {
+ props.setSelectedRow(props.key);
+ props.updatePlot(props.xasstandard!);
+ }}
key={props.key}
className={className}
+ hover={true}
+ selected={props.selectedRow === props.key}
+ sx={{ "&:last-child td, &:last-child th": { border: 0 } }}
>
- {props.xasstandard?.element.symbol ?? "\xa0"}
- {props.xasstandard?.edge.name ?? ""}
- {props.xasstandard?.sample_name ?? ""}
- {props.xasstandard?.sample_prep ?? ""}
- {props.xasstandard?.beamline.name ?? ""}
-
+
+ {props.xasstandard?.element.symbol ?? "\xa0"}
+
+
+ {props.xasstandard?.edge.name ?? ""}
+
+
+ {props.xasstandard?.sample_name ?? ""}
+
+
+ {props.xasstandard?.sample_prep ?? ""}
+
+
+ {props.xasstandard?.beamline.name ?? ""}
+
+
);
}
@@ -45,6 +97,7 @@ function StandardsTable(props: {
const [prevNext, setPrevNext] = useState(null);
const [current, setCurrent] = useState(null);
const [selectedElement, setSelectedElement] = useState(0);
+ const [selectedRow, setSelectedRow] = useState(-1);
const setStandards = props.setStandards;
const elements = props.elements;
@@ -101,47 +154,55 @@ function StandardsTable(props: {
}
return (
-
+
-
-
-
- Element
- Edge
- Name
- Prep
- Beamline
-
- {stds.map((standard, key) =>
- StandardMetadata({
- key: key,
- xasstandard: standard,
- selected: selectedStandard,
- updatePlot: clickStandard,
- })
- )}
-
-
-
-
+
+
+
+ Element
+ Edge
+ Name
+ Prep
+ Beamline
+
+
+
+ {stds.map((standard, key) =>
+ StandardMetadata({
+ key: key,
+ xasstandard: standard,
+ selected: selectedStandard,
+ updatePlot: clickStandard,
+ selectedRow: selectedRow,
+ setSelectedRow: setSelectedRow,
+ })
+ )}
+
+
+
+
+
<
-
-
+
>
-
-
-
-
+
+
+
+
);
}
diff --git a/xas-standards-client/src/components/VisuallyHiddenInput.tsx b/xas-standards-client/src/components/VisuallyHiddenInput.tsx
new file mode 100644
index 0000000..e32a05a
--- /dev/null
+++ b/xas-standards-client/src/components/VisuallyHiddenInput.tsx
@@ -0,0 +1,15 @@
+import { styled } from '@mui/material/styles';
+
+const VisuallyHiddenInput = styled('input')({
+ clip: 'rect(0 0 0 0)',
+ clipPath: 'inset(50%)',
+ height: 1,
+ overflow: 'hidden',
+ position: 'absolute',
+ bottom: 0,
+ left: 0,
+ whiteSpace: 'nowrap',
+ width: 1,
+ });
+
+ export default VisuallyHiddenInput
\ No newline at end of file
diff --git a/xas-standards-client/src/components/WelcomePage.tsx b/xas-standards-client/src/components/WelcomePage.tsx
index 74bd0c8..34aefe0 100644
--- a/xas-standards-client/src/components/WelcomePage.tsx
+++ b/xas-standards-client/src/components/WelcomePage.tsx
@@ -1,22 +1,25 @@
import { Link } from "react-router-dom";
+import { Container, Typography, Box } from "@mui/material";
function WelcomePage() {
return (
-
-
Welcome to the XAS Standards Database!
-
-
+
+
+ Welcome to the XAS Standards Database!
+
+
+
The XAS Standards Database is a collection of XAS data from careful
measurement "standard" materials - think pure chemicals purchased from
suppliers or well characterised mineral samples.
-
-
+
+
The database is open to search and download
data from. Submissions
can be made by anyone with a valid Diamond Light Source CAS login.
-
-
-
+
+
+
);
}
diff --git a/xas-standards-client/src/contexts/ColorModeContext.tsx b/xas-standards-client/src/contexts/ColorModeContext.tsx
new file mode 100644
index 0000000..285a819
--- /dev/null
+++ b/xas-standards-client/src/contexts/ColorModeContext.tsx
@@ -0,0 +1,5 @@
+import { createContext } from "react";
+
+const ColorModeContext = createContext({ toggleColorMode: () => {} });
+
+export default ColorModeContext;
diff --git a/xas-standards-client/src/hooks/useColorMode.ts b/xas-standards-client/src/hooks/useColorMode.ts
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/xas-standards-client/src/hooks/useColorMode.ts
@@ -0,0 +1,2 @@
+
+
diff --git a/xas-standards-client/src/main.tsx b/xas-standards-client/src/main.tsx
index 345a1ed..5997f9a 100644
--- a/xas-standards-client/src/main.tsx
+++ b/xas-standards-client/src/main.tsx
@@ -2,12 +2,25 @@ import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App.tsx";
-import "./index.css";
-
-ReactDOM.createRoot(document.getElementById("root")!).render(
-
-
-
-
-
-);
+
+async function enableMocking() {
+ if (process.env.NODE_ENV !== "development") {
+ return;
+ }
+
+ const { worker } = await import("./mocks/browser");
+
+ // `worker.start()` returns a Promise that resolves
+ // once the Service Worker is up and ready to intercept requests.
+ return worker.start();
+}
+
+enableMocking().then(() => {
+ ReactDOM.createRoot(document.getElementById("root")!).render(
+
+
+
+
+
+ );
+});
diff --git a/xas-standards-client/src/mocks/browser.ts b/xas-standards-client/src/mocks/browser.ts
new file mode 100644
index 0000000..bcd82e4
--- /dev/null
+++ b/xas-standards-client/src/mocks/browser.ts
@@ -0,0 +1,4 @@
+import { setupWorker } from "msw/browser";
+import { handlers } from "./handlers";
+
+export const worker = setupWorker(...handlers);
diff --git a/xas-standards-client/src/mocks/data/MnO_rt_01.xdi b/xas-standards-client/src/mocks/data/MnO_rt_01.xdi
new file mode 100644
index 0000000..dd2cd9a
--- /dev/null
+++ b/xas-standards-client/src/mocks/data/MnO_rt_01.xdi
@@ -0,0 +1,243 @@
+# XDI/1.0
+# Column.1: energy eV
+# Column.2: i0
+# Column.3: itrans
+# Column.4: irefer
+# Beamline.name: SSRL 4-3
+# Detector.I0: N2 15cm
+# Detector.I1: N2 30cm
+# Detector.I2: N2 15cm
+# Element.edge: K
+# Element.symbol: Mn
+# Mono.d_spacing: 1.92009
+# Mono.name: Si(220)
+# Mono.notes: unfocused, detuned 10%
+# Sample.formula: MnO
+# Sample.name: MnO
+# Sample.prep: powder, mixed with B(OH)3
+# Sample.reference: Mn filter
+# Sample.temperature: room temperature
+# Scan.start_time: 1995-06-20 02:43:21
+# ///
+# Note: mono d_spacing is nominal!
+# 217 E XMU I0
+#-------------
+# energy i0 itrans irefer
+ 6520.0030 31260.500000 39559.300308 21748.998701
+ 6521.0010 31244.500000 39558.301090 21716.000970
+ 6522.0000 31237.500000 39580.299067 21723.999044
+ 6523.0000 31219.500000 39528.301127 21592.000515
+ 6523.9990 31208.500000 39531.301203 21565.999852
+ 6524.9990 31201.500000 39519.300411 21505.000093
+ 6525.9990 31194.500000 39532.301500 21492.999925
+ 6527.0000 31185.500000 39519.299329 21431.998092
+ 6528.0000 31175.500000 39487.301134 21332.000793
+ 6529.0020 31166.500000 39494.301671 21298.999505
+ 6530.0030 31163.500000 39482.302684 21245.999911
+ 6531.0060 31152.500000 39481.302240 21203.000376
+ 6532.0080 31148.500000 39485.301549 21151.000091
+ 6533.0110 31127.500000 39419.301134 21016.000430
+ 6534.0140 31119.500000 39405.300288 20950.999045
+ 6535.0170 31124.500000 39425.301900 20912.000701
+ 6535.3180 31108.500000 39384.301339 20846.000217
+ 6535.6690 31105.500000 39339.301307 20730.999749
+ 6536.0210 31108.500000 39367.302806 20768.001105
+ 6536.3220 31099.500000 39332.299120 20693.998732
+ 6536.6740 31096.500000 39316.299273 20632.998697
+ 6537.0250 31094.500000 39307.300095 20599.999565
+ 6537.3270 31085.500000 39276.299568 20526.999585
+ 6537.6780 31092.500000 39268.302157 20454.999615
+ 6537.9790 31081.500000 39229.302758 20357.001095
+ 6538.3310 31073.500000 39174.301817 20201.001167
+ 6538.6830 31071.500000 39095.301765 19970.001056
+ 6538.9840 31060.500000 39007.300287 19725.999072
+ 6539.3360 31058.500000 38930.302149 19402.001346
+ 6539.6880 31057.500000 38876.300570 19078.999454
+ 6539.9900 31049.500000 38829.299569 18826.000227
+ 6540.3410 31032.500000 38746.302907 18579.000591
+ 6540.6430 31046.500000 38783.301513 18637.999501
+ 6540.9950 31034.500000 38721.302039 18609.001009
+ 6541.3470 31026.500000 38696.299605 18623.000039
+ 6541.6490 31028.500000 38628.302647 18514.000636
+ 6542.0010 31026.500000 38517.299500 18346.000201
+ 6542.3530 31007.500000 38307.301232 18042.000676
+ 6542.6550 31021.500000 38214.300816 17944.000274
+ 6543.0070 31019.500000 37954.301312 17624.999829
+ 6543.3090 31010.500000 37675.301865 17273.999585
+ 6543.6620 31011.500000 37367.300486 16916.999492
+ 6544.0140 31009.500000 37013.300061 16447.000319
+ 6544.3160 30995.500000 36717.299964 16038.999620
+ 6544.6680 30997.500000 36411.299638 15535.999138
+ 6545.0210 30987.500000 36166.301857 15102.000181
+ 6545.3230 30984.500000 36005.301066 14757.999569
+ 6545.6760 30979.500000 35813.302243 14275.000569
+ 6545.9780 30985.500000 35766.301568 14041.000449
+ 6546.3310 30980.500000 35620.302645 13563.001049
+ 6546.6830 30970.500000 35537.299624 13226.999252
+ 6546.9860 30973.500000 35453.302223 12930.002682
+ 6547.3380 30966.500000 35367.300374 12671.997972
+ 6547.6910 30948.500000 35208.299381 12352.998569
+ 6547.9940 30940.500000 35101.301351 12153.001853
+ 6548.3470 30931.500000 35004.302487 12025.001998
+ 6548.6490 30933.500000 34893.300186 11865.996099
+ 6549.0020 30922.500000 34762.300280 11749.004038
+ 6549.3550 30922.500000 34602.300707 11605.999634
+ 6549.6580 30914.500000 34462.301950 11529.004949
+ 6550.0110 30898.500000 34232.299871 11328.001156
+ 6550.3140 30903.500000 34106.300960 11252.002875
+ 6550.6670 30898.500000 33960.301145 11149.004697
+ 6551.0200 30890.500000 33855.301119 11052.996783
+ 6551.3230 30895.500000 33831.301108 11050.000158
+ 6551.6760 30888.500000 33750.301019 10928.000366
+ 6551.9790 30881.500000 33725.301065 10912.995525
+ 6552.3330 30869.500000 33643.301131 10803.000952
+ 6552.6870 30869.500000 33639.300844 10827.000402
+ 6552.9890 30866.500000 33562.301013 10736.997025
+ 6553.3430 30874.500000 33571.300846 10800.998251
+ 6553.6460 30870.500000 33485.300964 10701.999202
+ 6554.0000 30867.500000 33434.301047 10689.995996
+ 6554.3530 30858.500000 33389.300994 10661.003158
+ 6554.6560 30841.500000 33330.301082 10555.994796
+ 6555.0100 30839.500000 33369.301009 10530.000208
+ 6555.3130 30840.500000 33420.301052 10482.000324
+ 6555.6670 30833.500000 33541.300869 10473.995238
+ 6556.0210 30834.500000 33674.300937 10428.995576
+ 6556.3240 30825.500000 33806.301145 10425.995029
+ 6556.6780 30817.500000 33947.300961 10388.000588
+ 6556.9820 30816.500000 34071.302492 10360.996929
+ 6557.3360 30811.500000 34214.300396 10357.995120
+ 6557.6900 30815.500000 34322.300736 10298.994923
+ 6557.9930 30802.500000 34405.301144 10282.995982
+ 6558.3480 30798.500000 34468.300911 10242.001787
+ 6558.6510 30794.500000 34525.300483 10228.995695
+ 6559.0050 30791.500000 34577.299325 10202.995747
+ 6559.3090 30786.500000 34674.300127 10334.995753
+ 6559.6630 30776.500000 34604.302074 10152.002856
+ 6560.0180 30774.500000 34621.300879 10138.997476
+ 6560.3220 30779.500000 34652.299392 10152.003589
+ 6560.6760 30779.500000 34684.301698 10167.000027
+ 6560.9790 30775.500000 34704.300705 10177.003528
+ 6561.3340 30768.500000 34717.300610 10167.995988
+ 6561.6880 30764.500000 34730.300800 10162.002588
+ 6561.9930 30759.500000 34743.301458 10166.996018
+ 6562.3470 30766.500000 34770.302142 10171.997845
+ 6562.6520 30747.500000 34753.302037 10144.001952
+ 6563.0060 30753.500000 34779.300929 10165.995831
+ 6563.3110 30740.500000 34748.301858 10127.998360
+ 6563.6650 30742.500000 34728.301582 10089.002428
+ 6564.0200 30749.500000 34765.302471 10169.996175
+ 6564.3240 30741.500000 34738.300299 10150.001297
+ 6564.6790 30733.500000 34687.301358 10097.003179
+ 6564.9830 30736.500000 34683.302441 10114.999017
+ 6565.3390 30741.500000 34632.302101 10069.004394
+ 6565.6430 30738.500000 34626.301095 10122.002710
+ 6565.9980 30722.500000 34519.299906 10015.997705
+ 6566.3540 30720.500000 34479.301387 10016.995338
+ 6566.6580 30722.500000 34450.299293 10017.000356
+ 6567.0130 30718.500000 34377.300554 9958.002298
+ 6567.3170 30717.500000 34360.299883 9974.001173
+ 6567.6730 30709.500000 34288.302224 9881.005254
+ 6567.9770 30696.500000 34268.300445 9870.995816
+ 6568.3330 30693.500000 34249.299289 9822.003322
+ 6568.6880 30688.500000 34287.302344 9853.001126
+ 6568.9930 30683.500000 34285.302055 9805.002855
+ 6569.3490 30680.500000 34327.300606 9815.001432
+ 6569.6540 30674.500000 34352.300561 9793.001428
+ 6570.0090 30678.500000 34415.301741 9801.998403
+ 6570.3140 30676.500000 34462.300559 9814.000505
+ 6570.6700 30667.500000 34471.302349 9740.000431
+ 6571.0250 30663.500000 34526.302407 9753.999658
+ 6571.3300 30660.500000 34563.301926 9739.000372
+ 6571.6870 30658.500000 34615.302344 9756.003592
+ 6571.9910 30657.500000 34626.300752 9710.002411
+ 6572.3470 30649.500000 34663.302033 9729.004213
+ 6572.6520 30642.500000 34652.301134 9674.998987
+ 6573.0080 30643.500000 34690.302052 9699.003692
+ 6573.3130 30635.500000 34674.299608 9642.995214
+ 6573.6690 30628.500000 34676.299707 9636.996060
+ 6573.9750 30631.500000 34726.302302 9694.002461
+ 6574.3310 30621.500000 34680.302574 9613.005071
+ 6574.6870 30616.500000 34688.300868 9625.997193
+ 6574.9930 30616.500000 34699.302272 9630.003404
+ 6575.3490 30603.500000 34667.300068 9573.002351
+ 6575.6540 30607.500000 34718.301788 9644.000161
+ 6576.0110 30608.500000 34694.301382 9585.000687
+ 6576.3160 30600.500000 34684.300475 9571.999796
+ 6576.6730 30597.500000 34665.300681 9523.002677
+ 6576.9780 30585.500000 34656.300456 9519.997064
+ 6577.3350 30591.500000 34657.300379 9489.997912
+ 6577.6910 30587.500000 34668.300139 9493.000416
+ 6577.9970 30578.500000 34653.299599 9458.000032
+ 6578.3540 30580.500000 34683.301659 9484.001733
+ 6578.6600 30578.500000 34684.300438 9470.996679
+ 6579.0160 30561.500000 34654.301067 9426.999382
+ 6579.3220 30560.500000 34670.300442 9438.003135
+ 6579.6790 30563.500000 34674.300277 9420.995727
+ 6579.9850 30553.500000 34669.302642 9425.998274
+ 6580.7500 30542.500000 34638.301733 9380.997084
+ 6581.5150 30542.500000 34677.302153 9448.002621
+ 6582.2800 30536.500000 34619.302057 9342.999903
+ 6583.0460 30520.500000 34590.299759 9323.995970
+ 6583.8120 30523.500000 34588.300144 9324.995461
+ 6584.5260 30523.500000 34618.301203 9390.997135
+ 6585.2920 30516.500000 34579.299440 9315.998779
+ 6586.0590 30497.500000 34530.300469 9227.998826
+ 6586.8250 30494.500000 34539.301151 9238.003949
+ 6587.5920 30473.500000 34460.300575 9112.999890
+ 6588.3590 30463.500000 34455.300478 9140.004206
+ 6589.0750 30470.500000 34414.300921 9092.002695
+ 6589.8420 30464.500000 34342.301400 9033.996694
+ 6590.6100 30449.500000 34239.302278 8959.999522
+ 6591.3770 30434.500000 34156.299458 8920.000774
+ 6592.1460 30427.500000 34081.301976 8867.003408
+ 6592.8630 30421.500000 34049.300712 8878.001677
+ 6593.6310 30411.500000 33996.301060 8819.998733
+ 6594.3990 30398.500000 33925.300555 8714.001197
+ 6595.1680 30390.500000 33915.300664 8694.001104
+ 6595.8860 30369.500000 33867.302310 8596.997508
+ 6596.6550 30390.500000 33948.299337 8652.997213
+ 6597.4240 30387.500000 33972.301799 8636.000233
+ 6598.1940 30365.500000 33936.301954 8553.001684
+ 6598.9640 30353.500000 33920.302608 8478.001350
+ 6599.6830 30339.500000 33926.302344 8444.003917
+ 6600.4530 30322.500000 33930.299685 8388.002501
+ 6601.2230 30308.500000 33947.302685 8334.999042
+ 6601.9940 30313.500000 34060.302543 8413.003611
+ 6602.7130 30301.500000 34067.301237 8325.998897
+ 6603.4840 30293.500000 34121.301547 8313.002606
+ 6604.2550 30277.500000 34138.301408 8253.001583
+ 6604.9760 30267.500000 34181.300639 8241.997500
+ 6605.7470 30266.500000 34210.300753 8189.000000
+ 6606.5190 30259.500000 34243.302042 8165.002109
+ 6607.2910 30245.500000 34259.301795 8128.001806
+ 6608.0120 30233.500000 34285.299665 8113.997698
+ 6608.7850 30220.500000 34280.301950 8054.000319
+ 6609.5570 30229.500000 34332.302292 8061.000407
+ 6610.2780 30218.500000 34363.299491 8066.003413
+ 6611.0510 30200.500000 34330.301181 7960.003030
+ 6611.8250 30195.500000 34382.300329 7970.999611
+ 6612.5980 30184.500000 34400.302144 7917.997616
+ 6613.3200 30179.500000 34452.300940 7940.996617
+ 6614.0940 30176.500000 34478.301211 7904.001702
+ 6614.8680 30157.500000 34483.299986 7873.999653
+ 6615.5910 30151.500000 34510.301483 7870.998064
+ 6616.3650 30132.500000 34481.302599 7788.997987
+ 6617.1410 30129.500000 34527.301477 7825.998704
+ 6617.8630 30118.500000 34493.299952 7744.997111
+ 6618.6390 30121.500000 34535.300454 7790.998295
+ 6619.4140 30105.500000 34482.301049 7702.001108
+ 6620.1380 30094.500000 34465.300345 7682.999500
+ 6620.9140 30086.500000 34433.301610 7640.997566
+ 6621.6890 30079.500000 34421.300612 7629.997950
+ 6622.4140 30069.500000 34410.301061 7628.002145
+ 6623.1900 30060.500000 34363.299422 7562.003116
+ 6623.9150 30048.500000 34350.299680 7555.001112
+ 6624.6920 30038.500000 34327.301245 7512.001880
+ 6625.4690 30013.500000 34287.301962 7454.002083
+ 6626.1940 30001.500000 34292.301414 7437.999144
+ 6626.9720 29995.500000 34320.301873 7450.000283
+ 6627.7490 29982.500000 34320.302138 7425.002921
+ 6628.4750 29985.500000 34362.299942 7435.999715
+ 6629.2530 29963.500000 34338.300857 7366.998575
+ 6629.9790 29945.500000 34319.299475 7307.000512
+
diff --git a/xas-standards-client/src/mocks/data/README.txt b/xas-standards-client/src/mocks/data/README.txt
new file mode 100644
index 0000000..bbdf13f
--- /dev/null
+++ b/xas-standards-client/src/mocks/data/README.txt
@@ -0,0 +1,2 @@
+Example xdi files from:
+https://github.com/XraySpectroscopy/XASDataLibrary
\ No newline at end of file
diff --git a/xas-standards-client/src/mocks/data/as2o3_roomt_scan1.xdi b/xas-standards-client/src/mocks/data/as2o3_roomt_scan1.xdi
new file mode 100644
index 0000000..a3616f0
--- /dev/null
+++ b/xas-standards-client/src/mocks/data/as2o3_roomt_scan1.xdi
@@ -0,0 +1,347 @@
+# XDI/1.0
+# Column.1: energy eV
+# Column.2: i0
+# Column.3: itrans
+# Column.4: irefer
+# Beamline.name: SSRL 4-1
+# Detector.I0: N2 15cm
+# Detector.I1: N2 30cm
+# Detector.I2: Ar 15cm
+# Element.edge: K
+# Element.symbol: As
+# Mono.d_spacing: 3.13550
+# Mono.name: Si(111)
+# Mono.notes: unfocused, detuned 40%,counter clockwise at E=12000eV
+# Sample.formula: As2O3
+# Sample.name: As2O3 arsenious oxide
+# Sample.prep: powder, mixed 1:60 with B(OH)3 by wt
+# Sample.reference: GaAs powder
+# Sample.temperature: room temperature
+# Scan.start_time: 1997-01-19 14:12:16
+# ///
+# Note: mono d_spacing is nominal!
+# exafs to K15, GaAs in IR
+# 320 E XMU XMUR I0
+#-------------
+# energy i0 itrans irefer
+ 11649.9940 179062.340000 281173.246057 325986.938093
+ 11660.0050 177192.340000 278918.244732 324266.921768
+ 11669.9970 178040.340000 280974.257222 327516.931780
+ 11680.0060 177121.340000 280201.233029 327523.934361
+ 11689.9960 176917.340000 280586.236957 328854.932161
+ 11700.0050 176478.340000 280615.231838 329726.904360
+ 11709.9940 175015.340000 278964.247159 328693.934408
+ 11720.0020 175232.340000 280013.257569 330809.953048
+ 11730.0030 174715.340000 279882.233753 331530.934149
+ 11739.9950 174755.340000 280635.237412 333267.922510
+ 11749.9960 174308.340000 280622.233450 334135.934573
+ 11760.0000 174268.340000 281225.234682 335747.904851
+ 11769.9970 173368.340000 280415.256669 335698.945927
+ 11779.9990 172148.340000 279131.234836 334995.918103
+ 11789.9960 172098.340000 279693.247399 336515.919697
+ 11799.9980 171784.340000 279770.256228 337487.932087
+ 11810.0030 171212.340000 279410.252415 337853.929405
+ 11820.0020 170442.340000 278631.231797 337675.899318
+ 11829.9940 169899.340000 278125.247841 337681.939153
+ 11840.0030 169217.340000 277029.230029 336768.928879
+ 11850.0040 168960.340000 275741.246371 334877.941877
+ 11850.7620 168767.340000 275281.243866 334185.918401
+ 11851.5200 167889.340000 273618.245938 332085.933708
+ 11852.2780 168602.340000 274629.255010 333151.927434
+ 11853.0360 169457.340000 275801.254443 334395.931218
+ 11853.7820 168118.340000 273307.254368 331186.955507
+ 11854.5410 168709.340000 273969.244181 331751.917308
+ 11855.2990 168321.340000 273010.236425 330303.916769
+ 11856.0580 167594.340000 271362.242526 327967.925861
+ 11856.8150 168081.340000 271692.232878 327961.928139
+ 11857.5750 167596.340000 270384.237743 325971.922416
+ 11858.3340 167718.340000 269853.231673 324736.902855
+ 11859.0930 168226.340000 269832.240542 323923.939811
+ 11859.8530 167494.340000 267732.235463 320545.925584
+ 11860.6110 167509.340000 266501.243838 317822.932259
+ 11861.3570 167440.340000 264836.249537 314167.947860
+ 11862.1180 167890.340000 263841.231970 311021.931250
+ 11862.8770 167833.340000 261343.246295 305039.923027
+ 11863.6370 167567.340000 257390.246053 295330.922947
+ 11864.3960 167877.340000 253537.234446 284049.918957
+ 11865.1550 167960.340000 247354.240217 267022.928730
+ 11865.9030 167363.340000 236802.234135 242435.936879
+ 11866.6630 167393.340000 223930.239449 216630.943033
+ 11867.4230 167780.340000 207510.247476 188946.951143
+ 11868.1830 167879.340000 184729.245843 156328.946259
+ 11868.9430 167247.340000 160891.245757 126589.952769
+ 11869.7030 168294.340000 144548.251208 108525.956004
+ 11870.4510 168078.340000 129637.251916 95150.950220
+ 11871.2130 167908.340000 121216.249360 89094.948244
+ 11871.9730 167064.340000 119934.241812 88784.945918
+ 11872.7210 167263.340000 126090.241964 94140.943353
+ 11873.4820 167743.340000 137506.250345 103863.950360
+ 11874.2430 167382.340000 147281.240066 112716.944099
+ 11875.0040 167159.340000 155779.246613 121052.945893
+ 11875.7540 166906.340000 163168.246693 128924.950600
+ 11876.5150 166781.340000 168772.246667 135280.953534
+ 11877.2750 167107.340000 173314.246488 140852.944656
+ 11878.0250 167456.340000 176204.245955 145159.946033
+ 11878.7860 166608.340000 175383.246341 146184.943811
+ 11879.5480 166097.340000 173432.246328 145727.947771
+ 11880.3090 166590.340000 171610.246165 145178.946433
+ 11881.0600 166485.340000 169165.246560 143848.955293
+ 11881.8200 166363.340000 167580.245912 142984.955240
+ 11882.5820 167033.340000 167690.245909 143417.951225
+ 11883.3330 166587.340000 167970.245979 143779.942904
+ 11884.0950 166046.340000 168809.246082 144468.942842
+ 11884.8450 166934.340000 171371.245826 146619.945114
+ 11885.6070 167160.340000 173320.245193 148301.951999
+ 11886.3570 165962.340000 173480.245679 148496.952352
+ 11887.1200 165579.340000 174428.245362 149389.943181
+ 11887.8820 166466.340000 176854.246426 151542.956622
+ 11888.6340 167113.340000 179044.245140 153430.954014
+ 11889.3960 166536.340000 179885.245730 154091.953345
+ 11890.1460 166337.340000 181415.245005 155298.950923
+ 11890.9100 166634.340000 183452.245467 156950.942904
+ 11891.6730 165859.340000 184032.243700 157390.940910
+ 11892.4230 166471.340000 186207.242879 159258.945008
+ 11893.1880 166840.340000 188131.240530 161058.943585
+ 11893.9380 166748.340000 189124.254398 162220.955654
+ 11894.7010 165479.340000 188617.254481 162191.956946
+ 11895.4520 166283.340000 190121.245107 164013.952559
+ 11896.2160 166277.340000 190388.251690 164753.961257
+ 11896.9680 165623.340000 189812.240193 164637.942336
+ 11897.7310 166182.340000 190590.246873 165605.957949
+ 11898.4840 166049.340000 190629.236830 165698.947589
+ 11899.2480 166574.340000 191446.251128 166331.950972
+ 11900.0000 165944.340000 191005.253122 165754.956307
+ 11901.2820 165590.340000 191139.228384 165525.954437
+ 11902.5780 166518.330000 192880.204372 166826.957646
+ 11903.8960 166048.300000 193005.137919 166950.942185
+ 11905.2290 166510.250000 194177.068903 168145.936015
+ 11906.5740 165301.190000 193137.950659 167482.924676
+ 11907.9560 166698.120000 194938.809513 169209.909450
+ 11909.3520 165960.050000 193795.658403 168274.890764
+ 11910.7590 165791.940000 192759.467397 167293.880402
+ 11912.1910 166313.840000 192250.268658 166660.866113
+ 11913.6380 166307.720000 191017.033987 165295.834893
+ 11915.1070 165518.580000 189023.785127 163390.812595
+ 11916.5920 166188.440000 189136.509200 163550.796697
+ 11918.1010 166874.280000 189352.207870 164281.761986
+ 11919.6330 166581.110000 188571.875755 164363.713581
+ 11921.1800 166747.920000 188216.521637 164776.697853
+ 11922.7390 166151.730000 186656.141197 164000.652590
+ 11924.3230 167557.520000 187275.743571 164843.624679
+ 11925.9330 167263.300000 185941.315808 163840.585839
+ 11927.5550 167835.060000 185743.856945 163725.527247
+ 11929.1890 167540.810000 184854.388021 162879.477159
+ 11930.8510 168632.560000 185659.887260 163337.438653
+ 11932.5360 168167.280000 184777.374304 162138.388131
+ 11934.2330 169026.000000 185481.828790 162177.322386
+ 11935.9580 169827.700000 186251.247211 162207.284888
+ 11937.6950 169606.390000 185986.654202 161391.214220
+ 11939.4430 170929.060000 187333.043979 162234.158852
+ 11941.2190 170975.730000 187162.386419 162069.104717
+ 11943.0200 171611.390000 187608.733653 162708.033660
+ 11944.8330 171413.020000 187333.034483 162754.977761
+ 11946.6590 171935.640000 188093.327165 163678.912929
+ 11948.5110 172620.270000 189347.583260 165035.828197
+ 11950.3870 172055.860000 189456.813515 165391.766418
+ 11952.2780 172434.450000 190663.036702 166658.692607
+ 11954.1930 173243.030000 192150.209322 168233.602793
+ 11956.1100 173733.590000 193209.372777 169507.527174
+ 11958.0630 174509.140000 194548.505680 171110.426740
+ 11960.0310 174692.670000 195282.623123 172010.351582
+ 11962.0120 175792.200000 197014.713874 173532.259473
+ 11964.0190 175878.720000 197567.790127 173871.195023
+ 11966.0500 176348.220000 198503.823730 174559.081988
+ 11968.0950 176540.700000 199131.845330 175190.007961
+ 11970.1520 177847.170000 201012.819771 177354.878037
+ 11972.2360 178878.640000 202562.805095 179617.804847
+ 11974.3340 179294.080000 203385.737922 181419.705663
+ 11976.4560 180489.520000 205090.657922 183850.589681
+ 11978.5930 180659.940000 205743.568366 184989.483887
+ 11980.7540 182150.360000 207960.425555 187219.382906
+ 11982.9290 183024.750000 209553.272196 188725.275647
+ 11985.1300 183647.140000 210778.095303 189789.165172
+ 11987.3450 183604.520000 211142.887583 189844.040691
+ 11989.5850 184140.870000 212042.656113 190136.904467
+ 11991.8370 184918.220000 213166.419594 190437.788807
+ 11994.1040 185566.550000 214079.143869 190445.693001
+ 11996.3960 186053.870000 214736.835063 190172.557133
+ 11998.7150 188101.190000 217037.524534 191444.445118
+ 12001.0470 187631.480000 216320.158666 190401.276441
+ 12003.3930 189701.770000 218432.798181 192243.175060
+ 12005.7650 190032.030000 218477.413154 192554.039094
+ 12008.1490 191327.300000 219610.994421 193956.920292
+ 12010.5610 192090.550000 220099.534908 194771.772453
+ 12012.9850 192859.780000 220675.058579 195724.624906
+ 12015.4370 194472.000000 222320.579899 197695.485305
+ 12017.9000 194501.200000 222170.039572 198074.323744
+ 12020.3790 196205.410000 223944.515084 200141.180628
+ 12022.8830 196082.580000 223690.946716 200441.031655
+ 12025.4010 197523.750000 225277.354621 202451.880323
+ 12027.9450 199533.910000 227571.732600 205049.742659
+ 12030.5020 199113.050000 227076.088711 205070.567964
+ 12033.0870 200472.190000 228634.448620 206907.415250
+ 12035.6860 202512.310000 231124.742322 209537.243079
+ 12038.3100 203778.410000 232829.046435 211463.109051
+ 12040.9480 204407.500000 233863.298549 212809.923723
+ 12043.6010 205594.590000 235658.522822 214744.742800
+ 12046.2780 206720.660000 237346.764542 216614.590396
+ 12048.9710 208520.720000 239901.929513 219295.398559
+ 12051.6880 209379.750000 241346.120760 220905.243889
+ 12054.4210 209225.780000 241651.246353 221145.044447
+ 12057.1690 210831.800000 243930.380602 222871.880440
+ 12059.9400 212831.810000 246590.466295 224902.685415
+ 12062.7290 213583.800000 247738.526543 225824.496067
+ 12065.5430 214720.780000 249281.576385 227417.311506
+ 12068.3690 216363.750000 251384.595414 229646.125448
+ 12071.2110 217071.700000 252344.600001 230695.943991
+ 12074.0800 218492.640000 254251.549615 232218.737089
+ 12076.9770 219858.580000 256122.519420 233499.550365
+ 12079.8720 220552.500000 257308.450513 234093.355701
+ 12082.7960 221833.390000 259183.344378 235397.142211
+ 12085.7460 223846.280000 261894.215941 237549.935540
+ 12088.7120 224986.170000 263574.071212 238940.740538
+ 12091.6910 226458.030000 265595.886456 240898.542588
+ 12094.6960 226221.890000 265550.686421 241421.312482
+ 12097.7040 228665.720000 268673.476182 244969.114445
+ 12100.7500 230165.550000 270730.221550 247565.893420
+ 12103.8120 231451.370000 272556.923718 249998.659704
+ 12106.8890 232370.170000 273997.658425 251929.455658
+ 12109.9780 234258.970000 276649.348065 254952.237274
+ 12113.0960 235118.730000 278081.996211 256984.995674
+ 12116.2390 236446.500000 280065.629478 259623.786126
+ 12119.3870 238217.250000 282470.232241 262702.575981
+ 12122.5600 239990.000000 284858.810513 265694.309575
+ 12125.7460 241094.720000 286407.374962 267877.095200
+ 12128.9620 242479.440000 288204.910887 270209.848362
+ 12132.1920 243087.140000 289079.396826 271396.616336
+ 12135.4490 245147.830000 291608.898660 273934.368407
+ 12138.7210 247156.500000 293993.376809 276129.127405
+ 12142.0080 247777.160000 294677.811133 276452.872623
+ 12145.3090 249609.810000 296776.205701 278139.611872
+ 12148.6380 251610.450000 299048.616794 280042.368598
+ 12151.9800 253771.080000 301589.976389 282257.131917
+ 12155.3510 255518.690000 303670.325587 284113.886805
+ 12158.7370 256744.300000 305256.634677 285577.634829
+ 12162.1370 256837.870000 305705.930911 286101.336014
+ 12165.5530 258489.450000 308041.181664 288508.088150
+ 12168.9950 262168.000000 312929.435564 293366.842959
+ 12172.4530 262820.560000 314280.663019 294980.569465
+ 12175.9390 264359.090000 316730.852762 297713.322462
+ 12179.4410 266504.620000 319962.012974 301048.014696
+ 12182.9560 266539.120000 320674.158355 301879.751602
+ 12186.4990 269742.620000 325131.281908 306235.469774
+ 12190.0450 272348.120000 328860.352748 310041.165601
+ 12193.6320 274131.590000 331539.463098 313103.900701
+ 12197.2210 275376.060000 333473.484154 315485.611140
+ 12200.8380 277366.500000 336249.531077 318587.345100
+ 12204.4710 277884.940000 337201.523135 319959.054566
+ 12208.1160 281031.340000 341315.508154 324372.787590
+ 12211.7930 282983.780000 343913.468789 327534.470022
+ 12215.4830 283176.160000 344342.388398 328736.200677
+ 12219.1890 284970.560000 346732.287593 331907.911914
+ 12222.9230 287182.910000 349692.196798 335601.602574
+ 12226.6720 288764.280000 351862.021775 338494.273578
+ 12230.4380 290801.620000 354670.828793 341835.985163
+ 12234.2180 292357.970000 356957.660281 344610.693793
+ 12238.0250 295236.280000 360970.444902 349008.380533
+ 12241.8500 296852.590000 363478.222877 351911.067885
+ 12245.6890 297189.870000 364490.915323 353222.728707
+ 12249.5580 299138.160000 367553.666854 356201.449520
+ 12253.4430 301817.440000 371507.343558 359860.123919
+ 12257.3410 303000.690000 373586.018797 361745.831659
+ 12261.2570 303797.940000 375230.614654 363344.459790
+ 12265.2010 306697.190000 379454.239687 367541.147742
+ 12269.1580 308524.410000 382222.830713 370533.798654
+ 12273.1360 311363.590000 386186.390165 374629.485545
+ 12277.1260 312847.780000 388436.942461 377040.159771
+ 12281.1460 315690.970000 392342.425159 381092.833166
+ 12285.1820 316998.160000 394244.931397 383380.492657
+ 12289.2320 317593.310000 395220.392469 384902.141832
+ 12293.3130 319890.440000 398278.839673 388578.808365
+ 12297.3970 323040.560000 402421.234930 393276.453306
+ 12301.5080 324595.690000 404545.646603 396023.117514
+ 12305.6500 326093.810000 406672.015039 398762.766827
+ 12309.7950 328920.910000 410486.370738 403126.434797
+ 12313.9700 330148.970000 412396.669759 405673.044820
+ 12318.1580 333643.030000 417140.981160 411045.699362
+ 12322.3640 333044.090000 416900.249611 411534.375472
+ 12326.5860 336345.120000 421634.479201 416879.981269
+ 12330.8240 338324.160000 424713.740040 420711.676919
+ 12335.0920 340426.190000 428080.958315 424832.301196
+ 12339.3770 342828.190000 431782.080586 429302.892483
+ 12343.6890 344049.190000 434104.262462 432314.543536
+ 12348.0070 346067.160000 437407.371138 436132.151968
+ 12352.3530 348531.120000 441225.473780 440543.817756
+ 12356.7020 350692.090000 444321.545545 444808.420617
+ 12361.0800 352828.030000 447874.639669 448365.045844
+ 12365.4890 354248.940000 450599.665804 451093.665660
+ 12369.9020 356049.870000 453668.658870 454167.284080
+ 12374.3440 358282.780000 456832.618754 458737.899941
+ 12378.8030 360830.660000 460562.589293 462954.495040
+ 12383.2780 363920.530000 464982.522856 467765.116741
+ 12387.7700 365505.410000 467419.424901 470627.705710
+ 12392.2790 365219.250000 467536.330578 471134.361624
+ 12396.8160 368830.090000 472652.136581 476739.918184
+ 12401.3710 369749.910000 474339.997176 478896.528387
+ 12405.9430 373902.720000 480197.826064 485351.138861
+ 12410.5320 373036.530000 479694.599566 485390.722742
+ 12415.1390 378216.310000 487026.375437 493403.313947
+ 12419.7620 380071.090000 490154.091526 497253.901656
+ 12424.4150 382666.870000 494243.800918 502195.486672
+ 12429.0850 384158.620000 496975.505520 505754.098698
+ 12433.7720 385271.340000 499253.141776 508870.673790
+ 12438.4760 389422.090000 505404.813794 516042.248790
+ 12443.1970 390725.780000 507929.411415 519520.818588
+ 12447.9370 391245.500000 509366.012766 522032.418411
+ 12452.7050 393296.190000 512775.584390 526430.991195
+ 12457.4910 396918.840000 518173.136385 532866.576087
+ 12462.2810 399110.530000 521673.647534 537353.113836
+ 12467.1030 401675.160000 525674.133271 542316.696814
+ 12471.9400 404458.810000 529883.622314 547582.246264
+ 12476.8110 405355.440000 531573.040592 550223.787506
+ 12481.6830 408885.030000 536726.479874 556319.353569
+ 12486.5740 409500.620000 538056.846561 558403.906516
+ 12491.4960 411805.220000 541667.243257 562790.491760
+ 12496.4350 415295.780000 546843.627854 568868.067117
+ 12501.3790 417529.340000 550347.951492 573229.641693
+ 12506.3530 420043.910000 554312.248506 578044.186760
+ 12511.3450 419575.440000 554406.483745 578855.670571
+ 12516.3540 421058.970000 557136.735330 582474.236416
+ 12521.3960 423965.470000 561826.011137 588186.822772
+ 12526.4390 427537.970000 567432.161581 594813.346605
+ 12531.5040 430074.470000 571681.363724 600066.864439
+ 12536.5990 431217.940000 574140.490622 603374.426536
+ 12541.7110 433529.370000 578134.618070 608340.929908
+ 12546.8270 435267.840000 581373.766441 612587.516165
+ 12551.9750 438123.280000 586147.832681 618440.020858
+ 12557.1420 441637.690000 591740.882184 625249.568762
+ 12562.3270 444267.090000 596125.929364 630817.051093
+ 12567.5300 444134.500000 596786.927596 632424.549708
+ 12572.7510 447171.870000 601700.923689 638562.111120
+ 12577.9900 449688.250000 605888.856968 643996.605357
+ 12583.2600 451993.590000 609743.817910 649167.127081
+ 12588.5360 453785.940000 612920.776781 653637.652045
+ 12593.8300 455716.280000 616326.603115 658357.161628
+ 12599.1560 460000.590000 622898.492479 666512.678598
+ 12604.4860 461809.910000 626133.342870 671125.219762
+ 12609.8500 462971.220000 628663.157334 674957.720306
+ 12615.2170 463691.500000 630494.959177 678114.213615
+ 12620.6160 468082.750000 637311.659004 686511.657774
+ 12626.0210 471490.030000 642920.422314 693637.171785
+ 12631.4580 471629.250000 644071.142447 695917.709342
+ 12636.9140 474368.500000 648786.792523 702063.163038
+ 12642.3890 475319.720000 651072.479953 705546.600556
+ 12647.8670 480106.910000 658672.211760 714776.151084
+ 12653.3800 482764.090000 663318.726086 720856.600547
+ 12658.9100 483862.280000 665864.383063 724580.133414
+ 12664.4600 484768.470000 668101.959260 727997.588369
+ 12670.0270 486345.620000 671217.497245 732430.058763
+ 12675.6160 489930.750000 677110.009030 739868.571680
+ 12681.2220 490594.870000 678971.514936 742935.012980
+ 12686.8480 494418.000000 685136.996563 750807.499430
+ 12692.4790 497494.090000 690316.423414 757597.920587
+ 12698.1440 497573.190000 691316.852997 759847.413457
+ 12703.8250 501390.280000 697488.272418 767792.903449
+ 12709.5280 502543.340000 700011.585045 771750.271338
+ 12715.2500 505292.410000 704774.991873 778154.804122
+
diff --git a/xas-standards-client/src/mocks/data_response.ts b/xas-standards-client/src/mocks/data_response.ts
new file mode 100644
index 0000000..ff74262
--- /dev/null
+++ b/xas-standards-client/src/mocks/data_response.ts
@@ -0,0 +1,268 @@
+export const response = {
+ energy: [
+ 11649.994, 11660.005, 11669.997, 11680.006, 11689.996, 11700.005, 11709.994,
+ 11720.002, 11730.003, 11739.995, 11749.996, 11760.0, 11769.997, 11779.999,
+ 11789.996, 11799.998, 11810.003, 11820.002, 11829.994, 11840.003, 11850.004,
+ 11850.762, 11851.52, 11852.278, 11853.036, 11853.782, 11854.541, 11855.299,
+ 11856.058, 11856.815, 11857.575, 11858.334, 11859.093, 11859.853, 11860.611,
+ 11861.357, 11862.118, 11862.877, 11863.637, 11864.396, 11865.155, 11865.903,
+ 11866.663, 11867.423, 11868.183, 11868.943, 11869.703, 11870.451, 11871.213,
+ 11871.973, 11872.721, 11873.482, 11874.243, 11875.004, 11875.754, 11876.515,
+ 11877.275, 11878.025, 11878.786, 11879.548, 11880.309, 11881.06, 11881.82,
+ 11882.582, 11883.333, 11884.095, 11884.845, 11885.607, 11886.357, 11887.12,
+ 11887.882, 11888.634, 11889.396, 11890.146, 11890.91, 11891.673, 11892.423,
+ 11893.188, 11893.938, 11894.701, 11895.452, 11896.216, 11896.968, 11897.731,
+ 11898.484, 11899.248, 11900.0, 11901.282, 11902.578, 11903.896, 11905.229,
+ 11906.574, 11907.956, 11909.352, 11910.759, 11912.191, 11913.638, 11915.107,
+ 11916.592, 11918.101, 11919.633, 11921.18, 11922.739, 11924.323, 11925.933,
+ 11927.555, 11929.189, 11930.851, 11932.536, 11934.233, 11935.958, 11937.695,
+ 11939.443, 11941.219, 11943.02, 11944.833, 11946.659, 11948.511, 11950.387,
+ 11952.278, 11954.193, 11956.11, 11958.063, 11960.031, 11962.012, 11964.019,
+ 11966.05, 11968.095, 11970.152, 11972.236, 11974.334, 11976.456, 11978.593,
+ 11980.754, 11982.929, 11985.13, 11987.345, 11989.585, 11991.837, 11994.104,
+ 11996.396, 11998.715, 12001.047, 12003.393, 12005.765, 12008.149, 12010.561,
+ 12012.985, 12015.437, 12017.9, 12020.379, 12022.883, 12025.401, 12027.945,
+ 12030.502, 12033.087, 12035.686, 12038.31, 12040.948, 12043.601, 12046.278,
+ 12048.971, 12051.688, 12054.421, 12057.169, 12059.94, 12062.729, 12065.543,
+ 12068.369, 12071.211, 12074.08, 12076.977, 12079.872, 12082.796, 12085.746,
+ 12088.712, 12091.691, 12094.696, 12097.704, 12100.75, 12103.812, 12106.889,
+ 12109.978, 12113.096, 12116.239, 12119.387, 12122.56, 12125.746, 12128.962,
+ 12132.192, 12135.449, 12138.721, 12142.008, 12145.309, 12148.638, 12151.98,
+ 12155.351, 12158.737, 12162.137, 12165.553, 12168.995, 12172.453, 12175.939,
+ 12179.441, 12182.956, 12186.499, 12190.045, 12193.632, 12197.221, 12200.838,
+ 12204.471, 12208.116, 12211.793, 12215.483, 12219.189, 12222.923, 12226.672,
+ 12230.438, 12234.218, 12238.025, 12241.85, 12245.689, 12249.558, 12253.443,
+ 12257.341, 12261.257, 12265.201, 12269.158, 12273.136, 12277.126, 12281.146,
+ 12285.182, 12289.232, 12293.313, 12297.397, 12301.508, 12305.65, 12309.795,
+ 12313.97, 12318.158, 12322.364, 12326.586, 12330.824, 12335.092, 12339.377,
+ 12343.689, 12348.007, 12352.353, 12356.702, 12361.08, 12365.489, 12369.902,
+ 12374.344, 12378.803, 12383.278, 12387.77, 12392.279, 12396.816, 12401.371,
+ 12405.943, 12410.532, 12415.139, 12419.762, 12424.415, 12429.085, 12433.772,
+ 12438.476, 12443.197, 12447.937, 12452.705, 12457.491, 12462.281, 12467.103,
+ 12471.94, 12476.811, 12481.683, 12486.574, 12491.496, 12496.435, 12501.379,
+ 12506.353, 12511.345, 12516.354, 12521.396, 12526.439, 12531.504, 12536.599,
+ 12541.711, 12546.827, 12551.975, 12557.142, 12562.327, 12567.53, 12572.751,
+ 12577.99, 12583.26, 12588.536, 12593.83, 12599.156, 12604.486, 12609.85,
+ 12615.217, 12620.616, 12626.021, 12631.458, 12636.914, 12642.389, 12647.867,
+ 12653.38, 12658.91, 12664.46, 12670.027, 12675.616, 12681.222, 12686.848,
+ 12692.479, 12698.144, 12703.825, 12709.528, 12715.25,
+ ],
+ mutrans: [
+ 0.000257395721032632, 0.00031795646562457605, 5.6370024472492416e-5,
+ 0.00018023185581191397, 2.8722210523510802e-5, -0.0002668964964826339,
+ -0.00016438338183213098, -0.00027651809502846, -0.0003241853249335152,
+ -0.0003053676557064578, -0.000423323516534694, -0.0001922369933765238,
+ 0.00024089262689961486, 0.00022961224315972496, 0.0006417303163825863,
+ 0.001558209841817053, 0.0026111148928009884, 0.004491273511006803,
+ 0.0072230822512218155, 0.013216169859688712, 0.027243488333971985,
+ 0.029028791260402878, 0.03160627956504577, 0.03344911409749121,
+ 0.035917542467321664, 0.03925654711858666, 0.04245149163269257,
+ 0.04593122582475846, 0.050717544969643216, 0.05540282488827946,
+ 0.060715049926376885, 0.06792094888613316, 0.07614890957893669,
+ 0.08525346891070773, 0.09747275641837104, 0.11257922854700947,
+ 0.12917802360988828, 0.15259233082581503, 0.18721791669516336,
+ 0.23003713898237094, 0.29349895658443315, 0.39410415310337765,
+ 0.5348252998134231, 0.7315599819569523, 1.0243882027559124,
+ 1.360998182694704, 1.6449921149930498, 1.9145535589399352,
+ 2.080474441043103, 2.094914034060601, 1.9731290691203138,
+ 1.7639486382466005, 1.5872284436514545, 1.444026491831253,
+ 1.3247626407811603, 1.2388715520863351, 1.177778647105517,
+ 1.1420749003805404, 1.1415083420287007, 1.1622576869719452,
+ 1.1965392733932303, 1.2313016460117863, 1.2534657323667464,
+ 1.2623298650577033, 1.2519142625966295, 1.2317667782505664,
+ 1.2078755374221462, 1.1834246281539418, 1.163570691933529,
+ 1.1446130109675077, 1.1238797066602904, 1.1032454850565214,
+ 1.0833252432635583, 1.0595953927452884, 1.0365824562115766,
+ 1.01748007090975, 0.997750099006385, 0.9780312066130433, 0.9639301146278364,
+ 0.95199059815604, 0.9446958789115446, 0.9415508331789599,
+ 0.9397210005170841, 0.9383728875985187, 0.9363080595878341,
+ 0.9339627870080849, 0.9307022424478798, 0.924372787329797,
+ 0.9164462378740325, 0.9085445344176324, 0.901149274174917,
+ 0.8971475125186744, 0.8958103402145855, 0.9002594725625808,
+ 0.9119789403487628, 0.9273169014636211, 0.9441914827381773,
+ 0.9594159058939516, 0.9689206006119354, 0.9772794124656307,
+ 0.9841333194029909, 0.9922873196757767, 1.0050917134788284,
+ 1.0188328166931564, 1.033296145059486, 1.0454698673572722,
+ 1.054075645714736, 1.0604521346644147, 1.0664795509459255,
+ 1.0707299253053197, 1.0732572023598796, 1.0746054360020054,
+ 1.077055413413457, 1.0810972468207314, 1.0855167074408594,
+ 1.0874055458977996, 1.0860011434054286, 1.0804458936029493,
+ 1.0719555563167693, 1.0627327081170435, 1.056169607208056,
+ 1.0506644842615573, 1.0457236216779624, 1.0401370494651878,
+ 1.0349571427439013, 1.0304067662561316, 1.0264989890309295,
+ 1.0225828468963802, 1.018773945351289, 1.0153081631258847,
+ 1.0122615779479471, 1.009311448888852, 1.0050402326462755,
+ 1.0001183795223414, 0.994355643543849, 0.9896312539013794,
+ 0.9860969071541067, 0.9841449094415053, 0.9828577348215531,
+ 0.9823325697907698, 0.9826444457554634, 0.984804455814823,
+ 0.9882838899654511, 0.9928840351152334, 0.9982039314279574,
+ 1.0037393566119621, 1.0096474189087163, 1.0146286950757135,
+ 1.0184048240554242, 1.0220187741544584, 1.0254967176872176,
+ 1.0283370620601042, 1.0305606997271641, 1.0321424462402964,
+ 1.0339258746525135, 1.035464975362186, 1.0353349310450581,
+ 1.0342058395972291, 1.03249827231762, 1.0295350182467602,
+ 1.0270395108413137, 1.0236509731742052, 1.0206479735790288,
+ 1.017385868454035, 1.014781808174503, 1.0130350330580513,
+ 1.0120185806857467, 1.0115651191329897, 1.011425500024857,
+ 1.0118822154441245, 1.0112101528554804, 1.0103187624031544,
+ 1.0085056948220033, 1.0067111521127776, 1.0051789004501421,
+ 1.0038032426342363, 1.0029224640509478, 1.0026803237924868,
+ 1.0022595512509662, 1.0015099915232322, 1.0006098126625504,
+ 0.9993302767017687, 0.9974968724060175, 0.9957695549499748,
+ 0.9941240227549908, 0.9934560287182398, 0.9930114849679667,
+ 0.9930217301157652, 0.9938031017242516, 0.9946035187232476,
+ 0.9960644020911329, 0.9982564694464788, 1.0008765912727708,
+ 1.003735541873772, 1.0068205864424464, 1.0092491506119723,
+ 1.011450587113381, 1.0126297598917064, 1.0121169260320264,
+ 1.011383508351757, 1.0096357612454954, 1.0073786217962302,
+ 1.0048770276300325, 1.0020449944331389, 0.9991569600417184,
+ 0.9968848684358949, 0.9947805422388999, 0.9932191989253926,
+ 0.9924113553633117, 0.992123385372783, 0.9921704274125588,
+ 0.9924597753063277, 0.9932946430405054, 0.9943733474102155,
+ 0.9953837858836624, 0.9959987156551399, 0.9968087072425629,
+ 0.9970685043889359, 0.9969186886444119, 0.9960592553334489,
+ 0.9950114189915626, 0.9935188537563109, 0.9915835650056636,
+ 0.9897903549242554, 0.9882990467529867, 0.9865790780717739,
+ 0.9850566281128781, 0.9844610786362469, 0.9843184874012336,
+ 0.9844400842034426, 0.9848321360395019, 0.9858694711608783,
+ 0.9871950516819479, 0.988780491155432, 0.9902576588319987,
+ 0.9919705126018167, 0.9932715779467466, 0.994414479815935,
+ 0.9950504752329002, 0.9957135095422492, 0.9956217120477572,
+ 0.9950218663181902, 0.9944853374393429, 0.9932411478218793,
+ 0.9923275126594286, 0.9908600904140111, 0.9895929727546721,
+ 0.9886896639087901, 0.9897568331875707, 0.9881447313575488,
+ 0.9861741587745032, 0.9850365536156032, 0.9864728026811298,
+ 0.9870575071825548, 0.9877117617267014, 0.9887402579459839,
+ 0.9894066488470863, 0.9900706356937956, 0.990679050471653,
+ 0.9912272279590596, 0.9913782917577524, 0.9912778577962515,
+ 0.9908672502822662, 0.9905011800244423, 0.9898565789566623,
+ 0.9890820887820282, 0.988700056795358, 0.9880606863145122,
+ 0.9878048606524596, 0.9877038998728429, 0.9879756484303401,
+ 0.9884464824608289, 0.988927283476259, 0.9898360464244885,
+ 0.9910283539370709, 0.9922036233482083, 0.9934167974908045,
+ 0.9943980024639534, 0.9954107844181144, 0.996549774721155,
+ 0.9973447316996137, 0.9978770486376903, 0.9981855623440197,
+ 0.9982266226264351, 0.998186047645696, 0.9981500200482714,
+ 0.9979135717771892, 0.9978226436081751, 0.9977453471063777,
+ 0.9975632023057486, 0.9977326691742947, 0.9980734587896773,
+ 0.9985356142405095, 0.9990731810552435, 0.9997822830832451,
+ 1.000761296586497, 1.0017261730506832, 1.0025686404637035,
+ 1.0035612469129132, 1.0045515971626193, 1.0049088905595833,
+ 1.005690247859567, 1.0065713355743222, 1.0070109547825412,
+ 1.0075237303329923, 1.0080320744001685, 1.0085380664789303,
+ 1.0088781259815414, 1.0094374098692498, 1.0098979486733843,
+ 1.0105683523345883, 1.011458586748291, 1.0123948407520107,
+ 1.0133654809720758, 1.014644616285536, 1.0158058951111797,
+ 1.0171016264132098, 1.018528059481592, 1.0198081674358623,
+ 1.021081213978558,
+ ],
+ mufluor: [],
+ murefer: [
+ 0.0005708362795979513, 0.00025645563861773703, 0.00029672322325069884,
+ -5.883633304860686e-5, -0.00016925273719321858, 0.00011428902039732817,
+ -0.0002191770773403818, -0.0002646042818659411, -0.0002638340833087997,
+ 2.3578429838184753e-5, 1.7728679337106442e-5, -3.751272710658428e-5,
+ -0.0002972874676656094, 0.00012347605901840377, 0.0004782536570872912,
+ 0.0005793285835256958, 0.0013376918879212712, 0.002385713827574837,
+ 0.004613048511646255, 0.008492328272755261, 0.018466885707810656,
+ 0.020120494044029092, 0.021347391231179166, 0.023233525435795894,
+ 0.025252334542919138, 0.02733796617556773, 0.029863379656964385,
+ 0.03280980972356016, 0.036239674330978806, 0.04019464183950263,
+ 0.04422572099287888, 0.049827481960385916, 0.05708064547364301,
+ 0.06500011972085235, 0.07637319875119628, 0.09153516909484873,
+ 0.10946805241135908, 0.13735092140385557, 0.18508610512375961,
+ 0.2514637270716593, 0.35442334920116136, 0.5011621858297115,
+ 0.6579794439532134, 0.8256189190730113, 1.0282547228351064,
+ 1.229876286716953, 1.3597865636013138, 1.4229432526483583,
+ 1.4197648575520114, 1.400738325734696, 1.3779090017682178,
+ 1.3465527034506892, 1.311042293550206, 1.2696593425512455,
+ 1.224382104868009, 1.1854740086216695, 1.1480781293033822,
+ 1.1112909905564015, 1.079687741810304, 1.058156185003897,
+ 1.0401233830625845, 1.0266053745029184, 1.0179425852571269,
+ 1.0120999553639891, 1.010426154844879, 1.011670555915992, 1.013129395541398,
+ 1.0135469492491151, 1.0131440250267656, 1.012326575127298,
+ 1.0116435655766671, 1.0121160105408622, 1.013871169549995,
+ 1.0163869233004035, 1.018687643322945, 1.0203601302848044,
+ 1.0208995601323445, 1.0189423472767647, 1.0143094845629883,
+ 1.0080853839990471, 0.9998555748969321, 0.9919973408153723,
+ 0.9862595625537911, 0.9820585985201548, 0.981752109926591,
+ 0.9837189025315644, 0.9876194188057903, 0.9945201703513458,
+ 0.9991008237335773, 1.000022781540531, 0.9982459755307911,
+ 0.9955520536359495, 0.9940973006249791, 0.9944126964406363,
+ 0.9970160317950194, 1.0014625396555799, 1.0076955089844613,
+ 1.0120537565582235, 1.0123310260857794, 1.0045280301350634,
+ 0.9931354934116204, 0.982397617754137, 0.9738536014004457,
+ 0.9702722922816459, 0.9688248131736966, 0.9692842884693375,
+ 0.9717971754559216, 0.9775332400211687, 0.9862215342723509,
+ 0.9975730612800913, 1.010024360485777, 1.0215679513517144,
+ 1.028656842246963, 1.030537190784358, 1.0278630493382166,
+ 1.0246295191440964, 1.0218169596284792, 1.0190290018134505,
+ 1.0163504505880445, 1.0144937330974222, 1.0116885715792552,
+ 1.0077509497262536, 1.0025817802332875, 1.0002540174041155,
+ 1.0020771699108486, 1.0062133414223138, 1.0101661096795085,
+ 1.010745674196664, 1.0046300617215695, 0.9926975931191986,
+ 0.9782110920816469, 0.9664069781979695, 0.9600366585596302,
+ 0.9584648624016106, 0.9593425451375218, 0.9618633157541904,
+ 0.9677983864118916, 0.9772600936518198, 0.9894722980405071,
+ 1.003149508980634, 1.0175971860314692, 1.0306570350099977,
+ 1.0386574736586152, 1.040983163848095, 1.0391849296866114,
+ 1.0355411638545453, 1.0322351083620136, 1.0281153673312686,
+ 1.0231331426783945, 1.018154979095895, 1.0136489403993365,
+ 1.0085995971146675, 1.0027749196007951, 0.9977940952717428,
+ 0.9937485484051121, 0.9902890305602288, 0.987616014112265,
+ 0.984949462082484, 0.9819785651805105, 0.9804345838709683,
+ 0.9785585796413894, 0.976527877483706, 0.9752885045903471,
+ 0.9781741309516919, 0.985017479442357, 0.9923385497651482,
+ 0.9963069390964951, 0.9965061661354904, 0.9952456905881188,
+ 0.9956596740927771, 1.0007817412458089, 1.0083599298206705,
+ 1.016620224528522, 1.0238736271819548, 1.030031426860952,
+ 1.0341465358807624, 1.0353068242375776, 1.0314705595245655,
+ 1.026092070219442, 1.0206868702889478, 1.0149203197135563,
+ 1.0109103270073079, 1.007255749923771, 1.0022996764355732,
+ 0.9964488173917659, 0.9902373829077835, 0.9849734692019939,
+ 0.9801140372880985, 0.9762339929155016, 0.975291838453443, 0.97646109604491,
+ 0.9797346047115235, 0.9857499256231359, 0.9913875695188157,
+ 0.9964881626113832, 1.0009764207712977, 1.0047510559819484,
+ 1.007857919491224, 1.0097811791900753, 1.010596948060131,
+ 1.0109110606087126, 1.0106289561781157, 1.009600379300704,
+ 1.0098710058517044, 1.011400592564509, 1.0129900187949126,
+ 1.0134089141712548, 1.0117376244400906, 1.009941568021549,
+ 1.008906755271069, 1.0079504660657788, 1.0067135278971548,
+ 1.004003332428237, 1.000477802418871, 0.9962202551662711,
+ 0.9923114907534284, 0.9888827316204112, 0.9869109040559355,
+ 0.9855434617325911, 0.9846257772583584, 0.9841138606894846,
+ 0.9847732329394919, 0.987960657769111, 0.9925666176639083,
+ 0.9968305962765456, 1.0000863491106788, 1.0026079754229924,
+ 1.0036241774587011, 1.0051056349727752, 1.006795999100408,
+ 1.0082783033273273, 1.0085015187919553, 1.0077894464786858,
+ 1.006250943401172, 1.0050662323388964, 1.003833063200637,
+ 1.0027415761865435, 1.0019362455880438, 1.000859558215835,
+ 0.9996145313956101, 0.9982517842909245, 0.9973171962291861,
+ 0.9956794212414666, 0.9941270791817015, 0.9925592315153328,
+ 0.9916522940762198, 0.9918930858527343, 0.9917075708819257,
+ 0.9880247808905646, 0.9916507322089796, 0.9952933469555141,
+ 0.9989322893989795, 0.9941497620499705, 0.9950200799738877,
+ 0.996539246308509, 0.9978280656586378, 0.9992601212449614,
+ 1.0003830442843615, 1.0015075221510767, 1.002186218696382,
+ 1.0028320169415974, 1.0032849997234616, 1.0032837964356704,
+ 1.002732021499519, 1.0022742847392805, 1.001767695715346,
+ 1.0007819751625657, 0.9998419374158649, 0.9981885119891121,
+ 0.9973248347382935, 0.996580973279134, 0.995914191666064,
+ 0.9955351608317276, 0.9948026324028253, 0.9942523585298171,
+ 0.9944157271667977, 0.9948802874472313, 0.9957169959923542,
+ 0.9963074728976888, 0.9968431229323387, 0.9975744235722271,
+ 0.9981883271989351, 0.9985737662954646, 0.998819224609559,
+ 0.9993486658604173, 0.9997294891337203, 1.0004843143729412,
+ 1.0010820779720997, 1.0013911616209619, 1.0018292330092042,
+ 1.0019372739642418, 1.0019780821347484, 1.0021533291075981,
+ 1.0022811979316866, 1.002196173158192, 1.0018115861264576,
+ 1.0013949838444451, 1.0010242756359002, 1.0005312143510985,
+ 1.0000044237711334, 0.9996508897831144, 0.9990358420782789,
+ 0.9989993749515037, 0.9989359926094343, 0.9990847957460756,
+ 0.9992360553711921, 0.999575108991939, 1.0000250654865437,
+ 1.0003607195413937, 1.001034469669977, 1.0016393599939808,
+ 1.0020676063498786, 1.0026557071048336, 1.0031792741394419,
+ 1.00340867243608, 1.0037165339549479, 1.0039232322676288,
+ 1.0041419650564882, 1.0043317309920934, 1.0046607848577336,
+ ],
+};
diff --git a/xas-standards-client/src/mocks/handlers.ts b/xas-standards-client/src/mocks/handlers.ts
new file mode 100644
index 0000000..3154309
--- /dev/null
+++ b/xas-standards-client/src/mocks/handlers.ts
@@ -0,0 +1,147 @@
+import { http, HttpResponse } from "msw";
+
+import {
+ AppMetadata,
+ Facility,
+ Beamline,
+ Edge,
+ Element,
+ XASStandard,
+} from "../models";
+
+import { response } from "./data_response";
+
+//api/user
+
+export const handlers = [
+
+ http.post('/api/standards', () => {
+ console.log('Captured a "POST /api/standards" request')
+ const standard1: XASStandard = {
+ beamline: { facility: { name: "SSRL" }, name: "4-1", id:1 },
+ citation:
+ "Pickering, I. J., George, G. N., & Hedman, B. (1994). SSRL workshops on x-ray absorption spectroscopy. Synchrotron Radiation News, 7(1), 17.",
+ doi: "10.1080/08940889408261246",
+ edge: { id: 1, name: "K" },
+ element: { symbol: "As", z: 33 },
+ id: 1,
+ collection_date: "2024-03-13T09:02:23.686549",
+ facility: "SSRL",
+ sample_comp: "As2 O3",
+ sample_name: "As2O3 arsenious oxide",
+ sample_prep: "powder, mixed 1:60 with B(OH)3 by wt",
+ };
+ return HttpResponse.json(standard1);
+ }),
+
+ // Intercept "GET https://example.com/user" requests...
+ http.get("/api/user", () => {
+ // ...and respond to them using this JSON response.
+ // return new HttpResponse(null, { status: 401 });
+ return HttpResponse.json({
+ user: "abc12345",
+ });
+ }),
+
+ http.get("/api/metadata", () => {
+ // ...and respond to them using this JSON response.
+
+ const facility1: Facility = {
+ name: "dls",
+ };
+
+ const beamline1: Beamline = {
+ facility: facility1,
+ name: "b01",
+ id:3
+ };
+
+ const edge1: Edge = {
+ id: 1,
+ name: "K",
+ };
+ const edge2: Edge = {
+ id: 2,
+ name: "L",
+ };
+
+ const e1: Element = {
+ symbol: "H",
+ z: 1,
+ };
+
+ const e2: Element = {
+ symbol: "He",
+ z: 2,
+ };
+
+ const metadata: AppMetadata = {
+ beamlines: [beamline1],
+ licences: ["CC"],
+ edges: [edge1, edge2],
+ elements: [e1, e2],
+ };
+
+ return HttpResponse.json(metadata);
+ }),
+
+ http.get("/api/standards", ({ request }) => {
+ // ...and respond to them using this JSON response.
+
+ const url = new URL(request.url);
+ const element = url.searchParams.get("element");
+
+ const standard1: XASStandard = {
+ beamline: { facility: { name: "SSRL" }, name: "4-1", id:1 },
+ citation:
+ "Pickering, I. J., George, G. N., & Hedman, B. (1994). SSRL workshops on x-ray absorption spectroscopy. Synchrotron Radiation News, 7(1), 17.",
+ doi: "10.1080/08940889408261246",
+ edge: { id: 1, name: "K" },
+ element: { symbol: "As", z: 33 },
+ id: 1,
+ collection_date: "2024-03-13T09:02:23.686549",
+ facility: "SSRL",
+ sample_comp: "As2 O3",
+ sample_name: "As2O3 arsenious oxide",
+ sample_prep: "powder, mixed 1:60 with B(OH)3 by wt",
+ };
+
+ const standard2: XASStandard = {
+ beamline: { facility: { name: "dls" }, name: "b01", id: 2 },
+ citation:
+ "Pickering, I. J., George, G. N., & Hedman, B. (1994). SSRL workshops on x-ray absorption spectroscopy. Synchrotron Radiation News, 7(1), 17.",
+ doi: "10.1080/08940889408261246",
+ edge: { id: 1, name: "K" },
+ element: { symbol: "He", z: 2 },
+ id: 2,
+ collection_date: "2024-03-13T09:02:23.686549",
+ facility: "dls",
+ sample_comp: "He",
+ sample_name: "Helium",
+ sample_prep: "Gas",
+ };
+
+ let items = [standard1, standard2];
+ if (element != null) {
+ items = items.filter((e) => {
+ return e.element.symbol === element;
+ });
+ }
+
+ return HttpResponse.json({
+ items: items,
+ current_page: "H",
+ current_page_backwards: "H",
+ });
+ }),
+
+ http.get("/api/data/*", () => {
+ // ...and respond to them using this JSON response.
+ return HttpResponse.json(response);
+ }),
+
+ // http.get("/login", () => {
+ // // ...and respond to them using this JSON response.
+ // return new HttpResponse(null, { status: 302, Location: "/" });
+ // }),
+];
diff --git a/xas-standards-client/src/mocks/node.ts b/xas-standards-client/src/mocks/node.ts
new file mode 100644
index 0000000..7b37f2a
--- /dev/null
+++ b/xas-standards-client/src/mocks/node.ts
@@ -0,0 +1,4 @@
+import { setupServer } from "msw/node";
+import { handlers } from "./handlers";
+
+export const server = setupServer(...handlers);
diff --git a/xas-standards-client/src/models.ts b/xas-standards-client/src/models.ts
index f9e1861..9b9b403 100644
--- a/xas-standards-client/src/models.ts
+++ b/xas-standards-client/src/models.ts
@@ -18,6 +18,7 @@ export interface XASData {
export interface Beamline {
name: string;
facility: Facility;
+ id: number;
}
export interface Facility {
diff --git a/xas-standards-client/src/stories/PeriodicTable.stories.tsx b/xas-standards-client/src/stories/PeriodicTable.stories.tsx
index 17bbc3e..9377329 100644
--- a/xas-standards-client/src/stories/PeriodicTable.stories.tsx
+++ b/xas-standards-client/src/stories/PeriodicTable.stories.tsx
@@ -3,7 +3,6 @@ import { fn } from "@storybook/test";
import SimplePeriodicTable from "../components/PeriodicTable";
-import "../index.css";
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export
const meta = {
title: "XAS-Standards/SimplePeriodicTable",