react-cheminfo 0.38.0 → 0.39.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 (327) hide show
  1. package/lib/chart/ui/Axes.d.ts +19 -0
  2. package/lib/chart/ui/Axes.d.ts.map +1 -1
  3. package/lib/chart/ui/Axes.js +25 -5
  4. package/lib/chart/ui/Axes.js.map +1 -1
  5. package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -1
  6. package/lib/chrome/ui/NavMenuButton.js +41 -11
  7. package/lib/chrome/ui/NavMenuButton.js.map +1 -1
  8. package/lib/chrome/ui/SiteHeader.js +24 -1
  9. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  10. package/lib/chrome/ui/navItem.d.ts +7 -0
  11. package/lib/chrome/ui/navItem.d.ts.map +1 -1
  12. package/lib/chrome/ui/navItem.js.map +1 -1
  13. package/lib/citation/ui/entries.d.ts.map +1 -1
  14. package/lib/citation/ui/entries.js +6 -1
  15. package/lib/citation/ui/entries.js.map +1 -1
  16. package/lib/clipboard/ui/ClickToCopy.d.ts +11 -0
  17. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  18. package/lib/clipboard/ui/ClickToCopy.js +28 -10
  19. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  20. package/lib/clipboard/ui/CopyButton.d.ts +2 -1
  21. package/lib/clipboard/ui/CopyButton.d.ts.map +1 -1
  22. package/lib/clipboard/ui/CopyButton.js +2 -1
  23. package/lib/clipboard/ui/CopyButton.js.map +1 -1
  24. package/lib/clipboard/ui/CopyableValue.d.ts +24 -4
  25. package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
  26. package/lib/clipboard/ui/CopyableValue.js +35 -3
  27. package/lib/clipboard/ui/CopyableValue.js.map +1 -1
  28. package/lib/clipboard/ui/index.d.ts +1 -1
  29. package/lib/clipboard/ui/index.d.ts.map +1 -1
  30. package/lib/clipboard/ui/index.js.map +1 -1
  31. package/lib/confirm/ui/ConfirmButton.d.ts.map +1 -1
  32. package/lib/confirm/ui/ConfirmButton.js +2 -1
  33. package/lib/confirm/ui/ConfirmButton.js.map +1 -1
  34. package/lib/delimited/ui/TableDataButton.d.ts.map +1 -1
  35. package/lib/delimited/ui/TableDataButton.js +2 -1
  36. package/lib/delimited/ui/TableDataButton.js.map +1 -1
  37. package/lib/download/core/figureSvg.d.ts.map +1 -1
  38. package/lib/download/core/figureSvg.js +37 -12
  39. package/lib/download/core/figureSvg.js.map +1 -1
  40. package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -1
  41. package/lib/help/ui/HelpToolbarButton.js +2 -1
  42. package/lib/help/ui/HelpToolbarButton.js.map +1 -1
  43. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  44. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  45. package/lib/locales/de.json +39 -4
  46. package/lib/locales/en.json +39 -4
  47. package/lib/locales/es.json +39 -4
  48. package/lib/locales/fr.json +39 -4
  49. package/lib/locales/it.json +39 -4
  50. package/lib/number/ui/NumberInput.js +1 -1
  51. package/lib/number/ui/NumberInput.js.map +1 -1
  52. package/lib/overlay/ui/OverlayIconButton.d.ts.map +1 -1
  53. package/lib/overlay/ui/OverlayIconButton.js +1 -1
  54. package/lib/overlay/ui/OverlayIconButton.js.map +1 -1
  55. package/lib/panel/ui/ClearButton.d.ts.map +1 -1
  56. package/lib/panel/ui/ClearButton.js +1 -1
  57. package/lib/panel/ui/ClearButton.js.map +1 -1
  58. package/lib/pedagogy/core/inlineMarks.d.ts +9 -5
  59. package/lib/pedagogy/core/inlineMarks.d.ts.map +1 -1
  60. package/lib/pedagogy/core/inlineMarks.js +14 -6
  61. package/lib/pedagogy/core/inlineMarks.js.map +1 -1
  62. package/lib/pedagogy/ui/GlossaryDefinition.d.ts +4 -10
  63. package/lib/pedagogy/ui/GlossaryDefinition.d.ts.map +1 -1
  64. package/lib/pedagogy/ui/GlossaryDefinition.js +7 -7
  65. package/lib/pedagogy/ui/GlossaryDefinition.js.map +1 -1
  66. package/lib/pedagogy/ui/GlossaryIndex.d.ts.map +1 -1
  67. package/lib/pedagogy/ui/GlossaryIndex.js +1 -1
  68. package/lib/pedagogy/ui/GlossaryIndex.js.map +1 -1
  69. package/lib/pedagogy/ui/GlossaryProvider.d.ts +7 -0
  70. package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -1
  71. package/lib/pedagogy/ui/GlossaryProvider.js +3 -2
  72. package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -1
  73. package/lib/pedagogy/ui/GlossaryText.d.ts +7 -2
  74. package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -1
  75. package/lib/pedagogy/ui/GlossaryText.js +3 -2
  76. package/lib/pedagogy/ui/GlossaryText.js.map +1 -1
  77. package/lib/pedagogy/ui/InlineText.d.ts +8 -2
  78. package/lib/pedagogy/ui/InlineText.d.ts.map +1 -1
  79. package/lib/pedagogy/ui/InlineText.js +7 -2
  80. package/lib/pedagogy/ui/InlineText.js.map +1 -1
  81. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +4 -1
  82. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -1
  83. package/lib/pedagogy/ui/ReferenceSectionBlock.js +2 -1
  84. package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -1
  85. package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -1
  86. package/lib/pedagogy/ui/SyntaxTooltip.js +11 -10
  87. package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -1
  88. package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -1
  89. package/lib/pedagogy/ui/TutorialStepStrip.js +18 -4
  90. package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -1
  91. package/lib/pedagogy/ui/glossaryContext.d.ts +7 -0
  92. package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -1
  93. package/lib/pedagogy/ui/glossaryContext.js.map +1 -1
  94. package/lib/pedagogy/ui/index.d.ts +1 -1
  95. package/lib/pedagogy/ui/index.d.ts.map +1 -1
  96. package/lib/pedagogy/ui/inlineSegments.d.ts +5 -0
  97. package/lib/pedagogy/ui/inlineSegments.d.ts.map +1 -1
  98. package/lib/pedagogy/ui/inlineSegments.js +2 -0
  99. package/lib/pedagogy/ui/inlineSegments.js.map +1 -1
  100. package/lib/pedagogy/ui/pedagogyStyle.d.ts +8 -9
  101. package/lib/pedagogy/ui/pedagogyStyle.d.ts.map +1 -1
  102. package/lib/pedagogy/ui/pedagogyStyle.js +10 -18
  103. package/lib/pedagogy/ui/pedagogyStyle.js.map +1 -1
  104. package/lib/seo/core/plainDescription.d.ts +2 -2
  105. package/lib/seo/core/plainDescription.js +5 -2
  106. package/lib/seo/core/plainDescription.js.map +1 -1
  107. package/lib/share/core/devices.d.ts +41 -0
  108. package/lib/share/core/devices.d.ts.map +1 -0
  109. package/lib/share/core/devices.js +58 -0
  110. package/lib/share/core/devices.js.map +1 -0
  111. package/lib/share/core/index.d.ts +4 -0
  112. package/lib/share/core/index.d.ts.map +1 -1
  113. package/lib/share/core/index.js +2 -0
  114. package/lib/share/core/index.js.map +1 -1
  115. package/lib/share/core/regions.d.ts +43 -0
  116. package/lib/share/core/regions.d.ts.map +1 -0
  117. package/lib/share/core/regions.js +71 -0
  118. package/lib/share/core/regions.js.map +1 -0
  119. package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -1
  120. package/lib/share/ui/HiddenPartsProvider.js +4 -1
  121. package/lib/share/ui/HiddenPartsProvider.js.map +1 -1
  122. package/lib/share/ui/PagePart.d.ts.map +1 -1
  123. package/lib/share/ui/PagePart.js +10 -1
  124. package/lib/share/ui/PagePart.js.map +1 -1
  125. package/lib/share/ui/ShareButton.d.ts.map +1 -1
  126. package/lib/share/ui/ShareButton.js +3 -4
  127. package/lib/share/ui/ShareButton.js.map +1 -1
  128. package/lib/share/ui/ShareConfigOptions.d.ts +6 -1
  129. package/lib/share/ui/ShareConfigOptions.d.ts.map +1 -1
  130. package/lib/share/ui/ShareConfigOptions.js +6 -13
  131. package/lib/share/ui/ShareConfigOptions.js.map +1 -1
  132. package/lib/share/ui/ShareDialog.d.ts +14 -0
  133. package/lib/share/ui/ShareDialog.d.ts.map +1 -1
  134. package/lib/share/ui/ShareDialog.js +3 -3
  135. package/lib/share/ui/ShareDialog.js.map +1 -1
  136. package/lib/share/ui/ShareDialogContent.d.ts +2 -2
  137. package/lib/share/ui/ShareDialogContent.d.ts.map +1 -1
  138. package/lib/share/ui/ShareDialogContent.js +36 -30
  139. package/lib/share/ui/ShareDialogContent.js.map +1 -1
  140. package/lib/share/ui/ShareLinkBar.d.ts +21 -0
  141. package/lib/share/ui/ShareLinkBar.d.ts.map +1 -0
  142. package/lib/share/ui/ShareLinkBar.js +32 -0
  143. package/lib/share/ui/ShareLinkBar.js.map +1 -0
  144. package/lib/share/ui/SharePanes.d.ts +17 -0
  145. package/lib/share/ui/SharePanes.d.ts.map +1 -0
  146. package/lib/share/ui/SharePanes.js +27 -0
  147. package/lib/share/ui/SharePanes.js.map +1 -0
  148. package/lib/share/ui/SharePartOptions.d.ts +9 -3
  149. package/lib/share/ui/SharePartOptions.d.ts.map +1 -1
  150. package/lib/share/ui/SharePartOptions.js +12 -16
  151. package/lib/share/ui/SharePartOptions.js.map +1 -1
  152. package/lib/share/ui/SharePartRow.d.ts +37 -0
  153. package/lib/share/ui/SharePartRow.d.ts.map +1 -0
  154. package/lib/share/ui/SharePartRow.js +25 -0
  155. package/lib/share/ui/SharePartRow.js.map +1 -0
  156. package/lib/share/ui/SharePresetTabs.d.ts +10 -7
  157. package/lib/share/ui/SharePresetTabs.d.ts.map +1 -1
  158. package/lib/share/ui/SharePresetTabs.js +17 -17
  159. package/lib/share/ui/SharePresetTabs.js.map +1 -1
  160. package/lib/share/ui/SharePreview.d.ts +32 -0
  161. package/lib/share/ui/SharePreview.d.ts.map +1 -0
  162. package/lib/share/ui/SharePreview.js +104 -0
  163. package/lib/share/ui/SharePreview.js.map +1 -0
  164. package/lib/share/ui/SharePreviewDevices.d.ts +20 -0
  165. package/lib/share/ui/SharePreviewDevices.d.ts.map +1 -0
  166. package/lib/share/ui/SharePreviewDevices.js +40 -0
  167. package/lib/share/ui/SharePreviewDevices.js.map +1 -0
  168. package/lib/share/ui/index.d.ts +1 -0
  169. package/lib/share/ui/index.d.ts.map +1 -1
  170. package/lib/share/ui/index.js.map +1 -1
  171. package/lib/share/ui/shareMarking.d.ts +14 -0
  172. package/lib/share/ui/shareMarking.d.ts.map +1 -0
  173. package/lib/share/ui/shareMarking.js +17 -0
  174. package/lib/share/ui/shareMarking.js.map +1 -0
  175. package/lib/share/ui/useShareRegionReports.d.ts +12 -0
  176. package/lib/share/ui/useShareRegionReports.d.ts.map +1 -0
  177. package/lib/share/ui/useShareRegionReports.js +73 -0
  178. package/lib/share/ui/useShareRegionReports.js.map +1 -0
  179. package/lib/shared/ui/ActionTooltip.d.ts +42 -0
  180. package/lib/shared/ui/ActionTooltip.d.ts.map +1 -0
  181. package/lib/shared/ui/ActionTooltip.js +21 -0
  182. package/lib/shared/ui/ActionTooltip.js.map +1 -0
  183. package/lib/shared/ui/index.d.ts +4 -0
  184. package/lib/shared/ui/index.d.ts.map +1 -1
  185. package/lib/shared/ui/index.js +2 -0
  186. package/lib/shared/ui/index.js.map +1 -1
  187. package/lib/shared/ui/useActionTooltip.d.ts +48 -0
  188. package/lib/shared/ui/useActionTooltip.d.ts.map +1 -0
  189. package/lib/shared/ui/useActionTooltip.js +78 -0
  190. package/lib/shared/ui/useActionTooltip.js.map +1 -0
  191. package/lib/structure/core/index.d.ts +2 -0
  192. package/lib/structure/core/index.d.ts.map +1 -1
  193. package/lib/structure/core/index.js +1 -0
  194. package/lib/structure/core/index.js.map +1 -1
  195. package/lib/structure/core/sourceMolecule.d.ts +18 -0
  196. package/lib/structure/core/sourceMolecule.d.ts.map +1 -0
  197. package/lib/structure/core/sourceMolecule.js +26 -0
  198. package/lib/structure/core/sourceMolecule.js.map +1 -0
  199. package/lib/structure/core/structureNotations.d.ts +57 -0
  200. package/lib/structure/core/structureNotations.d.ts.map +1 -0
  201. package/lib/structure/core/structureNotations.js +74 -0
  202. package/lib/structure/core/structureNotations.js.map +1 -0
  203. package/lib/structure/core/structurePicture.d.ts +49 -0
  204. package/lib/structure/core/structurePicture.d.ts.map +1 -0
  205. package/lib/structure/core/structurePicture.js +83 -0
  206. package/lib/structure/core/structurePicture.js.map +1 -0
  207. package/lib/structure/ui/EditorExportButton.d.ts +23 -0
  208. package/lib/structure/ui/EditorExportButton.d.ts.map +1 -0
  209. package/lib/structure/ui/EditorExportButton.js +23 -0
  210. package/lib/structure/ui/EditorExportButton.js.map +1 -0
  211. package/lib/structure/ui/EditorHelpButton.d.ts +5 -2
  212. package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -1
  213. package/lib/structure/ui/EditorHelpButton.js +8 -9
  214. package/lib/structure/ui/EditorHelpButton.js.map +1 -1
  215. package/lib/structure/ui/StructureEditor.d.ts +8 -0
  216. package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
  217. package/lib/structure/ui/StructureEditor.js +26 -3
  218. package/lib/structure/ui/StructureEditor.js.map +1 -1
  219. package/lib/structure/ui/StructureExportDialog.d.ts +34 -0
  220. package/lib/structure/ui/StructureExportDialog.d.ts.map +1 -0
  221. package/lib/structure/ui/StructureExportDialog.js +43 -0
  222. package/lib/structure/ui/StructureExportDialog.js.map +1 -0
  223. package/lib/structure/ui/StructureExportPanel.d.ts +37 -0
  224. package/lib/structure/ui/StructureExportPanel.d.ts.map +1 -0
  225. package/lib/structure/ui/StructureExportPanel.js +75 -0
  226. package/lib/structure/ui/StructureExportPanel.js.map +1 -0
  227. package/lib/structure/ui/StructureNotationRow.d.ts +22 -0
  228. package/lib/structure/ui/StructureNotationRow.d.ts.map +1 -0
  229. package/lib/structure/ui/StructureNotationRow.js +34 -0
  230. package/lib/structure/ui/StructureNotationRow.js.map +1 -0
  231. package/lib/structure/ui/StructurePicturePane.d.ts +23 -0
  232. package/lib/structure/ui/StructurePicturePane.d.ts.map +1 -0
  233. package/lib/structure/ui/StructurePicturePane.js +113 -0
  234. package/lib/structure/ui/StructurePicturePane.js.map +1 -0
  235. package/lib/structure/ui/StructureSvg.d.ts.map +1 -1
  236. package/lib/structure/ui/StructureSvg.js +2 -18
  237. package/lib/structure/ui/StructureSvg.js.map +1 -1
  238. package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -1
  239. package/lib/structure/ui/ToolbarTooltip.js +1 -2
  240. package/lib/structure/ui/ToolbarTooltip.js.map +1 -1
  241. package/lib/structure/ui/index.d.ts +7 -3
  242. package/lib/structure/ui/index.d.ts.map +1 -1
  243. package/lib/structure/ui/index.js +5 -3
  244. package/lib/structure/ui/index.js.map +1 -1
  245. package/lib/structure/ui/structureNotationText.d.ts +23 -0
  246. package/lib/structure/ui/structureNotationText.d.ts.map +1 -0
  247. package/lib/structure/ui/structureNotationText.js +42 -0
  248. package/lib/structure/ui/structureNotationText.js.map +1 -0
  249. package/lib/structure/ui/useEditorStructure.d.ts +37 -0
  250. package/lib/structure/ui/useEditorStructure.d.ts.map +1 -0
  251. package/lib/structure/ui/useEditorStructure.js +70 -0
  252. package/lib/structure/ui/useEditorStructure.js.map +1 -0
  253. package/package.json +1 -1
  254. package/src/chart/ui/Axes.tsx +53 -5
  255. package/src/chrome/ui/NavMenuButton.tsx +61 -18
  256. package/src/chrome/ui/SiteHeader.tsx +37 -1
  257. package/src/chrome/ui/navItem.ts +7 -0
  258. package/src/citation/ui/entries.tsx +10 -2
  259. package/src/clipboard/ui/ClickToCopy.tsx +47 -13
  260. package/src/clipboard/ui/CopyButton.tsx +4 -2
  261. package/src/clipboard/ui/CopyableValue.tsx +88 -13
  262. package/src/clipboard/ui/index.ts +5 -1
  263. package/src/confirm/ui/ConfirmButton.tsx +2 -0
  264. package/src/delimited/ui/TableDataButton.tsx +2 -1
  265. package/src/download/core/figureSvg.ts +42 -10
  266. package/src/help/ui/HelpToolbarButton.tsx +2 -1
  267. package/src/locales/de.json +39 -4
  268. package/src/locales/en.json +39 -4
  269. package/src/locales/es.json +39 -4
  270. package/src/locales/fr.json +39 -4
  271. package/src/locales/it.json +39 -4
  272. package/src/number/ui/NumberInput.tsx +1 -1
  273. package/src/overlay/ui/OverlayIconButton.tsx +1 -0
  274. package/src/panel/ui/ClearButton.tsx +1 -0
  275. package/src/pedagogy/core/inlineMarks.ts +15 -7
  276. package/src/pedagogy/ui/GlossaryDefinition.tsx +8 -18
  277. package/src/pedagogy/ui/GlossaryIndex.tsx +0 -1
  278. package/src/pedagogy/ui/GlossaryProvider.tsx +10 -2
  279. package/src/pedagogy/ui/GlossaryText.tsx +10 -2
  280. package/src/pedagogy/ui/InlineText.tsx +21 -4
  281. package/src/pedagogy/ui/ReferenceSectionBlock.tsx +8 -2
  282. package/src/pedagogy/ui/SyntaxTooltip.tsx +11 -9
  283. package/src/pedagogy/ui/TutorialStepStrip.tsx +50 -18
  284. package/src/pedagogy/ui/glossaryContext.ts +7 -0
  285. package/src/pedagogy/ui/index.ts +1 -1
  286. package/src/pedagogy/ui/inlineSegments.tsx +7 -0
  287. package/src/pedagogy/ui/pedagogyStyle.ts +12 -24
  288. package/src/seo/core/plainDescription.ts +4 -2
  289. package/src/share/core/devices.ts +80 -0
  290. package/src/share/core/index.ts +14 -0
  291. package/src/share/core/regions.ts +87 -0
  292. package/src/share/ui/HiddenPartsProvider.tsx +6 -1
  293. package/src/share/ui/PagePart.tsx +12 -1
  294. package/src/share/ui/ShareButton.tsx +3 -6
  295. package/src/share/ui/ShareConfigOptions.tsx +25 -16
  296. package/src/share/ui/ShareDialog.tsx +17 -3
  297. package/src/share/ui/ShareDialogContent.tsx +80 -77
  298. package/src/share/ui/ShareLinkBar.tsx +70 -0
  299. package/src/share/ui/SharePanes.tsx +62 -0
  300. package/src/share/ui/SharePartOptions.tsx +25 -26
  301. package/src/share/ui/SharePartRow.tsx +78 -0
  302. package/src/share/ui/SharePresetTabs.tsx +36 -43
  303. package/src/share/ui/SharePreview.tsx +204 -0
  304. package/src/share/ui/SharePreviewDevices.tsx +70 -0
  305. package/src/share/ui/index.ts +1 -0
  306. package/src/share/ui/shareMarking.ts +18 -0
  307. package/src/share/ui/useShareRegionReports.ts +84 -0
  308. package/src/shared/ui/ActionTooltip.tsx +70 -0
  309. package/src/shared/ui/index.ts +7 -0
  310. package/src/shared/ui/useActionTooltip.ts +103 -0
  311. package/src/structure/core/index.ts +5 -0
  312. package/src/structure/core/sourceMolecule.ts +26 -0
  313. package/src/structure/core/structureNotations.ts +125 -0
  314. package/src/structure/core/structurePicture.ts +119 -0
  315. package/src/structure/ui/EditorExportButton.tsx +62 -0
  316. package/src/structure/ui/EditorHelpButton.tsx +26 -30
  317. package/src/structure/ui/StructureEditor.tsx +51 -5
  318. package/src/structure/ui/StructureExportDialog.tsx +90 -0
  319. package/src/structure/ui/StructureExportPanel.tsx +156 -0
  320. package/src/structure/ui/StructureNotationRow.tsx +74 -0
  321. package/src/structure/ui/StructurePicturePane.tsx +208 -0
  322. package/src/structure/ui/StructureSvg.tsx +3 -12
  323. package/src/structure/ui/ToolbarTooltip.tsx +1 -1
  324. package/src/structure/ui/index.ts +7 -3
  325. package/src/structure/ui/structureNotationText.ts +56 -0
  326. package/src/structure/ui/useEditorStructure.ts +119 -0
  327. package/styles/chrome.css +414 -14
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AnchorButton } from '@blueprintjs/core';
3
+ import { CopyButton } from "../../clipboard/ui/index.js";
4
+ import { HelpTooltip } from "../../help/ui/index.js";
5
+ import { useChromeT } from "../../i18n/ui/useT.js";
6
+ /**
7
+ * The three things one does with a share link, kept above the options and
8
+ * never scrolled away: a dialog whose Copy button is below the fold is a dialog
9
+ * one scrolls through every single time.
10
+ *
11
+ * Neither the address nor the frame markup is printed. A teacher reads neither
12
+ * before pasting it, and a hundred characters of query string set in monospace
13
+ * is the widest thing in the dialog; what tells them which button to press is
14
+ * the help on it.
15
+ * @param props - The address, and the frame markup the third button copies.
16
+ * @returns The bar.
17
+ */
18
+ export function ShareLinkBar(props) {
19
+ const { url, frame } = props;
20
+ const t = useChromeT();
21
+ return (_jsxs("div", { className: "share-linkbar", children: [_jsx(HelpTooltip, { content: {
22
+ title: t('share.copyLinkHelpTitle'),
23
+ body: t('share.copyLinkHelp'),
24
+ }, children: _jsx(CopyButton, { content: url, label: t('share.copyLink'), title: "" }) }), _jsx(HelpTooltip, { content: {
25
+ title: t('share.openInNewTabHelpTitle'),
26
+ body: t('share.openInNewTabHelp'),
27
+ }, children: _jsx(AnchorButton, { icon: "share", text: t('share.openInNewTab'), href: url, target: "_blank", rel: "noopener noreferrer" }) }), _jsx(HelpTooltip, { content: {
28
+ title: t('share.copyIframeHelpTitle'),
29
+ body: t('share.copyIframeHelp'),
30
+ }, children: _jsx(CopyButton, { content: frame, icon: "code", label: t('share.copyIframe'), title: "" }) })] }));
31
+ }
32
+ //# sourceMappingURL=ShareLinkBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkBar.js","sourceRoot":"","sources":["../../../src/share/ui/ShareLinkBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASnD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,KAAC,WAAW,IACV,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,CAAC,yBAAyB,CAAC;oBACnC,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC;iBAC9B,YAED,KAAC,UAAU,IAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAC,EAAE,GAAG,GACrD,EACd,KAAC,WAAW,IACV,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,CAAC,6BAA6B,CAAC;oBACvC,IAAI,EAAE,CAAC,CAAC,wBAAwB,CAAC;iBAClC,YAED,KAAC,YAAY,IACX,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAC7B,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,GACzB,GACU,EACd,KAAC,WAAW,IACV,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,CAAC,2BAA2B,CAAC;oBACrC,IAAI,EAAE,CAAC,CAAC,sBAAsB,CAAC;iBAChC,YAED,KAAC,UAAU,IACT,OAAO,EAAE,KAAK,EACd,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAC5B,KAAK,EAAC,EAAE,GACR,GACU,IACV,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface SharePanesProps {
3
+ /** What the link says: the presets, the boxes, and the tool's own section. */
4
+ options: ReactElement;
5
+ /** The live page, or nothing when the dialog shows no preview. */
6
+ preview: ReactElement | null;
7
+ /** Whether the dialog is too narrow to hold the two panes side by side. */
8
+ narrow: boolean;
9
+ }
10
+ /**
11
+ * The options and the page they write: side by side where there is room, and
12
+ * two tabs where there is not.
13
+ * @param props - The two panes, and whether they still fit together.
14
+ * @returns The panes, or the tabs holding them.
15
+ */
16
+ export declare function SharePanes(props: SharePanesProps): ReactElement;
17
+ //# sourceMappingURL=SharePanes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePanes.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePanes.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAQ1C,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,OAAO,EAAE,YAAY,CAAC;IACtB,kEAAkE;IAClE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAqC/D"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tab, Tabs } from '@blueprintjs/core';
3
+ import { useState } from 'react';
4
+ import { useChromeT } from "../../i18n/ui/useT.js";
5
+ const OPTIONS_TAB = 'options';
6
+ const PREVIEW_TAB = 'preview';
7
+ /**
8
+ * The options and the page they write: side by side where there is room, and
9
+ * two tabs where there is not.
10
+ * @param props - The two panes, and whether they still fit together.
11
+ * @returns The panes, or the tabs holding them.
12
+ */
13
+ export function SharePanes(props) {
14
+ const { options, preview, narrow } = props;
15
+ const t = useChromeT();
16
+ const [tab, setTab] = useState(OPTIONS_TAB);
17
+ if (preview === null) {
18
+ return (_jsx("div", { className: "share-dialog__panes share-dialog__panes--single", children: options }));
19
+ }
20
+ if (narrow) {
21
+ return (_jsxs(Tabs, { id: "share-panes", className: "share-dialog__tabs", animate: false, renderActiveTabPanelOnly: true, selectedTabId: tab, onChange: (tabId) => {
22
+ setTab(String(tabId));
23
+ }, children: [_jsx(Tab, { id: OPTIONS_TAB, title: t('share.options'), panel: options }), _jsx(Tab, { id: PREVIEW_TAB, title: t('share.preview'), panel: preview })] }));
24
+ }
25
+ return (_jsxs("div", { className: "share-dialog__panes", children: [options, preview] }));
26
+ }
27
+ //# sourceMappingURL=SharePanes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePanes.js","sourceRoot":"","sources":["../../../src/share/ui/SharePanes.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,WAAW,GAAG,SAAS,CAAC;AAW9B;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAS,WAAW,CAAC,CAAC;IAEpD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,CACL,cAAK,SAAS,EAAC,iDAAiD,YAC7D,OAAO,GACJ,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CACL,MAAC,IAAI,IACH,EAAE,EAAC,aAAa,EAChB,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,KAAK,EACd,wBAAwB,QACxB,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxB,CAAC,aAED,KAAC,GAAG,IAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,GAAI,EACnE,KAAC,GAAG,IAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,GAAI,IAC9D,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aACjC,OAAO,EACP,OAAO,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,18 +1,24 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import type { HideablePart } from '../core/index.ts';
3
+ import type { SharePartDescriptions } from './SharePartRow.tsx';
3
4
  export interface SharePartOptionsProps {
4
5
  /** The parts this page can switch off, in the order the vocabulary lists them. */
5
6
  parts: readonly HideablePart[];
6
7
  /** The parts the draft currently switches off. */
7
8
  hidden: readonly string[];
9
+ /** Where each row says what switching it off does. */
10
+ descriptions: SharePartDescriptions;
8
11
  /** Called with the part and whether the link should switch it off. */
9
12
  onChange: (part: string, hidden: boolean) => void;
13
+ /** Called with the part the pointer is on, or `null` when it leaves. */
14
+ onPointed: (part: string | null) => void;
10
15
  }
