@seqera/docusaurus-theme-seqera 1.0.6 → 1.0.7

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 (76) hide show
  1. package/lib/index.js +1 -0
  2. package/lib/languages/prism-nextflow.d.ts +1 -0
  3. package/lib/languages/prism-nextflow.js +24 -0
  4. package/lib/main-styles.css +66 -42
  5. package/lib/styles/admonition-alerts.css +5 -1
  6. package/lib/styles/api.css +16 -0
  7. package/lib/styles/buttons.css +55 -0
  8. package/lib/styles/other-overrides.css +0 -5
  9. package/lib/styles/typography.css +25 -6
  10. package/lib/theme/Admonition/Layout/styles.module.css +2 -1
  11. package/lib/theme/BlogLayout/index.js +1 -1
  12. package/lib/theme/BlogPostItem/index.js +3 -1
  13. package/lib/theme/BlogPostPaginator/index.js +1 -1
  14. package/lib/theme/BlogSidebar/Content/index.js +3 -1
  15. package/lib/theme/BlogSidebar/Desktop/index.js +40 -4
  16. package/lib/theme/BlogSidebar/Desktop/rss.svg +1 -0
  17. package/lib/theme/BlogSidebar/Desktop/styles.module.css +11 -1
  18. package/lib/theme/BlogSidebar/Mobile/index.js +3 -3
  19. package/lib/theme/DocItem/Layout/index.js +2 -2
  20. package/lib/theme/DocItem/Layout/styles.module.css +1 -1
  21. package/lib/theme/DocRoot/Layout/Main/styles.module.css +4 -1
  22. package/lib/theme/DocSidebar/Desktop/Content/VersionSwitcher/index.js +11 -0
  23. package/lib/theme/DocSidebar/Desktop/Content/index.js +6 -2
  24. package/lib/theme/DocSidebar/Desktop/index.js +9 -1
  25. package/lib/theme/DocSidebarItem/Html/index.js +1 -1
  26. package/lib/theme/DocSidebarItem/Link/index.js +1 -1
  27. package/lib/theme/DocSidebarItem/index.js +3 -3
  28. package/lib/theme/Footer/Layout/index.js +1 -1
  29. package/lib/theme/Homepage/index.d.ts +1 -4
  30. package/lib/theme/Homepage/index.js +37 -43
  31. package/lib/theme/Navbar/Content/index.js +6 -12
  32. package/lib/theme/Navbar/Layout/index.js +1 -1
  33. package/lib/theme/Navbar/MobileSidebar/PrimaryMenu/index.js +3 -3
  34. package/lib/theme/Navbar/Submenu/SubmenuLinks.js +1 -2
  35. package/lib/theme/NavbarItem/DefaultNavbarItem/Desktop/index.js +1 -1
  36. package/lib/theme/NotFound/Content/index.js +1 -3
  37. package/lib/theme/TOCItems/index.js +1 -1
  38. package/lib/theme/prism-include-languages.js +13 -2
  39. package/package.json +1 -2
  40. package/package.json.bak +66 -0
  41. package/src/index.ts +1 -0
  42. package/src/languages/prism-nextflow.js +24 -0
  43. package/src/main-styles.css +66 -42
  44. package/src/styles/admonition-alerts.css +5 -1
  45. package/src/styles/api.css +16 -0
  46. package/src/styles/buttons.css +55 -0
  47. package/src/styles/other-overrides.css +0 -5
  48. package/src/styles/typography.css +25 -6
  49. package/src/theme/Admonition/Layout/styles.module.css +2 -1
  50. package/src/theme/BlogLayout/index.tsx +1 -1
  51. package/src/theme/BlogPostItem/index.tsx +1 -1
  52. package/src/theme/BlogPostPaginator/index.tsx +1 -1
  53. package/src/theme/BlogSidebar/Content/index.tsx +1 -1
  54. package/src/theme/BlogSidebar/Desktop/index.tsx +41 -8
  55. package/src/theme/BlogSidebar/Desktop/rss.svg +1 -0
  56. package/src/theme/BlogSidebar/Desktop/styles.module.css +11 -1
  57. package/src/theme/BlogSidebar/Mobile/index.tsx +3 -3
  58. package/src/theme/DocItem/Layout/index.tsx +2 -2
  59. package/src/theme/DocItem/Layout/styles.module.css +1 -1
  60. package/src/theme/DocRoot/Layout/Main/styles.module.css +4 -1
  61. package/src/theme/DocSidebar/Desktop/Content/VersionSwitcher/index.tsx +10 -0
  62. package/src/theme/DocSidebar/Desktop/Content/index.tsx +2 -2
  63. package/src/theme/DocSidebar/Desktop/index.tsx +8 -1
  64. package/src/theme/DocSidebarItem/Html/index.tsx +1 -1
  65. package/src/theme/DocSidebarItem/Link/index.tsx +1 -1
  66. package/src/theme/DocSidebarItem/index.tsx +3 -3
  67. package/src/theme/Footer/Layout/index.tsx +1 -1
  68. package/src/theme/Homepage/index.tsx +37 -47
  69. package/src/theme/Navbar/Content/index.tsx +6 -12
  70. package/src/theme/Navbar/Layout/index.tsx +1 -1
  71. package/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.tsx +3 -3
  72. package/src/theme/Navbar/Submenu/SubmenuLinks.tsx +1 -2
  73. package/src/theme/NavbarItem/DefaultNavbarItem/Desktop/index.tsx +1 -1
  74. package/src/theme/NotFound/Content/index.tsx +1 -1
  75. package/src/theme/TOCItems/index.tsx +1 -1
  76. package/src/theme/prism-include-languages.ts +14 -2
