react-cheminfo 0.29.0 → 0.31.0

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.
Files changed (126) hide show
  1. package/README.md +62 -2
  2. package/lib/chrome/ui/AccountButton.d.ts +76 -0
  3. package/lib/chrome/ui/AccountButton.d.ts.map +1 -0
  4. package/lib/chrome/ui/AccountButton.js +66 -0
  5. package/lib/chrome/ui/AccountButton.js.map +1 -0
  6. package/lib/chrome/ui/index.d.ts +2 -0
  7. package/lib/chrome/ui/index.d.ts.map +1 -1
  8. package/lib/chrome/ui/index.js +1 -0
  9. package/lib/chrome/ui/index.js.map +1 -1
  10. package/lib/clipboard/ui/ClickToCopy.d.ts +6 -0
  11. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  12. package/lib/clipboard/ui/ClickToCopy.js +3 -3
  13. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  14. package/lib/download/core/downloadFigure.d.ts +7 -5
  15. package/lib/download/core/downloadFigure.d.ts.map +1 -1
  16. package/lib/download/core/downloadFigure.js +7 -6
  17. package/lib/download/core/downloadFigure.js.map +1 -1
  18. package/lib/download/core/figureLayout.d.ts +55 -0
  19. package/lib/download/core/figureLayout.d.ts.map +1 -0
  20. package/lib/download/core/figureLayout.js +89 -0
  21. package/lib/download/core/figureLayout.js.map +1 -0
  22. package/lib/download/core/figureScale.d.ts +9 -0
  23. package/lib/download/core/figureScale.d.ts.map +1 -1
  24. package/lib/download/core/figureScale.js +10 -0
  25. package/lib/download/core/figureScale.js.map +1 -1
  26. package/lib/download/core/figureSettle.d.ts +51 -0
  27. package/lib/download/core/figureSettle.d.ts.map +1 -0
  28. package/lib/download/core/figureSettle.js +81 -0
  29. package/lib/download/core/figureSettle.js.map +1 -0
  30. package/lib/download/core/figureSvg.d.ts +7 -1
  31. package/lib/download/core/figureSvg.d.ts.map +1 -1
  32. package/lib/download/core/figureSvg.js +1 -0
  33. package/lib/download/core/figureSvg.js.map +1 -1
  34. package/lib/download/core/figureSvgDocument.d.ts +7 -0
  35. package/lib/download/core/figureSvgDocument.d.ts.map +1 -1
  36. package/lib/download/core/figureSvgDocument.js +11 -2
  37. package/lib/download/core/figureSvgDocument.js.map +1 -1
  38. package/lib/download/core/index.d.ts +5 -1
  39. package/lib/download/core/index.d.ts.map +1 -1
  40. package/lib/download/core/index.js +3 -1
  41. package/lib/download/core/index.js.map +1 -1
  42. package/lib/download/ui/FigureDownload.d.ts +18 -4
  43. package/lib/download/ui/FigureDownload.d.ts.map +1 -1
  44. package/lib/download/ui/FigureDownload.js +35 -9
  45. package/lib/download/ui/FigureDownload.js.map +1 -1
  46. package/lib/download/ui/FigureDownloadPanel.d.ts +17 -7
  47. package/lib/download/ui/FigureDownloadPanel.d.ts.map +1 -1
  48. package/lib/download/ui/FigureDownloadPanel.js +30 -22
  49. package/lib/download/ui/FigureDownloadPanel.js.map +1 -1
  50. package/lib/download/ui/FigureSizeField.d.ts +27 -0
  51. package/lib/download/ui/FigureSizeField.d.ts.map +1 -0
  52. package/lib/download/ui/FigureSizeField.js +87 -0
  53. package/lib/download/ui/FigureSizeField.js.map +1 -0
  54. package/lib/download/ui/FigureSizeRows.d.ts +34 -0
  55. package/lib/download/ui/FigureSizeRows.d.ts.map +1 -0
  56. package/lib/download/ui/FigureSizeRows.js +54 -0
  57. package/lib/download/ui/FigureSizeRows.js.map +1 -0
  58. package/lib/download/ui/index.d.ts +2 -0
  59. package/lib/download/ui/index.d.ts.map +1 -1
  60. package/lib/download/ui/index.js.map +1 -1
  61. package/lib/download/ui/useFigureRedraw.d.ts +27 -0
  62. package/lib/download/ui/useFigureRedraw.d.ts.map +1 -0
  63. package/lib/download/ui/useFigureRedraw.js +78 -0
  64. package/lib/download/ui/useFigureRedraw.js.map +1 -0
  65. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  66. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  67. package/lib/locales/de.json +13 -2
  68. package/lib/locales/en.json +13 -2
  69. package/lib/locales/es.json +13 -2
  70. package/lib/locales/fr.json +13 -2
  71. package/lib/overlay/ui/OverlayValueMenu.d.ts.map +1 -1
  72. package/lib/overlay/ui/OverlayValueMenu.js +7 -1
  73. package/lib/overlay/ui/OverlayValueMenu.js.map +1 -1
  74. package/lib/structure/core/conformerBoltzmann.d.ts +56 -0
  75. package/lib/structure/core/conformerBoltzmann.d.ts.map +1 -0
  76. package/lib/structure/core/conformerBoltzmann.js +96 -0
  77. package/lib/structure/core/conformerBoltzmann.js.map +1 -0
  78. package/lib/structure/core/conformerEnergy.d.ts +69 -0
  79. package/lib/structure/core/conformerEnergy.d.ts.map +1 -0
  80. package/lib/structure/core/conformerEnergy.js +47 -0
  81. package/lib/structure/core/conformerEnergy.js.map +1 -0
  82. package/lib/structure/core/index.d.ts +3 -0
  83. package/lib/structure/core/index.d.ts.map +1 -1
  84. package/lib/structure/core/index.js +2 -0
  85. package/lib/structure/core/index.js.map +1 -1
  86. package/lib/structure/ui/ConformerTable.d.ts +73 -0
  87. package/lib/structure/ui/ConformerTable.d.ts.map +1 -0
  88. package/lib/structure/ui/ConformerTable.js +259 -0
  89. package/lib/structure/ui/ConformerTable.js.map +1 -0
  90. package/lib/structure/ui/conformerColumns.d.ts +30 -0
  91. package/lib/structure/ui/conformerColumns.d.ts.map +1 -0
  92. package/lib/structure/ui/conformerColumns.js +37 -0
  93. package/lib/structure/ui/conformerColumns.js.map +1 -0
  94. package/lib/ui.d.ts +4 -0
  95. package/lib/ui.d.ts.map +1 -1
  96. package/lib/ui.js +2 -0
  97. package/lib/ui.js.map +1 -1
  98. package/package.json +1 -1
  99. package/src/chrome/ui/AccountButton.tsx +185 -0
  100. package/src/chrome/ui/index.ts +2 -0
  101. package/src/clipboard/ui/ClickToCopy.tsx +9 -1
  102. package/src/download/core/downloadFigure.ts +12 -9
  103. package/src/download/core/figureLayout.ts +114 -0
  104. package/src/download/core/figureScale.ts +13 -0
  105. package/src/download/core/figureSettle.ts +112 -0
  106. package/src/download/core/figureSvg.ts +8 -1
  107. package/src/download/core/figureSvgDocument.ts +19 -2
  108. package/src/download/core/index.ts +13 -0
  109. package/src/download/ui/FigureDownload.tsx +88 -35
  110. package/src/download/ui/FigureDownloadPanel.tsx +45 -22
  111. package/src/download/ui/FigureSizeField.tsx +153 -0
  112. package/src/download/ui/FigureSizeRows.tsx +108 -0
  113. package/src/download/ui/index.ts +2 -0
  114. package/src/download/ui/useFigureRedraw.tsx +115 -0
  115. package/src/locales/de.json +13 -2
  116. package/src/locales/en.json +13 -2
  117. package/src/locales/es.json +13 -2
  118. package/src/locales/fr.json +13 -2
  119. package/src/overlay/ui/OverlayValueMenu.tsx +7 -1
  120. package/src/structure/core/conformerBoltzmann.ts +102 -0
  121. package/src/structure/core/conformerEnergy.ts +97 -0
  122. package/src/structure/core/index.ts +15 -0
  123. package/src/structure/ui/ConformerTable.tsx +429 -0
  124. package/src/structure/ui/conformerColumns.ts +55 -0
  125. package/src/ui.ts +12 -0
  126. package/styles/chrome.css +55 -0
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "language.label": "Sprache",
3
3
  "chrome.pages": "Seiten",