11
16
  /**
12
- * One box per part of the page, worded positively: a ticked box is a part the
13
- * link keeps, which is how somebody building a course tile thinks about it.
17
+ * One switch per part of the page, worded positively: a part that is `On` is a
18
+ * part the link keeps, which is how somebody building a course tile thinks
19
+ * about it.
14
20
  * @param props - The parts, what is switched off, and how to change it.
15
- * @returns The list of boxes.
21
+ * @returns The rows.
16
22
  */
17
23
  export declare function SharePartOptions(props: SharePartOptionsProps): ReactElement;
18
24
  //# sourceMappingURL=SharePartOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePartOptions.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePartOptions.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWrD,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,kDAAkD;IAClD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAqB3E"}
1
+ {"version":3,"file":"SharePartOptions.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePartOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,kDAAkD;IAClD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,YAAY,EAAE,qBAAqB,CAAC;IACpC,sEAAsE;IACtE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,CAsB3E"}
@@ -1,22 +1,18 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Checkbox } from '@blueprintjs/core';
3
- const OPTION_STYLE = { marginBottom: 8 };
4
- const DESCRIPTION_STYLE = {
5
- display: 'block',
6
- marginLeft: 26,
7
- color: 'var(--text-muted, #5b6875)',
8
- fontSize: 12,
9
- };
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { SharePartRow } from "./SharePartRow.js";
10
3
  /**
11
- * One box per part of the page, worded positively: a ticked box is a part the
12
- * link keeps, which is how somebody building a course tile thinks about it.
4
+ * One switch per part of the page, worded positively: a part that is `On` is a
5
+ * part the link keeps, which is how somebody building a course tile thinks
6
+ * about it.
13
7
  * @param props - The parts, what is switched off, and how to change it.
14
- * @returns The list of boxes.
8
+ * @returns The rows.
15
9
  */
