Packages
Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.
Current section
Files
Jump to
Current section
Files
examples/apps/file_browser/helpers.ex
defmodule Examples.FileBrowser.Helpers do
@moduledoc """
Helper functions for the file browser explorer.
Provides formatting utilities for file icons, sizes, and timestamps.
"""
def file_icon(entry) do
case entry.type do
:directory ->
"[DIR]"
:symlink ->
"[LINK]"
_ ->
case entry.extension do
ext when ext in [".ex", ".exs"] -> "[ELIXIR]"
ext when ext in [".js", ".ts"] -> "[JS]"
ext when ext in [".py"] -> "[PYTHON]"
ext when ext in [".rb"] -> "[RUBY]"
ext when ext in [".md"] -> "[MD]"
ext when ext in [".txt", ".log"] -> "[TXT]"
ext when ext in [".jpg", ".png", ".gif"] -> "[IMG]"
ext when ext in [".mp3", ".wav", ".ogg"] -> "[AUDIO]"
ext when ext in [".mp4", ".avi", ".mov"] -> "[VIDEO]"
ext when ext in [".zip", ".tar", ".gz"] -> "[ARCHIVE]"
_ -> "[TXT]"
end
end
end
def format_size(size) when size < 1024, do: "#{size} B"
def format_size(size) when size < 1024 * 1024,
do: "#{Float.round(size / 1024, 1)} KB"
def format_size(size) when size < 1024 * 1024 * 1024,
do: "#{Float.round(size / 1024 / 1024, 1)} MB"
def format_size(size),
do: "#{Float.round(size / 1024 / 1024 / 1024, 2)} GB"
def format_time(time) do
{{year, month, day}, {hour, minute, _}} = time
month_name =
~w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|> Enum.at(month - 1)
"#{month_name} #{String.pad_leading("#{day}", 2)} #{year} " <>
"#{String.pad_leading("#{hour}", 2, "0")}:#{String.pad_leading("#{minute}", 2, "0")}"
end
end