4
+ "account.signIn": "Anmelden",
5
+ "account.signOut": "Abmelden",
6
+ "account.signedInAs": "Angemeldet als {name}",
4
7
  "ecosystem.tools": "Werkzeuge",
5
8
  "ecosystem.menuHeading": "Unsere Werkzeuge, alle im Browser",
6
9
  "ecosystem.otherTools": "Unsere weiteren Werkzeuge",
@@ -180,12 +183,20 @@
180
183
  "download.format": "Format",
181
184
  "download.formatHelp": "Ein PNG ist ein Bild der Abbildung, und das ist es, was eine Folie, ein Chatfenster oder ein Ticket annimmt. Ein SVG ist die Abbildung selbst: jede Linie bleibt scharf, wie weit man sie auch vergrößert, und sie lässt sich nachträglich bearbeiten.",
182
185
  "download.resolution": "Auflösung",
183
- "download.resolutionHelp": "Wie viele Pixel für jedes Pixel der Abbildung auf dem Bildschirm gemalt werden. Zwei passt für eine Folie, drei oder vier für den Druck. Ein SVG hat keine eigene Auflösung und wird daher in jeder Größe scharf gespeichert.",
186
+ "download.resolutionHelp": "Wie viele Male größer als die Abbildung auf dem Bildschirm die Datei ist. Ein PNG bekommt entsprechend mehr Pixel: zwei passt für eine Folie, drei oder vier für den Druck. Ein SVG bleibt in jeder Größe scharf und öffnet sich entsprechend größer.",
184
187
  "download.resolutionExample": "Eine auf dem Bildschirm 640 Pixel breite Abbildung wird 1280 Pixel breit gespeichert.",
185
188
  "download.noFigure": "Auf der Seite gibt es noch keine Abbildung zum Speichern.",
186
189
  "download.hintRasterSvg": "Ein SVG, das ein Bild von {pixels} enthält: eine 3D-Szene hat keine Vektorform.",
187
- "download.hintSvg": "Ein SVG bleibt in jeder Größe scharf, die Auflösung gilt also nicht. Gezeichnet {pixels}.",
190
+ "download.hintSvg": "Öffnet sich mit {pixels} und bleibt in jeder Größe scharf.",
188
191
  "download.hintPng": "Gespeichert {pixels}.",
192
+ "download.size": "Größe",
193
+ "download.sizeHelp": "Die Form, in der die Abbildung für die Datei gezeichnet wird. Sie wird neu gesetzt, sodass Achsen und Beschriftungen in diese Form passen, statt hineingedehnt zu werden. Eine Zeitschriftenspalte ist 8,5 cm breit, und ihr Text wird in der Größe gedruckt, in der er auf dem Bildschirm steht.",
194
+ "download.sizeScreen": "Wie angezeigt",
195
+ "download.sizeColumn": "Zeitschriftenspalte",
196
+ "download.sizeCustom": "Eigene",
197
+ "download.customSize": "Breite × Höhe",
198
+ "download.width": "Breite",
199
+ "download.height": "Höhe",
189
200
  "pedagogy.check": "Prüfen",
