2024-09-29 18:09:44 +02:00
import path from 'node:path'
import { themes as prismThemes } from 'prism-react-renderer'
2024-10-12 16:58:35 +02:00
import designs from '../../config/software/designs.json'
2024-11-18 11:05:16 +01:00
import tailwindcss from 'tailwindcss'
import autoprefixer from 'autoprefixer'
2024-09-29 18:09:44 +02:00
2024-10-06 13:06:43 +02:00
/ *
* We bundle the options as one page , so keep them out the sidebar
* /
function hideDesignOptionsFromSidebar ( items ) {
for ( const item in items ) {
if ( items [ item ] . label === 'FreeSewing Designs' ) {
for ( const design in items [ item ] . items ) {
for ( const subpage in items [ item ] . items [ design ] . items ) {
if ( items [ item ] . items [ design ] . items [ subpage ] . label === 'Design Options' ) {
items [ item ] . items [ design ] . items [ subpage ] . items = [ ]
}
}
}
}
}
return items
}
2024-09-29 18:09:44 +02:00
const config = {
title : 'FreeSewing' ,
tagline : 'FreeSewing documentation for makers' ,
favicon : 'img/favicon.ico' ,
url : 'https://freesewing.org' ,
baseUrl : '/' ,
onBrokenLinks : 'throw' ,
onBrokenMarkdownLinks : 'warn' ,
/ *
* We need to make sure we can import from . mjs files
* /
plugins : [
( ) => ( {
name : 'mjs-loader' ,
configureWebpack ( ) {
return {
module : {
rules : [
{
test : /\.mjs$/ ,
include : /node_modules/ ,
type : 'javascript/auto' ,
} ,
{
test : /\.mjs$/ ,
exclude : /node_modules/ ,
use : {
loader : 'babel-loader' ,
options : {
presets : [ '@babel/preset-react' ] ,
} ,
} ,
} ,
] ,
} ,
}
} ,
} ) ,
( ) => ( {
name : 'fs-loader' ,
configureWebpack ( ) {
const fsConfig = {
resolve : { alias : { } } ,
}
// Load plugins from source, rather than compiled package
for ( const plugin of [
'core-plugins' ,
'plugin-annotations' ,
'plugin-bin-pack' ,
'plugin-bust' ,
'plugin-flip' ,
'plugin-gore' ,
'plugin-i18n' ,
'plugin-measurements' ,
'plugin-mirror' ,
'plugin-ringsector' ,
'plugin-round' ,
'plugin-sprinkle' ,
'plugin-svgattr' ,
'plugin-theme' ,
'plugin-timing' ,
'plugin-versionfree-svg' ,
] ) {
fsConfig . resolve . alias [ ` @freesewing/ ${ plugin } ` ] = path . resolve (
_ _dirname ,
` ../../plugins/ ${ plugin } /src/index.mjs `
)
}
// Load these from source, rather than compiled package
for ( const pkg of [ 'core' , 'i18n' , 'models' , 'snapseries' ] ) {
fsConfig . resolve . alias [ ` @freesewing/ ${ pkg } ` ] = path . resolve (
_ _dirname ,
` ../../packages/ ${ pkg } /src/index.mjs `
)
}
2024-10-12 16:58:35 +02:00
// Load designs from source, rather than compiled package
for ( const pkg of Object . keys ( designs ) ) {
fsConfig . resolve . alias [ ` @freesewing/ ${ pkg } ` ] = path . resolve (
_ _dirname ,
` ../../designs/ ${ pkg } /src/index.mjs `
)
}
2024-10-05 18:14:15 +02:00
// i18n folder
fsConfig . resolve . alias [ ` @i18n ` ] = path . resolve ( _ _dirname , ` ../../i18n ` )
// Yaml loader
fsConfig . module = {
rules : [
{
test : /\.ya?ml$/ ,
use : 'yaml-loader' ,
} ,
] ,
}
2024-09-29 18:09:44 +02:00
return fsConfig
} ,
} ) ,
2024-11-18 11:05:16 +01:00
[
'@docusaurus/plugin-content-blog' ,
{
id : 'showcase' ,
routeBasePath : 'showcase' ,
path : './showcase' ,
authorsMapPath : '../authors.json' ,
postsPerPage : 50 ,
blogSidebarCount : 10 ,
blogSidebarTitle : 'Recent Showcases' ,
} ,
] ,
[
'@docusaurus/plugin-content-blog' ,
{
id : 'newsletter' ,
routeBasePath : 'newsletter' ,
path : './newsletter' ,
authorsMapPath : '../authors.json' ,
blogTitle : 'FreeSewing Newsletter' ,
blogDescription : 'Four times per year, honest wholesome content, no ads, no nonsense' ,
blogSidebarCount : 50 ,
blogSidebarTitle : 'Newsletter Editions' ,
postsPerPage : 10 ,
feedOptions : {
type : 'rss' ,
title : 'FreeSewing Newsletter Editions' ,
description : 'A feed for the FreeSewing newsletter' ,
copyright : 'FreeSewing' ,
language : 'en' ,
createFeedItems : async ( params ) => {
const { blogPosts , defaultCreateFeedItems , ... rest } = params
return defaultCreateFeedItems ( {
blogPosts : blogPosts . filter ( ( item , index ) => index < 10 ) ,
... rest ,
} )
} ,
} ,
} ,
] ,
async function myPlugin ( ) {
return {
name : 'docusaurus-tailwindcss' ,
configurePostCss ( postcssOptions ) {
// Appends TailwindCSS and AutoPrefixer.
postcssOptions . plugins . push ( tailwindcss )
postcssOptions . plugins . push ( autoprefixer )
return postcssOptions
} ,
}
} ,
2024-09-29 18:09:44 +02:00
] ,
i18n : { defaultLocale : 'en' , locales : [ 'en' ] } ,
presets : [
[
'classic' ,
{
docs : {
//routeBasePath: '/',
sidebarPath : './sidebars.js' ,
editUrl : 'https://github.com/freesewing/freesewing/tree/main/sites/dev/' ,
2024-10-06 13:06:43 +02:00
async sidebarItemsGenerator ( { defaultSidebarItemsGenerator , ... args } ) {
const sidebarItems = await defaultSidebarItemsGenerator ( args )
return hideDesignOptionsFromSidebar ( sidebarItems )
} ,
2024-09-29 18:09:44 +02:00
} ,
theme : {
customCss : './src/css/custom.css' ,
} ,
2024-11-18 11:05:16 +01:00
blog : {
path : 'blog' ,
// Simple use-case: string editUrl
editUrl : 'https://github.com/freesewing/freesewing/site/orgdocs/' ,
editLocalizedFiles : false ,
blogTitle : 'FreeSewing Blog' ,
blogDescription : 'News and updates from the people behind FreeSewing' ,
blogSidebarCount : 5 ,
blogSidebarTitle : 'Recent blog posts' ,
routeBasePath : 'blog' ,
authorsMapPath : '../authors.json' ,
include : [ '*/index.mdx' ] ,
exclude : [
'**/_*.{js,jsx,ts,tsx,md,mdx}' ,
'**/_*/**' ,
'**/*.test.{js,jsx,ts,tsx}' ,
'**/__tests__/**' ,
] ,
postsPerPage : 10 ,
blogListComponent : '@theme/BlogListPage' ,
//blogPostComponent: '@site/src/components/blog/post.mjs',
blogTagsListComponent : '@theme/BlogTagsListPage' ,
blogTagsPostsComponent : '@theme/BlogTagsPostsPage' ,
//remarkPlugins: [require('./my-remark-plugin')],
//rehypePlugins: [],
//beforeDefaultRemarkPlugins: [],
//beforeDefaultRehypePlugins: [],
truncateMarker : /<!--\s*(truncate)\s*-->/ ,
showReadingTime : true ,
feedOptions : {
type : 'rss' ,
title : 'FreeSewing Blog Posts' ,
description : 'News and updates from the people behind FreeSewing' ,
copyright : 'FreeSewing' ,
language : 'en' ,
createFeedItems : async ( params ) => {
const { blogPosts , defaultCreateFeedItems , ... rest } = params
return defaultCreateFeedItems ( {
// keep only the 10 most recent blog posts in the feed
blogPosts : blogPosts . filter ( ( item , index ) => index < 10 ) ,
... rest ,
} )
} ,
} ,
} ,
2024-09-29 18:09:44 +02:00
} ,
] ,
] ,
themeConfig : {
// Replace with your project's social card
image : 'img/freesewing-social-card.png' ,
navbar : {
title : 'FreeSewing' ,
logo : {
alt : 'FreeSewing Logo' ,
2024-11-18 11:05:16 +01:00
src : 'img/logo.svg' ,
2024-09-29 18:09:44 +02:00
} ,
items : [
2024-11-18 11:05:16 +01:00
{ to : '/editor/' , label : '🪄 Editor' , position : 'left' } ,
{ to : '/designs/' , label : '👕 Designs' , position : 'left' } ,
{ to : '/docs/' , label : '📖 Docs' , position : 'left' } ,
{ to : '/showcase/' , label : '📷 Showcase' , position : 'left' } ,
{ to : '/blog/' , label : '📰 Blog' , position : 'left' } ,
{ to : '/account/' , label : '📰 Account' , position : 'right' } ,
2024-09-29 18:09:44 +02:00
] ,
} ,
footer : {
style : 'light' ,
links : [
{
title : 'Docs' ,
items : [
2024-10-12 13:01:36 +02:00
{ label : 'FreeSewing designs' , to : '/docs/designs/' } ,
{ label : 'About FreeSewing' , to : '/docs/about/' } ,
{ label : 'Measurements we use' , to : '/docs/measurements/' } ,
{ label : 'Sewing terminology' , to : '/docs/sewing/' } ,
2024-09-29 18:09:44 +02:00
] ,
} ,
{
title : 'Help & Support' ,
items : [
{
label : 'Discord' ,
href : 'https://discord.freesewing.org/' ,
} ,
{
label : 'GitHub Issues' ,
href : 'https://github.com/freesewing/freesewing/issues' ,
} ,
{
label : 'GitHub Discussions' ,
href : 'https://github.com/freesewing/freesewing/discussions' ,
} ,
{
label : 'All Support Options' ,
href : 'https://freesewing.org/support' ,
} ,
] ,
} ,
{
title : 'More' ,
items : [
{
label : 'FreeSewing.org' ,
to : 'https://freesewing.org/' ,
} ,
{
label : 'Blog' ,
to : 'https://freesewing.org/blog/' ,
} ,
{
label : 'Showcase' ,
to : 'https://freesewing.org/showccase/' ,
} ,
{
label : 'Code on GitHub' ,
href : 'https://github.com/freesewing/freesewing' ,
} ,
] ,
} ,
] ,
copyright : ` <a href="https://freesewing.org/">FreeSewing</a> is brought to you by <a href="https://github.com/joostdecock">Joost De Cock</a> and <a href="https://github.com/freesewing/freesewing/blob/develop/CONTRIBUTORS.md">contributors</a> with the financial support of <a href="https://freesewing.org/patrons/join">our patrons</a> ` ,
} ,
prism : {
theme : prismThemes . dracula ,
darkTheme : prismThemes . dracula ,
} ,
} ,
}
export default config