From 142dc0f4defb5b337968db9e5e9ffe5ffd544a87 Mon Sep 17 00:00:00 2001
From: JSer <69352453+JSerZANP@users.noreply.github.com>
Date: Sun, 3 Dec 2023 23:28:08 +0900
Subject: [PATCH 01/20] support suger-high
---
examples/web/app/sugar-high/page.tsx | 22 +
.../CodeSnippetPreviewSugarHigh.tsx | 266 +++++++
.../web/components/CodeSnippetSugarHigh.tsx | 80 +++
examples/web/css/global.css | 1 +
examples/web/css/shaku.css | 10 +-
examples/web/css/sugar-high.css | 13 +
examples/web/package.json | 1 +
package-lock.json | 57 +-
.../shaku-code-annotate-core/src/parser.ts | 2 +-
.../shaku-code-annotate-shiki/src/render.ts | 7 +-
.../CHANGELOG.md | 85 +++
.../shaku-code-annotate-sugar-high/README.md | 52 ++
.../static/shaku-code-annotate-screenshot.png | Bin 0 -> 404692 bytes
.../package.json | 34 +
.../src/codeToShakuHtml.ts | 673 ++++++++++++++++++
.../src/defaultCode.mts | 26 +
.../src/index.mts | 395 ++++++++++
.../src/render.mts | 124 ++++
.../src/types.mts | 4 +
.../tsconfig.json | 14 +
.../vitest.config.ts | 7 +
21 files changed, 1854 insertions(+), 19 deletions(-)
create mode 100644 examples/web/app/sugar-high/page.tsx
create mode 100644 examples/web/components/CodeSnippetPreviewSugarHigh.tsx
create mode 100644 examples/web/components/CodeSnippetSugarHigh.tsx
create mode 100644 examples/web/css/sugar-high.css
create mode 100644 packages/shaku-code-annotate-sugar-high/CHANGELOG.md
create mode 100644 packages/shaku-code-annotate-sugar-high/README.md
create mode 100644 packages/shaku-code-annotate-sugar-high/docs/static/shaku-code-annotate-screenshot.png
create mode 100644 packages/shaku-code-annotate-sugar-high/package.json
create mode 100644 packages/shaku-code-annotate-sugar-high/src/codeToShakuHtml.ts
create mode 100644 packages/shaku-code-annotate-sugar-high/src/defaultCode.mts
create mode 100644 packages/shaku-code-annotate-sugar-high/src/index.mts
create mode 100644 packages/shaku-code-annotate-sugar-high/src/render.mts
create mode 100644 packages/shaku-code-annotate-sugar-high/src/types.mts
create mode 100644 packages/shaku-code-annotate-sugar-high/tsconfig.json
create mode 100644 packages/shaku-code-annotate-sugar-high/vitest.config.ts
diff --git a/examples/web/app/sugar-high/page.tsx b/examples/web/app/sugar-high/page.tsx
new file mode 100644
index 0000000..96fbeab
--- /dev/null
+++ b/examples/web/app/sugar-high/page.tsx
@@ -0,0 +1,22 @@
+import Head from "next/head";
+import { CodeSnippetSugarHigh } from "../../components/CodeSnippetSugarHigh";
+
+export default async function Page({
+ searchParams,
+}: {
+ searchParams: { [key: string]: string | string[] | undefined };
+}) {
+ const codeFromParams = searchParams?.code;
+ const langFromParams = searchParams?.lang;
+ const code = typeof codeFromParams === "string" ? codeFromParams : null;
+ const lang = typeof langFromParams === "string" ? langFromParams : null;
+
+ return (
+ <>
+
+ Shaku x Sugar High
+
+
+ >
+ );
+}
diff --git a/examples/web/components/CodeSnippetPreviewSugarHigh.tsx b/examples/web/components/CodeSnippetPreviewSugarHigh.tsx
new file mode 100644
index 0000000..d937f73
--- /dev/null
+++ b/examples/web/components/CodeSnippetPreviewSugarHigh.tsx
@@ -0,0 +1,266 @@
+import { useDeferredValue, useState } from "react";
+
+import withShiki from "@stefanprobst/remark-shiki";
+import domtoimage from "dom-to-image";
+import { $ } from "migacss";
+import { useCallback, useRef } from "react";
+import { remark } from "remark";
+import html from "remark-html";
+import { remarkShakuCodeAnnotate } from "remark-shaku-code-annotate";
+import { highlight } from "shaku-code-annotate-sugar-high";
+import * as shiki from "shiki";
+import { Fetcher } from "./Fetcher";
+import { View } from "./bare";
+
+const themes = [
+ {
+ name: "blue",
+ background: "#d3efff",
+ cssVars: {
+ "--color-shaku-highlight-dark": "#2b4a70",
+ "--color-shaku-callout-dark": "#0685ce",
+ "--color-shaku-underline-dark": "#0893e3",
+ },
+ },
+ {
+ name: "purple",
+ background: "#fddbfd",
+ cssVars: {
+ "--color-shaku-highlight-dark": "#656065",
+ "--color-shaku-callout-dark": "#df1fdf",
+ "--color-shaku-underline-dark": "#e221e2",
+ },
+ },
+ {
+ name: "green",
+ background: "#dbfdeb",
+ cssVars: {
+ "--color-shaku-highlight-dark": "#424a46",
+ "--color-shaku-callout-dark": "#09984a",
+ "--color-shaku-underline-dark": "#09984a",
+ },
+ },
+ {
+ name: "yellow",
+ background: "#f9fddb",
+ cssVars: {
+ "--color-shaku-highlight-dark": "#3e3f36",
+ "--color-shaku-callout-dark": "#738200",
+ "--color-shaku-underline-dark": "#738200",
+ },
+ },
+ {
+ name: "red",
+ background: "#fddbdb",
+ cssVars: {
+ "--color-shaku-highlight-dark": "#3e3f36",
+ "--color-shaku-callout-dark": "#940000",
+ "--color-shaku-underline-dark": "#d01212",
+ },
+ },
+] as const;
+
+function fetchProcessor(lang) {
+ return shiki
+ .getHighlighter({
+ theme: "github-dark",
+ langs: [lang],
+ paths: {
+ themes: "/_next/static/shiki/themes",
+ wasm: "/_next/static/shiki/dist",
+ languages: "/_next/static/shiki/languages",
+ },
+ })
+ .then((highlighter) =>
+ remark()
+ .use(remarkShakuCodeAnnotate, {
+ theme: "github-dark",
+ langs: [lang],
+
+ paths: {
+ themes: "/_next/static/shiki/themes",
+ wasm: "/_next/static/shiki/dist",
+ languages: "/_next/static/shiki/languages",
+ },
+ })
+ .use(withShiki, { highlighter })
+ .use(html, { sanitize: false })
+ );
+}
+
+const processorStore = new Map>>();
+const getProcessor = (lang: string) => {
+ if (!processorStore.has(lang)) {
+ processorStore.set(lang, new Fetcher(() => fetchProcessor(lang)));
+ }
+ return processorStore.get(lang).fetch();
+};
+
+const processedResultStore = new Map>();
+const getProcessedResult = (
+ lang: string,
+ code: string,
+ processor: ReturnType
+) => {
+ const key = `${lang}|${code}`;
+
+ if (!processedResultStore.has(key)) {
+ processedResultStore.set(
+ key,
+ new Fetcher(() =>
+ processor
+ .process(`\`\`\`${lang} annotate\n${code}\n\`\`\``)
+ .then((data) => {
+ return data.toString();
+ })
+ )
+ );
+
+ if (processedResultStore.size > 5) {
+ const firstResultKey = processedResultStore.entries().next().value.key;
+ processedResultStore.delete(firstResultKey);
+ }
+ }
+ return processedResultStore.get(key).fetch();
+};
+
+export default function CodeSnippetPreviewSugarHigh({
+ lang,
+ code,
+}: {
+ lang?: string | null;
+ code: string;
+}) {
+ const [selectedTheme, setTheme] = useState<(typeof themes)[number]>(
+ themes[0]
+ );
+ const [showLogo, setShowLogo] = useState(true);
+
+ const deferredLang = useDeferredValue(lang);
+ const deferredCode = useDeferredValue(code);
+ const processor = getProcessor(deferredLang);
+ // const preview = getProcessedResult(deferredLang, deferredCode, processor);
+ const preview = highlight(code);
+ console.log("preview", preview);
+ const refPreview = useRef(null);
+
+ const download = useCallback(() => {
+ const elPreview = refPreview.current;
+ if (elPreview == null) return;
+ const offsetWidth = elPreview.offsetWidth;
+ const offsetHeight = elPreview.offsetHeight;
+
+ domtoimage
+ .toSvg(elPreview, {
+ width: offsetWidth * 2,
+ height: offsetHeight * 2,
+ style: {
+ transform: "scale(2)",
+ transformOrigin: "0 0",
+ },
+ })
+ .then((dataUrl) => {
+ const img = new Image();
+ img.src = dataUrl;
+ img.onload = () => {
+ // render the svg to canvas 2x
+ // then export to blob
+ const canvas = document.createElement("canvas");
+
+ // document.body.append(canvas)
+ const ctx = canvas.getContext("2d");
+ canvas.width = img.width;
+ canvas.height = img.height;
+
+ ctx.drawImage(
+ img,
+ 0,
+ 0,
+ img.width,
+ img.height,
+ 0,
+ 0,
+ canvas.width,
+ canvas.height
+ );
+ canvas.toBlob((blob) => {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement("a");
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob);
+ link.download = "shaku.png";
+
+ // It needs to be added to the DOM so it can be clicked
+ document.body.appendChild(link);
+ link.click();
+
+ // To make this work on Firefox we need to wait
+ // a little while before removing it.
+ setTimeout(() => {
+ URL.revokeObjectURL(link.href);
+ link.parentNode.removeChild(link);
+ }, 0);
+ }, "image/png");
+ };
+ });
+
+ return;
+ }, []);
+
+ return (
+
+
+ <$.div
+ $whiteSpace="pre-wrap"
+ $fontFamily="var(--font-code)"
+ $fontSize={"14px"}
+ dangerouslySetInnerHTML={{ __html: preview }}
+ >$.div>
+
+
+ );
+}
+
+function Dot({ color }: { color: string }) {
+ return (
+ <$.span
+ $backgroundColor={color}
+ $width="12px"
+ $height="12px"
+ $display="inline-block"
+ $borderRadius="15px"
+ >$.span>
+ );
+}
+
+function ThemePicker({
+ onClick,
+ name,
+ selected,
+ background,
+}: {
+ onClick: () => void;
+ name: string;
+ selected?: boolean;
+ background: string;
+}) {
+ return (
+
+ );
+}
diff --git a/examples/web/components/CodeSnippetSugarHigh.tsx b/examples/web/components/CodeSnippetSugarHigh.tsx
new file mode 100644
index 0000000..f092d6c
--- /dev/null
+++ b/examples/web/components/CodeSnippetSugarHigh.tsx
@@ -0,0 +1,80 @@
+"use client";
+
+import { Editor } from "@monaco-editor/react";
+import { $ } from "migacss";
+import dynamic from "next/dynamic";
+import { useState } from "react";
+import { BsStars } from "react-icons/bs";
+import { defaultCode } from "remark-shaku-code-annotate";
+import CodeSnippetPreviewSugarHigh from "./CodeSnippetPreviewSugarHigh";
+import { Column, Row, Text, View } from "./bare";
+
+const CodeSnippetPreview = dynamic(() => import("./CodeSnippetPreview"), {
+ ssr: false,
+});
+
+export function CodeSnippetSugarHigh({
+ code: _code,
+ lang: _lang,
+}: {
+ code?: string;
+ lang?: string;
+}) {
+ const lang = "javascript";
+ const [code, setCode] = useState(_code ?? defaultCode[lang] ?? "");
+
+ const share = () => {
+ const query =
+ "code=" + encodeURIComponent(code) + "&lang=" + encodeURIComponent(lang);
+ const url = location.origin + "/snippet?" + query;
+ const type = "text/plain";
+ const blob = new Blob([url], { type });
+ const data = [new ClipboardItem({ [type]: blob })];
+ navigator.clipboard.write(data).then(
+ () => alert("link copied"),
+ () => alert("failed to copy link.")
+ );
+ };
+ return (
+
+
+
+ Shaku Snippet × Sugar High
+ <$.a href="/" $textDecoration="none">
+
+
+ Shaku Playground →
+
+ $.a>
+
+
+ Sugar High is a
+ super lightweight syntax highlighter, Shaku could be enabled through{" "}
+
+ shaku-code-annotate-sugar-high
+
+ . Created by JSer.
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/examples/web/css/global.css b/examples/web/css/global.css
index e37e0f9..d727504 100644
--- a/examples/web/css/global.css
+++ b/examples/web/css/global.css
@@ -1,5 +1,6 @@
@import url("./reset.css");
@import url("./shaku.css");
+@import url("./sugar-high.css");
:root {
--color-text-main: #333;
diff --git a/examples/web/css/shaku.css b/examples/web/css/shaku.css
index 5cddc7f..100bc6d 100644
--- a/examples/web/css/shaku.css
+++ b/examples/web/css/shaku.css
@@ -4,12 +4,13 @@ pre.shaku {
overflow-x: auto;
}
-pre.shaku .line {
+pre.shaku .line,
+pre.shaku .sh__line {
min-height: 1em;
line-height: 1.5;
}
-
-pre.shaku.github-light .line.highlight {
+pre.shaku.github-light .line.highlight,
+pre.shaku .sh__line.highlight {
background-color: var(
--color-shaku-highlight-light,
color-mix(in srgb, rgb(5, 118, 149) 15%, #fff)
@@ -22,7 +23,8 @@ pre.shaku.github-dark .line.highlight {
display: block;
}
-pre.shaku .line.dim {
+pre.shaku .line.dim,
+pre.shaku .sh__line.dim {
opacity: 0.3;
}
diff --git a/examples/web/css/sugar-high.css b/examples/web/css/sugar-high.css
new file mode 100644
index 0000000..34d8585
--- /dev/null
+++ b/examples/web/css/sugar-high.css
@@ -0,0 +1,13 @@
+:root {
+ --sh-class: #2d5e9d;
+ --sh-identifier: #354150;
+ --sh-sign: #8996a3;
+ --sh-string: #00a99a;
+ --sh-keyword: #f47067;
+ --sh-comment: #a19595;
+ --sh-jsxliterals: #6266d1;
+}
+
+.sh__line {
+ line-height: 1.5;
+}
diff --git a/examples/web/package.json b/examples/web/package.json
index cebeb4d..c38bda0 100644
--- a/examples/web/package.json
+++ b/examples/web/package.json
@@ -25,6 +25,7 @@
"react-dom": "^18.2.0",
"react-icons": "^4.10.1",
"remark-shaku-code-annotate": "*",
+ "shaku-code-annotate-sugar-high": "*",
"sanitize-html": "^2.11.0",
"shaku-ui": "*",
"shiki": "^0.14.5"
diff --git a/package-lock.json b/package-lock.json
index 03ca15c..f101a8e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -95,6 +95,7 @@
"react-icons": "^4.10.1",
"remark-shaku-code-annotate": "*",
"sanitize-html": "^2.11.0",
+ "shaku-code-annotate-sugar-high": "*",
"shaku-ui": "*",
"shiki": "^0.14.5"
},
@@ -8446,6 +8447,10 @@
"resolved": "packages/shaku-code-annotate-shiki",
"link": true
},
+ "node_modules/shaku-code-annotate-sugar-high": {
+ "resolved": "packages/shaku-code-annotate-sugar-high",
+ "link": true
+ },
"node_modules/shaku-ui": {
"resolved": "packages/shaku-ui",
"link": true
@@ -9000,6 +9005,11 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/sugar-high": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/sugar-high/-/sugar-high-0.5.5.tgz",
+ "integrity": "sha512-XSLoBuGEfKk3PbN94+3aZefhoSH5n+qXTxcfFs+Ip0EdaY/fdohyyfugW0sJPrgdUfTk4DIxpPsUCq492aLOrw=="
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -10494,13 +10504,7 @@
"version": "0.1.4",
"license": "MIT",
"dependencies": {
- "mdast": "^3.0.0",
- "remark": "^14.0.2",
- "remark-html": "^15.0.2",
- "sanitize-html": "^2.10.0",
- "shiki": "^0.14.2",
- "unified": "^10.1.2",
- "unist-util-visit": "^4.1.2"
+ "sanitize-html": "^2.10.0"
},
"devDependencies": {
"@types/sanitize-html": "^2.9.0",
@@ -10529,6 +10533,21 @@
"vitest": "^0.30.1"
}
},
+ "packages/shaku-code-annotate-sugar-high": {
+ "version": "0.1.4",
+ "license": "MIT",
+ "dependencies": {
+ "sanitize-html": "^2.10.0",
+ "shaku-code-annotate-core": "^0.1.4",
+ "sugar-high": "^0.5.5"
+ },
+ "devDependencies": {
+ "@types/sanitize-html": "^2.9.0",
+ "tsup": "^6.7.0",
+ "typescript": "latest",
+ "vitest": "^0.30.1"
+ }
+ },
"packages/shaku-ui": {
"version": "0.0.1",
"license": "MIT",
@@ -16339,15 +16358,9 @@
"version": "file:packages/shaku-code-annotate-core",
"requires": {
"@types/sanitize-html": "^2.9.0",
- "mdast": "^3.0.0",
- "remark": "^14.0.2",
- "remark-html": "^15.0.2",
"sanitize-html": "^2.10.0",
- "shiki": "^0.14.2",
"tsup": "^6.7.0",
"typescript": "latest",
- "unified": "^10.1.2",
- "unist-util-visit": "^4.1.2",
"vitest": "^0.30.1"
}
},
@@ -16368,6 +16381,18 @@
"vitest": "^0.30.1"
}
},
+ "shaku-code-annotate-sugar-high": {
+ "version": "file:packages/shaku-code-annotate-sugar-high",
+ "requires": {
+ "@types/sanitize-html": "^2.9.0",
+ "sanitize-html": "^2.10.0",
+ "shaku-code-annotate-core": "^0.1.4",
+ "sugar-high": "^0.5.5",
+ "tsup": "^6.7.0",
+ "typescript": "latest",
+ "vitest": "^0.30.1"
+ }
+ },
"shaku-ui": {
"version": "file:packages/shaku-ui",
"requires": {
@@ -16803,6 +16828,11 @@
}
}
},
+ "sugar-high": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/sugar-high/-/sugar-high-0.5.5.tgz",
+ "integrity": "sha512-XSLoBuGEfKk3PbN94+3aZefhoSH5n+qXTxcfFs+Ip0EdaY/fdohyyfugW0sJPrgdUfTk4DIxpPsUCq492aLOrw=="
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -17503,6 +17533,7 @@
"react-icons": "^4.10.1",
"remark-shaku-code-annotate": "*",
"sanitize-html": "^2.11.0",
+ "shaku-code-annotate-sugar-high": "*",
"shaku-ui": "*",
"shiki": "^0.14.5",
"tsconfig": "*",
diff --git a/packages/shaku-code-annotate-core/src/parser.ts b/packages/shaku-code-annotate-core/src/parser.ts
index 8720543..430c6df 100644
--- a/packages/shaku-code-annotate-core/src/parser.ts
+++ b/packages/shaku-code-annotate-core/src/parser.ts
@@ -48,7 +48,7 @@ function isShakuDirectiveHighlightInline(str: string): {
shift: number;
isHighlightInline: boolean;
} {
- const significantLine = str.replace(/ /g, "");
+ const significantLine = str.replace(/\s/g, "");
const matches = significantLine.match(RegShakuDirectiveHighlightInline);
return {
isEscaped: !!matches?.groups?.escape,
diff --git a/packages/shaku-code-annotate-shiki/src/render.ts b/packages/shaku-code-annotate-shiki/src/render.ts
index 9171a0b..e3dc53a 100644
--- a/packages/shaku-code-annotate-shiki/src/render.ts
+++ b/packages/shaku-code-annotate-shiki/src/render.ts
@@ -122,5 +122,10 @@ export function renderSourceLine(sourceLine: IThemedToken[]) {
}
function escapeHtml(html: string) {
- return html.replace(//g, ">");
+ return html
+ .replace(/&/g, "&")
+ .replace(//g, ">")
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
}
diff --git a/packages/shaku-code-annotate-sugar-high/CHANGELOG.md b/packages/shaku-code-annotate-sugar-high/CHANGELOG.md
new file mode 100644
index 0000000..befef20
--- /dev/null
+++ b/packages/shaku-code-annotate-sugar-high/CHANGELOG.md
@@ -0,0 +1,85 @@
+# shaku-code-annotate
+
+## 0.1.4
+
+### Patch Changes
+
+- support escape
+
+## 0.1.3
+
+### Patch Changes
+
+- styling with prefix:shaku
+
+## 0.1.2
+
+### Patch Changes
+
+- now shaku-code-annotate holds the core logic
+
+## 0.1.1
+
+### Patch Changes
+
+- bump
+
+## 0.1.0
+
+### Minor Changes
+
+- 0.1
+
+## 0.0.9
+
+### Patch Changes
+
+- enable shift operator
+
+## 0.0.8
+
+### Patch Changes
+
+- fix
+
+## 0.0.7
+
+### Patch Changes
+
+- fix issues of leading whitespaces
+
+## 0.0.6
+
+### Patch Changes
+
+- add @focus and @dim
+
+## 0.0.5
+
+### Patch Changes
+
+- update
+
+## 0.0.4
+
+### Patch Changes
+
+- fix files
+
+## 0.0.3
+
+### Patch Changes
+
+- fix files
+
+## 0.0.2
+
+### Patch Changes
+
+- fix files
+
+## 0.0.1
+
+### Patch Changes
+
+- prototype of shaku-code-annotate and remark plugin
diff --git a/packages/shaku-code-annotate-sugar-high/README.md b/packages/shaku-code-annotate-sugar-high/README.md
new file mode 100644
index 0000000..ba52f8f
--- /dev/null
+++ b/packages/shaku-code-annotate-sugar-high/README.md
@@ -0,0 +1,52 @@
+# shaku-code-annotate-shiki
+
+釈- _elucidate, explain_
+
+This module enables you to annotate your code snippet with separation from normal comments,
+makes it easier to explain the code. It uses [shiki](https://github.com/shikijs/shiki) as backbone and inspired by [shiki-twoslash](https://shikijs.github.io/twoslash/).
+
+![](./docs/static/shaku-code-annotate-screenshot.png)
+
+Take a look at the live demo from
+
+1. [Shaku playground](https://shaku-web.vercel.app)
+2. [demo with Astro](https://stackblitz.com/edit/github-yunziv?file=src%2Fcontent%2Fblog%2Fshaku.mdx).
+3. [demo with Next.js](https://stackblitz.com/edit/github-hrpoqm-zfq1kt?file=pages%2Findex.mdx).
+
+## Usage
+
+```ts
+import { getShakuHighlighters } from "shaku-code-annotate-shiki";
+
+// 1. get highlighters of one theme or multiple themes
+const highlighters = await getShakuHighlighters({
+ langs: [lang],
+ // theme: 'github-light'
+ themes: ["github-light", "github-dark"],
+});
+
+// 2. for each theme generate HTML from code
+const html = highlighters
+ .map(
+ (highlighter) =>
+ highlighter.codeToShakuHtml({
+ code,
+ meta: "annotate",
+ // by default Shaku falls back to shiki if meta doesn't contain "annotate"
+ // you can turn this off by following option
+ // fallbackToShiki: false
+ parseBasicMarkdown: (code) => code,
+ options: {
+ lang,
+ },
+ }).html
+ )
+ .join("\n");
+```
+
+## Plugins
+
+Generally it is better for you to choose the right plugin for your markdown engine.
+
+1. Remark - [remark-shaku-code-annotate](../remark-shaku-code-annotate/)
+2. Marked - [marked-shaku-code-annotate](../marked-shaku-code-annotate/)
diff --git a/packages/shaku-code-annotate-sugar-high/docs/static/shaku-code-annotate-screenshot.png b/packages/shaku-code-annotate-sugar-high/docs/static/shaku-code-annotate-screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..e784eb4c5687c2f347f485169454a12e3fc44e64
GIT binary patch
literal 404692
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