fitsview 0.2.0__tar.gz → 0.3.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fitsview might be problematic. Click here for more details.

Files changed (84) hide show
  1. fitsview-0.3.3/CHANGELOG.md +14 -0
  2. {fitsview-0.2.0 → fitsview-0.3.3}/PKG-INFO +1 -7
  3. {fitsview-0.2.0 → fitsview-0.3.3}/README.md +0 -6
  4. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/_version.py +1 -1
  5. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/labextension/package.json +2 -2
  6. fitsview-0.2.0/fitsview/labextension/static/59a40511f039635b7ffb.wasm → fitsview-0.3.3/fitsview/labextension/static/14e2ce1ce9dea8d282d3.wasm +0 -0
  7. fitsview-0.3.3/fitsview/labextension/static/55.ac78f4ea4a687f96d25d.js +1 -0
  8. fitsview-0.3.3/fitsview/labextension/static/764.754d0996bf96c92a233c.js +1 -0
  9. fitsview-0.2.0/fitsview/labextension/static/777.b2a5d1ff502d61e4b889.js → fitsview-0.3.3/fitsview/labextension/static/777.e9338b5c36dcbc94add8.js +1 -1
  10. fitsview-0.3.3/fitsview/labextension/static/remoteEntry.c89edd06d5c9383ee0e1.js +1 -0
  11. {fitsview-0.2.0 → fitsview-0.3.3}/package-lock.json +452 -445
  12. {fitsview-0.2.0 → fitsview-0.3.3}/package.json +1 -1
  13. {fitsview-0.2.0 → fitsview-0.3.3}/pyproject.toml +1 -1
  14. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/.gitignore +1 -0
  15. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/Cargo.lock +335 -131
  16. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/Cargo.toml +4 -4
  17. fitsview-0.3.3/viewarr/README.md +146 -0
  18. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/js/index.d.ts +103 -6
  19. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/js/index.js +263 -3
  20. fitsview-0.3.3/viewarr/pkg/README.md +146 -0
  21. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/viewarr.d.ts +41 -8
  22. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/viewarr.js +87 -19
  23. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/viewarr_bg.wasm +0 -0
  24. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/viewarr_bg.wasm.d.ts +12 -6
  25. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/wrapper.d.ts +103 -6
  26. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/wrapper.js +263 -3
  27. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/app.rs +18 -1
  28. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/colormap.rs +19 -3
  29. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/lib.rs +78 -5
  30. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/transform.rs +81 -20
  31. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/widget.rs +505 -196
  32. {fitsview-0.2.0 → fitsview-0.3.3}/yarn.lock +504 -504
  33. fitsview-0.2.0/CHANGELOG.md +0 -5
  34. fitsview-0.2.0/fitsview/labextension/static/55.8755bf127e8d2b9d1543.js +0 -1
  35. fitsview-0.2.0/fitsview/labextension/static/764.0edd7f616e1d7f815ebf.js +0 -1
  36. fitsview-0.2.0/fitsview/labextension/static/remoteEntry.ad2a7f855787dd40022f.js +0 -1
  37. fitsview-0.2.0/viewarr/README.md +0 -93
  38. fitsview-0.2.0/viewarr/pkg/README.md +0 -93
  39. {fitsview-0.2.0 → fitsview-0.3.3}/.copier-answers.yml +0 -0
  40. {fitsview-0.2.0 → fitsview-0.3.3}/.gitignore +0 -0
  41. {fitsview-0.2.0 → fitsview-0.3.3}/.gitmodules +0 -0
  42. {fitsview-0.2.0 → fitsview-0.3.3}/.prettierignore +0 -0
  43. {fitsview-0.2.0 → fitsview-0.3.3}/.yarnrc.yml +0 -0
  44. {fitsview-0.2.0 → fitsview-0.3.3}/AGENTS.md +0 -0
  45. {fitsview-0.2.0 → fitsview-0.3.3}/LICENSE +0 -0
  46. {fitsview-0.2.0 → fitsview-0.3.3}/babel.config.js +0 -0
  47. {fitsview-0.2.0 → fitsview-0.3.3}/conftest.py +0 -0
  48. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/__init__.py +0 -0
  49. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/handlers.py +0 -0
  50. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/labextension/static/728.f72867741749a85b33b3.js +0 -0
  51. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/labextension/static/style.js +0 -0
  52. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/labextension/static/third-party-licenses.json +0 -0
  53. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/tests/__init__.py +0 -0
  54. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/tests/generate_files.py +0 -0
  55. {fitsview-0.2.0 → fitsview-0.3.3}/fitsview/tests/test_handlers.py +0 -0
  56. {fitsview-0.2.0 → fitsview-0.3.3}/install.json +0 -0
  57. {fitsview-0.2.0 → fitsview-0.3.3}/jest.config.js +0 -0
  58. {fitsview-0.2.0 → fitsview-0.3.3}/jupyter-config/server-config/fitsview.json +0 -0
  59. {fitsview-0.2.0 → fitsview-0.3.3}/src/__tests__/fitsview.spec.ts +0 -0
  60. {fitsview-0.2.0 → fitsview-0.3.3}/src/handler.ts +0 -0
  61. {fitsview-0.2.0 → fitsview-0.3.3}/src/index.ts +0 -0
  62. {fitsview-0.2.0 → fitsview-0.3.3}/src/viewarr.d.ts +0 -0
  63. {fitsview-0.2.0 → fitsview-0.3.3}/src/widget.ts +0 -0
  64. {fitsview-0.2.0 → fitsview-0.3.3}/style/base.css +0 -0
  65. {fitsview-0.2.0 → fitsview-0.3.3}/style/index.css +0 -0
  66. {fitsview-0.2.0 → fitsview-0.3.3}/style/index.js +0 -0
  67. {fitsview-0.2.0 → fitsview-0.3.3}/tsconfig.json +0 -0
  68. {fitsview-0.2.0 → fitsview-0.3.3}/tsconfig.test.json +0 -0
  69. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/README.md +0 -0
  70. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/jupyter_server_test_config.py +0 -0
  71. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/package.json +0 -0
  72. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/playwright.config.js +0 -0
  73. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/tests/fitsview.spec.ts +0 -0
  74. {fitsview-0.2.0 → fitsview-0.3.3}/ui-tests/yarn.lock +0 -0
  75. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/.git +0 -0
  76. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/.vscode/settings.json +0 -0
  77. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/LICENSE +0 -0
  78. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/build.rs +0 -0
  79. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/generate_colormaps.py +0 -0
  80. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/package.json +0 -0
  81. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/.gitignore +0 -0
  82. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/LICENSE +0 -0
  83. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/pkg/package.json +0 -0
  84. {fitsview-0.2.0 → fitsview-0.3.3}/viewarr/src/colormap_luts.rs +0 -0
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ <!-- <START NEW CHANGELOG ENTRY> -->
4
+ ## 0.3.3 (2026-02-22)
5
+
6
+ - Updated the `viewarr` submodule to `v0.3.3`.
7
+ - Pulled in upstream viewer fixes from `viewarr` since the prior submodule pin, including colorbar/contrast UX fixes and coordinate handling improvements.
8
+ - Verified the JupyterLab integration remains compatible with the existing `viewarr` API usage and rebuilt successfully.
9
+
10
+ ## 0.1.0
11
+
12
+ - Initial release.
13
+
14
+ <!-- <END NEW CHANGELOG ENTRY> -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fitsview
3
- Version: 0.2.0
3
+ Version: 0.3.3
4
4
  Summary: View FITS astronomical data files in JupyterLab without downloading entire files.
5
5
  Project-URL: Homepage, https://github.com/joseph-long/jupyterlab-fitsview/
6
6
  Project-URL: Bug Tracker, https://github.com/joseph-long/jupyterlab-fitsview/issues
@@ -368,9 +368,3 @@ The **viewarr** component is a Rust/WebAssembly viewer that provides:
368
368
  ## AI Coding Assistant Support
369
369
 
370
370
  This project includes an `AGENTS.md` file with coding standards and best practices for JupyterLab extension development. See [AGENTS.md](AGENTS.md) for details.
371
-
372
- ## Changelog
373
-
374
- ### v0.1.0
375
-
376
- Initial release.
@@ -301,9 +301,3 @@ The **viewarr** component is a Rust/WebAssembly viewer that provides:
301
301
  ## AI Coding Assistant Support
302
302
 
303
303
  This project includes an `AGENTS.md` file with coding standards and best practices for JupyterLab extension development. See [AGENTS.md](AGENTS.md) for details.
304
-
305
- ## Changelog
306
-
307
- ### v0.1.0
308
-
309
- Initial release.
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '0.2.0'
4
+ __version__ = VERSION = '0.3.3'
@@ -52,7 +52,7 @@
52
52
  "lint": "jlpm stylelint && jlpm prettier && jlpm eslint",
53
53
  "lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check",
54
54
  "prettier": "jlpm prettier:base --write --list-different",
55
- "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"",
55
+ "prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json}\"",
56
56
  "prettier:check": "jlpm prettier:base --check",
57
57
  "stylelint": "jlpm stylelint:check --fix",
58
58
  "stylelint:check": "stylelint --cache \"style/**/*.css\"",
@@ -116,7 +116,7 @@
116
116
  "extension": true,
117
117
  "outputDir": "fitsview/labextension",
