mogh_ui 1.2.9 → 1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -120,8 +120,23 @@ function EntityHeader({
120
120
  }
121
121
  ),
122
122
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_core.Group, { fz: "md", tt: "uppercase", mt: "-8", gap: "sm", children: [
123
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Text, { c: color, fw: "600", children: state }),
124
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.Text, { c: "dimmed", children: status })
123
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
124
+ import_core.Text,
125
+ {
126
+ component: typeof state === "string" ? void 0 : "div",
127
+ c: color,
128
+ fw: "600",
129
+ children: state
130
+ }
131
+ ),
132
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
133
+ import_core.Text,
134
+ {
135
+ component: typeof status === "string" ? void 0 : "div",
136
+ c: "dimmed",
137
+ children: status
138
+ }
139
+ )
125
140
  ] })
126
141
  ] })
127
142
  ] }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/entity-header.tsx"],"sourcesContent":["import { ActionIcon, Group, Stack, Text, TextInput } from \"@mantine/core\";\nimport { FC, ReactNode, useEffect, useState } from \"react\";\nimport { Edit, Save, X } from \"lucide-react\";\nimport { ColorIntention, hexColorByIntention } from \"../color\";\n\nexport interface EntityHeaderProps {\n name?: string;\n icon: FC<{ size?: string | number; color?: string }>;\n intent: ColorIntention;\n state?: ReactNode;\n status?: ReactNode;\n action?: ReactNode;\n onRename?: (name: string) => Promise<unknown>;\n renamePending?: boolean;\n}\n\nexport function EntityHeader({\n name,\n icon: Icon,\n intent,\n state,\n status,\n action,\n onRename: _onRename,\n renamePending,\n}: EntityHeaderProps) {\n const [editingName, setEditingName] = useState(false);\n const [newName, setNewName] = useState(name);\n useEffect(() => {\n setNewName(name);\n }, [name]);\n const color = hexColorByIntention(intent);\n const background = color ? color + \"25\" : undefined;\n const onRename =\n _onRename &&\n (() => {\n if (!newName) return;\n if (name === newName) {\n setEditingName(false);\n } else {\n _onRename(newName).then(() => setEditingName(false));\n }\n });\n return (\n <Group\n justify=\"space-between\"\n gap=\"lg\"\n px=\"xl\"\n py=\"md\"\n style={{\n background,\n borderTopLeftRadius: \"var(--mantine-radius-md)\",\n borderTopRightRadius: \"var(--mantine-radius-md)\",\n }}\n >\n <Group gap=\"lg\">\n <Icon size=\"2rem\" color={color} />\n <Stack gap=\"0\">\n {name && !onRename && (\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n )}\n {onRename && (\n <Group\n mb={editingName ? \"xs\" : undefined}\n gap=\"xs\"\n onClick={editingName ? undefined : () => setEditingName(true)}\n style={{ cursor: editingName ? undefined : \"pointer\" }}\n >\n {!editingName && (\n <>\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n <ActionIcon title=\"Rename\">\n <Edit size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n {editingName && (\n <>\n <TextInput\n placeholder=\"Enter name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && onRename()}\n disabled={renamePending}\n size=\"lg\"\n autoFocus\n />\n <ActionIcon\n variant=\"filled\"\n color=\"blue\"\n onClick={onRename}\n loading={renamePending}\n >\n <Save size=\"1rem\" />\n </ActionIcon>\n <ActionIcon\n variant=\"filled\"\n color=\"red\"\n onClick={() => {\n setNewName(name);\n setEditingName(false);\n }}\n >\n <X size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n </Group>\n )}\n <Group fz=\"md\" tt=\"uppercase\" mt=\"-8\" gap=\"sm\">\n <Text c={color} fw=\"600\">\n {state}\n </Text>\n <Text c=\"dimmed\">{status}</Text>\n </Group>\n </Stack>\n </Group>\n {action}\n </Group>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/entity-header.tsx"],"sourcesContent":["import { ActionIcon, Group, Stack, Text, TextInput } from \"@mantine/core\";\nimport { FC, ReactNode, useEffect, useState } from \"react\";\nimport { Edit, Save, X } from \"lucide-react\";\nimport { ColorIntention, hexColorByIntention } from \"../color\";\n\nexport interface EntityHeaderProps {\n name?: string;\n icon: FC<{ size?: string | number; color?: string }>;\n intent: ColorIntention;\n state?: ReactNode;\n status?: ReactNode;\n action?: ReactNode;\n onRename?: (name: string) => Promise<unknown>;\n renamePending?: boolean;\n}\n\nexport function EntityHeader({\n name,\n icon: Icon,\n intent,\n state,\n status,\n action,\n onRename: _onRename,\n renamePending,\n}: EntityHeaderProps) {\n const [editingName, setEditingName] = useState(false);\n const [newName, setNewName] = useState(name);\n useEffect(() => {\n setNewName(name);\n }, [name]);\n const color = hexColorByIntention(intent);\n const background = color ? color + \"25\" : undefined;\n const onRename =\n _onRename &&\n (() => {\n if (!newName) return;\n if (name === newName) {\n setEditingName(false);\n } else {\n _onRename(newName).then(() => setEditingName(false));\n }\n });\n return (\n <Group\n justify=\"space-between\"\n gap=\"lg\"\n px=\"xl\"\n py=\"md\"\n style={{\n background,\n borderTopLeftRadius: \"var(--mantine-radius-md)\",\n borderTopRightRadius: \"var(--mantine-radius-md)\",\n }}\n >\n <Group gap=\"lg\">\n <Icon size=\"2rem\" color={color} />\n <Stack gap=\"0\">\n {name && !onRename && (\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n )}\n {onRename && (\n <Group\n mb={editingName ? \"xs\" : undefined}\n gap=\"xs\"\n onClick={editingName ? undefined : () => setEditingName(true)}\n style={{ cursor: editingName ? undefined : \"pointer\" }}\n >\n {!editingName && (\n <>\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n <ActionIcon title=\"Rename\">\n <Edit size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n {editingName && (\n <>\n <TextInput\n placeholder=\"Enter name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && onRename()}\n disabled={renamePending}\n size=\"lg\"\n autoFocus\n />\n <ActionIcon\n variant=\"filled\"\n color=\"blue\"\n onClick={onRename}\n loading={renamePending}\n >\n <Save size=\"1rem\" />\n </ActionIcon>\n <ActionIcon\n variant=\"filled\"\n color=\"red\"\n onClick={() => {\n setNewName(name);\n setEditingName(false);\n }}\n >\n <X size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n </Group>\n )}\n <Group fz=\"md\" tt=\"uppercase\" mt=\"-8\" gap=\"sm\">\n <Text\n component={typeof state === \"string\" ? undefined : \"div\"}\n c={color}\n fw=\"600\"\n >\n {state}\n </Text>\n <Text\n component={typeof status === \"string\" ? undefined : \"div\"}\n c=\"dimmed\"\n >\n {status}\n </Text>\n </Group>\n </Stack>\n </Group>\n {action}\n </Group>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"entity-header.d.ts","sourceRoot":"","sources":["../../src/components/entity-header.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAuB,MAAM,UAAU,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EAAE,SAAS,EACnB,aAAa,GACd,EAAE,iBAAiB,+BAmGnB"}
1
+ {"version":3,"file":"entity-header.d.ts","sourceRoot":"","sources":["../../src/components/entity-header.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAuB,MAAM,UAAU,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EAAE,IAAI,EACV,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EAAE,SAAS,EACnB,aAAa,GACd,EAAE,iBAAiB,+BA4GnB"}
@@ -97,8 +97,23 @@ function EntityHeader({
97
97
  }
98
98
  ),
99
99
  /* @__PURE__ */ jsxs(Group, { fz: "md", tt: "uppercase", mt: "-8", gap: "sm", children: [
100
- /* @__PURE__ */ jsx(Text, { c: color, fw: "600", children: state }),
101
- /* @__PURE__ */ jsx(Text, { c: "dimmed", children: status })
100
+ /* @__PURE__ */ jsx(
101
+ Text,
102
+ {
103
+ component: typeof state === "string" ? void 0 : "div",
104
+ c: color,
105
+ fw: "600",
106
+ children: state
107
+ }
108
+ ),
109
+ /* @__PURE__ */ jsx(
110
+ Text,
111
+ {
112
+ component: typeof status === "string" ? void 0 : "div",
113
+ c: "dimmed",
114
+ children: status
115
+ }
116
+ )
102
117
  ] })
103
118
  ] })
