From 6b764df359575f3af90f77da1e7a927bf64ad306 Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 27 Jan 2024 03:37:53 +0800 Subject: [PATCH] [add] MDX index creator [migrate] update Badge document --- create-index.ts | 51 +++ package.json | 9 +- pnpm-lock.yaml | 391 +++++++++++++++++- source/component/DocumentBox.tsx | 5 +- .../document}/Reminder/Badge.mdx | 197 ++++----- source/document/{ => Reminder}/Icon.mdx | 2 +- source/document/index.ts | 26 ++ source/page/data.ts | 6 + source/{document/index.tsx => utility.tsx} | 15 +- 9 files changed, 594 insertions(+), 108 deletions(-) create mode 100644 create-index.ts rename {document/source/components => source/document}/Reminder/Badge.mdx (52%) rename source/document/{ => Reminder}/Icon.mdx (95%) create mode 100644 source/document/index.ts rename source/{document/index.tsx => utility.tsx} (64%) diff --git a/create-index.ts b/create-index.ts new file mode 100644 index 0000000..a9d2719 --- /dev/null +++ b/create-index.ts @@ -0,0 +1,51 @@ +import { promises } from 'fs'; +import { filter, traverse } from 'fs-match'; +import { join } from 'path'; +import { parse } from 'yaml'; + +const title = 'MDX index creator', + [folder] = process.argv.slice(2); + +const MDXPattern = /\.(mdx?|markdown)$/, + sourceCode: string[] = [], + targetPath = join(folder, 'index.ts'); + +console.time(title); + +(async () => { + for await (const filePath of filter(traverse(folder), MDXPattern)) { + const content = await promises.readFile(filePath, { + encoding: 'utf-8' + }); + const [_, frontMatter] = content.match(/^---([\s\S]*?)\n---/m) || []; + + const meta = JSON.stringify(parse(frontMatter), null, 4) + .slice(1, -1) + .trim(); + const path = filePath.replaceAll('\\', '/').slice(folder.length); + + sourceCode.push(`{ + path: '${path.replace(MDXPattern, '').toLowerCase()}', + ${meta}, + component: lazy(loadMDX(() => import('./${path}'))) +}`); + } + + await promises.writeFile( + targetPath, + `// This file is created by "${title}" script, +// please don't edit it manually! + +import { lazy } from 'web-cell'; + +import { loadMDX } from '../utility'; + +export default [ +${sourceCode} +]; +` + ); + + console.log(`[save] ${targetPath}`); + console.timeEnd(title); +})(); diff --git a/package.json b/package.json index 290fc4d..d9aebd8 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@types/lodash.groupby": "^4.6.9", "@types/mdx": "^2.0.10", "@types/node": "^18.19.9", + "fs-match": "^1.7.1", "husky": "^9.0.5", "lint-staged": "^15.2.0", "parcel": "~2.11.0", @@ -39,8 +40,10 @@ "postcss": "^8.4.33", "postcss-modules": "^4.3.1", "prettier": "^3.2.4", + "tsx": "^4.7.0", "typescript": "~5.3.3", - "workbox-cli": "^7.0.0" + "workbox-cli": "^7.0.0", + "yaml": "^2.3.4" }, "prettier": { "singleQuote": true, @@ -52,9 +55,9 @@ "*.{html,md,mdx,less,json,yml,ts,tsx}": "prettier --write" }, "scripts": { - "prepare": "husky", + "prepare": "husky && npm run clean", "test": "lint-staged", - "clean": "rm -rf .parcel-cache/ dist/", + "clean": "rm -rf .parcel-cache/ dist/ && tsx create-index source/document/", "pack-tsx": "parcel build source/index.html --public-url .", "build": "npm run clean && npm run pack-tsx && workbox generateSW", "start": "npm run clean && parcel source/index.html --open" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16b2e3c..d635c8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,6 +88,9 @@ devDependencies: '@types/node': specifier: ^18.19.9 version: 18.19.9 + fs-match: + specifier: ^1.7.1 + version: 1.7.1(@types/node@18.19.9) husky: specifier: ^9.0.5 version: 9.0.5 @@ -109,12 +112,18 @@ devDependencies: prettier: specifier: ^3.2.4 version: 3.2.4 + tsx: + specifier: ^4.7.0 + version: 4.7.0 typescript: specifier: ~5.3.3 version: 5.3.3 workbox-cli: specifier: ^7.0.0 version: 7.0.0 + yaml: + specifier: ^2.3.4 + version: 2.3.4 packages: @@ -1322,6 +1331,213 @@ packages: to-fast-properties: 2.0.0 dev: true + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -2645,6 +2861,32 @@ packages: defer-to-connect: 1.1.3 dev: true + /@tech_query/node-toolkit@1.2.1(@types/node@18.19.9): + resolution: {integrity: sha512-XFw0EVc8LCcC+CNo+lCxi+5iiPzQyubz41rP4iNuMueN+kjn/KMliaHKLZ5kAnCi+HxmuJPmzrSi6vZtuP07Hg==} + peerDependencies: + '@babel/plugin-transform-modules-commonjs': ^7.0.0 + '@babel/preset-env': ^7.0.0 + '@types/node': '>=18' + dependencies: + '@babel/core': 7.23.7 + '@types/node': 18.19.9 + cross-spawn: 7.0.3 + file-type: 16.5.4 + fs-extra: 11.2.0 + marked: 4.3.0 + mime: 3.0.0 + prettier: 2.8.8 + prismjs: 1.29.0 + uglify-js: 3.17.4 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@tokenizer/token@0.3.0: + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + dev: true + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -3410,6 +3652,18 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: true + /commander-jsx@0.6.9(@types/node@18.19.9): + resolution: {integrity: sha512-E/wSYQhT7kgqd98WW8sdRiM+3i+J9Z30NOBTCdfD88p2k/po4+JEzikqOECKA1OouTqnAuIgdg5aKGbjq5B0jg==} + dependencies: + '@tech_query/node-toolkit': 1.2.1(@types/node@18.19.9) + tslib: 2.6.2 + transitivePeerDependencies: + - '@babel/plugin-transform-modules-commonjs' + - '@babel/preset-env' + - '@types/node' + - supports-color + dev: true + /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} @@ -3834,6 +4088,37 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3971,6 +4256,15 @@ packages: escape-string-regexp: 1.0.5 dev: true + /file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + dev: true + /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: @@ -4012,6 +4306,15 @@ packages: engines: {node: '>=0.4.x'} dev: true + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -4022,6 +4325,20 @@ packages: universalify: 2.0.1 dev: true + /fs-match@1.7.1(@types/node@18.19.9): + resolution: {integrity: sha512-8tb7tQsSoHpGJJscGdrdi983tRr6HZMB7i4dTPHGgL8XoRfIVnQiTq/xvSTeW3bHAfHEF/Uhe4z683Ym+ACMnA==} + hasBin: true + dependencies: + commander-jsx: 0.6.9(@types/node@18.19.9) + fs-extra: 11.2.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@babel/plugin-transform-modules-commonjs' + - '@babel/preset-env' + - '@types/node' + - supports-color + dev: true + /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -4117,6 +4434,12 @@ packages: get-intrinsic: 1.2.2 dev: true + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /github-web-widget@4.0.0-rc.1(typescript@5.3.3): resolution: {integrity: sha512-QFZ408NQR/XA4iw+9Lb71zRhZV4DF8Q05dq0CaOP/D28+L+mrGHHuz0wNUuHpnhYc5OwjAxz/rGE33/6uXqj7g==} peerDependencies: @@ -5339,6 +5662,12 @@ packages: hasBin: true dev: false + /marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + dev: true + /mdast-util-find-and-replace@3.0.1: resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: @@ -5943,6 +6272,12 @@ packages: dev: true optional: true + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -6420,6 +6755,11 @@ packages: engines: {node: '>=8'} dev: true + /peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -6562,6 +6902,12 @@ packages: engines: {node: '>=4'} dev: true + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} @@ -6581,7 +6927,6 @@ packages: /prismjs@1.29.0: resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} engines: {node: '>=6'} - dev: false /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} @@ -6721,6 +7066,13 @@ packages: util-deprecate: 1.0.2 dev: true + /readable-web-to-node-stream@3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} + dependencies: + readable-stream: 3.6.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -6892,6 +7244,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -7328,6 +7684,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + dev: true + /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: @@ -7448,6 +7812,14 @@ packages: is-number: 7.0.0 dev: true + /token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + dev: true + /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} dev: true @@ -7478,6 +7850,17 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tsx@4.7.0: + resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.19.12 + get-tsconfig: 4.7.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /turndown-plugin-gfm@1.0.2: resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} dev: false @@ -7572,6 +7955,12 @@ packages: engines: {node: '>=14.17'} hasBin: true + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: diff --git a/source/component/DocumentBox.tsx b/source/component/DocumentBox.tsx index 8f1a0ca..eeb074a 100644 --- a/source/component/DocumentBox.tsx +++ b/source/component/DocumentBox.tsx @@ -35,7 +35,10 @@ export const DocumentBox: FC> = observer(
{group}
{list.map(({ href, title }) => ( - + {title} ))} diff --git a/document/source/components/Reminder/Badge.mdx b/source/document/Reminder/Badge.mdx similarity index 52% rename from document/source/components/Reminder/Badge.mdx rename to source/document/Reminder/Badge.mdx index 5f867ae..a2e491f 100644 --- a/document/source/components/Reminder/Badge.mdx +++ b/source/document/Reminder/Badge.mdx @@ -5,10 +5,9 @@ description: Documentation and examples for badges, our small count and labeling group: Components --- -import { Badge } from 'boot-cell/source/Reminder/Badge'; -import { Button } from 'boot-cell/source/Form/Button'; +import { Badge, Button } from 'boot-cell'; -import { Example } from '../../../../source/component/Example'; +import { Example } from '../../component/Example'; ## Example @@ -19,43 +18,46 @@ Badges scale to match the size of the immediate parent element by using relative const Tag = `h${level}`; return ( - Example heading New + Example heading New ); })} -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; - -render([1, 2, 3, 4, 5, 6].map(level => { - const Tag = `h${level}`; - - return ( - - Example heading New - - ); -})); +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge } from 'boot-cell'; + +new DOMRenderer().render( + <> + {[1, 2, 3, 4, 5, 6].map(level => { + const Tag = `h${level}`; + + return ( + + Example heading New + + ); + })} + +); ``` Badges can be used as part of links or buttons to provide a counter. - -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; -import { Button } from 'boot-cell/source/Form/Button'; +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge, Button } from 'boot-cell'; -render( - ); ``` @@ -70,20 +72,19 @@ Unless the context is clear (as with the “Notifications” example, where it i the “4” is the number of notifications), consider including additional context with a visually hidden piece of additional text. - -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; -import { Button } from 'boot-cell/source/Form/Button'; +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge, Button } from 'boot-cell'; -render( - ); @@ -104,30 +105,34 @@ Add any of the below mentioned `color` property values to change the appearance 'light', 'dark' ].map(color => ( - + {color} ))} -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; - -render([ - 'primary', - 'secondary', - 'success', - 'danger', - 'warning', - 'info', - 'light', - 'dark' -].map(color => ( - - {color} - -))); +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge } from 'boot-cell'; + +new DOMRenderer().render( + <> + {[ + 'primary', + 'secondary', + 'success', + 'danger', + 'warning', + 'info', + 'light', + 'dark' + ].map(color => ( + + {color} + + ))} + +); ``` > ##### Conveying meaning to assistive technologies @@ -152,30 +157,34 @@ Useful if you miss the badges from v3. 'light', 'dark' ].map(color => ( - + {color} ))} -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; - -render([ - 'primary', - 'secondary', - 'success', - 'danger', - 'warning', - 'info', - 'light', - 'dark' -].map(color => ( - - {color} - -))); +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge } from 'boot-cell'; + +new DOMRenderer().render( + <> + {[ + 'primary', + 'secondary', + 'success', + 'danger', + 'warning', + 'info', + 'light', + 'dark' + ].map(color => ( + + {color} + + ))} + +); ``` ## Links @@ -193,28 +202,32 @@ Using `href` property on `` quickly provide actionable badges with hove 'light', 'dark' ].map(color => ( - + {color} ))} -```TSX -import { render, createCell } from 'web-cell'; -import { Badge } from 'boot-cell/source/Reminder/Badge'; - -render([ - 'primary', - 'secondary', - 'success', - 'danger', - 'warning', - 'info', - 'light', - 'dark' -].map(color => ( - - {color} - -))); +```tsx +import { DOMRenderer } from 'dom-renderer'; +import { Badge } from 'boot-cell'; + +new DOMRenderer().render( + <> + {[ + 'primary', + 'secondary', + 'success', + 'danger', + 'warning', + 'info', + 'light', + 'dark' + ].map(color => ( + + {color} + + ))} + +); ``` diff --git a/source/document/Icon.mdx b/source/document/Reminder/Icon.mdx similarity index 95% rename from source/document/Icon.mdx rename to source/document/Reminder/Icon.mdx index 0ac2c69..32fc863 100644 --- a/source/document/Icon.mdx +++ b/source/document/Reminder/Icon.mdx @@ -7,7 +7,7 @@ group: Components import { Icon } from 'boot-cell'; -import { Example } from '../component/Example'; +import { Example } from '../../component/Example'; This component is built on [Web font of BootStrap Icon 1.2+][1], so make sure to include it before bundling: diff --git a/source/document/index.ts b/source/document/index.ts new file mode 100644 index 0000000..e9c81c3 --- /dev/null +++ b/source/document/index.ts @@ -0,0 +1,26 @@ +// This file is created by "MDX index creating" script, +// please don't edit it manually! + +import { lazy } from 'web-cell'; + +import { loadMDX } from '../utility'; + +export default [ + { + path: 'reminder/badge', + layout: 'docs', + title: 'Badge', + description: + 'Documentation and examples for badges, our small count and labeling component.', + group: 'Components', + component: lazy(loadMDX(() => import('./Reminder/Badge.mdx'))) + }, + { + path: 'reminder/icon', + layout: 'docs', + title: 'Icon', + description: 'Wrapper component for BootStrap Icon v1.2+ (Web font)', + group: 'Components', + component: lazy(loadMDX(() => import('./Reminder/Icon.mdx'))) + } +]; diff --git a/source/page/data.ts b/source/page/data.ts index dee5d2e..2e5fd4e 100644 --- a/source/page/data.ts +++ b/source/page/data.ts @@ -1,9 +1,15 @@ import { WebCellProps } from 'web-cell'; +import { groupBy } from 'web-utility'; import documents from '../document'; documents.sort(({ path: A }, { path: B }) => A.localeCompare(B)); +export const side_menu = groupBy( + documents.map(({ path: href, component, ...meta }) => ({ ...meta, href })), + 'group' +); + export const main_menu: WebCellProps[] = [ { title: 'Documentation', diff --git a/source/document/index.tsx b/source/utility.tsx similarity index 64% rename from source/document/index.tsx rename to source/utility.tsx index f485341..31bc998 100644 --- a/source/document/index.tsx +++ b/source/utility.tsx @@ -1,9 +1,10 @@ -import { WebCellComponent, lazy } from 'web-cell'; +import { WebCellComponent } from 'web-cell'; import { PageProps } from 'cell-router'; -import { DocumentBox } from '../component/DocumentBox'; +import { DocumentBox } from './component/DocumentBox'; +import { side_menu } from './page/data'; -function loadMDX Promise<{ default: WebCellComponent }>>( +export function loadMDX Promise<{ default: WebCellComponent }>>( loader: T ) { return async () => { @@ -14,6 +15,7 @@ function loadMDX Promise<{ default: WebCellComponent }>>( default: (props: PageProps) => ( Promise<{ default: WebCellComponent }>>( }; }; } - -export default [ - { - path: 'icon', - component: lazy(loadMDX(() => import('./Icon.mdx'))) - } -];