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 - - setComments(e.target.value)} - > - -
+ + setComments(e.target.value)} + /> + + + + + + ); } 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 - - setCitation(e.target.value)} - required - > - - setDOI(e.target.value)} - required - > - -
{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 + + + + + Edge + + + + ); } 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 as number)} + > + All Elements + {elements.map((x, y) => ( + + {x.symbol} + + ))} + + + + - - {elements.map((x, y) => ( - - ))} - -
- - -
-
+ { + 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

-
- -
-
+ + ) : ( + + )} + + + ); } 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 from Header:
-
{beamlineHeader}
- - + + Beamline + + +
+ + + 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 - - setSampleName(e.target.value)} - > - - setSampleComp(e.target.value)} - > - - setSamplePrep(e.target.value)} - > - - -
+ + 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 + + + + ); +} 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

-
+ Upload A Standard XDI file + -
+ XDI File - -
+ + 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. -
-
-
- - - - -
+ +
+ + + + + + + + + + + + + + -
- - setLicence(e.target.value)} > - {licences.map((x, y) => ( - + {licences.map((x, y) => ( + + {x} + ))} - -
-
- - -
- - -
+ + + + } label="By ticking I confirm info is correct and I grant permission for + diamond to publish data under selected licence" /> + + + + + + + + ); } 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 ( -
+ - - - - - - - - - - {stds.map((standard, key) => - StandardMetadata({ - key: key, - xasstandard: standard, - selected: selectedStandard, - updatePlot: clickStandard, - }) - )} - -
ElementEdgeNamePrepBeamline
-
- - -
- -
+ + + + ); } 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",