16
10
  export function SharePartOptions(props) {
17
- const { parts, hidden, onChange } = props;
18
- return (_jsx(_Fragment, { children: parts.map((part) => (_jsxs("div", { style: OPTION_STYLE, className: "share-part", children: [_jsx(Checkbox, { checked: !hidden.includes(part.key), label: part.label, onChange: (event) => {
19
- onChange(part.key, !event.currentTarget.checked);
20
- } }), _jsx("span", { style: DESCRIPTION_STYLE, className: "share-part-description", children: part.description })] }, part.key))) }));
11
+ const { parts, hidden, descriptions, onChange, onPointed } = props;
12
+ return (_jsx(_Fragment, { children: parts.map((part) => (_jsx(SharePartRow, { label: part.label, description: part.description, on: !hidden.includes(part.key), descriptions: descriptions, onChange: (on) => {
13
+ onChange(part.key, !on);
14
+ }, onPointed: (pointed) => {
15
+ onPointed(pointed ? part.key : null);
16
+ } }, part.key))) }));
21
17
  }
22
18
  //# sourceMappingURL=SharePartOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePartOptions.js","sourceRoot":"","sources":["../../../src/share/ui/SharePartOptions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK7C,MAAM,YAAY,GAAkB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAExD,MAAM,iBAAiB,GAAkB;IACvC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,EAAE;IACd,KAAK,EAAE,4BAA4B;IACnC,QAAQ,EAAE,EAAE;CACb,CAAC;AAWF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE1C,OAAO,CACL,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,eAAoB,KAAK,EAAE,YAAY,EAAE,SAAS,EAAC,YAAY,aAC7D,KAAC,QAAQ,IACP,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EACnC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACnD,CAAC,GACD,EACF,eAAM,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAC,wBAAwB,YAC/D,IAAI,CAAC,WAAW,GACZ,KAVC,IAAI,CAAC,GAAG,CAWZ,CACP,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SharePartOptions.js","sourceRoot":"","sources":["../../../src/share/ui/SharePartOptions.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC;AAelD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEnE,OAAO,CACL,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,YAAY,IAEX,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,EACD,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC,IAVI,IAAI,CAAC,GAAG,CAWb,CACH,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { ReactElement } from 'react';
