Design system.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

125 rader
3.2 KiB

  1. import type {GetStaticProps, NextPage} from 'next';
  2. import * as React from 'react'
  3. import {useRouter} from 'next/router';
  4. import ReactMarkdown from 'react-markdown';
  5. import {Layouts} from '@tesseract-design/viewfinder-react';
  6. import {LinkButton} from '@tesseract-design/web-navigation-react';
  7. import Link from 'next/link';
  8. import {getDocs, getMainReadmeFileContents, getPlatforms, PLATFORMS} from '@/utils/data';
  9. export interface Props {
  10. markdown: string;
  11. docsPages: any;
  12. platforms: string[];
  13. }
  14. const IndexPage: NextPage<Props> = ({
  15. markdown,
  16. docsPages,
  17. platforms,
  18. }) => {
  19. const router = useRouter();
  20. return (
  21. <Layouts.Basic.Root>
  22. <Layouts.Basic.ContentContainer>
  23. <ReactMarkdown
  24. className="my-12 leading-loose"
  25. components={{
  26. ul: ({node, ordered: _ordered, ...props}) => (
  27. <ul
  28. {...props}
  29. className="list-disc pl-4"
  30. />
  31. ),
  32. li: ({node, ...props}) => (
  33. <li
  34. {...props}
  35. className="list-item pl-4"
  36. />
  37. ),
  38. }}
  39. >
  40. {markdown}
  41. </ReactMarkdown>
  42. <nav>
  43. <h1>Platforms</h1>
  44. <div className="grid xs:grid-cols-2 gap-4">
  45. {platforms.map((platformName) => {
  46. const platform = PLATFORMS[platformName as keyof typeof PLATFORMS];
  47. return (
  48. <div
  49. key={platformName}
  50. >
  51. <Link href={platform.href} passHref legacyBehavior>
  52. <LinkButton
  53. href={platform.href}
  54. menuItem
  55. block
  56. variant="outline"
  57. >
  58. {platform.label}
  59. </LinkButton>
  60. </Link>
  61. </div>
  62. )
  63. })}
  64. </div>
  65. </nav>
  66. <nav>
  67. <h1>Docs</h1>
  68. <div className="grid xs:grid-cols-2 gap-4">
  69. {docsPages.map((page) => (
  70. <div
  71. key={page.id}
  72. >
  73. <Link href={page.href} passHref legacyBehavior>
  74. <LinkButton
  75. href={page.href}
  76. menuItem
  77. block
  78. variant="outline"
  79. >
  80. {page.label}
  81. </LinkButton>
  82. </Link>
  83. </div>
  84. ))}
  85. </div>
  86. </nav>
  87. </Layouts.Basic.ContentContainer>
  88. </Layouts.Basic.Root>
  89. );
  90. }
  91. export const getStaticProps: GetStaticProps = async () => {
  92. const props = {} as Record<string, unknown>;
  93. props.markdown = await getMainReadmeFileContents('README.md') ?? null;
  94. props.docsPages = await getDocs({
  95. deriveHrefFromFilename: d => `/docs/${
  96. d
  97. .replace(/\.md/i, '')
  98. .split('-')
  99. .slice(1)
  100. .join('-')
  101. }`,
  102. deriveLabelFromFilename: d => (
  103. d
  104. .split('-')
  105. .slice(1)
  106. .map((dd) => dd.slice(0, 1).toUpperCase() + dd.slice(1))
  107. .join(' ')
  108. .replace(/\.md/i, '')
  109. ),
  110. });
  111. props.platforms = await getPlatforms();
  112. return {
  113. props,
  114. };
  115. };
  116. export default IndexPage