function ui::watch::fw_row() { local ts="${1:-}" client="${2:-}" dest_display="${3:-}" \ w_client="${4:-20}" w_dest="${5:-18}" # "fw" is always 2 visible chars — no padding needed local src="${_UI_WATCH_FW_COLOR}fw\033[0m" local ts_pad client_pad dest_pad_n ts_pad=$(printf "%-11s" "$ts") client_pad=$(printf "%-${w_client}s" "$client") dest_pad_n=$(( w_dest - ${#dest_display} )) [[ $dest_pad_n -lt 0 ]] && dest_pad_n=0 printf " %s %b %s \033[1;31m→\033[0m %s%*s \033[1;31mdrop\033[0m\n" \ "$ts_pad" "$src" "$client_pad" "$dest_display" "$dest_pad_n" "" } function ui::watch::fw_row_table() { local ts="${1:-}" client="${2:-}" dest="${3:-}" event="${4:-}" status="${5:-}" printf " %-20s %-8s %-22s %-28s \033[1;31m%-14s\033[0m %s\n" \ "$ts" "firewall" "$client" "$dest" "$event" "$status" }