2
+ /**
3
+ * Where a row says what switching it off does: behind a help glyph beside the
4
+ * label, or on a line of its own under it.
5
+ */
6
+ export type SharePartDescriptions = 'help' | 'inline';
7
+ export interface SharePartRowProps {
8
+ /** What the row switches, named as the reader sees it on the page. */
9
+ label: string;
10
+ /** What switching it off does, in one sentence. */
11
+ description: string;
12
+ /** Whether the link keeps it. */
13
+ on: boolean;
14
+ /** Where the description is shown. */
15
+ descriptions: SharePartDescriptions;
16
+ /** Called with the state the reader asked for. */
17
+ onChange: (on: boolean) => void;
18
+ /**
19
+ * Called when the pointer enters or leaves the row, so the preview can draw
20
+ * the region it names.
21
+ * @default undefined — the row is not pointed out anywhere
22
+ */
23
+ onPointed?: (pointed: boolean) => void;
24
+ }
25
+ /**
26
+ * One row of the share dialog: what it is on the left, whether the link keeps
27
+ * it on the right.
28
+ *
29
+ * The state is written inside the switch rather than left to a tick, because a
30
+ * tick means nothing without the heading above the column — and the heading is
31
+ * the first thing a reader scrolls past. A row that says `On` reads correctly
32
+ * on its own, in every language.
33
+ * @param props - See {@link SharePartRowProps}.
34
+ * @returns The row.
35
+ */
36
+ export declare function SharePartRow(props: SharePartRowProps): ReactElement;
37
+ //# sourceMappingURL=SharePartRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePartRow.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePartRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,sCAAsC;IACtC,YAAY,EAAE,qBAAqB,CAAC;IACpC,kDAAkD;IAClD,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAkCnE"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Switch } from '@blueprintjs/core';
3
+ import { useId } from 'react';
4
+ import { HelpIcon } from "../../help/ui/index.js";
5
+ import { useChromeT } from "../../i18n/ui/useT.js";
6
+ /**
7
+ * One row of the share dialog: what it is on the left, whether the link keeps
8
+ * it on the right.
9
+ *
10
+ * The state is written inside the switch rather than left to a tick, because a
11
+ * tick means nothing without the heading above the column — and the heading is
12
+ * the first thing a reader scrolls past. A row that says `On` reads correctly
13
+ * on its own, in every language.
14
+ * @param props - See {@link SharePartRowProps}.
15
+ * @returns The row.
16
+ */
17
+ export function SharePartRow(props) {
18
+ const { label, description, on, descriptions, onChange, onPointed } = props;
19
+ const t = useChromeT();
20
+ const id = useId();
21
+ return (_jsxs("div", { className: "share-part", onMouseEnter: () => onPointed?.(true), onMouseLeave: () => onPointed?.(false), onFocus: () => onPointed?.(true), onBlur: () => onPointed?.(false), children: [_jsx("label", { className: "share-part__label", htmlFor: id, children: label }), descriptions === 'help' ? (_jsx(HelpIcon, { content: { title: label, body: description }, label: label })) : null, _jsx(Switch, { id: id, className: "share-part__switch", checked: on, innerLabel: t('share.off'), innerLabelChecked: t('share.on'), onChange: (event) => {
22
+ onChange(event.currentTarget.checked);
23
+ } }), descriptions === 'inline' ? (_jsx("p", { className: "share-part__description", children: description })) : null] }));
24
+ }
25
+ //# sourceMappingURL=SharePartRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePartRow.js","sourceRoot":"","sources":["../../../src/share/ui/SharePartRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA2BnD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5E,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,OAAO,CACL,eACE,SAAS,EAAC,YAAY,EACtB,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EACrC,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAChC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,aAEhC,gBAAO,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,EAAE,YAC7C,KAAK,GACA,EACP,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,CACzB,KAAC,QAAQ,IAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,GAAI,CACzE,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,MAAM,IACL,EAAE,EAAE,EAAE,EACN,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,EAAE,EACX,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,EAC1B,iBAAiB,EAAE,CAAC,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACxC,CAAC,GACD,EACD,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,YAAG,SAAS,EAAC,yBAAyB,YAAE,WAAW,GAAK,CACzD,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ReactElement, ReactNode } from 'react';
1
+ import type { ReactElement } from 'react';
2
2
  import type { ShareParamCodecs, SharePreset } from '../core/index.ts';
