mirror of
https://github.com/willchen96/mike.git
synced 2026-07-04 22:02:12 +02:00
Add local repo contents
This commit is contained in:
parent
65739ef1ce
commit
d9690965b5
176 changed files with 68998 additions and 0 deletions
72
frontend/src/app/components/tabular/pillUtils.ts
Normal file
72
frontend/src/app/components/tabular/pillUtils.ts
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
import type { ColumnConfig } from "../shared/types";
|
||||
|
||||
export type PillSegment =
|
||||
| { type: "text"; content: string }
|
||||
| { type: "pill"; content: string };
|
||||
|
||||
/** Sequential colors assigned to tags by their position in the tags array. */
|
||||
export const TAG_COLORS = [
|
||||
"bg-blue-100 text-blue-700",
|
||||
"bg-violet-100 text-violet-700",
|
||||
"bg-pink-100 text-pink-700",
|
||||
"bg-orange-100 text-orange-700",
|
||||
"bg-teal-100 text-teal-700",
|
||||
"bg-amber-100 text-amber-700",
|
||||
"bg-indigo-100 text-indigo-700",
|
||||
"bg-rose-100 text-rose-700",
|
||||
];
|
||||
|
||||
const CURRENCY_COLORS: Record<string, string> = {
|
||||
USD: "bg-green-100 text-green-700",
|
||||
EUR: "bg-blue-100 text-blue-700",
|
||||
GBP: "bg-purple-100 text-purple-700",
|
||||
JPY: "bg-red-100 text-red-700",
|
||||
CHF: "bg-orange-100 text-orange-700",
|
||||
AUD: "bg-cyan-100 text-cyan-700",
|
||||
CAD: "bg-teal-100 text-teal-700",
|
||||
SGD: "bg-pink-100 text-pink-700",
|
||||
HKD: "bg-rose-100 text-rose-700",
|
||||
NZD: "bg-lime-100 text-lime-700",
|
||||
CNY: "bg-amber-100 text-amber-700",
|
||||
};
|
||||
|
||||
export function getPillClass(content: string, column?: ColumnConfig): string {
|
||||
if (column?.format === "yes_no") {
|
||||
const lower = content.toLowerCase();
|
||||
if (lower === "yes") return "bg-green-100 text-green-700";
|
||||
if (lower === "no") return "bg-red-100 text-red-700";
|
||||
return "bg-gray-100 text-gray-700";
|
||||
}
|
||||
if (column?.format === "currency") {
|
||||
return (
|
||||
CURRENCY_COLORS[content.toUpperCase()] ??
|
||||
"bg-slate-100 text-slate-700"
|
||||
);
|
||||
}
|
||||
if (column?.format === "tag" && column.tags?.length) {
|
||||
const idx = column.tags.findIndex(
|
||||
(t) => t.toLowerCase() === content.toLowerCase(),
|
||||
);
|
||||
if (idx >= 0) return TAG_COLORS[idx % TAG_COLORS.length]!;
|
||||
}
|
||||
return "bg-gray-100 text-gray-700";
|
||||
}
|
||||
|
||||
/** Split text on [[...]] pill markers, preserving surrounding text. */
|
||||
export function parsePills(text: string): PillSegment[] {
|
||||
const segments: PillSegment[] = [];
|
||||
const regex = /\[\[([^\]]+)\]\]/g;
|
||||
let lastIndex = 0;
|
||||
let match: RegExpExecArray | null;
|
||||
while ((match = regex.exec(text)) !== null) {
|
||||
if (match.index > lastIndex) {
|
||||
segments.push({ type: "text", content: text.slice(lastIndex, match.index) });
|
||||
}
|
||||
segments.push({ type: "pill", content: match[1] });
|
||||
lastIndex = regex.lastIndex;
|
||||
}
|
||||
if (lastIndex < text.length) {
|
||||
segments.push({ type: "text", content: text.slice(lastIndex) });
|
||||
}
|
||||
return segments;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue