Wrapped lines that are too long
This commit is contained in:
		
							parent
							
								
									0591fa22d4
								
							
						
					
					
						commit
						e17dbc14a0
					
				| @ -50,6 +50,7 @@ module.exports = { | |||||||
|     "max-classes-per-file": ["error", 1], |     "max-classes-per-file": ["error", 1], | ||||||
|     // "max-depth": ["warn", 4],
 |     // "max-depth": ["warn", 4],
 | ||||||
|     // "max-lines": "warn",
 |     // "max-lines": "warn",
 | ||||||
|  |     "max-len": ["warn", { "code": 100 }], | ||||||
|     // "max-lines-per-function": "warn",
 |     // "max-lines-per-function": "warn",
 | ||||||
|     // "max-nested-callbacks": "warn",
 |     // "max-nested-callbacks": "warn",
 | ||||||
|     // "max-params": "warn",
 |     // "max-params": "warn",
 | ||||||
|  | |||||||
| @ -151,7 +151,9 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
|         {...handlers} |         {...handlers} | ||||||
|         className={`fixed inset-0 touch-pan-y p-0 m-0 bg-light text-black grid [grid-template-areas:'main_sub_content'] ${gridCol} mobile:grid-cols-[1fr] mobile:grid-rows-[1fr_5rem] mobile:[grid-template-areas:'content''navbar']`} |         className={`fixed inset-0 touch-pan-y p-0 m-0 bg-light text-black grid
 | ||||||
|  |         [grid-template-areas:'main_sub_content'] ${gridCol} mobile:grid-cols-[1fr] | ||||||
|  |         mobile:grid-rows-[1fr_5rem] mobile:[grid-template-areas:'content''navbar']`}
 | ||||||
|       > |       > | ||||||
|         <Head> |         <Head> | ||||||
|           <title>{`${titlePrefix} - ${ogTitle}`}</title> |           <title>{`${titlePrefix} - ${ogTitle}`}</title> | ||||||
| @ -183,7 +185,8 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
| 
 | 
 | ||||||
|         {/* Background when navbar is opened */} |         {/* Background when navbar is opened */} | ||||||
|         <div |         <div | ||||||
|           className={`[grid-area:content] mobile:z-10 absolute inset-0 transition-[backdrop-filter] duration-500 ${ |           className={`[grid-area:content] mobile:z-10 absolute
 | ||||||
|  |           inset-0 transition-[backdrop-filter] duration-500 ${ | ||||||
|             (appLayout.mainPanelOpen || appLayout.subPanelOpen) && isMobile |             (appLayout.mainPanelOpen || appLayout.subPanelOpen) && isMobile | ||||||
|               ? "[backdrop-filter:blur(2px)]" |               ? "[backdrop-filter:blur(2px)]" | ||||||
|               : "pointer-events-none touch-none " |               : "pointer-events-none touch-none " | ||||||
| @ -212,7 +215,10 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
|             contentPanel |             contentPanel | ||||||
|           ) : ( |           ) : ( | ||||||
|             <div className="grid place-content-center h-full"> |             <div className="grid place-content-center h-full"> | ||||||
|               <div className="text-dark border-dark border-2 border-dotted rounded-2xl p-8 grid grid-flow-col place-items-center gap-9 opacity-40"> |               <div | ||||||
|  |                 className="text-dark border-dark border-2 border-dotted rounded-2xl | ||||||
|  |               p-8 grid grid-flow-col place-items-center gap-9 opacity-40" | ||||||
|  |               > | ||||||
|                 <p className="text-4xl">❮</p> |                 <p className="text-4xl">❮</p> | ||||||
|                 <p className="text-2xl w-64">{langui.select_option_sidebar}</p> |                 <p className="text-2xl w-64">{langui.select_option_sidebar}</p> | ||||||
|               </div> |               </div> | ||||||
| @ -223,7 +229,10 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
|         {/* Sub panel */} |         {/* Sub panel */} | ||||||
|         {subPanel && ( |         {subPanel && ( | ||||||
|           <div |           <div | ||||||
|             className={`[grid-area:sub] mobile:[grid-area:content] mobile:z-10 mobile:w-[90%] mobile:justify-self-end border-r-[1px] mobile:border-r-0 mobile:border-l-[1px] border-black border-dotted overflow-y-scroll webkit-scrollbar:w-0 [scrollbar-width:none] transition-transform duration-300 bg-light texture-paper-dots
 |             className={`[grid-area:sub] mobile:[grid-area:content] mobile:z-10 mobile:w-[90%]
 | ||||||
|  |             mobile:justify-self-end border-r-[1px] mobile:border-r-0 mobile:border-l-[1px] | ||||||
|  |             border-black border-dotted overflow-y-scroll webkit-scrollbar:w-0 | ||||||
|  |             [scrollbar-width:none] transition-transform duration-300 bg-light texture-paper-dots | ||||||
|           ${ |           ${ | ||||||
|             turnSubIntoContent |             turnSubIntoContent | ||||||
|               ? "mobile:border-l-0 mobile:w-full" |               ? "mobile:border-l-0 mobile:w-full" | ||||||
| @ -236,14 +245,21 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
| 
 | 
 | ||||||
|         {/* Main panel */} |         {/* Main panel */} | ||||||
|         <div |         <div | ||||||
|           className={`[grid-area:main] mobile:[grid-area:content] mobile:z-10 mobile:w-[90%] mobile:justify-self-start border-r-[1px] border-black border-dotted overflow-y-scroll webkit-scrollbar:w-0 [scrollbar-width:none] transition-transform duration-300 bg-light texture-paper-dots
 |           className={`[grid-area:main] mobile:[grid-area:content] mobile:z-10 mobile:w-[90%]
 | ||||||
|         ${appLayout.mainPanelOpen ? "" : "mobile:-translate-x-full"}`}
 |           mobile:justify-self-start border-r-[1px] border-black border-dotted overflow-y-scroll | ||||||
|  |           webkit-scrollbar:w-0 [scrollbar-width:none] transition-transform duration-300 bg-light | ||||||
|  |           texture-paper-dots ${ | ||||||
|  |             appLayout.mainPanelOpen ? "" : "mobile:-translate-x-full" | ||||||
|  |           }`}
 | ||||||
|         > |         > | ||||||
|           <MainPanel langui={langui} /> |           <MainPanel langui={langui} /> | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|         {/* Navbar */} |         {/* Navbar */} | ||||||
|         <div className="[grid-area:navbar] border-t-[1px] border-black border-dotted grid grid-cols-[5rem_1fr_5rem] place-items-center desktop:hidden bg-light texture-paper-dots"> |         <div | ||||||
|  |           className="[grid-area:navbar] border-t-[1px] border-black border-dotted grid | ||||||
|  |           grid-cols-[5rem_1fr_5rem] place-items-center desktop:hidden bg-light texture-paper-dots" | ||||||
|  |         > | ||||||
|           <span |           <span | ||||||
|             className="material-icons mt-[.1em] cursor-pointer" |             className="material-icons mt-[.1em] cursor-pointer" | ||||||
|             onClick={() => { |             onClick={() => { | ||||||
| @ -285,7 +301,10 @@ export default function AppLayout(props: Immutable<Props>): JSX.Element { | |||||||
|         > |         > | ||||||
|           <h2 className="text-2xl">{langui.settings}</h2> |           <h2 className="text-2xl">{langui.settings}</h2> | ||||||
| 
 | 
 | ||||||
|           <div className="mt-4 grid gap-16 justify-items-center text-center desktop:grid-cols-[auto_auto]"> |           <div | ||||||
|  |             className="mt-4 grid gap-16 justify-items-center | ||||||
|  |             text-center desktop:grid-cols-[auto_auto]" | ||||||
|  |           > | ||||||
|             {router.locales && ( |             {router.locales && ( | ||||||
|               <div> |               <div> | ||||||
|                 <h3 className="text-xl">{langui.languages}</h3> |                 <h3 className="text-xl">{langui.languages}</h3> | ||||||
|  | |||||||
| @ -8,7 +8,9 @@ interface Props { | |||||||
| export default function Chip(props: Immutable<Props>): JSX.Element { | export default function Chip(props: Immutable<Props>): JSX.Element { | ||||||
|   return ( |   return ( | ||||||
|     <div |     <div | ||||||
|       className={`grid place-content-center place-items-center text-xs pb-[0.14rem] whitespace-nowrap px-1.5 border-[1px] rounded-full opacity-70 transition-[color,_opacity,_border-color] hover:opacity-100 ${props.className}`} |       className={`grid place-content-center place-items-center text-xs pb-[0.14rem]
 | ||||||
|  |       whitespace-nowrap px-1.5 border-[1px] rounded-full opacity-70 | ||||||
|  |       transition-[color,_opacity,_border-color] hover:opacity-100 ${props.className}`}
 | ||||||
|     > |     > | ||||||
|       {props.children} |       {props.children} | ||||||
|     </div> |     </div> | ||||||
|  | |||||||
| @ -20,7 +20,9 @@ export default function Select(props: Immutable<Props>): JSX.Element { | |||||||
|       } ${props.className}`}
 |       } ${props.className}`}
 | ||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
|         className={`outline outline-mid outline-2 outline-offset-[-2px] hover:outline-[transparent] bg-light rounded-[1em] p-1 grid grid-flow-col grid-cols-[1fr_auto_auto] place-items-center cursor-pointer hover:bg-mid transition-all ${ |         className={`outline outline-mid outline-2 outline-offset-[-2px] hover:outline-[transparent]
 | ||||||
|  |         bg-light rounded-[1em] p-1 grid grid-flow-col grid-cols-[1fr_auto_auto] place-items-center | ||||||
|  |         cursor-pointer hover:bg-mid transition-all ${ | ||||||
|           opened && "outline-[transparent] rounded-b-none" |           opened && "outline-[transparent] rounded-b-none" | ||||||
|         }`}
 |         }`}
 | ||||||
|       > |       > | ||||||
| @ -48,7 +50,8 @@ export default function Select(props: Immutable<Props>): JSX.Element { | |||||||
|           <> |           <> | ||||||
|             {index !== props.state && ( |             {index !== props.state && ( | ||||||
|               <div |               <div | ||||||
|                 className="bg-light hover:bg-mid transition-colors cursor-pointer p-1 last-of-type:rounded-b-[1em]" |                 className="bg-light hover:bg-mid transition-colors | ||||||
|  |                 cursor-pointer p-1 last-of-type:rounded-b-[1em]" | ||||||
|                 key={index} |                 key={index} | ||||||
|                 id={option} |                 id={option} | ||||||
|                 onClick={() => { |                 onClick={() => { | ||||||
|  | |||||||
| @ -10,15 +10,17 @@ interface Props { | |||||||
| export default function Switch(props: Immutable<Props>): JSX.Element { | export default function Switch(props: Immutable<Props>): JSX.Element { | ||||||
|   return ( |   return ( | ||||||
|     <div |     <div | ||||||
|       className={`h-6 w-12 rounded-full border-2 border-mid grid transition-colors relative cursor-pointer ${ |       className={`h-6 w-12 rounded-full border-2 border-mid grid
 | ||||||
|         props.className |       transition-colors relative cursor-pointer ${props.className} ${ | ||||||
|       } ${props.state ? "bg-mid" : "bg-light"}`}
 |         props.state ? "bg-mid" : "bg-light" | ||||||
|  |       }`}
 | ||||||
|       onClick={() => { |       onClick={() => { | ||||||
|         props.setState(!props.state); |         props.setState(!props.state); | ||||||
|       }} |       }} | ||||||
|     > |     > | ||||||
|       <div |       <div | ||||||
|         className={`bg-dark aspect-square rounded-full absolute top-0 bottom-0 left-0 transition-transform ${ |         className={`bg-dark aspect-square rounded-full absolute
 | ||||||
|  |         top-0 bottom-0 left-0 transition-transform ${ | ||||||
|           props.state && "translate-x-[115%]" |           props.state && "translate-x-[115%]" | ||||||
|         }`}
 |         }`}
 | ||||||
|       ></div> |       ></div> | ||||||
|  | |||||||
| @ -33,7 +33,8 @@ export default function ContentLine(props: Immutable<Props>): JSX.Element { | |||||||
|           opened && "bg-mid shadow-inner-sm shadow-shade h-auto py-3 my-2" |           opened && "bg-mid shadow-inner-sm shadow-shade h-auto py-3 my-2" | ||||||
|         }`}
 |         }`}
 | ||||||
|       > |       > | ||||||
|         <div className="grid gap-4 place-items-center grid-cols-[auto_auto_1fr_auto_12ch] thin:grid-cols-[auto_auto_1fr_auto]"> |         <div className="grid gap-4 place-items-center | ||||||
|  |         grid-cols-[auto_auto_1fr_auto_12ch] thin:grid-cols-[auto_auto_1fr_auto]"> | ||||||
|           <a> |           <a> | ||||||
|             <h3 className="cursor-pointer" onClick={() => setOpened(!opened)}> |             <h3 className="cursor-pointer" onClick={() => setOpened(!opened)}> | ||||||
|               {content.attributes.content?.data?.attributes?.titles?.[0] |               {content.attributes.content?.data?.attributes?.titles?.[0] | ||||||
|  | |||||||
| @ -101,7 +101,10 @@ export default function ScanSet(props: Immutable<Props>): JSX.Element { | |||||||
|     <> |     <> | ||||||
|       {selectedScan && ( |       {selectedScan && ( | ||||||
|         <div> |         <div> | ||||||
|           <div className="flex flex-row flex-wrap place-items-center gap-6 text-base pt-10 first-of-type:pt-0"> |           <div | ||||||
|  |             className="flex flex-row flex-wrap place-items-center | ||||||
|  |           gap-6 text-base pt-10 first-of-type:pt-0" | ||||||
|  |           > | ||||||
|             <h2 id={slug} className="text-2xl"> |             <h2 id={slug} className="text-2xl"> | ||||||
|               {title} |               {title} | ||||||
|             </h2> |             </h2> | ||||||
| @ -198,11 +201,16 @@ export default function ScanSet(props: Immutable<Props>): JSX.Element { | |||||||
|             )} |             )} | ||||||
|           </div> |           </div> | ||||||
| 
 | 
 | ||||||
|           <div className="grid gap-8 items-end mobile:grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(10rem,1fr))] pb-12 border-b-[3px] border-dotted last-of-type:border-0"> |           <div | ||||||
|  |             className="grid gap-8 items-end mobile:grid-cols-2 | ||||||
|  |             desktop:grid-cols-[repeat(auto-fill,_minmax(10rem,1fr))] | ||||||
|  |             pb-12 border-b-[3px] border-dotted last-of-type:border-0" | ||||||
|  |           > | ||||||
|             {selectedScan.pages?.data.map((page, index) => ( |             {selectedScan.pages?.data.map((page, index) => ( | ||||||
|               <div |               <div | ||||||
|                 key={page.id} |                 key={page.id} | ||||||
|                 className="drop-shadow-shade-lg hover:scale-[1.02] cursor-pointer transition-transform" |                 className="drop-shadow-shade-lg hover:scale-[1.02] | ||||||
|  |                 cursor-pointer transition-transform" | ||||||
|                 onClick={() => { |                 onClick={() => { | ||||||
|                   const images: string[] = []; |                   const images: string[] = []; | ||||||
|                   selectedScan.pages?.data.map((image) => { |                   selectedScan.pages?.data.map((image) => { | ||||||
|  | |||||||
| @ -66,7 +66,10 @@ export default function ScanSetCover(props: Immutable<Props>): JSX.Element { | |||||||
|       <> |       <> | ||||||
|         {selectedScan && ( |         {selectedScan && ( | ||||||
|           <div> |           <div> | ||||||
|             <div className="flex flex-row flex-wrap place-items-center gap-6 text-base pt-10 first-of-type:pt-0"> |             <div | ||||||
|  |               className="flex flex-row flex-wrap place-items-center | ||||||
|  |               gap-6 text-base pt-10 first-of-type:pt-0" | ||||||
|  |             > | ||||||
|               <h2 id={"cover"} className="text-2xl"> |               <h2 id={"cover"} className="text-2xl"> | ||||||
|                 {"Cover"} |                 {"Cover"} | ||||||
|               </h2> |               </h2> | ||||||
| @ -151,11 +154,16 @@ export default function ScanSetCover(props: Immutable<Props>): JSX.Element { | |||||||
|                 )} |                 )} | ||||||
|             </div> |             </div> | ||||||
| 
 | 
 | ||||||
|             <div className="grid gap-8 items-end mobile:grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(10rem,1fr))] pb-12 border-b-[3px] border-dotted last-of-type:border-0"> |             <div | ||||||
|  |               className="grid gap-8 items-end mobile:grid-cols-2 | ||||||
|  |               desktop:grid-cols-[repeat(auto-fill,_minmax(10rem,1fr))] | ||||||
|  |               pb-12 border-b-[3px] border-dotted last-of-type:border-0" | ||||||
|  |             > | ||||||
|               {coverImages.map((image, index) => ( |               {coverImages.map((image, index) => ( | ||||||
|                 <div |                 <div | ||||||
|                   key={image.url} |                   key={image.url} | ||||||
|                   className="drop-shadow-shade-lg hover:scale-[1.02] cursor-pointer transition-transform" |                   className="drop-shadow-shade-lg hover:scale-[1.02] | ||||||
|  |                   cursor-pointer transition-transform" | ||||||
|                   onClick={() => { |                   onClick={() => { | ||||||
|                     const imgs: string[] = []; |                     const imgs: string[] = []; | ||||||
|                     coverImages.map((img) => { |                     coverImages.map((img) => { | ||||||
|  | |||||||
| @ -17,11 +17,15 @@ export default function NavOption(props: Immutable<Props>): JSX.Element { | |||||||
|   const router = useRouter(); |   const router = useRouter(); | ||||||
|   const isActive = router.asPath.startsWith(props.url); |   const isActive = router.asPath.startsWith(props.url); | ||||||
|   const divActive = "bg-mid shadow-inner-sm shadow-shade"; |   const divActive = "bg-mid shadow-inner-sm shadow-shade"; | ||||||
|  | 
 | ||||||
|   const border = |   const border = | ||||||
|     "outline outline-mid outline-2 outline-offset-[-2px] hover:outline-[transparent]"; |     "outline outline-mid outline-2 outline-offset-[-2px] hover:outline-[transparent]"; | ||||||
|   const divCommon = `gap-x-5 w-full rounded-2xl cursor-pointer p-4 hover:bg-mid hover:shadow-inner-sm hover:shadow-shade hover:active:shadow-inner hover:active:shadow-shade transition-all ${ | 
 | ||||||
|     props.border ? border : "" |   const divCommon = `gap-x-5 w-full rounded-2xl cursor-pointer p-4 hover:bg-mid
 | ||||||
|   } ${isActive ? divActive : ""}`;
 |   hover:shadow-inner-sm hover:shadow-shade hover:active:shadow-inner | ||||||
|  |   hover:active:shadow-shade transition-all ${props.border ? border : ""} ${ | ||||||
|  |     isActive ? divActive : "" | ||||||
|  |   }`;
 | ||||||
| 
 | 
 | ||||||
|   return ( |   return ( | ||||||
|     <ToolTip |     <ToolTip | ||||||
|  | |||||||
| @ -3,11 +3,11 @@ import Button from "components/Inputs/Button"; | |||||||
| import NavOption from "components/PanelComponents/NavOption"; | import NavOption from "components/PanelComponents/NavOption"; | ||||||
| import ToolTip from "components/ToolTip"; | import ToolTip from "components/ToolTip"; | ||||||
| import { useAppLayout } from "contexts/AppLayoutContext"; | import { useAppLayout } from "contexts/AppLayoutContext"; | ||||||
|  | import { AppStaticProps } from "graphql/getAppStaticProps"; | ||||||
|  | import { Immutable } from "helpers/types"; | ||||||
| import { useMediaDesktop } from "hooks/useMediaQuery"; | import { useMediaDesktop } from "hooks/useMediaQuery"; | ||||||
| import Markdown from "markdown-to-jsx"; | import Markdown from "markdown-to-jsx"; | ||||||
| import Link from "next/link"; | import Link from "next/link"; | ||||||
| import { AppStaticProps } from "graphql/getAppStaticProps"; |  | ||||||
| import { Immutable } from "helpers/types"; |  | ||||||
| 
 | 
 | ||||||
| interface Props { | interface Props { | ||||||
|   langui: AppStaticProps["langui"]; |   langui: AppStaticProps["langui"]; | ||||||
| @ -20,7 +20,8 @@ export default function MainPanel(props: Immutable<Props>): JSX.Element { | |||||||
| 
 | 
 | ||||||
|   return ( |   return ( | ||||||
|     <div |     <div | ||||||
|       className={`flex flex-col justify-center content-start gap-y-2 justify-items-center text-center p-8 ${ |       className={`flex flex-col justify-center content-start
 | ||||||
|  |       gap-y-2 justify-items-center text-center p-8 ${ | ||||||
|         appLayout.mainPanelReduced && isDesktop && "px-4" |         appLayout.mainPanelReduced && isDesktop && "px-4" | ||||||
|       }`}
 |       }`}
 | ||||||
|     > |     > | ||||||
| @ -45,7 +46,9 @@ export default function MainPanel(props: Immutable<Props>): JSX.Element { | |||||||
|               onClick={() => appLayout.setMainPanelOpen(false)} |               onClick={() => appLayout.setMainPanelOpen(false)} | ||||||
|               className={`${ |               className={`${ | ||||||
|                 appLayout.mainPanelReduced && isDesktop ? "w-12" : "w-1/2" |                 appLayout.mainPanelReduced && isDesktop ? "w-12" : "w-1/2" | ||||||
|               } aspect-square cursor-pointer transition-colors [mask:url('/icons/accords.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black hover:bg-dark mb-4`}
 |               } aspect-square cursor-pointer transition-colors [mask:url('/icons/accords.svg')] | ||||||
|  |               ![mask-size:contain] ![mask-repeat:no-repeat] | ||||||
|  |               ![mask-position:center] bg-black hover:bg-dark mb-4`}
 | ||||||
|             ></div> |             ></div> | ||||||
|           </Link> |           </Link> | ||||||
| 
 | 
 | ||||||
| @ -219,10 +222,22 @@ export default function MainPanel(props: Immutable<Props>): JSX.Element { | |||||||
|           className="transition-[filter] colorize-black hover:colorize-dark" |           className="transition-[filter] colorize-black hover:colorize-dark" | ||||||
|           href="https://creativecommons.org/licenses/by-sa/4.0/" |           href="https://creativecommons.org/licenses/by-sa/4.0/" | ||||||
|         > |         > | ||||||
|           <div className="mt-4 mb-8 grid grid-flow-col place-content-center gap-1 hover:[--theme-color-black:var(--theme-color-dark)]"> |           <div | ||||||
|             <div className="w-6 aspect-square [mask:url('/icons/creative-commons-brands.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" /> |             className="mt-4 mb-8 grid grid-flow-col place-content-center gap-1 | ||||||
|             <div className="w-6 aspect-square [mask:url('/icons/creative-commons-by-brands.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" /> |             hover:[--theme-color-black:var(--theme-color-dark)]" | ||||||
|             <div className="w-6 aspect-square [mask:url('/icons/creative-commons-sa-brands.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" /> |           > | ||||||
|  |             <div | ||||||
|  |               className="w-6 aspect-square [mask:url('/icons/creative-commons-brands.svg')] | ||||||
|  |               ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" | ||||||
|  |             /> | ||||||
|  |             <div | ||||||
|  |               className="w-6 aspect-square [mask:url('/icons/creative-commons-by-brands.svg')] | ||||||
|  |               ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" | ||||||
|  |             /> | ||||||
|  |             <div | ||||||
|  |               className="w-6 aspect-square [mask:url('/icons/creative-commons-sa-brands.svg')] | ||||||
|  |               ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] bg-black" | ||||||
|  |             /> | ||||||
|           </div> |           </div> | ||||||
|         </a> |         </a> | ||||||
|         <p> |         <p> | ||||||
| @ -233,14 +248,18 @@ export default function MainPanel(props: Immutable<Props>): JSX.Element { | |||||||
|         <div className="mt-12 mb-4 grid h-4 grid-flow-col place-content-center gap-8"> |         <div className="mt-12 mb-4 grid h-4 grid-flow-col place-content-center gap-8"> | ||||||
|           <a |           <a | ||||||
|             aria-label="Browse our GitHub repository, which include this website source code" |             aria-label="Browse our GitHub repository, which include this website source code" | ||||||
|             className="transition-colors [mask:url('/icons/github-brands.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] w-10 aspect-square bg-black hover:bg-dark" |             className="transition-colors [mask:url('/icons/github-brands.svg')] | ||||||
|  |             ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] | ||||||
|  |             w-10 aspect-square bg-black hover:bg-dark" | ||||||
|             href="https://github.com/Accords-Library" |             href="https://github.com/Accords-Library" | ||||||
|             target="_blank" |             target="_blank" | ||||||
|             rel="noopener noreferrer" |             rel="noopener noreferrer" | ||||||
|           ></a> |           ></a> | ||||||
|           <a |           <a | ||||||
|             aria-label="Join our Discord server!" |             aria-label="Join our Discord server!" | ||||||
|             className="transition-colors [mask:url('/icons/discord-brands.svg')] ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] w-10 aspect-square bg-black hover:bg-dark" |             className="transition-colors [mask:url('/icons/discord-brands.svg')] | ||||||
|  |             ![mask-size:contain] ![mask-repeat:no-repeat] ![mask-position:center] | ||||||
|  |             w-10 aspect-square bg-black hover:bg-dark" | ||||||
|             href="/discord" |             href="/discord" | ||||||
|             target="_blank" |             target="_blank" | ||||||
|             rel="noopener noreferrer" |             rel="noopener noreferrer" | ||||||
|  | |||||||
| @ -31,8 +31,9 @@ export default function PreviewLine(props: Immutable<Props>): JSX.Element { | |||||||
|   return ( |   return ( | ||||||
|     <Link href={href} passHref> |     <Link href={href} passHref> | ||||||
|       <div |       <div | ||||||
|         className="drop-shadow-shade-xl rounded-md bg-light cursor-pointer hover:scale-[1.02] |         className="drop-shadow-shade-xl rounded-md bg-light cursor-pointer | ||||||
|          transition-transform flex flex-row gap-4 overflow-hidden place-items-center pr-4 w-full h-36" |         hover:scale-[1.02] transition-transform flex flex-row gap-4 | ||||||
|  |         overflow-hidden place-items-center pr-4 w-full h-36" | ||||||
|       > |       > | ||||||
|         {thumbnail ? ( |         {thumbnail ? ( | ||||||
|           <div className="h-full aspect-[3/2]"> |           <div className="h-full aspect-[3/2]"> | ||||||
|  | |||||||
| @ -51,10 +51,7 @@ export default function RecorderChip(props: Immutable<Props>): JSX.Element { | |||||||
|               )} |               )} | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
| 
 |  | ||||||
|           {recorder.bio?.[0] && <Markdawn text={recorder.bio[0].bio ?? ""} />} |           {recorder.bio?.[0] && <Markdawn text={recorder.bio[0].bio ?? ""} />} | ||||||
| 
 |  | ||||||
|           {/* <Button className="cursor-not-allowed">View profile</Button> */} |  | ||||||
|         </div> |         </div> | ||||||
|       } |       } | ||||||
|       placement="top" |       placement="top" | ||||||
|  | |||||||
| @ -74,7 +74,8 @@ export default function ChronologyItemComponent( | |||||||
|   if (props.item.attributes) { |   if (props.item.attributes) { | ||||||
|     return ( |     return ( | ||||||
|       <div |       <div | ||||||
|         className="grid place-content-start grid-rows-[auto_1fr] grid-cols-[4em] py-4 px-8 rounded-2xl target:bg-mid target:py-8 target:my-4" |         className="grid place-content-start grid-rows-[auto_1fr] grid-cols-[4em] | ||||||
|  |         py-4 px-8 rounded-2xl target:bg-mid target:py-8 target:my-4" | ||||||
|         id={generateAnchor( |         id={generateAnchor( | ||||||
|           props.item.attributes.year, |           props.item.attributes.year, | ||||||
|           props.item.attributes.month, |           props.item.attributes.month, | ||||||
| @ -103,7 +104,10 @@ export default function ChronologyItemComponent( | |||||||
|                     <> |                     <> | ||||||
|                       {translation && ( |                       {translation && ( | ||||||
|                         <> |                         <> | ||||||
|                           <div className="place-items-start place-content-start grid grid-flow-col gap-2"> |                           <div | ||||||
|  |                             className="place-items-start | ||||||
|  |                             place-content-start grid grid-flow-col gap-2" | ||||||
|  |                           > | ||||||
|                             {translation.status !== |                             {translation.status !== | ||||||
|                               Enum_Componenttranslationschronologyitem_Status.Done && ( |                               Enum_Componenttranslationschronologyitem_Status.Done && ( | ||||||
|                               <ToolTip |                               <ToolTip | ||||||
| @ -128,7 +132,8 @@ export default function ChronologyItemComponent( | |||||||
|                               className={ |                               className={ | ||||||
|                                 event.translations && |                                 event.translations && | ||||||
|                                 event.translations.length > 1 |                                 event.translations.length > 1 | ||||||
|                                   ? "before:content-['-'] before:text-dark before:inline-block before:w-4 before:ml-[-1em] mt-2 whitespace-pre-line" |                                   ? `before:content-['-'] before:text-dark before:inline-block
 | ||||||
|  |                                     before:w-4 before:ml-[-1em] mt-2 whitespace-pre-line` | ||||||
|                                   : "whitespace-pre-line" |                                   : "whitespace-pre-line" | ||||||
|                               } |                               } | ||||||
|                             > |                             > | ||||||
|  | |||||||
| @ -10,8 +10,8 @@ import ContentPanel, { | |||||||
| import SubPanel from "components/Panels/SubPanel"; | import SubPanel from "components/Panels/SubPanel"; | ||||||
| import ThumbnailPreview from "components/PreviewCard"; | import ThumbnailPreview from "components/PreviewCard"; | ||||||
| import { GetVideoChannelQuery } from "graphql/generated"; | import { GetVideoChannelQuery } from "graphql/generated"; | ||||||
| import { getReadySdk } from "graphql/sdk"; |  | ||||||
| import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; | import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; | ||||||
|  | import { getReadySdk } from "graphql/sdk"; | ||||||
| import { getVideoThumbnailURL } from "helpers/videos"; | import { getVideoThumbnailURL } from "helpers/videos"; | ||||||
| import { | import { | ||||||
|   GetStaticPathsContext, |   GetStaticPathsContext, | ||||||
| @ -60,7 +60,11 @@ export default function Channel(props: Props): JSX.Element { | |||||||
|         <h1 className="text-3xl">{channel?.title}</h1> |         <h1 className="text-3xl">{channel?.title}</h1> | ||||||
|         <p>{channel?.subscribers.toLocaleString()} subscribers</p> |         <p>{channel?.subscribers.toLocaleString()} subscribers</p> | ||||||
|       </div> |       </div> | ||||||
|       <div className="grid gap-8 items-start mobile:grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))] pb-12 border-b-[3px] border-dotted last-of-type:border-0"> |       <div | ||||||
|  |         className="grid gap-8 items-start mobile:grid-cols-2 | ||||||
|  |         desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))] | ||||||
|  |         pb-12 border-b-[3px] border-dotted last-of-type:border-0" | ||||||
|  |       > | ||||||
|         {channel?.videos?.data.map((video) => ( |         {channel?.videos?.data.map((video) => ( | ||||||
|           <> |           <> | ||||||
|             {video.attributes && ( |             {video.attributes && ( | ||||||
|  | |||||||
| @ -11,9 +11,9 @@ import ContentPanel, { | |||||||
| import SubPanel from "components/Panels/SubPanel"; | import SubPanel from "components/Panels/SubPanel"; | ||||||
| import ThumbnailPreview from "components/PreviewCard"; | import ThumbnailPreview from "components/PreviewCard"; | ||||||
| import { GetVideosPreviewQuery } from "graphql/generated"; | import { GetVideosPreviewQuery } from "graphql/generated"; | ||||||
|  | import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; | ||||||
| import { getReadySdk } from "graphql/sdk"; | import { getReadySdk } from "graphql/sdk"; | ||||||
| import { prettyDate } from "helpers/formatters"; | import { prettyDate } from "helpers/formatters"; | ||||||
| import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; |  | ||||||
| import { getVideoThumbnailURL } from "helpers/videos"; | import { getVideoThumbnailURL } from "helpers/videos"; | ||||||
| import { GetStaticPropsContext } from "next"; | import { GetStaticPropsContext } from "next"; | ||||||
| import { useState } from "react"; | import { useState } from "react"; | ||||||
| @ -80,7 +80,11 @@ export default function Videos(props: Props): JSX.Element { | |||||||
|         className="mb-12" |         className="mb-12" | ||||||
|       /> |       /> | ||||||
| 
 | 
 | ||||||
|       <div className="grid gap-8 items-start thin:grid-cols-1 mobile:grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))] pb-12 border-b-[3px] border-dotted last-of-type:border-0"> |       <div | ||||||
|  |         className="grid gap-8 items-start thin:grid-cols-1 mobile:grid-cols-2 | ||||||
|  |         desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))] | ||||||
|  |         pb-12 border-b-[3px] border-dotted last-of-type:border-0" | ||||||
|  |       > | ||||||
|         {paginatedVideos[page].map((video) => ( |         {paginatedVideos[page].map((video) => ( | ||||||
|           <> |           <> | ||||||
|             {video.attributes && ( |             {video.attributes && ( | ||||||
|  | |||||||
| @ -70,7 +70,8 @@ export default function Contents(props: Immutable<Props>): JSX.Element { | |||||||
|               {name && ( |               {name && ( | ||||||
|                 <h2 |                 <h2 | ||||||
|                   key={`h2${name}`} |                   key={`h2${name}`} | ||||||
|                   className="text-2xl pb-2 pt-10 first-of-type:pt-0 flex flex-row place-items-center gap-2" |                   className="text-2xl pb-2 pt-10 first-of-type:pt-0 | ||||||
|  |                   flex flex-row place-items-center gap-2" | ||||||
|                 > |                 > | ||||||
|                   {name} |                   {name} | ||||||
|                   <Chip>{`${items.length} ${ |                   <Chip>{`${items.length} ${ | ||||||
| @ -82,7 +83,8 @@ export default function Contents(props: Immutable<Props>): JSX.Element { | |||||||
|               )} |               )} | ||||||
|               <div |               <div | ||||||
|                 key={`items${name}`} |                 key={`items${name}`} | ||||||
|                 className="grid gap-8 items-end grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))]" |                 className="grid gap-8 items-end grid-cols-2 | ||||||
|  |                 desktop:grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))]" | ||||||
|               > |               > | ||||||
|                 {items.map((item) => ( |                 {items.map((item) => ( | ||||||
|                   <> |                   <> | ||||||
|  | |||||||
| @ -41,7 +41,8 @@ export default function CheckupLibraryItems( | |||||||
|       {testReport.lines.map((line, index) => ( |       {testReport.lines.map((line, index) => ( | ||||||
|         <div |         <div | ||||||
|           key={index} |           key={index} | ||||||
|           className="grid grid-cols-[2em,3em,2fr,1fr,0.5fr,0.5fr,2fr] gap-2 items-center mb-2 justify-items-start" |           className="grid grid-cols-[2em,3em,2fr,1fr,0.5fr,0.5fr,2fr] | ||||||
|  |           gap-2 items-center mb-2 justify-items-start" | ||||||
|         > |         > | ||||||
|           <Button |           <Button | ||||||
|             href={line.frontendUrl} |             href={line.frontendUrl} | ||||||
|  | |||||||
| @ -338,7 +338,8 @@ export default function Editor(props: Immutable<Props>): JSX.Element { | |||||||
|               const textarea = event.target as HTMLTextAreaElement; |               const textarea = event.target as HTMLTextAreaElement; | ||||||
|               handleInput(textarea.value); |               handleInput(textarea.value); | ||||||
|             }} |             }} | ||||||
|             className="bg-mid !bg-opacity-40 rounded-xl outline-none p-8 w-full text-black font-monospace h-[70vh]" |             className="bg-mid !bg-opacity-40 rounded-xl | ||||||
|  |             outline-none p-8 w-full text-black font-monospace h-[70vh]" | ||||||
|             value={markdown} |             value={markdown} | ||||||
|             title="Input textarea" |             title="Input textarea" | ||||||
|           /> |           /> | ||||||
|  | |||||||
| @ -15,7 +15,11 @@ export default function Home(props: Immutable<PostStaticProps>): JSX.Element { | |||||||
|       post={post} |       post={post} | ||||||
|       prependBody={ |       prependBody={ | ||||||
|         <div className="grid place-items-center place-content-center w-full gap-5 text-center"> |         <div className="grid place-items-center place-content-center w-full gap-5 text-center"> | ||||||
|           <div className="[mask:url('/icons/accords.svg')] [mask-size:contain] [mask-repeat:no-repeat] [mask-position:center] w-32 aspect-square mobile:w-[50vw] bg-black" /> |           <div | ||||||
|  |             className="[mask:url('/icons/accords.svg')] [mask-size:contain] | ||||||
|  |             [mask-repeat:no-repeat] [mask-position:center] w-32 aspect-square | ||||||
|  |             mobile:w-[50vw] bg-black" | ||||||
|  |           /> | ||||||
|           <h1 className="text-5xl mb-0">Accord’s Library</h1> |           <h1 className="text-5xl mb-0">Accord’s Library</h1> | ||||||
|           <h2 className="text-xl -mt-5"> |           <h2 className="text-xl -mt-5"> | ||||||
|             Discover • Analyze • Translate • Archive |             Discover • Analyze • Translate • Archive | ||||||
|  | |||||||
| @ -153,7 +153,8 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | |||||||
|       /> |       /> | ||||||
|       <div className="grid place-items-center gap-12"> |       <div className="grid place-items-center gap-12"> | ||||||
|         <div |         <div | ||||||
|           className="drop-shadow-shade-xl w-full h-[50vh] mobile:h-[60vh] desktop:mb-16 relative cursor-pointer" |           className="drop-shadow-shade-xl w-full h-[50vh] | ||||||
|  |           mobile:h-[60vh] desktop:mb-16 relative cursor-pointer" | ||||||
|           onClick={() => { |           onClick={() => { | ||||||
|             if (item?.thumbnail?.data?.attributes) { |             if (item?.thumbnail?.data?.attributes) { | ||||||
|               setLightboxOpen(true); |               setLightboxOpen(true); | ||||||
| @ -240,13 +241,17 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | |||||||
|         {item?.gallery && item.gallery.data.length > 0 && ( |         {item?.gallery && item.gallery.data.length > 0 && ( | ||||||
|           <div id="gallery" className="grid place-items-center gap-8  w-full"> |           <div id="gallery" className="grid place-items-center gap-8  w-full"> | ||||||
|             <h2 className="text-2xl">{langui.gallery}</h2> |             <h2 className="text-2xl">{langui.gallery}</h2> | ||||||
|             <div className="grid w-full gap-8 items-end grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))]"> |             <div | ||||||
|  |               className="grid w-full gap-8 items-end | ||||||
|  |               grid-cols-[repeat(auto-fill,_minmax(15rem,1fr))]" | ||||||
|  |             > | ||||||
|               {item.gallery.data.map((galleryItem, index) => ( |               {item.gallery.data.map((galleryItem, index) => ( | ||||||
|                 <> |                 <> | ||||||
|                   {galleryItem.attributes && ( |                   {galleryItem.attributes && ( | ||||||
|                     <div |                     <div | ||||||
|                       key={galleryItem.id} |                       key={galleryItem.id} | ||||||
|                       className="relative aspect-square hover:scale-[1.02] transition-transform cursor-pointer" |                       className="relative aspect-square hover:scale-[1.02] | ||||||
|  |                       transition-transform cursor-pointer" | ||||||
|                       onClick={() => { |                       onClick={() => { | ||||||
|                         if (item.gallery?.data) { |                         if (item.gallery?.data) { | ||||||
|                           const images: string[] = []; |                           const images: string[] = []; | ||||||
| @ -265,7 +270,10 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | |||||||
|                         } |                         } | ||||||
|                       }} |                       }} | ||||||
|                     > |                     > | ||||||
|                       <div className="bg-light absolute inset-0 rounded-lg drop-shadow-shade-md"></div> |                       <div | ||||||
|  |                         className="bg-light absolute inset-0 | ||||||
|  |                         rounded-lg drop-shadow-shade-md" | ||||||
|  |                       ></div> | ||||||
|                       <Img |                       <Img | ||||||
|                         className="rounded-lg" |                         className="rounded-lg" | ||||||
|                         image={galleryItem.attributes} |                         image={galleryItem.attributes} | ||||||
| @ -430,7 +438,10 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | |||||||
|               <p className="flex-shrink-0">{"Always show info"}:</p> |               <p className="flex-shrink-0">{"Always show info"}:</p> | ||||||
|               <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> |               <Switch setState={setKeepInfoVisible} state={keepInfoVisible} /> | ||||||
|             </div> |             </div> | ||||||
|             <div className="grid gap-8 items-end mobile:grid-cols-2 grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] w-full"> |             <div | ||||||
|  |               className="grid gap-8 items-end mobile:grid-cols-2 | ||||||
|  |               grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] w-full" | ||||||
|  |             > | ||||||
|               {item.subitems.data.map((subitem) => ( |               {item.subitems.data.map((subitem) => ( | ||||||
|                 <> |                 <> | ||||||
|                   {subitem.attributes && ( |                   {subitem.attributes && ( | ||||||
|  | |||||||
| @ -12,17 +12,17 @@ import ContentPanel, { | |||||||
| import SubPanel from "components/Panels/SubPanel"; | import SubPanel from "components/Panels/SubPanel"; | ||||||
| import { useAppLayout } from "contexts/AppLayoutContext"; | import { useAppLayout } from "contexts/AppLayoutContext"; | ||||||
| import { GetLibraryItemScansQuery } from "graphql/generated"; | import { GetLibraryItemScansQuery } from "graphql/generated"; | ||||||
|  | import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; | ||||||
| import { getReadySdk } from "graphql/sdk"; | import { getReadySdk } from "graphql/sdk"; | ||||||
| import { prettyinlineTitle, prettySlug } from "helpers/formatters"; | import { prettyinlineTitle, prettySlug } from "helpers/formatters"; | ||||||
| import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; |  | ||||||
| import { sortContent } from "helpers/others"; | import { sortContent } from "helpers/others"; | ||||||
|  | import { Immutable } from "helpers/types"; | ||||||
| import { | import { | ||||||
|   GetStaticPathsContext, |   GetStaticPathsContext, | ||||||
|   GetStaticPathsResult, |   GetStaticPathsResult, | ||||||
|   GetStaticPropsContext, |   GetStaticPropsContext, | ||||||
| } from "next"; | } from "next"; | ||||||
| import { useState } from "react"; | import { useState } from "react"; | ||||||
| import { Immutable } from "helpers/types"; |  | ||||||
| 
 | 
 | ||||||
| interface Props extends AppStaticProps { | interface Props extends AppStaticProps { | ||||||
|   item: Exclude< |   item: Exclude< | ||||||
| @ -63,7 +63,9 @@ export default function LibrarySlug(props: Immutable<Props>): JSX.Element { | |||||||
|           subtitle={ |           subtitle={ | ||||||
|             content.attributes?.range[0]?.__typename === |             content.attributes?.range[0]?.__typename === | ||||||
|             "ComponentRangePageRange" |             "ComponentRangePageRange" | ||||||
|               ? `${content.attributes.range[0].starting_page} → ${content.attributes.range[0].ending_page}` |               ? `${content.attributes.range[0].starting_page}` + | ||||||
|  |                 `→` + | ||||||
|  |                 `${content.attributes.range[0].ending_page}` | ||||||
|               : undefined |               : undefined | ||||||
|           } |           } | ||||||
|           onClick={() => appLayout.setSubPanelOpen(false)} |           onClick={() => appLayout.setSubPanelOpen(false)} | ||||||
|  | |||||||
| @ -143,7 +143,8 @@ export default function Library(props: Immutable<Props>): JSX.Element { | |||||||
|               {name && ( |               {name && ( | ||||||
|                 <h2 |                 <h2 | ||||||
|                   key={`h2${name}`} |                   key={`h2${name}`} | ||||||
|                   className="text-2xl pb-2 pt-10 first-of-type:pt-0 flex flex-row place-items-center gap-2" |                   className="text-2xl pb-2 pt-10 first-of-type:pt-0 | ||||||
|  |                   flex flex-row place-items-center gap-2" | ||||||
|                 > |                 > | ||||||
|                   {name} |                   {name} | ||||||
|                   <Chip>{`${items.length} ${ |                   <Chip>{`${items.length} ${ | ||||||
| @ -155,7 +156,9 @@ export default function Library(props: Immutable<Props>): JSX.Element { | |||||||
|               )} |               )} | ||||||
|               <div |               <div | ||||||
|                 key={`items${name}`} |                 key={`items${name}`} | ||||||
|                 className="grid gap-8 items-end mobile:grid-cols-2 desktop:grid-cols-[repeat(auto-fill,_minmax(13rem,1fr))] pb-12 border-b-[3px] border-dotted last-of-type:border-0" |                 className="grid gap-8 items-end mobile:grid-cols-2 | ||||||
|  |                 desktop:grid-cols-[repeat(auto-fill,_minmax(13rem,1fr))] | ||||||
|  |                 pb-12 border-b-[3px] border-dotted last-of-type:border-0" | ||||||
|               > |               > | ||||||
|                 {items.map((item) => ( |                 {items.map((item) => ( | ||||||
|                   <> |                   <> | ||||||
|  | |||||||
| @ -41,7 +41,10 @@ export default function News(props: Immutable<Props>): JSX.Element { | |||||||
| 
 | 
 | ||||||
|   const contentPanel = ( |   const contentPanel = ( | ||||||
|     <ContentPanel width={ContentPanelWidthSizes.large}> |     <ContentPanel width={ContentPanelWidthSizes.large}> | ||||||
|       <div className="grid gap-8 items-end grid-cols-1 desktop:grid-cols-[repeat(auto-fill,_minmax(20rem,1fr))]"> |       <div | ||||||
|  |         className="grid gap-8 items-end grid-cols-1 | ||||||
|  |         desktop:grid-cols-[repeat(auto-fill,_minmax(20rem,1fr))]" | ||||||
|  |       > | ||||||
|         {posts.map((post) => ( |         {posts.map((post) => ( | ||||||
|           <> |           <> | ||||||
|             {post.attributes && ( |             {post.attributes && ( | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DrMint
						DrMint