3
3
  export interface SharePresetTabsProps<Codecs extends ShareParamCodecs = Record<string, never>> {
4
4
  /** The presets, in the order the tabs list them. */
@@ -7,14 +7,17 @@ export interface SharePresetTabsProps<Codecs extends ShareParamCodecs = Record<s
7
7
  selected: string | null;
8
8
  /** Called with the key of the preset picked, `null` for the custom tab. */
9
9
  onSelect: (key: string | null) => void;
10
- /** What the custom tab holds: the boxes of the draft. */
11
- custom: ReactNode;
12
10
  }
13
11
  /**
14
- * One tab per preset, then a last Custom tab holding the boxes, which start
15
- * from whatever the preset before it set.
16
- * @param props - The presets, the open one, and the custom panel.
17
- * @returns The tab strip and the open panel.
12
+ * One tab per ready-made link, then a last Custom tab for building any other
13
+ * one.
14
+ *
15
+ * The strip runs the width of the dialog rather than sitting in the column of
16
+ * options, because the choice governs the preview as much as the switches: in
17
+ * a third of the width, four tabs wrap onto a second row and the last of them
18
+ * — the one holding every switch — reads as an afterthought.
19
+ * @param props - The presets, and which one is open.
20
+ * @returns The tab strip.
18
21
  */