190
201
  "pedagogy.revealHint": "Hinweis zeigen",
191
202
  "pedagogy.revealHintCount": "Hinweis zeigen ({revealed}/{total})",
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "language.label": "Language",
3
3
  "chrome.pages": "Pages",
4
+ "account.signIn": "Sign in",
5
+ "account.signOut": "Sign out",
6
+ "account.signedInAs": "Signed in as {name}",
4
7
  "ecosystem.tools": "Tools",
5
8
  "ecosystem.menuHeading": "Our tools, all in the browser",
6
9
  "ecosystem.otherTools": "Our other tools",
@@ -180,12 +183,20 @@
180
183
  "download.format": "Format",
181
184
  "download.formatHelp": "A PNG is a picture of the figure, which is what a slide, a chat window or an issue accepts. An SVG is the figure itself: every line stays sharp however far it is enlarged, and it can still be edited afterwards.",
182
185
  "download.resolution": "Resolution",
183
- "download.resolutionHelp": "How many pixels are painted for each pixel of the figure on screen. Two is right for a slide, three or four for print. An SVG carries no resolution of its own, so it is saved sharp at every size.",
186
+ "download.resolutionHelp": "How many times the figure on screen the file is. A PNG gets that many more pixels: two is right for a slide, three or four for print. An SVG stays sharp at any size, and opens that many times larger.",
184
187
  "download.resolutionExample": "A figure 640 pixels wide on screen is saved 1280 pixels wide.",
185
188
  "download.noFigure": "There is no figure on the page to save yet.",
186
189
  "download.hintRasterSvg": "An SVG holding a picture of {pixels}: a 3D scene has no vector form.",
187
- "download.hintSvg": "An SVG stays sharp at any size, so the resolution does not apply. Drawn {pixels}.",
190
+ "download.hintSvg": "Opens at {pixels}, and stays sharp at any size.",
188
191
  "download.hintPng": "Saved {pixels}.",
192
+ "download.size": "Size",
193
+ "download.sizeHelp": "The shape the figure is drawn at for the file. It is laid out again, so the axes and labels fit that shape instead of being stretched into it. A journal column is 8.5 cm wide, and its text prints at the size it reads on screen.",
194
+ "download.sizeScreen": "As shown",
195
+ "download.sizeColumn": "Journal column",
196
+ "download.sizeCustom": "Custom",
197
+ "download.customSize": "Width × height",
198
+ "download.width": "Width",
199
+ "download.height": "Height",
189
200
  "pedagogy.check": "Check",
190
201
  "pedagogy.revealHint": "Reveal hint",
191
202
  "pedagogy.revealHintCount": "Reveal hint ({revealed}/{total})",
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "language.label": "Idioma",
3
3
  "chrome.pages": "Páginas",
4
+ "account.signIn": "Iniciar sesión",
5
+ "account.signOut": "Cerrar sesión",
6
+ "account.signedInAs": "Sesión iniciada como {name}",
4
7
  "ecosystem.tools": "Herramientas",
5
8
  "ecosystem.menuHeading": "Nuestras herramientas, todas en el navegador",
6
9
  "ecosystem.otherTools": "Nuestras otras herramientas",
@@ -180,12 +183,20 @@
180
183
  "download.format": "Formato",
181
184
  "download.formatHelp": "Un PNG es una imagen de la figura, que es lo que aceptan una diapositiva, una ventana de chat o una incidencia. Un SVG es la figura misma: cada línea sigue nítida por mucho que se amplíe, y todavía puede editarse después.",
182
185
  "download.resolution": "Resolución",
183
- "download.resolutionHelp": "Cuántos píxeles se pintan por cada píxel de la figura en pantalla. Dos va bien para una diapositiva, tres o cuatro para imprimir. Un SVG no tiene resolución propia, así que se guarda nítido a cualquier tamaño.",
186
+ "download.resolutionHelp": "Cuántas veces la figura en pantalla mide el archivo. Un PNG recibe tantos píxeles más: dos sirve para una diapositiva, tres o cuatro para imprimir. Un SVG se mantiene nítido a cualquier tamaño, y se abre tantas veces más grande.",
184
187
  "download.resolutionExample": "Una figura de 640 píxeles de ancho en pantalla se guarda con 1280 píxeles de ancho.",
185
188
  "download.noFigure": "Todavía no hay ninguna figura en la página que guardar.",
186
189
  "download.hintRasterSvg": "Un SVG que contiene una imagen de {pixels}: una escena 3D no tiene forma vectorial.",
187
- "download.hintSvg": "Un SVG sigue nítido a cualquier tamaño, de modo que la resolución no se aplica. Dibujado {pixels}.",
190
+ "download.hintSvg": "Se abre a {pixels}, y se mantiene nítido a cualquier tamaño.",
188
191
  "download.hintPng": "Guardado {pixels}.",
192
+ "download.size": "Tamaño",
193
+ "download.sizeHelp": "La forma con la que se dibuja la figura para el archivo. Se vuelve a maquetar, de modo que los ejes y las etiquetas se ajustan a esa forma en lugar de estirarse. Una columna de revista mide 8,5 cm, y su texto se imprime al tamaño con que se lee en pantalla.",
194
+ "download.sizeScreen": "Como se muestra",
195
+ "download.sizeColumn": "Columna de revista",
196
+ "download.sizeCustom": "Personalizado",
197
+ "download.customSize": "Ancho × alto",
198
+ "download.width": "Ancho",
199
+ "download.height": "Alto",
189
200
  "pedagogy.check": "Comprobar",