104
119
  ] }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/entity-header.tsx"],"sourcesContent":["import { ActionIcon, Group, Stack, Text, TextInput } from \"@mantine/core\";\nimport { FC, ReactNode, useEffect, useState } from \"react\";\nimport { Edit, Save, X } from \"lucide-react\";\nimport { ColorIntention, hexColorByIntention } from \"../color\";\n\nexport interface EntityHeaderProps {\n name?: string;\n icon: FC<{ size?: string | number; color?: string }>;\n intent: ColorIntention;\n state?: ReactNode;\n status?: ReactNode;\n action?: ReactNode;\n onRename?: (name: string) => Promise<unknown>;\n renamePending?: boolean;\n}\n\nexport function EntityHeader({\n name,\n icon: Icon,\n intent,\n state,\n status,\n action,\n onRename: _onRename,\n renamePending,\n}: EntityHeaderProps) {\n const [editingName, setEditingName] = useState(false);\n const [newName, setNewName] = useState(name);\n useEffect(() => {\n setNewName(name);\n }, [name]);\n const color = hexColorByIntention(intent);\n const background = color ? color + \"25\" : undefined;\n const onRename =\n _onRename &&\n (() => {\n if (!newName) return;\n if (name === newName) {\n setEditingName(false);\n } else {\n _onRename(newName).then(() => setEditingName(false));\n }\n });\n return (\n <Group\n justify=\"space-between\"\n gap=\"lg\"\n px=\"xl\"\n py=\"md\"\n style={{\n background,\n borderTopLeftRadius: \"var(--mantine-radius-md)\",\n borderTopRightRadius: \"var(--mantine-radius-md)\",\n }}\n >\n <Group gap=\"lg\">\n <Icon size=\"2rem\" color={color} />\n <Stack gap=\"0\">\n {name && !onRename && (\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n )}\n {onRename && (\n <Group\n mb={editingName ? \"xs\" : undefined}\n gap=\"xs\"\n onClick={editingName ? undefined : () => setEditingName(true)}\n style={{ cursor: editingName ? undefined : \"pointer\" }}\n >\n {!editingName && (\n <>\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n <ActionIcon title=\"Rename\">\n <Edit size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n {editingName && (\n <>\n <TextInput\n placeholder=\"Enter name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && onRename()}\n disabled={renamePending}\n size=\"lg\"\n autoFocus\n />\n <ActionIcon\n variant=\"filled\"\n color=\"blue\"\n onClick={onRename}\n loading={renamePending}\n >\n <Save size=\"1rem\" />\n </ActionIcon>\n <ActionIcon\n variant=\"filled\"\n color=\"red\"\n onClick={() => {\n setNewName(name);\n setEditingName(false);\n }}\n >\n <X size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n </Group>\n )}\n <Group fz=\"md\" tt=\"uppercase\" mt=\"-8\" gap=\"sm\">\n <Text c={color} fw=\"600\">\n {state}\n </Text>\n <Text c=\"dimmed\">{status}</Text>\n </Group>\n </Stack>\n </Group>\n {action}\n </Group>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/entity-header.tsx"],"sourcesContent":["import { ActionIcon, Group, Stack, Text, TextInput } from \"@mantine/core\";\nimport { FC, ReactNode, useEffect, useState } from \"react\";\nimport { Edit, Save, X } from \"lucide-react\";\nimport { ColorIntention, hexColorByIntention } from \"../color\";\n\nexport interface EntityHeaderProps {\n name?: string;\n icon: FC<{ size?: string | number; color?: string }>;\n intent: ColorIntention;\n state?: ReactNode;\n status?: ReactNode;\n action?: ReactNode;\n onRename?: (name: string) => Promise<unknown>;\n renamePending?: boolean;\n}\n\nexport function EntityHeader({\n name,\n icon: Icon,\n intent,\n state,\n status,\n action,\n onRename: _onRename,\n renamePending,\n}: EntityHeaderProps) {\n const [editingName, setEditingName] = useState(false);\n const [newName, setNewName] = useState(name);\n useEffect(() => {\n setNewName(name);\n }, [name]);\n const color = hexColorByIntention(intent);\n const background = color ? color + \"25\" : undefined;\n const onRename =\n _onRename &&\n (() => {\n if (!newName) return;\n if (name === newName) {\n setEditingName(false);\n } else {\n _onRename(newName).then(() => setEditingName(false));\n }\n });\n return (\n <Group\n justify=\"space-between\"\n gap=\"lg\"\n px=\"xl\"\n py=\"md\"\n style={{\n background,\n borderTopLeftRadius: \"var(--mantine-radius-md)\",\n borderTopRightRadius: \"var(--mantine-radius-md)\",\n }}\n >\n <Group gap=\"lg\">\n <Icon size=\"2rem\" color={color} />\n <Stack gap=\"0\">\n {name && !onRename && (\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n )}\n {onRename && (\n <Group\n mb={editingName ? \"xs\" : undefined}\n gap=\"xs\"\n onClick={editingName ? undefined : () => setEditingName(true)}\n style={{ cursor: editingName ? undefined : \"pointer\" }}\n >\n {!editingName && (\n <>\n <Text fz=\"h1\" fw=\"bolder\">\n {name}\n </Text>\n <ActionIcon title=\"Rename\">\n <Edit size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n {editingName && (\n <>\n <TextInput\n placeholder=\"Enter name\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => e.key === \"Enter\" && onRename()}\n disabled={renamePending}\n size=\"lg\"\n autoFocus\n />\n <ActionIcon\n variant=\"filled\"\n color=\"blue\"\n onClick={onRename}\n loading={renamePending}\n >\n <Save size=\"1rem\" />\n </ActionIcon>\n <ActionIcon\n variant=\"filled\"\n color=\"red\"\n onClick={() => {\n setNewName(name);\n setEditingName(false);\n }}\n >\n <X size=\"1rem\" />\n </ActionIcon>\n </>\n )}\n </Group>\n )}\n <Group fz=\"md\" tt=\"uppercase\" mt=\"-8\" gap=\"sm\">\n <Text\n component={typeof state === \"string\" ? undefined : \"div\"}\n c={color}\n fw=\"600\"\n >\n {state}\n </Text>\n <Text\n component={typeof status === \"string\" ? undefined : \"div\"}\n c=\"dimmed\"\n >\n {status}\n </Text>\n </Group>\n </Stack>\n </Group>\n {action}\n </Group>\n );\n}\n"],"mappings":"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","names":[]}
