@hyvor/design 0.0.4 → 0.0.6
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/dist/components/CodeBlock/CodeBlock.svelte +6 -23
- package/dist/components/CodeBlock/CodeBlock.svelte.d.ts +1 -2
- package/dist/components/CodeBlock/prism.d.ts +5 -0
- package/dist/components/CodeBlock/prism.js +28 -0
- package/dist/components/CodeBlock/prism.scss +3 -0
- package/dist/index.css +2 -0
- package/package.json +3 -4
|
@@ -1,28 +1,11 @@
|
|
|
1
1
|
<script>import "./prism.scss";
|
|
2
2
|
export let code;
|
|
3
3
|
export let language = "html";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
ret = ret.replace(/\n[^\S\r\n]*$/, "");
|
|
10
|
-
let lines = ret.split("\n");
|
|
11
|
-
let indent = null;
|
|
12
|
-
lines = lines.map((line) => {
|
|
13
|
-
if (indent === null) {
|
|
14
|
-
const match = line.match(/^(\s*)/);
|
|
15
|
-
indent = match ? match[1].length : 0;
|
|
16
|
-
}
|
|
17
|
-
if (line.substring(0, indent).trim() !== "") {
|
|
18
|
-
return line;
|
|
19
|
-
}
|
|
20
|
-
line = line.substring(indent);
|
|
21
|
-
return line;
|
|
22
|
-
});
|
|
23
|
-
ret = lines.join("\n");
|
|
24
|
-
return Prism.highlight(ret, Prism.languages[language], language);
|
|
25
|
-
}
|
|
4
|
+
const languagesMap = {
|
|
5
|
+
svelte: "tsx"
|
|
6
|
+
};
|
|
7
|
+
const languageCode = languagesMap[language] || language;
|
|
8
|
+
import getCode, {} from "./prism.js";
|
|
26
9
|
</script>
|
|
27
10
|
|
|
28
|
-
<pre class="language-{
|
|
11
|
+
<pre class="language-{languageCode}"><code>{@html getCode(code, languageCode)}</code></pre>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import './prism.scss';
|
|
3
|
-
import 'prism-svelte';
|
|
4
3
|
declare const __propDef: {
|
|
5
4
|
props: {
|
|
6
5
|
code: string;
|
|
7
|
-
language?: "html" | "
|
|
6
|
+
language?: ("html" | "css" | "ts" | "jsx" | "svelte") | undefined;
|
|
8
7
|
};
|
|
9
8
|
events: {
|
|
10
9
|
[evt: string]: CustomEvent<any>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import 'prismjs/components/prism-typescript.js';
|
|
2
|
+
import 'prismjs/components/prism-jsx.js';
|
|
3
|
+
import 'prismjs/components/prism-tsx.js';
|
|
4
|
+
export type Language = 'html' | 'css' | 'js' | 'ts' | 'jsx' | 'tsx';
|
|
5
|
+
export default function getCode(code: string, language: Language): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Prism from 'prismjs';
|
|
2
|
+
import 'prismjs/components/prism-typescript.js';
|
|
3
|
+
import 'prismjs/components/prism-jsx.js';
|
|
4
|
+
import 'prismjs/components/prism-tsx.js';
|
|
5
|
+
export default function getCode(code, language) {
|
|
6
|
+
let ret = code;
|
|
7
|
+
// remove the first empty line
|
|
8
|
+
ret = ret.replace(/^[^\S\r\n]*\n/, "");
|
|
9
|
+
// remove the last empty line
|
|
10
|
+
ret = ret.replace(/\n[^\S\r\n]*$/, "");
|
|
11
|
+
let lines = ret.split("\n");
|
|
12
|
+
let indent = null; // number of spaces to remove from each line
|
|
13
|
+
lines = lines.map(line => {
|
|
14
|
+
if (indent === null) {
|
|
15
|
+
// find the indent
|
|
16
|
+
const match = line.match(/^(\s*)/);
|
|
17
|
+
indent = match ? match[1].length : 0;
|
|
18
|
+
}
|
|
19
|
+
if (line.substring(0, indent).trim() !== "") {
|
|
20
|
+
return line;
|
|
21
|
+
}
|
|
22
|
+
// remove the indent
|
|
23
|
+
line = line.substring(indent);
|
|
24
|
+
return line;
|
|
25
|
+
});
|
|
26
|
+
ret = lines.join("\n");
|
|
27
|
+
return Prism.highlight(ret, Prism.languages[language], language);
|
|
28
|
+
}
|
|
@@ -4,6 +4,9 @@ code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shad
|
|
|
4
4
|
pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:after,.line-numbers .line-highlight:before{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,.2)}
|
|
5
5
|
pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}
|
|
6
6
|
|
|
7
|
+
/* to make jsx look the same as HTML */
|
|
8
|
+
pre[class="language-tsx"] .token.class-name{color:#905}
|
|
9
|
+
|
|
7
10
|
:root.dark {
|
|
8
11
|
code[class*=language-],pre[class*=language-]{color:#d4d4d4;text-shadow:none;font-family:Menlo,Monaco,Consolas,"Andale Mono","Ubuntu Mono","Courier New",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#264f78}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;background:#262626}:not(pre)>code[class*=language-]{padding:.1em .3em;border-radius:.3em;color:#db4c69;background:#262626}.namespace{opacity:.7}.token.boolean,.token.doctype .token.doctype-tag,.token.entity,.token.important,.token.keyword,.token.operator.arrow,.token.punctuation.interpolation-punctuation,.token.tag{color:#569cd6}.token.atrule .token.url,.token.attr-name,.token.console,.token.constant,.token.doctype .token.name,.token.exports .token.maybe-class-name,.token.imports .token.maybe-class-name,.token.interpolation,.token.parameter,.token.property,.token.variable,code[class*=language-javascript],code[class*=language-jsx],code[class*=language-tsx],code[class*=language-typescript],pre[class*=language-javascript],pre[class*=language-jsx],pre[class*=language-tsx],pre[class*=language-typescript]{color:#9cdcfe}.token.comment,.token.prolog{color:#6a9955}.language-html .language-css .token.punctuation,.language-html .language-javascript .token.punctuation,.token.atrule .token.url .token.punctuation,.token.attr-value .token.punctuation.attr-equals,.token.entity,.token.operator,.token.punctuation,code[class*=language-html],pre[class*=language-html]{color:#d4d4d4}.token.boolean,.token.constant,.token.inserted,.token.number,.token.property,.token.symbol,.token.tag,.token.unit{color:#b5cea8}.token.atrule,.token.attr-name,.token.attr-value,.token.attr-value .token.punctuation,.token.builtin,.token.char,.token.deleted,.token.selector,.token.string,code[class*=language-css],pre[class*=language-css]{color:#ce9178}.language-css .token.string.url{text-decoration:underline}.token.atrule .token.rule,.token.keyword.control-flow,.token.keyword.module{color:#c586c0}.language-regex .token.anchor,.token.atrule .token.url .token.function,.token.function,.token.function .token.maybe-class-name{color:#dcdcaa}.token.regex{color:#d16969}.token.italic{font-style:italic}.token.class-name,.token.maybe-class-name,.token.namespace{color:#4ec9b0}.token.escape,.token.selector{color:#d7ba7d}.language-html .token.punctuation,.token.cdata,.token.tag .token.punctuation{color:grey}pre[class*=language-]>code[class*=language-]{position:relative;z-index:1}.line-highlight.line-highlight{background:#f7ebc6;box-shadow:inset 5px 0 0 #f7d87c;z-index:0}
|
|
9
12
|
}
|
package/dist/index.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyvor/design",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"private": false,
|
|
6
6
|
"scripts": {
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
"@sveltejs/adapter-static": "^2.0.3",
|
|
36
36
|
"@sveltejs/kit": "^1.25.1",
|
|
37
37
|
"@sveltejs/package": "^2.0.0",
|
|
38
|
+
"@types/prismjs": "^1.26.1",
|
|
38
39
|
"prismjs": "^1.29.0",
|
|
39
40
|
"publint": "^0.1.9",
|
|
40
41
|
"sass": "^1.68.0",
|
|
41
42
|
"svelte": "^4.0.5",
|
|
42
43
|
"svelte-check": "^3.4.3",
|
|
43
|
-
"svelvg": "^0.12.1",
|
|
44
44
|
"tslib": "^2.4.1",
|
|
45
45
|
"typescript": "^5.0.0",
|
|
46
46
|
"vite": "^4.4.2"
|
|
@@ -50,8 +50,7 @@
|
|
|
50
50
|
"type": "module",
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@fontsource/readex-pro": "^5.0.8",
|
|
53
|
-
"@hyvor/icons": "^0.0.2"
|
|
54
|
-
"prism-svelte": "^0.5.0"
|
|
53
|
+
"@hyvor/icons": "^0.0.2"
|
|
55
54
|
},
|
|
56
55
|
"publishConfig": {
|
|
57
56
|
"access": "public"
|