react-cheminfo 0.20.0 → 0.22.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 (104) hide show
  1. package/README.md +1 -1
  2. package/lib/about/core/about.d.ts +3 -3
  3. package/lib/about/core/about.d.ts.map +1 -1
  4. package/lib/build/vite/gitHead.d.ts.map +1 -1
  5. package/lib/build/vite/gitHead.js +17 -2
  6. package/lib/build/vite/gitHead.js.map +1 -1
  7. package/lib/chrome/ui/SiteHeader.d.ts +20 -3
  8. package/lib/chrome/ui/SiteHeader.d.ts.map +1 -1
  9. package/lib/chrome/ui/SiteHeader.js +7 -3
  10. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  11. package/lib/clipboard/ui/ClickToCopy.d.ts +69 -0
  12. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -0
  13. package/lib/clipboard/ui/ClickToCopy.js +66 -0
  14. package/lib/clipboard/ui/ClickToCopy.js.map +1 -0
  15. package/lib/clipboard/ui/CopyButton.d.ts +1 -1
  16. package/lib/clipboard/ui/CopyButton.js +1 -1
  17. package/lib/clipboard/ui/CopyableValue.d.ts +3 -3
  18. package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
  19. package/lib/clipboard/ui/CopyableValue.js +5 -5
  20. package/lib/clipboard/ui/CopyableValue.js.map +1 -1
  21. package/lib/clipboard/ui/index.d.ts +2 -0
  22. package/lib/clipboard/ui/index.d.ts.map +1 -1
  23. package/lib/clipboard/ui/index.js +1 -0
  24. package/lib/clipboard/ui/index.js.map +1 -1
  25. package/lib/ecosystem/core/groups.d.ts +4 -3
  26. package/lib/ecosystem/core/groups.d.ts.map +1 -1
  27. package/lib/ecosystem/core/groups.js +8 -2
  28. package/lib/ecosystem/core/groups.js.map +1 -1
  29. package/lib/ecosystem/core/index.d.ts +1 -1
  30. package/lib/ecosystem/core/index.d.ts.map +1 -1
  31. package/lib/ecosystem/core/index.js.map +1 -1
  32. package/lib/ecosystem/core/lookup.d.ts +2 -2
  33. package/lib/ecosystem/core/lookup.d.ts.map +1 -1
  34. package/lib/ecosystem/core/lookup.js.map +1 -1
  35. package/lib/ecosystem/core/nameColors.d.ts +2 -2
  36. package/lib/ecosystem/core/nameColors.d.ts.map +1 -1
  37. package/lib/ecosystem/core/nameColors.js.map +1 -1
  38. package/lib/ecosystem/core/sites.d.ts +3 -3
  39. package/lib/ecosystem/core/sites.d.ts.map +1 -1
  40. package/lib/ecosystem/core/sites.js +39 -0
  41. package/lib/ecosystem/core/sites.js.map +1 -1
  42. package/lib/ecosystem/core/tokens.d.ts +4 -3
  43. package/lib/ecosystem/core/tokens.d.ts.map +1 -1
  44. package/lib/ecosystem/core/tokens.js +8 -7
  45. package/lib/ecosystem/core/tokens.js.map +1 -1
  46. package/lib/ecosystem/core/types.d.ts +19 -10
  47. package/lib/ecosystem/core/types.d.ts.map +1 -1
  48. package/lib/ecosystem/ui/SiteTheme.d.ts +14 -3
  49. package/lib/ecosystem/ui/SiteTheme.d.ts.map +1 -1
  50. package/lib/ecosystem/ui/SiteTheme.js +6 -1
  51. package/lib/ecosystem/ui/SiteTheme.js.map +1 -1
  52. package/lib/ecosystem/ui/Wordmark.d.ts +2 -2
  53. package/lib/ecosystem/ui/Wordmark.d.ts.map +1 -1
  54. package/lib/ecosystem/ui/glyphs.d.ts.map +1 -1
  55. package/lib/ecosystem/ui/glyphs.js +9 -0
  56. package/lib/ecosystem/ui/glyphs.js.map +1 -1
  57. package/lib/ecosystem/ui/marks.d.ts +13 -4
  58. package/lib/ecosystem/ui/marks.d.ts.map +1 -1
  59. package/lib/ecosystem/ui/marks.js +11 -3
  60. package/lib/ecosystem/ui/marks.js.map +1 -1
  61. package/lib/error/ui/ErrorFallback.d.ts.map +1 -1
  62. package/lib/error/ui/ErrorFallback.js +1 -1
  63. package/lib/error/ui/ErrorFallback.js.map +1 -1
  64. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -1
  65. package/lib/pedagogy/ui/ReferenceSectionBlock.js +2 -1
  66. package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -1
  67. package/lib/seo/core/pageMeta.d.ts +2 -2
  68. package/lib/seo/core/pageMeta.d.ts.map +1 -1
  69. package/lib/seo/core/siteFiles.d.ts +3 -3
  70. package/lib/seo/core/siteFiles.d.ts.map +1 -1
  71. package/lib/seo/core/siteFiles.js.map +1 -1
  72. package/lib/seo/vite/ogCard.d.ts +9 -2
  73. package/lib/seo/vite/ogCard.d.ts.map +1 -1
  74. package/lib/seo/vite/ogCard.js +6 -1
  75. package/lib/seo/vite/ogCard.js.map +1 -1
  76. package/lib/seo/vite/prerender.d.ts +2 -2
  77. package/lib/seo/vite/prerender.d.ts.map +1 -1
  78. package/package.json +1 -1
  79. package/src/about/core/about.ts +3 -3
  80. package/src/build/vite/gitHead.ts +17 -2
  81. package/src/chrome/ui/SiteHeader.tsx +28 -6
  82. package/src/clipboard/ui/ClickToCopy.tsx +190 -0
  83. package/src/clipboard/ui/CopyButton.tsx +2 -2
  84. package/src/clipboard/ui/CopyableValue.tsx +11 -6
  85. package/src/clipboard/ui/index.ts +2 -0
  86. package/src/ecosystem/core/groups.ts +10 -3
  87. package/src/ecosystem/core/index.ts +1 -0
  88. package/src/ecosystem/core/lookup.ts +2 -2
  89. package/src/ecosystem/core/nameColors.ts +2 -2
  90. package/src/ecosystem/core/sites.ts +42 -2
  91. package/src/ecosystem/core/tokens.ts +10 -9
  92. package/src/ecosystem/core/types.ts +23 -10
  93. package/src/ecosystem/ui/SiteTheme.tsx +19 -4
  94. package/src/ecosystem/ui/Wordmark.tsx +2 -2
  95. package/src/ecosystem/ui/glyphs.tsx +51 -0
  96. package/src/ecosystem/ui/marks.tsx +23 -5
  97. package/src/error/ui/ErrorFallback.tsx +3 -1
  98. package/src/pedagogy/ui/ReferenceSectionBlock.tsx +10 -1
  99. package/src/seo/core/noscript.ts +1 -1
  100. package/src/seo/core/pageMeta.ts +2 -2
  101. package/src/seo/core/siteFiles.ts +3 -3
  102. package/src/seo/vite/ogCard.ts +16 -3
  103. package/src/seo/vite/prerender.ts +2 -2
  104. package/styles/chrome.css +163 -0
