You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
7.2 KiB
292 lines
7.2 KiB
import isUnicodeSupported from 'is-unicode-supported'; |
|
|
|
const common = { |
|
circleQuestionMark: '(?)', |
|
questionMarkPrefix: '(?)', |
|
square: '█', |
|
squareDarkShade: '▓', |
|
squareMediumShade: '▒', |
|
squareLightShade: '░', |
|
squareTop: '▀', |
|
squareBottom: '▄', |
|
squareLeft: '▌', |
|
squareRight: '▐', |
|
squareCenter: '■', |
|
bullet: '●', |
|
dot: '․', |
|
ellipsis: '…', |
|
pointerSmall: '›', |
|
triangleUp: '▲', |
|
triangleUpSmall: '▴', |
|
triangleDown: '▼', |
|
triangleDownSmall: '▾', |
|
triangleLeftSmall: '◂', |
|
triangleRightSmall: '▸', |
|
home: '⌂', |
|
heart: '♥', |
|
musicNote: '♪', |
|
musicNoteBeamed: '♫', |
|
arrowUp: '↑', |
|
arrowDown: '↓', |
|
arrowLeft: '←', |
|
arrowRight: '→', |
|
arrowLeftRight: '↔', |
|
arrowUpDown: '↕', |
|
almostEqual: '≈', |
|
notEqual: '≠', |
|
lessOrEqual: '≤', |
|
greaterOrEqual: '≥', |
|
identical: '≡', |
|
infinity: '∞', |
|
subscriptZero: '₀', |
|
subscriptOne: '₁', |
|
subscriptTwo: '₂', |
|
subscriptThree: '₃', |
|
subscriptFour: '₄', |
|
subscriptFive: '₅', |
|
subscriptSix: '₆', |
|
subscriptSeven: '₇', |
|
subscriptEight: '₈', |
|
subscriptNine: '₉', |
|
oneHalf: '½', |
|
oneThird: '⅓', |
|
oneQuarter: '¼', |
|
oneFifth: '⅕', |
|
oneSixth: '⅙', |
|
oneEighth: '⅛', |
|
twoThirds: '⅔', |
|
twoFifths: '⅖', |
|
threeQuarters: '¾', |
|
threeFifths: '⅗', |
|
threeEighths: '⅜', |
|
fourFifths: '⅘', |
|
fiveSixths: '⅚', |
|
fiveEighths: '⅝', |
|
sevenEighths: '⅞', |
|
line: '─', |
|
lineBold: '━', |
|
lineDouble: '═', |
|
lineDashed0: '┄', |
|
lineDashed1: '┅', |
|
lineDashed2: '┈', |
|
lineDashed3: '┉', |
|
lineDashed4: '╌', |
|
lineDashed5: '╍', |
|
lineDashed6: '╴', |
|
lineDashed7: '╶', |
|
lineDashed8: '╸', |
|
lineDashed9: '╺', |
|
lineDashed10: '╼', |
|
lineDashed11: '╾', |
|
lineDashed12: '−', |
|
lineDashed13: '–', |
|
lineDashed14: '‐', |
|
lineDashed15: '⁃', |
|
lineVertical: '│', |
|
lineVerticalBold: '┃', |
|
lineVerticalDouble: '║', |
|
lineVerticalDashed0: '┆', |
|
lineVerticalDashed1: '┇', |
|
lineVerticalDashed2: '┊', |
|
lineVerticalDashed3: '┋', |
|
lineVerticalDashed4: '╎', |
|
lineVerticalDashed5: '╏', |
|
lineVerticalDashed6: '╵', |
|
lineVerticalDashed7: '╷', |
|
lineVerticalDashed8: '╹', |
|
lineVerticalDashed9: '╻', |
|
lineVerticalDashed10: '╽', |
|
lineVerticalDashed11: '╿', |
|
lineDownLeft: '┐', |
|
lineDownLeftArc: '╮', |
|
lineDownBoldLeftBold: '┓', |
|
lineDownBoldLeft: '┒', |
|
lineDownLeftBold: '┑', |
|
lineDownDoubleLeftDouble: '╗', |
|
lineDownDoubleLeft: '╖', |
|
lineDownLeftDouble: '╕', |
|
lineDownRight: '┌', |
|
lineDownRightArc: '╭', |
|
lineDownBoldRightBold: '┏', |
|
lineDownBoldRight: '┎', |
|
lineDownRightBold: '┍', |
|
lineDownDoubleRightDouble: '╔', |
|
lineDownDoubleRight: '╓', |
|
lineDownRightDouble: '╒', |
|
lineUpLeft: '┘', |
|
lineUpLeftArc: '╯', |
|
lineUpBoldLeftBold: '┛', |
|
lineUpBoldLeft: '┚', |
|
lineUpLeftBold: '┙', |
|
lineUpDoubleLeftDouble: '╝', |
|
lineUpDoubleLeft: '╜', |
|
lineUpLeftDouble: '╛', |
|
lineUpRight: '└', |
|
lineUpRightArc: '╰', |
|
lineUpBoldRightBold: '┗', |
|
lineUpBoldRight: '┖', |
|
lineUpRightBold: '┕', |
|
lineUpDoubleRightDouble: '╚', |
|
lineUpDoubleRight: '╙', |
|
lineUpRightDouble: '╘', |
|
lineUpDownLeft: '┤', |
|
lineUpBoldDownBoldLeftBold: '┫', |
|
lineUpBoldDownBoldLeft: '┨', |
|
lineUpDownLeftBold: '┥', |
|
lineUpBoldDownLeftBold: '┩', |
|
lineUpDownBoldLeftBold: '┪', |
|
lineUpDownBoldLeft: '┧', |
|
lineUpBoldDownLeft: '┦', |
|
lineUpDoubleDownDoubleLeftDouble: '╣', |
|
lineUpDoubleDownDoubleLeft: '╢', |
|
lineUpDownLeftDouble: '╡', |
|
lineUpDownRight: '├', |
|
lineUpBoldDownBoldRightBold: '┣', |
|
lineUpBoldDownBoldRight: '┠', |
|
lineUpDownRightBold: '┝', |
|
lineUpBoldDownRightBold: '┡', |
|
lineUpDownBoldRightBold: '┢', |
|
lineUpDownBoldRight: '┟', |
|
lineUpBoldDownRight: '┞', |
|
lineUpDoubleDownDoubleRightDouble: '╠', |
|
lineUpDoubleDownDoubleRight: '╟', |
|
lineUpDownRightDouble: '╞', |
|
lineDownLeftRight: '┬', |
|
lineDownBoldLeftBoldRightBold: '┳', |
|
lineDownLeftBoldRightBold: '┯', |
|
lineDownBoldLeftRight: '┰', |
|
lineDownBoldLeftBoldRight: '┱', |
|
lineDownBoldLeftRightBold: '┲', |
|
lineDownLeftRightBold: '┮', |
|
lineDownLeftBoldRight: '┭', |
|
lineDownDoubleLeftDoubleRightDouble: '╦', |
|
lineDownDoubleLeftRight: '╥', |
|
lineDownLeftDoubleRightDouble: '╤', |
|
lineUpLeftRight: '┴', |
|
lineUpBoldLeftBoldRightBold: '┻', |
|
lineUpLeftBoldRightBold: '┷', |
|
lineUpBoldLeftRight: '┸', |
|
lineUpBoldLeftBoldRight: '┹', |
|
lineUpBoldLeftRightBold: '┺', |
|
lineUpLeftRightBold: '┶', |
|
lineUpLeftBoldRight: '┵', |
|
lineUpDoubleLeftDoubleRightDouble: '╩', |
|
lineUpDoubleLeftRight: '╨', |
|
lineUpLeftDoubleRightDouble: '╧', |
|
lineUpDownLeftRight: '┼', |
|
lineUpBoldDownBoldLeftBoldRightBold: '╋', |
|
lineUpDownBoldLeftBoldRightBold: '╈', |
|
lineUpBoldDownLeftBoldRightBold: '╇', |
|
lineUpBoldDownBoldLeftRightBold: '╊', |
|
lineUpBoldDownBoldLeftBoldRight: '╉', |
|
lineUpBoldDownLeftRight: '╀', |
|
lineUpDownBoldLeftRight: '╁', |
|
lineUpDownLeftBoldRight: '┽', |
|
lineUpDownLeftRightBold: '┾', |
|
lineUpBoldDownBoldLeftRight: '╂', |
|
lineUpDownLeftBoldRightBold: '┿', |
|
lineUpBoldDownLeftBoldRight: '╃', |
|
lineUpBoldDownLeftRightBold: '╄', |
|
lineUpDownBoldLeftBoldRight: '╅', |
|
lineUpDownBoldLeftRightBold: '╆', |
|
lineUpDoubleDownDoubleLeftDoubleRightDouble: '╬', |
|
lineUpDoubleDownDoubleLeftRight: '╫', |
|
lineUpDownLeftDoubleRightDouble: '╪', |
|
lineCross: '╳', |
|
lineBackslash: '╲', |
|
lineSlash: '╱', |
|
}; |
|
|
|
const specialMainSymbols = { |
|
tick: '✔', |
|
info: 'ℹ', |
|
warning: '⚠', |
|
cross: '✘', |
|
squareSmall: '◻', |
|
squareSmallFilled: '◼', |
|
circle: '◯', |
|
circleFilled: '◉', |
|
circleDotted: '◌', |
|
circleDouble: '◎', |
|
circleCircle: 'ⓞ', |
|
circleCross: 'ⓧ', |
|
circlePipe: 'Ⓘ', |
|
radioOn: '◉', |
|
radioOff: '◯', |
|
checkboxOn: '☒', |
|
checkboxOff: '☐', |
|
checkboxCircleOn: 'ⓧ', |
|
checkboxCircleOff: 'Ⓘ', |
|
pointer: '❯', |
|
triangleUpOutline: '△', |
|
triangleLeft: '◀', |
|
triangleRight: '▶', |
|
lozenge: '◆', |
|
lozengeOutline: '◇', |
|
hamburger: '☰', |
|
smiley: '㋡', |
|
mustache: '෴', |
|
star: '★', |
|
play: '▶', |
|
nodejs: '⬢', |
|
oneSeventh: '⅐', |
|
oneNinth: '⅑', |
|
oneTenth: '⅒', |
|
}; |
|
|
|
const specialFallbackSymbols = { |
|
tick: '√', |
|
info: 'i', |
|
warning: '‼', |
|
cross: '×', |
|
squareSmall: '□', |
|
squareSmallFilled: '■', |
|
circle: '( )', |
|
circleFilled: '(*)', |
|
circleDotted: '( )', |
|
circleDouble: '( )', |
|
circleCircle: '(○)', |
|
circleCross: '(×)', |
|
circlePipe: '(│)', |
|
radioOn: '(*)', |
|
radioOff: '( )', |
|
checkboxOn: '[×]', |
|
checkboxOff: '[ ]', |
|
checkboxCircleOn: '(×)', |
|
checkboxCircleOff: '( )', |
|
pointer: '>', |
|
triangleUpOutline: '∆', |
|
triangleLeft: '◄', |
|
triangleRight: '►', |
|
lozenge: '♦', |
|
lozengeOutline: '◊', |
|
hamburger: '≡', |
|
smiley: '☺', |
|
mustache: '┌─┐', |
|
star: '✶', |
|
play: '►', |
|
nodejs: '♦', |
|
oneSeventh: '1/7', |
|
oneNinth: '1/9', |
|
oneTenth: '1/10', |
|
}; |
|
|
|
export const mainSymbols = {...common, ...specialMainSymbols}; |
|
export const fallbackSymbols = {...common, ...specialFallbackSymbols}; |
|
|
|
const shouldUseMain = isUnicodeSupported(); |
|
const figures = shouldUseMain ? mainSymbols : fallbackSymbols; |
|
export default figures; |
|
|
|
const replacements = Object.entries(specialMainSymbols); |
|
|
|
// On terminals which do not support Unicode symbols, substitute them to other symbols |
|
export const replaceSymbols = (string, {useFallback = !shouldUseMain} = {}) => { |
|
if (useFallback) { |
|
for (const [key, mainSymbol] of replacements) { |
|
string = string.replaceAll(mainSymbol, fallbackSymbols[key]); |
|
} |
|
} |
|
|
|
return string; |
|
};
|
|
|