190
201
  "pedagogy.revealHint": "Mostrar una pista",
191
202
  "pedagogy.revealHintCount": "Mostrar una pista ({revealed}/{total})",
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "language.label": "Langue",
3
3
  "chrome.pages": "Pages",
4
+ "account.signIn": "Se connecter",
5
+ "account.signOut": "Se déconnecter",
6
+ "account.signedInAs": "Connecté comme {name}",
4
7
  "ecosystem.tools": "Outils",
5
8
  "ecosystem.menuHeading": "Nos outils, tous dans le navigateur",
6
9
  "ecosystem.otherTools": "Nos autres outils",
@@ -180,12 +183,20 @@
180
183
  "download.format": "Format",
181
184
  "download.formatHelp": "Un PNG est une image de la figure, ce qu'acceptent une diapositive, une fenêtre de discussion ou un ticket. Un SVG est la figure elle-même : chaque trait reste net quel que soit l'agrandissement, et il reste modifiable ensuite.",
182
185
  "download.resolution": "Résolution",
183
- "download.resolutionHelp": "Combien de pixels sont peints pour chaque pixel de la figure à l'écran. Deux convient pour une diapositive, trois ou quatre pour l'impression. Un SVG n'a pas de résolution propre : il est enregistré net à toute taille.",
186
+ "download.resolutionHelp": "Combien de fois la figure à l'écran mesure le fichier. Un PNG reçoit d'autant plus de pixels : deux convient pour une diapositive, trois ou quatre pour l'impression. Un SVG reste net à toute taille, et s'ouvre d'autant plus grand.",
184
187
  "download.resolutionExample": "Une figure large de 640 pixels à l'écran est enregistrée large de 1280 pixels.",
185
188
  "download.noFigure": "Il n'y a encore aucune figure à enregistrer sur la page.",
186
189
  "download.hintRasterSvg": "Un SVG contenant une image de {pixels} : une scène 3D n'a pas de forme vectorielle.",
187
- "download.hintSvg": "Un SVG reste net à toute taille, la résolution ne s'applique donc pas. Dessiné {pixels}.",
190
+ "download.hintSvg": "S'ouvre à {pixels}, et reste net à toute taille.",
188
191
  "download.hintPng": "Enregistré {pixels}.",
192
+ "download.size": "Taille",
193
+ "download.sizeHelp": "La forme à laquelle la figure est dessinée pour le fichier. Elle est remise en page, si bien que les axes et les étiquettes s'ajustent à cette forme au lieu d'y être étirés. Une colonne de revue mesure 8,5 cm, et son texte s'imprime à la taille où il se lit à l'écran.",
194
+ "download.sizeScreen": "Comme affichée",
195
+ "download.sizeColumn": "Colonne de revue",
196
+ "download.sizeCustom": "Personnalisée",
197
+ "download.customSize": "Largeur × hauteur",
198
+ "download.width": "Largeur",
199
+ "download.height": "Hauteur",
189
200
  "pedagogy.check": "Vérifier",
190
201
  "pedagogy.revealHint": "Révéler un indice",
191
202
  "pedagogy.revealHintCount": "Révéler un indice ({revealed}/{total})",
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayValueMenu.d.ts","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayValueMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IACnE;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAC7D,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACnC,YAAY,CAuDd"}
1
+ {"version":3,"file":"OverlayValueMenu.d.ts","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayValueMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IACnE;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAC7D,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,GACnC,YAAY,CA6Dd"}
@@ -26,7 +26,13 @@ export function OverlayValueMenu(props) {
26
26
  if (option.value === value)
27
27
  written = option.label;
28
28
  }
29
- return (_jsx(PopoverNext, { isOpen: open, disabled: disabled, placement: placement, onInteraction: (next) => setOpen(next), content: _jsxs(Menu, { role: "listbox", "aria-labelledby": headingId, size: metrics.blueprintSize, style: OVERLAY_VALUE_MENU_STYLE, children: [_jsx(MenuDivider, { title: label, titleId: headingId }), options.map((option) => (_jsx(MenuItem, { roleStructure: "listoption", selected: option.value === value, text: option.label, htmlTitle: option.title, disabled: option.disabled, onClick: () => onChange(option.value) }, option.value)))] }), children: _jsx(OverlayValueButton, { label: label, value: written, keyWord: keyWord, showKey: showKey, swatches: swatches, active: open, disabled: disabled, disabledReason: disabledReason, testId: testId, opensMenu: true }) }));
29
+ return (_jsx(PopoverNext, { isOpen: open, disabled: disabled, placement: placement, onInteraction: (next) => setOpen(next), content: _jsxs(Menu, { role: "listbox", "aria-labelledby": headingId, size: metrics.blueprintSize, style: OVERLAY_VALUE_MENU_STYLE, children: [_jsx(MenuDivider, { title: label, titleId: headingId }), options.map((option) => (_jsx(MenuItem, { roleStructure: "listoption", selected: option.value === value, text: option.label, htmlTitle: option.title, disabled: option.disabled,
30
+ // A menu opened from inside a panel would otherwise dismiss the
31
+ // panel too, taking the reader's other settings away mid-choice.
32
+ shouldDismissPopover: false, onClick: () => {
33
+ onChange(option.value);
34
+ setOpen(false);
35
+ } }, option.value)))] }), children: _jsx(OverlayValueButton, { label: label, value: written, keyWord: keyWord, showKey: showKey, swatches: swatches, active: open, disabled: disabled, disabledReason: disabledReason, testId: testId, opensMenu: true }) }));
30
36
  }