19
22
  export declare function SharePresetTabs<Codecs extends ShareParamCodecs = Record<string, never>>(props: SharePresetTabsProps<Codecs>): ReactElement;
20
23
  //# sourceMappingURL=SharePresetTabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePresetTabs.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePresetTabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAWtE,MAAM,WAAW,oBAAoB,CACnC,MAAM,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvD,oDAAoD;IACpD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvC,yDAAyD;IACzD,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACvD,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,YAAY,CAmCnD"}
1
+ {"version":3,"file":"SharePresetTabs.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePresetTabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKtE,MAAM,WAAW,oBAAoB,CACnC,MAAM,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvD,oDAAoD;IACpD,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,SAAS,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACvD,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,YAAY,CA+BnD"}
@@ -1,27 +1,27 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Tab, Tabs } from '@blueprintjs/core';
3
3
  import { useChromeT } from "../../i18n/ui/useT.js";
4
- const SECTION_STYLE = { marginBottom: 18 };
5
- const DESCRIPTION_STYLE = {
6
- margin: 0,
7
- color: 'var(--text-muted, #5b6875)',
8
- };
9
4
  const CUSTOM_TAB = 'custom';
10
5
  const PRESET_TAB_PREFIX = 'preset-';
11
6
  /**
12
- * One tab per preset, then a last Custom tab holding the boxes, which start
13
- * from whatever the preset before it set.
14
- * @param props - The presets, the open one, and the custom panel.
15
- * @returns The tab strip and the open panel.
7
+ * One tab per ready-made link, then a last Custom tab for building any other
8
+ * one.
9
+ *
10
+ * The strip runs the width of the dialog rather than sitting in the column of
11
+ * options, because the choice governs the preview as much as the switches: in
12
+ * a third of the width, four tabs wrap onto a second row and the last of them
13
+ * — the one holding every switch — reads as an afterthought.
14
+ * @param props - The presets, and which one is open.
15
+ * @returns The tab strip.
16
16
  */
17
17
  export function SharePresetTabs(props) {
18
- const { presets, selected, onSelect, custom } = props;
18
+ const { presets, selected, onSelect } = props;
19
19
  const t = useChromeT();
20
- return (_jsx("section", { className: "share-section", style: SECTION_STYLE, children: _jsxs(Tabs, { id: "share-presets", className: "share-presets", animate: false, renderActiveTabPanelOnly: true, selectedTabId: selected === null ? CUSTOM_TAB : `${PRESET_TAB_PREFIX}${selected}`, onChange: (tabId) => {
21
- const id = String(tabId);
22
- onSelect(id.startsWith(PRESET_TAB_PREFIX)
23
- ? id.slice(PRESET_TAB_PREFIX.length)
24
- : null);
25
- }, children: [presets.map((preset) => (_jsx(Tab, { id: `${PRESET_TAB_PREFIX}${preset.key}`, title: preset.label, panel: _jsx("p", { style: DESCRIPTION_STYLE, children: preset.description }) }, preset.key))), _jsx(Tab, { id: CUSTOM_TAB, title: t('share.custom'), panel: _jsx(_Fragment, { children: custom }) })] }) }));
20
+ return (_jsxs(Tabs, { id: "share-presets", className: "share-presets", animate: false, selectedTabId: selected === null ? CUSTOM_TAB : `${PRESET_TAB_PREFIX}${selected}`, onChange: (tabId) => {
21
+ const id = String(tabId);
22
+ onSelect(id.startsWith(PRESET_TAB_PREFIX)
23
+ ? id.slice(PRESET_TAB_PREFIX.length)
24
+ : null);
25
+ }, children: [presets.map((preset) => (_jsx(Tab, { id: `${PRESET_TAB_PREFIX}${preset.key}`, title: preset.label }, preset.key))), _jsx(Tab, { id: CUSTOM_TAB, title: t('share.custom') })] }));
26
26
  }
