react-cheminfo 0.14.0 → 0.16.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.
- package/README.md +175 -21
- package/lib/about/core/about.d.ts +13 -7
- package/lib/about/core/about.d.ts.map +1 -1
- package/lib/about/core/about.js +4 -2
- package/lib/about/core/about.js.map +1 -1
- package/lib/about/ui/AboutBuild.d.ts +20 -0
- package/lib/about/ui/AboutBuild.d.ts.map +1 -0
- package/lib/about/ui/AboutBuild.js +38 -0
- package/lib/about/ui/AboutBuild.js.map +1 -0
- package/lib/about/ui/AboutPage.d.ts +7 -0
- package/lib/about/ui/AboutPage.d.ts.map +1 -1
- package/lib/about/ui/AboutPage.js +5 -2
- package/lib/about/ui/AboutPage.js.map +1 -1
- package/lib/about/ui/index.d.ts +2 -0
- package/lib/about/ui/index.d.ts.map +1 -1
- package/lib/about/ui/index.js +1 -0
- package/lib/about/ui/index.js.map +1 -1
- package/lib/build/core/buildInfo.d.ts +39 -0
- package/lib/build/core/buildInfo.d.ts.map +1 -0
- package/lib/build/core/buildInfo.js +20 -0
- package/lib/build/core/buildInfo.js.map +1 -0
- package/lib/build/core/current.d.ts +12 -0
- package/lib/build/core/current.d.ts.map +1 -0
- package/lib/build/core/current.js +11 -0
- package/lib/build/core/current.js.map +1 -0
- package/lib/build/core/index.d.ts +3 -0
- package/lib/build/core/index.d.ts.map +1 -0
- package/lib/build/core/index.js +2 -0
- package/lib/build/core/index.js.map +1 -0
- package/lib/build/vite/buildInfo.d.ts +57 -0
- package/lib/build/vite/buildInfo.d.ts.map +1 -0
- package/lib/build/vite/buildInfo.js +151 -0
- package/lib/build/vite/buildInfo.js.map +1 -0
- package/lib/build/vite/gitHead.d.ts +29 -0
- package/lib/build/vite/gitHead.d.ts.map +1 -0
- package/lib/build/vite/gitHead.js +102 -0
- package/lib/build/vite/gitHead.js.map +1 -0
- package/lib/build/vite/index.d.ts +4 -0
- package/lib/build/vite/index.d.ts.map +1 -0
- package/lib/build/vite/index.js +3 -0
- package/lib/build/vite/index.js.map +1 -0
- package/lib/build-info.d.ts +3 -0
- package/lib/build-info.d.ts.map +1 -0
- package/lib/build-info.js +2 -0
- package/lib/build-info.js.map +1 -0
- package/lib/core.d.ts +2 -0
- package/lib/core.d.ts.map +1 -1
- package/lib/core.js +2 -0
- package/lib/core.js.map +1 -1
- package/lib/credits/core/credits.d.ts +35 -0
- package/lib/credits/core/credits.d.ts.map +1 -1
- package/lib/credits/core/credits.js +41 -0
- package/lib/credits/core/credits.js.map +1 -1
- package/lib/ecosystem/core/sites.d.ts.map +1 -1
- package/lib/ecosystem/core/sites.js +40 -0
- package/lib/ecosystem/core/sites.js.map +1 -1
- package/lib/ecosystem/core/types.d.ts +1 -1
- package/lib/ecosystem/core/types.d.ts.map +1 -1
- package/lib/ecosystem/ui/Wordmark.d.ts +14 -3
- package/lib/ecosystem/ui/Wordmark.d.ts.map +1 -1
- package/lib/ecosystem/ui/Wordmark.js +8 -4
- package/lib/ecosystem/ui/Wordmark.js.map +1 -1
- package/lib/ecosystem/ui/glyphs.d.ts.map +1 -1
- package/lib/ecosystem/ui/glyphs.js +11 -0
- package/lib/ecosystem/ui/glyphs.js.map +1 -1
- package/lib/parallel/core/index.d.ts +27 -0
- package/lib/parallel/core/index.d.ts.map +1 -0
- package/lib/parallel/core/index.js +20 -0
- package/lib/parallel/core/index.js.map +1 -0
- package/lib/parallel/core/parallelAxes.d.ts +103 -0
- package/lib/parallel/core/parallelAxes.d.ts.map +1 -0
- package/lib/parallel/core/parallelAxes.js +146 -0
- package/lib/parallel/core/parallelAxes.js.map +1 -0
- package/lib/parallel/core/parallelBrush.d.ts +79 -0
- package/lib/parallel/core/parallelBrush.d.ts.map +1 -0
- package/lib/parallel/core/parallelBrush.js +99 -0
- package/lib/parallel/core/parallelBrush.js.map +1 -0
- package/lib/parallel/core/parallelExtent.d.ts +28 -0
- package/lib/parallel/core/parallelExtent.d.ts.map +1 -0
- package/lib/parallel/core/parallelExtent.js +47 -0
- package/lib/parallel/core/parallelExtent.js.map +1 -0
- package/lib/parallel/core/parallelFilter.d.ts +36 -0
- package/lib/parallel/core/parallelFilter.d.ts.map +1 -0
- package/lib/parallel/core/parallelFilter.js +74 -0
- package/lib/parallel/core/parallelFilter.js.map +1 -0
- package/lib/parallel/core/parallelHit.d.ts +47 -0
- package/lib/parallel/core/parallelHit.d.ts.map +1 -0
- package/lib/parallel/core/parallelHit.js +81 -0
- package/lib/parallel/core/parallelHit.js.map +1 -0
- package/lib/parallel/core/parallelPaint.d.ts +104 -0
- package/lib/parallel/core/parallelPaint.d.ts.map +1 -0
- package/lib/parallel/core/parallelPaint.js +160 -0
- package/lib/parallel/core/parallelPaint.js.map +1 -0
- package/lib/parallel/core/parallelPalette.d.ts +31 -0
- package/lib/parallel/core/parallelPalette.d.ts.map +1 -0
- package/lib/parallel/core/parallelPalette.js +68 -0
- package/lib/parallel/core/parallelPalette.js.map +1 -0
- package/lib/parallel/core/parallelTicks.d.ts +34 -0
- package/lib/parallel/core/parallelTicks.d.ts.map +1 -0
- package/lib/parallel/core/parallelTicks.js +116 -0
- package/lib/parallel/core/parallelTicks.js.map +1 -0
- package/lib/parallel/core/parallelTypes.d.ts +129 -0
- package/lib/parallel/core/parallelTypes.d.ts.map +1 -0
- package/lib/parallel/core/parallelTypes.js +29 -0
- package/lib/parallel/core/parallelTypes.js.map +1 -0
- package/lib/parallel/ui/ParallelAxesLayer.d.ts +28 -0
- package/lib/parallel/ui/ParallelAxesLayer.d.ts.map +1 -0
- package/lib/parallel/ui/ParallelAxesLayer.js +29 -0
- package/lib/parallel/ui/ParallelAxesLayer.js.map +1 -0
- package/lib/parallel/ui/ParallelCoordinates.d.ts +21 -0
- package/lib/parallel/ui/ParallelCoordinates.d.ts.map +1 -0
- package/lib/parallel/ui/ParallelCoordinates.js +109 -0
- package/lib/parallel/ui/ParallelCoordinates.js.map +1 -0
- package/lib/parallel/ui/ParallelLabels.d.ts +26 -0
- package/lib/parallel/ui/ParallelLabels.d.ts.map +1 -0
- package/lib/parallel/ui/ParallelLabels.js +25 -0
- package/lib/parallel/ui/ParallelLabels.js.map +1 -0
- package/lib/parallel/ui/ParallelTooltip.d.ts +26 -0
- package/lib/parallel/ui/ParallelTooltip.d.ts.map +1 -0
- package/lib/parallel/ui/ParallelTooltip.js +30 -0
- package/lib/parallel/ui/ParallelTooltip.js.map +1 -0
- package/lib/parallel/ui/index.d.ts +25 -0
- package/lib/parallel/ui/index.d.ts.map +1 -0
- package/lib/parallel/ui/index.js +18 -0
- package/lib/parallel/ui/index.js.map +1 -0
- package/lib/parallel/ui/parallelCoordinatesProps.d.ts +185 -0
- package/lib/parallel/ui/parallelCoordinatesProps.d.ts.map +1 -0
- package/lib/parallel/ui/parallelCoordinatesProps.js +11 -0
- package/lib/parallel/ui/parallelCoordinatesProps.js.map +1 -0
- package/lib/parallel/ui/parallelGestureModel.d.ts +52 -0
- package/lib/parallel/ui/parallelGestureModel.d.ts.map +1 -0
- package/lib/parallel/ui/parallelGestureModel.js +80 -0
- package/lib/parallel/ui/parallelGestureModel.js.map +1 -0
- package/lib/parallel/ui/parallelInk.d.ts +76 -0
- package/lib/parallel/ui/parallelInk.d.ts.map +1 -0
- package/lib/parallel/ui/parallelInk.js +113 -0
- package/lib/parallel/ui/parallelInk.js.map +1 -0
- package/lib/parallel/ui/parallelPlotModel.d.ts +55 -0
- package/lib/parallel/ui/parallelPlotModel.d.ts.map +1 -0
- package/lib/parallel/ui/parallelPlotModel.js +113 -0
- package/lib/parallel/ui/parallelPlotModel.js.map +1 -0
- package/lib/parallel/ui/parallelStyles.d.ts +83 -0
- package/lib/parallel/ui/parallelStyles.d.ts.map +1 -0
- package/lib/parallel/ui/parallelStyles.js +131 -0
- package/lib/parallel/ui/parallelStyles.js.map +1 -0
- package/lib/parallel/ui/useParallelCanvas.d.ts +49 -0
- package/lib/parallel/ui/useParallelCanvas.d.ts.map +1 -0
- package/lib/parallel/ui/useParallelCanvas.js +58 -0
- package/lib/parallel/ui/useParallelCanvas.js.map +1 -0
- package/lib/parallel/ui/useParallelGesture.d.ts +67 -0
- package/lib/parallel/ui/useParallelGesture.d.ts.map +1 -0
- package/lib/parallel/ui/useParallelGesture.js +139 -0
- package/lib/parallel/ui/useParallelGesture.js.map +1 -0
- package/lib/structure/ui/useToolbarFloor.d.ts.map +1 -1
- package/lib/structure/ui/useToolbarFloor.js +29 -22
- package/lib/structure/ui/useToolbarFloor.js.map +1 -1
- package/lib/ui.d.ts +1 -0
- package/lib/ui.d.ts.map +1 -1
- package/lib/ui.js +1 -0
- package/lib/ui.js.map +1 -1
- package/lib/vite.d.ts +1 -0
- package/lib/vite.d.ts.map +1 -1
- package/lib/vite.js +1 -0
- package/lib/vite.js.map +1 -1
- package/package.json +2 -1
- package/src/about/core/about.ts +18 -9
- package/src/about/ui/AboutBuild.tsx +83 -0
- package/src/about/ui/AboutPage.tsx +15 -7
- package/src/about/ui/index.ts +2 -0
- package/src/build/core/buildInfo.ts +48 -0
- package/src/build/core/current.ts +12 -0
- package/src/build/core/index.ts +2 -0
- package/src/build/vite/buildInfo.ts +178 -0
- package/src/build/vite/gitHead.ts +114 -0
- package/src/build/vite/index.ts +8 -0
- package/src/build-info.ts +2 -0
- package/src/core.ts +2 -0
- package/src/credits/core/credits.ts +42 -0
- package/src/ecosystem/core/sites.ts +40 -0
- package/src/ecosystem/core/types.ts +4 -1
- package/src/ecosystem/ui/Wordmark.tsx +22 -7
- package/src/ecosystem/ui/glyphs.tsx +46 -0
- package/src/parallel/core/index.ts +80 -0
- package/src/parallel/core/parallelAxes.ts +207 -0
- package/src/parallel/core/parallelBrush.ts +145 -0
- package/src/parallel/core/parallelExtent.ts +56 -0
- package/src/parallel/core/parallelFilter.ts +94 -0
- package/src/parallel/core/parallelHit.ts +106 -0
- package/src/parallel/core/parallelPaint.ts +231 -0
- package/src/parallel/core/parallelPalette.ts +80 -0
- package/src/parallel/core/parallelTicks.ts +164 -0
- package/src/parallel/core/parallelTypes.ts +147 -0
- package/src/parallel/ui/ParallelAxesLayer.tsx +123 -0
- package/src/parallel/ui/ParallelCoordinates.tsx +233 -0
- package/src/parallel/ui/ParallelLabels.tsx +56 -0
- package/src/parallel/ui/ParallelTooltip.tsx +55 -0
- package/src/parallel/ui/index.ts +50 -0
- package/src/parallel/ui/parallelCoordinatesProps.ts +199 -0
- package/src/parallel/ui/parallelGestureModel.ts +109 -0
- package/src/parallel/ui/parallelInk.ts +182 -0
- package/src/parallel/ui/parallelPlotModel.ts +130 -0
- package/src/parallel/ui/parallelStyles.ts +146 -0
- package/src/parallel/ui/useParallelCanvas.ts +104 -0
- package/src/parallel/ui/useParallelGesture.ts +227 -0
- package/src/structure/ui/useToolbarFloor.ts +27 -22
- package/src/ui.ts +1 -0
- package/src/vite.ts +1 -0
package/README.md
CHANGED
|
@@ -62,27 +62,29 @@ through a wildcard subpath exactly as `react-science` serves its own.
|
|
|
62
62
|
|
|
63
63
|
## What is in it
|
|
64
64
|
|
|
65
|
-
| Area
|
|
66
|
-
|
|
|
67
|
-
| **Site identity**
|
|
68
|
-
| **Chrome**
|
|
69
|
-
| **Citation**
|
|
70
|
-
| **Share & embed**
|
|
71
|
-
| **Routing & head**
|
|
72
|
-
| **Indexing**
|
|
73
|
-
| **Pedagogy**
|
|
74
|
-
| **Clipboard & files**
|
|
75
|
-
| **Formatting & colour**
|
|
76
|
-
| **Widgets**
|
|
77
|
-
| **Hooks & state**
|
|
78
|
-
| **Chemistry**
|
|
79
|
-
| **Spectra**
|
|
80
|
-
| **About**
|
|
81
|
-
| **
|
|
82
|
-
| **
|
|
83
|
-
| **
|
|
84
|
-
| **
|
|
85
|
-
| **
|
|
65
|
+
| Area | `…/core` | `…/ui` |
|
|
66
|
+
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
67
|
+
| **Site identity** | `siteById`, `findSiteByHost`, `siteTokensCss` | `SiteMark`, `Wordmark`, `SiteTheme`, `SiteTile`, `EcosystemButton`, `EcosystemLinks` |
|
|
68
|
+
| **Chrome** | — | `SiteHeader`, `SiteFooter`, `NavLink`, `NavMenuButton`, `MenuButton`, `useCompactHeader` |
|
|
69
|
+
| **Citation** | `formatCitation`, `formatCitations`, `citationSegments`, `downloadCitation`, `citedReferences`, `doiUrl` | `CiteButton`, `CitationMenu`, `CitationPreview` |
|
|
70
|
+
| **Share & embed** | `parseShareConfig`, `applyShareConfig`, `buildShareUrl`, `buildEmbedCode`, `isHidden`, `visibleShareParts`, `applySharePreset`, `findSharePreset`, the param codecs, `syncPreferencesWithUrl`, `applyPreferencesFromSearch`, `writePreferencesToSearch` | `ShareDialog`, `ShareButton`, `HiddenPartsProvider`, `PagePart`, `useIsHidden` |
|
|
71
|
+
| **Routing & head** | `createTabRouter`, `readRoute`, `writeRoute`, `subscribeToRoute`, `adoptLegacyHashAddress`, `writeDocumentMeta` | `useTabRoute` |
|
|
72
|
+
| **Indexing** | `injectPageMeta`, `pageHeadTags`, `pageDocumentMeta`, `fill`, `PAGE_HEAD_MARKER`, `PAGE_BODY_MARKER`, `robotsTxt`, `sitemapXml`, `noscriptIndex`, `structuredDataScript`, `assertRoutes`, `routeFor`, `homeRoute` | `cheminfoPrerender`, `ogCardHtml`, `OG_WIDTH`, `OG_HEIGHT` (all `/vite`) |
|
|
73
|
+
| **Pedagogy** | `parseGlossaryMarkers`, `localStorageProgressStore`, `progressSummary`, `finishValidation` | `GlossaryText`, `SyntaxTooltip`, `HintLadder`, `ExerciseActions`, `ExerciseProgressHeader`, `TutorialStepStrip`, `ReferenceGrid`, `TestCaseList` |
|
|
74
|
+
| **Clipboard & files** | `writeToClipboard`, `downloadBlob`, `downloadText`, `sanitizeFileName`, `toDelimited`, `readDelimited`, `downloadFigure`, `figureSvg`, `figurePng`, `figureSize` | `CopyButton`, `CodeBlock`, `DelimitedTextDialog`, `FigureDownload` |
|
|
75
|
+
| **Formatting & colour** | `formatInteger`, `formatDecimal`, `formatBytes`, `pluralize`, `readableInk`, `contrastRatio`, `COLOR_SCALES`, `resolveColorScale`, `formatColorScale`, `colorAt`, `swatchAt`, `sampleScale`, `colorScaleGradient`, `rgbToHsv` | `ColorScaleLegend`, `ColorScaleSelect`, `ColorScaleEditor`, `ColorScaleBar` |
|
|
76
|
+
| **Widgets** | `CREDITS`, `credits` | `ErrorBoundary`, `CollapsibleSection`, `CapsuleFilter`, `HelpTooltip`, `CreditsList` |
|
|
77
|
+
| **Hooks & state** | `createWorkerChannel`, `persistBucket`, `persistSignalBucket` | `useDebouncedValue`, `useContainerSize`, `useListKeyboardNavigation`, `useDisclosure` |
|
|
78
|
+
| **Chemistry** | `atomicOrbitalsOf`, `configurationOf`, `classifyMolfile`, `readStructure` | `AtomicOrbitalViewer` (`/orbital`), `StructureEditor`, `Structure` (`/structure`) |
|
|
79
|
+
| **Spectra** | `FILTER_CATALOG`, `filterMenu`, `settingsProblems`, `normalizationFilters`, `addFilter`, `moveFilter`, `setFilterOption`, `principalComponentChoices`, `clampPrincipalComponents`, `EMPTY_SETTINGS` (all `/spectra`) | `SpectraSettingsEditor`, `FilterChainEditor`, `PrincipalComponentSelect` (all `/spectra`) |
|
|
80
|
+
| **About** | `resolveAbout`, `aboutProblems` | `AboutPage` |
|
|
81
|
+
| **Which build is running** | `formatBuiltAt`, `shortCommit`, `BuildInfo` | `AboutBuild`, `cheminfoBuildInfo` (`/vite`) |
|
|
82
|
+
| **Slideshows** | `parseTalk`, `splitDemoLinks`, `slideActionForKey`, `parseTalkOrigin`, `buildTalkManifest` (all `/slides`) | `Slideshow`, `SlideView`, `TalkList`, `BackToSlides` (all `/slides`), `cheminfoTalks` (`/vite`) |
|
|
83
|
+
| **Token guard** | `findTokenViolations` | `cheminfo-check-tokens` (the bin) |
|
|
84
|
+
| **Figures** | `chartScale`, `chartAxisScale`, `chartAxisTitle`, `chartShare`, `chartColumnExtent`, `chartBinCounts`, `chartSeriesColor`, `rowMatrix`, `stackedMatrix`, `emptiestCorner`, `placeOverlayCard`, `overlayMetrics` | `ChartFrame`, `ChartAxis`, `TrackedLineChart`, `OverlayBar`, `OverlaySelect`, `OverlaySegmented`, `OverlayToggle`, `OverlayNumber`, `OverlayLegend`, `OverlayCaption`, `OverlayReadout` |
|
|
85
|
+
| **Projections** | `pcaResult`, `embeddingResult`, `projectionTabs`, `loadingProfiles`, `explainedShares`, `confidenceEllipse`, `projectEllipse`, `pointsInPolygon`, `resolveProjectionGroups`, `PROJECTION_COPY` | `PcaViewer`, `ProjectionViewer`, `ScatterPlot`, `ScatterMatrix` |
|
|
86
|
+
| **Parallel coordinates** | `parallelAxisOf`, `parallelAxisLayouts`, `parallelIncludedMask`, `parallelKeptCount`, `parallelNearestRow`, `parallelSegmentAt`, `parallelBandAt`, `parallelRangeOf`, `parallelPalette`, `parallelColorSteps`, `paintParallelLines` | `ParallelCoordinates` |
|
|
87
|
+
| **Periodic table** | `PERIODIC_ELEMENTS`, `elementBySymbol`, `elementByAtomicNumber`, `cellOf`, `placedElements`, `elementByArrowKey`, `categorySwatch`, `CATEGORY_LABELS` | `PeriodicTable`, `ElementCell`, `CategoryLegend` |
|
|
86
88
|
|
|
87
89
|
Everything in that table is exported from `./core`, `./ui`, `./slides`,
|
|
88
90
|
`./vite` or `./structure` and nothing else is: the sub-components a component is built
|
|
@@ -501,6 +503,101 @@ marks itself, so the cog in the corner never lands in the middle of the scatter.
|
|
|
501
503
|
`downloadFigure(target, options)`, `figureSvg` and `figurePng` are the same thing
|
|
502
504
|
without the button, for a site saving a figure from its own menu.
|
|
503
505
|
|
|
506
|
+
### `ParallelCoordinates`
|
|
507
|
+
|
|
508
|
+
Many rows against many properties at once: one vertical axis per column, one
|
|
509
|
+
line per row, and a brush on every axis.
|
|
510
|
+
|
|
511
|
+
```tsx
|
|
512
|
+
import { ParallelCoordinates } from 'react-cheminfo/ui';
|
|
513
|
+
import { parallelAxisOf, parallelIncludedMask } from 'react-cheminfo/core';
|
|
514
|
+
|
|
515
|
+
const axes = useMemo(
|
|
516
|
+
() => [
|
|
517
|
+
parallelAxisOf(rows, {
|
|
518
|
+
id: 'mw',
|
|
519
|
+
label: 'MW',
|
|
520
|
+
unit: 'g/mol',
|
|
521
|
+
value: (r) => r.weight,
|
|
522
|
+
}),
|
|
523
|
+
parallelAxisOf(rows, { id: 'clogp', label: 'cLogP', value: (r) => r.logP }),
|
|
524
|
+
parallelAxisOf(rows, {
|
|
525
|
+
id: 'mutagenic',
|
|
526
|
+
label: 'Mutagenic',
|
|
527
|
+
domain: [0, 2],
|
|
528
|
+
ticks: [
|
|
529
|
+
{ value: 0, label: 'none' },
|
|
530
|
+
{ value: 1, label: 'low' },
|
|
531
|
+
{ value: 2, label: 'high' },
|
|
532
|
+
],
|
|
533
|
+
value: (r) => r.mutagenic,
|
|
534
|
+
}),
|
|
535
|
+
],
|
|
536
|
+
[rows],
|
|
537
|
+
);
|
|
538
|
+
const included = useMemo(
|
|
539
|
+
() => parallelIncludedMask(axes, ranges, rows.length),
|
|
540
|
+
[axes, ranges, rows.length],
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
<ParallelCoordinates
|
|
544
|
+
axes={axes}
|
|
545
|
+
width={width}
|
|
546
|
+
height={340}
|
|
547
|
+
colorAxis="clogp"
|
|
548
|
+
ranges={ranges}
|
|
549
|
+
onRangeChange={setRange}
|
|
550
|
+
included={included}
|
|
551
|
+
hovered={hovered}
|
|
552
|
+
onHoverChange={setHovered}
|
|
553
|
+
selected={picked}
|
|
554
|
+
onRowClick={pick}
|
|
555
|
+
renderTooltip={({ index }) => <MF mf={rows[index].mf} />}
|
|
556
|
+
/>;
|
|
557
|
+
<MoleculeTable included={included} />;
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
- **It is told nothing about what the rows are.** Every axis hands over one
|
|
561
|
+
`ArrayLike<number>` read in place, so a repaint costs an indexed read rather
|
|
562
|
+
than a call per value, and the same figure draws a library of molecules, a set
|
|
563
|
+
of runs and a table of measurements. `parallelAxisOf` is the one place a row
|
|
564
|
+
type is named, and it runs once per data change.
|
|
565
|
+
- **The table beside it filters on the same answer.** `parallelIncludedMask` is
|
|
566
|
+
exported and is what the figure itself uses: a plot drawing one line under a
|
|
567
|
+
table showing fourteen rows is not a rounding error, it is two programs.
|
|
568
|
+
- **A brush reports on release, never during the drag.** The band follows the
|
|
569
|
+
pointer live — that costs nothing, it is one component's own state — while the
|
|
570
|
+
interval reaches the caller once per gesture, so a table filtering on it is
|
|
571
|
+
asked to re-render once rather than sixty times a second. `onRangePreview` is
|
|
572
|
+
there for a caption, and for nothing else.
|
|
573
|
+
- **The brush is arithmetic, not a library.** Create by dragging on a bare axis,
|
|
574
|
+
move the band, drag either edge, clear by pressing outside it: four answers to
|
|
575
|
+
one question, which part of the axis the press landed on. Written that way the
|
|
576
|
+
whole gesture is unit-tested in a runtime with no DOM, which is what a brush
|
|
577
|
+
attached to an element can never be — and it keeps 15.8 kB of `d3-brush` out
|
|
578
|
+
of every site that draws one.
|
|
579
|
+
- **The axes end exactly on the data.** No nicing, because the reader is
|
|
580
|
+
comparing rows against each other and the best one has to touch the top of its
|
|
581
|
+
axis rather than float below a round number nothing reached. `nice` turns it on
|
|
582
|
+
per axis when round numbers really are the point, and a column with no spread
|
|
583
|
+
at all is opened by half a unit so that it still draws.
|
|
584
|
+
- **A coded quantity writes its own graduations.** `domain: [0, 2]` with `ticks`
|
|
585
|
+
reading `none`, `low`, `high` is what a risk column needs; `2` on an axis means
|
|
586
|
+
nothing to anybody.
|
|
587
|
+
- **The lines are a canvas, everything else is not.** Ten thousand polylines are
|
|
588
|
+
not ten thousand elements, so the mass is painted — the rows a brush left out
|
|
589
|
+
in one batched path underneath, the kept ones over them — while the axes, the
|
|
590
|
+
bands, the names and the card stay SVG and HTML. The consequence is worth
|
|
591
|
+
knowing before choosing it: `FigureDownload` copies SVG off the page, so a
|
|
592
|
+
saved figure keeps the axes and loses the lines.
|
|
593
|
+
- **A canvas cannot read a custom property**, and the accent is the one colour a
|
|
594
|
+
site owns, so the figure asks the browser what its own `--accent`, `--text`,
|
|
595
|
+
`--text-muted` and `--surface` resolved to and paints with the answer. `ink`
|
|
596
|
+
overrides any of them.
|
|
597
|
+
- **The card is a render prop**, because what belongs in it is the caller's
|
|
598
|
+
subject — a formula through `react-mf`, a structure, a name — and a readout of
|
|
599
|
+
strings cannot hold any of that.
|
|
600
|
+
|
|
504
601
|
## Carrying talks
|
|
505
602
|
|
|
506
603
|
A deck is one Markdown file in the repository of the site whose subject it
|
|
@@ -686,6 +783,63 @@ disk. A server writing more into the same place composes it itself, with
|
|
|
686
783
|
`pageHeadTags` and `fill(page, PAGE_BODY_MARKER, noscriptIndex(…))`. All of that
|
|
687
784
|
is `react-cheminfo/core`, so a backend loads no React and no Vite.
|
|
688
785
|
|
|
786
|
+
## Saying which build is running
|
|
787
|
+
|
|
788
|
+
A report of something going wrong is worth answering only when we know what was
|
|
789
|
+
running, and a hand-written version in a source file is wrong by the next
|
|
790
|
+
release. So the build states it: `cheminfoBuildInfo` resolves the release, the
|
|
791
|
+
instant and the commit once, and the About page reads them.
|
|
792
|
+
|
|
793
|
+
```ts
|
|
794
|
+
// vite.config.ts
|
|
795
|
+
import { cheminfoBuildInfo } from 'react-cheminfo/vite';
|
|
796
|
+
|
|
797
|
+
plugins: [react(), cheminfoBuildInfo(), cheminfoPrerender({ ... })];
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
```ts
|
|
801
|
+
// src/about.ts
|
|
802
|
+
import { BUILD_INFO } from 'react-cheminfo/build-info';
|
|
803
|
+
|
|
804
|
+
export const ABOUT: AboutContent = { siteId: 'smiles', build: BUILD_INFO, ... };
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
`react-cheminfo/build-info` is a real module that exports `undefined`, and the
|
|
808
|
+
plugin fills it in during the build. So a Playwright spec or a unit test that
|
|
809
|
+
imports the same About record in plain Node still resolves it — a virtual
|
|
810
|
+
specifier does not, and the whole suite dies on the import — and a build without
|
|
811
|
+
the plugin simply shows no build line.
|
|
812
|
+
|
|
813
|
+
Where each value comes from:
|
|
814
|
+
|
|
815
|
+
- **version** — the `package.json` at the repository root, which is the one
|
|
816
|
+
release-please bumps. A site whose tool lives in `frontend` still reports the
|
|
817
|
+
root version rather than the `0.0.0` that workspace was scaffolded with.
|
|
818
|
+
- **builtAt** — the instant the build ran, to the second, honouring
|
|
819
|
+
`SOURCE_DATE_EPOCH`.
|
|
820
|
+
- **commit** — read out of `.git` as files, never by running git: the image
|
|
821
|
+
build has no git binary and the shared `docker-image` workflow passes no build
|
|
822
|
+
argument. A site therefore lets three paths back into the build context, which
|
|
823
|
+
costs a few kilobytes:
|
|
824
|
+
|
|
825
|
+
```
|
|
826
|
+
# .dockerignore
|
|
827
|
+
.git
|
|
828
|
+
!.git/HEAD
|
|
829
|
+
!.git/refs
|
|
830
|
+
!.git/packed-refs
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
Without them the commit is simply left out, and `GITHUB_SHA` is used when the
|
|
834
|
+
environment names one.
|
|
835
|
+
|
|
836
|
+
The same record is written to **`build-info.json`** in the build, so the whole
|
|
837
|
+
family answers one question with one request each:
|
|
838
|
+
|
|
839
|
+
```sh
|
|
840
|
+
curl -s https://smiles.cheminfo.org/build-info.json
|
|
841
|
+
```
|
|
842
|
+
|
|
689
843
|
## Styling
|
|
690
844
|
|
|
691
845
|
**No stylesheet, nothing for a consumer to import.** Every rule is a
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BuildInfo } from '../../build/core/buildInfo.ts';
|
|
1
2
|
import type { CitedWork } from '../../citation/core/works.ts';
|
|
2
3
|
import type { CreditEntry, CreditId } from '../../credits/core/credits.ts';
|
|
3
4
|
import type { EcosystemSite, SiteId } from '../../ecosystem/core/sites.ts';
|
|
@@ -12,8 +13,12 @@ import type { ProviderEntry, ProviderId } from './providers.ts';
|
|
|
12
13
|
* each crediting a different half of what it runs on.
|
|
13
14
|
*/
|
|
14
15
|
export interface AboutContent {
|
|
15
|
-
/**
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* The site the page belongs to: its id, or the record itself for a site that
|
|
18
|
+
* is deliberately not listed in the family's Tools menu and therefore not in
|
|
19
|
+
* `ECOSYSTEM_SITES`.
|
|
20
|
+
*/
|
|
21
|
+
siteId: SiteId | EcosystemSite;
|
|
17
22
|
/** One sentence: what this tool is. */
|
|
18
23
|
what: string;
|
|
19
24
|
/**
|
|
@@ -54,10 +59,11 @@ export interface AboutContent {
|
|
|
54
59
|
*/
|
|
55
60
|
repository?: string;
|
|
56
61
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
62
|
+
* Which build is running, from `virtual:cheminfo-build-info` — never written
|
|
63
|
+
* by hand, which is what keeps it true after the next release.
|
|
64
|
+
* @default undefined — the site's build does not publish one
|
|
59
65
|
*/
|
|
60
|
-
|
|
66
|
+
build?: BuildInfo;
|
|
61
67
|
/**
|
|
62
68
|
* Where a problem is reported.
|
|
63
69
|
* @default the repository's /issues
|
|
@@ -95,8 +101,8 @@ export interface ResolvedAbout {
|
|
|
95
101
|
providedBy: ProviderEntry[];
|
|
96
102
|
license: string;
|
|
97
103
|
repository: string;
|
|
98
|
-
/**
|
|
99
|
-
|
|
104
|
+
/** Which build is running, or `undefined` when the site does not say. */
|
|
105
|
+
build: BuildInfo | undefined;
|
|
100
106
|
issues: string;
|
|
101
107
|
}
|
|
102
108
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"about.d.ts","sourceRoot":"","sources":["../../../src/about/core/about.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGhE;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B
|
|
1
|
+
{"version":3,"file":"about.d.ts","sourceRoot":"","sources":["../../../src/about/core/about.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGhE;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iEAAiE;IACjE,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,8DAA8D;IAC9D,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACnC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,4DAA4D;IAC5D,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,2DAA2D;IAC3D,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAqBjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CA8C7D"}
|
package/lib/about/core/about.js
CHANGED
|
@@ -10,7 +10,9 @@ import { providers } from "./providers.js";
|
|
|
10
10
|
* credits nobody.
|
|
11
11
|
*/
|
|
12
12
|
export function resolveAbout(content) {
|
|
13
|
-
const site =
|
|
13
|
+
const site = typeof content.siteId === 'string'
|
|
14
|
+
? siteById(content.siteId)
|
|
15
|
+
: content.siteId;
|
|
14
16
|
const repository = content.repository ?? site.repository;
|
|
15
17
|
return {
|
|
16
18
|
site,
|
|
@@ -23,7 +25,7 @@ export function resolveAbout(content) {
|
|
|
23
25
|
providedBy: providers(content.providedBy ?? []),
|
|
24
26
|
license: content.license ?? DEFAULT_LICENSE,
|
|
25
27
|
repository,
|
|
26
|
-
|
|
28
|
+
build: content.build,
|
|
27
29
|
issues: content.issues ?? `${withoutTrailingSlash(repository)}/issues`,
|
|
28
30
|
};
|
|
29
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"about.js","sourceRoot":"","sources":["../../../src/about/core/about.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"about.js","sourceRoot":"","sources":["../../../src/about/core/about.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { BuildInfo } from '../../build/core/buildInfo.ts';
|
|
3
|
+
export interface AboutBuildProps {
|
|
4
|
+
/** What the build published about itself. */
|
|
5
|
+
build: BuildInfo;
|
|
6
|
+
/** Where the sources live, which is what the version and commit link into. */
|
|
7
|
+
repository: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The one line that says which build of the site a visitor has open.
|
|
11
|
+
*
|
|
12
|
+
* A report of something going wrong is worth answering only when we know what
|
|
13
|
+
* was running, and a visitor cannot read that off the page otherwise. The
|
|
14
|
+
* version and the commit link into the repository, so the change that caused a
|
|
15
|
+
* problem is one click from the page that shows it.
|
|
16
|
+
* @param props - See {@link AboutBuildProps}.
|
|
17
|
+
* @returns The line.
|
|
18
|
+
*/
|
|
19
|
+
export declare function AboutBuild(props: AboutBuildProps): ReactElement;
|
|
20
|
+
//# sourceMappingURL=AboutBuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AboutBuild.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAa,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG/D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CA+B/D"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { formatBuiltAt, shortCommit } from "../../build/core/buildInfo.js";
|
|
3
|
+
/**
|
|
4
|
+
* The one line that says which build of the site a visitor has open.
|
|
5
|
+
*
|
|
6
|
+
* A report of something going wrong is worth answering only when we know what
|
|
7
|
+
* was running, and a visitor cannot read that off the page otherwise. The
|
|
8
|
+
* version and the commit link into the repository, so the change that caused a
|
|
9
|
+
* problem is one click from the page that shows it.
|
|
10
|
+
* @param props - See {@link AboutBuildProps}.
|
|
11
|
+
* @returns The line.
|
|
12
|
+
*/
|
|
13
|
+
export function AboutBuild(props) {
|
|
14
|
+
const { build, repository } = props;
|
|
15
|
+
const sources = repository.endsWith('/')
|
|
16
|
+
? repository.slice(0, -1)
|
|
17
|
+
: repository;
|
|
18
|
+
const onGitHub = sources.startsWith(GITHUB);
|
|
19
|
+
return (_jsxs("p", { style: PARAGRAPH_STYLE, children: ["Running version", ' ', _jsx(Reference, { href: onGitHub ? `${sources}/releases/tag/v${build.version}` : undefined, children: build.version }), ", built ", formatBuiltAt(build.builtAt), build.commit === undefined ? null : (_jsxs(_Fragment, { children: [' from commit ', _jsx(Reference, { href: onGitHub ? `${sources}/commit/${build.commit}` : undefined, children: shortCommit(build.commit) })] })), "."] }));
|
|
20
|
+
}
|
|
21
|
+
function Reference(props) {
|
|
22
|
+
const { href, children } = props;
|
|
23
|
+
if (href === undefined)
|
|
24
|
+
return _jsx("code", { style: CODE_STYLE, children: children });
|
|
25
|
+
return (_jsx("a", { href: href, target: "_blank", rel: "noopener noreferrer", style: LINK_STYLE, children: _jsx("code", { style: CODE_STYLE, children: children }) }));
|
|
26
|
+
}
|
|
27
|
+
const GITHUB = 'https://github.com/';
|
|
28
|
+
const PARAGRAPH_STYLE = {
|
|
29
|
+
margin: '8px 0 0',
|
|
30
|
+
color: 'var(--text-muted)',
|
|
31
|
+
fontSize: 13,
|
|
32
|
+
};
|
|
33
|
+
const CODE_STYLE = {
|
|
34
|
+
fontFamily: 'var(--font-mono, ui-monospace, monospace)',
|
|
35
|
+
fontSize: 13,
|
|
36
|
+
};
|
|
37
|
+
const LINK_STYLE = { color: 'var(--accent)' };
|
|
38
|
+
//# sourceMappingURL=AboutBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AboutBuild.js","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAS3E;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,CACL,aAAG,KAAK,EAAE,eAAe,gCACP,GAAG,EACnB,KAAC,SAAS,IACR,IAAI,EACF,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,YAGnE,KAAK,CAAC,OAAO,GACJ,cACH,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EACpC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,8BACG,eAAe,EAChB,KAAC,SAAS,IACR,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,YAE/D,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAChB,IACX,CACJ,SAEC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAGlB;IACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,CAAC;IAE1E,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,KAAK,EAAE,UAAU,YACxE,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,GACxC,CACL,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAErC,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,2CAA2C;IACvD,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,eAAe,EAAmC,CAAC"}
|
|
@@ -15,6 +15,13 @@ export interface AboutPageProps {
|
|
|
15
15
|
* @default undefined
|
|
16
16
|
*/
|
|
17
17
|
children?: ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* The site's own mark, for a site the shared glyph set does not hold —
|
|
20
|
+
* one that is deliberately not listed in `ECOSYSTEM_SITES`. It stands where
|
|
21
|
+
* `SiteMark` would, and the hero is otherwise unchanged.
|
|
22
|
+
* @default undefined — the family's mark for that site
|
|
23
|
+
*/
|
|
24
|
+
mark?: ReactNode;
|
|
18
25
|
/**
|
|
19
26
|
* The site's own drawn lockup, for a site that has one. It stands in the
|
|
20
27
|
* hero in place of the mark and the written name, above the tagline, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAsF7D"}
|
|
@@ -3,6 +3,7 @@ import { CreditsList } from "../../credits/ui/CreditsList.js";
|
|
|
3
3
|
import { Wordmark } from "../../ecosystem/ui/Wordmark.js";
|
|
4
4
|
import { SiteMark } from "../../ecosystem/ui/marks.js";
|
|
5
5
|
import { resolveAbout } from "../core/about.js";
|
|
6
|
+
import { AboutBuild } from "./AboutBuild.js";
|
|
6
7
|
import { AboutCitations } from "./AboutCitations.js";
|
|
7
8
|
import { AboutProvidedBy } from "./AboutProvidedBy.js";
|
|
8
9
|
import { AboutSection } from "./AboutSection.js";
|
|
@@ -19,10 +20,12 @@ import { AboutSection } from "./AboutSection.js";
|
|
|
19
20
|
* @throws {Error} When the record names a site or a credit that does not exist.
|
|
20
21
|
*/
|
|
21
22
|
export function AboutPage(props) {
|
|
22
|
-
const { content, className, children, logo } = props;
|
|
23
|
+
const { content, className, children, logo, mark } = props;
|
|
23
24
|
const about = resolveAbout(content);
|
|
24
25
|
const site = about.site;
|
|
25
|
-
return (_jsxs("div", { className: className === undefined ? 'about-page' : `about-page ${className}`, style: PAGE_STYLE, children: [_jsxs("header", { className: "about-hero", style: logo === undefined ? HERO_STYLE : LOGO_HERO_STYLE, children: [logo === undefined
|
|
26
|
+
return (_jsxs("div", { className: className === undefined ? 'about-page' : `about-page ${className}`, style: PAGE_STYLE, children: [_jsxs("header", { className: "about-hero", style: logo === undefined ? HERO_STYLE : LOGO_HERO_STYLE, children: [logo === undefined
|
|
27
|
+
? (mark ?? _jsx(SiteMark, { site: site, size: 56 }))
|
|
28
|
+
: null, _jsxs("div", { children: [_jsx("h1", { style: logo === undefined ? NAME_STYLE : LOGO_NAME_STYLE, children: logo ?? _jsx(Wordmark, { site: site, size: 26 }) }), _jsx("p", { style: TAGLINE_STYLE, children: site.tagline }), _jsx("p", { style: WHAT_STYLE, children: about.what })] })] }), about.people.length === 0 && about.providedBy.length === 0 ? null : (_jsx(AboutSection, { title: "Provided by", className: "about-provided-by", children: _jsx(AboutProvidedBy, { people: about.people, providers: about.providedBy }) })), _jsx(AboutSection, { title: "What you can do here", className: "about-can", children: _jsx("ul", { style: CAN_LIST_STYLE, children: about.can.map((line) => (_jsx("li", { children: line }, line))) }) }), about.paragraphs.length === 0 ? null : (_jsx(AboutSection, { className: "about-context", children: about.paragraphs.map((paragraph, index) => (_jsx("p", { style: index === 0 ? FIRST_PARAGRAPH_STYLE : PARAGRAPH_STYLE, children: paragraph }, paragraph))) })), children, _jsx(AboutSection, { title: "Built on", className: "about-credits", children: _jsx(CreditsList, { entries: about.credits }) }), about.cite.length === 0 ? null : (_jsx(AboutSection, { title: "How to cite", className: "about-cite", children: _jsx(AboutCitations, { works: about.cite }) })), _jsxs(AboutSection, { title: "Licence and source", className: "about-licence", children: [_jsxs("p", { style: FIRST_PARAGRAPH_STYLE, children: [about.license, ", \u00A9 cheminfo. Use it in a course, fork it, or lift a piece of it into something else. The sources are at", ' ', _jsx(ExternalLink, { href: about.repository }), "."] }), about.build === undefined ? null : (_jsx(AboutBuild, { build: about.build, repository: about.repository }))] }), _jsx(AboutSection, { title: "Found a problem?", className: "about-issues", children: _jsxs("p", { style: FIRST_PARAGRAPH_STYLE, children: ["Tell us: a report naming what you typed and what came back is the fastest fix there is. ", _jsx(ExternalLink, { href: about.issues }), "."] }) })] }));
|
|
26
29
|
}
|
|
27
30
|
function ExternalLink(props) {
|
|
28
31
|
const { href } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutPage.js","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA8B,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"AboutPage.js","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"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"}
|
package/lib/about/ui/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type { AboutBuildProps } from './AboutBuild.tsx';
|
|
2
|
+
export { AboutBuild } from './AboutBuild.tsx';
|
|
1
3
|
export type { AboutCitationsProps } from './AboutCitations.tsx';
|
|
2
4
|
export { AboutCitations } from './AboutCitations.tsx';
|
|
3
5
|
export type { AboutPageProps } from './AboutPage.tsx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/about/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/about/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
package/lib/about/ui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/about/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/about/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a deployed page can say about itself: which release it is, when it was
|
|
3
|
+
* built, and from which commit.
|
|
4
|
+
*
|
|
5
|
+
* A site of ours is a link somebody handed out in a course, so the first
|
|
6
|
+
* question a report raises is *which one of these is running*. The record is
|
|
7
|
+
* filled by the build rather than written by hand — a version a human types
|
|
8
|
+
* into a source file is a version that is wrong by the next release.
|
|
9
|
+
*/
|
|
10
|
+
export interface BuildInfo {
|
|
11
|
+
/** The released version, from the package.json at the repository root. */
|
|
12
|
+
version: string;
|
|
13
|
+
/** When the build ran, as an ISO instant to the second: `2026-09-16T09:41:07Z`. */
|
|
14
|
+
builtAt: string;
|
|
15
|
+
/**
|
|
16
|
+
* The full commit the build was made from.
|
|
17
|
+
* @default undefined — the build could not see the repository
|
|
18
|
+
*/
|
|
19
|
+
commit?: string;
|
|
20
|
+
/**
|
|
21
|
+
* The version of `react-cheminfo` the site is built against, which is what
|
|
22
|
+
* says whether a site is running the current chrome.
|
|
23
|
+
* @default undefined — the build could not read it
|
|
24
|
+
*/
|
|
25
|
+
reactCheminfo?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The commit as it is written for a reader.
|
|
29
|
+
* @param commit - The full hash.
|
|
30
|
+
* @returns Its first seven characters, which is what git itself shows.
|
|
31
|
+
*/
|
|
32
|
+
export declare function shortCommit(commit: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* The build instant as it is read on the page.
|
|
35
|
+
* @param builtAt - The ISO instant the build wrote.
|
|
36
|
+
* @returns The day and the time, in UTC, e.g. `2026-09-16 09:41:07 UTC`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatBuiltAt(builtAt: string): string;
|
|
39
|
+
//# sourceMappingURL=buildInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildInfo.d.ts","sourceRoot":"","sources":["../../../src/build/core/buildInfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The commit as it is written for a reader.
|
|
3
|
+
* @param commit - The full hash.
|
|
4
|
+
* @returns Its first seven characters, which is what git itself shows.
|
|
5
|
+
*/
|
|
6
|
+
export function shortCommit(commit) {
|
|
7
|
+
return commit.slice(0, SHORT_COMMIT_LENGTH);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The build instant as it is read on the page.
|
|
11
|
+
* @param builtAt - The ISO instant the build wrote.
|
|
12
|
+
* @returns The day and the time, in UTC, e.g. `2026-09-16 09:41:07 UTC`.
|
|
13
|
+
*/
|
|
14
|
+
export function formatBuiltAt(builtAt) {
|
|
15
|
+
const seconds = builtAt.slice(0, SECOND_LENGTH).replace('T', ' ');
|
|
16
|
+
return `${seconds} UTC`;
|
|
17
|
+
}
|
|
18
|
+
const SHORT_COMMIT_LENGTH = 7;
|
|
19
|
+
const SECOND_LENGTH = 19;
|
|
20
|
+
//# sourceMappingURL=buildInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildInfo.js","sourceRoot":"","sources":["../../../src/build/core/buildInfo.ts"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,OAAO,GAAG,OAAO,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,aAAa,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BuildInfo } from './buildInfo.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Which build of the site is running, or `undefined` when nothing filled it in.
|
|
4
|
+
*
|
|
5
|
+
* The module is replaced at build time by `cheminfoBuildInfo`, which is what
|
|
6
|
+
* puts the real version, instant and commit here. It stays a real module rather
|
|
7
|
+
* than a virtual one so that a test, a Playwright spec or a backend can import
|
|
8
|
+
* the About record in plain Node: outside a build there is simply no record,
|
|
9
|
+
* and the About page leaves the line out.
|
|
10
|
+
*/
|
|
11
|
+
export declare const BUILD_INFO: BuildInfo | undefined;
|
|
12
|
+
//# sourceMappingURL=current.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../../src/build/core/current.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,GAAG,SAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which build of the site is running, or `undefined` when nothing filled it in.
|
|
3
|
+
*
|
|
4
|
+
* The module is replaced at build time by `cheminfoBuildInfo`, which is what
|
|
5
|
+
* puts the real version, instant and commit here. It stays a real module rather
|
|
6
|
+
* than a virtual one so that a test, a Playwright spec or a backend can import
|
|
7
|
+
* the About record in plain Node: outside a build there is simply no record,
|
|
8
|
+
* and the About page leaves the line out.
|
|
9
|
+
*/
|
|
10
|
+
export const BUILD_INFO = undefined;
|
|
11
|
+
//# sourceMappingURL=current.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current.js","sourceRoot":"","sources":["../../../src/build/core/current.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAA0B,SAAS,CAAC"}
|