package/README.md CHANGED
@@ -71,7 +71,7 @@ through a wildcard subpath exactly as `react-science` serves its own.
71
71
  | **Routing & head** | `createTabRouter`, `readRoute`, `writeRoute`, `subscribeToRoute`, `adoptLegacyHashAddress`, `writeDocumentMeta` | `useTabRoute` |
72
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
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` |
74
+ | **Clipboard & files** | `writeToClipboard`, `downloadBlob`, `downloadText`, `sanitizeFileName`, `toDelimited`, `readDelimited`, `downloadFigure`, `figureSvg`, `figurePng`, `figureSize` | `ClickToCopy`, `CopyButton`, `CopyableValue`, `CodeBlock`, `DelimitedTextDialog`, `FigureDownload` |
75
75
  | **Formatting & colour** | `formatInteger`, `formatDecimal`, `formatBytes`, `pluralize`, `readableInk`, `contrastRatio`, `COLOR_SCALES`, `resolveColorScale`, `formatColorScale`, `colorAt`, `swatchAt`, `sampleScale`, `colorScaleGradient`, `rgbToHsv` | `ColorScaleLegend`, `ColorScaleSelect`, `ColorScaleEditor`, `ColorScaleBar` |
76
76
  | **Widgets** | `CREDITS`, `credits` | `ErrorBoundary`, `CollapsibleSection`, `CapsuleFilter`, `HelpTooltip`, `CreditsList` |
77
77
  | **Hooks & state** | `createWorkerChannel`, `persistBucket`, `persistSignalBucket` | `useDebouncedValue`, `useContainerSize`, `useListKeyboardNavigation`, `useDisclosure` |
@@ -1,7 +1,7 @@
1
1
  import type { BuildInfo } from '../../build/core/buildInfo.ts';
2
2
  import type { CitedWork } from '../../citation/core/works.ts';
3
3
  import type { CreditEntry, CreditId } from '../../credits/core/credits.ts';
4
- import type { EcosystemSite, SiteId } from '../../ecosystem/core/sites.ts';
4
+ import type { SiteId, SiteRecord } from '../../ecosystem/core/sites.ts';
5
5
  import type { ProviderEntry, ProviderId } from './providers.ts';
6
6
  /**
7
7
  * What a site says about itself: the one page a visitor opens to find out what
@@ -18,7 +18,7 @@ export interface AboutContent {
18
18
  * is deliberately not listed in the family's Tools menu and therefore not in
19
19
  * `ECOSYSTEM_SITES`.
20
20
  */
21
- siteId: SiteId | EcosystemSite;
21
+ siteId: SiteId | SiteRecord;
22
22
  /** One sentence: what this tool is. */
23
23
  what: string;
24
24
  /**
@@ -94,7 +94,7 @@ export interface AboutPerson {
94
94
  */
95
95
  export interface ResolvedAbout {
96
96
  /** The site's own record, which carries its name, tagline and colours. */
97
- site: EcosystemSite;
97
+ site: SiteRecord;
98
98
  what: string;
99
99
  /** The context paragraphs, empty when the site writes none. */
100
100
  paragraphs: readonly string[];
@@ -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,+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;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;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,6EAA6E;IAC7E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA8BjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CA8C7D"}
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,MAAM,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGhE;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,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;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;OAIG;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,UAAU,CAAC;IACjB,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,6EAA6E;IAC7E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA8BjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CA8C7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"gitHead.d.ts","sourceRoot":"","sources":["../../../src/build/vite/gitHead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB5D"}
1
+ {"version":3,"file":"gitHead.d.ts","sourceRoot":"","sources":["../../../src/build/vite/gitHead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoB7D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB5D"}
@@ -27,10 +27,13 @@ export function readGitHead(start) {
27
27
  // itself and neither `refs` nor `packed-refs` is read at all.
28
28
  if (!head.startsWith('ref:'))
29
29
  return asCommit(head);
30
+ // A linked worktree keeps only its own `HEAD`: the branch it names lives in
31
+ // the repository's common directory, which `commondir` points to.
30
32
  const ref = head.slice('ref:'.length).trim();
31
- const loose = readText(join(gitDir, ref));
33
+ const commonDir = findCommonDir(gitDir);
34
+ const loose = readText(join(gitDir, ref)) ?? readText(join(commonDir, ref));
32
35
  return (asCommit(loose) ??
33
- commitInPackedRefs(readText(join(gitDir, 'packed-refs')), ref));
36
+ commitInPackedRefs(readText(join(commonDir, 'packed-refs')), ref));
34
37
  }
35
38
  /**
36
39
  * The commit named by the environment, for a build that cannot see `.git`.
@@ -65,6 +68,18 @@ export function findGitDir(start) {
65
68
  directory = parent;
66
69
  }
67
70
  }
71
+ /**
72
+ * The directory the refs of a repository live in: the `.git` directory itself,
73
+ * or for a linked worktree the one its `commondir` file names.
74
+ * @param gitDir - The `.git` directory `HEAD` was read from.
75
+ * @returns The absolute path of the common directory.
76
+ */
77
+ function findCommonDir(gitDir) {
78
+ const pointer = readText(join(gitDir, 'commondir'));
79
+ if (pointer === undefined || pointer === '')
80
+ return gitDir;
81
+ return isAbsolute(pointer) ? pointer : resolve(gitDir, pointer);
82
+ }
68
83
  /**
69
84
  * The hash a packed `refs` file gives a ref.
70
85
  * @param packed - The contents of `packed-refs`, when there is one.
@@ -1 +1 @@
1
- {"version":3,"file":"gitHead.js","sourceRoot":"","sources":["../../../src/build/vite/gitHead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEzC,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CACL,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACnC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CACjC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjC,uEAAuE;QACvE,yEAAyE;QACzE,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAEtE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,MAA0B,EAC1B,GAAW;IAEX,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,0EAA0E;QAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG;YAAE,SAAS;QACnE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3B,OAAO,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,MAAM,GAAG,+BAA+B,CAAC"}
1
+ {"version":3,"file":"gitHead.js","sourceRoot":"","sources":["../../../src/build/vite/gitHead.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,25 @@
1
1
  import type { ReactElement, ReactNode } from 'react';
2
- import type { SiteId } from '../../ecosystem/core/sites.ts';
2
+ import type { SiteId, SiteRecord } from '../../ecosystem/core/sites.ts';
3
3
  import type { NavItem } from './navItem.ts';
4
4
  export interface SiteHeaderProps {
5
- /** The site the bar belongs to, which draws its mark and writes its name. */
6
- siteId: SiteId;
5
+ /**
6
+ * The site the bar belongs to, which draws its mark and writes its name. One
7
+ * of `site` and `siteId` is required.
8
+ * @default undefined
9
+ */
10
+ siteId?: SiteId;
11
+ /**
12
+ * The same site, passed rather than named — for a site that is deliberately
13
+ * not one of `ECOSYSTEM_SITES`, and so is linked from no other site's menu.
14
+ * @default undefined
15
+ */
16
+ site?: SiteRecord;
17
+ /**
18
+ * The site's own mark, for a site the shared glyph set does not hold. It
19
+ * stands where `SiteMark` would, at the size the site draws it.
20
+ * @default undefined — the family's mark for that site
21
+ */
22
+ mark?: ReactNode;
7
23
  /** The pages, in the order the bar lists them. */
8
24
  nav: readonly NavItem[];
9
25
  /**
@@ -75,6 +91,7 @@ export interface SiteHeaderProps {
75
91
  * @param props - The site, its pages, its utilities, and whether the page is
76
92
  * framed in another site.
77
93
  * @returns The bar, or nothing at all on an embedded page.
94
+ * @throws {Error} When neither `site` nor `siteId` is given.
78
95
  */
79
96
  export declare function SiteHeader(props: SiteHeaderProps): ReactElement | null;
80
97
  //# sourceMappingURL=SiteHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SiteHeader.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAM5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,GAAG,EAAE,SAAS,OAAO,EAAE,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAChE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAgEtE"}
1
+ {"version":3,"file":"SiteHeader.d.ts","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kDAAkD;IAClD,GAAG,EAAE,SAAS,OAAO,EAAE,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAChE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAqEtE"}
@@ -17,18 +17,22 @@ import { isModifiedClick } from "./navItem.js";
17
17
  * @param props - The site, its pages, its utilities, and whether the page is
18
18
  * framed in another site.
19
19
  * @returns The bar, or nothing at all on an embedded page.
20
+ * @throws {Error} When neither `site` nor `siteId` is given.
20
21
  */
21
22
  export function SiteHeader(props) {
22
- const { siteId, nav, activeId, actions, renderNavItem, embedded = false, homeHref = '/', onHome, markSize = 28, width = 'page', pagesLabel = 'Pages', } = props;
23
+ const { siteId, site: record, mark, nav, activeId, actions, renderNavItem, embedded = false, homeHref = '/', onHome, markSize = 28, width = 'page', pagesLabel = 'Pages', } = props;
23
24
  if (embedded)
24
25
  return null;
25
- const site = siteById(siteId);
26
+ const site = record ?? (siteId === undefined ? undefined : siteById(siteId));
27
+ if (site === undefined) {
28
+ throw new Error('SiteHeader needs one of its `site` and `siteId` props');
29
+ }
26
30
  return (_jsx("header", { className: "app-header no-print", children: _jsxs("div", { className: INNER_CLASS[width], children: [_jsxs("a", { className: "brand", href: homeHref, title: site.host, onClick: (event) => {
27
31
  if (onHome === undefined || isModifiedClick(event))
28
32
  return;
29
33
  event.preventDefault();
30
34
  onHome();
31
- }, children: [_jsx(SiteMark, { siteId: siteId, size: markSize }), _jsx(Wordmark, { siteId: siteId })] }), _jsx("nav", { className: "app-header-nav", children: nav.map((item) => (_jsx(Fragment, { children: renderNavItem === undefined ? (_jsx(NavLink, { item: item, active: item.id === activeId })) : (renderNavItem(item, item.id === activeId)) }, item.id))) }), nav.length > 1 ? (_jsx("div", { className: "app-header-nav-menu", children: _jsx(NavMenuButton, { label: pagesLabel, icon: "menu", compact: true, items: nav, activeId: activeId }) })) : null, _jsx("span", { className: "spacer" }), actions === undefined ? null : (_jsx("div", { className: "app-header-actions", children: actions }))] }) }));
35
+ }, children: [mark ?? _jsx(SiteMark, { site: site, size: markSize }), _jsx(Wordmark, { site: site })] }), _jsx("nav", { className: "app-header-nav", children: nav.map((item) => (_jsx(Fragment, { children: renderNavItem === undefined ? (_jsx(NavLink, { item: item, active: item.id === activeId })) : (renderNavItem(item, item.id === activeId)) }, item.id))) }), nav.length > 1 ? (_jsx("div", { className: "app-header-nav-menu", children: _jsx(NavMenuButton, { label: pagesLabel, icon: "menu", compact: true, items: nav, activeId: activeId }) })) : null, _jsx("span", { className: "spacer" }), actions === undefined ? null : (_jsx("div", { className: "app-header-actions", children: actions }))] }) }));
32
36
  }
33
37
  /** The two widths the bar's contents run at, as the classes that set them. */
34
38
  const INNER_CLASS = {
@@ -1 +1 @@
1
- {"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAiC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA8B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkE/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EACJ,MAAM,EACN,GAAG,EACH,QAAQ,EACR,OAAO,EACP,aAAa,EACb,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,GAAG,EACd,MAAM,EACN,QAAQ,GAAG,EAAE,EACb,KAAK,GAAG,MAAM,EACd,UAAU,GAAG,OAAO,GACrB,GAAG,KAAK,CAAC;IAEV,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO,CACL,iBAAQ,SAAS,EAAC,qBAAqB,YACrC,eAAK,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,aAChC,aACE,SAAS,EAAC,OAAO,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,IAAI,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC;4BAAE,OAAO;wBAC3D,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM,EAAE,CAAC;oBACX,CAAC,aAED,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAI,EAC5C,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,GAAI,IAC1B,EACJ,cAAK,SAAS,EAAC,gBAAgB,YAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,QAAQ,cACN,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,CAC7B,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,GAAI,CACtD,CAAC,CAAC,CAAC,CACF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAC1C,IALY,IAAI,CAAC,EAAE,CAMX,CACZ,CAAC,GACE,EACL,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,cAAK,SAAS,EAAC,qBAAqB,YAClC,KAAC,aAAa,IACZ,KAAK,EAAE,UAAU,EACjB,IAAI,EAAC,MAAM,EACX,OAAO,QACP,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,QAAQ,GAClB,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,QAAQ,GAAG,EAC1B,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9B,cAAK,SAAS,EAAC,oBAAoB,YAAE,OAAO,GAAO,CACpD,IACG,GACC,CACV,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,2CAA2C;CACzC,CAAC"}
1
+ {"version":3,"file":"SiteHeader.js","sourceRoot":"","sources":["../../../src/chrome/ui/SiteHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { CSSProperties, ReactElement, ReactNode } from 'react';
2
+ import type { ClipboardContent } from '../core/writeToClipboard.ts';
3
+ /** The elements a {@link ClickToCopy} can be, so a table cell is its own target. */
4
+ export type ClickToCopyElement = 'span' | 'code' | 'div' | 'td' | 'th';
5
+ /** What {@link ClickToCopy} copies, and how it reads. */
6
+ export interface ClickToCopyProps {
7
+ /**
8
+ * What goes on the clipboard: text, or text with its HTML rendering. A
9
+ * function is called only when the value is clicked.
10
+ */
11
+ value: ClipboardContent | (() => ClipboardContent);
12
+ /** What is shown; the pointer turns into the copy cursor over it. */
13
+ children: ReactNode;
14
+ /**
15
+ * What the value is, named in the hover title: `Copy the SMILES (C=CC=O)`.
16
+ * @default undefined — the title names only the value
17
+ */
18
+ label?: string;
19
+ /**
20
+ * Hover title, replacing the one built from `label` and the value.
21
+ * @default undefined
22
+ */
23
+ title?: string;
24
+ /**
25
+ * The element drawn. A `span` or a `code` sits in a line of text and shows
26
+ * its glyph past its right edge; a `div`, `td` or `th` keeps room for it
27
+ * inside. A `td` or `th` keeps its cell role, so a table stays a table to a
28
+ * screen reader. A list item or a paragraph holds a `span` or a `div`
29
+ * instead, so it stays a list item or a paragraph.
30
+ * @default 'span'
31
+ */
32
+ as?: ClickToCopyElement;
33
+ /**
34
+ * Whether the value is a tab stop and a button of its own, with its glyph.
35
+ * Off when a copy button beside it already copies the same value, so the
36
+ * keyboard and a screen reader meet one control, and the eye one glyph.
37
+ * @default true
38
+ */
39
+ focusable?: boolean;
40
+ /**
41
+ * Whether there is nothing to copy: the children are drawn as plain content.
42
+ * @default false
43
+ */
44
+ disabled?: boolean;
45
+ /**
46
+ * Class the element carries, in addition to `click-to-copy`.
47
+ * @default undefined
48
+ */
49
+ className?: string;
50
+ /**
51
+ * Inline style of the element.
52
+ * @default undefined
53
+ */
54
+ style?: CSSProperties;
55
+ }
56
+ /**
57
+ * A value that is copied by clicking it.
58
+ *
59
+ * Text in a tool is not selectable — a drag across a viewer must not paint the
60
+ * page — so what is worth taking away is copied this way instead: the copy
61
+ * cursor, a tint and a clipboard glyph announce it on hover, a click or `Enter`
62
+ * puts it on the clipboard, and a tick confirms it. The click stops there, so
63
+ * a value inside a clickable row copies without also opening the row, and a
64
+ * link or a button nested in the value keeps its own click.
65
+ * @param props - See {@link ClickToCopyProps}.
66
+ * @returns The copyable value.
67
+ */
68
+ export declare function ClickToCopy(props: ClickToCopyProps): ReactElement;
69
+ //# sourceMappingURL=ClickToCopy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickToCopy.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/ClickToCopy.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAGb,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAKpE,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvE,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,CAAC,CAAC;IACnD,qEAAqE;IACrE,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAwEjE"}
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Icon } from '@blueprintjs/core';
3
+ import { onActivateKey } from "../../hooks/ui/activationKey.js";
4
+ import { joinClassNames } from "../../shared/ui/joinClassNames.js";
5
+ import { writeToClipboard } from "../core/writeToClipboard.js";
6
+ import { useCopyToClipboard } from "./useCopyToClipboard.js";
7
+ /** Past this length the value is left out of the title: a molfile is no tooltip. */
8
+ const TITLE_VALUE_MAX = 120;
9
+ const INLINE = new Set(['span', 'code']);
10
+ const CELLS = new Set(['td', 'th']);
11
+ /** A control inside the value acts on its own click, which copies nothing. */
12
+ const NESTED_CONTROL = 'a[href], button, input, select, textarea, summary, label, [role="button"], [role="link"], [role="checkbox"], [role="switch"], [role="tab"], [role="menuitem"]';
13
+ /**
14
+ * A value that is copied by clicking it.
15
+ *
16
+ * Text in a tool is not selectable — a drag across a viewer must not paint the
17
+ * page — so what is worth taking away is copied this way instead: the copy
18
+ * cursor, a tint and a clipboard glyph announce it on hover, a click or `Enter`
19
+ * puts it on the clipboard, and a tick confirms it. The click stops there, so
20
+ * a value inside a clickable row copies without also opening the row, and a
21
+ * link or a button nested in the value keeps its own click.
22
+ * @param props - See {@link ClickToCopyProps}.
23
+ * @returns The copyable value.
24
+ */
25
+ export function ClickToCopy(props) {
26
+ const { value, children, label, title, as: Element = 'span', focusable = true, disabled = false, className, style, } = props;
27
+ const { copied, failed, copy } = useCopyToClipboard();
28
+ if (disabled) {
29
+ return (_jsx(Element, { className: className, style: style, children: children }));
30
+ }
31
+ function activate(event) {
32
+ if (isOnNestedControl(event))
33
+ return;
34
+ event.stopPropagation();
35
+ void copy(typeof value === 'function' ? () => writeToClipboard(value()) : value);
36
+ }
37
+ const outcome = copied ? 'copied' : failed ? 'failed' : undefined;
38
+ return (_jsxs(Element, { className: joinClassNames('click-to-copy', INLINE.has(Element) ? 'click-to-copy--inline' : 'click-to-copy--block', className), style: style, role: focusable && !CELLS.has(Element) ? 'button' : undefined, tabIndex: focusable ? 0 : undefined, title: title ?? copyTitle(value, label), "data-copy": outcome, onClick: activate, onKeyDown: onActivateKey(activate), children: [children, focusable ? (_jsx(Icon, { className: "click-to-copy__icon", icon: outcome === 'copied'
39
+ ? 'tick'
40
+ : outcome === 'failed'
41
+ ? 'cross'
42
+ : 'clipboard', size: 16 })) : null, _jsx("span", { className: "click-to-copy__status", role: "status", children: outcome === 'copied'
43
+ ? 'Copied'
44
+ : outcome === 'failed'
45
+ ? 'Copy failed'
46
+ : null })] }));
47
+ }
48
+ function isOnNestedControl(event) {
49
+ const { target, currentTarget } = event;
50
+ if (!(target instanceof Element) || target === currentTarget)
51
+ return false;
52
+ const control = target.closest(NESTED_CONTROL);
53
+ return (control !== null &&
54
+ control !== currentTarget &&
55
+ currentTarget.contains(control));
56
+ }
57
+ function copyTitle(value, label) {
58
+ const what = label === undefined ? 'Copy' : `Copy the ${label}`;
59
+ if (typeof value === 'function')
60
+ return what;
61
+ const text = typeof value === 'string' ? value : value.text;
62
+ if (text === '' || text.length > TITLE_VALUE_MAX)
63
+ return what;
64
+ return label === undefined ? `Copy ${text}` : `${what} (${text})`;
65
+ }
66
+ //# sourceMappingURL=ClickToCopy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickToCopy.js","sourceRoot":"","sources":["../../../src/clipboard/ui/ClickToCopy.tsx"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export interface CopyButtonProps {
37
37
  small?: boolean;
38
38
  /**
39
39
  * Glyph shown at rest. A tick replaces it while the copy is confirmed.
40
- * @default 'duplicate'
40
+ * @default 'clipboard'
41
41
  */
42
42
  icon?: IconName;
43
43
  /**
@@ -8,7 +8,7 @@ import { DEFAULT_COPY_RESET_AFTER, useCopyToClipboard, } from "./useCopyToClipbo
8
8
  * @returns The copy button.
9
9
  */
10
10
  export function CopyButton(props) {
11
- const { content, label, copiedLabel = 'Copied', failedLabel = 'Copy failed', minimal = false, small = false, icon = 'duplicate', disabled = false, resetAfter = DEFAULT_COPY_RESET_AFTER, title = 'Copy to clipboard', className, } = props;
11
+ const { content, label, copiedLabel = 'Copied', failedLabel = 'Copy failed', minimal = false, small = false, icon = 'clipboard', disabled = false, resetAfter = DEFAULT_COPY_RESET_AFTER, title = 'Copy to clipboard', className, } = props;
12
12
  const { copied, failed, copy } = useCopyToClipboard(resetAfter);
13
13
  const look = buttonLook({
14
14
  copied,
@@ -41,9 +41,9 @@ export interface CopyableValueProps {
41
41
  * One read-only value, named, with the button that copies it.
42
42
  *
43
43
  * A derived notation — a SMILES, an InChIKey, an accession — is only useful
44
- * somewhere else, so it is shown with the single click that puts it on the
45
- * clipboard, and selecting the value by hand takes all of it at once. An empty
46
- * value reads as the missing marker and offers nothing to copy.
44
+ * somewhere else, so a click on the value or on its button puts it on the
45
+ * clipboard. An empty value reads as the missing marker and offers nothing to
46
+ * copy.
47
47
  * @param props - See {@link CopyableValueProps}.
48
48
  * @returns The labelled value and its copy button.
49
49
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableValue.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/CopyableValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASpE,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CA8CrE"}
1
+ {"version":3,"file":"CopyableValue.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/CopyableValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUpE,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAmDrE"}
@@ -1,15 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { MISSING_VALUE } from "../../format/core/missing.js";
3
3
  import { TOKEN } from "../../tokens/core/familyTokens.js";
4
+ import { ClickToCopy } from "./ClickToCopy.js";
4
5
  import { CopyButton } from "./CopyButton.js";
5
6
  const DEFAULT_BLOCK_HEIGHT = 160;
6
7
  /**
7
8
  * One read-only value, named, with the button that copies it.
8
9
  *
9
10
  * A derived notation — a SMILES, an InChIKey, an accession — is only useful
10
- * somewhere else, so it is shown with the single click that puts it on the
11
- * clipboard, and selecting the value by hand takes all of it at once. An empty
12
- * value reads as the missing marker and offers nothing to copy.
11
+ * somewhere else, so a click on the value or on its button puts it on the
12
+ * clipboard. An empty value reads as the missing marker and offers nothing to
13
+ * copy.
13
14
  * @param props - See {@link CopyableValueProps}.
14
15
  * @returns The labelled value and its copy button.
15
16
  */
@@ -18,7 +19,7 @@ export function CopyableValue(props) {
18
19
  const isEmpty = value === '';
19
20
  return (_jsxs("div", { className: className === undefined
20
21
  ? 'copyable-value'
21
- : `copyable-value ${className}`, children: [_jsxs("div", { style: HEADER_STYLE, children: [_jsx("span", { className: "copyable-value__label", style: hint === undefined ? LABEL_STYLE : HINTED_LABEL_STYLE, title: hint, children: label }), _jsx(CopyButton, { content: value, title: copyTitle, disabled: isEmpty, minimal: true, small: true })] }), _jsx("code", { className: "copyable-value__value", style: block ? { ...BLOCK_VALUE_STYLE, maxHeight } : VALUE_STYLE, children: isEmpty ? MISSING_VALUE : value }), children] }));
22
+ : `copyable-value ${className}`, children: [_jsxs("div", { style: HEADER_STYLE, children: [_jsx("span", { className: "copyable-value__label", style: hint === undefined ? LABEL_STYLE : HINTED_LABEL_STYLE, title: hint, children: label }), _jsx(CopyButton, { content: value, title: copyTitle, disabled: isEmpty, minimal: true, small: true })] }), _jsx(ClickToCopy, { as: "code", value: value, label: label, focusable: false, disabled: isEmpty, className: "copyable-value__value", style: block ? { ...BLOCK_VALUE_STYLE, maxHeight } : VALUE_STYLE, children: isEmpty ? MISSING_VALUE : value }), children] }));
22
23
  }
23
24
  const HEADER_STYLE = {
24
25
  display: 'flex',
@@ -40,7 +41,6 @@ const VALUE_STYLE = {
40
41
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
41
42
  fontSize: 12,
42
43
  overflowWrap: 'anywhere',
43
- userSelect: 'all',
44
44
  };
45
45
  const BLOCK_VALUE_STYLE = {
46
46
  ...VALUE_STYLE,
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableValue.js","sourceRoot":"","sources":["../../../src/clipboard/ui/CopyableValue.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAyCjC;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,oBAAoB,EAChC,SAAS,GAAG,YAAY,KAAK,EAAE,EAC/B,QAAQ,EACR,SAAS,GACV,GAAG,KAAK,CAAC;IACV,MAAM,OAAO,GAAG,KAAK,KAAK,EAAE,CAAC;IAE7B,OAAO,CACL,eACE,SAAS,EACP,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,kBAAkB,SAAS,EAAE,aAGnC,eAAK,KAAK,EAAE,YAAY,aACtB,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAC5D,KAAK,EAAE,IAAI,YAEV,KAAK,GACD,EACP,KAAC,UAAU,IACT,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,QACP,KAAK,SACL,IACE,EACN,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,YAE/D,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAC3B,EACN,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,eAAe;IAC/B,GAAG,EAAE,CAAC;CAC0B,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,KAAK,CAAC,SAAS;IACtB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;CACiB,CAAC;AAEnC,MAAM,kBAAkB,GAAG;IACzB,GAAG,WAAW;IACd,MAAM,EAAE,MAAM;CACkB,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,gDAAgD;IAC5D,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,KAAK;CACe,CAAC;AAEnC,MAAM,iBAAiB,GAAG;IACxB,GAAG,WAAW;IACd,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,QAAQ;IACtB,QAAQ,EAAE,MAAM;CACgB,CAAC"}
1
+ {"version":3,"file":"CopyableValue.js","sourceRoot":"","sources":["../../../src/clipboard/ui/CopyableValue.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAyCjC;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,oBAAoB,EAChC,SAAS,GAAG,YAAY,KAAK,EAAE,EAC/B,QAAQ,EACR,SAAS,GACV,GAAG,KAAK,CAAC;IACV,MAAM,OAAO,GAAG,KAAK,KAAK,EAAE,CAAC;IAE7B,OAAO,CACL,eACE,SAAS,EACP,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,kBAAkB,SAAS,EAAE,aAGnC,eAAK,KAAK,EAAE,YAAY,aACtB,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,EAC5D,KAAK,EAAE,IAAI,YAEV,KAAK,GACD,EACP,KAAC,UAAU,IACT,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,QACP,KAAK,SACL,IACE,EACN,KAAC,WAAW,IACV,EAAE,EAAC,MAAM,EACT,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,KAAK,EAChB,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,YAE/D,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GACpB,EACb,QAAQ,IACL,CACP,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,cAAc,EAAE,eAAe;IAC/B,GAAG,EAAE,CAAC;CAC0B,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,KAAK,CAAC,SAAS;IACtB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;CACiB,CAAC;AAEnC,MAAM,kBAAkB,GAAG;IACzB,GAAG,WAAW;IACd,MAAM,EAAE,MAAM;CACkB,CAAC;AAEnC,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,gDAAgD;IAC5D,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,UAAU;CACQ,CAAC;AAEnC,MAAM,iBAAiB,GAAG;IACxB,GAAG,WAAW;IACd,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,QAAQ;IACtB,QAAQ,EAAE,MAAM;CACgB,CAAC"}
@@ -1,3 +1,5 @@
1
+ export type { ClickToCopyElement, ClickToCopyProps } from './ClickToCopy.tsx';
2
+ export { ClickToCopy } from './ClickToCopy.tsx';
1
3
  export type { CodeBlockProps, CodeBlockTone } from './CodeBlock.tsx';
2
4
  export { CodeBlock } from './CodeBlock.tsx';
3
5
  export type { CopyableValueProps } from './CopyableValue.tsx';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clipboard/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { ClickToCopy } from "./ClickToCopy.js";
1
2
  export { CodeBlock } from "./CodeBlock.js";
2
3
  export { CopyableValue } from "./CopyableValue.js";
3
4
  export { CopyButton } from "./CopyButton.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clipboard/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clipboard/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAC;AAE9C,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC"}
@@ -4,11 +4,12 @@
4
4
  * A single grid of tiles tells a visitor nothing about which of them is for
5
5
  * a first-year student and which is for a research project. The groups are the
6
6
  * answer, and they read as a progression: the chemistry a course opens with,
7
- * then the molecule itself, then what was measured of it, then the work only a
8
- * project needs — and last the three tools that are not chemistry at all.
7
+ * the exercises that practise it, then the molecule itself, then what was
8
+ * measured of it, then the work only a project needs — and last the tools that
9
+ * are not chemistry at all.
9
10
  */
10
11
  /** The topics, in the order they are written. */
11
- export type SiteGroupId = 'basics' | 'structures' | 'spectra' | 'research' | 'computing';
12
+ export type SiteGroupId = 'basics' | 'practice' | 'structures' | 'spectra' | 'research' | 'computing';
12
13
  /** One topic the family's tools are gathered under. */
13
14
  export interface SiteGroup {
14
15
  /** The identifier a site names in its `group`. */
@@ -1 +1 @@
1
- {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iDAAiD;AACjD,MAAM,MAAM,WAAW,GACrB,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAEjE,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,EAAE,EAAE,WAAW,CAAC;IAChB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EA0B3C,CAAC"}
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,iDAAiD;AACjD,MAAM,MAAM,WAAW,GACrB,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAE9E,uDAAuD;AACvD,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,EAAE,EAAE,WAAW,CAAC;IAChB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAgC3C,CAAC"}
@@ -4,8 +4,9 @@
4
4
  * A single grid of tiles tells a visitor nothing about which of them is for
5
5
  * a first-year student and which is for a research project. The groups are the
6
6
  * answer, and they read as a progression: the chemistry a course opens with,
7
- * then the molecule itself, then what was measured of it, then the work only a
8
- * project needs — and last the three tools that are not chemistry at all.
7
+ * the exercises that practise it, then the molecule itself, then what was
8
+ * measured of it, then the work only a project needs — and last the tools that
9
+ * are not chemistry at all.
9
10
  */
10
11
  /**
11
12
  * Every topic, in the order a menu and a footer write them. A site names one of
@@ -18,6 +19,11 @@ export const SITE_GROUPS = [
18
19
  label: 'Chemistry basics',
19
20
  blurb: 'Where a course starts, and what you go back to.',
20
21
  },
22
+ {
23
+ id: 'practice',
24
+ label: 'Practice',
25
+ blurb: 'Where a first course is worked through, one graded series at a time.',
26
+ },
21
27
  {
22
28
  id: 'structures',
23
29
  label: 'Structures & notation',
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/ecosystem/core/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,iDAAiD;KACzD;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,iEAAiE;KACzE;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,kEAAkE;KAC1E;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,iEAAiE;KACzE;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,sBAAsB;QAC7B,KAAK,EAAE,6DAA6D;KACrE;CACF,CAAC"}
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/ecosystem/core/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,kBAAkB;QACzB,KAAK,EAAE,iDAAiD;KACzD;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,KAAK,EACH,sEAAsE;KACzE;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,uBAAuB;QAC9B,KAAK,EAAE,iEAAiE;KACzE;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,kEAAkE;KAC1E;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,iEAAiE;KACzE;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,sBAAsB;QAC7B,KAAK,EAAE,6DAA6D;KACrE;CACF,CAAC"}
@@ -4,7 +4,7 @@ export type { GroupedSites } from './lookup.ts';
4
4
  export { findSiteByHost, groupedSites, siteById, siteDisplayName, } from './lookup.ts';
5
5
  export type { SiteNameColors, SiteNameColorsOptions } from './nameColors.ts';
6
6
  export { siteNameColors } from './nameColors.ts';
7
- export type { EcosystemSite, SiteId, SiteMarkColors, SiteName, } from './sites.ts';
7
+ export type { EcosystemSite, SiteId, SiteMarkColors, SiteName, SiteRecord, } from './sites.ts';
8
8
  export { ECOSYSTEM_SITES, siteUrl } from './sites.ts';
9
9
  export { siteTokensCss } from './tokens.ts';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,aAAa,EACb,MAAM,EACN,cAAc,EACd,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecosystem/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { SiteGroup, SiteGroupId } from './groups.ts';
2
- import type { EcosystemSite, SiteId } from './sites.ts';
2
+ import type { EcosystemSite, SiteId, SiteRecord } from './sites.ts';
3
3
  /** One topic and the sites written under it. */
4
4
  export interface GroupedSites {
5
5
  /** The topic. */
@@ -37,7 +37,7 @@ export declare function siteById(id: SiteId): EcosystemSite;
37
37
  * @param site - The site being named.
38
38
  * @returns What the site is called, in one string.
39
39
  */
40
- export declare function siteDisplayName(site: EcosystemSite): string;
40
+ export declare function siteDisplayName(site: SiteRecord): string;
41
41
  /**
42
42
  * The site a page is being served from, so a header can mark itself as the
43
43
  * current one without being told which site it belongs to.
@@ -1 +1 @@
1
- {"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGxD,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAO7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,aAAa,EAAE,CAM7D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,CAKlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAI3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAQtE"}
1
+ {"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGpE,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAO7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,aAAa,EAAE,CAM7D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,CAKlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAIxD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAQtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/ecosystem/core/lookup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU7C;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAe;IAC1C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAmB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI;QAC3B,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/ecosystem/core/lookup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAU7C;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAe;IAC1C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI;QAC3B,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,OAAO,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { EcosystemSite } from './types.ts';
1
+ import type { SiteRecord } from './types.ts';
2
2
  /** The colour each half of a site's name is written in. */
3
3
  export interface SiteNameColors {
4
4
  /** The first half of the name. */
@@ -29,5 +29,5 @@ export interface SiteNameColorsOptions {
29
29
  * @param options - Whether the family's colours are read from the page.
30
30
  * @returns The colour of each half, and of the dot between them.
31
31
  */
32
- export declare function siteNameColors(site: EcosystemSite, options?: SiteNameColorsOptions): SiteNameColors;
32
+ export declare function siteNameColors(site: SiteRecord, options?: SiteNameColorsOptions): SiteNameColors;
33
33
  //# sourceMappingURL=nameColors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nameColors.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/nameColors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAUhB"}
1
+ {"version":3,"file":"nameColors.d.ts","sourceRoot":"","sources":["../../../src/ecosystem/core/nameColors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAUhB"}