@curvenote/theme-ui 1.0.1

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 (250) hide show
  1. package/dist/components/index.d.ts +4 -0
  2. package/dist/components/index.d.ts.map +1 -0
  3. package/dist/components/index.js +3 -0
  4. package/dist/components/layout/app-layout.d.ts +8 -0
  5. package/dist/components/layout/app-layout.d.ts.map +1 -0
  6. package/dist/components/layout/app-layout.js +24 -0
  7. package/dist/components/layout/app-sidebar.d.ts +2 -0
  8. package/dist/components/layout/app-sidebar.d.ts.map +1 -0
  9. package/dist/components/layout/app-sidebar.js +125 -0
  10. package/dist/components/layout/article-layout.d.ts +8 -0
  11. package/dist/components/layout/article-layout.d.ts.map +1 -0
  12. package/dist/components/layout/article-layout.js +20 -0
  13. package/dist/components/layout/grid.d.ts +2 -0
  14. package/dist/components/layout/grid.d.ts.map +1 -0
  15. package/dist/components/layout/grid.js +4 -0
  16. package/dist/components/layout/header.d.ts +5 -0
  17. package/dist/components/layout/header.d.ts.map +1 -0
  18. package/dist/components/layout/header.js +5 -0
  19. package/dist/components/layout/index.d.ts +7 -0
  20. package/dist/components/layout/index.d.ts.map +1 -0
  21. package/dist/components/layout/index.js +7 -0
  22. package/dist/components/layout/loading-bar.d.ts +12 -0
  23. package/dist/components/layout/loading-bar.d.ts.map +1 -0
  24. package/dist/components/layout/loading-bar.js +53 -0
  25. package/dist/components/layout/site-header.d.ts +8 -0
  26. package/dist/components/layout/site-header.d.ts.map +1 -0
  27. package/dist/components/layout/site-header.js +55 -0
  28. package/dist/components/layout/types.d.ts +6 -0
  29. package/dist/components/layout/types.d.ts.map +1 -0
  30. package/dist/components/layout/types.js +1 -0
  31. package/dist/components/providers/compute.d.ts +5 -0
  32. package/dist/components/providers/compute.d.ts.map +1 -0
  33. package/dist/components/providers/compute.js +6 -0
  34. package/dist/components/providers/connect.d.ts +24 -0
  35. package/dist/components/providers/connect.d.ts.map +1 -0
  36. package/dist/components/providers/connect.js +208 -0
  37. package/dist/components/providers/curvenote-providers.d.ts +52 -0
  38. package/dist/components/providers/curvenote-providers.d.ts.map +1 -0
  39. package/dist/components/providers/curvenote-providers.js +199 -0
  40. package/dist/components/providers/design.d.ts +39 -0
  41. package/dist/components/providers/design.d.ts.map +1 -0
  42. package/dist/components/providers/design.js +50 -0
  43. package/dist/components/providers/index.d.ts +10 -0
  44. package/dist/components/providers/index.d.ts.map +1 -0
  45. package/dist/components/providers/index.js +12 -0
  46. package/dist/components/providers/lightbox-provider.d.ts +31 -0
  47. package/dist/components/providers/lightbox-provider.d.ts.map +1 -0
  48. package/dist/components/providers/lightbox-provider.js +109 -0
  49. package/dist/components/providers/myst-providers.d.ts +6 -0
  50. package/dist/components/providers/myst-providers.d.ts.map +1 -0
  51. package/dist/components/providers/myst-providers.js +29 -0
  52. package/dist/components/providers/page-providers.d.ts +15 -0
  53. package/dist/components/providers/page-providers.d.ts.map +1 -0
  54. package/dist/components/providers/page-providers.js +28 -0
  55. package/dist/components/providers/ping-boundary.d.ts +40 -0
  56. package/dist/components/providers/ping-boundary.d.ts.map +1 -0
  57. package/dist/components/providers/ping-boundary.js +115 -0
  58. package/dist/components/providers/platform-providers.d.ts +18 -0
  59. package/dist/components/providers/platform-providers.d.ts.map +1 -0
  60. package/dist/components/providers/platform-providers.js +29 -0
  61. package/dist/components/providers/types.d.ts +30 -0
  62. package/dist/components/providers/types.d.ts.map +1 -0
  63. package/dist/components/providers/types.js +1 -0
  64. package/dist/components/ui/Callout.d.ts +10 -0
  65. package/dist/components/ui/Callout.d.ts.map +1 -0
  66. package/dist/components/ui/Callout.js +7 -0
  67. package/dist/components/ui/PageCards.d.ts +2 -0
  68. package/dist/components/ui/PageCards.d.ts.map +1 -0
  69. package/dist/components/ui/PageCards.js +11 -0
  70. package/dist/components/ui/abbreviations.d.ts +5 -0
  71. package/dist/components/ui/abbreviations.d.ts.map +1 -0
  72. package/dist/components/ui/abbreviations.js +31 -0
  73. package/dist/components/ui/abstract.d.ts +8 -0
  74. package/dist/components/ui/abstract.d.ts.map +1 -0
  75. package/dist/components/ui/abstract.js +9 -0
  76. package/dist/components/ui/accessibility-skip-to.d.ts +15 -0
  77. package/dist/components/ui/accessibility-skip-to.d.ts.map +1 -0
  78. package/dist/components/ui/accessibility-skip-to.js +31 -0
  79. package/dist/components/ui/acknowledgements.d.ts +4 -0
  80. package/dist/components/ui/acknowledgements.d.ts.map +1 -0
  81. package/dist/components/ui/acknowledgements.js +20 -0
  82. package/dist/components/ui/article-actions-downloads.d.ts +26 -0
  83. package/dist/components/ui/article-actions-downloads.d.ts.map +1 -0
  84. package/dist/components/ui/article-actions-downloads.js +143 -0
  85. package/dist/components/ui/article-actions-dropdown.d.ts +5 -0
  86. package/dist/components/ui/article-actions-dropdown.d.ts.map +1 -0
  87. package/dist/components/ui/article-actions-dropdown.js +68 -0
  88. package/dist/components/ui/article-actions-share.d.ts +5 -0
  89. package/dist/components/ui/article-actions-share.d.ts.map +1 -0
  90. package/dist/components/ui/article-actions-share.js +52 -0
  91. package/dist/components/ui/article-actions.d.ts +2 -0
  92. package/dist/components/ui/article-actions.d.ts.map +1 -0
  93. package/dist/components/ui/article-actions.js +20 -0
  94. package/dist/components/ui/article-bar.d.ts +8 -0
  95. package/dist/components/ui/article-bar.d.ts.map +1 -0
  96. package/dist/components/ui/article-bar.js +32 -0
  97. package/dist/components/ui/article-card.d.ts +12 -0
  98. package/dist/components/ui/article-card.d.ts.map +1 -0
  99. package/dist/components/ui/article-card.js +22 -0
  100. package/dist/components/ui/article-footer.d.ts +2 -0
  101. package/dist/components/ui/article-footer.d.ts.map +1 -0
  102. package/dist/components/ui/article-footer.js +7 -0
  103. package/dist/components/ui/author-popover.d.ts +7 -0
  104. package/dist/components/ui/author-popover.d.ts.map +1 -0
  105. package/dist/components/ui/author-popover.js +36 -0
  106. package/dist/components/ui/backmatter.d.ts +9 -0
  107. package/dist/components/ui/backmatter.d.ts.map +1 -0
  108. package/dist/components/ui/backmatter.js +49 -0
  109. package/dist/components/ui/badge.d.ts +10 -0
  110. package/dist/components/ui/badge.d.ts.map +1 -0
  111. package/dist/components/ui/badge.js +23 -0
  112. package/dist/components/ui/banner.d.ts +7 -0
  113. package/dist/components/ui/banner.d.ts.map +1 -0
  114. package/dist/components/ui/banner.js +44 -0
  115. package/dist/components/ui/bibliography.d.ts +6 -0
  116. package/dist/components/ui/bibliography.d.ts.map +1 -0
  117. package/dist/components/ui/bibliography.js +20 -0
  118. package/dist/components/ui/breadcrumb.d.ts +12 -0
  119. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  120. package/dist/components/ui/breadcrumb.js +28 -0
  121. package/dist/components/ui/button.d.ts +11 -0
  122. package/dist/components/ui/button.d.ts.map +1 -0
  123. package/dist/components/ui/button.js +33 -0
  124. package/dist/components/ui/citation.d.ts +7 -0
  125. package/dist/components/ui/citation.d.ts.map +1 -0
  126. package/dist/components/ui/citation.js +99 -0
  127. package/dist/components/ui/collapsible.d.ts +6 -0
  128. package/dist/components/ui/collapsible.d.ts.map +1 -0
  129. package/dist/components/ui/collapsible.js +12 -0
  130. package/dist/components/ui/cookie-banner.d.ts +8 -0
  131. package/dist/components/ui/cookie-banner.d.ts.map +1 -0
  132. package/dist/components/ui/cookie-banner.js +31 -0
  133. package/dist/components/ui/data-availability.d.ts +4 -0
  134. package/dist/components/ui/data-availability.d.ts.map +1 -0
  135. package/dist/components/ui/data-availability.js +20 -0
  136. package/dist/components/ui/dialog.d.ts +16 -0
  137. package/dist/components/ui/dialog.d.ts.map +1 -0
  138. package/dist/components/ui/dialog.js +36 -0
  139. package/dist/components/ui/document-outline.d.ts +8 -0
  140. package/dist/components/ui/document-outline.d.ts.map +1 -0
  141. package/dist/components/ui/document-outline.js +168 -0
  142. package/dist/components/ui/dropdown-menu.d.ts +26 -0
  143. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  144. package/dist/components/ui/dropdown-menu.js +51 -0
  145. package/dist/components/ui/error-page.d.ts +9 -0
  146. package/dist/components/ui/error-page.d.ts.map +1 -0
  147. package/dist/components/ui/error-page.js +21 -0
  148. package/dist/components/ui/footer-links.d.ts +14 -0
  149. package/dist/components/ui/footer-links.d.ts.map +1 -0
  150. package/dist/components/ui/footer-links.js +18 -0
  151. package/dist/components/ui/footnotes.d.ts +4 -0
  152. package/dist/components/ui/footnotes.d.ts.map +1 -0
  153. package/dist/components/ui/footnotes.js +30 -0
  154. package/dist/components/ui/frontmatter-badges.d.ts +27 -0
  155. package/dist/components/ui/frontmatter-badges.d.ts.map +1 -0
  156. package/dist/components/ui/frontmatter-badges.js +60 -0
  157. package/dist/components/ui/frontmatter.d.ts +7 -0
  158. package/dist/components/ui/frontmatter.d.ts.map +1 -0
  159. package/dist/components/ui/frontmatter.js +6 -0
  160. package/dist/components/ui/image.d.ts +34 -0
  161. package/dist/components/ui/image.d.ts.map +1 -0
  162. package/dist/components/ui/image.js +83 -0
  163. package/dist/components/ui/index.d.ts +50 -0
  164. package/dist/components/ui/index.d.ts.map +1 -0
  165. package/dist/components/ui/index.js +56 -0
  166. package/dist/components/ui/input.d.ts +4 -0
  167. package/dist/components/ui/input.d.ts.map +1 -0
  168. package/dist/components/ui/input.js +7 -0
  169. package/dist/components/ui/license-description.d.ts +4 -0
  170. package/dist/components/ui/license-description.d.ts.map +1 -0
  171. package/dist/components/ui/license-description.js +63 -0
  172. package/dist/components/ui/license-frontmatter.d.ts +22 -0
  173. package/dist/components/ui/license-frontmatter.d.ts.map +1 -0
  174. package/dist/components/ui/license-frontmatter.js +37 -0
  175. package/dist/components/ui/lightbox-container.d.ts +11 -0
  176. package/dist/components/ui/lightbox-container.d.ts.map +1 -0
  177. package/dist/components/ui/lightbox-container.js +13 -0
  178. package/dist/components/ui/lightbox.d.ts +17 -0
  179. package/dist/components/ui/lightbox.d.ts.map +1 -0
  180. package/dist/components/ui/lightbox.js +129 -0
  181. package/dist/components/ui/link-card.d.ts +15 -0
  182. package/dist/components/ui/link-card.d.ts.map +1 -0
  183. package/dist/components/ui/link-card.js +28 -0
  184. package/dist/components/ui/popover.d.ts +8 -0
  185. package/dist/components/ui/popover.d.ts.map +1 -0
  186. package/dist/components/ui/popover.js +17 -0
  187. package/dist/components/ui/search.d.ts +9 -0
  188. package/dist/components/ui/search.d.ts.map +1 -0
  189. package/dist/components/ui/search.js +290 -0
  190. package/dist/components/ui/separator.d.ts +5 -0
  191. package/dist/components/ui/separator.d.ts.map +1 -0
  192. package/dist/components/ui/separator.js +8 -0
  193. package/dist/components/ui/sheet.d.ts +14 -0
  194. package/dist/components/ui/sheet.d.ts.map +1 -0
  195. package/dist/components/ui/sheet.js +40 -0
  196. package/dist/components/ui/sidebar.d.ts +67 -0
  197. package/dist/components/ui/sidebar.d.ts.map +1 -0
  198. package/dist/components/ui/sidebar.js +202 -0
  199. package/dist/components/ui/skeleton.d.ts +3 -0
  200. package/dist/components/ui/skeleton.d.ts.map +1 -0
  201. package/dist/components/ui/skeleton.js +6 -0
  202. package/dist/components/ui/sonner.d.ts +5 -0
  203. package/dist/components/ui/sonner.d.ts.map +1 -0
  204. package/dist/components/ui/sonner.js +13 -0
  205. package/dist/components/ui/theme-button.d.ts +2 -0
  206. package/dist/components/ui/theme-button.d.ts.map +1 -0
  207. package/dist/components/ui/theme-button.js +9 -0
  208. package/dist/components/ui/tooltip.d.ts +13 -0
  209. package/dist/components/ui/tooltip.d.ts.map +1 -0
  210. package/dist/components/ui/tooltip.js +20 -0
  211. package/dist/components/ui/types.d.ts +11 -0
  212. package/dist/components/ui/types.d.ts.map +1 -0
  213. package/dist/components/ui/types.js +10 -0
  214. package/dist/hooks/index.d.ts +5 -0
  215. package/dist/hooks/index.d.ts.map +1 -0
  216. package/dist/hooks/index.js +4 -0
  217. package/dist/hooks/use-hydrated.d.ts +2 -0
  218. package/dist/hooks/use-hydrated.d.ts.map +1 -0
  219. package/dist/hooks/use-hydrated.js +6 -0
  220. package/dist/hooks/use-image-load.d.ts +14 -0
  221. package/dist/hooks/use-image-load.d.ts.map +1 -0
  222. package/dist/hooks/use-image-load.js +41 -0
  223. package/dist/hooks/use-mobile.d.ts +2 -0
  224. package/dist/hooks/use-mobile.d.ts.map +1 -0
  225. package/dist/hooks/use-mobile.js +15 -0
  226. package/dist/hooks/use-theme.d.ts +6 -0
  227. package/dist/hooks/use-theme.d.ts.map +1 -0
  228. package/dist/hooks/use-theme.js +23 -0
  229. package/dist/index.d.ts +6 -0
  230. package/dist/index.d.ts.map +1 -0
  231. package/dist/index.js +5 -0
  232. package/dist/lib/checkMecaExport.d.ts +5 -0
  233. package/dist/lib/checkMecaExport.d.ts.map +1 -0
  234. package/dist/lib/checkMecaExport.js +4 -0
  235. package/dist/lib/index.d.ts +6 -0
  236. package/dist/lib/index.d.ts.map +1 -0
  237. package/dist/lib/index.js +6 -0
  238. package/dist/lib/knownParts.d.ts +12 -0
  239. package/dist/lib/knownParts.d.ts.map +1 -0
  240. package/dist/lib/knownParts.js +14 -0
  241. package/dist/lib/links.d.ts +3 -0
  242. package/dist/lib/links.d.ts.map +1 -0
  243. package/dist/lib/links.js +7 -0
  244. package/dist/lib/parse-date.d.ts +2 -0
  245. package/dist/lib/parse-date.d.ts.map +1 -0
  246. package/dist/lib/parse-date.js +7 -0
  247. package/dist/lib/utils.d.ts +3 -0
  248. package/dist/lib/utils.d.ts.map +1 -0
  249. package/dist/lib/utils.js +5 -0
  250. package/package.json +67 -0
