UNPKG

ranui

Version:

A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.

91 lines (90 loc) 4.16 kB
import { T as d, i as l, m as k } from "./factory-WDxu11V0.js"; import "./builder-EH76YCFS.js"; import { a as m, i as n, n as c, o as v, t as g } from "./utils-U-9uH7EX.js"; import { a as f, n as p } from "./ssr-BzykYefm.js"; var _ = ':host{display:block;color:var(--ran-token-meter-color, var(--ran-color-text-secondary));font-size:var(--ran-token-meter-font-size, var(--ran-text-label-3))}:host([hidden]){display:none}.ran-token-meter{display:flex;align-items:center;gap:var(--ran-token-meter-gap, var(--ran-space-2))}.ran-token-meter-track{flex:1;border-radius:var(--ran-token-meter-track-radius, var(--ran-radius-full));background:var(--ran-token-meter-track-background, var(--ran-color-bg-muted));min-width:var(--ran-token-meter-track-width, 4rem);height:var(--ran-token-meter-track-height, .375rem);overflow:hidden}.ran-token-meter-fill{transition:width var(--ran-token-meter-transition, .2s) ease-out;border-radius:inherit;background:var(--ran-token-meter-fill-background, var(--ran-color-primary));height:100%}:host([level="warn"]) .ran-token-meter-fill{background:var(--ran-token-meter-warn-background, var(--ran-color-warning))}:host([level="over"]) .ran-token-meter-fill{background:var(--ran-token-meter-over-background, var(--ran-color-danger))}.ran-token-meter-text{flex:none;font-variant-numeric:tabular-nums}@media(prefers-reduced-motion:reduce){.ran-token-meter-fill{transition:none}}', x = 0.8; function a(t) { return t < 1e3 ? String(t) : t < 1e4 ? `${(t / 1e3).toFixed(1)}k` : `${Math.round(t / 1e3)}k`; } var w = class extends p { _shadowDom; _fill; _text; _root; static get observedAttributes() { return [ "limit", "used", "spent", "label", "sheet" ]; } constructor() { super(), this._shadowDom = g(this, _); const t = d(), e = d(), r = l().class("ran-token-meter").attr("part", "meter").attr("role", "progressbar").attr("aria-valuemin", "0").children(l().class("ran-token-meter-track").attr("part", "track").children(l().class("ran-token-meter-fill").ref(t).attr("part", "fill").build()).build(), k().class("ran-token-meter-text").ref(e).attr("part", "text").build()).build(); this._shadowDom.appendChild(r), this._root = r, this._fill = m(t, "fill"), this._text = m(e, "text"); } get limit() { return this._number("limit"); } set limit(t) { n(this, "limit", String(t)); } get used() { return this._number("used"); } set used(t) { n(this, "used", String(t)); } get spent() { return this._number("spent"); } set spent(t) { n(this, "spent", String(t)); } get label() { return c(this, "label", "Context"); } set label(t) { n(this, "label", t); } get level() { const t = this.getAttribute("level"); return t === "warn" || t === "over" ? t : "ok"; } get sheet() { return c(this, "sheet"); } set sheet(t) { n(this, "sheet", t); } connectedCallback() { this.handlerExternalCss(), this._render(); } attributeChangedCallback(t, e, r) { e !== r && (t === "sheet" ? this.handlerExternalCss() : this._render()); } handlerExternalCss = () => { v(this, this._shadowDom, "sheet", null, this.sheet); }; _number(t) { const e = Number(this.getAttribute(t)); return Number.isFinite(e) && e > 0 ? e : 0; } _render() { const { limit: t, used: e, spent: r, label: i } = this, o = t === 0 ? 0 : e / t, s = t === 0 || o < x ? "ok" : o < 1 ? "warn" : "over"; this.setAttribute("level", s), this._fill.style.width = `${Math.min(100, o * 100)}%`, this._root.setAttribute("aria-valuenow", String(e)), this._root.setAttribute("aria-valuemax", String(t === 0 ? e : t)); const h = t === 0 ? a(e) : `${a(e)} / ${a(t)}`, u = r === 0 ? h : `${h} · ${a(r)}`; this._text.textContent = i === "" ? u : `${i} ${u}`, this._root.setAttribute("title", [ `${i}: ${e.toLocaleString()}${t === 0 ? "" : ` / ${t.toLocaleString()}`}`, r === 0 ? "" : `Spent: ${r.toLocaleString()}`, s === "ok" ? "" : s === "warn" ? "Approaching the limit" : "Over the limit" ].filter((b) => b !== "").join(` `)); } }; f("r-token-meter", w); export { w as t };