@outfitter/cli 0.1.0-rc.1 → 0.1.0-rc.3
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 +21 -32
- package/dist/actions.js +1 -1
- package/dist/borders/index.d.ts +3 -0
- package/dist/borders/index.js +13 -0
- package/dist/box/index.d.ts +4 -0
- package/dist/box/index.js +13 -0
- package/dist/cli.d.ts +2 -103
- package/dist/cli.js +4 -51
- package/dist/colors/index.d.ts +3 -0
- package/dist/colors/index.js +18 -0
- package/dist/command.d.ts +3 -37
- package/dist/command.js +5 -1
- package/dist/demo/index.d.ts +78 -0
- package/dist/demo/index.js +148 -0
- package/dist/demo/registry.d.ts +7 -0
- package/dist/demo/registry.js +28 -0
- package/dist/demo/renderers/borders.d.ts +7 -0
- package/dist/demo/renderers/borders.js +17 -0
- package/dist/demo/renderers/box.d.ts +7 -0
- package/dist/demo/renderers/box.js +18 -0
- package/dist/demo/renderers/colors.d.ts +7 -0
- package/dist/demo/renderers/colors.js +18 -0
- package/dist/demo/renderers/indicators.d.ts +7 -0
- package/dist/demo/renderers/indicators.js +17 -0
- package/dist/demo/renderers/list.d.ts +7 -0
- package/dist/demo/renderers/list.js +19 -0
- package/dist/demo/renderers/markdown.d.ts +7 -0
- package/dist/demo/renderers/markdown.js +18 -0
- package/dist/demo/renderers/progress.d.ts +7 -0
- package/dist/demo/renderers/progress.js +17 -0
- package/dist/demo/renderers/spinner.d.ts +7 -0
- package/dist/demo/renderers/spinner.js +19 -0
- package/dist/demo/renderers/table.d.ts +7 -0
- package/dist/demo/renderers/table.js +19 -0
- package/dist/demo/renderers/text.d.ts +7 -0
- package/dist/demo/renderers/text.js +16 -0
- package/dist/demo/renderers/tree.d.ts +7 -0
- package/dist/demo/renderers/tree.js +18 -0
- package/dist/demo/section.d.ts +5 -0
- package/dist/demo/section.js +23 -0
- package/dist/demo/templates.d.ts +4 -0
- package/dist/demo/templates.js +10 -0
- package/dist/demo/types.d.ts +3 -0
- package/dist/demo/types.js +8 -0
- package/dist/index.d.ts +5 -607
- package/dist/index.js +10 -44
- package/dist/input.d.ts +9 -123
- package/dist/input.js +2 -3
- package/dist/list/index.d.ts +3 -0
- package/dist/list/index.js +9 -0
- package/dist/output.d.ts +2 -68
- package/dist/output.js +4 -150
- package/dist/pagination.d.ts +1 -34
- package/dist/pagination.js +1 -1
- package/dist/preset/full.d.ts +14 -0
- package/dist/preset/full.js +41 -0
- package/dist/preset/standard.d.ts +11 -0
- package/dist/preset/standard.js +30 -0
- package/dist/prompt/confirm.d.ts +4 -0
- package/dist/prompt/confirm.js +9 -0
- package/dist/prompt/group.d.ts +4 -0
- package/dist/prompt/group.js +9 -0
- package/dist/prompt/index.d.ts +7 -0
- package/dist/prompt/index.js +32 -0
- package/dist/prompt/select.d.ts +4 -0
- package/dist/prompt/select.js +11 -0
- package/dist/prompt/text.d.ts +4 -0
- package/dist/prompt/text.js +11 -0
- package/dist/prompt/types.d.ts +3 -0
- package/dist/prompt/types.js +8 -0
- package/dist/prompt/validators.d.ts +2 -0
- package/dist/prompt/validators.js +8 -0
- package/dist/render/borders.d.ts +2 -0
- package/dist/render/borders.js +15 -0
- package/dist/render/box.d.ts +3 -0
- package/dist/render/box.js +23 -0
- package/dist/render/colors.d.ts +2 -0
- package/dist/render/colors.js +20 -0
- package/dist/render/date.d.ts +2 -0
- package/dist/render/date.js +12 -0
- package/dist/render/format-relative.d.ts +2 -0
- package/dist/render/format-relative.js +8 -0
- package/dist/render/format.d.ts +2 -0
- package/dist/render/format.js +10 -0
- package/dist/render/heading.d.ts +3 -0
- package/dist/render/heading.js +14 -0
- package/dist/render/index.d.ts +32 -0
- package/dist/render/index.js +235 -0
- package/dist/render/indicators.d.ts +2 -0
- package/dist/render/indicators.js +14 -0
- package/dist/render/json.d.ts +2 -0
- package/dist/render/json.js +10 -0
- package/dist/render/layout.d.ts +5 -0
- package/dist/render/layout.js +25 -0
- package/dist/render/list.d.ts +2 -0
- package/dist/render/list.js +8 -0
- package/dist/render/markdown.d.ts +2 -0
- package/dist/render/markdown.js +10 -0
- package/dist/render/progress.d.ts +2 -0
- package/dist/render/progress.js +8 -0
- package/dist/render/separator.d.ts +3 -0
- package/dist/render/separator.js +14 -0
- package/dist/render/shapes.d.ts +2 -0
- package/dist/render/shapes.js +35 -0
- package/dist/render/spinner.d.ts +2 -0
- package/dist/render/spinner.js +12 -0
- package/dist/render/stack.d.ts +3 -0
- package/dist/render/stack.js +38 -0
- package/dist/render/table.d.ts +3 -0
- package/dist/render/table.js +12 -0
- package/dist/render/text.d.ts +2 -0
- package/dist/render/text.js +27 -0
- package/dist/render/tree.d.ts +2 -0
- package/dist/render/tree.js +10 -0
- package/dist/render/types.d.ts +2 -0
- package/dist/render/types.js +1 -0
- package/dist/shared/@outfitter/cli-0ggcy7fa.js +20 -0
- package/dist/shared/@outfitter/cli-0psys2vm.js +7 -0
- package/dist/shared/@outfitter/cli-1bghjef6.js +352 -0
- package/dist/shared/@outfitter/cli-1kwbnt86.d.ts +45 -0
- package/dist/shared/@outfitter/cli-2g8bx1aq.d.ts +50 -0
- package/dist/shared/@outfitter/cli-33e97cjs.d.ts +42 -0
- package/dist/shared/@outfitter/cli-34fqr7bp.js +37 -0
- package/dist/shared/@outfitter/cli-3b7ed3rm.d.ts +97 -0
- package/dist/shared/@outfitter/cli-3dxmmy4c.d.ts +20 -0
- package/dist/shared/@outfitter/cli-3f12z5kf.d.ts +83 -0
- package/dist/shared/@outfitter/cli-3hp8qwx3.js +11 -0
- package/dist/shared/@outfitter/cli-3t2zaenc.d.ts +59 -0
- package/dist/shared/@outfitter/cli-4cb5g831.d.ts +147 -0
- package/dist/shared/@outfitter/cli-4w2a1rfy.d.ts +23 -0
- package/dist/shared/@outfitter/cli-4x6pqnez.js +20 -0
- package/dist/shared/@outfitter/cli-671sxkhj.js +146 -0
- package/dist/shared/@outfitter/cli-6bztk73z.d.ts +51 -0
- package/dist/shared/@outfitter/cli-6fxffp8k.js +1 -0
- package/dist/shared/@outfitter/cli-6j9qynm8.js +118 -0
- package/dist/shared/@outfitter/cli-6m988kh0.d.ts +61 -0
- package/dist/shared/@outfitter/cli-72kg550t.d.ts +53 -0
- package/dist/shared/@outfitter/cli-74ba31gz.js +134 -0
- package/dist/shared/@outfitter/cli-7gnrb8cr.js +214 -0
- package/dist/shared/@outfitter/cli-7na6p4fs.d.ts +59 -0
- package/dist/shared/@outfitter/cli-7nm6edvh.d.ts +17 -0
- package/dist/shared/@outfitter/cli-85fg2vr5.js +123 -0
- package/dist/shared/@outfitter/cli-8a8xrzhy.js +20 -0
- package/dist/shared/@outfitter/cli-8aa1vhdn.d.ts +119 -0
- package/dist/shared/@outfitter/cli-8bwaw3pz.js +7 -0
- package/dist/shared/@outfitter/cli-8j5k6mr3.js +71 -0
- package/dist/shared/@outfitter/cli-8rx4g3s5.d.ts +41 -0
- package/dist/shared/@outfitter/cli-8xsmsbbd.d.ts +223 -0
- package/dist/shared/@outfitter/cli-96b2p4td.d.ts +56 -0
- package/dist/shared/@outfitter/cli-9khk3cbq.d.ts +190 -0
- package/dist/shared/@outfitter/cli-9mtjjykw.js +67 -0
- package/dist/shared/@outfitter/cli-9nbyj2bt.js +128 -0
- package/dist/shared/@outfitter/cli-a4q87517.d.ts +64 -0
- package/dist/shared/@outfitter/cli-afhjqmg3.js +63 -0
- package/dist/shared/@outfitter/cli-an9j0h80.js +117 -0
- package/dist/shared/@outfitter/cli-ay411nbr.js +122 -0
- package/dist/shared/@outfitter/cli-b0tzqgnf.d.ts +132 -0
- package/dist/shared/@outfitter/cli-b5c2k0d7.js +39 -0
- package/dist/shared/@outfitter/cli-b5epywry.js +1 -0
- package/dist/shared/@outfitter/cli-bc17qeh2.js +19 -0
- package/dist/shared/@outfitter/cli-bcmcaz1b.js +23 -0
- package/dist/shared/@outfitter/cli-bf3vma4q.js +61 -0
- package/dist/shared/@outfitter/cli-c8q4f71g.js +144 -0
- package/dist/shared/@outfitter/cli-c9knfqn5.d.ts +30 -0
- package/dist/shared/@outfitter/cli-cf1xexgn.d.ts +53 -0
- package/dist/shared/@outfitter/cli-cf2s94s1.d.ts +42 -0
- package/dist/shared/@outfitter/cli-cs45xd6q.js +59 -0
- package/dist/shared/@outfitter/cli-d7jpshq5.d.ts +128 -0
- package/dist/shared/@outfitter/cli-d9ad0rqj.js +75 -0
- package/dist/shared/@outfitter/cli-daw296mv.js +61 -0
- package/dist/shared/@outfitter/cli-e5ms1y0x.d.ts +91 -0
- package/dist/shared/@outfitter/cli-e73v3qqy.d.ts +93 -0
- package/dist/shared/@outfitter/cli-efy6jfcj.js +52 -0
- package/dist/shared/@outfitter/cli-en6zn6sj.js +1 -0
- package/dist/shared/@outfitter/cli-ep2cvtk8.js +48 -0
- package/dist/shared/@outfitter/cli-evx7qcp1.d.ts +300 -0
- package/dist/shared/@outfitter/cli-f75h8e94.js +7 -0
- package/dist/shared/@outfitter/cli-fakncnjp.d.ts +106 -0
- package/dist/shared/@outfitter/cli-feb5j90n.js +94 -0
- package/dist/shared/@outfitter/cli-h20jc0bs.d.ts +66 -0
- package/dist/shared/@outfitter/cli-hnpbqmc8.d.ts +328 -0
- package/dist/shared/@outfitter/cli-j19a91ck.js +30 -0
- package/dist/shared/@outfitter/cli-j4n8gaf3.js +95 -0
- package/dist/shared/@outfitter/cli-jejfypgf.js +85 -0
- package/dist/shared/@outfitter/cli-jhcdwvpn.js +135 -0
- package/dist/shared/@outfitter/cli-jjemfdta.js +85 -0
- package/dist/shared/@outfitter/cli-kc84wmch.js +267 -0
- package/dist/shared/@outfitter/cli-ktqme80d.js +7 -0
- package/dist/shared/@outfitter/cli-mhamvbty.d.ts +34 -0
- package/dist/shared/@outfitter/cli-mq0jp15z.js +1 -0
- package/dist/shared/@outfitter/cli-mymyavvj.d.ts +26 -0
- package/dist/shared/@outfitter/cli-n17gt1dz.js +19 -0
- package/dist/shared/@outfitter/cli-n9dbh0hp.js +51 -0
- package/dist/shared/@outfitter/cli-nvvc92c8.js +128 -0
- package/dist/shared/@outfitter/cli-p1m5dhrs.js +169 -0
- package/dist/shared/@outfitter/cli-p38sfxyk.js +25 -0
- package/dist/shared/@outfitter/cli-p3dqm1vd.js +22 -0
- package/dist/shared/@outfitter/cli-p9j1phge.js +20 -0
- package/dist/shared/@outfitter/cli-pkxmzavm.js +62 -0
- package/dist/shared/@outfitter/cli-q8r6jarq.d.ts +24 -0
- package/dist/shared/@outfitter/cli-qj83y5wj.d.ts +71 -0
- package/dist/shared/@outfitter/cli-qjfc3j11.d.ts +112 -0
- package/dist/shared/@outfitter/cli-qp4cbhqr.js +70 -0
- package/dist/shared/@outfitter/cli-s0kkx9m1.d.ts +164 -0
- package/dist/shared/@outfitter/cli-snxj55n6.js +43 -0
- package/dist/shared/@outfitter/cli-swwxvjvm.d.ts +24 -0
- package/dist/shared/@outfitter/cli-sx67mmfx.d.ts +98 -0
- package/dist/shared/@outfitter/cli-tarpsa8a.js +30 -0
- package/dist/shared/@outfitter/cli-thvzhjd1.js +126 -0
- package/dist/shared/@outfitter/cli-tqewy503.d.ts +36 -0
- package/dist/shared/@outfitter/cli-ttt7r0j7.d.ts +253 -0
- package/dist/shared/@outfitter/cli-tvw1xrdj.js +20 -0
- package/dist/shared/@outfitter/cli-v1tzwxkt.js +32 -0
- package/dist/shared/@outfitter/cli-vd60dj65.js +1 -0
- package/dist/shared/@outfitter/cli-vp88gxev.js +279 -0
- package/dist/shared/@outfitter/cli-vstbkzky.d.ts +74 -0
- package/dist/shared/@outfitter/cli-vtg0sqk2.d.ts +54 -0
- package/dist/shared/@outfitter/cli-w5y3xepp.js +20 -0
- package/dist/shared/@outfitter/cli-x4cavvc0.js +1 -0
- package/dist/shared/@outfitter/cli-xep6v2c0.js +52 -0
- package/dist/shared/@outfitter/cli-xg5y5fhk.js +86 -0
- package/dist/shared/@outfitter/cli-xsaheemc.d.ts +248 -0
- package/dist/shared/@outfitter/cli-xvqtqjxk.js +82 -0
- package/dist/shared/@outfitter/cli-y25tt8nc.d.ts +48 -0
- package/dist/shared/@outfitter/cli-zact3325.js +152 -0
- package/dist/shared/@outfitter/cli-zx598p8q.d.ts +26 -0
- package/dist/streaming/ansi.d.ts +2 -0
- package/dist/streaming/ansi.js +8 -0
- package/dist/streaming/index.d.ts +4 -0
- package/dist/streaming/index.js +17 -0
- package/dist/streaming/spinner.d.ts +3 -0
- package/dist/streaming/spinner.js +10 -0
- package/dist/streaming/writer.d.ts +2 -0
- package/dist/streaming/writer.js +9 -0
- package/dist/table/index.d.ts +4 -0
- package/dist/table/index.js +13 -0
- package/dist/terminal/detection.d.ts +2 -0
- package/dist/terminal/detection.js +23 -0
- package/dist/terminal/index.d.ts +2 -0
- package/dist/terminal/index.js +24 -0
- package/dist/theme/context.d.ts +9 -0
- package/dist/theme/context.js +14 -0
- package/dist/theme/create.d.ts +8 -0
- package/dist/theme/create.js +12 -0
- package/dist/theme/index.d.ts +17 -0
- package/dist/theme/index.js +42 -0
- package/dist/theme/presets/bold.d.ts +8 -0
- package/dist/theme/presets/bold.js +12 -0
- package/dist/theme/presets/default.d.ts +8 -0
- package/dist/theme/presets/default.js +11 -0
- package/dist/theme/presets/index.d.ts +12 -0
- package/dist/theme/presets/index.js +24 -0
- package/dist/theme/presets/minimal.d.ts +8 -0
- package/dist/theme/presets/minimal.js +12 -0
- package/dist/theme/presets/rounded.d.ts +8 -0
- package/dist/theme/presets/rounded.js +12 -0
- package/dist/theme/resolve.d.ts +8 -0
- package/dist/theme/resolve.js +11 -0
- package/dist/theme/types.d.ts +7 -0
- package/dist/theme/types.js +1 -0
- package/dist/tree/index.d.ts +3 -0
- package/dist/tree/index.js +11 -0
- package/dist/types.d.ts +1 -252
- package/dist/types.js +1 -1
- package/package.json +228 -20
- package/dist/shared/@outfitter/cli-4yy82cmp.js +0 -20
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/cli/src/render/indicators.ts
|
|
3
|
+
var INDICATORS = {
|
|
4
|
+
status: {
|
|
5
|
+
success: { unicode: "\u2714", fallback: "[ok]", color: "green" },
|
|
6
|
+
error: { unicode: "\u2716", fallback: "[x]", color: "red" },
|
|
7
|
+
warning: { unicode: "\u26A0", fallback: "[!]", color: "yellow" },
|
|
8
|
+
info: { unicode: "\u2139", fallback: "[i]", color: "blue" }
|
|
9
|
+
},
|
|
10
|
+
marker: {
|
|
11
|
+
circle: { unicode: "\u25CF", fallback: "*" },
|
|
12
|
+
circleOutline: { unicode: "\u25CB", fallback: "o" },
|
|
13
|
+
circleDotted: { unicode: "\u25CC", fallback: "o" },
|
|
14
|
+
circleSmall: { unicode: "\u2022", fallback: "\xB7" },
|
|
15
|
+
circleDot: { unicode: "\u25C9", fallback: "(*)" },
|
|
16
|
+
circleDotOutline: { unicode: "\u25EF", fallback: "( )" },
|
|
17
|
+
square: { unicode: "\u25A0", fallback: "[#]" },
|
|
18
|
+
squareOutline: { unicode: "\u25A1", fallback: "[ ]" },
|
|
19
|
+
squareSmall: { unicode: "\u25FC", fallback: "[#]" },
|
|
20
|
+
squareSmallOutline: { unicode: "\u25FB", fallback: "[ ]" },
|
|
21
|
+
lozenge: { unicode: "\u25C6", fallback: "\u2666" },
|
|
22
|
+
lozengeOutline: { unicode: "\u25C7", fallback: "\u25CA" },
|
|
23
|
+
dash: { unicode: "\u2013", fallback: "-" },
|
|
24
|
+
pointer: { unicode: "\u276F", fallback: ">" },
|
|
25
|
+
pointerSmall: { unicode: "\u203A", fallback: ">" },
|
|
26
|
+
checkbox: { unicode: "\u2610", fallback: "[ ]" },
|
|
27
|
+
checkboxChecked: { unicode: "\u2611", fallback: "[x]" },
|
|
28
|
+
checkboxCross: { unicode: "\u2612", fallback: "[X]" }
|
|
29
|
+
},
|
|
30
|
+
progress: {
|
|
31
|
+
circleEmpty: { unicode: "\u25CB", fallback: "." },
|
|
32
|
+
circleQuarter: { unicode: "\u25D4", fallback: "o" },
|
|
33
|
+
circleHalf: { unicode: "\u25D1", fallback: "O" },
|
|
34
|
+
circleThree: { unicode: "\u25D5", fallback: "0" },
|
|
35
|
+
circleFull: { unicode: "\u25CF", fallback: "@" },
|
|
36
|
+
vertical1: { unicode: "\u2581", fallback: "_" },
|
|
37
|
+
vertical2: { unicode: "\u2582", fallback: "_" },
|
|
38
|
+
vertical3: { unicode: "\u2583", fallback: "=" },
|
|
39
|
+
vertical4: { unicode: "\u2584", fallback: "=" },
|
|
40
|
+
vertical5: { unicode: "\u2585", fallback: "#" },
|
|
41
|
+
vertical6: { unicode: "\u2586", fallback: "#" },
|
|
42
|
+
vertical7: { unicode: "\u2587", fallback: "#" },
|
|
43
|
+
verticalFull: { unicode: "\u2588", fallback: "#" },
|
|
44
|
+
horizontal1: { unicode: "\u258F", fallback: "|" },
|
|
45
|
+
horizontal2: { unicode: "\u258E", fallback: "|" },
|
|
46
|
+
horizontal3: { unicode: "\u258D", fallback: "|" },
|
|
47
|
+
horizontal4: { unicode: "\u258C", fallback: "|" },
|
|
48
|
+
horizontal5: { unicode: "\u258B", fallback: "|" },
|
|
49
|
+
horizontal6: { unicode: "\u258A", fallback: "|" },
|
|
50
|
+
horizontal7: { unicode: "\u2589", fallback: "|" },
|
|
51
|
+
horizontalFull: { unicode: "\u2588", fallback: "#" },
|
|
52
|
+
shadeLight: { unicode: "\u2591", fallback: "." },
|
|
53
|
+
shadeMedium: { unicode: "\u2592", fallback: ":" },
|
|
54
|
+
shadeDark: { unicode: "\u2593", fallback: "#" }
|
|
55
|
+
},
|
|
56
|
+
triangle: {
|
|
57
|
+
up: { unicode: "\u25B2", fallback: "^" },
|
|
58
|
+
upSmall: { unicode: "\u25B4", fallback: "^" },
|
|
59
|
+
upOutline: { unicode: "\u25B3", fallback: "^" },
|
|
60
|
+
down: { unicode: "\u25BC", fallback: "v" },
|
|
61
|
+
downSmall: { unicode: "\u25BE", fallback: "v" },
|
|
62
|
+
downOutline: { unicode: "\u25BD", fallback: "v" },
|
|
63
|
+
left: { unicode: "\u25C0", fallback: "<" },
|
|
64
|
+
leftSmall: { unicode: "\u25C2", fallback: "<" },
|
|
65
|
+
leftOutline: { unicode: "\u25C1", fallback: "<" },
|
|
66
|
+
right: { unicode: "\u25B6", fallback: ">" },
|
|
67
|
+
rightSmall: { unicode: "\u25B8", fallback: ">" },
|
|
68
|
+
rightOutline: { unicode: "\u25B7", fallback: ">" }
|
|
69
|
+
},
|
|
70
|
+
special: {
|
|
71
|
+
star: { unicode: "\u2605", fallback: "*" },
|
|
72
|
+
starOutline: { unicode: "\u2606", fallback: "*" },
|
|
73
|
+
heart: { unicode: "\u2665", fallback: "<3" },
|
|
74
|
+
heartOutline: { unicode: "\u2661", fallback: "<3" },
|
|
75
|
+
flag: { unicode: "\u2691", fallback: "[F]" },
|
|
76
|
+
flagOutline: { unicode: "\u2690", fallback: "[f]" },
|
|
77
|
+
gear: { unicode: "\u2699", fallback: "[*]" }
|
|
78
|
+
},
|
|
79
|
+
directional: {
|
|
80
|
+
arrowUp: { unicode: "\u2191", fallback: "^" },
|
|
81
|
+
arrowDown: { unicode: "\u2193", fallback: "v" },
|
|
82
|
+
arrowLeft: { unicode: "\u2190", fallback: "<-" },
|
|
83
|
+
arrowRight: { unicode: "\u2192", fallback: "->" },
|
|
84
|
+
arrowLeftRight: { unicode: "\u2194", fallback: "<->" },
|
|
85
|
+
arrowUpDown: { unicode: "\u2195", fallback: "^v" }
|
|
86
|
+
},
|
|
87
|
+
math: {
|
|
88
|
+
almostEqual: { unicode: "\u2248", fallback: "~=" },
|
|
89
|
+
notEqual: { unicode: "\u2260", fallback: "!=" },
|
|
90
|
+
lessOrEqual: { unicode: "\u2264", fallback: "<=" },
|
|
91
|
+
greaterOrEqual: { unicode: "\u2265", fallback: ">=" },
|
|
92
|
+
identical: { unicode: "\u2261", fallback: "===" },
|
|
93
|
+
infinity: { unicode: "\u221E", fallback: "inf" }
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
function isUnicodeSupported() {
|
|
97
|
+
if (process.env["CI"]) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
if (process.env["WT_SESSION"]) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
if (process.env["ConEmuTask"]) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
const term = process.env["TERM"] ?? "";
|
|
107
|
+
if (term === "xterm-256color" || term === "xterm" || term.includes("256color") || term.includes("truecolor")) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
const lang = process.env["LANG"] ?? process.env["LC_ALL"] ?? "";
|
|
111
|
+
if (lang.toLowerCase().includes("utf-8") || lang.toLowerCase().includes("utf8")) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
if (process.platform !== "win32") {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
function getIndicator(category, name, forceUnicode) {
|
|
120
|
+
const indicator = INDICATORS[category][name];
|
|
121
|
+
if (!indicator) {
|
|
122
|
+
return "";
|
|
123
|
+
}
|
|
124
|
+
const useUnicode = forceUnicode ?? isUnicodeSupported();
|
|
125
|
+
return useUnicode ? indicator.unicode : indicator.fallback;
|
|
126
|
+
}
|
|
127
|
+
var PROGRESS_SEQUENCES = {
|
|
128
|
+
circle: [
|
|
129
|
+
"circleEmpty",
|
|
130
|
+
"circleQuarter",
|
|
131
|
+
"circleHalf",
|
|
132
|
+
"circleThree",
|
|
133
|
+
"circleFull"
|
|
134
|
+
],
|
|
135
|
+
vertical: [
|
|
136
|
+
"vertical1",
|
|
137
|
+
"vertical2",
|
|
138
|
+
"vertical3",
|
|
139
|
+
"vertical4",
|
|
140
|
+
"vertical5",
|
|
141
|
+
"vertical6",
|
|
142
|
+
"vertical7",
|
|
143
|
+
"verticalFull"
|
|
144
|
+
],
|
|
145
|
+
horizontal: [
|
|
146
|
+
"horizontal1",
|
|
147
|
+
"horizontal2",
|
|
148
|
+
"horizontal3",
|
|
149
|
+
"horizontal4",
|
|
150
|
+
"horizontal5",
|
|
151
|
+
"horizontal6",
|
|
152
|
+
"horizontal7",
|
|
153
|
+
"horizontalFull"
|
|
154
|
+
],
|
|
155
|
+
shade: ["shadeLight", "shadeMedium", "shadeDark"]
|
|
156
|
+
};
|
|
157
|
+
function getProgressIndicator(style, current, max, forceUnicode) {
|
|
158
|
+
const sequence = PROGRESS_SEQUENCES[style];
|
|
159
|
+
const steps = sequence.length;
|
|
160
|
+
const ratio = max <= 0 ? 0 : Math.max(0, Math.min(1, current / max));
|
|
161
|
+
const index = Math.round(ratio * (steps - 1));
|
|
162
|
+
const name = sequence[index];
|
|
163
|
+
if (name === undefined) {
|
|
164
|
+
return "";
|
|
165
|
+
}
|
|
166
|
+
return getIndicator("progress", name, forceUnicode);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export { INDICATORS, isUnicodeSupported, getIndicator, getProgressIndicator };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
getTerminalWidth
|
|
4
|
+
} from "./cli-671sxkhj.js";
|
|
5
|
+
|
|
6
|
+
// packages/cli/src/render/separator.ts
|
|
7
|
+
function renderSeparator(options) {
|
|
8
|
+
const style = options?.style ?? "\u2500";
|
|
9
|
+
const widthMode = options?.width ?? 40;
|
|
10
|
+
let width;
|
|
11
|
+
if (widthMode === "text") {
|
|
12
|
+
width = 40;
|
|
13
|
+
} else if (widthMode === "full") {
|
|
14
|
+
width = getTerminalWidth();
|
|
15
|
+
} else {
|
|
16
|
+
width = widthMode;
|
|
17
|
+
}
|
|
18
|
+
if (style.length === 2) {
|
|
19
|
+
const repetitions = Math.ceil(width / 2);
|
|
20
|
+
return style.repeat(repetitions).slice(0, width);
|
|
21
|
+
}
|
|
22
|
+
return style.repeat(width);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { renderSeparator };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/cli/src/streaming/ansi.ts
|
|
3
|
+
var ANSI = {
|
|
4
|
+
cursorUp: (n) => `\x1B[${n}A`,
|
|
5
|
+
cursorDown: (n) => `\x1B[${n}B`,
|
|
6
|
+
cursorRight: (n) => `\x1B[${n}C`,
|
|
7
|
+
cursorLeft: (n) => `\x1B[${n}D`,
|
|
8
|
+
cursorToStart: "\x1B[G",
|
|
9
|
+
clearLine: "\x1B[2K",
|
|
10
|
+
clearToEnd: "\x1B[0J",
|
|
11
|
+
clearToStart: "\x1B[1J",
|
|
12
|
+
clearScreen: "\x1B[2J",
|
|
13
|
+
hideCursor: "\x1B[?25l",
|
|
14
|
+
showCursor: "\x1B[?25h",
|
|
15
|
+
saveCursor: "\x1B[s",
|
|
16
|
+
restoreCursor: "\x1B[u",
|
|
17
|
+
carriageReturn: "\r",
|
|
18
|
+
newLine: `
|
|
19
|
+
`
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { ANSI };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
defaultTheme
|
|
4
|
+
} from "./cli-cs45xd6q.js";
|
|
5
|
+
|
|
6
|
+
// packages/cli/src/theme/context.ts
|
|
7
|
+
function createThemedContext(options) {
|
|
8
|
+
const theme = options.theme ?? options.parent?.theme ?? defaultTheme;
|
|
9
|
+
const width = options.width ?? options.parent?.width ?? process.stdout.columns ?? 80;
|
|
10
|
+
return {
|
|
11
|
+
width,
|
|
12
|
+
theme,
|
|
13
|
+
...options.parent && { parent: options.parent }
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function getContextTheme(ctx) {
|
|
17
|
+
return ctx?.theme ?? defaultTheme;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { createThemedContext, getContextTheme };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
BORDER_STYLE_META,
|
|
4
|
+
getBorderStyles
|
|
5
|
+
} from "./cli-kc84wmch.js";
|
|
6
|
+
import {
|
|
7
|
+
demoSection
|
|
8
|
+
} from "./cli-34fqr7bp.js";
|
|
9
|
+
import {
|
|
10
|
+
BORDERS,
|
|
11
|
+
drawHorizontalLine,
|
|
12
|
+
init_borders
|
|
13
|
+
} from "./cli-85fg2vr5.js";
|
|
14
|
+
|
|
15
|
+
// packages/cli/src/demo/renderers/borders.ts
|
|
16
|
+
init_borders();
|
|
17
|
+
function renderBordersDemo(config, theme) {
|
|
18
|
+
const showCode = config.showCode ?? true;
|
|
19
|
+
const showDescriptions = config.showDescriptions ?? true;
|
|
20
|
+
const lines = [];
|
|
21
|
+
lines.push(demoSection("Border Styles"));
|
|
22
|
+
lines.push("");
|
|
23
|
+
if (showCode) {
|
|
24
|
+
lines.push('import { BORDERS, getBorderCharacters } from "@outfitter/cli/render";');
|
|
25
|
+
lines.push("");
|
|
26
|
+
}
|
|
27
|
+
const styles = getBorderStyles().filter((s) => s !== "none");
|
|
28
|
+
for (const style of styles) {
|
|
29
|
+
const meta = BORDER_STYLE_META[style];
|
|
30
|
+
const chars = BORDERS[style];
|
|
31
|
+
lines.push(`${meta.label.toUpperCase()} (${style})`);
|
|
32
|
+
if (showDescriptions) {
|
|
33
|
+
lines.push(theme.muted(meta.description));
|
|
34
|
+
}
|
|
35
|
+
lines.push("");
|
|
36
|
+
const width = 20;
|
|
37
|
+
lines.push(drawHorizontalLine(width, chars, "top"));
|
|
38
|
+
lines.push(`${chars.vertical}${" ".repeat(width)}${chars.vertical}`);
|
|
39
|
+
lines.push(`${chars.vertical}${" Content here".padEnd(width)}${chars.vertical}`);
|
|
40
|
+
lines.push(`${chars.vertical}${" ".repeat(width)}${chars.vertical}`);
|
|
41
|
+
lines.push(drawHorizontalLine(width, chars, "bottom"));
|
|
42
|
+
lines.push("");
|
|
43
|
+
}
|
|
44
|
+
lines.push(demoSection("Characters Reference"));
|
|
45
|
+
lines.push("");
|
|
46
|
+
for (const style of styles) {
|
|
47
|
+
const chars = BORDERS[style];
|
|
48
|
+
const meta = BORDER_STYLE_META[style];
|
|
49
|
+
lines.push(`${meta.label}:`);
|
|
50
|
+
const charDisplay = [
|
|
51
|
+
` Corners: ${chars.topLeft} ${chars.topRight} ${chars.bottomLeft} ${chars.bottomRight}`,
|
|
52
|
+
` Lines: ${chars.horizontal} ${chars.vertical}`,
|
|
53
|
+
` T's: ${chars.topT} ${chars.bottomT} ${chars.leftT} ${chars.rightT} Cross: ${chars.cross}`
|
|
54
|
+
];
|
|
55
|
+
lines.push(...charDisplay);
|
|
56
|
+
lines.push("");
|
|
57
|
+
}
|
|
58
|
+
return lines.join(`
|
|
59
|
+
`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { renderBordersDemo };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { VisualTheme } from "./cli-s0kkx9m1";
|
|
2
|
+
/**
|
|
3
|
+
* Bold visual theme.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Heavy/thick box-drawing borders (┏━┓)
|
|
7
|
+
* - Heavy tree guide style
|
|
8
|
+
* - Strong visual weight
|
|
9
|
+
*
|
|
10
|
+
* Inherits all other properties from {@link defaultTheme}.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { boldTheme } from "@outfitter/cli/theme/presets";
|
|
15
|
+
*
|
|
16
|
+
* // Use bold styling
|
|
17
|
+
* const box = renderBox("Hello", { border: boldTheme.border });
|
|
18
|
+
* // ┏━━━━━━━┓
|
|
19
|
+
* // ┃ Hello ┃
|
|
20
|
+
* // ┗━━━━━━━┛
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare const boldTheme: VisualTheme;
|
|
24
|
+
export { boldTheme };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { BorderStyle } from "./cli-fakncnjp";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for {@link renderTable}.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const options: TableOptions = {
|
|
8
|
+
* headers: { id: "ID", name: "Name" },
|
|
9
|
+
* columnWidths: { description: 20 },
|
|
10
|
+
* border: "rounded",
|
|
11
|
+
* };
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
interface TableOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Fixed column widths by key.
|
|
17
|
+
* If not specified, column width is calculated from content.
|
|
18
|
+
*/
|
|
19
|
+
columnWidths?: Record<string, number>;
|
|
20
|
+
/**
|
|
21
|
+
* Custom header labels by key.
|
|
22
|
+
* If not specified, the object key is used as the header.
|
|
23
|
+
*/
|
|
24
|
+
headers?: Record<string, string>;
|
|
25
|
+
/**
|
|
26
|
+
* Border style for the table.
|
|
27
|
+
* @default "single"
|
|
28
|
+
*/
|
|
29
|
+
border?: BorderStyle;
|
|
30
|
+
/**
|
|
31
|
+
* Compact mode removes all borders and uses space separators.
|
|
32
|
+
* When true, overrides the border option.
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
compact?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Renders an array of objects as a table with Unicode box-drawing borders.
|
|
39
|
+
*
|
|
40
|
+
* Automatically calculates column widths based on content unless
|
|
41
|
+
* overridden in options. Supports custom header labels, border styles,
|
|
42
|
+
* and truncates cell content that exceeds column width.
|
|
43
|
+
*
|
|
44
|
+
* @param data - Array of objects to render as rows
|
|
45
|
+
* @param options - Table rendering options
|
|
46
|
+
* @returns Formatted table string with borders
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const table = renderTable(
|
|
51
|
+
* [
|
|
52
|
+
* { id: 1, name: "Alice", status: "Active" },
|
|
53
|
+
* { id: 2, name: "Bob", status: "Inactive" },
|
|
54
|
+
* ],
|
|
55
|
+
* {
|
|
56
|
+
* headers: { id: "ID", name: "Name" },
|
|
57
|
+
* columnWidths: { status: 10 },
|
|
58
|
+
* }
|
|
59
|
+
* );
|
|
60
|
+
*
|
|
61
|
+
* console.log(table);
|
|
62
|
+
* // ┌────┬───────┬──────────┐
|
|
63
|
+
* // │ ID │ Name │ status │
|
|
64
|
+
* // ├────┼───────┼──────────┤
|
|
65
|
+
* // │ 1 │ Alice │ Active │
|
|
66
|
+
* // │ 2 │ Bob │ Inactive │
|
|
67
|
+
* // └────┴───────┴──────────┘
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
declare function renderTable(data: Record<string, unknown>[], options?: TableOptions): string;
|
|
71
|
+
export { TableOptions, renderTable };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Theme } from "./cli-xsaheemc";
|
|
2
|
+
/**
|
|
3
|
+
* Available primitive types for demos.
|
|
4
|
+
*/
|
|
5
|
+
type PrimitiveId = "colors" | "borders" | "spinner" | "list" | "box" | "table" | "progress" | "tree" | "text" | "markdown" | "indicators";
|
|
6
|
+
/**
|
|
7
|
+
* Categorization for theme methods.
|
|
8
|
+
*/
|
|
9
|
+
type ThemeMethodCategory = "semantic" | "utility";
|
|
10
|
+
/**
|
|
11
|
+
* Metadata for a theme method.
|
|
12
|
+
*/
|
|
13
|
+
interface ThemeMethodMeta {
|
|
14
|
+
/** Method category (semantic or utility) */
|
|
15
|
+
category: ThemeMethodCategory;
|
|
16
|
+
/** Human-readable description */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Default example text */
|
|
19
|
+
defaultExample: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Metadata for a primitive variant (spinner styles, border styles, etc).
|
|
23
|
+
*/
|
|
24
|
+
interface VariantMeta<T extends string> {
|
|
25
|
+
/** The variant value */
|
|
26
|
+
value: T;
|
|
27
|
+
/** Human-readable label */
|
|
28
|
+
label: string;
|
|
29
|
+
/** Description of the variant */
|
|
30
|
+
description: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Metadata describing a primitive for demo generation.
|
|
34
|
+
*/
|
|
35
|
+
interface PrimitiveMeta {
|
|
36
|
+
/** Primitive identifier */
|
|
37
|
+
id: PrimitiveId;
|
|
38
|
+
/** Human-readable name */
|
|
39
|
+
name: string;
|
|
40
|
+
/** Brief description */
|
|
41
|
+
description: string;
|
|
42
|
+
/** Import statement example */
|
|
43
|
+
importExample: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Customizable example texts for demos.
|
|
47
|
+
*
|
|
48
|
+
* Keys correspond to theme method names and other example contexts.
|
|
49
|
+
*/
|
|
50
|
+
interface ExampleTexts {
|
|
51
|
+
success: string;
|
|
52
|
+
warning: string;
|
|
53
|
+
error: string;
|
|
54
|
+
info: string;
|
|
55
|
+
primary: string;
|
|
56
|
+
secondary: string;
|
|
57
|
+
muted: string;
|
|
58
|
+
accent: string;
|
|
59
|
+
highlight: string;
|
|
60
|
+
link: string;
|
|
61
|
+
destructive: string;
|
|
62
|
+
subtle: string;
|
|
63
|
+
bold: string;
|
|
64
|
+
italic: string;
|
|
65
|
+
underline: string;
|
|
66
|
+
dim: string;
|
|
67
|
+
boxContent: string;
|
|
68
|
+
boxTitle: string;
|
|
69
|
+
spinnerMessage: string;
|
|
70
|
+
progressLabel: string;
|
|
71
|
+
listItems: string[];
|
|
72
|
+
tableData: Record<string, unknown>[];
|
|
73
|
+
treeData: Record<string, unknown>;
|
|
74
|
+
markdownSample: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Configuration for demo rendering.
|
|
78
|
+
*/
|
|
79
|
+
interface DemoConfig {
|
|
80
|
+
/**
|
|
81
|
+
* Override default example texts.
|
|
82
|
+
*/
|
|
83
|
+
examples?: Partial<ExampleTexts>;
|
|
84
|
+
/**
|
|
85
|
+
* Whether to show import statements.
|
|
86
|
+
* @default true
|
|
87
|
+
*/
|
|
88
|
+
showCode?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Whether to show method/variant descriptions.
|
|
91
|
+
* @default true
|
|
92
|
+
*/
|
|
93
|
+
showDescriptions?: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Function that renders a demo section for a primitive.
|
|
97
|
+
*/
|
|
98
|
+
type DemoRenderer = (config: DemoConfig, theme: Theme) => string;
|
|
99
|
+
/**
|
|
100
|
+
* Registry entry for a primitive demo.
|
|
101
|
+
*/
|
|
102
|
+
interface DemoRegistryEntry {
|
|
103
|
+
/** Primitive metadata */
|
|
104
|
+
meta: PrimitiveMeta;
|
|
105
|
+
/** Render function */
|
|
106
|
+
render: DemoRenderer;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Checks if a string is a valid PrimitiveId.
|
|
110
|
+
*/
|
|
111
|
+
declare function isPrimitiveId(value: string): value is PrimitiveId;
|
|
112
|
+
export { PrimitiveId, ThemeMethodCategory, ThemeMethodMeta, VariantMeta, PrimitiveMeta, ExampleTexts, DemoConfig, DemoRenderer, DemoRegistryEntry, isPrimitiveId };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
renderMarkdown
|
|
4
|
+
} from "./cli-afhjqmg3.js";
|
|
5
|
+
import {
|
|
6
|
+
getExample
|
|
7
|
+
} from "./cli-xep6v2c0.js";
|
|
8
|
+
import {
|
|
9
|
+
demoSection
|
|
10
|
+
} from "./cli-34fqr7bp.js";
|
|
11
|
+
|
|
12
|
+
// packages/cli/src/demo/renderers/markdown.ts
|
|
13
|
+
function renderMarkdownDemo(config, theme) {
|
|
14
|
+
const showCode = config.showCode ?? true;
|
|
15
|
+
const lines = [];
|
|
16
|
+
lines.push(demoSection("Markdown Rendering"));
|
|
17
|
+
lines.push("");
|
|
18
|
+
if (showCode) {
|
|
19
|
+
lines.push('import { renderMarkdown } from "@outfitter/cli/render";');
|
|
20
|
+
lines.push("");
|
|
21
|
+
}
|
|
22
|
+
const sample = getExample("markdownSample", config.examples);
|
|
23
|
+
lines.push("Input:");
|
|
24
|
+
lines.push(theme.muted("\u2500".repeat(40)));
|
|
25
|
+
for (const line of sample.split(`
|
|
26
|
+
`)) {
|
|
27
|
+
lines.push(theme.muted(line));
|
|
28
|
+
}
|
|
29
|
+
lines.push(theme.muted("\u2500".repeat(40)));
|
|
30
|
+
lines.push("");
|
|
31
|
+
lines.push("Output:");
|
|
32
|
+
lines.push("\u2500".repeat(40));
|
|
33
|
+
lines.push(renderMarkdown(sample));
|
|
34
|
+
lines.push("\u2500".repeat(40));
|
|
35
|
+
lines.push("");
|
|
36
|
+
lines.push(demoSection("Supported Elements"));
|
|
37
|
+
lines.push("");
|
|
38
|
+
const elements = [
|
|
39
|
+
{
|
|
40
|
+
name: "Headings",
|
|
41
|
+
markdown: `# Heading 1
|
|
42
|
+
## Heading 2`,
|
|
43
|
+
desc: "Rendered bold"
|
|
44
|
+
},
|
|
45
|
+
{ name: "Bold", markdown: "**bold text**", desc: "Rendered bold" },
|
|
46
|
+
{ name: "Italic", markdown: "*italic text*", desc: "Rendered italic" },
|
|
47
|
+
{ name: "Inline code", markdown: "`code`", desc: "Rendered cyan" },
|
|
48
|
+
{
|
|
49
|
+
name: "Code block",
|
|
50
|
+
markdown: "```\ncode block\n```",
|
|
51
|
+
desc: "Rendered dim"
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
for (const el of elements) {
|
|
55
|
+
lines.push(`${el.name}:`);
|
|
56
|
+
lines.push(theme.muted(` ${el.desc}`));
|
|
57
|
+
lines.push(` Input: ${el.markdown.replace(/\n/g, "\\n")}`);
|
|
58
|
+
lines.push(` Output: ${renderMarkdown(el.markdown).replace(/\n/g, " ")}`);
|
|
59
|
+
lines.push("");
|
|
60
|
+
}
|
|
61
|
+
lines.push(demoSection("Color Support"));
|
|
62
|
+
lines.push("");
|
|
63
|
+
lines.push("\u2022 Colors applied when terminal supports ANSI");
|
|
64
|
+
lines.push("\u2022 Respects NO_COLOR environment variable");
|
|
65
|
+
lines.push("\u2022 Markdown syntax stripped when colors disabled");
|
|
66
|
+
return lines.join(`
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { renderMarkdownDemo };
|