31
37
  /**
32
38
  * The menu the value opens.
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayValueMenu.js","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayValueMenu.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAuDxD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoC;IAEpC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC7D,MAAM,EAAE,SAAS,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,GAAW,KAAK,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,OAAO,CACL,KAAC,WAAW,IACV,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EACL,MAAC,IAAI,IACH,IAAI,EAAC,SAAS,qBACG,SAAS,EAC1B,IAAI,EAAE,OAAO,CAAC,aAAa,EAC3B,KAAK,EAAE,wBAAwB,aAE/B,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAI,EAChD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,QAAQ,IAEP,aAAa,EAAC,YAAY,EAC1B,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,KAAK,EAChC,IAAI,EAAE,MAAM,CAAC,KAAK,EAClB,SAAS,EAAE,MAAM,CAAC,KAAK,EACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IANhC,MAAM,CAAC,KAAK,CAOjB,CACH,CAAC,IACG,YAGT,KAAC,kBAAkB,IACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,SACT,GACU,CACf,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,wBAAwB,GAAkB;IAC9C,QAAQ,EAAE,GAAG;CACd,CAAC"}
1
+ {"version":3,"file":"OverlayValueMenu.js","sourceRoot":"","sources":["../../../src/overlay/ui/OverlayValueMenu.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAuDxD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoC;IAEpC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC7D,MAAM,EAAE,SAAS,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,OAAO,GAAW,KAAK,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,OAAO,CACL,KAAC,WAAW,IACV,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EACL,MAAC,IAAI,IACH,IAAI,EAAC,SAAS,qBACG,SAAS,EAC1B,IAAI,EAAE,OAAO,CAAC,aAAa,EAC3B,KAAK,EAAE,wBAAwB,aAE/B,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,GAAI,EAChD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,QAAQ,IAEP,aAAa,EAAC,YAAY,EAC1B,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,KAAK,EAChC,IAAI,EAAE,MAAM,CAAC,KAAK,EAClB,SAAS,EAAE,MAAM,CAAC,KAAK,EACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,gEAAgE;oBAChE,iEAAiE;oBACjE,oBAAoB,EAAE,KAAK,EAC3B,OAAO,EAAE,GAAG,EAAE;wBACZ,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACvB,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,IAZI,MAAM,CAAC,KAAK,CAajB,CACH,CAAC,IACG,YAGT,KAAC,kBAAkB,IACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,SACT,GACU,CACf,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,wBAAwB,GAAkB;IAC9C,QAAQ,EAAE,GAAG;CACd,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * How a set of conformers divides itself between its minima at a temperature.
3
+ *
4
+ * Each conformer in the list is one minimum of the surface, so the share of
5
+ * molecules sitting in it is its Boltzmann factor over the sum of them all.
6
+ * Mirror-image conformers are separate entries and therefore counted twice,
7
+ * which is right: they are two distinct microstates, and that is what makes
8
+ * butane two-thirds gauche at room temperature rather than one-half.
9
+ *
10
+ * What this is not: a free energy. The weights come from a single energy per
11
+ * conformer, with no vibrational entropy, no zero-point energy and no solvent,
12
+ * so a share is the shape of the answer rather than the answer. It is also only
13
+ * as good as the energies handed to it — see {@link boltzmannConfidence}, which
14
+ * is what a table showing these shares says out loud.
15
+ */
16
+ /** Room temperature, in kelvin, and what a share is quoted at unless asked otherwise. */
17
+ export declare const ROOM_TEMPERATURE = 300;
18
+ /**
19
+ * The gas constant in kcal/(mol·K), matching MMFF94's own energy unit.
20
+ *
21
+ * At {@link ROOM_TEMPERATURE} this makes RT 0.596 kcal/mol, so a conformer one
22
+ * kcal/mol up is populated about a fifth as much as the lowest.
23
+ */
24
+ export declare const GAS_CONSTANT = 0.001987204259;
25
+ /**
26
+ * The share of molecules in each conformer at thermal equilibrium.
27
+ *
28
+ * The energies are taken relative to whichever is lowest, so they may be
29
+ * absolute or already relative. A conformer whose energy is unknown takes no
30
+ * share and is left out of the sum: it cannot be placed on the surface, and
31
+ * spreading the remainder over the others is a smaller lie than inventing a
32
+ * weight for it.
33
+ * @param energies - One energy per conformer in kcal/mol, `null` where unknown.
34
+ * @param temperature - Temperature in kelvin.
35
+ * @default ROOM_TEMPERATURE
36
+ * @returns One share per conformer, from 0 to 1 and summing to 1 over the ones
37
+ * that have an energy; `null` wherever the energy was `null`.
38
+ */
39
+ export declare function boltzmannShares(energies: ReadonlyArray<number | null>, temperature?: number): Array<number | null>;
40
+ /**
41
+ * The factor a share is uncertain by, given how well the energies behind it are
42
+ * known.
43
+ *
44
+ * A population is exponential in the energy gap, so an error in a relative
45
+ * energy is an error in a share by `exp(error / RT)` — and RT is 0.596 kcal/mol
46
+ * at {@link ROOM_TEMPERATURE}. A force field that ranks conformers to within
47
+ * about 1.5 kcal/mol therefore places a population to within a factor of
48
+ * roughly twelve, which is why a share read off one is a shape and not a
49
+ * number.
50
+ * @param energyError - The typical error of a relative energy, kcal/mol.
51
+ * @param temperature - Temperature in kelvin.
52
+ * @default ROOM_TEMPERATURE
53
+ * @returns The multiplicative factor, at least 1.
54
+ */
55
+ export declare function boltzmannConfidence(energyError: number, temperature?: number): number;
56
+ //# sourceMappingURL=conformerBoltzmann.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformerBoltzmann.d.ts","sourceRoot":"","sources":["../../../src/structure/core/conformerBoltzmann.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,yFAAyF;AACzF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,iBAAoB,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,EACtC,WAAW,GAAE,MAAyB,GACrC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCtB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAyB,GACrC,MAAM,CAIR"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * How a set of conformers divides itself between its minima at a temperature.
3
+ *
4
+ * Each conformer in the list is one minimum of the surface, so the share of
5
+ * molecules sitting in it is its Boltzmann factor over the sum of them all.
6
+ * Mirror-image conformers are separate entries and therefore counted twice,
7
+ * which is right: they are two distinct microstates, and that is what makes
8
+ * butane two-thirds gauche at room temperature rather than one-half.
9
+ *
10
+ * What this is not: a free energy. The weights come from a single energy per
11
+ * conformer, with no vibrational entropy, no zero-point energy and no solvent,
12
+ * so a share is the shape of the answer rather than the answer. It is also only
13
+ * as good as the energies handed to it — see {@link boltzmannConfidence}, which
14
+ * is what a table showing these shares says out loud.
15
+ */
16
+ /** Room temperature, in kelvin, and what a share is quoted at unless asked otherwise. */
17
+ export const ROOM_TEMPERATURE = 300;
18
+ /**
19
+ * The gas constant in kcal/(mol·K), matching MMFF94's own energy unit.
20
+ *
21
+ * At {@link ROOM_TEMPERATURE} this makes RT 0.596 kcal/mol, so a conformer one
22
+ * kcal/mol up is populated about a fifth as much as the lowest.
23
+ */
24
+ export const GAS_CONSTANT = 0.001_987_204_259;
25
+ /**
26
+ * The share of molecules in each conformer at thermal equilibrium.
27
+ *
28
+ * The energies are taken relative to whichever is lowest, so they may be
29
+ * absolute or already relative. A conformer whose energy is unknown takes no
30
+ * share and is left out of the sum: it cannot be placed on the surface, and
31
+ * spreading the remainder over the others is a smaller lie than inventing a
32
+ * weight for it.
33
+ * @param energies - One energy per conformer in kcal/mol, `null` where unknown.
34
+ * @param temperature - Temperature in kelvin.
35
+ * @default ROOM_TEMPERATURE
36
+ * @returns One share per conformer, from 0 to 1 and summing to 1 over the ones
37
+ * that have an energy; `null` wherever the energy was `null`.
38
+ */
39
+ export function boltzmannShares(energies, temperature = ROOM_TEMPERATURE) {
40
+ const shares = new Array(energies.length).fill(null);
41
+ if (energies.length === 0)
42
+ return shares;
43
+ let lowest = Number.POSITIVE_INFINITY;
44
+ for (const energy of energies) {
45
+ if (energy !== null && Number.isFinite(energy) && energy < lowest) {
46
+ lowest = energy;
47
+ }
48
+ }
49
+ if (lowest === Number.POSITIVE_INFINITY)
50
+ return shares;
51
+ // Measured from the lowest, so every exponent is at most zero and the sum
52
+ // cannot overflow however far apart the energies are.
53
+ const rt = GAS_CONSTANT * temperature;
54
+ if (!(rt > 0))
55
+ return shares;
56
+ const factors = new Array(energies.length).fill(null);
57
+ let total = 0;
58
+ for (let index = 0; index < energies.length; index++) {
59
+ const energy = energies[index] ?? null;
60
+ if (energy === null || !Number.isFinite(energy))
61
+ continue;
62
+ const factor = Math.exp(-(energy - lowest) / rt);
63
+ factors[index] = factor;
64
+ total += factor;
65
+ }
66
+ if (total === 0)
67
+ return shares;
68
+ for (let index = 0; index < factors.length; index++) {
69
+ const factor = factors[index] ?? null;
70
+ if (factor !== null)
71
+ shares[index] = factor / total;
72
+ }
73
+ return shares;
74
+ }
75
+ /**
76
+ * The factor a share is uncertain by, given how well the energies behind it are
77
+ * known.
78
+ *
79
+ * A population is exponential in the energy gap, so an error in a relative
80
+ * energy is an error in a share by `exp(error / RT)` — and RT is 0.596 kcal/mol
81
+ * at {@link ROOM_TEMPERATURE}. A force field that ranks conformers to within
82
+ * about 1.5 kcal/mol therefore places a population to within a factor of
83
+ * roughly twelve, which is why a share read off one is a shape and not a
84
+ * number.
85
+ * @param energyError - The typical error of a relative energy, kcal/mol.
86
+ * @param temperature - Temperature in kelvin.
87
+ * @default ROOM_TEMPERATURE
88
+ * @returns The multiplicative factor, at least 1.
89
+ */
90
+ export function boltzmannConfidence(energyError, temperature = ROOM_TEMPERATURE) {
91
+ const rt = GAS_CONSTANT * temperature;
92
+ if (!(rt > 0) || !Number.isFinite(energyError) || energyError <= 0)
93
+ return 1;
94
+ return Math.exp(energyError / rt);
95
+ }
96
+ //# sourceMappingURL=conformerBoltzmann.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformerBoltzmann.js","sourceRoot":"","sources":["../../../src/structure/core/conformerBoltzmann.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAsC,EACtC,cAAsB,gBAAgB;IAEtC,MAAM,MAAM,GAAyB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAEzC,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;YAClE,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,CAAC,iBAAiB;QAAE,OAAO,MAAM,CAAC;IAEvD,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC;IACtC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAE7B,MAAM,OAAO,GAAyB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACvC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACxB,KAAK,IAAI,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAE/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACtC,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,cAAsB,gBAAgB;IAEtC,MAAM,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC;IACtC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Which energy of a conformer a reader is being shown.
3
+ *
4
+ * A refined conformer carries two of everything — what the force field said and
5
+ * what the better method said afterwards — and a table that mixes them is a
6
+ * ranking of nothing. So every column reads through one of these, and they all
7
+ * take the same ranking.
8
+ */
9
+ import type { ConformerRanking } from './conformers.ts';
10
+ /**
11
+ * What a refinement has to say for an energy column to read it.
12
+ *
13
+ * The structural minimum rather than the whole `ConformerRefinement`, so a site
14
+ * that carries its conformers in a shape of its own — positions instead of a
15
+ * molfile, say — can still be read by the same helpers and drawn by the same
16
+ * table.
17
+ */
18
+ export interface ConformerRowRefinement {
19
+ /** The rank this conformer held before the refinement reordered the set. */
20
+ forceFieldId: number;
21
+ /** Total energy at the relaxed geometry, kcal/mol. */
22
+ energy: number;
23
+ /** Energy above the most stable refined conformer, kcal/mol. */
24
+ relativeEnergy: number;
25
+ }
26
+ /**
27
+ * The least a conformer must carry to be ranked and drawn.
28
+ *
29
+ * `Conformer` from `react-cheminfo/conformers` satisfies it, and so does any
30
+ * per-site record that keeps the same three numbers.
31
+ */
32
+ export interface ConformerRow {
33
+ /** 1-based rank in the set, most stable first. */
34
+ id: number;
35
+ /** Total force-field energy in kcal/mol, `null` when not computed. */
36
+ energy: number | null;
37
+ /** Energy above the most stable conformer, `null` without an energy. */
38
+ relativeEnergy: number | null;
39
+ /**
40
+ * What a better method said, once the set has been refined.
41
+ * @default null
42
+ */
43
+ refinement?: ConformerRowRefinement | null;
44
+ }
45
+ /**
46
+ * The energy above the most stable conformer, in the ranking asked for.
47
+ * @param conformer - The conformer to read.
48
+ * @param ranking - Which method's energies to read.
49
+ * @default 'force-field'
50
+ * @returns kcal/mol above the lowest, or `null` when that method produced none.
51
+ */
52
+ export declare function relativeEnergyOf(conformer: ConformerRow, ranking?: ConformerRanking): number | null;
53
+ /**
54
+ * The total energy, in the ranking asked for, so the two columns of a row
55
+ * describe one method.
56
+ * @param conformer - The conformer to read.
57
+ * @param ranking - Which method's energies to read.
58
+ * @default 'force-field'
59
+ * @returns kcal/mol, or `null` when that method produced none.
60
+ */
61
+ export declare function totalEnergyOf(conformer: ConformerRow, ranking?: ConformerRanking): number | null;
62
+ /**
63
+ * The ranking a set should be read in: refined once anything has been refined,
64
+ * the force field's until then.
65
+ * @param conformers - The set to inspect.
66
+ * @returns `'refined'` when at least one conformer carries a refinement.
67
+ */
68
+ export declare function bestRanking(conformers: readonly ConformerRow[]): ConformerRanking;
69
+ //# sourceMappingURL=conformerEnergy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformerEnergy.d.ts","sourceRoot":"","sources":["../../../src/structure/core/conformerEnergy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wEAAwE;IACxE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC5C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE,gBAAgC,GACxC,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE,gBAAgC,GACxC,MAAM,GAAG,IAAI,CAIf;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,SAAS,YAAY,EAAE,GAClC,gBAAgB,CAKlB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Which energy of a conformer a reader is being shown.
3
+ *
4
+ * A refined conformer carries two of everything — what the force field said and
5
+ * what the better method said afterwards — and a table that mixes them is a
6
+ * ranking of nothing. So every column reads through one of these, and they all
7
+ * take the same ranking.
8
+ */
9
+ /**
10
+ * The energy above the most stable conformer, in the ranking asked for.
11
+ * @param conformer - The conformer to read.
12
+ * @param ranking - Which method's energies to read.
13
+ * @default 'force-field'
14
+ * @returns kcal/mol above the lowest, or `null` when that method produced none.
15
+ */
16
+ export function relativeEnergyOf(conformer, ranking = 'force-field') {
17
+ return ranking === 'refined'
18
+ ? (conformer.refinement?.relativeEnergy ?? null)
19
+ : conformer.relativeEnergy;
20
+ }
21
+ /**
22
+ * The total energy, in the ranking asked for, so the two columns of a row
23
+ * describe one method.
24
+ * @param conformer - The conformer to read.
25
+ * @param ranking - Which method's energies to read.
26
+ * @default 'force-field'
27
+ * @returns kcal/mol, or `null` when that method produced none.
28
+ */
29
+ export function totalEnergyOf(conformer, ranking = 'force-field') {
30
+ return ranking === 'refined'
31
+ ? (conformer.refinement?.energy ?? null)
32
+ : conformer.energy;
33
+ }
34
+ /**
35
+ * The ranking a set should be read in: refined once anything has been refined,
36
+ * the force field's until then.
37
+ * @param conformers - The set to inspect.
38
+ * @returns `'refined'` when at least one conformer carries a refinement.
39
+ */
40
+ export function bestRanking(conformers) {
41
+ for (const conformer of conformers) {
42
+ if (conformer.refinement != null)
43
+ return 'refined';
44
+ }
45
+ return 'force-field';
46
+ }
47
+ //# sourceMappingURL=conformerEnergy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformerEnergy.js","sourceRoot":"","sources":["../../../src/structure/core/conformerEnergy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2CH;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAuB,EACvB,UAA4B,aAAa;IAEzC,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,cAAc,IAAI,IAAI,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,SAAuB,EACvB,UAA4B,aAAa;IAEzC,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,UAAmC;IAEnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC;IACrD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,5 +1,8 @@
1
1
  export type { AtomLabelPlacement, LabelledMolecule } from './atomLabels.ts';
