@otmc/ui 0.1.3 → 0.1.4
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.
- package/dist/index.cjs +242 -79
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -2
- package/dist/index.d.ts +23 -2
- package/dist/index.js +258 -82
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
package/dist/index.cjs
CHANGED
|
@@ -32,6 +32,7 @@ __export(index_exports, {
|
|
|
32
32
|
NotFound: () => NotFound,
|
|
33
33
|
ThemeMenu: () => ThemeMenu,
|
|
34
34
|
ThemeProvider: () => ThemeProvider,
|
|
35
|
+
ThemeSetting: () => ThemeSetting,
|
|
35
36
|
UNKNOWN: () => UNKNOWN,
|
|
36
37
|
calculateRemainingTime: () => calculateRemainingTime,
|
|
37
38
|
copyToClipboard: () => copyToClipboard,
|
|
@@ -48,6 +49,7 @@ module.exports = __toCommonJS(index_exports);
|
|
|
48
49
|
|
|
49
50
|
// src/branding/Footer.tsx
|
|
50
51
|
var import_core = require("@mantine/core");
|
|
52
|
+
var import_lucide_react = require("lucide-react");
|
|
51
53
|
var import_icons_react = require("@tabler/icons-react");
|
|
52
54
|
|
|
53
55
|
// src/utils/constants.ts
|
|
@@ -98,7 +100,7 @@ function Footer({
|
|
|
98
100
|
"Copyright",
|
|
99
101
|
" "
|
|
100
102
|
] }),
|
|
101
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Copyright, { size: 15, color: "var(--mantine-color-dimmed)" }),
|
|
102
104
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_core.Text, { size: "xs", c: "dimmed", children: [
|
|
103
105
|
(/* @__PURE__ */ new Date()).getFullYear(),
|
|
104
106
|
" ",
|
|
@@ -144,7 +146,7 @@ function Footer({
|
|
|
144
146
|
|
|
145
147
|
// src/components/ThemeMenu.tsx
|
|
146
148
|
var import_core3 = require("@mantine/core");
|
|
147
|
-
var
|
|
149
|
+
var import_lucide_react2 = require("lucide-react");
|
|
148
150
|
|
|
149
151
|
// src/contexts/ThemeProvider.tsx
|
|
150
152
|
var import_react = require("react");
|
|
@@ -254,10 +256,10 @@ var DEFAULT_LABELS = {
|
|
|
254
256
|
timeBased: "Theo th\u1EDDi gian"
|
|
255
257
|
};
|
|
256
258
|
var MODE_ICONS = {
|
|
257
|
-
light: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
258
|
-
dark: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
259
|
-
auto: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
260
|
-
"time-based": /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
259
|
+
light: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Sun, { size: 16 }),
|
|
260
|
+
dark: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Moon, { size: 16 }),
|
|
261
|
+
auto: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Monitor, { size: 16 }),
|
|
262
|
+
"time-based": /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Clock, { size: 16 })
|
|
261
263
|
};
|
|
262
264
|
function ThemeMenu({
|
|
263
265
|
modes = ["light", "dark", "auto", "time-based"],
|
|
@@ -270,7 +272,7 @@ function ThemeMenu({
|
|
|
270
272
|
const text = { ...DEFAULT_LABELS, ...labels };
|
|
271
273
|
const isDark = currentTheme === "dark";
|
|
272
274
|
const activeColor = isDark ? "yellow.8" : "blue.8";
|
|
273
|
-
const triggerIcon = theme === "light" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
275
|
+
const triggerIcon = theme === "light" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Sun, { size: iconSize, strokeWidth: 2 }) : theme === "dark" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Moon, { size: iconSize, strokeWidth: 2 }) : theme === "auto" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Monitor, { size: iconSize, strokeWidth: 2 }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.Clock, { size: iconSize, strokeWidth: 2 });
|
|
274
276
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_core3.Menu, { shadow: "md", width: 200, position: "bottom-end", ...menuProps, children: [
|
|
275
277
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Tooltip, { label: text.tooltip, position: "bottom", withArrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
276
278
|
import_core3.ActionIcon,
|
|
@@ -302,10 +304,170 @@ function ThemeMenu({
|
|
|
302
304
|
] });
|
|
303
305
|
}
|
|
304
306
|
|
|
305
|
-
// src/
|
|
306
|
-
var import_react2 = require("react");
|
|
307
|
+
// src/components/ThemeSetting.tsx
|
|
307
308
|
var import_core4 = require("@mantine/core");
|
|
309
|
+
var import_dates = require("@mantine/dates");
|
|
308
310
|
var import_icons_react2 = require("@tabler/icons-react");
|
|
311
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
312
|
+
var DEFAULT_LABELS2 = {
|
|
313
|
+
title: "Appearance",
|
|
314
|
+
subtitle: "Control how the application looks and feels",
|
|
315
|
+
themeMode: "Theme mode",
|
|
316
|
+
themeModeHint: "Auto will switch between light and dark based on time of day",
|
|
317
|
+
currentlyActive: "Currently active:",
|
|
318
|
+
timeBasedSettings: "Time-based settings",
|
|
319
|
+
lightStartTime: "Light theme start time",
|
|
320
|
+
darkStartTime: "Dark theme start time",
|
|
321
|
+
light: "Light",
|
|
322
|
+
dark: "Dark",
|
|
323
|
+
system: "System",
|
|
324
|
+
timeBased: "Time-based"
|
|
325
|
+
};
|
|
326
|
+
var MODE_ICONS2 = {
|
|
327
|
+
light: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconSun, { size: 16 }),
|
|
328
|
+
dark: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconMoon, { size: 16 }),
|
|
329
|
+
auto: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconDeviceLaptop, { size: 16 }),
|
|
330
|
+
"time-based": /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconClock, { size: 16 })
|
|
331
|
+
};
|
|
332
|
+
var MODE_ORDER = ["light", "dark", "auto", "time-based"];
|
|
333
|
+
function ThemeSetting({
|
|
334
|
+
modes = MODE_ORDER,
|
|
335
|
+
labels = {},
|
|
336
|
+
cardProps = {}
|
|
337
|
+
}) {
|
|
338
|
+
const {
|
|
339
|
+
theme,
|
|
340
|
+
timeBasedSettings,
|
|
341
|
+
setTheme,
|
|
342
|
+
setTimeBasedSettings,
|
|
343
|
+
currentTheme
|
|
344
|
+
} = useTheme();
|
|
345
|
+
const text = { ...DEFAULT_LABELS2, ...labels };
|
|
346
|
+
const isTimeBased = theme === "time-based";
|
|
347
|
+
const isDark = currentTheme === "dark";
|
|
348
|
+
const showTimeBased = modes.includes("time-based");
|
|
349
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
350
|
+
import_core4.Card,
|
|
351
|
+
{
|
|
352
|
+
withBorder: true,
|
|
353
|
+
radius: "lg",
|
|
354
|
+
p: "25px",
|
|
355
|
+
bg: isDark ? "dark.8" : "gray.0",
|
|
356
|
+
style: { flex: 1, overflow: "auto", display: "flex", flexDirection: "column" },
|
|
357
|
+
...cardProps,
|
|
358
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Stack, { gap: "lg", style: { flex: 1 }, children: [
|
|
359
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Box, { children: [
|
|
360
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Group, { gap: "xs", children: [
|
|
361
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.ThemeIcon, { variant: "subtle", color: "blue.8", size: "md", radius: "md", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconPalette, { size: 25 }) }),
|
|
362
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Title, { order: 4, children: text.title })
|
|
363
|
+
] }),
|
|
364
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { size: "sm", c: "dimmed", children: text.subtitle })
|
|
365
|
+
] }),
|
|
366
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Divider, {}),
|
|
367
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Box, { children: [
|
|
368
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { fw: 500, mb: 6, children: text.themeMode }),
|
|
369
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
370
|
+
import_core4.SegmentedControl,
|
|
371
|
+
{
|
|
372
|
+
fullWidth: true,
|
|
373
|
+
value: theme,
|
|
374
|
+
radius: "lg",
|
|
375
|
+
color: "teal.8",
|
|
376
|
+
bg: isDark ? "dark.6" : "gray.3",
|
|
377
|
+
onChange: (value) => setTheme(value),
|
|
378
|
+
data: MODE_ORDER.filter((mode) => modes.includes(mode)).map(
|
|
379
|
+
(mode) => ({
|
|
380
|
+
value: mode,
|
|
381
|
+
label: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Group, { gap: 6, children: [
|
|
382
|
+
MODE_ICONS2[mode],
|
|
383
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: mode === "light" ? text.light : mode === "dark" ? text.dark : mode === "auto" ? text.system : text.timeBased })
|
|
384
|
+
] })
|
|
385
|
+
})
|
|
386
|
+
)
|
|
387
|
+
}
|
|
388
|
+
),
|
|
389
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { size: "xs", c: "dimmed", mt: "xs", children: text.themeModeHint }),
|
|
390
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Text, { size: "xs", mt: 4, children: [
|
|
391
|
+
text.currentlyActive,
|
|
392
|
+
" ",
|
|
393
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("b", { children: isDark ? text.dark : text.light })
|
|
394
|
+
] })
|
|
395
|
+
] }),
|
|
396
|
+
showTimeBased && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
397
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Divider, {}),
|
|
398
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
399
|
+
import_core4.Box,
|
|
400
|
+
{
|
|
401
|
+
style: {
|
|
402
|
+
opacity: isTimeBased ? 1 : 0.45,
|
|
403
|
+
pointerEvents: isTimeBased ? "auto" : "none",
|
|
404
|
+
transition: "opacity 150ms ease"
|
|
405
|
+
},
|
|
406
|
+
children: [
|
|
407
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Group, { gap: 6, mb: 6, children: [
|
|
408
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons_react2.IconClock, { size: 16 }),
|
|
409
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { fw: 500, children: text.timeBasedSettings })
|
|
410
|
+
] }),
|
|
411
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Group, { grow: true, children: [
|
|
412
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Box, { children: [
|
|
413
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { size: "sm", mb: 4, children: text.lightStartTime }),
|
|
414
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
415
|
+
import_dates.TimeInput,
|
|
416
|
+
{
|
|
417
|
+
withSeconds: false,
|
|
418
|
+
radius: "13px",
|
|
419
|
+
value: timeBasedSettings.lightStartTime,
|
|
420
|
+
onChange: (event) => setTimeBasedSettings({
|
|
421
|
+
...timeBasedSettings,
|
|
422
|
+
lightStartTime: event.currentTarget.value
|
|
423
|
+
})
|
|
424
|
+
}
|
|
425
|
+
)
|
|
426
|
+
] }),
|
|
427
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Box, { children: [
|
|
428
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_core4.Text, { size: "sm", mb: 4, children: text.darkStartTime }),
|
|
429
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
430
|
+
import_dates.TimeInput,
|
|
431
|
+
{
|
|
432
|
+
withSeconds: false,
|
|
433
|
+
radius: "13px",
|
|
434
|
+
value: timeBasedSettings.darkStartTime,
|
|
435
|
+
onChange: (event) => setTimeBasedSettings({
|
|
436
|
+
...timeBasedSettings,
|
|
437
|
+
darkStartTime: event.currentTarget.value
|
|
438
|
+
})
|
|
439
|
+
}
|
|
440
|
+
)
|
|
441
|
+
] })
|
|
442
|
+
] }),
|
|
443
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_core4.Text, { size: "xs", c: "dimmed", mt: "xs", children: [
|
|
444
|
+
text.light,
|
|
445
|
+
": ",
|
|
446
|
+
timeBasedSettings.lightStartTime,
|
|
447
|
+
" \u2192",
|
|
448
|
+
" ",
|
|
449
|
+
timeBasedSettings.darkStartTime,
|
|
450
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("br", {}),
|
|
451
|
+
text.dark,
|
|
452
|
+
": ",
|
|
453
|
+
timeBasedSettings.darkStartTime,
|
|
454
|
+
" \u2192",
|
|
455
|
+
" ",
|
|
456
|
+
timeBasedSettings.lightStartTime
|
|
457
|
+
] })
|
|
458
|
+
]
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
] })
|
|
462
|
+
] })
|
|
463
|
+
}
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
// src/modals/Information.tsx
|
|
468
|
+
var import_react2 = require("react");
|
|
469
|
+
var import_core5 = require("@mantine/core");
|
|
470
|
+
var import_lucide_react3 = require("lucide-react");
|
|
309
471
|
|
|
310
472
|
// src/utils/commonUtils.ts
|
|
311
473
|
var copyToClipboard = async (text) => {
|
|
@@ -445,58 +607,58 @@ function formatHumanDate(date, options) {
|
|
|
445
607
|
}
|
|
446
608
|
|
|
447
609
|
// src/modals/Information.tsx
|
|
448
|
-
var
|
|
449
|
-
var DEFAULT_TITLE = /* @__PURE__ */ (0,
|
|
450
|
-
/* @__PURE__ */ (0,
|
|
451
|
-
/* @__PURE__ */ (0,
|
|
610
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
611
|
+
var DEFAULT_TITLE = /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Group, { gap: "xs", wrap: "nowrap", children: [
|
|
612
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Cpu, { size: 20 }),
|
|
613
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: "System Information" })
|
|
452
614
|
] });
|
|
453
615
|
function InformationContent({ info }) {
|
|
454
|
-
const colorScheme = (0,
|
|
616
|
+
const colorScheme = (0, import_core5.useComputedColorScheme)();
|
|
455
617
|
const author = info.author ?? DEFAULT_AUTHOR;
|
|
456
618
|
const versionType = info.versionType ?? DEFAULT_VERSION_TYPE;
|
|
457
619
|
const cards = [
|
|
458
620
|
{
|
|
459
|
-
icon: /* @__PURE__ */ (0,
|
|
621
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.User, { size: 18 }),
|
|
460
622
|
label: "Author",
|
|
461
623
|
value: author,
|
|
462
624
|
color: "blue"
|
|
463
625
|
},
|
|
464
626
|
{
|
|
465
|
-
icon: /* @__PURE__ */ (0,
|
|
627
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Award, { size: 18 }),
|
|
466
628
|
label: "License",
|
|
467
629
|
value: info.license ?? DEFAULT_LICENSE,
|
|
468
630
|
color: "orange"
|
|
469
631
|
},
|
|
470
632
|
{
|
|
471
|
-
icon: /* @__PURE__ */ (0,
|
|
633
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.MapPin, { size: 18 }),
|
|
472
634
|
label: "Location",
|
|
473
635
|
value: info.location ?? DEFAULT_LOCATION,
|
|
474
636
|
color: "teal"
|
|
475
637
|
},
|
|
476
638
|
{
|
|
477
|
-
icon: /* @__PURE__ */ (0,
|
|
639
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Tag, { size: 18 }),
|
|
478
640
|
label: "Version Type",
|
|
479
641
|
value: versionType,
|
|
480
642
|
color: "red"
|
|
481
643
|
},
|
|
482
644
|
{
|
|
483
|
-
icon: /* @__PURE__ */ (0,
|
|
645
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Calendar, { size: 18 }),
|
|
484
646
|
label: "Build Time",
|
|
485
647
|
value: info.buildTime !== void 0 ? formatAbsoluteAndRelativeTime(info.buildTime) : UNKNOWN,
|
|
486
648
|
color: "green"
|
|
487
649
|
},
|
|
488
650
|
...info.metadata ?? []
|
|
489
651
|
];
|
|
490
|
-
return /* @__PURE__ */ (0,
|
|
491
|
-
/* @__PURE__ */ (0,
|
|
652
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Stack, { gap: "lg", children: [
|
|
653
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Stack, { gap: "xs", align: "center", children: [
|
|
492
654
|
info.logo,
|
|
493
|
-
/* @__PURE__ */ (0,
|
|
494
|
-
/* @__PURE__ */ (0,
|
|
495
|
-
info.tagline && /* @__PURE__ */ (0,
|
|
655
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Stack, { gap: 2, align: "center", children: [
|
|
656
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Title, { order: 2, children: info.name }),
|
|
657
|
+
info.tagline && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Text, { size: "sm", c: "dimmed", w: 600, ta: "center", children: info.tagline })
|
|
496
658
|
] }),
|
|
497
|
-
/* @__PURE__ */ (0,
|
|
498
|
-
info.version && /* @__PURE__ */ (0,
|
|
499
|
-
|
|
659
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Group, { gap: "xs", children: [
|
|
660
|
+
info.version && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
661
|
+
import_core5.Badge,
|
|
500
662
|
{
|
|
501
663
|
size: "lg",
|
|
502
664
|
color: "blue",
|
|
@@ -510,8 +672,8 @@ function InformationContent({ info }) {
|
|
|
510
672
|
]
|
|
511
673
|
}
|
|
512
674
|
),
|
|
513
|
-
/* @__PURE__ */ (0,
|
|
514
|
-
|
|
675
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
676
|
+
import_core5.Badge,
|
|
515
677
|
{
|
|
516
678
|
size: "lg",
|
|
517
679
|
color: "teal",
|
|
@@ -527,39 +689,39 @@ function InformationContent({ info }) {
|
|
|
527
689
|
)
|
|
528
690
|
] })
|
|
529
691
|
] }),
|
|
530
|
-
/* @__PURE__ */ (0,
|
|
531
|
-
/* @__PURE__ */ (0,
|
|
532
|
-
cards.map((card) => /* @__PURE__ */ (0,
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Divider, { label: "System Information", labelPosition: "center" }),
|
|
693
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.SimpleGrid, { cols: { base: 1, sm: 2 }, children: [
|
|
694
|
+
cards.map((card) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
533
695
|
InfoCard,
|
|
534
696
|
{
|
|
535
|
-
icon: card.icon ?? /* @__PURE__ */ (0,
|
|
697
|
+
icon: card.icon ?? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Award, { size: 18 }),
|
|
536
698
|
label: card.label,
|
|
537
699
|
value: card.value,
|
|
538
700
|
color: card.color ?? "gray"
|
|
539
701
|
},
|
|
540
702
|
card.label
|
|
541
703
|
)),
|
|
542
|
-
/* @__PURE__ */ (0,
|
|
543
|
-
|
|
704
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
705
|
+
import_core5.Paper,
|
|
544
706
|
{
|
|
545
707
|
withBorder: true,
|
|
546
708
|
p: "sm",
|
|
547
709
|
radius: "18px",
|
|
548
710
|
bg: colorScheme === "dark" ? "gray.9" : "gray.0",
|
|
549
|
-
children: /* @__PURE__ */ (0,
|
|
550
|
-
/* @__PURE__ */ (0,
|
|
551
|
-
/* @__PURE__ */ (0,
|
|
552
|
-
/* @__PURE__ */ (0,
|
|
553
|
-
/* @__PURE__ */ (0,
|
|
554
|
-
/* @__PURE__ */ (0,
|
|
711
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Group, { justify: "space-between", wrap: "nowrap", children: [
|
|
712
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Group, { gap: "sm", flex: 1, children: [
|
|
713
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.ThemeIcon, { variant: "light", color: "yellow", size: "lg", radius: "14px", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Hash, { size: 18 }) }),
|
|
714
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Stack, { gap: 2, children: [
|
|
715
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Text, { size: "xs", c: "dimmed", fw: 700, tt: "uppercase", children: "Build ID" }),
|
|
716
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Text, { size: "sm", fw: 500, truncate: true, children: info.buildId ?? UNKNOWN })
|
|
555
717
|
] })
|
|
556
718
|
] }),
|
|
557
|
-
info.buildId && /* @__PURE__ */ (0,
|
|
719
|
+
info.buildId && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CopyBuildIdButton, { buildId: info.buildId })
|
|
558
720
|
] })
|
|
559
721
|
}
|
|
560
722
|
)
|
|
561
723
|
] }),
|
|
562
|
-
/* @__PURE__ */ (0,
|
|
724
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
563
725
|
Footer,
|
|
564
726
|
{
|
|
565
727
|
copyright: info.copyright,
|
|
@@ -576,8 +738,8 @@ function InformationModal({
|
|
|
576
738
|
info,
|
|
577
739
|
title = DEFAULT_TITLE
|
|
578
740
|
}) {
|
|
579
|
-
return /* @__PURE__ */ (0,
|
|
580
|
-
|
|
741
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
742
|
+
import_core5.Modal,
|
|
581
743
|
{
|
|
582
744
|
opened,
|
|
583
745
|
onClose,
|
|
@@ -596,7 +758,7 @@ function InformationModal({
|
|
|
596
758
|
}
|
|
597
759
|
},
|
|
598
760
|
title,
|
|
599
|
-
children: /* @__PURE__ */ (0,
|
|
761
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InformationContent, { info })
|
|
600
762
|
}
|
|
601
763
|
);
|
|
602
764
|
}
|
|
@@ -609,13 +771,13 @@ function CopyBuildIdButton({ buildId }) {
|
|
|
609
771
|
setTimeout(() => setCopied(false), 2e3);
|
|
610
772
|
}
|
|
611
773
|
};
|
|
612
|
-
return /* @__PURE__ */ (0,
|
|
613
|
-
|
|
774
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Tooltip, { label: copied ? "Copied!" : "Copy ID", withArrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
775
|
+
import_core5.ActionIcon,
|
|
614
776
|
{
|
|
615
777
|
variant: "subtle",
|
|
616
778
|
color: copied ? "teal" : "gray",
|
|
617
779
|
onClick: handleCopy,
|
|
618
|
-
children: copied ? /* @__PURE__ */ (0,
|
|
780
|
+
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Check, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react3.Copy, { size: 16 })
|
|
619
781
|
}
|
|
620
782
|
) });
|
|
621
783
|
}
|
|
@@ -625,28 +787,28 @@ function InfoCard({
|
|
|
625
787
|
value,
|
|
626
788
|
color
|
|
627
789
|
}) {
|
|
628
|
-
const colorScheme = (0,
|
|
629
|
-
return /* @__PURE__ */ (0,
|
|
630
|
-
/* @__PURE__ */ (0,
|
|
631
|
-
/* @__PURE__ */ (0,
|
|
632
|
-
/* @__PURE__ */ (0,
|
|
633
|
-
/* @__PURE__ */ (0,
|
|
790
|
+
const colorScheme = (0, import_core5.useComputedColorScheme)();
|
|
791
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Paper, { withBorder: true, p: "md", radius: "18px", h: "100%", bg: colorScheme === "dark" ? "gray.9" : "gray.0", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Group, { gap: "sm", align: "flex-start", children: [
|
|
792
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.ThemeIcon, { color, variant: "light", size: "lg", radius: "14px", children: icon }),
|
|
793
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_core5.Stack, { gap: 2, flex: 1, children: [
|
|
794
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Text, { size: "xs", c: "dimmed", fw: 700, tt: "uppercase", children: label }),
|
|
795
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_core5.Text, { size: "sm", fw: 500, lineClamp: 1, children: value })
|
|
634
796
|
] })
|
|
635
797
|
] }) });
|
|
636
798
|
}
|
|
637
799
|
|
|
638
800
|
// src/pages/NotFound.tsx
|
|
639
|
-
var
|
|
801
|
+
var import_core6 = require("@mantine/core");
|
|
640
802
|
var import_icons_react3 = require("@tabler/icons-react");
|
|
641
|
-
var
|
|
803
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
642
804
|
function NotFound({
|
|
643
805
|
path,
|
|
644
806
|
onSearchClick,
|
|
645
807
|
onHomeClick
|
|
646
808
|
}) {
|
|
647
809
|
const currentPath = path || (typeof window !== "undefined" ? window.location.pathname : "/404");
|
|
648
|
-
return /* @__PURE__ */ (0,
|
|
649
|
-
|
|
810
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
811
|
+
import_core6.Box,
|
|
650
812
|
{
|
|
651
813
|
style: {
|
|
652
814
|
minHeight: "100vh",
|
|
@@ -654,9 +816,9 @@ function NotFound({
|
|
|
654
816
|
alignItems: "center",
|
|
655
817
|
background: "radial-gradient(circle at top left, rgba(34, 139, 230, 0.15), transparent 45%), radial-gradient(circle at bottom right, rgba(34, 211, 238, 0.12), transparent 45%), var(--mantine-color-body)"
|
|
656
818
|
},
|
|
657
|
-
children: /* @__PURE__ */ (0,
|
|
658
|
-
/* @__PURE__ */ (0,
|
|
659
|
-
|
|
819
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Container, { size: "xl", py: 80, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Paper, { radius: "xl", p: 48, withBorder: true, style: { borderColor: "var(--mantine-color-default-border)", textAlign: "center" }, children: [
|
|
820
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
821
|
+
import_core6.Box,
|
|
660
822
|
{
|
|
661
823
|
mx: "auto",
|
|
662
824
|
mb: "xl",
|
|
@@ -670,11 +832,11 @@ function NotFound({
|
|
|
670
832
|
background: "linear-gradient(135deg, var(--mantine-color-blue-6), var(--mantine-color-cyan-6))",
|
|
671
833
|
boxShadow: "0 12px 32px rgba(34, 139, 230, 0.35)"
|
|
672
834
|
},
|
|
673
|
-
children: /* @__PURE__ */ (0,
|
|
835
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react3.IconFileOff, { size: 44, stroke: 1.5, color: "white" })
|
|
674
836
|
}
|
|
675
837
|
),
|
|
676
|
-
/* @__PURE__ */ (0,
|
|
677
|
-
|
|
838
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
839
|
+
import_core6.Text,
|
|
678
840
|
{
|
|
679
841
|
fz: { base: 72, sm: 100 },
|
|
680
842
|
fw: 900,
|
|
@@ -684,33 +846,33 @@ function NotFound({
|
|
|
684
846
|
children: "404"
|
|
685
847
|
}
|
|
686
848
|
),
|
|
687
|
-
/* @__PURE__ */ (0,
|
|
688
|
-
/* @__PURE__ */ (0,
|
|
689
|
-
/* @__PURE__ */ (0,
|
|
690
|
-
/* @__PURE__ */ (0,
|
|
691
|
-
/* @__PURE__ */ (0,
|
|
692
|
-
/* @__PURE__ */ (0,
|
|
693
|
-
|
|
849
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Badge, { variant: "light", color: "blue", size: "lg", mb: "xs", children: "NOT FOUND" }),
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Title, { order: 2, mt: "sm", mb: "xs", children: "Trang kh\xF4ng t\u1ED3n t\u1EA1i" }),
|
|
851
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Text, { c: "dimmed", size: "sm", maw: 440, mx: "auto", children: "Trang ho\u1EB7c \u0111\u01B0\u1EDDng d\u1EABn b\u1EA1n truy c\u1EADp kh\xF4ng t\u1ED3n t\u1EA1i ho\u1EB7c \u0111\xE3 \u0111\u01B0\u1EE3c di chuy\u1EC3n. Vui l\xF2ng ki\u1EC3m tra l\u1EA1i \u0111\u01B0\u1EDDng d\u1EABn ho\u1EB7c quay v\u1EC1 trang ch\u1EE7." }),
|
|
852
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Box, { mt: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Code, { color: "blue", variant: "light", px: "md", py: 6, children: currentPath }) }),
|
|
853
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Group, { gap: "sm", mt: "xl", justify: "center", children: [
|
|
854
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
855
|
+
import_core6.Button,
|
|
694
856
|
{
|
|
695
857
|
variant: "light",
|
|
696
|
-
leftSection: /* @__PURE__ */ (0,
|
|
858
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react3.IconArrowLeft, { size: 16 }),
|
|
697
859
|
onClick: () => window.history.back(),
|
|
698
860
|
children: "Quay l\u1EA1i"
|
|
699
861
|
}
|
|
700
862
|
),
|
|
701
|
-
onSearchClick && /* @__PURE__ */ (0,
|
|
702
|
-
|
|
863
|
+
onSearchClick && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
864
|
+
import_core6.Button,
|
|
703
865
|
{
|
|
704
866
|
variant: "outline",
|
|
705
|
-
leftSection: /* @__PURE__ */ (0,
|
|
867
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react3.IconSearch, { size: 16 }),
|
|
706
868
|
onClick: onSearchClick,
|
|
707
869
|
children: "T\xECm Docs"
|
|
708
870
|
}
|
|
709
871
|
),
|
|
710
|
-
/* @__PURE__ */ (0,
|
|
711
|
-
|
|
872
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
873
|
+
import_core6.Button,
|
|
712
874
|
{
|
|
713
|
-
leftSection: /* @__PURE__ */ (0,
|
|
875
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react3.IconHome, { size: 16 }),
|
|
714
876
|
onClick: onHomeClick || (() => window.location.href = "/"),
|
|
715
877
|
children: "Trang ch\u1EE7"
|
|
716
878
|
}
|
|
@@ -734,6 +896,7 @@ function NotFound({
|
|
|
734
896
|
NotFound,
|
|
735
897
|
ThemeMenu,
|
|
736
898
|
ThemeProvider,
|
|
899
|
+
ThemeSetting,
|
|
737
900
|
UNKNOWN,
|
|
738
901
|
calculateRemainingTime,
|
|
739
902
|
copyToClipboard,
|