@@ -0,0 +1,50 @@
1
+ export { Button, buttonVariants } from './button';
2
+ export { Input } from './input';
3
+ export { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DialogClose, DialogOverlay, DialogPortal, } from './dialog';
4
+ export { Popover, PopoverContent, PopoverTrigger } from './popover';
5
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, SimpleTooltip } from './tooltip';
6
+ export { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from './dropdown-menu';
7
+ export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './collapsible';
8
+ export { Separator } from './separator';
9
+ export { Skeleton } from './skeleton';
10
+ export { Badge, badgeVariants } from './badge';
11
+ export { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from './breadcrumb';
12
+ export { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from './sheet';
13
+ export { Callout } from './Callout';
14
+ export { Toaster } from './sonner';
15
+ export { Abstract } from './abstract';
16
+ export { ArticleActions } from './article-actions';
17
+ export { ArticleDownloadItems, useDownloads, triggerDirectDownload, triggerBlobDownload, } from './article-actions-downloads';
18
+ export { ArticleActionsDropdown } from './article-actions-dropdown';
19
+ export { ArticleActionsShare } from './article-actions-share';
20
+ export { ArticleFooter } from './article-footer';
21
+ export { AuthorPopover } from './author-popover';
22
+ export { Citation } from './citation';
23
+ export { CookieBanner } from './cookie-banner';
24
+ export { DocumentOutline } from './document-outline';
25
+ export { FooterLinks } from './footer-links';
26
+ export { Footnotes } from './footnotes';
27
+ export { Abbreviations } from './abbreviations';
28
+ export { Frontmatter } from './frontmatter';
29
+ export { DateString, TwitterLink, GitHubLink, OpenAccessBadge, OrcidBadge, DoiLink, } from './frontmatter-badges';
30
+ export { CreativeCommonsBadge, LicenseBadges } from './license-frontmatter';
31
+ export { PageCards } from './PageCards';
32
+ export { Sidebar } from './sidebar';
33
+ export { ThemeButton } from './theme-button';
34
+ export { SkipTo, createSkipToTargets } from './accessibility-skip-to';
35
+ export { ArticleCard } from './article-card';
36
+ export { ArticleBar, AuthorsList } from './article-bar';
37
+ export { Bibliography } from './bibliography';
38
+ export { Acknowledgements } from './acknowledgements';
39
+ export { DataAvailability } from './data-availability';
40
+ export { LicenseDescription } from './license-description';
41
+ export { PART_IDS } from './types';
42
+ export { LinkCard } from './link-card';
43
+ export { Lightbox } from './lightbox';
44
+ export { LightboxContainer } from './lightbox-container';
45
+ export { Image } from './image';
46
+ export { SearchDialog } from './search';
47
+ export { Backmatter, useBackmatter } from './backmatter';
48
+ export { Banner } from './banner';
49
+ export { ErrorPage } from './error-page';
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ // Basic UI Components
2
+ export { Button, buttonVariants } from './button';
3
+ export { Input } from './input';
4
+ export { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DialogClose, DialogOverlay, DialogPortal, } from './dialog';
5
+ export { Popover, PopoverContent, PopoverTrigger } from './popover';
6
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, SimpleTooltip } from './tooltip';
7
+ export { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from './dropdown-menu';
8
+ export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './collapsible';
9
+ export { Separator } from './separator';
10
+ export { Skeleton } from './skeleton';
11
+ export { Badge, badgeVariants } from './badge';
12
+ export { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from './breadcrumb';
13
+ export { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from './sheet';
14
+ export { Callout } from './Callout';
15
+ export { Toaster } from './sonner';
16
+ // UI Components
17
+ export { Abstract } from './abstract';
18
+ export { ArticleActions } from './article-actions';
19
+ export { ArticleDownloadItems, useDownloads, triggerDirectDownload, triggerBlobDownload, } from './article-actions-downloads';
20
+ export { ArticleActionsDropdown } from './article-actions-dropdown';
21
+ export { ArticleActionsShare } from './article-actions-share';
22
+ export { ArticleFooter } from './article-footer';
23
+ export { AuthorPopover } from './author-popover';
24
+ export { Citation } from './citation';
25
+ export { CookieBanner } from './cookie-banner';
26
+ export { DocumentOutline } from './document-outline';
27
+ export { FooterLinks } from './footer-links';
28
+ export { Footnotes } from './footnotes';
29
+ export { Abbreviations } from './abbreviations';
30
+ export { Frontmatter } from './frontmatter';
31
+ export { DateString, TwitterLink, GitHubLink, OpenAccessBadge, OrcidBadge, DoiLink, } from './frontmatter-badges';
32
+ export { CreativeCommonsBadge, LicenseBadges } from './license-frontmatter';
33
+ export { PageCards } from './PageCards';
34
+ export { Sidebar } from './sidebar';
35
+ export { ThemeButton } from './theme-button';
36
+ export { SkipTo, createSkipToTargets } from './accessibility-skip-to';
37
+ export { ArticleCard } from './article-card';
38
+ export { ArticleBar, AuthorsList } from './article-bar';
39
+ export { Bibliography } from './bibliography';
40
+ export { Acknowledgements } from './acknowledgements';
41
+ export { DataAvailability } from './data-availability';
42
+ export { LicenseDescription } from './license-description';
43
+ export { PART_IDS } from './types';
44
+ export { LinkCard } from './link-card';
45
+ // Lightbox Components
46
+ export { Lightbox } from './lightbox';
47
+ export { LightboxContainer } from './lightbox-container';
48
+ export { Image } from './image';
49
+ // Search Components
50
+ export { SearchDialog } from './search';
51
+ // Backmatter Components
52
+ export { Backmatter, useBackmatter } from './backmatter';
53
+ // Design Components
54
+ export { Banner } from './banner';
55
+ // Error Components
56
+ export { ErrorPage } from './error-page';
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
3
+ export { Input };
4
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from '../../lib/utils';
4
+ function Input({ className, type, ...props }) {
5
+ return (_jsx("input", { type: type, "data-slot": "input", className: cn('file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', className), ...props }));
6
+ }
7
+ export { Input };
@@ -0,0 +1,4 @@
1
+ export declare function LicenseDescription({ className }: {
2
+ className?: string;
3
+ }): import("react/jsx-runtime").JSX.Element | null;
4
+ //# sourceMappingURL=license-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-description.d.ts","sourceRoot":"","sources":["../../../src/components/ui/license-description.tsx"],"names":[],"mappings":"AAuDA,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,kDAsEvE"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { HashLink } from 'myst-to-react';
3
+ import { useFrontmatter } from '@myst-theme/providers';
4
+ import { cn } from '../../lib/utils';
5
+ import { PART_IDS } from './types';
6
+ function createCitation(authors, showYear = true, date) {
7
+ if (!authors || authors.length === 0)
8
+ return null;
9
+ const getLastName = (author) => author.nameParsed?.family
10
+ ? author.nameParsed?.family
11
+ : author.name?.split(' ').filter(Boolean).pop() || author.name;
12
+ const year = date ? `, ${new Date(date).getUTCFullYear()}` : '';
13
+ const yearString = showYear ? year : '';
14
+ if (authors.length === 1) {
15
+ return getLastName(authors[0]) + yearString;
16
+ }
17
+ else if (authors.length === 2) {
18
+ return `${getLastName(authors[0])} & ${getLastName(authors[1])}${yearString}`;
19
+ }
20
+ else if (authors.length > 2) {
21
+ return `${getLastName(authors[0])} et al.${yearString}`;
22
+ }
23
+ return null;
24
+ }
25
+ function getLicenseDetails(licenseId, authorCount) {
26
+ if (!licenseId)
27
+ return null;
28
+ const id = licenseId.toUpperCase();
29
+ const creator = authorCount && authorCount > 1 ? 'creators' : 'creator';
30
+ if (id === 'CC-BY-4.0') {
31
+ return `, which enables reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the ${creator}`;
32
+ }
33
+ else if (id === 'CC-BY-NC-4.0') {
34
+ return `, which enables reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the ${creator}`;
35
+ }
36
+ else if (id === 'CC-BY-NC-SA-4.0') {
37
+ return `, which enables reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the ${creator}. If you remix, adapt, or build upon the material, you must license the modified material under identical terms`;
38
+ }
39
+ else if (id === 'CC-BY-ND-4.0') {
40
+ return `, which enables reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the ${creator}`;
41
+ }
42
+ else if (id === 'CC-BY-NC-ND-4.0') {
43
+ return `, which enables reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the ${creator}`;
44
+ }
45
+ return null;
46
+ }
47
+ export function LicenseDescription({ className }) {
48
+ const frontmatter = useFrontmatter();
49
+ // Handle both object and string license types
50
+ const license = frontmatter?.license?.content;
51
+ if (!license && !frontmatter?.authors)
52
+ return null;
53
+ const year = frontmatter?.date
54
+ ? new Date(frontmatter.date).getFullYear()
55
+ : new Date().getFullYear();
56
+ const citation = createCitation(frontmatter?.authors, false, frontmatter?.date);
57
+ const authorCount = frontmatter?.authors?.length;
58
+ const licenseDetails = getLicenseDetails(license?.id, authorCount);
59
+ const isOpenAccess = frontmatter?.open_access === true;
60
+ return (_jsxs("section", { id: PART_IDS.license, className: cn('min-w-full prose dark:prose-invert prose-sm', className), children: [_jsxs("header", { className: "text-lg font-semibold text-stone-900 dark:text-white group", children: ["License", _jsx(HashLink, { id: PART_IDS.license, title: "Link to Article License", hover: true, className: "ml-2" })] }), _jsx("div", { className: cn('pl-3 mb-8 text-xs text-stone-500 dark:text-stone-300'), children: _jsxs("p", { children: [frontmatter?.copyright
61
+ ? frontmatter.copyright
62
+ : `Copyright © ${year} ${citation}${citation?.endsWith('.') ? '' : '.'}`, license ? (_jsxs(_Fragment, { children: [' ', "This", ' ', isOpenAccess ? (_jsxs(_Fragment, { children: ["is an", ' ', _jsx("a", { href: "https://en.wikipedia.org/wiki/Open_access", target: "_blank", rel: "noopener noreferrer", children: "open-access article" })] })) : ('article is'), ' ', "distributed under the terms of the", ' ', license.url ? (_jsxs("a", { href: license.url, className: "underline hover:text-stone-700 dark:hover:text-stone-100", target: "_blank", rel: "noopener noreferrer", children: [license.name || license.id, " license"] })) : (`${license.name || license.id} license`), licenseDetails, "."] })) : isOpenAccess ? (_jsx(_Fragment, { children: " This article is open-access." })) : null] }) })] }));
63
+ }
@@ -0,0 +1,22 @@
1
+ type License = {
2
+ id?: string;
3
+ name?: string;
4
+ url?: string;
5
+ free?: boolean;
6
+ CC?: boolean;
7
+ osi?: boolean;
8
+ };
9
+ export declare function CreativeCommonsBadge({ license, preamble, className, }: {
10
+ license: License;
11
+ preamble?: string;
12
+ className?: string;
13
+ }): import("react/jsx-runtime").JSX.Element | null;
14
+ export declare function LicenseBadges({ license, className, }: {
15
+ license?: string | License | {
16
+ code?: License | string;
17
+ content?: License | string;
18
+ };
19
+ className?: string;
20
+ }): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};
22
+ //# sourceMappingURL=license-frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-frontmatter.d.ts","sourceRoot":"","sources":["../../../src/components/ui/license-frontmatter.tsx"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,QAAa,EACb,SAAS,GACV,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,kDA0DA;AAiDD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,GACV,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,CAAC;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,kDAmBA"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { CcByIcon, CcIcon, CcNcIcon, CcNdIcon, CcSaIcon, CcZeroIcon, OsiIcon, } from '@scienceicons/react/24/solid';
3
+ import { cn } from '../../lib/utils';
4
+ import { ScaleIcon } from 'lucide-react';
5
+ import { PART_IDS } from './types';
6
+ import { HashLink } from 'myst-to-react';
7
+ export function CreativeCommonsBadge({ license, preamble = '', className, }) {
8
+ if (!license.id)
9
+ return null;
10
+ const match = /^([CBYSAND0-]+)(?:(?:-)([0-9].[0-9]))?$/.exec(license.id);
11
+ if (!license.CC || !match)
12
+ return null;
13
+ const title = `${preamble}${license.name ?? license.title} (${license.id})`;
14
+ const kind = match[1].toUpperCase();
15
+ return (_jsxs(HashLink, { id: PART_IDS.license, title: title, hover: false, className: cn('opacity-50 hover:opacity-100 text-inherit hover:text-inherit', className), "aria-label": title, scrollBehavior: "instant", children: [_jsx(CcIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mx-1", title: title }), (kind.startsWith('CC0') || kind.startsWith('CC-0') || kind.includes('ZERO')) && (_jsx(CcZeroIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mr-1", title: "CC0: Work is in the worldwide public domain" })), kind.includes('BY') && (_jsx(CcByIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mr-1", title: "Credit must be given to the creator" })), kind.includes('NC') && (_jsx(CcNcIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mr-1", title: "Only noncommercial uses of the work are permitted" })), kind.includes('SA') && (_jsx(CcSaIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mr-1", title: "Adaptations must be shared under the same terms" })), kind.includes('ND') && (_jsx(CcNdIcon, { width: "1.25rem", height: "1.25rem", className: "inline-block mr-1", title: "No derivatives or adaptations of the work are permitted" }))] }));
16
+ }
17
+ function SingleLicenseBadge({ license: possibleLicense, preamble = '', className, }) {
18
+ if (!possibleLicense)
19
+ return null;
20
+ const license = typeof possibleLicense === 'string'
21
+ ? { name: '', url: '', id: possibleLicense }
22
+ : possibleLicense;
23
+ if (!license || Object.keys(license).length === 0)
24
+ return null;
25
+ if (license.CC) {
26
+ return _jsx(CreativeCommonsBadge, { license: license, preamble: preamble, className: className });
27
+ }
28
+ return (_jsxs(HashLink, { id: PART_IDS.license, title: `${preamble}${license.name ?? license.title} (${license.id})`, hover: false, className: "text-inherit hover:text-inherit", scrollBehavior: "instant", children: [!license.osi && (_jsx(ScaleIcon, { width: "1.25rem", height: "1.25rem", className: cn('inline-block mx-1 opacity-60 hover:opacity-100', className) })), license.osi && (_jsx(OsiIcon, { width: "1.25rem", height: "1.25rem", className: cn('mx-1 inline-block opacity-60 hover:opacity-100 hover:text-[#599F46]', className) }))] }));
29
+ }
30
+ export function LicenseBadges({ license, className, }) {
31
+ if (!license)
32
+ return null;
33
+ if (typeof license !== 'string' && ('code' in license || 'content' in license)) {
34
+ return (_jsxs(_Fragment, { children: [_jsx(SingleLicenseBadge, { license: license.content, preamble: "Content License: ", className: className }), _jsx(SingleLicenseBadge, { license: license.code, preamble: "Code License: ", className: className })] }));
35
+ }
36
+ return _jsx(SingleLicenseBadge, { license: license, className: className });
37
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import type { LightboxImageData } from '../providers/lightbox-provider';
3
+ interface LightboxContainerProps {
4
+ children: React.ReactNode;
5
+ showNavigation?: boolean;
6
+ showZoom?: boolean;
7
+ imageList?: LightboxImageData[];
8
+ }
9
+ export declare function LightboxContainer({ children, showNavigation, showZoom, imageList, }: LightboxContainerProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=lightbox-container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightbox-container.d.ts","sourceRoot":"","sources":["../../../src/components/ui/lightbox-container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AA2BD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,cAAqB,EACrB,QAAe,EACf,SAAc,GACf,EAAE,sBAAsB,2CAOxB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { LightboxProvider, useLightbox } from '../providers/lightbox-provider';
4
+ import { Lightbox } from './lightbox';
5
+ function LightboxContent({ showNavigation = true, showZoom = true, }) {
6
+ const { isOpen, currentImage, closeLightbox, navigate, hasNext, hasPrev } = useLightbox();
7
+ if (!currentImage)
8
+ return null;
9
+ return (_jsx(Lightbox, { isOpen: isOpen, onClose: closeLightbox, image: currentImage, onNavigate: navigate, hasNext: hasNext, hasPrev: hasPrev, showNavigation: showNavigation, showZoom: showZoom }));
10
+ }
11
+ export function LightboxContainer({ children, showNavigation = true, showZoom = true, imageList = [], }) {
12
+ return (_jsxs(LightboxProvider, { imageList: imageList, children: [children, _jsx(LightboxContent, { showNavigation: showNavigation, showZoom: showZoom })] }));
13
+ }
@@ -0,0 +1,17 @@
1
+ import type { LightboxImageData } from '../providers/lightbox-provider';
2
+ interface LightboxProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ image: LightboxImageData;
6
+ onNavigate?: (direction: 'prev' | 'next') => void;
7
+ hasNext?: boolean;
8
+ hasPrev?: boolean;
9
+ showNavigation?: boolean;
10
+ showZoom?: boolean;
11
+ className?: string;
12
+ minZoom?: number;
13
+ maxZoom?: number;
14
+ }
15
+ export declare function Lightbox({ isOpen, onClose, image, onNavigate, hasNext, hasPrev, showNavigation, showZoom, className, minZoom, maxZoom, }: LightboxProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=lightbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightbox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/lightbox.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAIxE,UAAU,aAAa;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,OAAO,EACP,KAAK,EACL,UAAU,EACV,OAAe,EACf,OAAe,EACf,cAAqB,EACrB,QAAe,EACf,SAAS,EACT,OAAa,EACb,OAAW,GACZ,EAAE,aAAa,2CA2Qf"}
@@ -0,0 +1,129 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Dialog, DialogContent, DialogTitle, DialogDescription } from '@radix-ui/react-dialog';
4
+ import { X, ChevronLeft, ChevronRight, ZoomIn, ZoomOut, RotateCcw } from 'lucide-react';
5
+ import { cn } from '../../lib/utils';
6
+ import { Button } from './button';
7
+ import { MyST } from 'myst-to-react';
8
+ import { Picture } from './image';
9
+ export function Lightbox({ isOpen, onClose, image, onNavigate, hasNext = false, hasPrev = false, showNavigation = true, showZoom = true, className, minZoom = 0.5, maxZoom = 7, }) {
10
+ const [zoomLevel, setZoomLevel] = React.useState(1);
11
+ const [isDragging, setIsDragging] = React.useState(false);
12
+ const [dragOffset, setDragOffset] = React.useState({ x: 0, y: 0 });
13
+ const [imageLoaded, setImageLoaded] = React.useState(false);
14
+ const imageRef = React.useRef(null);
15
+ const containerRef = React.useRef(null);
16
+ // Reset zoom and position when image changes
17
+ React.useEffect(() => {
18
+ setZoomLevel(1);
19
+ setDragOffset({ x: 0, y: 0 });
20
+ setImageLoaded(false);
21
+ }, [image.src]);
22
+ // Handle wheel events with passive listener handling
23
+ React.useEffect(() => {
24
+ if (!isOpen || !showZoom)
25
+ return;
26
+ const handleWheelEvent = (e) => {
27
+ e.preventDefault();
28
+ e.stopPropagation();
29
+ // Immediate zoom without timeout
30
+ const delta = e.deltaY > 0 ? 0.98 : 1.02;
31
+ setZoomLevel((prev) => {
32
+ const newZoom = prev * delta;
33
+ return Math.max(minZoom, Math.min(newZoom, maxZoom));
34
+ });
35
+ };
36
+ // Add wheel event listener with passive: false
37
+ document.addEventListener('wheel', handleWheelEvent, { passive: false });
38
+ return () => {
39
+ document.removeEventListener('wheel', handleWheelEvent);
40
+ };
41
+ }, [isOpen, showZoom]);
42
+ // Handle keyboard navigation
43
+ React.useEffect(() => {
44
+ const handleKeyDown = (e) => {
45
+ if (!isOpen)
46
+ return;
47
+ switch (e.key) {
48
+ case 'Escape':
49
+ onClose();
50
+ break;
51
+ case 'ArrowLeft':
52
+ if (hasPrev && onNavigate) {
53
+ onNavigate('prev');
54
+ }
55
+ break;
56
+ case 'ArrowRight':
57
+ if (hasNext && onNavigate) {
58
+ onNavigate('next');
59
+ }
60
+ break;
61
+ case 'PageUp':
62
+ case 'PageDown':
63
+ case 'ArrowUp':
64
+ case 'ArrowDown':
65
+ // Stops scrolling the page
66
+ e.preventDefault();
67
+ break;
68
+ case '=':
69
+ case '+':
70
+ e.preventDefault();
71
+ setZoomLevel((prev) => Math.min(prev * 1.2, maxZoom));
72
+ break;
73
+ case '-':
74
+ e.preventDefault();
75
+ setZoomLevel((prev) => Math.max(prev / 1.2, minZoom));
76
+ break;
77
+ case '0':
78
+ e.preventDefault();
79
+ setZoomLevel(1);
80
+ setDragOffset({ x: 0, y: 0 });
81
+ break;
82
+ }
83
+ };
84
+ document.addEventListener('keydown', handleKeyDown);
85
+ return () => document.removeEventListener('keydown', handleKeyDown);
86
+ }, [isOpen, hasPrev, hasNext, onNavigate, onClose]);
87
+ // Handle mouse drag for panning
88
+ const [dragStart, setDragStart] = React.useState({ x: 0, y: 0 });
89
+ const handleMouseDown = (e) => {
90
+ // if (zoomLevel <= 1) return;
91
+ setIsDragging(true);
92
+ setDragStart({
93
+ x: e.clientX - dragOffset.x,
94
+ y: e.clientY - dragOffset.y,
95
+ });
96
+ };
97
+ const handleMouseMove = (e) => {
98
+ // if (!isDragging || zoomLevel <= 1) return;
99
+ if (!isDragging)
100
+ return;
101
+ setDragOffset({
102
+ x: e.clientX - dragStart.x,
103
+ y: e.clientY - dragStart.y,
104
+ });
105
+ };
106
+ const handleMouseUp = () => {
107
+ setIsDragging(false);
108
+ };
109
+ const resetZoom = () => {
110
+ setZoomLevel(1);
111
+ setDragOffset({ x: 0, y: 0 });
112
+ };
113
+ // Check if this is a video
114
+ const isVideo = image.src.endsWith('.mp4') || image.urlSource?.endsWith('.mp4');
115
+ return (_jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: _jsxs(DialogContent, { className: cn('flex fixed inset-0 z-50 justify-center items-center p-4 bg-black/90', className), onPointerDownOutside: onClose, onEscapeKeyDown: onClose, onTouchStart: (e) => e.preventDefault(), onTouchMove: (e) => e.preventDefault(), children: [_jsx(DialogTitle, { className: "sr-only", children: image.alt || 'Image viewer' }), _jsx(DialogDescription, { className: "sr-only", children: image.alt ? `Viewing ${image.alt}` : 'Image viewer with zoom and navigation controls' }), _jsx(Button, { variant: "ghost", size: "icon", className: "absolute top-4 right-4 z-10 text-white cursor-pointer hover:bg-white/10 hover:text-white", onClick: onClose, children: _jsx(X, { className: "w-6 h-6" }) }), showNavigation && (hasPrev || hasNext) && (_jsxs(_Fragment, { children: [hasPrev && (_jsx(Button, { variant: "ghost", size: "icon", className: "absolute left-4 top-1/2 z-10 text-white -translate-y-1/2 cursor-pointer hover:bg-white/10 hover:text-white", onClick: () => onNavigate?.('prev'), children: _jsx(ChevronLeft, { className: "w-8 h-8" }) })), hasNext && (_jsx(Button, { variant: "ghost", size: "icon", className: "absolute right-4 top-1/2 z-10 text-white -translate-y-1/2 cursor-pointer hover:bg-white/10 hover:text-white", onClick: () => onNavigate?.('next'), children: _jsx(ChevronRight, { className: "w-8 h-8" }) }))] })), showZoom && !isVideo && (_jsxs("div", { className: "flex absolute top-4 left-4 z-10 gap-2", children: [_jsx(Button, { variant: "ghost", size: "icon", className: "text-white cursor-pointer hover:bg-white/10 hover:text-white", onClick: () => setZoomLevel((prev) => Math.min(prev * 1.2, 5)), children: _jsx(ZoomIn, { className: "w-5 h-5" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "text-white cursor-pointer hover:bg-white/10 hover:text-white", onClick: () => setZoomLevel((prev) => Math.max(prev / 1.2, 0.1)), children: _jsx(ZoomOut, { className: "w-5 h-5" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "text-white cursor-pointer hover:bg-white/10 hover:text-white", onClick: resetZoom, children: _jsx(RotateCcw, { className: "w-5 h-5" }) })] })), _jsxs("div", { ref: containerRef, className: "flex overflow-hidden relative justify-center items-center w-full h-full max-h-screen", onMouseDown: !isVideo ? handleMouseDown : undefined, onMouseMove: !isVideo ? handleMouseMove : undefined, onMouseUp: !isVideo ? handleMouseUp : undefined, onMouseLeave: !isVideo ? handleMouseUp : undefined, onTouchStart: (e) => e.preventDefault(), onTouchMove: (e) => e.preventDefault(), children: [_jsx(Picture, { ref: imageRef, src: image.src, srcOptimized: image.srcOptimized, urlSource: image.urlSource, alt: image.alt, className: cn('object-contain max-w-full max-h-full select-none', {
116
+ 'cursor-grab active:cursor-grabbing': !isVideo,
117
+ 'opacity-0': !imageLoaded,
118
+ 'opacity-100': imageLoaded,
119
+ }), style: !isVideo
120
+ ? {
121
+ transform: `scale(${zoomLevel}) translate(${dragOffset.x / zoomLevel}px, ${dragOffset.y / zoomLevel}px)`,
122
+ maxHeight: 'calc(100vh - 8rem)', // Account for padding and controls
123
+ maxWidth: 'calc(100vw - 2rem)', // Account for padding
124
+ }
125
+ : {
126
+ maxHeight: 'calc(100vh - 8rem)', // Account for padding and controls
127
+ maxWidth: 'calc(100vw - 2rem)', // Account for padding
128
+ }, onLoad: () => setImageLoaded(true), onLoadedData: () => setImageLoaded(true) }), !imageLoaded && (_jsx("div", { className: "flex absolute inset-0 justify-center items-center", children: _jsx("div", { className: "w-8 h-8 rounded-full border-2 animate-spin border-white/20 border-t-white" }) }))] }), image.caption && (_jsx("div", { className: "absolute right-4 bottom-4 left-4 z-10", children: _jsx("div", { className: "px-4 py-2 mx-auto max-w-6xl text-sm text-white rounded-lg backdrop-blur-sm group bg-black/80 prose prose-invert", children: _jsx("div", { className: "overflow-hidden transition-all duration-750 max-h-[3rem] group-hover:max-h-[50rem]", children: typeof image.caption === 'string' ? image.caption : _jsx(MyST, { ast: image.caption }) }) }) })), showZoom && !isVideo && zoomLevel !== 1 && (_jsxs("div", { className: "absolute right-4 bottom-4 z-10 px-3 py-1 text-sm text-white rounded-sm backdrop-blur-sm bg-black/50", children: [Math.round(zoomLevel * 100), "%"] }))] }) }));
129
+ }
@@ -0,0 +1,15 @@
1
+ import { type VariantProps } from 'class-variance-authority';
2
+ declare const linkCardVariants: (props?: ({
3
+ variant?: "default" | null | undefined;
4
+ size?: "default" | "lg" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export declare function LinkCard({ url, title, internal, loading, description, thumbnail, variant, size, }: {
7
+ url: string;
8
+ internal?: boolean;
9
+ loading?: boolean;
10
+ title: React.ReactNode;
11
+ description?: React.ReactNode;
12
+ thumbnail?: string | null;
13
+ } & VariantProps<typeof linkCardVariants>): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=link-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/link-card.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,QAAA,MAAM,gBAAgB;;;8EAcpB,CAAC;AAEH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,KAAK,EACL,QAAgB,EAChB,OAAe,EACf,WAAW,EACX,SAAS,EACT,OAAO,EACP,IAAI,GACL,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,2CAmDxC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useLinkProvider, useBaseurl, withBaseurl } from '@myst-theme/providers';
3
+ import { cn } from '../../lib/utils';
4
+ import { ExternalLinkIcon } from 'lucide-react';
5
+ import { cva } from 'class-variance-authority';
6
+ const linkCardVariants = cva('overflow-hidden rounded hover-card-content', {
7
+ variants: {
8
+ variant: {
9
+ default: 'bg-white rounded border border-gray-200',
10
+ },
11
+ size: {
12
+ default: 'w-[300px] sm:max-w-[500px]',
13
+ lg: 'max-w-[600px] sm:max-w-[600px]',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: 'default',
18
+ size: 'default',
19
+ },
20
+ });
21
+ export function LinkCard({ url, title, internal = false, loading = false, description, thumbnail, variant, size, }) {
22
+ const Link = useLinkProvider();
23
+ const baseurl = useBaseurl();
24
+ const to = internal ? withBaseurl(url, baseurl) : url;
25
+ return (_jsxs("div", { className: cn(linkCardVariants({ variant, size }), {
26
+ 'animate-pulse': loading,
27
+ }), children: [_jsxs("div", { className: "group", children: [!loading && thumbnail && (_jsx(Link, { to: to, prefetch: internal ? 'intent' : 'none', target: internal ? '_self' : '_blank', className: "block overflow-hidden h-[150px] border-b border-gray-200", children: _jsx("img", { src: thumbnail, className: "w-full h-[150px] object-cover object-center object-middle m-0 border-b border-gray-200 transition-transform duration-500 ease-in-out group-hover:scale-125" }) })), loading && (_jsx("div", { className: "animate-pulse bg-slate-100 dark:bg-slate-800 w-full h-[150px]" })), internal && (_jsx(Link, { to: to, className: "block px-3 mt-3 text-sm font-bold text-black hover:underline", prefetch: "intent", children: title })), !internal && (_jsxs("a", { href: to, className: "block px-3 py-2 text-sm font-bold text-black bg-gray-100 border-b border-gray-200 hover:underline", target: "_blank", rel: "noreferrer", children: [_jsx(ExternalLinkIcon, { width: "1rem", height: "1rem", className: "float-right" }), title] }))] }), !loading && description && _jsx("div", { className: "p-3 max-w-none text-sm prose", children: description })] }));
28
+ }
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+ declare function Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
5
+ declare function PopoverContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
6
+ declare function PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>): import("react/jsx-runtime").JSX.Element;
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../src/components/ui/popover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEhF;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAE1F;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAevD;AAED,iBAAS,aAAa,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,2CAExF;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
4
+ import { cn } from '../../lib/utils';
5
+ function Popover({ ...props }) {
6
+ return _jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
7
+ }
8
+ function PopoverTrigger({ ...props }) {
9
+ return _jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
10
+ }
11
+ function PopoverContent({ className, align = 'center', sideOffset = 4, ...props }) {
12
+ return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden', className), ...props }) }));
13
+ }
14
+ function PopoverAnchor({ ...props }) {
15
+ return _jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
16
+ }
17
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Component that implements a basic search interface
3
+ */
4
+ export declare function SearchDialog({ debounceTime, charLimit, children, }: {
5
+ debounceTime?: number;
6
+ charLimit?: number;
7
+ children: React.ReactNode;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/components/ui/search.tsx"],"names":[],"mappings":"AAieA;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,YAAkB,EAClB,SAAc,EACd,QAAQ,GACT,EAAE;IACD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CAqFA"}