2
2
  export { applyAtomLabels, customAtomLabel } from './atomLabels.ts';
3
+ export { GAS_CONSTANT, ROOM_TEMPERATURE, boltzmannConfidence, boltzmannShares, } from './conformerBoltzmann.ts';
4
+ export type { ConformerRow, ConformerRowRefinement, } from './conformerEnergy.ts';
5
+ export { bestRanking, relativeEnergyOf, totalEnergyOf, } from './conformerEnergy.ts';
3
6
  export type { EditorGesture, EditorGuideKey, EditorGuideLink, EditorGuideOptions, EditorGuideScope, EditorGuideSection, } from './editorGuide.ts';
4
7
  export { STRUCTURE_EDITOR_DOCS, STRUCTURE_EDITOR_GUIDE, editorGuideSections, editorKeyLabel, } from './editorGuide.ts';
5
8
  export type { EditorToolbarAvailability, EditorToolbarButton, } from './editorToolbar.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/structure/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/structure/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,YAAY,EACZ,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export { applyAtomLabels, customAtomLabel } from "./atomLabels.js";
2
+ export { GAS_CONSTANT, ROOM_TEMPERATURE, boltzmannConfidence, boltzmannShares, } from "./conformerBoltzmann.js";
3
+ export { bestRanking, relativeEnergyOf, totalEnergyOf, } from "./conformerEnergy.js";
2
4
  export { STRUCTURE_EDITOR_DOCS, STRUCTURE_EDITOR_GUIDE, editorGuideSections, editorKeyLabel, } from "./editorGuide.js";
