@beforesemicolon/builder 1.7.0 → 1.8.1
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.
- package/README.md +33 -30
- package/dist/cjs/build-modules.js +1 -1
- package/dist/cjs/docs/run.js +1 -1
- package/dist/cjs/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/client-server.svg +4 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/facebook.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fast.svg +4 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/android-chrome-192x192.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/android-chrome-512x512.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/apple-touch-icon.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon-16x16.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon-32x32.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/favicon.ico +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/favicon/site.webmanifest +19 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Black.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BlackItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Bold.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BoldItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBold.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBoldItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLight.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLightItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Italic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Light.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-LightItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Medium.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-MediumItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Regular.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBold.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBoldItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Thin.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ThinItalic.otf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/exo-2/SIL Open Font License.txt +43 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/Apache License.txt +201 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Bold.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-BoldItalic.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBold.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Italic.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Light.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-LightItalic.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Regular.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Semibold.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-SemiboldItalic.ttf +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/independent.svg +23 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/instagram.svg +28 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-banner.jpg +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-essentials-training.jpg +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-favicon.jpg +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-favicon.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo-name.svg +10 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo-name@2x.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo.svg +13 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/markup-logo@2x.png +0 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/medium2.svg +18 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/reactive.svg +3 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/reddit.svg +16 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/simple.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/small.svg +8 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/twitter.svg +11 -0
- package/dist/cjs/docs/templates/fading-citrus/assets/youtube.svg +10 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_code-snippet.js +75 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_copy-code.js +50 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_footer.js +72 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_head-meta.js +231 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_header.js +41 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/_logo.js +31 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/document.js +92 -0
- package/dist/cjs/docs/templates/fading-citrus/layouts/landing.js +636 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/common.css +815 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/documentation.css +537 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/fonts.css +1 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +107 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +107 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/hybrid.hightlighter.css +102 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/landing.css +1556 -0
- package/dist/cjs/docs/templates/fading-citrus/stylesheets/normalize.css +351 -0
- package/dist/cjs/docs/templates/fading-citrus/template.config.js +14 -0
- package/dist/cjs/docs/types.js +1 -1
- package/dist/esm/build-modules.js +1 -1
- package/dist/esm/docs/run.js +1 -1
- package/dist/esm/docs/templates/fading-citrus/assets/before-semicolon-logo.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/client-server.svg +4 -0
- package/dist/esm/docs/templates/fading-citrus/assets/facebook.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fast.svg +4 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/android-chrome-192x192.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/android-chrome-512x512.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/apple-touch-icon.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon-16x16.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon-32x32.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/favicon.ico +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/favicon/site.webmanifest +19 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Black.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BlackItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Bold.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-BoldItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBold.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraBoldItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLight.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ExtraLightItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Italic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Light.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-LightItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Medium.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-MediumItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Regular.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBold.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-SemiBoldItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-Thin.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/Exo2.0-ThinItalic.otf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/exo-2/SIL Open Font License.txt +43 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/Apache License.txt +201 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Bold.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-BoldItalic.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBold.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Italic.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Light.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-LightItalic.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Regular.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-Semibold.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/fonts/open-sans/OpenSans-SemiboldItalic.ttf +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/independent.svg +23 -0
- package/dist/esm/docs/templates/fading-citrus/assets/instagram.svg +28 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-banner.jpg +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-essentials-training.jpg +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-favicon.jpg +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-favicon.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-logo-name.svg +10 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-logo-name@2x.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-logo.svg +13 -0
- package/dist/esm/docs/templates/fading-citrus/assets/markup-logo@2x.png +0 -0
- package/dist/esm/docs/templates/fading-citrus/assets/medium2.svg +18 -0
- package/dist/esm/docs/templates/fading-citrus/assets/reactive.svg +3 -0
- package/dist/esm/docs/templates/fading-citrus/assets/reddit.svg +16 -0
- package/dist/esm/docs/templates/fading-citrus/assets/simple.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/assets/small.svg +8 -0
- package/dist/esm/docs/templates/fading-citrus/assets/twitter.svg +11 -0
- package/dist/esm/docs/templates/fading-citrus/assets/youtube.svg +10 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_code-snippet.js +75 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_copy-code.js +50 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_footer.js +72 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_head-meta.js +231 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_header.js +41 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/_logo.js +31 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/document.js +92 -0
- package/dist/esm/docs/templates/fading-citrus/layouts/landing.js +636 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/common.css +815 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/documentation.css +537 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/fonts.css +1 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/github-dark.hightlighter.css +107 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/github-light.hightlighter.css +107 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/hybrid.hightlighter.css +102 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/landing.css +1556 -0
- package/dist/esm/docs/templates/fading-citrus/stylesheets/normalize.css +351 -0
- package/dist/esm/docs/templates/fading-citrus/template.config.js +14 -0
- package/dist/types/build-browser.d.ts +1 -1
- package/dist/types/build-modules.d.ts +1 -1
- package/dist/types/docs/run.d.ts +2 -1
- package/dist/types/docs/types.d.ts +28 -6
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 207.25 61.99">
|
|
2
|
+
<g fill="#000">
|
|
3
|
+
<path d="m47.74.19c-.93-.39-2.01-.17-2.72.54l-20.38,20.38L4.27.73C3.55.02,2.48-.2,1.54.19.61.58,0,1.49,0,2.5v46.81h5V8.54l16.11,16.11-9.19,9.19,3.54,3.54,9.19-9.19,9.19,9.19,3.54-3.54-9.19-9.19,16.11-16.11v40.77h5V2.5c0-1.01-.61-1.92-1.54-2.31Z"/>
|
|
4
|
+
<path d="m84.81,19.78v29.53h-4.7v-5.34c-.86,1.84-2.16,3.26-3.9,4.26-1.74,1-3.77,1.5-6.08,1.5-2.62,0-4.92-.63-6.9-1.88-1.98-1.25-3.5-3.02-4.58-5.31-1.08-2.29-1.61-4.96-1.61-8.01s.55-5.74,1.64-8.07c1.1-2.33,2.63-4.14,4.61-5.43,1.98-1.29,4.26-1.94,6.84-1.94,2.31,0,4.32.51,6.05,1.53,1.72,1.02,3.03,2.45,3.93,4.29v-5.11h4.7Zm-7.04,23.04c1.56-1.98,2.35-4.78,2.35-8.42s-.78-6.44-2.35-8.39c-1.57-1.96-3.8-2.94-6.69-2.94s-5.16,1.01-6.78,3.02c-1.62,2.02-2.44,4.82-2.44,8.42s.8,6.38,2.41,8.33c1.6,1.96,3.87,2.94,6.81,2.94s5.13-.99,6.69-2.96Z"/>
|
|
5
|
+
<path d="m110.46,19.43l-.12,4.34c-.9-.31-1.94-.47-3.11-.47-2.86,0-4.98.89-6.37,2.67-1.39,1.78-2.08,3.94-2.08,6.49v16.85h-4.75v-21.25c0-3.05-.16-5.81-.47-8.28h4.52l.47,5.46c.74-2,1.94-3.52,3.58-4.58,1.64-1.06,3.52-1.58,5.63-1.58.98,0,1.88.12,2.7.35Z"/>
|
|
6
|
+
<path d="m135.17,49.31l-15.14-14.21v14.21h-4.75V6.11h4.75v27.24l13.91-13.5h6.05l-14.79,14.15,16.2,15.32h-6.22Z"/>
|
|
7
|
+
<path d="m170.22,19.78v29.53h-4.64v-5.11c-.94,1.8-2.25,3.17-3.93,4.11-1.68.94-3.58,1.41-5.69,1.41-3.48,0-6.12-.98-7.92-2.94-1.8-1.96-2.7-4.85-2.7-8.69v-18.31h4.75v18.2c0,2.66.55,4.62,1.64,5.87,1.09,1.25,2.76,1.88,4.99,1.88,2.62,0,4.73-.85,6.34-2.55,1.6-1.7,2.41-3.94,2.41-6.72v-16.67h4.75Z"/>
|
|
8
|
+
<path d="m200.97,21.02c2,1.29,3.54,3.1,4.64,5.43,1.1,2.33,1.64,5.02,1.64,8.07s-.55,5.72-1.64,8.01c-1.1,2.29-2.63,4.06-4.61,5.31-1.98,1.25-4.28,1.88-6.9,1.88-2.31,0-4.32-.51-6.05-1.53-1.72-1.02-3.03-2.47-3.93-4.34v18.14h-4.75V28.06c0-3.05-.16-5.81-.47-8.28h4.52l.47,5.69c.82-2.03,2.12-3.61,3.9-4.73,1.78-1.12,3.88-1.67,6.31-1.67,2.58,0,4.87.65,6.87,1.94Zm-1.03,21.84c1.58-1.96,2.38-4.73,2.38-8.33s-.8-6.41-2.41-8.42c-1.61-2.02-3.84-3.02-6.69-3.02s-5.19.98-6.75,2.94c-1.57,1.96-2.35,4.75-2.35,8.39s.78,6.45,2.35,8.42c1.57,1.98,3.82,2.96,6.75,2.96s5.14-.98,6.72-2.94Z"/>
|
|
9
|
+
</g>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 49.29 49.31">
|
|
3
|
+
<defs>
|
|
4
|
+
<style>
|
|
5
|
+
.cls-1 {
|
|
6
|
+
stroke-width: 0px;
|
|
7
|
+
}
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<g id="Layer_1-2" data-name="Layer 1">
|
|
11
|
+
<path class="cls-1" d="m47.74.19c-.93-.39-2.01-.17-2.72.54l-20.38,20.38L4.27.73C3.55.02,2.48-.2,1.54.19.61.58,0,1.49,0,2.5v46.81h5V8.54l16.11,16.11-9.19,9.19,3.54,3.54,9.19-9.19,9.19,9.19,3.54-3.54-9.19-9.19,16.11-16.11v40.77h5V2.5c0-1.01-.61-1.92-1.54-2.31Z"/>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns:serif="http://www.serif.com/"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 800 800"
|
|
5
|
+
style="enable-background:new 0 0 800 800;" xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<g transform="matrix(1,0,0,1,-246.226,-1.33631)">
|
|
8
|
+
<path d="M688.9,401.3c0,104.4-84,189-187.7,189s-187.7-84.6-187.7-189s84-189,187.7-189S688.9,297,688.9,401.3"/>
|
|
9
|
+
</g>
|
|
10
|
+
<g transform="matrix(1,0,0,1,-246.226,-1.33631)">
|
|
11
|
+
<path d="M894.8,401.3c0,98.3-42,177.9-93.9,177.9s-93.9-79.7-93.9-177.9s42-177.9,93.9-177.9C852.8,223.4,894.8,303.1,894.8,401.3
|
|
12
|
+
"/>
|
|
13
|
+
</g>
|
|
14
|
+
<g transform="matrix(1,0,0,1,-246.226,-1.33631)">
|
|
15
|
+
<path d="M979,401.3c0,88-14.8,159.4-33,159.4s-33-71.4-33-159.4s14.8-159.4,33-159.4C964.2,241.9,979,313.3,979,401.3"/>
|
|
16
|
+
</g>
|
|
17
|
+
</g>
|
|
18
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 95 95">
|
|
2
|
+
<path fill-rule="evenodd" fill="#fff" d="M64.748,63.125a84.879,84.879,0,0,1-1.664,8.389c1.86.464,3.652.826,5.359,1.081,8.02,1.2,14.055.078,16.2-3.646s.106-9.513-4.94-15.857c-1.075-1.351-2.285-2.723-3.617-4.1a84.6,84.6,0,0,1-6.433,5.636,5.891,5.891,0,0,1-4.909,8.5Zm3.646-10.188a5.872,5.872,0,0,0-2.6-1.409q.027-.751.044-1.538.03-1.415.03-2.49c0-2.58-.087-5.109-.253-7.57A86.452,86.452,0,0,1,74.6,47.5c-1.869,1.818-3.947,3.64-6.209,5.438Zm-4.7-1.538a5.894,5.894,0,0,0-4.72,8.175q-.616.386-1.235.761-1.029.624-2.1,1.241l-.01.006c-2.724,1.573-5.445,2.992-8.129,4.253-2.684-1.261-5.406-2.681-8.132-4.255s-5.31-3.217-7.743-4.909c-.249-2.955-.38-6.023-.38-9.171q0-1.412.023-2.449.015-.714.041-1.45a5.891,5.891,0,0,0,4.719-8.175c.413-.257.824-.511,1.237-.761q1.028-.624,2.1-1.241l.01-.005c2.724-1.573,5.446-2.993,8.129-4.254,2.684,1.262,5.406,2.681,8.132,4.255s5.31,3.218,7.743,4.91c.249,2.954.38,6.023.38,9.17q0,1.413-.022,2.449-.016.714-.042,1.45Zm-3.557,9.925q-.644.4-1.31.807-1.065.646-2.146,1.27h0c-2.234,1.29-4.468,2.479-6.682,3.565a86.489,86.489,0,0,0,11.057,4.006c.64-2.528,1.179-5.238,1.6-8.094a5.889,5.889,0,0,1-2.438-1.468l-.085-.087Zm6.921-6.749a3.779,3.779,0,1,1-2.672-1.107,3.764,3.764,0,0,1,2.672,1.107Zm-32.189-20.9q.645-.4,1.311-.807,1.064-.646,2.145-1.27h0c2.234-1.29,4.468-2.479,6.682-3.565a86.326,86.326,0,0,0-11.057-4.005c-.64,2.527-1.179,5.237-1.6,8.093a5.9,5.9,0,0,1,2.438,1.468l.085.087Zm-4.614-1.8a84.879,84.879,0,0,1,1.664-8.389c-1.86-.464-3.652-.826-5.359-1.081-8.019-1.2-14.054-.078-16.2,3.646s-.106,9.513,4.94,15.857c1.075,1.352,2.285,2.723,3.617,4.1a84.373,84.373,0,0,1,6.433-5.635,5.891,5.891,0,0,1,4.909-8.5ZM26.606,42.064a5.881,5.881,0,0,0,2.6,1.408q-.027.753-.044,1.538c-.02.943-.031,1.775-.031,2.49,0,2.58.087,5.109.254,7.57A86.572,86.572,0,0,1,20.4,47.5c1.87-1.818,3.948-3.64,6.21-5.437ZM33.29,35.08A3.779,3.779,0,1,0,34.4,37.753,3.771,3.771,0,0,0,33.29,35.08ZM62.537,73.546a49.456,49.456,0,0,1-4.121,10.345C55.4,89.313,51.641,92.5,47.5,92.5c-5.257,0-9.924-5.176-13.22-13.543-.661-1.677-1.269-3.487-1.818-5.411-1.943.488-3.816.867-5.6,1.133C17.973,76.008,11.16,74.553,8.532,70c-2.071-3.587-1.193-8.438,1.995-13.758a49.4,49.4,0,0,1,6.9-8.742c-1.393-1.439-2.657-2.871-3.78-4.282C8.05,36.184,5.9,29.557,8.532,25s9.442-6.012,18.329-4.683c1.785.266,3.659.645,5.6,1.133A49.424,49.424,0,0,1,36.584,11.11C39.6,5.687,43.36,2.5,47.5,2.5c5.257,0,9.925,5.175,13.22,13.543.661,1.677,1.269,3.487,1.818,5.411,1.943-.488,3.816-.867,5.6-1.133,8.888-1.329,15.7.126,18.329,4.679,2.071,3.588,1.193,8.438-2,13.758a49.4,49.4,0,0,1-6.9,8.742c1.393,1.439,2.657,2.871,3.78,4.282C86.95,58.816,89.1,65.443,86.468,70s-9.442,6.012-18.33,4.683c-1.784-.266-3.658-.645-5.6-1.133ZM18.911,48.989a47.132,47.132,0,0,0-6.58,8.333C9.544,61.973,8.7,66.083,10.353,68.945c2.151,3.726,8.186,4.848,16.2,3.65,1.708-.255,3.5-.616,5.359-1.081a90.427,90.427,0,0,1-2.3-13.692,90.533,90.533,0,0,1-10.7-8.833ZM31.892,59.4a86.578,86.578,0,0,0,2.057,11.576,86.411,86.411,0,0,0,11.056-4c-2.215-1.086-4.449-2.275-6.683-3.566s-4.382-2.63-6.43-4.005ZM47.5,68.151A90.542,90.542,0,0,0,60.506,73a47.22,47.22,0,0,1-3.928,9.865c-2.633,4.737-5.77,7.522-9.078,7.522-4.3,0-8.29-4.663-11.259-12.2C35.607,76.583,35.024,74.849,34.5,73a90.522,90.522,0,0,0,13-4.853ZM34.494,22a47.22,47.22,0,0,1,3.928-9.865C41.055,7.394,44.192,4.61,47.5,4.61c4.3,0,8.29,4.662,11.259,12.2.634,1.608,1.217,3.342,1.745,5.187a90.522,90.522,0,0,0-13,4.853A90.542,90.542,0,0,0,34.494,22ZM50,28.033c2.214,1.086,4.449,2.276,6.683,3.566s4.382,2.63,6.43,4a86.549,86.549,0,0,0-2.057-11.576A86.411,86.411,0,0,0,50,28.033Zm15.393,9.145a90.533,90.533,0,0,1,10.7,8.833,47.178,47.178,0,0,0,6.58-8.333c2.787-4.651,3.631-8.761,1.978-11.623-2.151-3.726-8.186-4.848-16.2-3.65-1.707.255-3.5.617-5.358,1.081A90.427,90.427,0,0,1,65.388,37.178Z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns:serif="http://www.serif.com/"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 800 800"
|
|
5
|
+
style="enable-background:new 0 0 800 800;" xml:space="preserve">
|
|
6
|
+
<path d="M680.4,326.7c-21.5,0-40.4,8.2-54.3,22.1c-53.7-38.5-128.2-63.8-210.3-66.9l36-168.6l116.8,24.6
|
|
7
|
+
c1.3,29.7,25.9,53.7,56.2,53.7c30.9,0,56.2-25.3,56.2-56.2c0-30.9-25.3-56.2-56.2-56.2c-22.1,0-41.1,12.6-49.9,31.6L444.2,82.9
|
|
8
|
+
c-3.8-0.6-7.6,0-10.7,1.9s-5.1,5.1-6.3,8.8l-39.8,188.2c-84,2.5-159.2,27.2-213.5,66.9c-13.9-13.3-33.5-22.1-54.3-22.1
|
|
9
|
+
c-43.6,0-78.9,35.4-78.9,78.9c0,32.2,18.9,59.4,46.7,72c-1.3,7.6-1.9,15.8-1.9,24c0,121.3,140.8,219.2,315.2,219.2
|
|
10
|
+
c174.3,0,315.2-97.9,315.2-219.2c0-8.2-0.6-15.8-1.9-23.4c25.9-12.6,45.5-40.4,45.5-72.6C759.4,362.1,724,326.7,680.4,326.7z
|
|
11
|
+
M217.4,470.7c0-30.9,25.3-56.2,56.2-56.2c30.9,0,56.2,25.3,56.2,56.2c0,30.9-25.3,56.2-56.2,56.2
|
|
12
|
+
C242.7,526.9,217.4,501.7,217.4,470.7z M531.3,619.1L531.3,619.1c-38.5,38.5-111.8,41.1-133.3,41.1c-21.5,0-95.4-3.2-133.3-41.1
|
|
13
|
+
c-5.7-5.7-5.7-15.2,0-20.8c5.7-5.7,15.2-5.7,20.8,0c24,24,75.8,32.8,113.1,32.8c37.3,0,88.4-8.8,113.1-32.8c5.7-5.7,15.2-5.7,20.8,0
|
|
14
|
+
C537,604.6,537,613.5,531.3,619.1z M521.2,526.9c-30.9,0-56.2-25.3-56.2-56.2c0-30.9,25.3-56.2,56.2-56.2
|
|
15
|
+
c30.9,0,56.2,25.3,56.2,56.2C577.4,501.7,552.2,526.9,521.2,526.9z"/>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px"
|
|
2
|
+
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
|
|
3
|
+
<g fill="#fff">
|
|
4
|
+
<path d="M69.2,50.5H30.6c-0.5,0-1-0.3-1.3-0.8c-0.3-0.5-0.3-1,0-1.5l19.3-33.4c0.3-0.5,0.8-0.7,1.3-0.7s1,0.3,1.3,0.7l19.3,33.4 c0.3,0.5,0.3,1,0,1.5C70.2,50.2,69.7,50.5,69.2,50.5z M33.2,47.5h33.4L49.9,18.6L33.2,47.5z"/>
|
|
5
|
+
<path d="M81.9,85.9H51.8c-0.8,0-1.5-0.7-1.5-1.5V54.3c0-0.8,0.7-1.5,1.5-1.5h30.1c0.8,0,1.5,0.7,1.5,1.5v30.1 C83.4,85.2,82.7,85.9,81.9,85.9z M53.3,82.9h27.1V55.8H53.3V82.9z"/>
|
|
6
|
+
<path d="M30.6,85.8c-9.1,0-16.5-7.4-16.5-16.5s7.4-16.5,16.5-16.5s16.5,7.4,16.5,16.5S39.7,85.8,30.6,85.8z M30.6,55.8 c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S38,55.8,30.6,55.8z"/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px"
|
|
2
|
+
viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
|
|
3
|
+
<g fill="#fff">
|
|
4
|
+
<polygon points="43.4,91.7 43.4,56.6 8.5,56.6 8.5,65.4 28.4,65.4 5.2,88.6 11.4,94.8 34.6,71.6 34.6,91.7 "/>
|
|
5
|
+
<polygon
|
|
6
|
+
points="88.6,5.2 65.4,28.4 65.4,8.4 56.6,8.4 56.6,43.4 91.5,43.4 91.5,34.6 71.6,34.6 94.8,11.4 "/>
|
|
7
|
+
</g>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns:serif="http://www.serif.com/"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 800 800"
|
|
5
|
+
style="enable-background:new 0 0 800 800;" xml:space="preserve">
|
|
6
|
+
<path d="M276,671.5c252.2,0,390.2-209,390.2-390.2c0-5.9,0-11.8-0.4-17.7c26.8-19.4,50-43.4,68.4-71c-25,11.1-51.6,18.4-78.8,21.6
|
|
7
|
+
c28.6-17.1,50.1-44.1,60.3-75.8c-26.9,16-56.4,27.2-87.1,33.3c-25.9-27.6-62.1-43.2-100-43.2c-75.3,0-137.3,62-137.3,137.3
|
|
8
|
+
c0,10.4,1.2,20.9,3.6,31c-110.2-5.5-213-57.6-282.6-143.3c-36.2,62.3-17.5,143,42.5,183.1c-21.8-0.6-43.2-6.5-62.2-17.2v1.7
|
|
9
|
+
c0,65,46.3,121.5,110,134.4c-20.2,5.5-41.4,6.3-61.9,2.4c17.9,55.7,69.6,94.1,128.1,95.2c-48.5,38.2-108.6,58.9-170.3,58.8
|
|
10
|
+
c-10.9,0-21.8-0.7-32.6-2c62.7,40.2,135.7,61.6,210.2,61.5"/>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns:serif="http://www.serif.com/"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 800 800"
|
|
5
|
+
style="enable-background:new 0 0 800 800;" xml:space="preserve">
|
|
6
|
+
<path d="M714.1,242.2c-7.5-28.2-29.7-50.4-58-58C605,170.6,400,170.6,400,170.6s-205,0-256.1,13.7c-28.2,7.5-50.4,29.7-58,58
|
|
7
|
+
C72.2,293.3,72.2,400,72.2,400s0,106.7,13.7,157.8c7.5,28.2,29.8,50.4,58,58C195,629.4,400,629.4,400,629.4s205,0,256.1-13.7
|
|
8
|
+
c28.2-7.5,50.4-29.8,58-58c13.7-51.1,13.7-157.8,13.7-157.8S727.8,293.3,714.1,242.2L714.1,242.2z M334.4,498.3V301.7L504.7,400
|
|
9
|
+
L334.4,498.3L334.4,498.3z"/>
|
|
10
|
+
</svg>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export const escapeHTML = (value) =>
|
|
2
|
+
value
|
|
3
|
+
.replace(/&/g, '&')
|
|
4
|
+
.replace(/</g, '<')
|
|
5
|
+
.replace(/>/g, '>')
|
|
6
|
+
.replace(/"/g, '"')
|
|
7
|
+
.replace(/'/g, ''')
|
|
8
|
+
|
|
9
|
+
export const highlightLine = (line) => {
|
|
10
|
+
const tokens = []
|
|
11
|
+
const regex =
|
|
12
|
+
/(\/\/.*$)|(`[^`]*`|'[^']*'|"[^"]*")|(<\/?[a-zA-Z][\w-]*)|(\b(?:const|let|var|function|return|import|from|export|new|class|if|else|extends|static|async|await|try|catch)\b|=>)|(\$\{[^}]*\}|\{[^{}]*\})|([a-zA-Z-]+)(?==)/g
|
|
13
|
+
let lastIndex = 0
|
|
14
|
+
let match
|
|
15
|
+
|
|
16
|
+
while ((match = regex.exec(line)) !== null) {
|
|
17
|
+
if (match.index > lastIndex) {
|
|
18
|
+
tokens.push(escapeHTML(line.slice(lastIndex, match.index)))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const value = escapeHTML(match[0])
|
|
22
|
+
|
|
23
|
+
if (match[1]) {
|
|
24
|
+
tokens.push(`<span class="syntax-comment">${value}</span>`)
|
|
25
|
+
} else if (match[2]) {
|
|
26
|
+
tokens.push(`<span class="syntax-string">${value}</span>`)
|
|
27
|
+
} else if (match[3]) {
|
|
28
|
+
tokens.push(`<span class="syntax-tag">${value}</span>`)
|
|
29
|
+
} else if (match[4]) {
|
|
30
|
+
tokens.push(`<span class="syntax-keyword">${value}</span>`)
|
|
31
|
+
} else if (match[5]) {
|
|
32
|
+
tokens.push(`<span class="syntax-expression">${value}</span>`)
|
|
33
|
+
} else if (match[6]) {
|
|
34
|
+
tokens.push(`<span class="syntax-attr">${value}</span>`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
lastIndex = match.index + match[0].length
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (lastIndex < line.length) {
|
|
41
|
+
tokens.push(escapeHTML(line.slice(lastIndex)))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return tokens.join('')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const renderCodeBlock = (filename, code, lang = 'javascript') => {
|
|
48
|
+
const lines = code
|
|
49
|
+
.replace(/\n$/, '')
|
|
50
|
+
.split('\n')
|
|
51
|
+
.map((line, index) => {
|
|
52
|
+
const highlightedLine = line ? highlightLine(line) : ' '
|
|
53
|
+
|
|
54
|
+
return `<span class="code-line"><span class="line-number">${index + 1}</span><span class="line-code">${highlightedLine}</span></span>`
|
|
55
|
+
})
|
|
56
|
+
.join('')
|
|
57
|
+
|
|
58
|
+
return `
|
|
59
|
+
<div class="code-snippet" data-code="${escapeHTML(code.replace(/\n$/, ''))}">
|
|
60
|
+
<div class="header">
|
|
61
|
+
<div class="mac-dots">
|
|
62
|
+
<span class="dot-red"></span>
|
|
63
|
+
<span class="dot-yellow"></span>
|
|
64
|
+
<span class="dot-green"></span>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="filename">${filename}</div>
|
|
67
|
+
<div class="label">${lang}</div>
|
|
68
|
+
<button class="code-copy-btn" aria-label="Copy code">copy</button>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="content">
|
|
71
|
+
<pre><code class="hljs language-${lang}">${lines}</code></pre>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
`
|
|
75
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export default () => `
|
|
2
|
+
<script type="application/javascript">
|
|
3
|
+
// handle all possible copy snippet code button on the page
|
|
4
|
+
// this implementation is in sync with CodeSnippet partial
|
|
5
|
+
document.querySelectorAll('.code-copy-btn').forEach((copyBtn) => {
|
|
6
|
+
const snippet = copyBtn.closest('.code-snippet')
|
|
7
|
+
const hasCode = snippet?.dataset.code || snippet?.querySelector('code') || snippet?.querySelector('.content')
|
|
8
|
+
if (hasCode) {
|
|
9
|
+
copyBtn.style.visibility = 'visible'
|
|
10
|
+
}
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
document.addEventListener('click', (e) => {
|
|
14
|
+
const copyBtn = e.target.closest('.code-copy-btn')
|
|
15
|
+
if (!copyBtn) return
|
|
16
|
+
|
|
17
|
+
const snippet = copyBtn.closest('.code-snippet')
|
|
18
|
+
if (!snippet) return
|
|
19
|
+
|
|
20
|
+
let code = snippet.dataset.code ?? ''
|
|
21
|
+
|
|
22
|
+
if (!code) {
|
|
23
|
+
const codeEl = snippet.querySelector('code')
|
|
24
|
+
if (codeEl) {
|
|
25
|
+
const clone = codeEl.cloneNode(true)
|
|
26
|
+
clone.querySelectorAll('.line-number').forEach(el => el.remove())
|
|
27
|
+
code = clone.textContent ?? ''
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!code) {
|
|
32
|
+
code = snippet.querySelector('.content')?.textContent ?? ''
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// no code, no copy button
|
|
36
|
+
if (code.trim().length) {
|
|
37
|
+
clearTimeout(copyBtn._timer)
|
|
38
|
+
navigator.clipboard.writeText(code.trim())
|
|
39
|
+
copyBtn.textContent = 'copied'
|
|
40
|
+
copyBtn.setAttribute('aria-label', 'Code copied')
|
|
41
|
+
copyBtn.classList.add('copied')
|
|
42
|
+
copyBtn._timer = setTimeout(() => {
|
|
43
|
+
copyBtn.textContent = 'copy'
|
|
44
|
+
copyBtn.setAttribute('aria-label', 'Copy code')
|
|
45
|
+
copyBtn.classList.remove('copied')
|
|
46
|
+
}, 1000)
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
</script>
|
|
50
|
+
`
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import logo from './_logo.js'
|
|
2
|
+
|
|
3
|
+
const social = [
|
|
4
|
+
{
|
|
5
|
+
link: 'https://medium.com/before-semicolon',
|
|
6
|
+
icon: 'assets/medium2.svg',
|
|
7
|
+
name: 'Medium blog',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
link: 'https://www.facebook.com/beforesemicolon/',
|
|
11
|
+
icon: 'assets/facebook.svg',
|
|
12
|
+
name: 'Facebook',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
link: 'https://www.instagram.com/before_semicolon_/',
|
|
16
|
+
icon: 'assets/instagram.svg',
|
|
17
|
+
name: 'Instagram',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
link: 'https://www.reddit.com/r/beforesemicolon/',
|
|
21
|
+
icon: 'assets/reddit.svg',
|
|
22
|
+
name: 'Reddit',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
link: 'https://twitter.com/BeforeSemicolon',
|
|
26
|
+
icon: 'assets/twitter.svg',
|
|
27
|
+
name: 'Twitter',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
link: 'https://www.youtube.com/channel/UCrU33aw1k9BqTIq2yKXrmBw',
|
|
31
|
+
icon: 'assets/youtube.svg',
|
|
32
|
+
name: 'YouTube',
|
|
33
|
+
},
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
export default () => `
|
|
37
|
+
<footer class="site-footer">
|
|
38
|
+
<div class="footer-inner wrapper">
|
|
39
|
+
<div class="footer-brand">
|
|
40
|
+
${logo({ fill: 'currentColor', width: '100px' })}
|
|
41
|
+
<p>A reactive HTML templating system for building dynamic UIs with pure JavaScript. No build step. No virtual DOM.</p>
|
|
42
|
+
</div>
|
|
43
|
+
<ul class="footer-links">
|
|
44
|
+
<li><h4>Learning Resources</h4></li>
|
|
45
|
+
<li><a href="/documentation">Documentation</a></li>
|
|
46
|
+
<li><a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=mIr2XglV5nQ&list=PLpWvGP6yhJUgWNiz25vj__CArY9Z0O6ke&index=1">Essentials Training</a></li>
|
|
47
|
+
</ul>
|
|
48
|
+
<ul class="footer-links">
|
|
49
|
+
<li><h4>About <em>Before Semicolon</em></h4></li>
|
|
50
|
+
<li><a href="https://github.com/beforesemicolon" rel="noopener" target="_blank">Open Source</a></li>
|
|
51
|
+
<li><a href="https://beforesemicolon.com/" rel="noopener" target="_blank">Website</a></li>
|
|
52
|
+
<li><a href="https://medium.com/before-semicolon" rel="noopener" target="_blank">Blog</a></li>
|
|
53
|
+
<li><a href="https://www.youtube.com/channel/UCrU33aw1k9BqTIq2yKXrmBw" rel="noopener" target="_blank">YouTube Channel</a></li>
|
|
54
|
+
</ul>
|
|
55
|
+
<div class="footer-social" aria-label="social-media">
|
|
56
|
+
${social
|
|
57
|
+
.map(
|
|
58
|
+
(s) => `
|
|
59
|
+
<a href="${s.link}" rel="noopener" target="_blank" aria-label="${s.name}">
|
|
60
|
+
<img src="/${s.icon}" alt="" aria-hidden="true" width="16" height="16" />
|
|
61
|
+
</a>
|
|
62
|
+
`
|
|
63
|
+
)
|
|
64
|
+
.join('')}
|
|
65
|
+
</div>
|
|
66
|
+
<div class="footer-credit">
|
|
67
|
+
<img width="20" height="20" src="/assets/before-semicolon-logo.png" alt="Before Semicolon logo" />
|
|
68
|
+
<span>Copyright © ${new Date().getFullYear()} Before Semicolon. All rights reserved.</span>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</footer>
|
|
72
|
+
`
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/* global process */
|
|
2
|
+
const isDev = process.env.NODE_ENV === 'development'
|
|
3
|
+
|
|
4
|
+
const siteUrl = 'https://markup.beforesemicolon.com'
|
|
5
|
+
const siteName = 'Markup'
|
|
6
|
+
const defaultTitle = 'Markup by Before Semicolon'
|
|
7
|
+
const defaultDescription =
|
|
8
|
+
'Markup is a tiny reactive HTML templating system for building JavaScript user interfaces with web standards, no JSX, and no build step.'
|
|
9
|
+
const defaultImage = `${siteUrl}/assets/markup-banner.jpg`
|
|
10
|
+
const baseKeywords = [
|
|
11
|
+
'Markup',
|
|
12
|
+
'@beforesemicolon/markup',
|
|
13
|
+
'reactive HTML',
|
|
14
|
+
'JavaScript templating',
|
|
15
|
+
'template literals',
|
|
16
|
+
'web components',
|
|
17
|
+
'state management',
|
|
18
|
+
'no build step',
|
|
19
|
+
'vanilla JavaScript',
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
const escapeHTML = (value = '') =>
|
|
23
|
+
String(value)
|
|
24
|
+
.replace(/&/g, '&')
|
|
25
|
+
.replace(/</g, '<')
|
|
26
|
+
.replace(/>/g, '>')
|
|
27
|
+
.replace(/"/g, '"')
|
|
28
|
+
.replace(/'/g, ''')
|
|
29
|
+
|
|
30
|
+
const canonicalPath = (path = '/') => {
|
|
31
|
+
const cleanPath = path.split('?')[0].split('#')[0] || '/'
|
|
32
|
+
|
|
33
|
+
if (cleanPath === '/index.html') return '/'
|
|
34
|
+
if (cleanPath.endsWith('/index.html')) {
|
|
35
|
+
return cleanPath.replace(/index\.html$/, '')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return cleanPath.replace(/\.html$/, '')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const absoluteUrl = (path = '/') => `${siteUrl}${canonicalPath(path)}`
|
|
42
|
+
|
|
43
|
+
const compactDescription = (description) =>
|
|
44
|
+
(description || defaultDescription).replace(/\s+/g, ' ').trim()
|
|
45
|
+
|
|
46
|
+
const pageKeywords = ({ title, name, keywords } = {}) => {
|
|
47
|
+
const values = [
|
|
48
|
+
...baseKeywords,
|
|
49
|
+
title?.replace(/ - Markup by Before Semicolon$/, ''),
|
|
50
|
+
name,
|
|
51
|
+
...(Array.isArray(keywords)
|
|
52
|
+
? keywords
|
|
53
|
+
: String(keywords || '').split(',')),
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
return [...new Set(values.map((value) => value?.trim()).filter(Boolean))]
|
|
57
|
+
.slice(0, 18)
|
|
58
|
+
.join(', ')
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const jsonScript = (data) =>
|
|
62
|
+
`<script type="application/ld+json">${JSON.stringify(data)
|
|
63
|
+
.replace(/</g, '\\u003c')
|
|
64
|
+
.replace(/>/g, '\\u003e')
|
|
65
|
+
.replace(/&/g, '\\u0026')}</script>`
|
|
66
|
+
|
|
67
|
+
const breadcrumbJson = ({ title, path }) => {
|
|
68
|
+
const cleanPath = canonicalPath(path)
|
|
69
|
+
const parts = cleanPath.split('/').filter(Boolean)
|
|
70
|
+
const items = [
|
|
71
|
+
{
|
|
72
|
+
'@type': 'ListItem',
|
|
73
|
+
position: 1,
|
|
74
|
+
name: 'Home',
|
|
75
|
+
item: siteUrl,
|
|
76
|
+
},
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
let current = ''
|
|
80
|
+
parts.forEach((part, index) => {
|
|
81
|
+
current += `/${part}`
|
|
82
|
+
items.push({
|
|
83
|
+
'@type': 'ListItem',
|
|
84
|
+
position: index + 2,
|
|
85
|
+
name:
|
|
86
|
+
index === parts.length - 1
|
|
87
|
+
? title.replace(/ - Markup by Before Semicolon$/, '')
|
|
88
|
+
: part
|
|
89
|
+
.split('-')
|
|
90
|
+
.map((word) => word[0]?.toUpperCase() + word.slice(1))
|
|
91
|
+
.join(' '),
|
|
92
|
+
item: `${siteUrl}${current}`,
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
'@context': 'https://schema.org',
|
|
98
|
+
'@type': 'BreadcrumbList',
|
|
99
|
+
itemListElement: items,
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const pageJson = ({ title, description, path, name }) => {
|
|
104
|
+
const isDocsPage = canonicalPath(path).startsWith('/documentation')
|
|
105
|
+
const url = absoluteUrl(path)
|
|
106
|
+
|
|
107
|
+
if (isDocsPage) {
|
|
108
|
+
return {
|
|
109
|
+
'@context': 'https://schema.org',
|
|
110
|
+
'@type': 'TechArticle',
|
|
111
|
+
headline: title,
|
|
112
|
+
name: name || title,
|
|
113
|
+
description,
|
|
114
|
+
url,
|
|
115
|
+
image: defaultImage,
|
|
116
|
+
inLanguage: 'en-US',
|
|
117
|
+
isPartOf: {
|
|
118
|
+
'@type': 'TechArticle',
|
|
119
|
+
name: 'Markup Documentation',
|
|
120
|
+
url: `${siteUrl}/documentation`,
|
|
121
|
+
},
|
|
122
|
+
about: [
|
|
123
|
+
'Reactive HTML templating',
|
|
124
|
+
'JavaScript template literals',
|
|
125
|
+
'Markup state and effect APIs',
|
|
126
|
+
'Web Components',
|
|
127
|
+
],
|
|
128
|
+
publisher: {
|
|
129
|
+
'@type': 'Organization',
|
|
130
|
+
name: 'Before Semicolon',
|
|
131
|
+
url: 'https://beforesemicolon.com',
|
|
132
|
+
logo: {
|
|
133
|
+
'@type': 'ImageObject',
|
|
134
|
+
url: `${siteUrl}/assets/before-semicolon-logo.png`,
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
mainEntityOfPage: url,
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
'@context': 'https://schema.org',
|
|
143
|
+
'@type': 'SoftwareSourceCode',
|
|
144
|
+
name: 'Markup',
|
|
145
|
+
alternateName: '@beforesemicolon/markup',
|
|
146
|
+
description,
|
|
147
|
+
url,
|
|
148
|
+
image: defaultImage,
|
|
149
|
+
codeRepository: 'https://github.com/beforesemicolon/markup',
|
|
150
|
+
programmingLanguage: 'JavaScript',
|
|
151
|
+
runtimePlatform: 'Browser and Node.js',
|
|
152
|
+
license: 'https://github.com/beforesemicolon/markup/blob/main/LICENSE',
|
|
153
|
+
publisher: {
|
|
154
|
+
'@type': 'Organization',
|
|
155
|
+
name: 'Before Semicolon',
|
|
156
|
+
url: 'https://beforesemicolon.com',
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export default (props = {}) => {
|
|
162
|
+
const title = props.title || defaultTitle
|
|
163
|
+
const description = compactDescription(props.description)
|
|
164
|
+
const url = absoluteUrl(props.path)
|
|
165
|
+
const canonical = escapeHTML(url)
|
|
166
|
+
const image = props.image || defaultImage
|
|
167
|
+
const type = canonicalPath(props.path).startsWith('/documentation')
|
|
168
|
+
? 'article'
|
|
169
|
+
: 'website'
|
|
170
|
+
|
|
171
|
+
return `
|
|
172
|
+
<meta charset="UTF-8" />
|
|
173
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
174
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
|
175
|
+
<title>${escapeHTML(title)}</title>
|
|
176
|
+
<meta name="description" content="${escapeHTML(description)}" />
|
|
177
|
+
<meta name="keywords" content="${escapeHTML(pageKeywords(props))}" />
|
|
178
|
+
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
|
179
|
+
<meta name="googlebot" content="index, follow" />
|
|
180
|
+
<meta name="author" content="Before Semicolon" />
|
|
181
|
+
<meta name="publisher" content="Before Semicolon" />
|
|
182
|
+
<meta name="application-name" content="${siteName}" />
|
|
183
|
+
<meta name="generator" content="@beforesemicolon/builder" />
|
|
184
|
+
<meta name="theme-color" content="#080d12" />
|
|
185
|
+
<meta name="color-scheme" content="dark light" />
|
|
186
|
+
<link rel="canonical" href="${canonical}" />
|
|
187
|
+
<link rel="home" href="${siteUrl}/" />
|
|
188
|
+
<link rel="sitemap" type="application/xml" href="/sitemap.xml" />
|
|
189
|
+
<link rel="alternate" type="text/plain" title="LLMs guide" href="/llms.txt" />
|
|
190
|
+
<link rel="alternate" type="text/plain" title="Full LLM documentation export" href="/llms-full.txt" />
|
|
191
|
+
<meta property="og:title" content="${escapeHTML(title)}" />
|
|
192
|
+
<meta property="og:type" content="${type}" />
|
|
193
|
+
<meta property="og:description" content="${escapeHTML(description)}" />
|
|
194
|
+
<meta property="og:image" content="${escapeHTML(image)}" />
|
|
195
|
+
<meta property="og:image:secure_url" content="${escapeHTML(image)}" />
|
|
196
|
+
<meta property="og:image:width" content="1200" />
|
|
197
|
+
<meta property="og:image:height" content="630" />
|
|
198
|
+
<meta property="og:image:alt" content="${escapeHTML(title)}" />
|
|
199
|
+
<meta property="og:url" content="${canonical}" />
|
|
200
|
+
<meta property="og:site_name" content="${siteName}" />
|
|
201
|
+
<meta property="og:locale" content="en_US" />
|
|
202
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
203
|
+
<meta name="twitter:site" content="@BeforeSemicolon" />
|
|
204
|
+
<meta name="twitter:creator" content="@BeforeSemicolon" />
|
|
205
|
+
<meta name="twitter:title" content="${escapeHTML(title)}" />
|
|
206
|
+
<meta name="twitter:image" content="${escapeHTML(image)}" />
|
|
207
|
+
<meta name="twitter:description" content="${escapeHTML(description)}" />
|
|
208
|
+
<meta name="twitter:image:alt" content="${escapeHTML(title)}" />
|
|
209
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png" />
|
|
210
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png" />
|
|
211
|
+
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png" />
|
|
212
|
+
<link rel="manifest" href="/assets/favicon/site.webmanifest" />
|
|
213
|
+
<link rel="icon" type="image/x-icon" href="/assets/favicon/favicon.ico" />
|
|
214
|
+
<link rel="stylesheet" href="/stylesheets/github-dark.hightlighter.css">
|
|
215
|
+
${jsonScript(pageJson({ ...props, title, description }))}
|
|
216
|
+
${jsonScript(breadcrumbJson({ title, path: props.path }))}
|
|
217
|
+
${
|
|
218
|
+
isDev
|
|
219
|
+
? ''
|
|
220
|
+
: `<!-- Google tag (gtag.js) -->
|
|
221
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-N3MXGDP5PS"></script>
|
|
222
|
+
<script>
|
|
223
|
+
window.dataLayer = window.dataLayer || [];
|
|
224
|
+
function gtag(){dataLayer.push(arguments);}
|
|
225
|
+
gtag('js', new Date());
|
|
226
|
+
|
|
227
|
+
gtag('config', 'G-N3MXGDP5PS');
|
|
228
|
+
</script>`
|
|
229
|
+
}
|
|
230
|
+
`
|
|
231
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import logo from './_logo.js'
|
|
2
|
+
|
|
3
|
+
export default (props = {}) => {
|
|
4
|
+
const isDocs = props.path?.startsWith('/documentation')
|
|
5
|
+
|
|
6
|
+
return `
|
|
7
|
+
<header class="site-header">
|
|
8
|
+
<div class="header-inner wrapper">
|
|
9
|
+
<h1>
|
|
10
|
+
<a href="/" aria-label="Markup home">
|
|
11
|
+
${logo({ fill: 'currentColor', width: '90px' })}
|
|
12
|
+
</a>
|
|
13
|
+
</h1>
|
|
14
|
+
${
|
|
15
|
+
isDocs
|
|
16
|
+
? `
|
|
17
|
+
<nav class="nav-actions docs-actions">
|
|
18
|
+
<a href="https://github.com/beforesemicolon/markup" target="_blank" rel="noopener" aria-label="Markup GitHub repository" class="github-link docs-github-link">
|
|
19
|
+
<span>v${props.projectMeta?.version || ''}</span>
|
|
20
|
+
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
|
|
21
|
+
</a>
|
|
22
|
+
</nav>
|
|
23
|
+
`
|
|
24
|
+
: `
|
|
25
|
+
<nav class="nav-links">
|
|
26
|
+
<a href="/#features">Features</a>
|
|
27
|
+
<a href="/#code">Code</a>
|
|
28
|
+
<a href="/#install">Install</a>
|
|
29
|
+
</nav>
|
|
30
|
+
<nav class="nav-actions">
|
|
31
|
+
<a href="https://github.com/beforesemicolon/markup" target="_blank" rel="noopener" aria-label="GitHub" class="github-link">
|
|
32
|
+
<svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg>
|
|
33
|
+
</a>
|
|
34
|
+
<a href="/documentation" class="btn-primary">Documentation</a>
|
|
35
|
+
</nav>
|
|
36
|
+
`
|
|
37
|
+
}
|
|
38
|
+
</div>
|
|
39
|
+
</header>
|
|
40
|
+
`
|
|
41
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export default ({ fill = '#D2ECFF', width = '80px' } = {}) => `
|
|
2
|
+
<svg
|
|
3
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
4
|
+
viewBox="0 0 207.25 61.99"
|
|
5
|
+
width="207.25"
|
|
6
|
+
height="61.99"
|
|
7
|
+
aria-hidden="true"
|
|
8
|
+
style="width: ${width}; height: auto"
|
|
9
|
+
>
|
|
10
|
+
<g fill="${fill}">
|
|
11
|
+
<path
|
|
12
|
+
d="m47.74.19c-.93-.39-2.01-.17-2.72.54l-20.38,20.38L4.27.73C3.55.02,2.48-.2,1.54.19.61.58,0,1.49,0,2.5v46.81h5V8.54l16.11,16.11-9.19,9.19,3.54,3.54,9.19-9.19,9.19,9.19,3.54-3.54-9.19-9.19,16.11-16.11v40.77h5V2.5c0-1.01-.61-1.92-1.54-2.31Z"
|
|
13
|
+
/>
|
|
14
|
+
<path
|
|
15
|
+
d="m84.81,19.78v29.53h-4.7v-5.34c-.86,1.84-2.16,3.26-3.9,4.26-1.74,1-3.77,1.5-6.08,1.5-2.62,0-4.92-.63-6.9-1.88-1.98-1.25-3.5-3.02-4.58-5.31-1.08-2.29-1.61-4.96-1.61-8.01s.55-5.74,1.64-8.07c1.1-2.33,2.63-4.14,4.61-5.43,1.98-1.29,4.26-1.94,6.84-1.94,2.31,0,4.32.51,6.05,1.53,1.72,1.02,3.03,2.45,3.93,4.29v-5.11h4.7Zm-7.04,23.04c1.56-1.98,2.35-4.78,2.35-8.42s-.78-6.44-2.35-8.39c-1.57-1.96-3.8-2.94-6.69-2.94s-5.16,1.01-6.78,3.02c-1.62,2.02-2.44,4.82-2.44,8.42s.8,6.38,2.41,8.33c1.6,1.96,3.87,2.94,6.81,2.94s5.13-.99,6.69-2.96Z"
|
|
16
|
+
/>
|
|
17
|
+
<path
|
|
18
|
+
d="m110.46,19.43l-.12,4.34c-.9-.31-1.94-.47-3.11-.47-2.86,0-4.98.89-6.37,2.67-1.39,1.78-2.08,3.94-2.08,6.49v16.85h-4.75v-21.25c0-3.05-.16-5.81-.47-8.28h4.52l.47,5.46c.74-2,1.94-3.52,3.58-4.58,1.64-1.06,3.52-1.58,5.63-1.58.98,0,1.88.12,2.7.35Z"
|
|
19
|
+
/>
|
|
20
|
+
<path
|
|
21
|
+
d="m135.17,49.31l-15.14-14.21v14.21h-4.75V6.11h4.75v27.24l13.91-13.5h6.05l-14.79,14.15,16.2,15.32h-6.22Z"
|
|
22
|
+
/>
|
|
23
|
+
<path
|
|
24
|
+
d="m170.22,19.78v29.53h-4.64v-5.11c-.94,1.8-2.25,3.17-3.93,4.11-1.68.94-3.58,1.41-5.69,1.41-3.48,0-6.12-.98-7.92-2.94-1.8-1.96-2.7-4.85-2.7-8.69v-18.31h4.75v18.2c0,2.66.55,4.62,1.64,5.87,1.09,1.25,2.76,1.88,4.99,1.88,2.62,0,4.73-.85,6.34-2.55,1.6-1.7,2.41-3.94,2.41-6.72v-16.67h4.75Z"
|
|
25
|
+
/>
|
|
26
|
+
<path
|
|
27
|
+
d="m200.97,21.02c2,1.29,3.54,3.1,4.64,5.43,1.1,2.33,1.64,5.02,1.64,8.07s-.55,5.72-1.64,8.01c-1.1,2.29-2.63,4.06-4.61,5.31-1.98,1.25-4.28,1.88-6.9,1.88-2.31,0-4.32-.51-6.05-1.53-1.72-1.02-3.03-2.47-3.93-4.34v18.14h-4.75V28.06c0-3.05-.16-5.81-.47-8.28h4.52l.47,5.69c.82-2.03,2.12-3.61,3.9-4.73,1.78-1.12,3.88-1.67,6.31-1.67,2.58,0,4.87.65,6.87,1.94Zm-1.03,21.84c1.58-1.96,2.38-4.73,2.38-8.33s-.8-6.41-2.41-8.42c-1.61-2.02-3.84-3.02-6.69-3.02s-5.19.98-6.75,2.94c-1.57,1.96-2.35,4.75-2.35,8.39s.78,6.45,2.35,8.42c1.57,1.98,3.82,2.96,6.75,2.96s5.14-.98,6.72-2.94Z"
|
|
28
|
+
/>
|
|
29
|
+
</g>
|
|
30
|
+
</svg>
|
|
31
|
+
`
|