118
118
  "_build": {
119
- "load": "static/remoteEntry.ad2a7f855787dd40022f.js",
119
+ "load": "static/remoteEntry.c89edd06d5c9383ee0e1.js",
120
120
  "extension": "./extension",
121
121
  "style": "./style"
122
122
  }
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkfitsview=self.webpackChunkfitsview||[]).push([[55],{55(e,n,t){t.r(n),t.d(n,{ViewerHandle:()=>_,default:()=>X,initSync:()=>H});class _{static __wrap(e){e>>>=0;const n=Object.create(_.prototype);return n.__wbg_ptr=e,b.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){const e=this.__wbg_ptr;return this.__wbg_ptr=0,b.unregister(this),e}free(){const e=this.__destroy_into_raw();q.__wbg_viewerhandle_free(e,0)}clearCallbacks(){q.viewerhandle_clearCallbacks(this.__wbg_ptr)}static create(e){return q.viewerhandle_create(e)}destroy(){q.viewerhandle_destroy(this.__wbg_ptr)}getBias(){return q.viewerhandle_getBias(this.__wbg_ptr)}getColormap(){let e,n;try{const t=q.viewerhandle_getColormap(this.__wbg_ptr);return e=t[0],n=t[1],k(t[0],t[1])}finally{q.__wbindgen_free(e,n,1)}}getColormapReversed(){return 0!==q.viewerhandle_getColormapReversed(this.__wbg_ptr)}getContrast(){return q.viewerhandle_getContrast(this.__wbg_ptr)}getMarkers(){return q.viewerhandle_getMarkers(this.__wbg_ptr)}getOverlayMessage(){let e,n;try{const t=q.viewerhandle_getOverlayMessage(this.__wbg_ptr);return e=t[0],n=t[1],k(t[0],t[1])}finally{q.__wbindgen_free(e,n,1)}}getPivotPoint(){return q.viewerhandle_getPivotPoint(this.__wbg_ptr)}getRotation(){return q.viewerhandle_getRotation(this.__wbg_ptr)}getShowPivotMarker(){return 0!==q.viewerhandle_getShowPivotMarker(this.__wbg_ptr)}getStretchMode(){let e,n;try{const t=q.viewerhandle_getStretchMode(this.__wbg_ptr);return e=t[0],n=t[1],k(t[0],t[1])}finally{q.__wbindgen_free(e,n,1)}}getValueRange(){return q.viewerhandle_getValueRange(this.__wbg_ptr)}getViewBounds(e,n){return q.viewerhandle_getViewBounds(this.__wbg_ptr,e,n)}getZoom(){return q.viewerhandle_getZoom(this.__wbg_ptr)}onClick(e){q.viewerhandle_onClick(this.__wbg_ptr,e)}onStateChange(e){q.viewerhandle_onStateChange(this.__wbg_ptr,e)}setBias(e){q.viewerhandle_setBias(this.__wbg_ptr,e)}setColormap(e){const n=D(e,q.__wbindgen_malloc,q.__wbindgen_realloc),t=$;q.viewerhandle_setColormap(this.__wbg_ptr,n,t)}setColormapReversed(e){q.viewerhandle_setColormapReversed(this.__wbg_ptr,e)}setContrast(e){q.viewerhandle_setContrast(this.__wbg_ptr,e)}setImageData(e,n,t,_){const r=D(_,q.__wbindgen_malloc,q.__wbindgen_realloc),c=$,o=q.viewerhandle_setImageData(this.__wbg_ptr,e,n,t,r,c);if(o[1])throw z(o[0])}setMarkers(e){const n=function(e,n){const t=n(4*e.length,4)>>>0;return S().set(e,t/4),$=e.length,t}(e,q.__wbindgen_malloc),t=$;q.viewerhandle_setMarkers(this.__wbg_ptr,n,t)}setOverlayMessage(e){const n=D(e,q.__wbindgen_malloc,q.__wbindgen_realloc),t=$;q.viewerhandle_setOverlayMessage(this.__wbg_ptr,n,t)}setPivotPoint(e,n){q.viewerhandle_setPivotPoint(this.__wbg_ptr,e,n)}setRotation(e){q.viewerhandle_setRotation(this.__wbg_ptr,e)}setShowPivotMarker(e){q.viewerhandle_setShowPivotMarker(this.__wbg_ptr,e)}setStretchMode(e){const n=D(e,q.__wbindgen_malloc,q.__wbindgen_realloc),t=$;q.viewerhandle_setStretchMode(this.__wbg_ptr,n,t)}setValueRange(e,n){q.viewerhandle_setValueRange(this.__wbg_ptr,e,n)}setViewBounds(e,n,t,_,r,c){q.viewerhandle_setViewBounds(this.__wbg_ptr,e,n,t,_,r,c)}setZoom(e){q.viewerhandle_setZoom(this.__wbg_ptr,e)}zoomIn(){q.viewerhandle_zoomIn(this.__wbg_ptr)}zoomOut(){q.viewerhandle_zoomOut(this.__wbg_ptr)}zoomToFit(){q.viewerhandle_zoomToFit(this.__wbg_ptr)}}function r(){const e={__proto__:null,__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(e){const n="boolean"==typeof e?e:void 0;return O(n)?16777215:n?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(e,n){const t=D(g(n),q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(e,n){return e in n},__wbg___wbindgen_is_function_0095a73b8b156f76:function(e){return"function"==typeof e},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(e){return void 0===e},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(e,n){const t="number"==typeof n?n:void 0;x().setFloat64(e+8,O(t)?0:t,!0),x().setInt32(e+0,!O(t),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(e,n){const t="string"==typeof n?n:void 0;var _=O(t)?0:D(t,q.__wbindgen_malloc,q.__wbindgen_realloc),r=$;x().setInt32(e+4,r,!0),x().setInt32(e+0,_,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(e,n){throw new Error(k(e,n))},__wbg__wbg_cb_unref_d9b87ff7982e3b21:function(e){e._wbg_cb_unref()},__wbg_activeElement_1554b6917654f8d6:function(e){const n=e.activeElement;return O(n)?0:f(n)},__wbg_activeElement_d9d2a80dfafa67ed:function(e){const n=e.activeElement;return O(n)?0:f(n)},__wbg_activeTexture_6f9a710514686c24:function(e,n){e.activeTexture(n>>>0)},__wbg_activeTexture_7e39cb8fdf4b6d5a:function(e,n){e.activeTexture(n>>>0)},__wbg_addEventListener_c917b5aafbcf493f:function(){return T(function(e,n,t,_,r){e.addEventListener(k(n,t),_,r)},arguments)},__wbg_altKey_73c1173ba53073d5:function(e){return e.altKey},__wbg_altKey_8155c319c215e3aa:function(e){return e.altKey},__wbg_appendChild_dea38765a26d346d:function(){return T(function(e,n){return e.appendChild(n)},arguments)},__wbg_arrayBuffer_05ce1af23e9064e8:function(e){return e.arrayBuffer()},__wbg_at_dfc235641cc0e40c:function(e,n){return e.at(n)},__wbg_attachShader_32114efcf2744eb6:function(e,n,t){e.attachShader(n,t)},__wbg_attachShader_b36058e5c9eeaf54:function(e,n,t){e.attachShader(n,t)},__wbg_bindBuffer_69a7a0b8f3f9b9cf:function(e,n,t){e.bindBuffer(n>>>0,t)},__wbg_bindBuffer_c9068e8712a034f5:function(e,n,t){e.bindBuffer(n>>>0,t)},__wbg_bindTexture_b2b7b1726a83f93e:function(e,n,t){e.bindTexture(n>>>0,t)},__wbg_bindTexture_ec13ddcb9dc8e032:function(e,n,t){e.bindTexture(n>>>0,t)},__wbg_bindVertexArrayOES_c2610602f7485b3f:function(e,n){e.bindVertexArrayOES(n)},__wbg_bindVertexArray_78220d1edb1d2382:function(e,n){e.bindVertexArray(n)},__wbg_blendEquationSeparate_1b12c43928cc7bc1:function(e,n,t){e.blendEquationSeparate(n>>>0,t>>>0)},__wbg_blendEquationSeparate_a8094fbec94cf80e:function(e,n,t){e.blendEquationSeparate(n>>>0,t>>>0)},__wbg_blendFuncSeparate_95465944f788a092:function(e,n,t,_,r){e.blendFuncSeparate(n>>>0,t>>>0,_>>>0,r>>>0)},__wbg_blendFuncSeparate_f366c170c5097fbe:function(e,n,t,_,r){e.blendFuncSeparate(n>>>0,t>>>0,_>>>0,r>>>0)},__wbg_blockSize_ef9a626745d7dfac:function(e){return e.blockSize},__wbg_blur_07f34335e06e5234:function(){return T(function(e){e.blur()},arguments)},__wbg_body_f67922363a220026:function(e){const n=e.body;return O(n)?0:f(n)},__wbg_bottom_c7ec510a18034add:function(e){return e.bottom},__wbg_bufferData_52235e85894af988:function(e,n,t,_){e.bufferData(n>>>0,t,_>>>0)},__wbg_bufferData_98f6c413a8f0f139:function(e,n,t,_){e.bufferData(n>>>0,t,_>>>0)},__wbg_button_d86841d0a03adc44:function(e){return e.button},__wbg_call_389efe28435a9388:function(){return T(function(e,n){return e.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return T(function(e,n,t){return e.call(n,t)},arguments)},__wbg_cancelAnimationFrame_cd35895d78cf4510:function(){return T(function(e,n){e.cancelAnimationFrame(n)},arguments)},__wbg_cancel_8f4e3a220b2f0fe1:function(e){e.cancel()},__wbg_changedTouches_b6ab7be7b1aed8d6:function(e){return e.changedTouches},__wbg_clearColor_404a3b16d43db93b:function(e,n,t,_,r){e.clearColor(n,t,_,r)},__wbg_clearColor_f16a5dae33fe425d:function(e,n,t,_,r){e.clearColor(n,t,_,r)},__wbg_clearInterval_c75df0651e74fbb8:function(e,n){e.clearInterval(n)},__wbg_clear_4d801d0d054c3579:function(e,n){e.clear(n>>>0)},__wbg_clear_7187030f892c5ca0:function(e,n){e.clear(n>>>0)},__wbg_clientX_a3c5f4ff30e91264:function(e){return e.clientX},__wbg_clientX_ed7d2827ca30c165:function(e){return e.clientX},__wbg_clientY_79ab4711d0597b2c:function(e){return e.clientY},__wbg_clientY_e28509acb9b4a42a:function(e){return e.clientY},__wbg_clipboardData_018789e461e23aaa:function(e){const n=e.clipboardData;return O(n)?0:f(n)},__wbg_clipboard_98c5a32249fa8416:function(e){return e.clipboard},__wbg_colorMask_177d9762658e5e28:function(e,n,t,_,r){e.colorMask(0!==n,0!==t,0!==_,0!==r)},__wbg_colorMask_7a8dbc86e7376a9b:function(e,n,t,_,r){e.colorMask(0!==n,0!==t,0!==_,0!==r)},__wbg_compileShader_63b824e86bb00b8f:function(e,n){e.compileShader(n)},__wbg_compileShader_94718a93495d565d:function(e,n){e.compileShader(n)},__wbg_contentBoxSize_328a5cd3e7d063a9:function(e){return e.contentBoxSize},__wbg_contentRect_79b98e4d4f4728a4:function(e){return e.contentRect},__wbg_createBuffer_26534c05e01b8559:function(e){const n=e.createBuffer();return O(n)?0:f(n)},__wbg_createBuffer_c4ec897aacc1b91c:function(e){const n=e.createBuffer();return O(n)?0:f(n)},__wbg_createElement_49f60fdcaae809c8:function(){return T(function(e,n,t){return e.createElement(k(n,t))},arguments)},__wbg_createProgram_98aaa91f7c81c5e2:function(e){const n=e.createProgram();return O(n)?0:f(n)},__wbg_createProgram_9b7710a1f2701c2c:function(e){const n=e.createProgram();return O(n)?0:f(n)},__wbg_createShader_e3ac08ed8c5b14b2:function(e,n){const t=e.createShader(n>>>0);return O(t)?0:f(t)},__wbg_createShader_f2b928ca9a426b14:function(e,n){const t=e.createShader(n>>>0);return O(t)?0:f(t)},__wbg_createTexture_16d2c8a3d7d4a75a:function(e){const n=e.createTexture();return O(n)?0:f(n)},__wbg_createTexture_f9451a82c7527ce2:function(e){const n=e.createTexture();return O(n)?0:f(n)},__wbg_createVertexArrayOES_bd76ceee6ab9b95e:function(e){const n=e.createVertexArrayOES();return O(n)?0:f(n)},__wbg_createVertexArray_ad5294951ae57497:function(e){const n=e.createVertexArray();return O(n)?0:f(n)},__wbg_ctrlKey_09a1b54d77dea92b:function(e){return e.ctrlKey},__wbg_ctrlKey_96ff94f8b18636a3:function(e){return e.ctrlKey},__wbg_dataTransfer_d924a622fbe51b06:function(e){const n=e.dataTransfer;return O(n)?0:f(n)},__wbg_data_acd149571f3b741a:function(e,n){const t=n.data;var _=O(t)?0:D(t,q.__wbindgen_malloc,q.__wbindgen_realloc),r=$;x().setInt32(e+4,r,!0),x().setInt32(e+0,_,!0)},__wbg_debug_21bee8b7f5110d62:function(e,n){console.debug(k(e,n))},__wbg_deleteBuffer_22fcc93912cbf659:function(e,n){e.deleteBuffer(n)},__wbg_deleteBuffer_ab099883c168644d:function(e,n){e.deleteBuffer(n)},__wbg_deleteProgram_9298fb3e3c1d3a78:function(e,n){e.deleteProgram(n)},__wbg_deleteProgram_f354e79b8cae8076:function(e,n){e.deleteProgram(n)},__wbg_deleteShader_aaf3b520a64d5d9d:function(e,n){e.deleteShader(n)},__wbg_deleteShader_ff70ca962883e241:function(e,n){e.deleteShader(n)},__wbg_deleteTexture_2be78224e5584a8b:function(e,n){e.deleteTexture(n)},__wbg_deleteTexture_9d411c0e60ffa324:function(e,n){e.deleteTexture(n)},__wbg_deltaMode_a1d1df711e44cefc:function(e){return e.deltaMode},__wbg_deltaX_f0ca9116db5f7bc1:function(e){return e.deltaX},__wbg_deltaY_eb94120160ac821c:function(e){return e.deltaY},__wbg_detachShader_0837532df5c988ca:function(e,n,t){e.detachShader(n,t)},__wbg_detachShader_1ba1e8cb604560a9:function(e,n,t){e.detachShader(n,t)},__wbg_devicePixelContentBoxSize_8f39437eab7f03ea:function(e){return e.devicePixelContentBoxSize},__wbg_devicePixelRatio_5c458affc89fc209:function(e){return e.devicePixelRatio},__wbg_disableVertexAttribArray_24a020060006b10f:function(e,n){e.disableVertexAttribArray(n>>>0)},__wbg_disableVertexAttribArray_4bac633c27bae599:function(e,n){e.disableVertexAttribArray(n>>>0)},__wbg_disable_7fe6fb3e97717f88:function(e,n){e.disable(n>>>0)},__wbg_disable_bd37bdcca1764aea:function(e,n){e.disable(n>>>0)},__wbg_disconnect_5202f399852258c0:function(e){e.disconnect()},__wbg_document_ee35a3d3ae34ef6c:function(e){const n=e.document;return O(n)?0:f(n)},__wbg_drawElements_94f6577070a45da2:function(e,n,t,_,r){e.drawElements(n>>>0,t,_>>>0,r)},__wbg_drawElements_ea2abffa9d1dc736:function(e,n,t,_,r){e.drawElements(n>>>0,t,_>>>0,r)},__wbg_elementFromPoint_c626cb9a65328c63:function(e,n,t){const _=e.elementFromPoint(n,t);return O(_)?0:f(_)},__wbg_elementFromPoint_fcddd007465b6e73:function(e,n,t){const _=e.elementFromPoint(n,t);return O(_)?0:f(_)},__wbg_enableVertexAttribArray_475e06c31777296d:function(e,n){e.enableVertexAttribArray(n>>>0)},__wbg_enableVertexAttribArray_aa6e40408261eeb9:function(e,n){e.enableVertexAttribArray(n>>>0)},__wbg_enable_d1ac04dfdd2fb3ae:function(e,n){e.enable(n>>>0)},__wbg_enable_fee40f19b7053ea3:function(e,n){e.enable(n>>>0)},__wbg_error_541113e32ba1ecbd:function(e,n){let t,_;try{t=e,_=n,console.error(k(e,n))}finally{q.__wbindgen_free(t,_,1)}},__wbg_files_c7608e3fb8eb4d07:function(e){const n=e.files;return O(n)?0:f(n)},__wbg_focus_128ff465f65677cc:function(){return T(function(e){e.focus()},arguments)},__wbg_force_6acda126382fc3c0:function(e){return e.force},__wbg_generateMipmap_5f9058c19cf7c6c1:function(e,n){e.generateMipmap(n>>>0)},__wbg_generateMipmap_c3aad515dd61ffd6:function(e,n){e.generateMipmap(n>>>0)},__wbg_getAttribLocation_16c406a68275ed4b:function(e,n,t,_){return e.getAttribLocation(n,k(t,_))},__wbg_getAttribLocation_7321cf2d67e036f6:function(e,n,t,_){return e.getAttribLocation(n,k(t,_))},__wbg_getBoundingClientRect_b5c8c34d07878818:function(e){return e.getBoundingClientRect()},__wbg_getComputedStyle_2d1f9dfe4ee7e0b9:function(){return T(function(e,n){const t=e.getComputedStyle(n);return O(t)?0:f(t)},arguments)},__wbg_getContext_2a5764d48600bc43:function(){return T(function(e,n,t){const _=e.getContext(k(n,t));return O(_)?0:f(_)},arguments)},__wbg_getData_2aada4ab05d445e3:function(){return T(function(e,n,t,_){const r=D(n.getData(k(t,_)),q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},arguments)},__wbg_getError_1182114725905664:function(e){return e.getError()},__wbg_getError_bba8594facbfd5e1:function(e){return e.getError()},__wbg_getExtension_388df13305a298af:function(){return T(function(e,n,t){const _=e.getExtension(k(n,t));return O(_)?0:f(_)},arguments)},__wbg_getExtension_3c0cb5ae01bb4b17:function(){return T(function(e,n,t){const _=e.getExtension(k(n,t));return O(_)?0:f(_)},arguments)},__wbg_getItem_0c792d344808dcf5:function(){return T(function(e,n,t,_){const r=n.getItem(k(t,_));var c=O(r)?0:D(r,q.__wbindgen_malloc,q.__wbindgen_realloc),o=$;x().setInt32(e+4,o,!0),x().setInt32(e+0,c,!0)},arguments)},__wbg_getParameter_1ecb910cfdd21f88:function(){return T(function(e,n){return e.getParameter(n>>>0)},arguments)},__wbg_getParameter_2e1f97ecaab76274:function(){return T(function(e,n){return e.getParameter(n>>>0)},arguments)},__wbg_getProgramInfoLog_2ffa30e3abb8b5c2:function(e,n,t){const _=n.getProgramInfoLog(t);var r=O(_)?0:D(_,q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},__wbg_getProgramInfoLog_dbfda4b6e7eb1b37:function(e,n,t){const _=n.getProgramInfoLog(t);var r=O(_)?0:D(_,q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},__wbg_getProgramParameter_43fbc6d2613c08b3:function(e,n,t){return e.getProgramParameter(n,t>>>0)},__wbg_getProgramParameter_92e4540ca9da06b2:function(e,n,t){return e.getProgramParameter(n,t>>>0)},__wbg_getPropertyValue_d6911b2a1f9acba9:function(){return T(function(e,n,t,_){const r=D(n.getPropertyValue(k(t,_)),q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},arguments)},__wbg_getRootNode_193e544ed534e810:function(e){return e.getRootNode()},__wbg_getShaderInfoLog_9991e9e77b0c6805:function(e,n,t){const _=n.getShaderInfoLog(t);var r=O(_)?0:D(_,q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},__wbg_getShaderInfoLog_9e0b96da4b13ae49:function(e,n,t){const _=n.getShaderInfoLog(t);var r=O(_)?0:D(_,q.__wbindgen_malloc,q.__wbindgen_realloc),c=$;x().setInt32(e+4,c,!0),x().setInt32(e+0,r,!0)},__wbg_getShaderParameter_786fd84f85720ca8:function(e,n,t){return e.getShaderParameter(n,t>>>0)},__wbg_getShaderParameter_afa4a3dd9dd397c1:function(e,n,t){return e.getShaderParameter(n,t>>>0)},__wbg_getSupportedExtensions_57142a6b598d7787:function(e){const n=e.getSupportedExtensions();return O(n)?0:f(n)},__wbg_getSupportedExtensions_c37f749a951eba04:function(e){const n=e.getSupportedExtensions();return O(n)?0:f(n)},__wbg_getUniformLocation_71c070e6644669ad:function(e,n,t,_){const r=e.getUniformLocation(n,k(t,_));return O(r)?0:f(r)},__wbg_getUniformLocation_d06b3a5b3c60e95c:function(e,n,t,_){const r=e.getUniformLocation(n,k(t,_));return O(r)?0:f(r)},__wbg_get_4fe487fe39ff3573:function(e,n){const t=e[n>>>0];return O(t)?0:f(t)},__wbg_get_5bd55a138a9e899f:function(e,n){const t=e[n>>>0];return O(t)?0:f(t)},__wbg_get_9a1f194723936140:function(e,n){const t=e[n>>>0];return O(t)?0:f(t)},__wbg_get_9b94d73e6221f75c:function(e,n){return e[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return T(function(e,n){return Reflect.get(e,n)},arguments)},__wbg_get_index_bbec7c126dd67fce:function(e,n){return e[n>>>0]},__wbg_get_index_efdc399e215e9164:function(e,n){return e[n>>>0]},__wbg_hash_90eadad0e1447454:function(){return T(function(e,n){const t=D(n.hash,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_height_38750dc6de41ee75:function(e){return e.height},__wbg_height_c2027cf67d1c9b11:function(e){return e.height},__wbg_hidden_8ce6a98b8c12451c:function(e){return e.hidden},__wbg_host_92d607209031b72c:function(){return T(function(e,n){const t=D(n.host,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_hostname_0c450e33386895ba:function(){return T(function(e,n){const t=D(n.hostname,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_href_67854c3dd511f6f3:function(){return T(function(e,n){const t=D(n.href,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_id_ff64a5892a30d4e9:function(e,n){const t=D(n.id,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_identifier_5feaba602edf9981:function(e){return e.identifier},__wbg_info_2e7d618e9cb88d77:function(e,n){console.info(k(e,n))},__wbg_inlineSize_3e4e7e8c813884fd:function(e){return e.inlineSize},__wbg_instanceof_Document_50f5ff170c1a7826:function(e){let n;try{n=e instanceof Document}catch(e){n=!1}return n},__wbg_instanceof_Element_9e662f49ab6c6beb:function(e){let n;try{n=e instanceof Element}catch(e){n=!1}return n},__wbg_instanceof_HtmlElement_5abfac207260fd6f:function(e){let n;try{n=e instanceof HTMLElement}catch(e){n=!1}return n},__wbg_instanceof_HtmlInputElement_c10b7260b4e0710a:function(e){let n;try{n=e instanceof HTMLInputElement}catch(e){n=!1}return n},__wbg_instanceof_ResizeObserverEntry_16bca25646e32231:function(e){let n;try{n=e instanceof ResizeObserverEntry}catch(e){n=!1}return n},__wbg_instanceof_ResizeObserverSize_cee71be747d9d29e:function(e){let n;try{n=e instanceof ResizeObserverSize}catch(e){n=!1}return n},__wbg_instanceof_ShadowRoot_5285adde3587c73e:function(e){let n;try{n=e instanceof ShadowRoot}catch(e){n=!1}return n},__wbg_instanceof_WebGl2RenderingContext_4a08a94517ed5240:function(e){let n;try{n=e instanceof WebGL2RenderingContext}catch(e){n=!1}return n},__wbg_instanceof_WebGlRenderingContext_53391327f021e3ab:function(e){let n;try{n=e instanceof WebGLRenderingContext}catch(e){n=!1}return n},__wbg_instanceof_Window_ed49b2db8df90359:function(e){let n;try{n=e instanceof Window}catch(e){n=!1}return n},__wbg_isComposing_1eafc5b1376f01d1:function(e){return e.isComposing},__wbg_isComposing_9323fa62320f5fc0:function(e){return e.isComposing},__wbg_isSecureContext_1e186b850f07cfb3:function(e){return e.isSecureContext},__wbg_is_f29129f676e5410c:function(e,n){return Object.is(e,n)},__wbg_item_98b174cdde606b25:function(e,n){const t=e.item(n>>>0);return O(t)?0:f(t)},__wbg_items_4130211600bde9a4:function(e){return e.items},__wbg_keyCode_155291a11654466e:function(e){return e.keyCode},__wbg_key_d41e8e825e6bb0e9:function(e,n){const t=D(n.key,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_lastModified_a5cfce993c651681:function(e){return e.lastModified},__wbg_left_3b7c3c1030d5ca7a:function(e){return e.left},__wbg_length_0a185f5e6b78bcc5:function(e){return e.length},__wbg_length_182cff298f8d099b:function(e){return e.length},__wbg_length_1e8b0a6e52c08b9a:function(e){return e.length},__wbg_length_25b2ccd77d48ecb1:function(e){return e.length},__wbg_length_32ed9a279acd054c:function(e){return e.length},__wbg_length_35a7bace40f36eac:function(e){return e.length},__wbg_length_500e25dbc316fd13:function(e){return e.length},__wbg_length_8ce069301528a78d:function(e){return e.length},__wbg_length_9a7876c9728a0979:function(e){return e.length},__wbg_length_9efde69e99cd464e:function(e){return e.length},__wbg_length_b1593d937f31cef9:function(e){return e.length},__wbg_length_dd7a84decbd9cde7:function(e){return e.length},__wbg_length_e2449a254c768bd8:function(e){return e.length},__wbg_length_f7386240689107f3:function(e){return e.length},__wbg_linkProgram_6600dd2c0863bbfd:function(e,n){e.linkProgram(n)},__wbg_linkProgram_be6b825cf66d177b:function(e,n){e.linkProgram(n)},__wbg_localStorage_a22d31b9eacc4594:function(){return T(function(e){const n=e.localStorage;return O(n)?0:f(n)},arguments)},__wbg_location_df7ca06c93e51763:function(e){return e.location},__wbg_matchMedia_91d4fc9729dc3c84:function(){return T(function(e,n,t){const _=e.matchMedia(k(n,t));return O(_)?0:f(_)},arguments)},__wbg_matches_4b5c22bd830f7bb3:function(e){return e.matches},__wbg_metaKey_374999c340f70626:function(e){return e.metaKey},__wbg_metaKey_67113fb40365d736:function(e){return e.metaKey},__wbg_name_171cddfde96a29c8:function(e,n){const t=D(n.name,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_navigator_43be698ba96fc088:function(e){return e.navigator},__wbg_new_1e41d4ad75c60d04:function(e){return new Int16Array(e)},__wbg_new_2e2be9617c4407d5:function(){return T(function(e){return new ResizeObserver(e)},arguments)},__wbg_new_358bba68c164c0c7:function(){return new Error},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_4e06668820182522:function(e){return new Uint16Array(e)},__wbg_new_62561633336f4cb6:function(e){return new BigUint64Array(e)},__wbg_new_6860731fa32d2e93:function(e){return new Int8Array(e)},__wbg_new_72c627ba80de1c21:function(e){return new Int32Array(e)},__wbg_new_9ccae8c3d6099588:function(e){return new Float32Array(e)},__wbg_new_b5d9e2fb389fef91:function(e,n){try{var t={a:e,b:n};const _=new Promise((e,n)=>{const _=t.a;t.a=0;try{return function(e,n,t,_){q.wasm_bindgen__convert__closures_____invoke__h5ad7d9a44532e3a5(e,n,t,_)}(_,t.b,e,n)}finally{t.a=_}});return _}finally{t.a=t.b=0}},__wbg_new_d17d15ba1d2042a1:function(e){return new Float64Array(e)},__wbg_new_d9eada177dd1dc88:function(e){return new BigInt64Array(e)},__wbg_new_dd2b680c8bf6ae29:function(e){return new Uint8Array(e)},__wbg_new_ebe5c47b71282e03:function(e){return new Uint32Array(e)},__wbg_new_from_slice_a3d2629dc1826784:function(e,n){return new Uint8Array(y(e,n))},__wbg_new_no_args_1c7c842f08d00ebb:function(e,n){return new Function(k(e,n))},__wbg_new_with_length_63f2683cc2521026:function(e){return new Float32Array(e>>>0)},__wbg_new_with_length_6523745c0bd32809:function(e){return new Float64Array(e>>>0)},__wbg_new_with_record_from_str_to_blob_promise_17d3b40dbba6c99d:function(){return T(function(e){return new ClipboardItem(e)},arguments)},__wbg_new_with_text_c4caedd46c3e5f01:function(){return T(function(e,n){return new SpeechSynthesisUtterance(k(e,n))},arguments)},__wbg_new_with_u8_array_sequence_and_options_cc0f8f2c1ef62e68:function(){return T(function(e,n){return new Blob(e,n)},arguments)},__wbg_now_2c95c9de01293173:function(e){return e.now()},__wbg_now_ebffdf7e580f210d:function(e){return e.now()},__wbg_observe_1ae37077cf10b11b:function(e,n,t){e.observe(n,t)},__wbg_of_f915f7cd925b21a5:function(e){return Array.of(e)},__wbg_offsetTop_e3d5b0a34b3200fc:function(e){return e.offsetTop},__wbg_open_ea44acde696d3b0c:function(){return T(function(e,n,t,_,r){const c=e.open(k(n,t),k(_,r));return O(c)?0:f(c)},arguments)},__wbg_origin_a9c891fa602b4d40:function(){return T(function(e,n){const t=D(n.origin,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_performance_06f12ba62483475d:function(e){const n=e.performance;return O(n)?0:f(n)},__wbg_performance_7a3ffd0b17f663ad:function(e){return e.performance},__wbg_pixelStorei_2a65936c11b710fe:function(e,n,t){e.pixelStorei(n>>>0,t)},__wbg_pixelStorei_f7cc498f52d523f1:function(e,n,t){e.pixelStorei(n>>>0,t)},__wbg_port_dc56bc76d55c2b55:function(){return T(function(e,n){const t=D(n.port,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_preventDefault_cdcfcd7e301b9702:function(e){e.preventDefault()},__wbg_protocol_4c3b13957de7d079:function(){return T(function(e,n){const t=D(n.protocol,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_prototypesetcall_2adb484744144f7f:function(e,n,t){Uint16Array.prototype.set.call(m(e,n),t)},__wbg_prototypesetcall_4846d4aa386c936f:function(e,n,t){Uint32Array.prototype.set.call(p(e,n),t)},__wbg_prototypesetcall_4f65a157230198d8:function(e,n,t){Int8Array.prototype.set.call(h(e,n),t)},__wbg_prototypesetcall_55c7bc6bcd6a9457:function(e,n,t){Int16Array.prototype.set.call(l(e,n),t)},__wbg_prototypesetcall_aefe6319f589ab4b:function(e,n,t){Float64Array.prototype.set.call(s(e,n),t)},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(e,n,t){Uint8Array.prototype.set.call(y(e,n),t)},__wbg_prototypesetcall_c7e6a26aeade796d:function(e,n,t){Float32Array.prototype.set.call(d(e,n),t)},__wbg_prototypesetcall_f8118a9f36fee41e:function(e,n,t){Int32Array.prototype.set.call(w(e,n),t)},__wbg_push_8ffdcb2063340ba5:function(e,n){return e.push(n)},__wbg_queueMicrotask_0aa0a927f78f5d98:function(e){return e.queueMicrotask},__wbg_queueMicrotask_5bb536982f78a56f:function(e){queueMicrotask(e)},__wbg_readPixels_55b18304384e073d:function(){return T(function(e,n,t,_,r,c,o,a){e.readPixels(n,t,_,r,c>>>0,o>>>0,a)},arguments)},__wbg_readPixels_6ea8e288a8673282:function(){return T(function(e,n,t,_,r,c,o,a){e.readPixels(n,t,_,r,c>>>0,o>>>0,a)},arguments)},__wbg_readPixels_95b2464a7bb863a2:function(){return T(function(e,n,t,_,r,c,o,a){e.readPixels(n,t,_,r,c>>>0,o>>>0,a)},arguments)},__wbg_removeEventListener_e63328781a5b9af9:function(){return T(function(e,n,t,_){e.removeEventListener(k(n,t),_)},arguments)},__wbg_remove_31c39325eee968fc:function(e){e.remove()},__wbg_requestAnimationFrame_43682f8e1c5e5348:function(){return T(function(e,n){return e.requestAnimationFrame(n)},arguments)},__wbg_resolve_002c4b7d9d8f6b64:function(e){return Promise.resolve(e)},__wbg_right_154af6c2b1bf0c89:function(e){return e.right},__wbg_scissor_2ff8f18f05a6d408:function(e,n,t,_,r){e.scissor(n,t,_,r)},__wbg_scissor_b870b1434a9c25b4:function(e,n,t,_,r){e.scissor(n,t,_,r)},__wbg_search_1b385e665c888780:function(){return T(function(e,n){const t=D(n.search,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_setAttribute_cc8e4c8a2a008508:function(){return T(function(e,n,t,_,r){e.setAttribute(k(n,t),k(_,r))},arguments)},__wbg_setItem_cf340bb2edbd3089:function(){return T(function(e,n,t,_,r){e.setItem(k(n,t),k(_,r))},arguments)},__wbg_setProperty_cbb25c4e74285b39:function(){return T(function(e,n,t,_,r){e.setProperty(k(n,t),k(_,r))},arguments)},__wbg_set_6cb8631f80447a67:function(){return T(function(e,n,t){return Reflect.set(e,n,t)},arguments)},__wbg_set_a7e6b10165583fc4:function(e,n,t){e.set(s(n,t))},__wbg_set_autofocus_7125a4a223a1d570:function(){return T(function(e,n){e.autofocus=0!==n},arguments)},__wbg_set_box_73d3355c6f95f24d:function(e,n){e.box=i[n]},__wbg_set_f8edeec46569cc70:function(e,n,t){e.set(d(n,t))},__wbg_set_height_f21f985387070100:function(e,n){e.height=n>>>0},__wbg_set_once_56ba1b87a9884c15:function(e,n){e.once=0!==n},__wbg_set_pitch_91774e1f0bbc52fa:function(e,n){e.pitch=n},__wbg_set_rate_63dfcd5b7bcdbc07:function(e,n){e.rate=n},__wbg_set_tabIndex_eb89b6ffe111cd2c:function(e,n){e.tabIndex=n},__wbg_set_type_148de20768639245:function(e,n,t){e.type=k(n,t)},__wbg_set_type_abc37fa3c213f717:function(e,n,t){e.type=k(n,t)},__wbg_set_value_62a965e38b22b38c:function(e,n,t){e.value=k(n,t)},__wbg_set_volume_789cc971c19a2e24:function(e,n){e.volume=n},__wbg_set_width_d60bc4f2f20c56a4:function(e,n){e.width=n>>>0},__wbg_shaderSource_32425cfe6e5a1e52:function(e,n,t,_){e.shaderSource(n,k(t,_))},__wbg_shaderSource_8f4bda03f70359df:function(e,n,t,_){e.shaderSource(n,k(t,_))},__wbg_shiftKey_5558a3288542c985:function(e){return e.shiftKey},__wbg_shiftKey_564be91ec842bcc4:function(e){return e.shiftKey},__wbg_size_e05d31cc6049815f:function(e){return e.size},__wbg_speak_67796aeb0b5fd194:function(e,n){e.speak(n)},__wbg_speechSynthesis_95b40351572bb250:function(){return T(function(e){return e.speechSynthesis},arguments)},__wbg_stack_d87a83f5bc721084:function(e,n){const t=D(n.stack,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_static_accessor_GLOBAL_12837167ad935116:function(){const e=void 0===t.g?null:t.g;return O(e)?0:f(e)},__wbg_static_accessor_GLOBAL_THIS_e628e89ab3b1c95f:function(){const e="undefined"==typeof globalThis?null:globalThis;return O(e)?0:f(e)},__wbg_static_accessor_SELF_a621d3dfbb60d0ce:function(){const e="undefined"==typeof self?null:self;return O(e)?0:f(e)},__wbg_static_accessor_WINDOW_f8727f0cf888e0bd:function(){const e="undefined"==typeof window?null:window;return O(e)?0:f(e)},__wbg_stopPropagation_6e5e2a085214ac63:function(e){e.stopPropagation()},__wbg_style_0b7c9bd318f8b807:function(e){return e.style},__wbg_texImage2D_087ef94df78081f0:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_texImage2D_13414a4692836804:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_texImage2D_e71049312f3172d9:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_texParameteri_0d45be2c88d6bad8:function(e,n,t,_){e.texParameteri(n>>>0,t>>>0,_)},__wbg_texParameteri_ec937d2161018946:function(e,n,t,_){e.texParameteri(n>>>0,t>>>0,_)},__wbg_texSubImage2D_19ae4cadb809f264:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texSubImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_texSubImage2D_d17a39cdec4a3495:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texSubImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_texSubImage2D_edf5bd70fda3feaf:function(){return T(function(e,n,t,_,r,c,o,a,i,b){e.texSubImage2D(n>>>0,t,_,r,c,o,a>>>0,i>>>0,b)},arguments)},__wbg_then_0d9fe2c7b1857d32:function(e,n,t){return e.then(n,t)},__wbg_then_b9e7b3b5f1a9e1b5:function(e,n){return e.then(n)},__wbg_top_3d27ff6f468cf3fc:function(e){return e.top},__wbg_touches_55ce167b42bcdf52:function(e){return e.touches},__wbg_type_9a3860e6dd3a4156:function(e,n){const t=D(n.type,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_type_e8c7fade6d73451b:function(e,n){const t=D(n.type,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_uniform1i_9f3f72dbcb98ada9:function(e,n,t){e.uniform1i(n,t)},__wbg_uniform1i_e9aee4b9e7fe8c4b:function(e,n,t){e.uniform1i(n,t)},__wbg_uniform2f_1887b1268f65bfee:function(e,n,t,_){e.uniform2f(n,t,_)},__wbg_uniform2f_2aa77a6395d47f1d:function(e,n,t,_){e.uniform2f(n,t,_)},__wbg_useProgram_e82c1a5f87d81579:function(e,n){e.useProgram(n)},__wbg_useProgram_fe720ade4d3b6edb:function(e,n){e.useProgram(n)},__wbg_userAgent_34463fd660ba4a2a:function(){return T(function(e,n){const t=D(n.userAgent,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},arguments)},__wbg_value_e506a07878790ca0:function(e,n){const t=D(n.value,q.__wbindgen_malloc,q.__wbindgen_realloc),_=$;x().setInt32(e+4,_,!0),x().setInt32(e+0,t,!0)},__wbg_vertexAttribPointer_75f6ff47f6c9f8cb:function(e,n,t,_,r,c,o){e.vertexAttribPointer(n>>>0,t,_>>>0,0!==r,c,o)},__wbg_vertexAttribPointer_adbd1853cce679ad:function(e,n,t,_,r,c,o){e.vertexAttribPointer(n>>>0,t,_>>>0,0!==r,c,o)},__wbg_viewerhandle_new:function(e){return _.__wrap(e)},__wbg_viewport_174ae1c2209344ae:function(e,n,t,_,r){e.viewport(n,t,_,r)},__wbg_viewport_df236eac68bc7467:function(e,n,t,_,r){e.viewport(n,t,_,r)},__wbg_warn_11b4e4f7bff9ffb7:function(e,n){console.warn(k(e,n))},__wbg_width_5f66bde2e810fbde:function(e){return e.width},__wbg_width_7444cca5dfea0645:function(e){return e.width},__wbg_writeText_be1c3b83a3e46230:function(e,n,t){return e.writeText(k(n,t))},__wbg_write_d429ce72e918e180:function(e,n){return e.write(n)},__wbindgen_cast_0000000000000001:function(e,n){return F(e,n,q.wasm_bindgen__closure__destroy__h293211c26b6d7263,o)},__wbindgen_cast_0000000000000002:function(e,n){return F(e,n,q.wasm_bindgen__closure__destroy__h293211c26b6d7263,o)},__wbindgen_cast_0000000000000003:function(e,n){return F(e,n,q.wasm_bindgen__closure__destroy__h293211c26b6d7263,c)},__wbindgen_cast_0000000000000004:function(e,n){return F(e,n,q.wasm_bindgen__closure__destroy__h905b98c3d456fd30,a)},__wbindgen_cast_0000000000000005:function(e){return e},__wbindgen_cast_0000000000000006:function(e,n){return d(e,n)},__wbindgen_cast_0000000000000007:function(e,n){return l(e,n)},__wbindgen_cast_0000000000000008:function(e,n){return w(e,n)},__wbindgen_cast_0000000000000009:function(e,n){return h(e,n)},__wbindgen_cast_000000000000000a:function(e,n){return m(e,n)},__wbindgen_cast_000000000000000b:function(e,n){return p(e,n)},__wbindgen_cast_000000000000000c:function(e,n){return y(e,n)},__wbindgen_cast_000000000000000d:function(e,n){return k(e,n)},__wbindgen_init_externref_table:function(){const e=q.__wbindgen_externrefs,n=e.grow(4);e.set(0,void 0),e.set(n+0,void 0),e.set(n+1,null),e.set(n+2,!0),e.set(n+3,!1)}};return{__proto__:null,"./viewarr_bg.js":e}}function c(e,n){const t=q.wasm_bindgen__convert__closures_____invoke__h440c9e74639da121(e,n);if(t[1])throw z(t[0])}function o(e,n,t){q.wasm_bindgen__convert__closures_____invoke__hbce3c904773be13e(e,n,t)}function a(e,n,t){q.wasm_bindgen__convert__closures_____invoke__hfb9f1a9994119dd6(e,n,t)}Symbol.dispose&&(_.prototype[Symbol.dispose]=_.prototype.free);const i=["border-box","content-box","device-pixel-content-box"],b="undefined"==typeof FinalizationRegistry?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>q.__wbg_viewerhandle_free(e>>>0,1));function f(e){const n=q.__externref_table_alloc();return q.__wbindgen_externrefs.set(n,e),n}const u="undefined"==typeof FinalizationRegistry?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>e.dtor(e.a,e.b));function g(e){const n=typeof e;if("number"==n||"boolean"==n||null==e)return`${e}`;if("string"==n)return`"${e}"`;if("symbol"==n){const n=e.description;return null==n?"Symbol":`Symbol(${n})`}if("function"==n){const n=e.name;return"string"==typeof n&&n.length>0?`Function(${n})`:"Function"}if(Array.isArray(e)){const n=e.length;let t="[";n>0&&(t+=g(e[0]));for(let _=1;_<n;_++)t+=", "+g(e[_]);return t+="]",t}const t=/\[object ([^\]]+)\]/.exec(toString.call(e));let _;if(!(t&&t.length>1))return toString.call(e);if(_=t[1],"Object"==_)try{return"Object("+JSON.stringify(e)+")"}catch(e){return"Object"}return e instanceof Error?`${e.name}: ${e.message}\n${e.stack}`:_}function d(e,n){return e>>>=0,S().subarray(e/4,e/4+n)}function s(e,n){return e>>>=0,(null!==A&&0!==A.byteLength||(A=new Float64Array(q.memory.buffer)),A).subarray(e/8,e/8+n)}function l(e,n){return e>>>=0,(null!==P&&0!==P.byteLength||(P=new Int16Array(q.memory.buffer)),P).subarray(e/2,e/2+n)}function w(e,n){return e>>>=0,(null!==C&&0!==C.byteLength||(C=new Int32Array(q.memory.buffer)),C).subarray(e/4,e/4+n)}function h(e,n){return e>>>=0,(null!==E&&0!==E.byteLength||(E=new Int8Array(q.memory.buffer)),E).subarray(e/1,e/1+n)}function m(e,n){return e>>>=0,(null!==R&&0!==R.byteLength||(R=new Uint16Array(q.memory.buffer)),R).subarray(e/2,e/2+n)}function p(e,n){return e>>>=0,(null!==M&&0!==M.byteLength||(M=new Uint32Array(q.memory.buffer)),M).subarray(e/4,e/4+n)}function y(e,n){return e>>>=0,B().subarray(e/1,e/1+n)}let v=null;function x(){return(null===v||!0===v.buffer.detached||void 0===v.buffer.detached&&v.buffer!==q.memory.buffer)&&(v=new DataView(q.memory.buffer)),v}let I=null;function S(){return null!==I&&0!==I.byteLength||(I=new Float32Array(q.memory.buffer)),I}let A=null,P=null,C=null,E=null;function k(e,n){return function(e,n){return W+=n,W>=U&&(V=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),V.decode(),W=n),V.decode(B().subarray(e,e+n))}(e>>>=0,n)}let R=null,M=null,L=null;function B(){return null!==L&&0!==L.byteLength||(L=new Uint8Array(q.memory.buffer)),L}function T(e,n){try{return e.apply(this,n)}catch(e){const n=f(e);q.__wbindgen_exn_store(n)}}function O(e){return null==e}function F(e,n,t,_){const r={a:e,b:n,cnt:1,dtor:t},c=(...e)=>{r.cnt++;const n=r.a;r.a=0;try{return _(n,r.b,...e)}finally{r.a=n,c._wbg_cb_unref()}};return c._wbg_cb_unref=()=>{0===--r.cnt&&(r.dtor(r.a,r.b),r.a=0,u.unregister(r))},u.register(c,r,r),c}function D(e,n,t){if(void 0===t){const t=K.encode(e),_=n(t.length,1)>>>0;return B().subarray(_,_+t.length).set(t),$=t.length,_}let _=e.length,r=n(_,1)>>>0;const c=B();let o=0;for(;o<_;o++){const n=e.charCodeAt(o);if(n>127)break;c[r+o]=n}if(o!==_){0!==o&&(e=e.slice(o)),r=t(r,_,_=o+3*e.length,1)>>>0;const n=B().subarray(r+o,r+_);o+=K.encodeInto(e,n).written,r=t(r,_,o,1)>>>0}return $=o,r}function z(e){const n=q.__wbindgen_externrefs.get(e);return q.__externref_table_dealloc(e),n}let V=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});V.decode();const U=2146435072;let W=0;const K=new TextEncoder;"encodeInto"in K||(K.encodeInto=function(e,n){const t=K.encode(e);return n.set(t),{read:e.length,written:t.length}});let j,q,$=0;function G(e,n){return q=e.exports,j=n,v=null,I=null,A=null,P=null,C=null,E=null,R=null,M=null,L=null,q.__wbindgen_start(),q}function H(e){if(void 0!==q)return q;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module:e}=e):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const n=r();return e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e)),G(new WebAssembly.Instance(e,n),e)}async function X(e){if(void 0!==q)return q;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module_or_path:e}=e):console.warn("using deprecated parameters for the initialization function; pass a single object instead")),void 0===e&&(e=new URL(t(119),t.b));const n=r();("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e));const{instance:_,module:c}=await async function(e,n){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,n)}catch(n){if(!e.ok||!function(e){switch(e){case"basic":case"cors":case"default":return!0}return!1}(e.type)||"application/wasm"===e.headers.get("Content-Type"))throw n;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",n)}const t=await e.arrayBuffer();return await WebAssembly.instantiate(t,n)}{const t=await WebAssembly.instantiate(e,n);return t instanceof WebAssembly.Instance?{instance:t,module:e}:t}}(await e,n);return G(_,c)}},119(e,n,t){e.exports=t.p+"14e2ce1ce9dea8d282d3.wasm"}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkfitsview=self.webpackChunkfitsview||[]).push([[764],{764(e,t,o){o.r(t),o.d(t,{clearCallbacks:()=>I,createViewer:()=>a,default:()=>H,destroyViewer:()=>c,getActiveViewers:()=>l,getBias:()=>u,getColormap:()=>M,getColormapReversed:()=>k,getContrast:()=>g,getMarkers:()=>Z,getOverlayMessage:()=>A,getPivotPoint:()=>P,getRotation:()=>b,getShowPivotMarker:()=>S,getStretchMode:()=>m,getValueRange:()=>$,getViewBounds:()=>y,getZoom:()=>f,hasViewer:()=>d,onClick:()=>z,onStateChange:()=>T,setBias:()=>v,setColormap:()=>E,setColormapReversed:()=>N,setContrast:()=>h,setImageData:()=>s,setMarkers:()=>D,setOverlayMessage:()=>O,setPivotPoint:()=>x,setRotation:()=>R,setShowPivotMarker:()=>B,setStretchMode:()=>p,setValueRange:()=>V,setViewBounds:()=>C,setViewerState:()=>L,setZoom:()=>w});let n=null,r=null;const i=new Map;async function a(e){const t=document.getElementById(e);if(!t)throw new Error(`Container element with id "${e}" not found`);if(i.has(e))return void console.warn(`Viewer already exists for container "${e}"`);t.innerHTML="";const a=document.createElement("div");a.style.cssText="\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-family: system-ui, -apple-system, sans-serif;\n color: #666;\n ",a.textContent="Loading viewer...",t.appendChild(a);try{await async function(){return r||(r=(async()=>{const e=await o.e(55).then(o.bind(o,55));await e.default(),n=e})(),r)}();const a=document.createElement("canvas");a.id=`${e}_canvas`,a.style.cssText="\n width: 100%;\n height: 100%;\n display: block;\n ",a.addEventListener("dragstart",e=>{e.preventDefault()}),a.draggable=!1,a.addEventListener("mousedown",e=>{e.altKey&&e.preventDefault()}),t.innerHTML="",t.appendChild(a);const s=await n.ViewerHandle.create(a);i.set(e,{handle:s,canvas:a,container:t});const d=new MutationObserver(o=>{o.forEach(o=>{o.removedNodes.forEach(o=>{(o===t||o.contains(t))&&(console.debug(`Cleaning up viewer ${e} because its DOM node went away...`),c(e),console.debug(`Done cleaning up viewer ${e}.`),d.disconnect())})})});d.observe(document.body,{childList:!0,subtree:!0}),console.log("Installed mutation observer"),i.get(e).mutationObserver=d}catch(e){t.innerHTML="";const o=document.createElement("div");o.style.cssText="\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-family: system-ui, -apple-system, sans-serif;\n color: #c00;\n padding: 20px;\n box-sizing: border-box;\n text-align: center;\n ";const n=document.createElement("div");n.style.fontWeight="bold",n.style.marginBottom="10px",n.textContent="Failed to load viewer";const r=document.createElement("div");throw r.style.cssText="\n font-family: monospace;\n font-size: 12px;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 100%;\n ",r.textContent=e.message||String(e),o.appendChild(n),o.appendChild(r),t.appendChild(o),console.error("viewarr initialization failed:",e),e}}function s(e,t,o,n,r){const a=i.get(e);if(!a)throw new Error(`No viewer found for container "${e}"`);a.handle.setImageData(t,o,n,r)}function c(e){const t=i.get(e);t&&(t.handle.destroy(),t.mutationObserver&&t.mutationObserver.disconnect(),t.container.innerHTML="",i.delete(e))}function d(e){return i.has(e)}function l(){return Array.from(i.keys())}function f(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getZoom()}function w(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setZoom(t)}function g(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getContrast()}function h(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setContrast(t)}function u(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getBias()}function v(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setBias(t)}function m(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getStretchMode()}function p(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setStretchMode(t)}function y(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);const o=t.container.getBoundingClientRect(),n=t.handle.getViewBounds(o.width,o.height);return Array.from(n)}function C(e,t,o,n,r){const a=i.get(e);if(!a)throw new Error(`No viewer found for container "${e}"`);const s=a.container.getBoundingClientRect();a.handle.setViewBounds(t,o,n,r,s.width,s.height)}function M(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getColormap()}function E(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setColormap(t)}function k(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getColormapReversed()}function N(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setColormapReversed(t)}function $(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);const o=t.handle.getValueRange();return Array.from(o)}function V(e,t,o){const n=i.get(e);if(!n)throw new Error(`No viewer found for container "${e}"`);n.handle.setValueRange(t,o)}function b(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getRotation()}function R(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setRotation(t)}function P(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);const o=t.handle.getPivotPoint();return Array.from(o)}function x(e,t,o){const n=i.get(e);if(!n)throw new Error(`No viewer found for container "${e}"`);n.handle.setPivotPoint(t,o)}function S(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getShowPivotMarker()}function B(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setShowPivotMarker(t)}function A(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);return t.handle.getOverlayMessage()}function O(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.setOverlayMessage(t)}function Z(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);const o=Array.from(t.handle.getMarkers()),n=[];for(let e=0;e+1<o.length;e+=2)n.push([o[e],o[e+1]]);return n}function D(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);if(!Array.isArray(t))return void o.handle.setMarkers([]);const n=[];for(const e of t){if(!Array.isArray(e)||2!==e.length)continue;const t=Number(e[0]),o=Number(e[1]);Number.isFinite(t)&&Number.isFinite(o)&&n.push(t,o)}o.handle.setMarkers(n)}function L(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);if(t&&"object"==typeof t){if("contrast"in t&&void 0!==t.contrast&&o.handle.setContrast(t.contrast),"bias"in t&&void 0!==t.bias&&o.handle.setBias(t.bias),"stretchMode"in t&&void 0!==t.stretchMode&&o.handle.setStretchMode(t.stretchMode),"colormap"in t&&void 0!==t.colormap&&o.handle.setColormap(t.colormap),"colormapReversed"in t&&void 0!==t.colormapReversed&&o.handle.setColormapReversed(t.colormapReversed),"vmin"in t&&"vmax"in t&&void 0!==t.vmin&&void 0!==t.vmax&&o.handle.setValueRange(t.vmin,t.vmax),"xlim"in t&&"ylim"in t&&void 0!==t.xlim&&void 0!==t.ylim&&Array.isArray(t.xlim)&&Array.isArray(t.ylim)&&2===t.xlim.length&&2===t.ylim.length){const e=o.container.getBoundingClientRect();o.handle.setViewBounds(t.xlim[0],t.xlim[1],t.ylim[0],t.ylim[1],e.width,e.height)}"rotation"in t&&void 0!==t.rotation&&o.handle.setRotation(t.rotation),"pivot"in t&&void 0!==t.pivot&&Array.isArray(t.pivot)&&2===t.pivot.length&&o.handle.setPivotPoint(t.pivot[0],t.pivot[1]),"showPivotMarker"in t&&void 0!==t.showPivotMarker&&o.handle.setShowPivotMarker(t.showPivotMarker),"overlayMessage"in t&&void 0!==t.overlayMessage&&o.handle.setOverlayMessage(t.overlayMessage),"markers"in t&&void 0!==t.markers&&D(e,t.markers),"zoom"in t&&void 0!==t.zoom&&o.handle.setZoom(t.zoom)}}function T(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.onStateChange(t)}function z(e,t){const o=i.get(e);if(!o)throw new Error(`No viewer found for container "${e}"`);o.handle.onClick(t)}function I(e){const t=i.get(e);if(!t)throw new Error(`No viewer found for container "${e}"`);t.handle.clearCallbacks()}window.viewarr={createViewer:a,setImageData:s,destroyViewer:c,hasViewer:d,getActiveViewers:l,getZoom:f,setZoom:w,getContrast:g,setContrast:h,getBias:u,setBias:v,getStretchMode:m,setStretchMode:p,getViewBounds:y,setViewBounds:C,getColormap:M,setColormap:E,getColormapReversed:k,setColormapReversed:N,getValueRange:$,setValueRange:V,getRotation:b,setRotation:R,getPivotPoint:P,setPivotPoint:x,getShowPivotMarker:S,setShowPivotMarker:B,getOverlayMessage:A,setOverlayMessage:O,getMarkers:Z,setMarkers:D,setViewerState:L,onStateChange:T,onClick:z,clearCallbacks:I};const H={createViewer:a,setImageData:s,destroyViewer:c,hasViewer:d,getActiveViewers:l,getZoom:f,setZoom:w,getContrast:g,setContrast:h,getBias:u,setBias:v,getStretchMode:m,setStretchMode:p,getViewBounds:y,setViewBounds:C,getColormap:M,setColormap:E,getColormapReversed:k,setColormapReversed:N,getValueRange:$,setValueRange:V,getRotation:b,setRotation:R,getPivotPoint:P,setPivotPoint:x,getShowPivotMarker:S,setShowPivotMarker:B,getOverlayMessage:A,setOverlayMessage:O,getMarkers:Z,setMarkers:D,setViewerState:L,onStateChange:T,onClick:z,clearCallbacks:I}}}]);
@@ -1 +1 @@
1
- "use strict";(self.webpackChunkfitsview=self.webpackChunkfitsview||[]).push([[777],{777(e,t,n){n.r(t),n.d(t,{default:()=>f});var i,r=n(638),s=n(125),a=n(247),o=n(526);function c(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/1073741824).toFixed(2)} GB`}!function(e){e.INT8="i8",e.UINT8="u8",e.INT16="i16",e.UINT16="u16",e.INT32="i32",e.UINT32="u32",e.INT64="i64",e.UINT64="u64",e.FLOAT32="f32",e.FLOAT64="f64"}(i||(i={}));let l=null;const d=n.e(32).then(n.bind(n,32)).then(e=>{l=e}).catch(e=>{console.warn("viewarr module not available, image viewer disabled:",e)});class h extends a.Widget{constructor(e){super(),this._viewerContainers=new Map,this._sliceStates=new Map,this._activeHduIndex=null,this._sliceControlsContainer=null,this._fetchAbortController=null,this._metadata=null,this._context=e,this.addClass("jp-FITSViewer"),this._baseViewerId="fitsview-"+h._instanceCounter++,this._content=document.createElement("div"),this._content.className="jp-FITSViewer-content",this.node.appendChild(this._content),e.ready.then(()=>{this._loadMetadata()})}_getViewerId(e){return`${this._baseViewerId}-hdu${e}`}async _loadMetadata(){const e=this._context.path;this._content.innerHTML=`<p>Loading metadata for ${e}...</p>`;try{const t=await async function(e="",t={}){const n=s.ServerConnection.makeSettings(),i=o.URLExt.join(n.baseUrl,"fitsview",e);let r;try{r=await s.ServerConnection.makeRequest(i,t,n)}catch(e){throw new s.ServerConnection.NetworkError(e)}let a=await r.text();if(a.length>0)try{a=JSON.parse(a)}catch(e){console.log("Not a JSON response body.",r)}if(!r.ok){let e="Unknown error";throw"string"==typeof a?e=a:a&&"object"==typeof a&&(e=a.error||a.message||JSON.stringify(a)),new s.ServerConnection.ResponseError(r,e)}return a}(`metadata?path=${encodeURIComponent(e)}`);this._metadata=t,this._renderMetadata()}catch(e){this._content.innerHTML=`<p class="jp-FITSViewer-error">Error loading FITS metadata: ${e}</p>`}}_renderMetadata(){if(!this._metadata)return;const{hdus:e}=this._metadata,t=e.filter(e=>e.shape&&e.shape.length>=2&&e.arrayType);let n="";for(const e of t)n+=`\n <div id="${this._getViewerId(e.index)}" class="jp-FITSViewer-viewerContainer" data-hdu="${e.index}" style="display: none;">\n <div class="jp-FITSViewer-viewerPlaceholder">Loading...</div>\n </div>\n `;0===t.length&&(n='\n <div class="jp-FITSViewer-viewerContainer">\n <div class="jp-FITSViewer-viewerPlaceholder">No viewable image data</div>\n </div>\n ');let i="";for(const t of e){const e=t.shape&&t.shape.length>=2&&t.arrayType,n=t.name||`HDU ${t.index}`;let r;r=t.shape&&t.shape.length>=2&&t.arrayType?`${t.shape.join("×")} [${t.arrayType}]`:t.shape&&1===t.shape.length?`${t.shape[0]} rows`:"—";const s=e?"":"disabled";i+=`\n <button class="${e?"jp-FITSViewer-hduButton":"jp-FITSViewer-hduButton jp-FITSViewer-hduButton-disabled"}" data-hdu="${t.index}" ${s}>\n <div class="jp-FITSViewer-hduContent">\n <span class="jp-FITSViewer-hduName">${t.index}: ${n}</span>\n <span class="jp-FITSViewer-hduInfo">${r}</span>\n </div>\n <a href="#" class="jp-FITSViewer-headerIcon" data-hdu="${t.index}" title="View Header">ⓘ</a>\n </button>\n `}const r=`\n <div class="jp-FITSViewer-layout">\n <div class="jp-FITSViewer-viewerPanel">\n <div class="jp-FITSViewer-controlBar">\n <div class="jp-FITSViewer-hduBar">${i}</div>\n <div id="${this._baseViewerId}-controls" class="jp-FITSViewer-sliceControls"></div>\n </div>\n <div class="jp-FITSViewer-viewerStack">\n ${n}\n </div>\n </div>\n </div>\n `;this._content.innerHTML=r,this._viewerContainers.clear();for(const e of t){const t=this._getViewerId(e.index),n=document.getElementById(t);n&&this._viewerContainers.set(e.index,n)}this._sliceControlsContainer=document.getElementById(`${this._baseViewerId}-controls`),d.then(()=>{this._autoDisplayFirstHDU()}),this._content.querySelectorAll(".jp-FITSViewer-hduButton").forEach(e=>{e.addEventListener("click",t=>{if(t.target.classList.contains("jp-FITSViewer-headerIcon"))return;const n=parseInt(e.dataset.hdu||"0",10);this._switchToHDU(n)})}),this._content.querySelectorAll(".jp-FITSViewer-headerIcon").forEach(e=>{e.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();const n=parseInt(e.dataset.hdu||"0",10);this._openHeaderWindow(n)})})}async _switchToHDU(e){if(this._activeHduIndex===e)return;if(null!==this._activeHduIndex){const e=this._viewerContainers.get(this._activeHduIndex);e&&(e.style.display="none");const t=this._content.querySelector(`.jp-FITSViewer-hduButton[data-hdu="${this._activeHduIndex}"]`);t?.classList.remove("jp-FITSViewer-hduButton-active")}const t=this._viewerContainers.get(e);t&&(t.style.display="flex");const n=this._content.querySelector(`.jp-FITSViewer-hduButton[data-hdu="${e}"]`);n?.classList.add("jp-FITSViewer-hduButton-active"),this._activeHduIndex=e,await this._viewHDUImage(e)}_openHeaderWindow(e){const t=this._metadata?.hdus.find(t=>t.index===e);if(!t||!t.header)return;const n=`${this._context.path.split("/").pop()||"file"} - ${t.name||`HDU ${e}`} Header`,i=window.open("","_blank","width=800,height=600");i&&(i.document.write(`<!DOCTYPE html>\n<html>\n<head>\n <title>${n}</title>\n <style>\n body {\n font-family: monospace;\n padding: 16px;\n margin: 0;\n background: #1e1e1e;\n color: #d4d4d4;\n }\n pre {\n white-space: pre;\n margin: 0;\n line-height: 1.4;\n }\n </style>\n</head>\n<body>\n<pre>${t.header.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</pre>\n</body>\n</html>`),i.document.close())}async _ensureViewer(e){await d;const t=this._viewerContainers.get(e),n=this._getViewerId(e);if(!l||!t)return!1;if(l.hasViewer(n))return!0;try{return t.innerHTML="",await l.createViewer(n),!0}catch(e){return console.error("Failed to create viewarr viewer:",e),!1}}_autoDisplayFirstHDU(){if(!this._metadata||!l)return;const e=this._metadata.hdus.find(e=>e.shape&&e.shape.length>=2&&e.arrayType);e&&this._switchToHDU(e.index)}async _viewHDUImage(e){if(!l)return void console.warn("viewarr not available");const t=this._metadata?.hdus.find(t=>t.index===e);if(!t||!t.shape||t.shape.length<2||!t.arrayType)return;const n=t.shape,r=n.length-2;let s=this._sliceStates.get(e);s||(s={hduIndex:e,shape:n,sliceIndices:new Array(r).fill(0)},this._sliceStates.set(e,s)),this._renderSliceControls();const a=this._getViewerId(e);if(l.hasViewer(a))return;const o=function(e,t){if(e.length<2)return 0;const n=e[e.length-2];return e[e.length-1]*n*function(e){switch(e){case i.INT8:case i.UINT8:return 1;case i.INT16:case i.UINT16:return 2;case i.INT32:case i.UINT32:case i.FLOAT32:return 4;case i.INT64:case i.UINT64:case i.FLOAT64:default:return 8}}(t)}(n,t.arrayType);o<=5242880?await this._fetchAndDisplaySlice():this._showLargeImagePrompt(o)}_getActiveSliceState(){if(null!==this._activeHduIndex)return this._sliceStates.get(this._activeHduIndex)}_getActiveViewerContainer(){if(null!==this._activeHduIndex)return this._viewerContainers.get(this._activeHduIndex)}_showLargeImagePrompt(e){const t=this._getActiveViewerContainer();if(!t)return;const n=c(e);t.innerHTML=`\n <div class="jp-FITSViewer-largeImagePrompt">\n <p>This image slice is <strong>${n}</strong>, which exceeds the auto-fetch limit.</p>\n <button class="jp-FITSViewer-fetchButton jp-mod-styled">\n Fetch and Display\n </button>\n <div class="jp-FITSViewer-progressContainer" style="display: none;">\n <div class="jp-FITSViewer-progressBar">\n <div class="jp-FITSViewer-progressFill"></div>\n </div>\n <span class="jp-FITSViewer-progressText">0%</span>\n <button class="jp-FITSViewer-cancelButton jp-mod-styled jp-mod-warn">\n Cancel\n </button>\n </div>\n </div>\n `;const i=t.querySelector(".jp-FITSViewer-fetchButton"),r=t.querySelector(".jp-FITSViewer-progressContainer"),s=t.querySelector(".jp-FITSViewer-progressFill"),a=t.querySelector(".jp-FITSViewer-progressText"),o=t.querySelector(".jp-FITSViewer-cancelButton");i.addEventListener("click",()=>{i.style.display="none",r.style.display="flex",this._fetchAndDisplaySliceWithProgress(s,a,r)}),o.addEventListener("click",()=>{this._fetchAbortController&&(this._fetchAbortController.abort(),this._fetchAbortController=null),i.style.display="block",r.style.display="none",s.style.width="0%",a.textContent="0%"})}async _fetchAndDisplaySliceWithProgress(e,t,n){const r=this._getActiveSliceState(),a=this._getActiveViewerContainer(),d=this._activeHduIndex;if(console.log("[FITSViewer] _fetchAndDisplaySliceWithProgress called"),console.log("[FITSViewer] sliceState:",r),console.log("[FITSViewer] viewarr:",l),!r||!l||null===d)return void console.warn("[FITSViewer] Early return: missing sliceState or viewarr");const h=this._getViewerId(d),{shape:p,sliceIndices:u}=r,w=p.map((e,t)=>{if(t<p.length-2){const e=u[t];return`${e}:${e+1}`}return`0:${e}`}).join(",");this._fetchAbortController=new AbortController;try{const n=this._context.path;console.log("[FITSViewer] Fetching slice:",{path:n,hduIndex:d,slices:w});const{buffer:r,shape:p,arrayType:u}=await async function(e,t,n){const r=s.ServerConnection.makeSettings(),a=o.URLExt.join(r.baseUrl,"fitsview",e),c={};r.token&&(c.Authorization=`token ${r.token}`);const l=await fetch(a,{method:"GET",credentials:"same-origin",headers:c,signal:n});if(!l.ok){const e=await l.text();let t=e;try{const n=JSON.parse(e);t=n.error||n.message||e}catch{}throw new s.ServerConnection.ResponseError(l,t)}const d=l.headers.get("X-FITS-Shape"),h=d?JSON.parse(d):[],p=l.headers.get("X-FITS-Type")||i.FLOAT64,u=l.headers.get("Content-Length"),w=u?parseInt(u,10):0;if(!t||!w||!l.body)return{buffer:await l.arrayBuffer(),shape:h,arrayType:p};const g=l.body.getReader(),I=[];let f=0,S=await g.read();for(;!S.done;)I.push(S.value),f+=S.value.length,t(f,w),S=await g.read();const v=new ArrayBuffer(f),T=new Uint8Array(v);let y=0;for(const e of I)T.set(e,y),y+=e.length;return{buffer:v,shape:h,arrayType:p}}(`slice?path=${encodeURIComponent(n)}&hdu=${d}&slices=${encodeURIComponent(w)}`,(n,i)=>{const r=Math.round(n/i*100);e.style.width=`${r}%`,t.textContent=`${r}% (${c(n)} / ${c(i)})`},this._fetchAbortController.signal);console.log("[FITSViewer] Fetch complete:",{bufferLength:r.byteLength,resultShape:p,arrayType:u}),this._fetchAbortController=null;const g=p[p.length-2]||1,I=p[p.length-1]||1;console.log("[FITSViewer] Image dimensions:",{width:I,height:g}),a?(console.log("[FITSViewer] Clearing container and creating viewer"),a.innerHTML="",await l.createViewer(h),console.log("[FITSViewer] Viewer created, hasViewer:",l.hasViewer(h))):console.warn("[FITSViewer] No viewer container!"),console.log("[FITSViewer] Calling setImageData"),l.setImageData(h,r,I,g,u),console.log("[FITSViewer] setImageData complete")}catch(e){if(this._fetchAbortController=null,"AbortError"===e.name)return void console.log("Fetch cancelled by user");console.error("Failed to load slice:",e),n.innerHTML=`<span class="jp-FITSViewer-error">Error: ${e}</span>`}}_renderSliceControls(){const e=this._getActiveSliceState();if(!this._sliceControlsContainer||!e)return;const{shape:t,sliceIndices:n}=e,i=t.length-2;if(0===i)return void(this._sliceControlsContainer.innerHTML="");let r="";for(let e=0;e<i;e++){const s=t[e],a=n[e];r+=`\n <div class="jp-FITSViewer-sliceControl" data-axis="${e}">\n <button class="jp-FITSViewer-sliceButton jp-FITSViewer-prevButton"\n data-axis="${e}"\n data-direction="prev"\n ${0===a?"disabled":""}>\n ◀\n </button>\n <span class="jp-FITSViewer-sliceLabel">\n ${1===i?"Plane":`Axis ${e}`}: <strong>${a+1}</strong> / ${s}\n </span>\n <button class="jp-FITSViewer-sliceButton jp-FITSViewer-nextButton"\n data-axis="${e}"\n data-direction="next"\n ${a>=s-1?"disabled":""}>\n ▶\n </button>\n </div>\n `}this._sliceControlsContainer.innerHTML=r,this._sliceControlsContainer.querySelectorAll(".jp-FITSViewer-sliceButton").forEach(e=>{e.addEventListener("click",e=>{const t=e.currentTarget,n=parseInt(t.dataset.axis||"0",10),i=t.dataset.direction;this._navigateSlice(n,"next"===i?1:-1)})})}_navigateSlice(e,t){const n=this._getActiveSliceState();if(!n)return;const{shape:i,sliceIndices:r}=n,s=i[e],a=Math.max(0,Math.min(s-1,r[e]+t));a!==r[e]&&(n.sliceIndices[e]=a,this._renderSliceControls(),this._fetchAndDisplaySlice())}async _fetchAndDisplaySlice(){const e=this._getActiveSliceState(),t=this._activeHduIndex;if(!e||!l||null===t)return;if(!await this._ensureViewer(t))return;const n=this._getViewerId(t),{shape:r,sliceIndices:a}=e,c=r.map((e,t)=>{if(t<r.length-2){const e=a[t];return`${e}:${e+1}`}return`0:${e}`}).join(",");try{const e=this._context.path,{buffer:r,shape:a,arrayType:d}=await async function(e="",t={}){const n=s.ServerConnection.makeSettings(),r=o.URLExt.join(n.baseUrl,"fitsview",e);let a;try{a=await s.ServerConnection.makeRequest(r,t,n)}catch(e){throw new s.ServerConnection.NetworkError(e)}if(!a.ok){const e=await a.text();let t=e;try{const n=JSON.parse(e);t=n.error||n.message||e}catch{}throw new s.ServerConnection.ResponseError(a,t)}const c=await a.arrayBuffer(),l=a.headers.get("X-FITS-Shape");return{buffer:c,shape:l?JSON.parse(l):[],arrayType:a.headers.get("X-FITS-Type")||i.FLOAT64}}(`slice?path=${encodeURIComponent(e)}&hdu=${t}&slices=${encodeURIComponent(c)}`),h=a[a.length-2]||1,p=a[a.length-1]||1;l.setImageData(n,r,p,h,d)}catch(e){console.error("Failed to load slice:",e)}}onCloseRequest(e){l&&this._viewerContainers.forEach((e,t)=>{const n=this._getViewerId(t);l.hasViewer(n)&&l.destroyViewer(n)}),super.onCloseRequest(e),this.dispose()}}h._instanceCounter=0;class p extends r.DocumentWidget{constructor(e){super(e)}}const u="fitsview-provider";class w extends s.RestContentProvider{async get(e,t){return super.get(e,{...t,content:!1})}}class g extends r.ABCWidgetFactory{createNewWidget(e){const t=new h(e);return new p({context:e,content:t})}}class I{constructor(){this._disposed=!1}get name(){return"fits-model"}get contentType(){return"file"}get fileFormat(){return null}get isDisposed(){return this._disposed}dispose(){this._disposed=!0}preferredLanguage(e){return""}createNew(e){return new r.DocumentModel}}const f={id:"fitsview:plugin",description:"View FITS files in JupyterLab without downloading full content",autoStart:!0,requires:[s.IDefaultDrive],activate:(e,t)=>{console.log("JupyterLab extension fitsview is activated!");const n=t.contentProviderRegistry;if(n){const e=t.serverSettings;n.register(u,new w({apiEndpoint:"api/contents",serverSettings:e})),console.log("Registered FITS content provider")}e.docRegistry.addFileType({name:"fits",displayName:"FITS Image",mimeTypes:["image/fits"],extensions:[".fits",".fit",".fts"],fileFormat:"base64",contentType:"file",icon:void 0});const i=new I;e.docRegistry.addModelFactory(i);const r=new g({name:"FITS Viewer",modelName:"fits-model",fileTypes:["fits"],defaultFor:["fits"],contentProviderId:u});e.docRegistry.addWidgetFactory(r),console.log("FITS viewer factory registered")}}}}]);
1
+ "use strict";(self.webpackChunkfitsview=self.webpackChunkfitsview||[]).push([[777],{777(e,t,n){n.r(t),n.d(t,{default:()=>f});var i,r=n(481),s=n(176),a=n(247),o=n(863);function c(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:e<1073741824?`${(e/1048576).toFixed(1)} MB`:`${(e/1073741824).toFixed(2)} GB`}!function(e){e.INT8="i8",e.UINT8="u8",e.INT16="i16",e.UINT16="u16",e.INT32="i32",e.UINT32="u32",e.INT64="i64",e.UINT64="u64",e.FLOAT32="f32",e.FLOAT64="f64"}(i||(i={}));let l=null;const d=n.e(32).then(n.bind(n,32)).then(e=>{l=e}).catch(e=>{console.warn("viewarr module not available, image viewer disabled:",e)});class h extends a.Widget{constructor(e){super(),this._viewerContainers=new Map,this._sliceStates=new Map,this._activeHduIndex=null,this._sliceControlsContainer=null,this._fetchAbortController=null,this._metadata=null,this._context=e,this.addClass("jp-FITSViewer"),this._baseViewerId="fitsview-"+h._instanceCounter++,this._content=document.createElement("div"),this._content.className="jp-FITSViewer-content",this.node.appendChild(this._content),e.ready.then(()=>{this._loadMetadata()})}_getViewerId(e){return`${this._baseViewerId}-hdu${e}`}async _loadMetadata(){const e=this._context.path;this._content.innerHTML=`<p>Loading metadata for ${e}...</p>`;try{const t=await async function(e="",t={}){const n=s.ServerConnection.makeSettings(),i=o.URLExt.join(n.baseUrl,"fitsview",e);let r;try{r=await s.ServerConnection.makeRequest(i,t,n)}catch(e){throw new s.ServerConnection.NetworkError(e)}let a=await r.text();if(a.length>0)try{a=JSON.parse(a)}catch(e){console.log("Not a JSON response body.",r)}if(!r.ok){let e="Unknown error";throw"string"==typeof a?e=a:a&&"object"==typeof a&&(e=a.error||a.message||JSON.stringify(a)),new s.ServerConnection.ResponseError(r,e)}return a}(`metadata?path=${encodeURIComponent(e)}`);this._metadata=t,this._renderMetadata()}catch(e){this._content.innerHTML=`<p class="jp-FITSViewer-error">Error loading FITS metadata: ${e}</p>`}}_renderMetadata(){if(!this._metadata)return;const{hdus:e}=this._metadata,t=e.filter(e=>e.shape&&e.shape.length>=2&&e.arrayType);let n="";for(const e of t)n+=`\n <div id="${this._getViewerId(e.index)}" class="jp-FITSViewer-viewerContainer" data-hdu="${e.index}" style="display: none;">\n <div class="jp-FITSViewer-viewerPlaceholder">Loading...</div>\n </div>\n `;0===t.length&&(n='\n <div class="jp-FITSViewer-viewerContainer">\n <div class="jp-FITSViewer-viewerPlaceholder">No viewable image data</div>\n </div>\n ');let i="";for(const t of e){const e=t.shape&&t.shape.length>=2&&t.arrayType,n=t.name||`HDU ${t.index}`;let r;r=t.shape&&t.shape.length>=2&&t.arrayType?`${t.shape.join("×")} [${t.arrayType}]`:t.shape&&1===t.shape.length?`${t.shape[0]} rows`:"—";const s=e?"":"disabled";i+=`\n <button class="${e?"jp-FITSViewer-hduButton":"jp-FITSViewer-hduButton jp-FITSViewer-hduButton-disabled"}" data-hdu="${t.index}" ${s}>\n <div class="jp-FITSViewer-hduContent">\n <span class="jp-FITSViewer-hduName">${t.index}: ${n}</span>\n <span class="jp-FITSViewer-hduInfo">${r}</span>\n </div>\n <a href="#" class="jp-FITSViewer-headerIcon" data-hdu="${t.index}" title="View Header">ⓘ</a>\n </button>\n `}const r=`\n <div class="jp-FITSViewer-layout">\n <div class="jp-FITSViewer-viewerPanel">\n <div class="jp-FITSViewer-controlBar">\n <div class="jp-FITSViewer-hduBar">${i}</div>\n <div id="${this._baseViewerId}-controls" class="jp-FITSViewer-sliceControls"></div>\n </div>\n <div class="jp-FITSViewer-viewerStack">\n ${n}\n </div>\n </div>\n </div>\n `;this._content.innerHTML=r,this._viewerContainers.clear();for(const e of t){const t=this._getViewerId(e.index),n=document.getElementById(t);n&&this._viewerContainers.set(e.index,n)}this._sliceControlsContainer=document.getElementById(`${this._baseViewerId}-controls`),d.then(()=>{this._autoDisplayFirstHDU()}),this._content.querySelectorAll(".jp-FITSViewer-hduButton").forEach(e=>{e.addEventListener("click",t=>{if(t.target.classList.contains("jp-FITSViewer-headerIcon"))return;const n=parseInt(e.dataset.hdu||"0",10);this._switchToHDU(n)})}),this._content.querySelectorAll(".jp-FITSViewer-headerIcon").forEach(e=>{e.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();const n=parseInt(e.dataset.hdu||"0",10);this._openHeaderWindow(n)})})}async _switchToHDU(e){if(this._activeHduIndex===e)return;if(null!==this._activeHduIndex){const e=this._viewerContainers.get(this._activeHduIndex);e&&(e.style.display="none");const t=this._content.querySelector(`.jp-FITSViewer-hduButton[data-hdu="${this._activeHduIndex}"]`);t?.classList.remove("jp-FITSViewer-hduButton-active")}const t=this._viewerContainers.get(e);t&&(t.style.display="flex");const n=this._content.querySelector(`.jp-FITSViewer-hduButton[data-hdu="${e}"]`);n?.classList.add("jp-FITSViewer-hduButton-active"),this._activeHduIndex=e,await this._viewHDUImage(e)}_openHeaderWindow(e){const t=this._metadata?.hdus.find(t=>t.index===e);if(!t||!t.header)return;const n=`${this._context.path.split("/").pop()||"file"} - ${t.name||`HDU ${e}`} Header`,i=window.open("","_blank","width=800,height=600");i&&(i.document.write(`<!DOCTYPE html>\n<html>\n<head>\n <title>${n}</title>\n <style>\n body {\n font-family: monospace;\n padding: 16px;\n margin: 0;\n background: #1e1e1e;\n color: #d4d4d4;\n }\n pre {\n white-space: pre;\n margin: 0;\n line-height: 1.4;\n }\n </style>\n</head>\n<body>\n<pre>${t.header.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}</pre>\n</body>\n</html>`),i.document.close())}async _ensureViewer(e){await d;const t=this._viewerContainers.get(e),n=this._getViewerId(e);if(!l||!t)return!1;if(l.hasViewer(n))return!0;try{return t.innerHTML="",await l.createViewer(n),!0}catch(e){return console.error("Failed to create viewarr viewer:",e),!1}}_autoDisplayFirstHDU(){if(!this._metadata||!l)return;const e=this._metadata.hdus.find(e=>e.shape&&e.shape.length>=2&&e.arrayType);e&&this._switchToHDU(e.index)}async _viewHDUImage(e){if(!l)return void console.warn("viewarr not available");const t=this._metadata?.hdus.find(t=>t.index===e);if(!t||!t.shape||t.shape.length<2||!t.arrayType)return;const n=t.shape,r=n.length-2;let s=this._sliceStates.get(e);s||(s={hduIndex:e,shape:n,sliceIndices:new Array(r).fill(0)},this._sliceStates.set(e,s)),this._renderSliceControls();const a=this._getViewerId(e);if(l.hasViewer(a))return;const o=function(e,t){if(e.length<2)return 0;const n=e[e.length-2];return e[e.length-1]*n*function(e){switch(e){case i.INT8:case i.UINT8:return 1;case i.INT16:case i.UINT16:return 2;case i.INT32:case i.UINT32:case i.FLOAT32:return 4;case i.INT64:case i.UINT64:case i.FLOAT64:default:return 8}}(t)}(n,t.arrayType);o<=5242880?await this._fetchAndDisplaySlice():this._showLargeImagePrompt(o)}_getActiveSliceState(){if(null!==this._activeHduIndex)return this._sliceStates.get(this._activeHduIndex)}_getActiveViewerContainer(){if(null!==this._activeHduIndex)return this._viewerContainers.get(this._activeHduIndex)}_showLargeImagePrompt(e){const t=this._getActiveViewerContainer();if(!t)return;const n=c(e);t.innerHTML=`\n <div class="jp-FITSViewer-largeImagePrompt">\n <p>This image slice is <strong>${n}</strong>, which exceeds the auto-fetch limit.</p>\n <button class="jp-FITSViewer-fetchButton jp-mod-styled">\n Fetch and Display\n </button>\n <div class="jp-FITSViewer-progressContainer" style="display: none;">\n <div class="jp-FITSViewer-progressBar">\n <div class="jp-FITSViewer-progressFill"></div>\n </div>\n <span class="jp-FITSViewer-progressText">0%</span>\n <button class="jp-FITSViewer-cancelButton jp-mod-styled jp-mod-warn">\n Cancel\n </button>\n </div>\n </div>\n `;const i=t.querySelector(".jp-FITSViewer-fetchButton"),r=t.querySelector(".jp-FITSViewer-progressContainer"),s=t.querySelector(".jp-FITSViewer-progressFill"),a=t.querySelector(".jp-FITSViewer-progressText"),o=t.querySelector(".jp-FITSViewer-cancelButton");i.addEventListener("click",()=>{i.style.display="none",r.style.display="flex",this._fetchAndDisplaySliceWithProgress(s,a,r)}),o.addEventListener("click",()=>{this._fetchAbortController&&(this._fetchAbortController.abort(),this._fetchAbortController=null),i.style.display="block",r.style.display="none",s.style.width="0%",a.textContent="0%"})}async _fetchAndDisplaySliceWithProgress(e,t,n){const r=this._getActiveSliceState(),a=this._getActiveViewerContainer(),d=this._activeHduIndex;if(console.log("[FITSViewer] _fetchAndDisplaySliceWithProgress called"),console.log("[FITSViewer] sliceState:",r),console.log("[FITSViewer] viewarr:",l),!r||!l||null===d)return void console.warn("[FITSViewer] Early return: missing sliceState or viewarr");const h=this._getViewerId(d),{shape:p,sliceIndices:u}=r,w=p.map((e,t)=>{if(t<p.length-2){const e=u[t];return`${e}:${e+1}`}return`0:${e}`}).join(",");this._fetchAbortController=new AbortController;try{const n=this._context.path;console.log("[FITSViewer] Fetching slice:",{path:n,hduIndex:d,slices:w});const{buffer:r,shape:p,arrayType:u}=await async function(e,t,n){const r=s.ServerConnection.makeSettings(),a=o.URLExt.join(r.baseUrl,"fitsview",e),c={};r.token&&(c.Authorization=`token ${r.token}`);const l=await fetch(a,{method:"GET",credentials:"same-origin",headers:c,signal:n});if(!l.ok){const e=await l.text();let t=e;try{const n=JSON.parse(e);t=n.error||n.message||e}catch{}throw new s.ServerConnection.ResponseError(l,t)}const d=l.headers.get("X-FITS-Shape"),h=d?JSON.parse(d):[],p=l.headers.get("X-FITS-Type")||i.FLOAT64,u=l.headers.get("Content-Length"),w=u?parseInt(u,10):0;if(!t||!w||!l.body)return{buffer:await l.arrayBuffer(),shape:h,arrayType:p};const g=l.body.getReader(),I=[];let f=0,S=await g.read();for(;!S.done;)I.push(S.value),f+=S.value.length,t(f,w),S=await g.read();const v=new ArrayBuffer(f),T=new Uint8Array(v);let y=0;for(const e of I)T.set(e,y),y+=e.length;return{buffer:v,shape:h,arrayType:p}}(`slice?path=${encodeURIComponent(n)}&hdu=${d}&slices=${encodeURIComponent(w)}`,(n,i)=>{const r=Math.round(n/i*100);e.style.width=`${r}%`,t.textContent=`${r}% (${c(n)} / ${c(i)})`},this._fetchAbortController.signal);console.log("[FITSViewer] Fetch complete:",{bufferLength:r.byteLength,resultShape:p,arrayType:u}),this._fetchAbortController=null;const g=p[p.length-2]||1,I=p[p.length-1]||1;console.log("[FITSViewer] Image dimensions:",{width:I,height:g}),a?(console.log("[FITSViewer] Clearing container and creating viewer"),a.innerHTML="",await l.createViewer(h),console.log("[FITSViewer] Viewer created, hasViewer:",l.hasViewer(h))):console.warn("[FITSViewer] No viewer container!"),console.log("[FITSViewer] Calling setImageData"),l.setImageData(h,r,I,g,u),console.log("[FITSViewer] setImageData complete")}catch(e){if(this._fetchAbortController=null,"AbortError"===e.name)return void console.log("Fetch cancelled by user");console.error("Failed to load slice:",e),n.innerHTML=`<span class="jp-FITSViewer-error">Error: ${e}</span>`}}_renderSliceControls(){const e=this._getActiveSliceState();if(!this._sliceControlsContainer||!e)return;const{shape:t,sliceIndices:n}=e,i=t.length-2;if(0===i)return void(this._sliceControlsContainer.innerHTML="");let r="";for(let e=0;e<i;e++){const s=t[e],a=n[e];r+=`\n <div class="jp-FITSViewer-sliceControl" data-axis="${e}">\n <button class="jp-FITSViewer-sliceButton jp-FITSViewer-prevButton"\n data-axis="${e}"\n data-direction="prev"\n ${0===a?"disabled":""}>\n ◀\n </button>\n <span class="jp-FITSViewer-sliceLabel">\n ${1===i?"Plane":`Axis ${e}`}: <strong>${a+1}</strong> / ${s}\n </span>\n <button class="jp-FITSViewer-sliceButton jp-FITSViewer-nextButton"\n data-axis="${e}"\n data-direction="next"\n ${a>=s-1?"disabled":""}>\n ▶\n </button>\n </div>\n `}this._sliceControlsContainer.innerHTML=r,this._sliceControlsContainer.querySelectorAll(".jp-FITSViewer-sliceButton").forEach(e=>{e.addEventListener("click",e=>{const t=e.currentTarget,n=parseInt(t.dataset.axis||"0",10),i=t.dataset.direction;this._navigateSlice(n,"next"===i?1:-1)})})}_navigateSlice(e,t){const n=this._getActiveSliceState();if(!n)return;const{shape:i,sliceIndices:r}=n,s=i[e],a=Math.max(0,Math.min(s-1,r[e]+t));a!==r[e]&&(n.sliceIndices[e]=a,this._renderSliceControls(),this._fetchAndDisplaySlice())}async _fetchAndDisplaySlice(){const e=this._getActiveSliceState(),t=this._activeHduIndex;if(!e||!l||null===t)return;if(!await this._ensureViewer(t))return;const n=this._getViewerId(t),{shape:r,sliceIndices:a}=e,c=r.map((e,t)=>{if(t<r.length-2){const e=a[t];return`${e}:${e+1}`}return`0:${e}`}).join(",");try{const e=this._context.path,{buffer:r,shape:a,arrayType:d}=await async function(e="",t={}){const n=s.ServerConnection.makeSettings(),r=o.URLExt.join(n.baseUrl,"fitsview",e);let a;try{a=await s.ServerConnection.makeRequest(r,t,n)}catch(e){throw new s.ServerConnection.NetworkError(e)}if(!a.ok){const e=await a.text();let t=e;try{const n=JSON.parse(e);t=n.error||n.message||e}catch{}throw new s.ServerConnection.ResponseError(a,t)}const c=await a.arrayBuffer(),l=a.headers.get("X-FITS-Shape");return{buffer:c,shape:l?JSON.parse(l):[],arrayType:a.headers.get("X-FITS-Type")||i.FLOAT64}}(`slice?path=${encodeURIComponent(e)}&hdu=${t}&slices=${encodeURIComponent(c)}`),h=a[a.length-2]||1,p=a[a.length-1]||1;l.setImageData(n,r,p,h,d)}catch(e){console.error("Failed to load slice:",e)}}onCloseRequest(e){l&&this._viewerContainers.forEach((e,t)=>{const n=this._getViewerId(t);l.hasViewer(n)&&l.destroyViewer(n)}),super.onCloseRequest(e),this.dispose()}}h._instanceCounter=0;class p extends r.DocumentWidget{constructor(e){super(e)}}const u="fitsview-provider";class w extends s.RestContentProvider{async get(e,t){return super.get(e,{...t,content:!1})}}class g extends r.ABCWidgetFactory{createNewWidget(e){const t=new h(e);return new p({context:e,content:t})}}class I{constructor(){this._disposed=!1}get name(){return"fits-model"}get contentType(){return"file"}get fileFormat(){return null}get isDisposed(){return this._disposed}dispose(){this._disposed=!0}preferredLanguage(e){return""}createNew(e){return new r.DocumentModel}}const f={id:"fitsview:plugin",description:"View FITS files in JupyterLab without downloading full content",autoStart:!0,requires:[s.IDefaultDrive],activate:(e,t)=>{console.log("JupyterLab extension fitsview is activated!");const n=t.contentProviderRegistry;if(n){const e=t.serverSettings;n.register(u,new w({apiEndpoint:"api/contents",serverSettings:e})),console.log("Registered FITS content provider")}e.docRegistry.addFileType({name:"fits",displayName:"FITS Image",mimeTypes:["image/fits"],extensions:[".fits",".fit",".fts"],fileFormat:"base64",contentType:"file",icon:void 0});const i=new I;e.docRegistry.addModelFactory(i);const r=new g({name:"FITS Viewer",modelName:"fits-model",fileTypes:["fits"],defaultFor:["fits"],contentProviderId:u});e.docRegistry.addWidgetFactory(r),console.log("FITS viewer factory registered")}}}}]);
@@ -0,0 +1 @@
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,r,t,n,o,i,a,u,f,s,l,d,c,p,h,v,b,g,m,y,w,S,j,k,E,P={215(e,r,t){var n={"./index":()=>t.e(777).then(()=>()=>t(777)),"./extension":()=>t.e(777).then(()=>()=>t(777)),"./style":()=>t.e(728).then(()=>()=>t(728))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),i=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>i})}},T={};function O(e){var r=T[e];if(void 0!==r)return r.exports;var t=T[e]={id:e,exports:{}};return P[e](t,t.exports,O),t.exports}O.m=P,O.c=T,O.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return O.d(r,{a:r}),r},O.d=(e,r)=>{for(var t in r)O.o(r,t)&&!O.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},O.f={},O.e=e=>Promise.all(Object.keys(O.f).reduce((r,t)=>(O.f[t](e,r),r),[])),O.u=e=>e+"."+{55:"ac78f4ea4a687f96d25d",728:"f72867741749a85b33b3",764:"754d0996bf96c92a233c",777:"e9338b5c36dcbc94add8"}[e]+".js?v="+{55:"ac78f4ea4a687f96d25d",728:"f72867741749a85b33b3",764:"754d0996bf96c92a233c",777:"e9338b5c36dcbc94add8"}[e],O.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),O.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="fitsview:",O.l=(t,n,o,i)=>{if(e[t])e[t].push(n);else{var a,u;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var l=f[s];if(l.getAttribute("src")==t||l.getAttribute("data-webpack")==r+o){a=l;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",O.nc&&a.setAttribute("nonce",O.nc),a.setAttribute("data-webpack",r+o),a.src=t),e[t]=[n];var d=(r,n)=>{a.onerror=a.onload=null,clearTimeout(c);var o=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach(e=>e(n)),r)return r(n)},c=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),u&&document.head.appendChild(a)}},O.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{O.S={};var e={},r={};O.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];O.o(O.S,t)||(O.S[t]={});var i=O.S[t],a="fitsview",u=(e,r,t,n)=>{var o=i[e]=i[e]||{},u=o[r];(!u||!u.loaded&&(!n!=!u.eager?n:a>u.from))&&(o[r]={get:t,from:a,eager:!!n})},f=[];return"default"===t&&(u("fitsview","0.1.0",()=>O.e(777).then(()=>()=>O(777))),u("viewarr","0.1.0",()=>O.e(764).then(()=>()=>O(764)))),e[t]=f.length?Promise.all(f).then(()=>e[t]=1):1}}})(),(()=>{var e;O.g.importScripts&&(e=O.g.location+"");var r=O.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),O.p=e})(),t=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var o=e[n],i=(typeof o)[0];if(n>=r.length)return"u"==i;var a=r[n],u=(typeof a)[0];if(i!=u)return"o"==i&&"n"==u||"s"==u||"u"==i;if("o"!=i&&"u"!=i&&o!=a)return o<a;n++}},o=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,i=1;i<e.length;i++)n--,t+="u"==(typeof(u=e[i]))[0]?"-":(n>0?".":"")+(n=2,u);return t}var a=[];for(i=1;i<e.length;i++){var u=e[i];a.push(0===u?"not("+f()+")":1===u?"("+f()+" || "+f()+")":2===u?a.pop()+" "+a.pop():o(u))}return f();function f(){return a.pop().replace(/^\((.+)\)$/,"$1")}},i=(e,r)=>{if(0 in e){r=t(r);var n=e[0],o=n<0;o&&(n=-n-1);for(var a=0,u=1,f=!0;;u++,a++){var s,l,d=u<e.length?(typeof e[u])[0]:"";if(a>=r.length||"o"==(l=(typeof(s=r[a]))[0]))return!f||("u"==d?u>n&&!o:""==d!=o);if("u"==l){if(!f||"u"!=d)return!1}else if(f)if(d==l)if(u<=n){if(s!=e[u])return!1}else{if(o?s>e[u]:s<e[u])return!1;s!=e[u]&&(f=!1)}else if("s"!=d&&"n"!=d){if(o||u<=n)return!1;f=!1,u--}else{if(u<=n||l<d!=o)return!1;f=!1}else"s"!=d&&"n"!=d&&(f=!1,u--)}}var c=[],p=c.pop.bind(c);for(a=1;a<e.length;a++){var h=e[a];c.push(1==h?p()|p():2==h?p()&p():h?i(h,r):!p())}return!!p()},a=(e,r)=>e&&O.o(e,r),u=e=>(e.loaded=1,e.get()),f=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),s=(e,r,t)=>{var o=t?f(e[r]):e[r];return(r=Object.keys(o).reduce((e,r)=>!e||n(e,r)?r:e,0))&&o[r]},l=(e,r,t,o)=>{var a=o?f(e[r]):e[r];return(r=Object.keys(a).reduce((e,r)=>!i(t,r)||e&&!n(e,r)?e:r,0))&&a[r]},d=(e,r,t)=>{var o=t?f(e[r]):e[r];return Object.keys(o).reduce((e,r)=>!e||!o[e].loaded&&n(e,r)?r:e,0)},c=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+o(n)+")",p=(e,r,t,n,i)=>{var a=e[t];return"No satisfying version ("+o(n)+")"+(i?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(a).map(e=>e+" from "+a[e].from).join(", ")},h=e=>{throw new Error(e)},v=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},g=(e,r,t)=>t?t():((e,r)=>h("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),m=(b=e=>function(r,t,n,o,i){var a=O.I(r);return a&&a.then&&!n?a.then(e.bind(e,r,O.S[r],t,!1,o,i)):e(r,O.S[r],t,n,o,i)})((e,r,t,n,o)=>a(r,t)?u(s(r,t,n)):g(e,t,o)),y=b((e,r,t,n,o,i)=>{if(!a(r,t))return g(e,t,i);var f=l(r,t,o,n);return f?u(f):(v(p(r,e,t,o,n)),u(s(r,t,n)))}),w=b((e,r,t,n,o,f)=>{if(!a(r,t))return g(e,t,f);var s=d(r,t,n);return i(o,s)||v(c(r,t,s,o)),u(r[t][s])}),S={},j={176:()=>w("default","@jupyterlab/services",!1,[1,7,5,4]),247:()=>w("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",1]),481:()=>y("default","@jupyterlab/docregistry",!1,[1,4,5,4]),863:()=>w("default","@jupyterlab/coreutils",!1,[1,6,5,4]),32:()=>m("default","viewarr",!1,()=>O.e(764).then(()=>()=>O(764)))},k={32:[32],777:[176,247,481,863]},E={},O.f.consumes=(e,r)=>{O.o(k,e)&&k[e].forEach(e=>{if(O.o(S,e))return r.push(S[e]);if(!E[e]){var t=r=>{S[e]=0,O.m[e]=t=>{delete O.c[e],t.exports=r()}};E[e]=!0;var n=r=>{delete S[e],O.m[e]=t=>{throw delete O.c[e],r}};try{var o=j[e]();o.then?r.push(S[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}})},(()=>{O.b="undefined"!=typeof document&&document.baseURI||self.location.href;var e={712:0};O.f.j=(r,t)=>{var n=O.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(32!=r){var o=new Promise((t,o)=>n=e[r]=[t,o]);t.push(n[2]=o);var i=O.p+O.u(r),a=new Error;O.l(i,t=>{if(O.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;a.message="Loading chunk "+r+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}},"chunk-"+r,r)}else e[r]=0};var r=(r,t)=>{var n,o,[i,a,u]=t,f=0;if(i.some(r=>0!==e[r])){for(n in a)O.o(a,n)&&(O.m[n]=a[n]);u&&u(O)}for(r&&r(t);f<i.length;f++)o=i[f],O.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=self.webpackChunkfitsview=self.webpackChunkfitsview||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),O.nc=void 0;var x=O(215);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB).fitsview=x})();