3
5
  export { EDITOR_TOOLBAR_BUTTONS, isEditorToolbarButtonAvailable, } from "./editorToolbar.js";
4
6
  export { EDITOR_TOOLBAR_COLUMNS, EDITOR_TOOLBAR_ROWS, editorToolbarButtonAt, editorToolbarButtonBox, } from "./editorToolbarGeometry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structure/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AASnE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAOtE,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/structure/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAOtE,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * A conformer set, most stable first, as a table one row of which is selected.
3
+ *
4
+ * Two sites read the same set for different reasons — one picks the geometry a
5
+ * calculation runs on, the other reads the ranking itself — so the columns are
6
+ * a prop rather than a variant. Everything else is the same table: rows ordered
7
+ * by energy, one selected, the arrows walking it.
8
+ *
9
+ * The population column is the reason the ranking matters. A share is
10
+ * exponential in the energy gap, so it inherits the error of whatever produced
11
+ * the energies and magnifies it; the caption under the table says which method
12
+ * that was, and `boltzmannConfidence` says what its error is worth. A table
13
+ * that prints a force field's populations without that line is stating a
14
+ * percentage it cannot support.
15
+ */
16
+ import type { ReactElement } from 'react';
17
+ import type { ConformerRow } from '../core/conformerEnergy.ts';
18
+ import type { ConformerRanking } from '../core/conformers.ts';
19
+ import type { ConformerColumn } from './conformerColumns.ts';
20
+ /** Props of {@link ConformerTable}. */
21
+ export interface ConformerTableProps {
22
+ /** The set, already ordered most stable first. */
23
+ conformers: readonly ConformerRow[];
24
+ /**
25
+ * Which columns to draw, in order.
26
+ * @default PICKER_COLUMNS
27
+ */
28
+ columns?: readonly ConformerColumn[];
29
+ /**
30
+ * Which method's energies every column reads.
31
+ * @default 'force-field'
32
+ */
33
+ ranking?: ConformerRanking;
34
+ /**
35
+ * The selected conformer's id, or `null` when none is.
36
+ * @default null
37
+ */
38
+ selectedId?: number | null;
39
+ /** Called with the id of the row the reader picked. */
40
+ onSelect?: (id: number) => void;
41
+ /**
42
+ * Temperature the shares are quoted at, in kelvin.
43
+ * @default ROOM_TEMPERATURE
44
+ */
45
+ temperature?: number;
46
+ /**
47
+ * Accessible name of the table.
48
+ * @default 'Conformers, most stable first'
49
+ */
50
+ label?: string;
51
+ /**
52
+ * What the `id` column says for a conformer. A dense table wants the bare
53
+ * rank; a picker in a narrow column reads better naming the thing.
54
+ * @default String — the rank on its own
55
+ */
56
+ rowName?: (id: number) => string;
57
+ /**
58
+ * Headings to use instead of the default ones, per column.
59
+ * @default undefined — every column keeps its own
60
+ */
61
+ columnLabels?: Partial<Record<ConformerColumn, string>>;
62
+ }
63
+ /**
64
+ * The conformers of a set, as a selectable table.
65
+ *
66
+ * The arrows walk the rows once the table has the focus, rather than from
67
+ * anywhere on the page: a conformer list usually sits beside a drawing surface
68
+ * or a 3D canvas, both of which read the arrows themselves.
69
+ * @param props - See {@link ConformerTableProps}.
70
+ * @returns The table, or `null` when there is nothing to show.
71
+ */
72
+ export declare function ConformerTable(props: ConformerTableProps): ReactElement | null;
73
+ //# sourceMappingURL=ConformerTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConformerTable.d.ts","sourceRoot":"","sources":["../../../src/structure/ui/ConformerTable.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAgC,YAAY,EAAE,MAAM,OAAO,CAAC;AAUxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,GACzB,YAAY,GAAG,IAAI,CA4IrB"}