27
27
  //# sourceMappingURL=SharePresetTabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharePresetTabs.js","sourceRoot":"","sources":["../../../src/share/ui/SharePresetTabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,MAAM,aAAa,GAAkB,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC1D,MAAM,iBAAiB,GAAkB;IACvC,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,4BAA4B;CACpC,CAAC;AAEF,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAepC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAE7B,KAAmC;IACnC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,OAAO,CACL,kBAAS,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,aAAa,YACrD,MAAC,IAAI,IACH,EAAE,EAAC,eAAe,EAClB,SAAS,EAAC,eAAe,EACzB,OAAO,EAAE,KAAK,EACd,wBAAwB,QACxB,aAAa,EACX,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,QAAQ,EAAE,EAEpE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,QAAQ,CACN,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;oBAC9B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;oBACpC,CAAC,CAAC,IAAI,CACT,CAAC;YACJ,CAAC,aAEA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,GAAG,IAEF,EAAE,EAAE,GAAG,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,EACvC,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,KAAK,EAAE,YAAG,KAAK,EAAE,iBAAiB,YAAG,MAAM,CAAC,WAAW,GAAK,IAHvD,MAAM,CAAC,GAAG,CAIf,CACH,CAAC,EACF,KAAC,GAAG,IAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,4BAAG,MAAM,GAAI,GAAI,IAClE,GACC,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SharePresetTabs.js","sourceRoot":"","sources":["../../../src/share/ui/SharePresetTabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAapC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAE7B,KAAmC;IACnC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,OAAO,CACL,MAAC,IAAI,IACH,EAAE,EAAC,eAAe,EAClB,SAAS,EAAC,eAAe,EACzB,OAAO,EAAE,KAAK,EACd,aAAa,EACX,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,QAAQ,EAAE,EAEpE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,QAAQ,CACN,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAC9B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACpC,CAAC,CAAC,IAAI,CACT,CAAC;QACJ,CAAC,aAEA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,GAAG,IAEF,EAAE,EAAE,GAAG,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,EACvC,KAAK,EAAE,MAAM,CAAC,KAAK,IAFd,MAAM,CAAC,GAAG,CAGf,CACH,CAAC,EACF,KAAC,GAAG,IAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,GAAI,IAC5C,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { ReactElement } from 'react';