@@ -28,6 +28,7 @@ __export(formatting_exports, {
28
28
  fmtRateBytes: () => fmtRateBytes,
29
29
  fmtSizeBytes: () => fmtSizeBytes,
30
30
  fmtSnakeCaseToUpperSpaceCase: () => fmtSnakeCaseToUpperSpaceCase,
31
+ fmtTimeUntil: () => fmtTimeUntil,
31
32
  fmtUpperCamelcase: () => fmtUpperCamelcase,
32
33
  fmtUtcDate: () => fmtUtcDate
33
34
  });
@@ -82,6 +83,16 @@ function fmtDuration(startTs, endTs) {
82
83
  const remaining_seconds = seconds % 60;
83
84
  return `${minutes > 0 ? `${minutes} minute${minutes > 1 ? "s" : ""} ` : ""}${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;
84
85
  }
86
+ const MINUTE_MS = 6e4;
87
+ const HOUR_MS = 60 * MINUTE_MS;
88
+ const DAY_MS = 24 * HOUR_MS;
89
+ function fmtTimeUntil(ms) {
90
+ const plural = (count, unit) => `${count} ${unit}${count === 1 ? "" : "s"}`;
91
+ if (ms >= DAY_MS) return plural(Math.floor(ms / DAY_MS), "day");
92
+ if (ms >= HOUR_MS) return plural(Math.floor(ms / HOUR_MS), "hour");
93
+ if (ms >= MINUTE_MS) return plural(Math.floor(ms / MINUTE_MS), "minute");
94
+ return "< 1 minute";
95
+ }
85
96
  function fmtUpperCamelcase(input) {
86
97
  return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(" ") ?? input;
87
98
  }
@@ -118,6 +129,7 @@ function fmtRateBytes(bytes) {
118
129
  fmtRateBytes,
119
130
  fmtSizeBytes,
120
131
  fmtSnakeCaseToUpperSpaceCase,
132
+ fmtTimeUntil,
121
133
  fmtUpperCamelcase,
122
134
  fmtUtcDate
123
135
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/formatting.ts"],"sourcesContent":["export function fmtDate(d: Date) {\n const hours = d.getHours();\n const minutes = d.getMinutes();\n return `${fmtMonth(d.getMonth())} ${d.getDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtUtcDate(d: Date) {\n const hours = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n return `${fmtMonth(d.getUTCMonth())} ${d.getUTCDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtMonth(month: number) {\n switch (month) {\n case 0:\n return \"Jan\";\n case 1:\n return \"Feb\";\n case 2:\n return \"Mar\";\n case 3:\n return \"Apr\";\n case 4:\n return \"May\";\n case 5:\n return \"Jun\";\n case 6:\n return \"Jul\";\n case 7:\n return \"Aug\";\n case 8:\n return \"Sep\";\n case 9:\n return \"Oct\";\n case 10:\n return \"Nov\";\n case 11:\n return \"Dec\";\n }\n}\n\nexport const fmtDateWithMinutes = (d: Date) => {\n // return `${d.toLocaleDateString()} ${d.toLocaleTimeString()}`;\n return d.toLocaleString();\n};\n\nexport function fmtDuration(startTs: number, endTs: number) {\n const start = new Date(startTs);\n const end = new Date(endTs);\n const durr = end.getTime() - start.getTime();\n const seconds = durr / 1000;\n const minutes = Math.floor(seconds / 60);\n const remaining_seconds = seconds % 60;\n return `${\n minutes > 0 ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"} ` : \"\"\n }${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;\n}\n\nexport function fmtUpperCamelcase(input: string) {\n return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(\" \") ?? input;\n}\n\n/// list_all_items => List All Items\nexport function fmtSnakeCaseToUpperSpaceCase(snake: string) {\n if (snake.length === 0) return \"\";\n return snake\n .split(\"_\")\n .map((item) => item[0].toUpperCase() + item.slice(1))\n .join(\" \");\n}\n\nexport const BYTES_PER_KB = 1024;\nexport const BYTES_PER_MB = 1024 * BYTES_PER_KB;\nexport const BYTES_PER_GB = 1024 * BYTES_PER_MB;\n\nexport function fmtSizeBytes(bytes: number) {\n if (bytes >= BYTES_PER_GB) {\n return (bytes / BYTES_PER_GB).toFixed(1) + \" GiB\";\n } else if (bytes >= BYTES_PER_MB) {\n return (bytes / BYTES_PER_MB).toFixed(1) + \" MiB\";\n } else if (bytes >= BYTES_PER_KB) {\n return (bytes / BYTES_PER_KB).toFixed(1) + \" KiB\";\n } else {\n return bytes.toString() + \" bytes\";\n }\n}\n\nexport function fmtRateBytes(bytes: number) {\n return fmtSizeBytes(bytes) + \"/s\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,QAAQ,GAAS;AAC/B,QAAM,QAAQ,EAAE,SAAS;AACzB,QAAM,UAAU,EAAE,WAAW;AAC7B,SAAO,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAC7C,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,WAAW,GAAS;AAClC,QAAM,QAAQ,EAAE,YAAY;AAC5B,QAAM,UAAU,EAAE,cAAc;AAChC,SAAO,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IACnD,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,SAAS,OAAe;AACtC,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEO,MAAM,qBAAqB,CAAC,MAAY;AAE7C,SAAO,EAAE,eAAe;AAC1B;AAEO,SAAS,YAAY,SAAiB,OAAe;AAC1D,QAAM,QAAQ,IAAI,KAAK,OAAO;AAC9B,QAAM,MAAM,IAAI,KAAK,KAAK;AAC1B,QAAM,OAAO,IAAI,QAAQ,IAAI,MAAM,QAAQ;AAC3C,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,oBAAoB,UAAU;AACpC,SAAO,GACL,UAAU,IAAI,GAAG,OAAO,UAAU,UAAU,IAAI,MAAM,EAAE,MAAM,EAChE,GAAG,kBAAkB,QAAQ,UAAU,IAAI,IAAI,CAAC,CAAC;AACnD;AAEO,SAAS,kBAAkB,OAAe;AAC/C,SAAO,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,KAAK;AAC1D;AAGO,SAAS,6BAA6B,OAAe;AAC1D,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACnD,KAAK,GAAG;AACb;AAEO,MAAM,eAAe;AACrB,MAAM,eAAe,OAAO;AAC5B,MAAM,eAAe,OAAO;AAE5B,SAAS,aAAa,OAAe;AAC1C,MAAI,SAAS,cAAc;AACzB,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,OAAO;AACL,WAAO,MAAM,SAAS,IAAI;AAAA,EAC5B;AACF;AAEO,SAAS,aAAa,OAAe;AAC1C,SAAO,aAAa,KAAK,IAAI;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../src/formatting.ts"],"sourcesContent":["export function fmtDate(d: Date) {\n const hours = d.getHours();\n const minutes = d.getMinutes();\n return `${fmtMonth(d.getMonth())} ${d.getDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtUtcDate(d: Date) {\n const hours = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n return `${fmtMonth(d.getUTCMonth())} ${d.getUTCDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtMonth(month: number) {\n switch (month) {\n case 0:\n return \"Jan\";\n case 1:\n return \"Feb\";\n case 2:\n return \"Mar\";\n case 3:\n return \"Apr\";\n case 4:\n return \"May\";\n case 5:\n return \"Jun\";\n case 6:\n return \"Jul\";\n case 7:\n return \"Aug\";\n case 8:\n return \"Sep\";\n case 9:\n return \"Oct\";\n case 10:\n return \"Nov\";\n case 11:\n return \"Dec\";\n }\n}\n\nexport const fmtDateWithMinutes = (d: Date) => {\n // return `${d.toLocaleDateString()} ${d.toLocaleTimeString()}`;\n return d.toLocaleString();\n};\n\nexport function fmtDuration(startTs: number, endTs: number) {\n const start = new Date(startTs);\n const end = new Date(endTs);\n const durr = end.getTime() - start.getTime();\n const seconds = durr / 1000;\n const minutes = Math.floor(seconds / 60);\n const remaining_seconds = seconds % 60;\n return `${\n minutes > 0 ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"} ` : \"\"\n }${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\n\n/** Coarse \"time until\" of a future timestamp: days, falling back to\n * hours / minutes once under a day. */\nexport function fmtTimeUntil(ms: number) {\n const plural = (count: number, unit: string) =>\n `${count} ${unit}${count === 1 ? \"\" : \"s\"}`;\n if (ms >= DAY_MS) return plural(Math.floor(ms / DAY_MS), \"day\");\n if (ms >= HOUR_MS) return plural(Math.floor(ms / HOUR_MS), \"hour\");\n if (ms >= MINUTE_MS) return plural(Math.floor(ms / MINUTE_MS), \"minute\");\n return \"< 1 minute\";\n}\n\nexport function fmtUpperCamelcase(input: string) {\n return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(\" \") ?? input;\n}\n\n/// list_all_items => List All Items\nexport function fmtSnakeCaseToUpperSpaceCase(snake: string) {\n if (snake.length === 0) return \"\";\n return snake\n .split(\"_\")\n .map((item) => item[0].toUpperCase() + item.slice(1))\n .join(\" \");\n}\n\nexport const BYTES_PER_KB = 1024;\nexport const BYTES_PER_MB = 1024 * BYTES_PER_KB;\nexport const BYTES_PER_GB = 1024 * BYTES_PER_MB;\n\nexport function fmtSizeBytes(bytes: number) {\n if (bytes >= BYTES_PER_GB) {\n return (bytes / BYTES_PER_GB).toFixed(1) + \" GiB\";\n } else if (bytes >= BYTES_PER_MB) {\n return (bytes / BYTES_PER_MB).toFixed(1) + \" MiB\";\n } else if (bytes >= BYTES_PER_KB) {\n return (bytes / BYTES_PER_KB).toFixed(1) + \" KiB\";\n } else {\n return bytes.toString() + \" bytes\";\n }\n}\n\nexport function fmtRateBytes(bytes: number) {\n return fmtSizeBytes(bytes) + \"/s\";\n}\n"],"mappings":"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","names":[]}
@@ -3,6 +3,9 @@ export declare function fmtUtcDate(d: Date): string;
3
3
  export declare function fmtMonth(month: number): "Apr" | "Aug" | "Dec" | "Feb" | "Jan" | "Jul" | "Jun" | "Mar" | "May" | "Nov" | "Oct" | "Sep" | undefined;
4
4
  export declare const fmtDateWithMinutes: (d: Date) => string;
5
5
  export declare function fmtDuration(startTs: number, endTs: number): string;
6
+ /** Coarse "time until" of a future timestamp: days, falling back to
7
+ * hours / minutes once under a day. */
8
+ export declare function fmtTimeUntil(ms: number): string;
6
9
  export declare function fmtUpperCamelcase(input: string): string;
7
10
  export declare function fmtSnakeCaseToUpperSpaceCase(snake: string): string;
8
11
  export declare const BYTES_PER_KB = 1024;
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,UAM9B;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,UAMjC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,6GA2BrC;AAED,eAAO,MAAM,kBAAkB,MAAO,IAAI,WAGzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAUzD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAE9C;AAGD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,UAMzD;AAED,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,QAAsB,CAAC;AAChD,eAAO,MAAM,YAAY,QAAsB,CAAC;AAEhD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAUzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAEzC"}
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,UAM9B;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,UAMjC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,6GA2BrC;AAED,eAAO,MAAM,kBAAkB,MAAO,IAAI,WAGzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAUzD;AAMD;uCACuC;AACvC,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,UAOtC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAE9C;AAGD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,UAMzD;AAED,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,QAAsB,CAAC;AAChD,eAAO,MAAM,YAAY,QAAsB,CAAC;AAEhD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAUzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,UAEzC"}
@@ -48,6 +48,16 @@ function fmtDuration(startTs, endTs) {
48
48
  const remaining_seconds = seconds % 60;
49
49
  return `${minutes > 0 ? `${minutes} minute${minutes > 1 ? "s" : ""} ` : ""}${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;
50
50
  }
51
+ const MINUTE_MS = 6e4;
52
+ const HOUR_MS = 60 * MINUTE_MS;
53
+ const DAY_MS = 24 * HOUR_MS;
54
+ function fmtTimeUntil(ms) {
55
+ const plural = (count, unit) => `${count} ${unit}${count === 1 ? "" : "s"}`;
56
+ if (ms >= DAY_MS) return plural(Math.floor(ms / DAY_MS), "day");
57
+ if (ms >= HOUR_MS) return plural(Math.floor(ms / HOUR_MS), "hour");
58
+ if (ms >= MINUTE_MS) return plural(Math.floor(ms / MINUTE_MS), "minute");
59
+ return "< 1 minute";
60
+ }
51
61
  function fmtUpperCamelcase(input) {
52
62
  return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(" ") ?? input;
53
63
  }
@@ -83,6 +93,7 @@ export {
83
93
  fmtRateBytes,
84
94
  fmtSizeBytes,
85
95
  fmtSnakeCaseToUpperSpaceCase,
96
+ fmtTimeUntil,
86
97
  fmtUpperCamelcase,
87
98
  fmtUtcDate
88
99
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/formatting.ts"],"sourcesContent":["export function fmtDate(d: Date) {\n const hours = d.getHours();\n const minutes = d.getMinutes();\n return `${fmtMonth(d.getMonth())} ${d.getDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtUtcDate(d: Date) {\n const hours = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n return `${fmtMonth(d.getUTCMonth())} ${d.getUTCDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtMonth(month: number) {\n switch (month) {\n case 0:\n return \"Jan\";\n case 1:\n return \"Feb\";\n case 2:\n return \"Mar\";\n case 3:\n return \"Apr\";\n case 4:\n return \"May\";\n case 5:\n return \"Jun\";\n case 6:\n return \"Jul\";\n case 7:\n return \"Aug\";\n case 8:\n return \"Sep\";\n case 9:\n return \"Oct\";\n case 10:\n return \"Nov\";\n case 11:\n return \"Dec\";\n }\n}\n\nexport const fmtDateWithMinutes = (d: Date) => {\n // return `${d.toLocaleDateString()} ${d.toLocaleTimeString()}`;\n return d.toLocaleString();\n};\n\nexport function fmtDuration(startTs: number, endTs: number) {\n const start = new Date(startTs);\n const end = new Date(endTs);\n const durr = end.getTime() - start.getTime();\n const seconds = durr / 1000;\n const minutes = Math.floor(seconds / 60);\n const remaining_seconds = seconds % 60;\n return `${\n minutes > 0 ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"} ` : \"\"\n }${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;\n}\n\nexport function fmtUpperCamelcase(input: string) {\n return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(\" \") ?? input;\n}\n\n/// list_all_items => List All Items\nexport function fmtSnakeCaseToUpperSpaceCase(snake: string) {\n if (snake.length === 0) return \"\";\n return snake\n .split(\"_\")\n .map((item) => item[0].toUpperCase() + item.slice(1))\n .join(\" \");\n}\n\nexport const BYTES_PER_KB = 1024;\nexport const BYTES_PER_MB = 1024 * BYTES_PER_KB;\nexport const BYTES_PER_GB = 1024 * BYTES_PER_MB;\n\nexport function fmtSizeBytes(bytes: number) {\n if (bytes >= BYTES_PER_GB) {\n return (bytes / BYTES_PER_GB).toFixed(1) + \" GiB\";\n } else if (bytes >= BYTES_PER_MB) {\n return (bytes / BYTES_PER_MB).toFixed(1) + \" MiB\";\n } else if (bytes >= BYTES_PER_KB) {\n return (bytes / BYTES_PER_KB).toFixed(1) + \" KiB\";\n } else {\n return bytes.toString() + \" bytes\";\n }\n}\n\nexport function fmtRateBytes(bytes: number) {\n return fmtSizeBytes(bytes) + \"/s\";\n}\n"],"mappings":"AAAO,SAAS,QAAQ,GAAS;AAC/B,QAAM,QAAQ,EAAE,SAAS;AACzB,QAAM,UAAU,EAAE,WAAW;AAC7B,SAAO,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAC7C,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,WAAW,GAAS;AAClC,QAAM,QAAQ,EAAE,YAAY;AAC5B,QAAM,UAAU,EAAE,cAAc;AAChC,SAAO,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IACnD,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,SAAS,OAAe;AACtC,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEO,MAAM,qBAAqB,CAAC,MAAY;AAE7C,SAAO,EAAE,eAAe;AAC1B;AAEO,SAAS,YAAY,SAAiB,OAAe;AAC1D,QAAM,QAAQ,IAAI,KAAK,OAAO;AAC9B,QAAM,MAAM,IAAI,KAAK,KAAK;AAC1B,QAAM,OAAO,IAAI,QAAQ,IAAI,MAAM,QAAQ;AAC3C,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,oBAAoB,UAAU;AACpC,SAAO,GACL,UAAU,IAAI,GAAG,OAAO,UAAU,UAAU,IAAI,MAAM,EAAE,MAAM,EAChE,GAAG,kBAAkB,QAAQ,UAAU,IAAI,IAAI,CAAC,CAAC;AACnD;AAEO,SAAS,kBAAkB,OAAe;AAC/C,SAAO,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,KAAK;AAC1D;AAGO,SAAS,6BAA6B,OAAe;AAC1D,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACnD,KAAK,GAAG;AACb;AAEO,MAAM,eAAe;AACrB,MAAM,eAAe,OAAO;AAC5B,MAAM,eAAe,OAAO;AAE5B,SAAS,aAAa,OAAe;AAC1C,MAAI,SAAS,cAAc;AACzB,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,OAAO;AACL,WAAO,MAAM,SAAS,IAAI;AAAA,EAC5B;AACF;AAEO,SAAS,aAAa,OAAe;AAC1C,SAAO,aAAa,KAAK,IAAI;AAC/B;","names":[]}
1
+ {"version":3,"sources":["../src/formatting.ts"],"sourcesContent":["export function fmtDate(d: Date) {\n const hours = d.getHours();\n const minutes = d.getMinutes();\n return `${fmtMonth(d.getMonth())} ${d.getDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtUtcDate(d: Date) {\n const hours = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n return `${fmtMonth(d.getUTCMonth())} ${d.getUTCDate()} ${\n hours > 9 ? hours : \"0\" + hours\n }:${minutes > 9 ? minutes : \"0\" + minutes}`;\n}\n\nexport function fmtMonth(month: number) {\n switch (month) {\n case 0:\n return \"Jan\";\n case 1:\n return \"Feb\";\n case 2:\n return \"Mar\";\n case 3:\n return \"Apr\";\n case 4:\n return \"May\";\n case 5:\n return \"Jun\";\n case 6:\n return \"Jul\";\n case 7:\n return \"Aug\";\n case 8:\n return \"Sep\";\n case 9:\n return \"Oct\";\n case 10:\n return \"Nov\";\n case 11:\n return \"Dec\";\n }\n}\n\nexport const fmtDateWithMinutes = (d: Date) => {\n // return `${d.toLocaleDateString()} ${d.toLocaleTimeString()}`;\n return d.toLocaleString();\n};\n\nexport function fmtDuration(startTs: number, endTs: number) {\n const start = new Date(startTs);\n const end = new Date(endTs);\n const durr = end.getTime() - start.getTime();\n const seconds = durr / 1000;\n const minutes = Math.floor(seconds / 60);\n const remaining_seconds = seconds % 60;\n return `${\n minutes > 0 ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"} ` : \"\"\n }${remaining_seconds.toFixed(minutes > 0 ? 0 : 1)} seconds`;\n}\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\n\n/** Coarse \"time until\" of a future timestamp: days, falling back to\n * hours / minutes once under a day. */\nexport function fmtTimeUntil(ms: number) {\n const plural = (count: number, unit: string) =>\n `${count} ${unit}${count === 1 ? \"\" : \"s\"}`;\n if (ms >= DAY_MS) return plural(Math.floor(ms / DAY_MS), \"day\");\n if (ms >= HOUR_MS) return plural(Math.floor(ms / HOUR_MS), \"hour\");\n if (ms >= MINUTE_MS) return plural(Math.floor(ms / MINUTE_MS), \"minute\");\n return \"< 1 minute\";\n}\n\nexport function fmtUpperCamelcase(input: string) {\n return input.match(/[A-Z][a-z]+|[0-9]+/g)?.join(\" \") ?? input;\n}\n\n/// list_all_items => List All Items\nexport function fmtSnakeCaseToUpperSpaceCase(snake: string) {\n if (snake.length === 0) return \"\";\n return snake\n .split(\"_\")\n .map((item) => item[0].toUpperCase() + item.slice(1))\n .join(\" \");\n}\n\nexport const BYTES_PER_KB = 1024;\nexport const BYTES_PER_MB = 1024 * BYTES_PER_KB;\nexport const BYTES_PER_GB = 1024 * BYTES_PER_MB;\n\nexport function fmtSizeBytes(bytes: number) {\n if (bytes >= BYTES_PER_GB) {\n return (bytes / BYTES_PER_GB).toFixed(1) + \" GiB\";\n } else if (bytes >= BYTES_PER_MB) {\n return (bytes / BYTES_PER_MB).toFixed(1) + \" MiB\";\n } else if (bytes >= BYTES_PER_KB) {\n return (bytes / BYTES_PER_KB).toFixed(1) + \" KiB\";\n } else {\n return bytes.toString() + \" bytes\";\n }\n}\n\nexport function fmtRateBytes(bytes: number) {\n return fmtSizeBytes(bytes) + \"/s\";\n}\n"],"mappings":"AAAO,SAAS,QAAQ,GAAS;AAC/B,QAAM,QAAQ,EAAE,SAAS;AACzB,QAAM,UAAU,EAAE,WAAW;AAC7B,SAAO,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAC7C,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,WAAW,GAAS;AAClC,QAAM,QAAQ,EAAE,YAAY;AAC5B,QAAM,UAAU,EAAE,cAAc;AAChC,SAAO,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IACnD,QAAQ,IAAI,QAAQ,MAAM,KAC5B,IAAI,UAAU,IAAI,UAAU,MAAM,OAAO;AAC3C;AAEO,SAAS,SAAS,OAAe;AACtC,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEO,MAAM,qBAAqB,CAAC,MAAY;AAE7C,SAAO,EAAE,eAAe;AAC1B;AAEO,SAAS,YAAY,SAAiB,OAAe;AAC1D,QAAM,QAAQ,IAAI,KAAK,OAAO;AAC9B,QAAM,MAAM,IAAI,KAAK,KAAK;AAC1B,QAAM,OAAO,IAAI,QAAQ,IAAI,MAAM,QAAQ;AAC3C,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,oBAAoB,UAAU;AACpC,SAAO,GACL,UAAU,IAAI,GAAG,OAAO,UAAU,UAAU,IAAI,MAAM,EAAE,MAAM,EAChE,GAAG,kBAAkB,QAAQ,UAAU,IAAI,IAAI,CAAC,CAAC;AACnD;AAEA,MAAM,YAAY;AAClB,MAAM,UAAU,KAAK;AACrB,MAAM,SAAS,KAAK;AAIb,SAAS,aAAa,IAAY;AACvC,QAAM,SAAS,CAAC,OAAe,SAC7B,GAAG,KAAK,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AAC3C,MAAI,MAAM,OAAQ,QAAO,OAAO,KAAK,MAAM,KAAK,MAAM,GAAG,KAAK;AAC9D,MAAI,MAAM,QAAS,QAAO,OAAO,KAAK,MAAM,KAAK,OAAO,GAAG,MAAM;AACjE,MAAI,MAAM,UAAW,QAAO,OAAO,KAAK,MAAM,KAAK,SAAS,GAAG,QAAQ;AACvE,SAAO;AACT;AAEO,SAAS,kBAAkB,OAAe;AAC/C,SAAO,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,KAAK;AAC1D;AAGO,SAAS,6BAA6B,OAAe;AAC1D,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACnD,KAAK,GAAG;AACb;AAEO,MAAM,eAAe;AACrB,MAAM,eAAe,OAAO;AAC5B,MAAM,eAAe,OAAO;AAE5B,SAAS,aAAa,OAAe;AAC1C,MAAI,SAAS,cAAc;AACzB,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,WAAW,SAAS,cAAc;AAChC,YAAQ,QAAQ,cAAc,QAAQ,CAAC,IAAI;AAAA,EAC7C,OAAO;AACL,WAAO,MAAM,SAAS,IAAI;AAAA,EAC5B;AACF;AAEO,SAAS,aAAa,OAAe;AAC1C,SAAO,aAAa,KAAK,IAAI;AAC/B;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mogh_ui",
3
- "version": "1.2.9",
3
+ "version": "1.2.11",
4
4
  "description": "Common UI components and styling used across Mogh apps.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",