Overview
v0.1.3

Tsunami 津波

A quiet UI framework for back-office apps. Semantic HTML, data-* attributes and a little vanilla JS, with 53 components, Lucide icons and country flags. The core has no runtime dependencies; a few components (editor, chart, date picker, drag and drop) load a library of their own.

Principles

Native first

Reach for dialog, popover, details and button first. A small vanilla script adds only what HTML cannot: theme, tabs, select, tree, table, journey and a few more.

Zero specificity

Every selector sits in @layer components and :where(), so your CSS overrides it right away.

Light / Dark

Themes switch through CSS custom properties, following the system or the user's choice, with no flash on load.

Thai + Latin

One self-hosted woff2 Google Sans for both Thai and Latin. Table numbers use tabular-nums.

ภาษาไทยกับ Latin ในบรรทัดเดียวกัน 1,234.50

Install

Load the files from jsDelivr, which serves each release tag of the GitHub repository. Load the script in <head> as a plain script, not type="module": it then applies the saved theme before the first paint, so there is no flash and no inline script to add.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Djirasak/tsunami-framework@v0.1.3/dist/tsunami.min.css">
<script src="https://cdn.jsdelivr.net/gh/Djirasak/tsunami-framework@v0.1.3/dist/tsunami.min.js"></script>

The fonts and flags load from the same tag, next to dist/. The libraries some components need come from the same place, for example @v0.1.3/dist/chart.min.js, loaded before the Tsunami script. That includes the code editor's dist/monaco/vs/loader.js.

To host the files yourself, copy dist/, fonts/ and flags/ side by side and link dist/tsunami.min.css and dist/tsunami.min.js.

Example

Revenue
$12,840
+12.4% from last month
Orders
1,284
+3.1%
Refunds
18
+2 orders
New customers
342
Flat
Order Customer Status Total
#1042 Emma Wilson Paid $129.00
#1041 James Carter Pending $84.50
#1040 Olivia Brown Cancelled $246.00