import { cloudflareImageUrl, nsMerge } from 'shared/utils.mjs' import { makers } from 'site/prebuild/makers.mjs' // Components import { MdxWrapper } from 'shared/components/wrappers/mdx.mjs' import { Lightbox } from 'shared/components/lightbox.mjs' import { ImageWrapper } from 'shared/components/wrappers/img.mjs' import { TimeAgo, ns as timeagoNs } from 'shared/components/timeago/index.mjs' import { useTranslation } from 'next-i18next' import { BaseLayout, BaseLayoutLeft, BaseLayoutProse, BaseLayoutRight, BaseLayoutWide, } from 'shared/components/base-layout.mjs' import { NavLinks, Breadcrumbs, MainSections, ns as navNs, } from 'shared/components/navigation/sitenav.mjs' import { Toc, ns as tocNs } from 'shared/components/mdx/toc.mjs' import { PrevNext } from 'shared/components/prev-next.mjs' import { Tag } from 'shared/components/tag.mjs' import { UserProfile } from 'shared/components/user-profile.mjs' export const ns = nsMerge(navNs, tocNs, timeagoNs, 'docs') const PostMeta = ({ frontmatter, t }) => (
{frontmatter.designs?.map((design) => ( {design} ))}
By{' '} {makers[frontmatter.author || frontmatter.maker || 1]?.username || '???'}
) export const PostImage = ({ imgId, frontmatter }) => (
{frontmatter.caption}
) export const PostContent = ({ mdx, dir }) => (
) const ClaimThisPost = ({ t, type }) => (

Claim this post

This post has not (yet) been associated with a FreeSewing account. Please help us assign proper credit:

) const Maker = ({ id, type, t }) => makers[id] ? (
) : ( ) /** layout for a page that displays a blog, showcase or newsletter */ export const PostLayout = ({ mdx, frontmatter, type, dir }) => { const { t } = useTranslation(ns) return (

{frontmatter.title}

{type === 'newsletter' ? null : ( )}
) }