2
+ export interface SharePreviewProps {
3
+ /** The address the frame loads — the link as it stands. */
4
+ url: string;
5
+ /** What a screen reader announces the frame as. */
6
+ title: string;
7
+ /**
8
+ * The part the reader is pointing at in the list, drawn on the page so the
9
+ * name in the list and the thing on the page are the same thing.
10
+ * @default null — nothing is pointed at
11
+ */
12
+ highlight?: {
13
+ part: string;
14
+ label: string;
15
+ } | null;
16
+ }
17
+ /**
18
+ * The page as the link hands it out, live, beside the options that write it.
19
+ *
20
+ * It is drawn as a window of its own — named above it, with the address it
21
+ * loads on its own bar — because a page scaled into a pane otherwise reads as
22
+ * the site itself, and a reader who takes the preview for the tool ticks a box
23
+ * in it and believes the link now carries it.
24
+ *
25
+ * The frame is laid out at the screen the reader picks — their own window, a
26
+ * phone, a laptop or a large display — and scaled into whatever room the pane
27
+ * has, so a course tile can be checked at the size a student will meet it.
28
+ * @param props - The address and the name of the frame.
29
+ * @returns The preview pane.
30
+ */
31
+ export declare function SharePreview(props: SharePreviewProps): ReactElement;
32
+ //# sourceMappingURL=SharePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePreview.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAuBzD,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAgHnE"}
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { H6, Icon } from '@blueprintjs/core';
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { formatInteger } from "../../format/core/index.js";
5
+ import { HelpIcon } from "../../help/ui/index.js";
6
+ import { useContainerSize } from "../../hooks/ui/useContainerSize.js";
7
+ import { useDebouncedValue } from "../../hooks/ui/useDebouncedValue.js";
8
+ import { useChromeT } from "../../i18n/ui/useT.js";
9
+ import { SHARE_REGIONS_REQUEST, readShareRegions, sharePreviewAddress, sharePreviewScale, sharePreviewSize, } from "../core/index.js";
10
+ import { SharePreviewDevices } from "./SharePreviewDevices.js";
11
+ /** Room the window's own bar takes, which the page is not scaled into. */
12
+ const CHROME_HEIGHT = 26;
13
+ /**
14
+ * The page as the link hands it out, live, beside the options that write it.
15
+ *
16
+ * It is drawn as a window of its own — named above it, with the address it
17
+ * loads on its own bar — because a page scaled into a pane otherwise reads as
18
+ * the site itself, and a reader who takes the preview for the tool ticks a box
19
+ * in it and believes the link now carries it.
20
+ *
21
+ * The frame is laid out at the screen the reader picks — their own window, a
22
+ * phone, a laptop or a large display — and scaled into whatever room the pane
23
+ * has, so a course tile can be checked at the size a student will meet it.
24
+ * @param props - The address and the name of the frame.
25
+ * @returns The preview pane.
26
+ */
27
+ export function SharePreview(props) {
28
+ const { url, title, highlight = null } = props;
29
+ const t = useChromeT();
30
+ const stage = useRef(null);
31
+ const frame = useRef(null);
32
+ const pane = useContainerSize(stage);
33
+ const [device, setDevice] = useState('window');
34
+ const [regions, setRegions] = useState(NO_REGIONS);
35
+ const mark = useRef(null);
36
+ // Every box ticked reloads the frame; a number typed into a tool's own field
37
+ // would otherwise reload it once per keystroke.
38
+ const src = useDebouncedValue(url, 400);
39
+ const windowSize = {
40
+ width: globalThis.innerWidth,
41
+ height: globalThis.innerHeight,
42
+ };
43
+ const page = sharePreviewSize(device, windowSize);
44
+ const scale = sharePreviewScale({ width: pane.width, height: pane.height - CHROME_HEIGHT }, page);
45
+ const region = highlight === null ? undefined : regionOf(regions, highlight.part);
46
+ const help = {
47
+ title: t('share.preview'),
48
+ body: [t('share.previewWhat'), t('share.previewLive')],
49
+ };
50
+ useEffect(() => {
51
+ function onMessage(event) {
52
+ if (event.source !== frame.current?.contentWindow)
53
+ return;
54
+ const reported = readShareRegions(event.data);
55
+ if (reported !== null)
56
+ setRegions(reported);
57
+ }
58
+ globalThis.addEventListener('message', onMessage);
59
+ return () => {
60
+ globalThis.removeEventListener('message', onMessage);
61
+ };
62
+ }, []);
63
+ // A region further down the page than the stage shows is brought into view,
64
+ // or pointing at a row would mark something the reader cannot see.
65
+ useEffect(() => {
66
+ mark.current?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
67
+ }, [highlight?.part]);
68
+ return (_jsxs("section", { className: "share-preview", "aria-label": t('share.preview'), children: [_jsxs("header", { className: "share-preview__header", children: [_jsxs(H6, { className: "share-preview__label", children: [_jsx(Icon, { icon: "eye-open", size: 13 }), t('share.preview'), _jsx(HelpIcon, { content: help })] }), _jsx(SharePreviewDevices, { value: device, onChange: setDevice, windowSize: windowSize })] }), _jsx("div", { className: "share-preview__stage", ref: stage, children: _jsxs("div", { className: "share-preview__device", style: { width: page.width * scale }, children: [_jsxs("div", { className: "share-preview__chrome", children: [_jsx(Icon, { icon: "eye-open", size: 11 }), _jsx("span", { className: "share-preview__address", children: sharePreviewAddress(url) }), _jsx("span", { className: "share-preview__size", children: sizeNote(page.width, page.height, scale) })] }), _jsxs("div", { className: "share-preview__page", style: { height: page.height * scale }, children: [_jsx("iframe", { ref: frame, className: "share-preview__frame", src: src, title: title, style: frameStyle(page.width, page.height, scale), onLoad: () => {
69
+ // What the page before it reported is where its own parts
70
+ // were, so it is dropped rather than drawn over this one.
71
+ setRegions(NO_REGIONS);
72
+ frame.current?.contentWindow?.postMessage({ type: SHARE_REGIONS_REQUEST }, '*');
73
+ } }), region === undefined || highlight === null ? null : (_jsx("div", { ref: mark, className: "share-preview__region", style: regionStyle(region, scale), children: _jsx("span", { className: "share-preview__region-name", children: highlight.label }) }))] })] }) })] }));
74
+ }
75
+ const NO_REGIONS = [];
76
+ function regionOf(regions, part) {
77
+ for (const region of regions) {
78
+ if (region.part === part)
79
+ return region;
80
+ }
81
+ return undefined;
82
+ }
83
+ function regionStyle(region, scale) {
84
+ return {
85
+ left: region.x * scale,
86
+ top: region.y * scale,
87
+ width: region.width * scale,
88
+ height: region.height * scale,
89
+ };
90
+ }
91
+ function frameStyle(width, height, scale) {
92
+ return {
93
+ width,
94
+ height,
95
+ border: 0,
96
+ transform: `scale(${scale})`,
97
+ transformOrigin: 'top left',
98
+ };
99
+ }
100
+ function sizeNote(width, height, scale) {
101
+ const size = `${formatInteger(width)} × ${formatInteger(height)}`;
102
+ return scale === 1 ? size : `${size} · ${Math.round(scale * 100)}%`;
103
+ }
104
+ //# sourceMappingURL=SharePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePreview.js","sourceRoot":"","sources":["../../../src/share/ui/SharePreview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { SharePreviewDeviceKey, SharePreviewSize } from '../core/index.ts';
3
+ export interface SharePreviewDevicesProps {
4
+ /** The screen the preview is laid out at. */
5
+ value: SharePreviewDeviceKey;
6
+ /** Called with the screen picked. */
7
+ onChange: (value: SharePreviewDeviceKey) => void;
8
+ /** The reader's own window, which the first screen is measured from. */
9
+ windowSize: Partial<SharePreviewSize>;
10
+ }
11
+ /**
12
+ * The screens a link can be looked at on, as one row of glyphs.
13
+ *
14
+ * Each carries its name and its size, so a pointer resting on one says what it
15
+ * lays the page out at rather than leaving the reader to guess the icon.
16
+ * @param props - See {@link SharePreviewDevicesProps}.
17
+ * @returns The row of screen buttons.
18
+ */
19
+ export declare function SharePreviewDevices(props: SharePreviewDevicesProps): ReactElement;
20
+ //# sourceMappingURL=SharePreviewDevices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePreviewDevices.d.ts","sourceRoot":"","sources":["../../../src/share/ui/SharePreviewDevices.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAehF,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,YAAY,CA8Bd"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button, ButtonGroup } from '@blueprintjs/core';
3
+ import { useChromeT } from "../../i18n/ui/useT.js";
4
+ import { SHARE_PREVIEW_DEVICES, sharePreviewSize } from "../core/index.js";
5
+ /**
6
+ * The glyph each screen is picked by: a window of one's own, a phone, a
7
+ * monitor, a projected display. The row reads as four screen sizes at a
8
+ * glance, which four words never did.
9
+ */
10
+ const DEVICE_ICONS = {
11
+ window: 'application',
12
+ mobile: 'mobile-phone',
13
+ laptop: 'desktop',
14
+ hd: 'presentation',
15
+ };
16
+ /**
17
+ * The screens a link can be looked at on, as one row of glyphs.
18
+ *
19
+ * Each carries its name and its size, so a pointer resting on one says what it
20
+ * lays the page out at rather than leaving the reader to guess the icon.
21
+ * @param props - See {@link SharePreviewDevicesProps}.
22
+ * @returns The row of screen buttons.
23
+ */
24
+ export function SharePreviewDevices(props) {
25
+ const { value, onChange, windowSize } = props;
26
+ const t = useChromeT();
27
+ return (_jsx(ButtonGroup, { className: "share-preview__devices", variant: "minimal", children: SHARE_PREVIEW_DEVICES.map((key) => {
28
+ const size = sharePreviewSize(key, windowSize);
29
+ const name = t(`share.device.${key}`);
30
+ const label = t('share.deviceSize', {
31
+ name,
32
+ width: size.width,
33
+ height: size.height,
34
+ });
35
+ return (_jsx(Button, { icon: DEVICE_ICONS[key], active: key === value, title: label, "aria-label": label, onClick: () => {
36
+ onChange(key);
37
+ } }, key));
38
+ }) }));
39
+ }
40
+ //# sourceMappingURL=SharePreviewDevices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharePreviewDevices.js","sourceRoot":"","sources":["../../../src/share/ui/SharePreviewDevices.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE3E;;;;GAIG;AACH,MAAM,YAAY,GAA4C;IAC5D,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,cAAc;CACnB,CAAC;AAWF;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,OAAO,CACL,KAAC,WAAW,IAAC,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAC,SAAS,YAC9D,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,CAAC,CAAC,kBAAkB,EAAE;gBAClC,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,OAAO,CACL,KAAC,MAAM,IAEL,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EACvB,MAAM,EAAE,GAAG,KAAK,KAAK,EACrB,KAAK,EAAE,KAAK,gBACA,KAAK,EACjB,OAAO,EAAE,GAAG,EAAE;oBACZ,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC,IAPI,GAAG,CAQR,CACH,CAAC;QACJ,CAAC,CAAC,GACU,CACf,CAAC;AACJ,CAAC"}
@@ -6,5 +6,6 @@ export { PagePart } from './PagePart.tsx';
6
6
  export type { ShareButtonProps, ShareButtonVariant } from './ShareButton.tsx';
7
7
  export { ShareButton } from './ShareButton.tsx';
8
8
  export type { ShareDialogProps } from './ShareDialog.tsx';
9
+ export type { SharePartDescriptions } from './SharePartRow.tsx';
9
10
  export { ShareDialog } from './ShareDialog.tsx';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/share/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/share/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/share/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/share/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Whether the page is being looked at through a share dialog's preview, and so
3
+ * marks each of its parts in the DOM for the dialog to find.
4
+ *
5
+ * A page nobody is framing marks nothing: the marker is a wrapper, and a
6
+ * wrapper changes what a `>` selector in a site's own stylesheet matches.
7
+ */
8
+ export declare const ShareMarkingContext: import("react").Context<boolean>;
9
+ /**
10
+ * Whether this page marks its parts for a share dialog looking at it.
11
+ * @returns Whether the markers are rendered.
12
+ */
13
+ export declare function useShareMarking(): boolean;
14
+ //# sourceMappingURL=shareMarking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareMarking.d.ts","sourceRoot":"","sources":["../../../src/share/ui/shareMarking.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,kCAAuB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}