@@ -1,6 +1,7 @@
1
1
  import React, {useState} from 'react';
2
2
  import clsx from 'clsx';
3
3
  import {useThemeConfig} from '@docusaurus/theme-common';
4
+ import {useLocation} from '@docusaurus/router';
4
5
  import Logo from '@theme/Logo';
5
6
  import CollapseButton from '@theme/DocSidebar/Desktop/CollapseButton';
6
7
  import Content from '@theme/DocSidebar/Desktop/Content';
@@ -13,7 +14,12 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
13
14
  sidebar: {hideable},
14
15
  },
15
16
  } = useThemeConfig();
17
+ const location = useLocation();
16
18
  const [isOpen, setIsOpen] = useState(false);
19
+ // Check if URL contains /platform-enterprise
20
+ const showVersionSwitcher = location.pathname.includes(
21
+ '/platform-enterprise',
22
+ );
17
23
  return (
18
24
  <div
19
25
  className={clsx(
@@ -23,7 +29,9 @@ function DocSidebarDesktop({path, sidebar, onCollapse, isHidden}) {
23
29
  'h-full relative w-full',
24
30
  )}>
25
31
  {hideOnScroll && <Logo tabIndex={-1} className={styles.sidebarLogo} />}
26
- <VersionSwitcher isOpen={isOpen} setIsOpen={setIsOpen} />
32
+ {showVersionSwitcher && (
33
+ <VersionSwitcher isOpen={isOpen} setIsOpen={setIsOpen} />
34
+ )}
27
35
  <Content path={path} sidebar={sidebar} />
28
36
  {hideable && (
29
37
  <div className="absolute right-0 top-[3.75rem]">
@@ -11,7 +11,7 @@ export default function DocSidebarItemHtml({item, level, index}) {
11
11
  ThemeClassNames.docs.docSidebarItemLinkLevel(level),
12
12
  level > 1 &&
13
13
  ThemeClassNames.docs.docSidebarItemLinkLevel(level) &&
14
- 'ml-3 lg:ml-0',
14
+ 'ml-3',
15
15
  defaultStyle && [styles.menuHtmlItem, 'menu__list-item '],
16
16
  className,
17
17
  )}
@@ -31,7 +31,7 @@ export default function DocSidebarItemLink({
31
31
  ThemeClassNames.docs.docSidebarItemLinkLevel(level),
32
32
  level > 1 &&
33
33
  ThemeClassNames.docs.docSidebarItemLinkLevel(level) &&
34
- 'ml-3 lg:ml-0',
34
+ 'ml-4',
35
35
  'menu__list-item',
36
36
  className,
37
37
  )}
@@ -6,20 +6,20 @@ export default function DocSidebarItem({item, ...props}) {
6
6
  switch (item.type) {
7
7
  case 'category':
8
8
  return (
9
- <div className="mt-3 md:mt-0">
9
+ <div className="mt-3">
10
10
  <DocSidebarItemCategory item={item} {...props} />
11
11
  </div>
12
12
  );
13
13
  case 'html':
14
14
  return (
15
- <div className="mt-3 md:mt-0">
15
+ <div className="mt-3">
16
16
  <DocSidebarItemHtml item={item} {...props} />
17
17
  </div>
18
18
  );
19
19
  case 'link':
20
20
  default:
21
21
  return (
22
- <div className="mt-3 md:mt-0">
22
+ <div className="mt-3">
23
23
  <DocSidebarItemLink item={item} {...props} />
24
24
  </div>
25
25
  );
@@ -6,7 +6,7 @@ export default function FooterLayout({style, links, logo, copyright}) {
6
6
  <footer
7
7
  className={clsx(
8
8
  ThemeClassNames.layout.footer.container,
9
- 'border-t border-base-content/20',
9
+ 'border-t border-black/20 dark:border-white/20',
10
10
  {
11
11
  'footer--dark': style === 'dark',
12
12
  },
@@ -1,5 +1,2 @@
1
1
  import { type ReactNode } from 'react';
2
- export interface Props {
3
- children?: ReactNode;
4
- }
5
- export default function Homepage({ children }: Props): ReactNode;
2
+ export default function Homepage(): ReactNode;
@@ -7,33 +7,30 @@ import IconWave from '@theme/Icon/Wave';
7
7
  import IconSeqeraCloud from '@theme/Icon/SeqeraCloud';
8
8
  import IconServiceStatus from '@theme/Icon/ServiceStatus';
9
9
  import IconQuestionMark from '@theme/Icon/QuestionMark';
10
- import IconCog from '@theme/Icon/Cog';
11
- import IconChangelog from '@theme/Icon/Changelog';
12
10
  import IconChatBubbles from '@theme/Icon/ChatBubbles';
13
11
  import IconMCP from '@theme/Icon/MCP';
14
12
  import IconSeqeraEnterprise from '@theme/Icon/SeqeraEnterprise';
15
13
  const CARD_DATA = {
16
- products: [
14
+ platform: [
17
15
  {
18
16
  href: '/platform-cloud',
19
17
  icon: <IconSeqeraCloud className="text-black" />,
20
18
  title: 'Seqera Cloud',
21
19
  description:
22
- 'comprehensive platform empowering teams across the entire scientific lifecycle',
20
+ 'Comprehensive platform empowering teams across the entire scientific lifecycle',
23
21
  },
24
22
  {
25
23
  href: '/platform-enterprise',
26
24
  icon: <IconSeqeraEnterprise className="text-black" />,
27
25
  title: 'Seqera Enterprise',
28
26
  description:
29
- 'manage within your own infrastructure for greater control and data sovereignty',
27
+ 'Platform management within your own infrastructure for greater control',
30
28
  },
31
29
  {
32
- href: '/platform-api',
33
- icon: <IconCog className="text-black" />,
34
- title: 'Platform API',
35
- description:
36
- 'integrate Seqera Platform seamlessly into existing processes',
30
+ href: '/fusion',
31
+ icon: <IconFusion className="text-fusion-600" />,
32
+ title: 'Fusion',
33
+ description: 'Optimized file system for cloud-native data pipelines',
37
34
  },
38
35
  ],
39
36
  ai: [
@@ -42,14 +39,13 @@ const CARD_DATA = {
42
39
  icon: <IconAI className="text-black max-w-5.5" />,
43
40
  title: 'Seqera AI',
44
41
  description:
45
- 'intelligent command-line assistant that helps you build, run, and manage bioinformatics workflows',
42
+ 'Intelligent command-line assistant that helps you build, run, and manage bioinformatics workflows',
46
43
  },
47
44
  {
48
45
  href: '/platform-cloud/seqera-mcp',
49
46
  icon: <IconMCP className="text-black max-w-5.5" />,
50
47
  title: 'Seqera MCP',
51
- description:
52
- 'enables AI assistants to interact with the Seqera ecosystem',
48
+ description: 'AI assistant that interacts with the Seqera ecosystem',
53
49
  },
54
50
  ],
55
51
  openSource: [
@@ -57,53 +53,41 @@ const CARD_DATA = {
57
53
  href: '/nextflow',
58
54
  icon: <IconNextflow className="text-nextflow-600" />,
59
55
  title: 'Nextflow',
60
- description: 'open-source orchestrator for deploying workflows',
56
+ description: 'Open-source orchestrator for deploying workflows',
61
57
  },
62
58
  {
63
59
  href: '/wave',
64
60
  icon: <IconWave className="text-wave-600" />,
65
61
  title: 'Wave',
66
- description: 'next generation container provisioning for data analysis',
62
+ description: 'Next-generation container provisioning for data analysis',
67
63
  },
68
64
  {
69
65
  href: '/multiqc',
70
66
  icon: <IconMultiQC className="text-multiqc-600" />,
71
67
  title: 'MultiQC',
72
68
  description:
73
- 'open-source tool to aggregate bioinformatic analyses results',
74
- },
75
- {
76
- href: '/fusion',
77
- icon: <IconFusion className="text-fusion-600" />,
78
- title: 'Fusion',
79
- description: 'optimized file system for cloud-native data pipelines',
69
+ 'Open-source tool to aggregate bioinformatic analyses results',
80
70
  },
81
71
  ],
82
72
  help: [
83
- {
84
- href: '/changelog',
85
- icon: <IconChangelog className="text-black w-[20px] h-[20px]" />,
86
- title: 'Changelog',
87
- description: 'product release notes on latest features and updates.',
88
- },
89
73
  {
90
74
  href: 'https://support.seqera.io/',
91
75
  icon: <IconQuestionMark className="text-black" />,
92
76
  title: 'Support Portal',
93
77
  description:
94
- 'contact support for help with your platform or enterprise account',
78
+ 'Contact support for help with your platform or enterprise account',
95
79
  },
96
80
  {
97
81
  href: 'https://community.seqera.io/',
98
82
  icon: <IconChatBubbles className="text-black" />,
99
83
  title: 'Community Forum',
100
- description: 'discuss, share and network with other users',
84
+ description: 'Discuss, share and network with other users',
101
85
  },
102
86
  {
103
87
  href: 'https://status.seqera.io/',
104
88
  icon: <IconServiceStatus className="text-black" />,
105
89
  title: 'Service Status',
106
- description: 'real-time monitoring of platform performance',
90
+ description: 'Monitor platform performance in real time',
107
91
  },
108
92
  ],
109
93
  };
@@ -131,31 +115,41 @@ function CardGrid({cards}) {
131
115
  </div>
132
116
  );
133
117
  }
134
- function CardSection({title, cards}) {
118
+ function CardSection2Col({title, cards}) {
135
119
  return (
136
- <div className="mt-16">
120
+ <div className="mt-8">
137
121
  <h2 className="text-[2rem] font-display font-medium mb-2">{title}</h2>
138
122
  <CardGrid cards={cards} />
139
123
  </div>
140
124
  );
141
125
  }
142
- export default function Homepage({children}) {
126
+ function CardSection3Col({title, cards}) {
127
+ return (
128
+ <div className="mt-8">
129
+ <h2 className="text-[2rem] font-display font-medium mb-2">{title}</h2>
130
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-4">
131
+ {cards.map((card) => (
132
+ <Card key={card.href} {...card} />
133
+ ))}
134
+ </div>
135
+ </div>
136
+ );
137
+ }
138
+ // Main Homepage Component
139
+ export default function Homepage() {
143
140
  return (
144
141
  <div className="container-md py-18 prose-base md:prose-lg">
145
142
  <h1 className="font-display text-[3rem] font-medium mb-0">
146
- Seqera Documentation
143
+ Documentation
147
144
  </h1>
148
145
  <p className="text-xl mb-6">
149
- Explore our guides, documentation, and examples to build with Seqera.
146
+ Explore our guides, documentation, and examples to build with Seqera
150
147
  </p>
151
148
 
152
- <div className="mb-10">
153
- <CardGrid cards={CARD_DATA.products} />
154
- </div>
155
-
156
- <CardSection title="Seqera AI and MCP" cards={CARD_DATA.ai} />
157
- <CardSection title="Open Source" cards={CARD_DATA.openSource} />
158
- <CardSection title="Additional Resources" cards={CARD_DATA.help} />
149
+ <CardSection3Col title="Open Source" cards={CARD_DATA.openSource} />
150
+ <CardSection3Col title="Platform" cards={CARD_DATA.platform} />
151
+ <CardSection2Col title="Seqera AI" cards={CARD_DATA.ai} />
152
+ <CardSection3Col title="Help" cards={CARD_DATA.help} />
159
153
  </div>
160
154
  );
161
155
  }
@@ -71,7 +71,7 @@ export default function NavbarContent() {
71
71
  const [leftItems, rightItems] = splitNavbarItems(items);
72
72
  const searchBarItem = items.find((item) => item.type === 'search');
73
73
  return (
74
- <div className="w-full flex flex-col">
74
+ <div className="w-full flex flex-col justify-center md:justify-start">
75
75
  <div className="md:pt-3 md:pb-1">
76
76
  <NavbarContentLayout
77
77
  left={
@@ -89,12 +89,12 @@ export default function NavbarContent() {
89
89
  </div>
90
90
  <div className="hidden md:flex!">
91
91
  <a
92
- className="btn btn-secondary hover:bg-nextflow-600 shadow-none border text-black btn-sm px-6 py-1 text-[.9rem] mr-2 "
92
+ className="btn btn-secondary mr-2 "
93
93
  href="https://cloud.seqera.io/oauth/login/auth0">
94
94
  Log In
95
95
  </a>
96
96
  <a
97
- className="btn btn-outline shadow-none btn-sm border px-6 py-1 text-[.9rem] hover:border-black hover:bg-black hover:text-white"
97
+ className="btn btn-outline"
98
98
  href="https://cloud.seqera.io/oauth/login/auth0">
99
99
  Sign Up
100
100
  </a>
@@ -112,15 +112,9 @@ export default function NavbarContent() {
112
112
  <div className="mr-2">
113
113
  <Link
114
114
  className="navbar__link ml-8 font-normal"
115
- to={'/platform-cloud/seqera-ai'}
116
- aria-label="Seqera AI">
117
- Seqera AI
118
- </Link>
119
- <Link
120
- className="navbar__link ml-8 font-normal"
121
- to={'/platform-cloud/seqera-mcp'}
122
- aria-label="Seqera MCP">
123
- Seqera MCP
115
+ to={'/platform-api'}
116
+ aria-label="Platform API">
117
+ Platform API
124
118
  </Link>
125
119
  <Link
126
120
  className="navbar__link ml-8 font-normal"
@@ -33,7 +33,7 @@ export default function NavbarLayout({children}) {
33
33
  })}
34
34
  className={clsx(
35
35
  ThemeClassNames.layout.navbar.container,
36
- 'navbar border-b border-base-content/20 md:pt-10 md:pb-10 px-4 sticky top-0 shadow-none',
36
+ 'navbar border-b border-black/20 dark:border-white/20 md:pb-10 px-4 sticky top-0 shadow-none h-[50px] md:h-[78px]',
37
37
  'navbar--fixed-top',
38
38
  hideOnScroll && [
39
39
  styles.navbarHideable,
@@ -16,14 +16,14 @@ export default function NavbarMobilePrimaryMenu() {
16
16
  const items = useNavbarItems();
17
17
  return (
18
18
  <div>
19
- <div className="relative flex flex-row justify-center items-stretch w-full max-w-full mb-10">
19
+ <div className="relative grid grid-cols-2 gap-2 items-stretch w-full max-w-full mb-10">
20
20
  <a
21
- className="btn btn-primary shadow-none border text-white btn-sm px-6 py-1 text-[.9rem] mr-2 flex-1"
21
+ className="btn btn-primary w-full"
22
22
  href="https://cloud.seqera.io/oauth/login/auth0">
23
23
  Log In
24
24
  </a>
25
25
  <a
26
- className="btn btn-outline shadow-none btn-sm border flex-1 px-6 py-1 text-[.9rem] hover:border-black hover:bg-black bg-white text-black dark:text-black hover:text-white"
26
+ className="btn btn-outline w-full"
27
27
  href="https://cloud.seqera.io/oauth/login/auth0">
28
28
  Sign Up
29
29
  </a>
@@ -60,8 +60,7 @@ function LinkItem({to, children}) {
60
60
  'flex items-center gap-2 px-2 rounded-md h-[37px] mb-1',
61
61
  'text-sm text-gray-900 dark:text-gray-100',
62
62
  'transition-all duration-500 ease-in-out',
63
- 'hover:bg-nextflow-100 dark:hover:bg-gray-800 hover:no-underline',
64
- isActive(href) && 'bg-blue-50 dark:bg-blue-900/30',
63
+ 'hover:bg-gray-100 dark:hover:bg-gray-800 hover:no-underline',
65
64
  )}>
66
65
  {children}
67
66
  </Link>
@@ -9,7 +9,7 @@ export default function DefaultNavbarItemDesktop({
9
9
  const element = (
10
10
  <NavbarNavLink
11
11
  className={clsx(
12
- isDropdownItem ? 'dropdown__link' : 'navbar__link mr-8',
12
+ isDropdownItem ? 'dropdown__link' : 'navbar__link mr-8 font-normal',
13
13
  className,
14
14
  )}
15
15
  isDropdownLink={isDropdownItem}
@@ -26,9 +26,7 @@ export default function NotFoundContent({className}) {
26
26
  looking for does not exist.
27
27
  </Translate>
28
28
  </p>
29
- <a
30
- className="btn btn-secondary shadow-none border text-black no-underline!"
31
- href="/">
29
+ <a className="btn btn-primary py-1.5! px-4!" href="/">
32
30
  Back to docs homepage
33
31
  </a>
34
32
  </div>
@@ -7,7 +7,7 @@ import {
7
7
  import TOCItemTree from '@theme/TOCItems/Tree';
8
8
  export default function TOCItems({
9
9
  toc,
10
- className = 'table-of-contents table-of-contents__left-border border-l border-base-content/20 leading-7',
10
+ className = 'table-of-contents table-of-contents__left-border border-l border-black/20 dark:border-white/20 leading-7',
11
11
  linkClassName = 'table-of-contents__link',
12
12
  linkActiveClassName = undefined,
13
13
  minHeadingLevel: minHeadingLevelOption,
@@ -17,8 +17,19 @@ export default function prismIncludeLanguages(PrismObject) {
17
17
  // eslint-disable-next-line global-require
18
18
  require('prismjs/components/prism-markup-templating.js');
19
19
  }
20
- // eslint-disable-next-line global-require, import/no-dynamic-require
21
- require(`prismjs/components/prism-${lang}`);
20
+ // Load custom languages from the local languages directory
21
+ if (lang === 'nextflow') {
22
+ // Nextflow requires Groovy as a dependency
23
+ if (!additionalLanguages.includes('groovy')) {
24
+ // eslint-disable-next-line global-require
25
+ require('prismjs/components/prism-groovy');
26
+ }
27
+ // eslint-disable-next-line global-require
28
+ require('../languages/prism-nextflow.js');
29
+ } else {
30
+ // Fall back to standard PrismJS components
31
+ require(`prismjs/components/prism-${lang}`);
32
+ }
22
33
  });
23
34
  // Clean up and eventually restore former globalThis.Prism object (if any)
24
35
  delete globalThis.Prism;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seqera/docusaurus-theme-seqera",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Seqera docs theme for Docusaurus",
5
5
  "author": "Seqera docs team <education@seqera.io>",
6
6
  "license": "Apache-2.0",
@@ -50,7 +50,6 @@
50
50
  "@types/nprogress": "^0.2.0",
51
51
  "@types/prismjs": "^1.26.0",
52
52
  "@types/rtlcss": "^3.5.1",
53
- "daisyui": "^5.5.5",
54
53
  "fs-extra": "^11.1.1",
55
54
  "npm-run-all": "^4.1.5",
56
55
  "react-test-renderer": "^18.0.0",
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@seqera/docusaurus-theme-seqera",
3
+ "version": "1.0.6",
4
+ "description": "Seqera docs theme for Docusaurus",
5
+ "author": "Seqera docs team <education@seqera.io>",
6
+ "license": "Apache-2.0",
7
+ "main": "lib/index.js",
8
+ "types": "src/theme-seqera.d.ts",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc --build && node ../../scripts/copyUntypedFiles.js && prettier --config ../../.prettierrc --write \"lib/theme/**/*.js\"",
14
+ "watch": "run-p -c copy:watch build:watch",
15
+ "build:watch": "tsc --build --watch",
16
+ "copy:watch": "node ../../scripts/copyUntypedFiles.js --watch"
17
+ },
18
+ "dependencies": {
19
+ "@docusaurus/core": "3.9.2",
20
+ "@docusaurus/logger": "3.9.2",
21
+ "@docusaurus/mdx-loader": "3.9.2",
22
+ "@docusaurus/module-type-aliases": "3.9.2",
23
+ "@docusaurus/plugin-content-blog": "3.9.2",
24
+ "@docusaurus/plugin-content-docs": "3.9.2",
25
+ "@docusaurus/plugin-content-pages": "3.9.2",
26
+ "@docusaurus/theme-common": "3.9.2",
27
+ "@docusaurus/theme-translations": "3.9.2",
28
+ "@docusaurus/types": "3.9.2",
29
+ "@docusaurus/utils": "3.9.2",
30
+ "@docusaurus/utils-common": "3.9.2",
31
+ "@docusaurus/utils-validation": "3.9.2",
32
+ "@mdx-js/react": "^3.0.0",
33
+ "@tailwindcss/postcss": "^4.1.17",
34
+ "clsx": "^2.0.0",
35
+ "infima": "0.2.0-alpha.45",
36
+ "lodash": "^4.17.21",
37
+ "nprogress": "^0.2.0",
38
+ "postcss": "^8.5.6",
39
+ "prism-react-renderer": "^2.3.0",
40
+ "prismjs": "^1.29.0",
41
+ "raw-loader": "^4.0.2",
42
+ "react-router-dom": "^5.3.4",
43
+ "rtlcss": "^4.1.0",
44
+ "tailwindcss": "^4.1.17",
45
+ "tslib": "^2.6.0",
46
+ "utility-types": "^3.10.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/lodash": "^4.17.0",
50
+ "@types/nprogress": "^0.2.0",
51
+ "@types/prismjs": "^1.26.0",
52
+ "@types/rtlcss": "^3.5.1",
53
+ "daisyui": "^5.5.5",
54
+ "fs-extra": "^11.1.1",
55
+ "npm-run-all": "^4.1.5",
56
+ "react-test-renderer": "^18.0.0",
57
+ "utility-types": "^3.10.0"
58
+ },
59
+ "peerDependencies": {
60
+ "react": "^18.0.0 || ^19.0.0",
61
+ "react-dom": "^18.0.0 || ^19.0.0"
62
+ },
63
+ "engines": {
64
+ "node": ">=20.0"
65
+ }
66
+ }
package/src/index.ts CHANGED
@@ -84,6 +84,7 @@ export default function themeSeqera(
84
84
  './nprogress',
85
85
  './styles/typography.css',
86
86
  './main-styles.css',
87
+ './styles/buttons.css',
87
88
  './styles/api.css',
88
89
  './styles/search.css',
89
90
  './styles/admonition-alerts.css',
@@ -0,0 +1,24 @@
1
+ (function (Prism) {
2
+ Prism.languages.nextflow = Prism.languages.extend('groovy', {
3
+ 'keyword': /\b(?:as|assert|boolean|byte|catch|char|def|double|else|enum|float|if|in|instanceof|int|long|new|return|short|throw|try|void|process|workflow|input|output|exec|shell|script|stub|include|from)\b/,
4
+ 'string': {
5
+ pattern: /"""(?:[^\\]|\\[\s\S])*?"""|'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'|"(?:\\.|[^\\"\r\n])*"/,
6
+ greedy: true
7
+ },
8
+ 'operator': {
9
+ pattern: /(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,
10
+ lookbehind: true
11
+ },
12
+ 'punctuation': /\.+|[{}[\];(),:$]/
13
+ });
14
+
15
+ // Add support for Nextflow-specific directives
16
+ Prism.languages.insertBefore('nextflow', 'keyword', {
17
+ 'directive': {
18
+ pattern: /(?:^|\n)\s*(?:process|workflow|exec|shell|script|stub|container|conda|module|include|from|publishDir|input|output):/,
19
+ lookbehind: true,
20
+ alias: 'keyword'
21
+ }
22
+ });
23
+
24
+ }(Prism));