#!/bin/bash function isSuccessful() { echo -e "${GREEN}✓ Success${NC} $1" } function isError() { echo -e "${RED}✗ Error${NC} $1" } function isFatalError() { echo -e "${RED}✗ Error${NC} $1" } function isFatalErrorExit() { echo -e "${RED}✗ Error${NC} $1" echo "" exit 1 } function isNotice() { echo -e "${YELLOW}! Notice${NC} $1" } # Interactive markers use the portal chevron ❯ — the moments you "step through". function isQuestion() { echo -e -n "${BLUE}❯ Question${NC} $1 " } function isOptionMenu() { echo -e -n "${PINK}❯ Option${NC} $1" } function isOption() { echo -e "${PINK}❯ Option${NC} $1" } function isHeader() { local title="$1" local width=52 local inner=$((width - 2)) local title_len=${#title} local total_pad=$((inner - title_len)) if (( total_pad < 0 )); then total_pad=0; fi local left_pad=$((total_pad / 2)) local right_pad=$((total_pad - left_pad)) # Double-line box. printf-repeat the horizontal rule so it stays aligned # regardless of locale (tr can't emit a multibyte char per input byte). local hbar hbar=$(printf '═%.0s' $(seq 1 "$inner")) printf '\n╔%s╗\n' "$hbar" printf '║%*s%s%*s║\n' "$left_pad" '' "$title" "$right_pad" '' printf '╚%s╝\n\n' "$hbar" }