@evinvest/uikit 0.5.0 → 0.7.0
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/README.md +10 -2
- package/dist/index.d.ts +65 -40
- package/dist/index.js +218 -218
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/styles/tokens.css +5 -0
package/dist/index.js
CHANGED
|
@@ -1173,168 +1173,6 @@ function Footer({
|
|
|
1173
1173
|
);
|
|
1174
1174
|
}
|
|
1175
1175
|
|
|
1176
|
-
// src/components/header.tsx
|
|
1177
|
-
import * as React23 from "react";
|
|
1178
|
-
import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1179
|
-
function Header({
|
|
1180
|
-
nav,
|
|
1181
|
-
cta,
|
|
1182
|
-
mobileCta,
|
|
1183
|
-
tagline = "Quy Nhon Fund",
|
|
1184
|
-
homeHref = "/",
|
|
1185
|
-
className,
|
|
1186
|
-
linkComponent,
|
|
1187
|
-
variant = "marketing",
|
|
1188
|
-
hideNav = false
|
|
1189
|
-
}) {
|
|
1190
|
-
const L = linkComponent ?? "a";
|
|
1191
|
-
const compact = variant === "compact";
|
|
1192
|
-
const [hasScrolled, setHasScrolled] = React23.useState(false);
|
|
1193
|
-
React23.useEffect(() => {
|
|
1194
|
-
if (compact) return;
|
|
1195
|
-
const handleScroll = () => setHasScrolled(window.scrollY > 50);
|
|
1196
|
-
window.addEventListener("scroll", handleScroll);
|
|
1197
|
-
return () => window.removeEventListener("scroll", handleScroll);
|
|
1198
|
-
}, [compact]);
|
|
1199
|
-
return /* @__PURE__ */ jsx14(
|
|
1200
|
-
"header",
|
|
1201
|
-
{
|
|
1202
|
-
"data-slot": "header",
|
|
1203
|
-
"data-variant": variant,
|
|
1204
|
-
className: cn(
|
|
1205
|
-
"fixed top-0 left-0 w-full z-[60] border-b",
|
|
1206
|
-
compact ? (
|
|
1207
|
-
// Fixed 4rem bar (py-3 + the 40px lockup): opaque by default so app
|
|
1208
|
-
// content beneath it never bleeds through.
|
|
1209
|
-
"h-16 bg-main-black/90 backdrop-blur-md border-main-mist/10"
|
|
1210
|
-
) : cn(
|
|
1211
|
-
"transition-all duration-500",
|
|
1212
|
-
hasScrolled ? "bg-main-black/90 backdrop-blur-md border-main-mist/10 py-4" : "bg-transparent border-transparent py-6"
|
|
1213
|
-
),
|
|
1214
|
-
className
|
|
1215
|
-
),
|
|
1216
|
-
children: /* @__PURE__ */ jsxs4(Container, { className: "flex h-full items-center justify-between gap-4", children: [
|
|
1217
|
-
/* @__PURE__ */ jsxs4(
|
|
1218
|
-
L,
|
|
1219
|
-
{
|
|
1220
|
-
href: homeHref,
|
|
1221
|
-
className: "flex items-center gap-3",
|
|
1222
|
-
"aria-label": "EV Investment \u2014 home",
|
|
1223
|
-
children: [
|
|
1224
|
-
/* @__PURE__ */ jsx14(Logo, { className: "w-10 h-10 text-white" }),
|
|
1225
|
-
/* @__PURE__ */ jsxs4("div", { className: "flex flex-col", children: [
|
|
1226
|
-
/* @__PURE__ */ jsx14("span", { className: "font-serif-display font-bold text-lg tracking-wider text-white", children: "EV INVESTMENT" }),
|
|
1227
|
-
/* @__PURE__ */ jsx14("span", { className: "text-[9px] font-mono-tech tracking-[0.3em] text-main-accent-t1 uppercase", children: tagline })
|
|
1228
|
-
] })
|
|
1229
|
-
]
|
|
1230
|
-
}
|
|
1231
|
-
),
|
|
1232
|
-
!hideNav && /* @__PURE__ */ jsx14("nav", { className: "hidden lg:flex items-center gap-6 font-mono-tech text-xs tracking-widest uppercase", children: nav.map((item) => /* @__PURE__ */ jsx14(
|
|
1233
|
-
L,
|
|
1234
|
-
{
|
|
1235
|
-
href: item.href,
|
|
1236
|
-
className: "text-main-mist/80 hover:text-main-accent-t1 transition-colors",
|
|
1237
|
-
children: item.label
|
|
1238
|
-
},
|
|
1239
|
-
item.href
|
|
1240
|
-
)) }),
|
|
1241
|
-
/* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3", children: [
|
|
1242
|
-
cta,
|
|
1243
|
-
!hideNav && /* @__PURE__ */ jsx14(MobileMenu, { nav, cta: mobileCta ?? cta, linkComponent: L })
|
|
1244
|
-
] })
|
|
1245
|
-
] })
|
|
1246
|
-
}
|
|
1247
|
-
);
|
|
1248
|
-
}
|
|
1249
|
-
function MobileMenu({
|
|
1250
|
-
nav,
|
|
1251
|
-
cta,
|
|
1252
|
-
linkComponent: L
|
|
1253
|
-
}) {
|
|
1254
|
-
const [open, setOpen] = React23.useState(false);
|
|
1255
|
-
React23.useEffect(() => {
|
|
1256
|
-
if (!open) return;
|
|
1257
|
-
document.body.style.overflow = "hidden";
|
|
1258
|
-
const onKeyDown = (e) => {
|
|
1259
|
-
if (e.key === "Escape") setOpen(false);
|
|
1260
|
-
};
|
|
1261
|
-
window.addEventListener("keydown", onKeyDown);
|
|
1262
|
-
return () => {
|
|
1263
|
-
document.body.style.overflow = "";
|
|
1264
|
-
window.removeEventListener("keydown", onKeyDown);
|
|
1265
|
-
};
|
|
1266
|
-
}, [open]);
|
|
1267
|
-
const closeOnNavigation = (e) => {
|
|
1268
|
-
if (e.target.closest("a, button")) setOpen(false);
|
|
1269
|
-
};
|
|
1270
|
-
return /* @__PURE__ */ jsxs4("div", { className: "lg:hidden", children: [
|
|
1271
|
-
/* @__PURE__ */ jsx14(
|
|
1272
|
-
"button",
|
|
1273
|
-
{
|
|
1274
|
-
type: "button",
|
|
1275
|
-
"aria-label": "Open menu",
|
|
1276
|
-
"aria-expanded": open,
|
|
1277
|
-
"aria-haspopup": "menu",
|
|
1278
|
-
onClick: () => setOpen(true),
|
|
1279
|
-
className: "flex size-10 items-center justify-center text-white",
|
|
1280
|
-
children: /* @__PURE__ */ jsx14(
|
|
1281
|
-
"svg",
|
|
1282
|
-
{
|
|
1283
|
-
className: "size-6",
|
|
1284
|
-
viewBox: "0 0 24 24",
|
|
1285
|
-
fill: "none",
|
|
1286
|
-
stroke: "currentColor",
|
|
1287
|
-
strokeWidth: 2,
|
|
1288
|
-
strokeLinecap: "round",
|
|
1289
|
-
strokeLinejoin: "round",
|
|
1290
|
-
children: /* @__PURE__ */ jsx14("path", { d: "M4 6h16M4 12h16M4 18h16" })
|
|
1291
|
-
}
|
|
1292
|
-
)
|
|
1293
|
-
}
|
|
1294
|
-
),
|
|
1295
|
-
open && /* @__PURE__ */ jsx14(Portal, { children: /* @__PURE__ */ jsxs4(
|
|
1296
|
-
"div",
|
|
1297
|
-
{
|
|
1298
|
-
onClick: closeOnNavigation,
|
|
1299
|
-
className: "fixed inset-0 z-[70] flex flex-col bg-main-black px-6 pb-10 duration-200 animate-in fade-in lg:hidden",
|
|
1300
|
-
children: [
|
|
1301
|
-
/* @__PURE__ */ jsx14("div", { className: "flex h-20 shrink-0 items-center justify-end", children: /* @__PURE__ */ jsx14(
|
|
1302
|
-
"button",
|
|
1303
|
-
{
|
|
1304
|
-
type: "button",
|
|
1305
|
-
"aria-label": "Close menu",
|
|
1306
|
-
className: "flex size-10 items-center justify-center text-white",
|
|
1307
|
-
children: /* @__PURE__ */ jsx14(
|
|
1308
|
-
"svg",
|
|
1309
|
-
{
|
|
1310
|
-
className: "size-6",
|
|
1311
|
-
viewBox: "0 0 24 24",
|
|
1312
|
-
fill: "none",
|
|
1313
|
-
stroke: "currentColor",
|
|
1314
|
-
strokeWidth: 2,
|
|
1315
|
-
strokeLinecap: "round",
|
|
1316
|
-
strokeLinejoin: "round",
|
|
1317
|
-
children: /* @__PURE__ */ jsx14("path", { d: "M18 6 6 18M6 6l12 12" })
|
|
1318
|
-
}
|
|
1319
|
-
)
|
|
1320
|
-
}
|
|
1321
|
-
) }),
|
|
1322
|
-
/* @__PURE__ */ jsx14("nav", { className: "flex flex-col font-mono-tech text-sm uppercase tracking-widest duration-300 ease-out animate-in fade-in slide-in-from-top-4", children: nav.map((item) => /* @__PURE__ */ jsx14(
|
|
1323
|
-
L,
|
|
1324
|
-
{
|
|
1325
|
-
href: item.href,
|
|
1326
|
-
className: "border-b border-main-mist/10 py-4 text-main-mist/80 transition-colors hover:text-main-accent-t1",
|
|
1327
|
-
children: item.label
|
|
1328
|
-
},
|
|
1329
|
-
item.href
|
|
1330
|
-
)) }),
|
|
1331
|
-
cta && /* @__PURE__ */ jsx14("div", { className: "mt-8 w-full block", children: cta })
|
|
1332
|
-
]
|
|
1333
|
-
}
|
|
1334
|
-
) })
|
|
1335
|
-
] });
|
|
1336
|
-
}
|
|
1337
|
-
|
|
1338
1176
|
// src/components/input.tsx
|
|
1339
1177
|
import "react";
|
|
1340
1178
|
|
|
@@ -1342,9 +1180,9 @@ import "react";
|
|
|
1342
1180
|
var INPUT_BASE = "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive";
|
|
1343
1181
|
|
|
1344
1182
|
// src/components/input.tsx
|
|
1345
|
-
import { jsx as
|
|
1183
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
1346
1184
|
function Input({ className, type, ...props }) {
|
|
1347
|
-
return /* @__PURE__ */
|
|
1185
|
+
return /* @__PURE__ */ jsx14(
|
|
1348
1186
|
"input",
|
|
1349
1187
|
{
|
|
1350
1188
|
type,
|
|
@@ -1362,9 +1200,9 @@ import "react";
|
|
|
1362
1200
|
var TEXTAREA_BASE = "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm";
|
|
1363
1201
|
|
|
1364
1202
|
// src/components/textarea.tsx
|
|
1365
|
-
import { jsx as
|
|
1203
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
1366
1204
|
function Textarea({ className, ...props }) {
|
|
1367
|
-
return /* @__PURE__ */
|
|
1205
|
+
return /* @__PURE__ */ jsx15("textarea", { "data-slot": "textarea", className: cn(TEXTAREA_BASE, className), ...props });
|
|
1368
1206
|
}
|
|
1369
1207
|
|
|
1370
1208
|
// src/components/input-group.tsx
|
|
@@ -1391,12 +1229,12 @@ var INPUT_GROUP_INPUT_CONTROL = "flex-1 rounded-none border-0 bg-transparent sha
|
|
|
1391
1229
|
var INPUT_GROUP_TEXTAREA_CONTROL = "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0";
|
|
1392
1230
|
|
|
1393
1231
|
// src/components/input-group.tsx
|
|
1394
|
-
import { jsx as
|
|
1232
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
1395
1233
|
function InputGroup({
|
|
1396
1234
|
className,
|
|
1397
1235
|
...props
|
|
1398
1236
|
}) {
|
|
1399
|
-
return /* @__PURE__ */
|
|
1237
|
+
return /* @__PURE__ */ jsx16(
|
|
1400
1238
|
"div",
|
|
1401
1239
|
{
|
|
1402
1240
|
"data-slot": "input-group",
|
|
@@ -1411,7 +1249,7 @@ function InputGroupAddon({
|
|
|
1411
1249
|
align = "inline-start",
|
|
1412
1250
|
...props
|
|
1413
1251
|
}) {
|
|
1414
|
-
return /* @__PURE__ */
|
|
1252
|
+
return /* @__PURE__ */ jsx16(
|
|
1415
1253
|
"div",
|
|
1416
1254
|
{
|
|
1417
1255
|
role: "group",
|
|
@@ -1437,7 +1275,7 @@ function InputGroupButton({
|
|
|
1437
1275
|
size = "xs",
|
|
1438
1276
|
...props
|
|
1439
1277
|
}) {
|
|
1440
|
-
return /* @__PURE__ */
|
|
1278
|
+
return /* @__PURE__ */ jsx16(
|
|
1441
1279
|
Button,
|
|
1442
1280
|
{
|
|
1443
1281
|
type,
|
|
@@ -1456,7 +1294,7 @@ function InputGroupText({
|
|
|
1456
1294
|
className,
|
|
1457
1295
|
...props
|
|
1458
1296
|
}) {
|
|
1459
|
-
return /* @__PURE__ */
|
|
1297
|
+
return /* @__PURE__ */ jsx16(
|
|
1460
1298
|
"span",
|
|
1461
1299
|
{
|
|
1462
1300
|
className: cn(INPUT_GROUP_TEXT, className),
|
|
@@ -1468,7 +1306,7 @@ function InputGroupInput({
|
|
|
1468
1306
|
className,
|
|
1469
1307
|
...props
|
|
1470
1308
|
}) {
|
|
1471
|
-
return /* @__PURE__ */
|
|
1309
|
+
return /* @__PURE__ */ jsx16(
|
|
1472
1310
|
Input,
|
|
1473
1311
|
{
|
|
1474
1312
|
"data-slot": "input-group-control",
|
|
@@ -1481,7 +1319,7 @@ function InputGroupTextarea({
|
|
|
1481
1319
|
className,
|
|
1482
1320
|
...props
|
|
1483
1321
|
}) {
|
|
1484
|
-
return /* @__PURE__ */
|
|
1322
|
+
return /* @__PURE__ */ jsx16(
|
|
1485
1323
|
Textarea,
|
|
1486
1324
|
{
|
|
1487
1325
|
"data-slot": "input-group-control",
|
|
@@ -1505,13 +1343,13 @@ var separatorOrientations = {
|
|
|
1505
1343
|
};
|
|
1506
1344
|
|
|
1507
1345
|
// src/components/separator.tsx
|
|
1508
|
-
import { jsx as
|
|
1346
|
+
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
1509
1347
|
function Separator({
|
|
1510
1348
|
className,
|
|
1511
1349
|
orientation = "horizontal",
|
|
1512
1350
|
...props
|
|
1513
1351
|
}) {
|
|
1514
|
-
return /* @__PURE__ */
|
|
1352
|
+
return /* @__PURE__ */ jsx17(
|
|
1515
1353
|
"div",
|
|
1516
1354
|
{
|
|
1517
1355
|
role: "separator",
|
|
@@ -1554,9 +1392,9 @@ var ITEM_HEADER = "flex basis-full items-center justify-between gap-2";
|
|
|
1554
1392
|
var ITEM_FOOTER = "flex basis-full items-center justify-between gap-2";
|
|
1555
1393
|
|
|
1556
1394
|
// src/components/item.tsx
|
|
1557
|
-
import { jsx as
|
|
1395
|
+
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
1558
1396
|
function ItemGroup({ className, ...props }) {
|
|
1559
|
-
return /* @__PURE__ */
|
|
1397
|
+
return /* @__PURE__ */ jsx18(
|
|
1560
1398
|
"div",
|
|
1561
1399
|
{
|
|
1562
1400
|
role: "list",
|
|
@@ -1570,7 +1408,7 @@ function ItemSeparator({
|
|
|
1570
1408
|
className,
|
|
1571
1409
|
...props
|
|
1572
1410
|
}) {
|
|
1573
|
-
return /* @__PURE__ */
|
|
1411
|
+
return /* @__PURE__ */ jsx18(
|
|
1574
1412
|
Separator,
|
|
1575
1413
|
{
|
|
1576
1414
|
"data-slot": "item-separator",
|
|
@@ -1588,7 +1426,7 @@ function Item({
|
|
|
1588
1426
|
...props
|
|
1589
1427
|
}) {
|
|
1590
1428
|
const Comp = asChild ? Slot : "div";
|
|
1591
|
-
return /* @__PURE__ */
|
|
1429
|
+
return /* @__PURE__ */ jsx18(
|
|
1592
1430
|
Comp,
|
|
1593
1431
|
{
|
|
1594
1432
|
"data-slot": "item",
|
|
@@ -1604,7 +1442,7 @@ function ItemMedia({
|
|
|
1604
1442
|
variant = "default",
|
|
1605
1443
|
...props
|
|
1606
1444
|
}) {
|
|
1607
|
-
return /* @__PURE__ */
|
|
1445
|
+
return /* @__PURE__ */ jsx18(
|
|
1608
1446
|
"div",
|
|
1609
1447
|
{
|
|
1610
1448
|
"data-slot": "item-media",
|
|
@@ -1618,7 +1456,7 @@ function ItemContent({
|
|
|
1618
1456
|
className,
|
|
1619
1457
|
...props
|
|
1620
1458
|
}) {
|
|
1621
|
-
return /* @__PURE__ */
|
|
1459
|
+
return /* @__PURE__ */ jsx18(
|
|
1622
1460
|
"div",
|
|
1623
1461
|
{
|
|
1624
1462
|
"data-slot": "item-content",
|
|
@@ -1628,7 +1466,7 @@ function ItemContent({
|
|
|
1628
1466
|
);
|
|
1629
1467
|
}
|
|
1630
1468
|
function ItemTitle({ className, ...props }) {
|
|
1631
|
-
return /* @__PURE__ */
|
|
1469
|
+
return /* @__PURE__ */ jsx18(
|
|
1632
1470
|
"div",
|
|
1633
1471
|
{
|
|
1634
1472
|
"data-slot": "item-title",
|
|
@@ -1641,7 +1479,7 @@ function ItemDescription({
|
|
|
1641
1479
|
className,
|
|
1642
1480
|
...props
|
|
1643
1481
|
}) {
|
|
1644
|
-
return /* @__PURE__ */
|
|
1482
|
+
return /* @__PURE__ */ jsx18(
|
|
1645
1483
|
"p",
|
|
1646
1484
|
{
|
|
1647
1485
|
"data-slot": "item-description",
|
|
@@ -1654,7 +1492,7 @@ function ItemActions({
|
|
|
1654
1492
|
className,
|
|
1655
1493
|
...props
|
|
1656
1494
|
}) {
|
|
1657
|
-
return /* @__PURE__ */
|
|
1495
|
+
return /* @__PURE__ */ jsx18(
|
|
1658
1496
|
"div",
|
|
1659
1497
|
{
|
|
1660
1498
|
"data-slot": "item-actions",
|
|
@@ -1667,7 +1505,7 @@ function ItemHeader({
|
|
|
1667
1505
|
className,
|
|
1668
1506
|
...props
|
|
1669
1507
|
}) {
|
|
1670
|
-
return /* @__PURE__ */
|
|
1508
|
+
return /* @__PURE__ */ jsx18(
|
|
1671
1509
|
"div",
|
|
1672
1510
|
{
|
|
1673
1511
|
"data-slot": "item-header",
|
|
@@ -1680,7 +1518,7 @@ function ItemFooter({
|
|
|
1680
1518
|
className,
|
|
1681
1519
|
...props
|
|
1682
1520
|
}) {
|
|
1683
|
-
return /* @__PURE__ */
|
|
1521
|
+
return /* @__PURE__ */ jsx18(
|
|
1684
1522
|
"div",
|
|
1685
1523
|
{
|
|
1686
1524
|
"data-slot": "item-footer",
|
|
@@ -1698,9 +1536,9 @@ var KBD_BASE = "bg-muted text-muted-foreground pointer-events-none inline-flex h
|
|
|
1698
1536
|
var KBD_GROUP_BASE = "inline-flex items-center gap-1";
|
|
1699
1537
|
|
|
1700
1538
|
// src/components/kbd.tsx
|
|
1701
|
-
import { jsx as
|
|
1539
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
1702
1540
|
function Kbd({ className, ...props }) {
|
|
1703
|
-
return /* @__PURE__ */
|
|
1541
|
+
return /* @__PURE__ */ jsx19(
|
|
1704
1542
|
"kbd",
|
|
1705
1543
|
{
|
|
1706
1544
|
"data-slot": "kbd",
|
|
@@ -1710,7 +1548,7 @@ function Kbd({ className, ...props }) {
|
|
|
1710
1548
|
);
|
|
1711
1549
|
}
|
|
1712
1550
|
function KbdGroup({ className, ...props }) {
|
|
1713
|
-
return /* @__PURE__ */
|
|
1551
|
+
return /* @__PURE__ */ jsx19(
|
|
1714
1552
|
"kbd",
|
|
1715
1553
|
{
|
|
1716
1554
|
"data-slot": "kbd-group",
|
|
@@ -1722,9 +1560,9 @@ function KbdGroup({ className, ...props }) {
|
|
|
1722
1560
|
|
|
1723
1561
|
// src/components/pagination.tsx
|
|
1724
1562
|
import "react";
|
|
1725
|
-
import { jsx as
|
|
1563
|
+
import { jsx as jsx20, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1726
1564
|
function Pagination({ className, ...props }) {
|
|
1727
|
-
return /* @__PURE__ */
|
|
1565
|
+
return /* @__PURE__ */ jsx20(
|
|
1728
1566
|
"nav",
|
|
1729
1567
|
{
|
|
1730
1568
|
role: "navigation",
|
|
@@ -1739,7 +1577,7 @@ function PaginationContent({
|
|
|
1739
1577
|
className,
|
|
1740
1578
|
...props
|
|
1741
1579
|
}) {
|
|
1742
|
-
return /* @__PURE__ */
|
|
1580
|
+
return /* @__PURE__ */ jsx20(
|
|
1743
1581
|
"ul",
|
|
1744
1582
|
{
|
|
1745
1583
|
"data-slot": "pagination-content",
|
|
@@ -1749,7 +1587,7 @@ function PaginationContent({
|
|
|
1749
1587
|
);
|
|
1750
1588
|
}
|
|
1751
1589
|
function PaginationItem(props) {
|
|
1752
|
-
return /* @__PURE__ */
|
|
1590
|
+
return /* @__PURE__ */ jsx20("li", { "data-slot": "pagination-item", ...props });
|
|
1753
1591
|
}
|
|
1754
1592
|
function PaginationLink({
|
|
1755
1593
|
className,
|
|
@@ -1757,7 +1595,7 @@ function PaginationLink({
|
|
|
1757
1595
|
size = "icon",
|
|
1758
1596
|
...props
|
|
1759
1597
|
}) {
|
|
1760
|
-
return /* @__PURE__ */
|
|
1598
|
+
return /* @__PURE__ */ jsx20(
|
|
1761
1599
|
"a",
|
|
1762
1600
|
{
|
|
1763
1601
|
"aria-current": isActive ? "page" : void 0,
|
|
@@ -1774,9 +1612,9 @@ function PaginationLink({
|
|
|
1774
1612
|
}
|
|
1775
1613
|
);
|
|
1776
1614
|
}
|
|
1777
|
-
var ChevronLeft = () => /* @__PURE__ */
|
|
1778
|
-
var ChevronRight = () => /* @__PURE__ */
|
|
1779
|
-
var MoreHorizontal = () => /* @__PURE__ */
|
|
1615
|
+
var ChevronLeft = () => /* @__PURE__ */ jsx20("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx20("path", { d: "m15 18-6-6 6-6" }) });
|
|
1616
|
+
var ChevronRight = () => /* @__PURE__ */ jsx20("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx20("path", { d: "m9 18 6-6-6-6" }) });
|
|
1617
|
+
var MoreHorizontal = () => /* @__PURE__ */ jsxs4(
|
|
1780
1618
|
"svg",
|
|
1781
1619
|
{
|
|
1782
1620
|
className: "size-4",
|
|
@@ -1785,9 +1623,9 @@ var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
|
|
|
1785
1623
|
stroke: "currentColor",
|
|
1786
1624
|
strokeWidth: 2,
|
|
1787
1625
|
children: [
|
|
1788
|
-
/* @__PURE__ */
|
|
1789
|
-
/* @__PURE__ */
|
|
1790
|
-
/* @__PURE__ */
|
|
1626
|
+
/* @__PURE__ */ jsx20("circle", { cx: "12", cy: "12", r: "1" }),
|
|
1627
|
+
/* @__PURE__ */ jsx20("circle", { cx: "19", cy: "12", r: "1" }),
|
|
1628
|
+
/* @__PURE__ */ jsx20("circle", { cx: "5", cy: "12", r: "1" })
|
|
1791
1629
|
]
|
|
1792
1630
|
}
|
|
1793
1631
|
);
|
|
@@ -1795,7 +1633,7 @@ function PaginationPrevious({
|
|
|
1795
1633
|
className,
|
|
1796
1634
|
...props
|
|
1797
1635
|
}) {
|
|
1798
|
-
return /* @__PURE__ */
|
|
1636
|
+
return /* @__PURE__ */ jsxs4(
|
|
1799
1637
|
PaginationLink,
|
|
1800
1638
|
{
|
|
1801
1639
|
"aria-label": "Go to previous page",
|
|
@@ -1803,8 +1641,8 @@ function PaginationPrevious({
|
|
|
1803
1641
|
className: cn("gap-1 px-2.5 sm:pl-2.5", className),
|
|
1804
1642
|
...props,
|
|
1805
1643
|
children: [
|
|
1806
|
-
/* @__PURE__ */
|
|
1807
|
-
/* @__PURE__ */
|
|
1644
|
+
/* @__PURE__ */ jsx20(ChevronLeft, {}),
|
|
1645
|
+
/* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Previous" })
|
|
1808
1646
|
]
|
|
1809
1647
|
}
|
|
1810
1648
|
);
|
|
@@ -1813,7 +1651,7 @@ function PaginationNext({
|
|
|
1813
1651
|
className,
|
|
1814
1652
|
...props
|
|
1815
1653
|
}) {
|
|
1816
|
-
return /* @__PURE__ */
|
|
1654
|
+
return /* @__PURE__ */ jsxs4(
|
|
1817
1655
|
PaginationLink,
|
|
1818
1656
|
{
|
|
1819
1657
|
"aria-label": "Go to next page",
|
|
@@ -1821,8 +1659,8 @@ function PaginationNext({
|
|
|
1821
1659
|
className: cn("gap-1 px-2.5 sm:pr-2.5", className),
|
|
1822
1660
|
...props,
|
|
1823
1661
|
children: [
|
|
1824
|
-
/* @__PURE__ */
|
|
1825
|
-
/* @__PURE__ */
|
|
1662
|
+
/* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Next" }),
|
|
1663
|
+
/* @__PURE__ */ jsx20(ChevronRight, {})
|
|
1826
1664
|
]
|
|
1827
1665
|
}
|
|
1828
1666
|
);
|
|
@@ -1831,7 +1669,7 @@ function PaginationEllipsis({
|
|
|
1831
1669
|
className,
|
|
1832
1670
|
...props
|
|
1833
1671
|
}) {
|
|
1834
|
-
return /* @__PURE__ */
|
|
1672
|
+
return /* @__PURE__ */ jsxs4(
|
|
1835
1673
|
"span",
|
|
1836
1674
|
{
|
|
1837
1675
|
"aria-hidden": true,
|
|
@@ -1839,8 +1677,8 @@ function PaginationEllipsis({
|
|
|
1839
1677
|
className: cn("flex size-9 items-center justify-center", className),
|
|
1840
1678
|
...props,
|
|
1841
1679
|
children: [
|
|
1842
|
-
/* @__PURE__ */
|
|
1843
|
-
/* @__PURE__ */
|
|
1680
|
+
/* @__PURE__ */ jsx20(MoreHorizontal, {}),
|
|
1681
|
+
/* @__PURE__ */ jsx20("span", { className: "sr-only", children: "More pages" })
|
|
1844
1682
|
]
|
|
1845
1683
|
}
|
|
1846
1684
|
);
|
|
@@ -1854,9 +1692,9 @@ var PROGRESS_TRACK = "bg-primary/20 relative h-2 w-full overflow-hidden rounded-
|
|
|
1854
1692
|
var PROGRESS_INDICATOR = "bg-primary h-full w-full flex-1 transition-all";
|
|
1855
1693
|
|
|
1856
1694
|
// src/components/progress.tsx
|
|
1857
|
-
import { jsx as
|
|
1695
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1858
1696
|
function Progress({ className, value = 0, ...props }) {
|
|
1859
|
-
return /* @__PURE__ */
|
|
1697
|
+
return /* @__PURE__ */ jsx21(
|
|
1860
1698
|
"div",
|
|
1861
1699
|
{
|
|
1862
1700
|
"data-slot": "progress",
|
|
@@ -1866,7 +1704,7 @@ function Progress({ className, value = 0, ...props }) {
|
|
|
1866
1704
|
"aria-valuemax": 100,
|
|
1867
1705
|
className: cn(PROGRESS_TRACK, className),
|
|
1868
1706
|
...props,
|
|
1869
|
-
children: /* @__PURE__ */
|
|
1707
|
+
children: /* @__PURE__ */ jsx21(
|
|
1870
1708
|
"div",
|
|
1871
1709
|
{
|
|
1872
1710
|
"data-slot": "progress-indicator",
|
|
@@ -1885,9 +1723,9 @@ import "react";
|
|
|
1885
1723
|
var SKELETON_BASE = "bg-accent animate-pulse rounded-md";
|
|
1886
1724
|
|
|
1887
1725
|
// src/components/skeleton.tsx
|
|
1888
|
-
import { jsx as
|
|
1726
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1889
1727
|
function Skeleton({ className, ...props }) {
|
|
1890
|
-
return /* @__PURE__ */
|
|
1728
|
+
return /* @__PURE__ */ jsx22(
|
|
1891
1729
|
"div",
|
|
1892
1730
|
{
|
|
1893
1731
|
"data-slot": "skeleton",
|
|
@@ -1899,9 +1737,9 @@ function Skeleton({ className, ...props }) {
|
|
|
1899
1737
|
|
|
1900
1738
|
// src/components/spinner.tsx
|
|
1901
1739
|
import "react";
|
|
1902
|
-
import { jsx as
|
|
1740
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
1903
1741
|
function Spinner({ className, ...props }) {
|
|
1904
|
-
return /* @__PURE__ */
|
|
1742
|
+
return /* @__PURE__ */ jsx23(
|
|
1905
1743
|
"svg",
|
|
1906
1744
|
{
|
|
1907
1745
|
role: "status",
|
|
@@ -1912,7 +1750,165 @@ function Spinner({ className, ...props }) {
|
|
|
1912
1750
|
stroke: "currentColor",
|
|
1913
1751
|
strokeWidth: 2,
|
|
1914
1752
|
...props,
|
|
1915
|
-
children: /* @__PURE__ */
|
|
1753
|
+
children: /* @__PURE__ */ jsx23("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
|
|
1754
|
+
}
|
|
1755
|
+
);
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
// src/components/status-screen.tsx
|
|
1759
|
+
import "react";
|
|
1760
|
+
import { jsx as jsx24, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1761
|
+
var ACCENT_TEXT = {
|
|
1762
|
+
teal: "text-main-accent-t1",
|
|
1763
|
+
gold: "text-main-accent-t3",
|
|
1764
|
+
red: "text-destructive",
|
|
1765
|
+
blue: "text-[#5e9be6]"
|
|
1766
|
+
};
|
|
1767
|
+
var BTN_BASE = "inline-flex items-center justify-center rounded-md px-6 py-3.5 font-mono-tech text-xs uppercase tracking-widest transition-colors";
|
|
1768
|
+
var BTN_FILLED = {
|
|
1769
|
+
teal: "bg-main-accent-t1 text-main-black hover:bg-main-accent-t1/90",
|
|
1770
|
+
gold: "bg-main-accent-t3 text-main-black hover:bg-main-accent-t3/90",
|
|
1771
|
+
red: "bg-destructive text-white hover:bg-destructive/90",
|
|
1772
|
+
blue: "bg-[#5e9be6] text-main-black hover:bg-[#5e9be6]/90"
|
|
1773
|
+
};
|
|
1774
|
+
var BTN_OUTLINE = {
|
|
1775
|
+
teal: "border border-main-accent-t1/40 text-main-accent-t1 hover:bg-main-accent-t1/10",
|
|
1776
|
+
gold: "border border-main-accent-t3/40 text-main-accent-t3 hover:bg-main-accent-t3/10",
|
|
1777
|
+
red: "border border-destructive/40 text-destructive hover:bg-destructive/10",
|
|
1778
|
+
blue: "border border-[#5e9be6]/40 text-[#5e9be6] hover:bg-[#5e9be6]/10"
|
|
1779
|
+
};
|
|
1780
|
+
function statusButtonClass(accent, variant) {
|
|
1781
|
+
return cn(BTN_BASE, variant === "filled" ? BTN_FILLED[accent] : BTN_OUTLINE[accent]);
|
|
1782
|
+
}
|
|
1783
|
+
function LogoMark({ className }) {
|
|
1784
|
+
return /* @__PURE__ */ jsx24("svg", { viewBox: "0 0 140 48", className, "aria-hidden": true, children: /* @__PURE__ */ jsxs5("g", { fill: "currentColor", children: [
|
|
1785
|
+
/* @__PURE__ */ jsx24("path", { d: "M0.0437012 47.3326L50.9499 40.5805V22.3378L56.4881 23.6408V37.9071L59.1984 37.5005V24.1147L64.6189 25.1808V37.0269L67.2113 36.553V22.1009L56.606 17.481L43.408 21.864V36.553L0.0437012 47.3326Z" }),
|
|
1786
|
+
/* @__PURE__ */ jsx24("path", { d: "M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z" }),
|
|
1787
|
+
/* @__PURE__ */ jsx24("path", { d: "M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z" }),
|
|
1788
|
+
/* @__PURE__ */ jsx24("path", { d: "M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z" })
|
|
1789
|
+
] }) });
|
|
1790
|
+
}
|
|
1791
|
+
function ArrowLeftIcon({ className }) {
|
|
1792
|
+
return /* @__PURE__ */ jsxs5(
|
|
1793
|
+
"svg",
|
|
1794
|
+
{
|
|
1795
|
+
className,
|
|
1796
|
+
viewBox: "0 0 24 24",
|
|
1797
|
+
fill: "none",
|
|
1798
|
+
stroke: "currentColor",
|
|
1799
|
+
strokeWidth: 2,
|
|
1800
|
+
strokeLinecap: "round",
|
|
1801
|
+
strokeLinejoin: "round",
|
|
1802
|
+
"aria-hidden": true,
|
|
1803
|
+
children: [
|
|
1804
|
+
/* @__PURE__ */ jsx24("path", { d: "m12 19-7-7 7-7" }),
|
|
1805
|
+
/* @__PURE__ */ jsx24("path", { d: "M19 12H5" })
|
|
1806
|
+
]
|
|
1807
|
+
}
|
|
1808
|
+
);
|
|
1809
|
+
}
|
|
1810
|
+
function StatusScreen({
|
|
1811
|
+
accent,
|
|
1812
|
+
eyebrow,
|
|
1813
|
+
code,
|
|
1814
|
+
headlineLead,
|
|
1815
|
+
headlineAccent,
|
|
1816
|
+
headlineTail = ".",
|
|
1817
|
+
subtext,
|
|
1818
|
+
links,
|
|
1819
|
+
children,
|
|
1820
|
+
linkComponent
|
|
1821
|
+
}) {
|
|
1822
|
+
const L = linkComponent ?? "a";
|
|
1823
|
+
const accentText = ACCENT_TEXT[accent];
|
|
1824
|
+
return /* @__PURE__ */ jsxs5("section", { className: "relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-main-black px-6 py-32 text-center", children: [
|
|
1825
|
+
/* @__PURE__ */ jsx24(
|
|
1826
|
+
"div",
|
|
1827
|
+
{
|
|
1828
|
+
"aria-hidden": true,
|
|
1829
|
+
className: cn(
|
|
1830
|
+
"pointer-events-none absolute inset-0 opacity-[0.07] [background:radial-gradient(55%_45%_at_50%_30%,currentColor,transparent_70%)]",
|
|
1831
|
+
accentText
|
|
1832
|
+
)
|
|
1833
|
+
}
|
|
1834
|
+
),
|
|
1835
|
+
/* @__PURE__ */ jsxs5("div", { className: "relative z-10 flex w-full max-w-2xl flex-col items-center", children: [
|
|
1836
|
+
/* @__PURE__ */ jsx24(LogoMark, { className: cn("mb-7 h-10 w-auto", accentText) }),
|
|
1837
|
+
/* @__PURE__ */ jsx24("p", { className: cn("mb-6 font-mono-tech text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
|
|
1838
|
+
/* @__PURE__ */ jsx24("p", { className: cn("font-serif-display text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
|
|
1839
|
+
/* @__PURE__ */ jsxs5("h1", { className: "mt-4 font-serif-display text-3xl font-light leading-tight text-white sm:text-5xl", children: [
|
|
1840
|
+
headlineLead,
|
|
1841
|
+
/* @__PURE__ */ jsx24("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
|
|
1842
|
+
headlineTail
|
|
1843
|
+
] }),
|
|
1844
|
+
/* @__PURE__ */ jsx24("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-main-mist/60 sm:text-base", children: subtext }),
|
|
1845
|
+
/* @__PURE__ */ jsxs5("div", { className: "mt-9 flex flex-col items-center gap-3 sm:flex-row", children: [
|
|
1846
|
+
children,
|
|
1847
|
+
links?.map((link) => /* @__PURE__ */ jsxs5(L, { href: link.href, className: statusButtonClass(accent, link.variant ?? "filled"), children: [
|
|
1848
|
+
link.leadingArrow ? /* @__PURE__ */ jsx24(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
|
|
1849
|
+
link.label
|
|
1850
|
+
] }, link.label))
|
|
1851
|
+
] })
|
|
1852
|
+
] })
|
|
1853
|
+
] });
|
|
1854
|
+
}
|
|
1855
|
+
function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
|
|
1856
|
+
return /* @__PURE__ */ jsx24(
|
|
1857
|
+
StatusScreen,
|
|
1858
|
+
{
|
|
1859
|
+
accent: "teal",
|
|
1860
|
+
eyebrow: "Page not found",
|
|
1861
|
+
code: "404",
|
|
1862
|
+
headlineLead: "You've reached ",
|
|
1863
|
+
headlineAccent: "open water",
|
|
1864
|
+
subtext: "The page you're looking for has drifted off our coastline \u2014 moved, renamed, or never charted. Let's get you back to shore.",
|
|
1865
|
+
linkComponent,
|
|
1866
|
+
links: [
|
|
1867
|
+
{ label: "Back to home", href: homeHref, leadingArrow: true },
|
|
1868
|
+
{ label: "Contact the team", href: contactHref, variant: "outline" }
|
|
1869
|
+
]
|
|
1870
|
+
}
|
|
1871
|
+
);
|
|
1872
|
+
}
|
|
1873
|
+
function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
|
|
1874
|
+
return /* @__PURE__ */ jsx24(
|
|
1875
|
+
StatusScreen,
|
|
1876
|
+
{
|
|
1877
|
+
accent: "gold",
|
|
1878
|
+
eyebrow: "Access forbidden",
|
|
1879
|
+
code: "403",
|
|
1880
|
+
headlineLead: "This harbour is ",
|
|
1881
|
+
headlineAccent: "private",
|
|
1882
|
+
subtext: "You don't have the credentials to view this page. If you believe you should, our team can open the right doors.",
|
|
1883
|
+
linkComponent,
|
|
1884
|
+
links: [
|
|
1885
|
+
{ label: "Back to home", href: homeHref, leadingArrow: true },
|
|
1886
|
+
{ label: "Request access", href: contactHref, variant: "outline" }
|
|
1887
|
+
]
|
|
1888
|
+
}
|
|
1889
|
+
);
|
|
1890
|
+
}
|
|
1891
|
+
function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
|
|
1892
|
+
return /* @__PURE__ */ jsx24(
|
|
1893
|
+
StatusScreen,
|
|
1894
|
+
{
|
|
1895
|
+
accent: "red",
|
|
1896
|
+
eyebrow: "Server error",
|
|
1897
|
+
code: "500",
|
|
1898
|
+
headlineLead: "Our systems are ",
|
|
1899
|
+
headlineAccent: "recalibrating",
|
|
1900
|
+
subtext: "Something broke on our end \u2014 not yours. We've been alerted and are restoring service. Please try again in a moment.",
|
|
1901
|
+
linkComponent,
|
|
1902
|
+
links: [{ label: "Back to home", href: homeHref, variant: "outline", leadingArrow: true }],
|
|
1903
|
+
children: /* @__PURE__ */ jsx24(
|
|
1904
|
+
"button",
|
|
1905
|
+
{
|
|
1906
|
+
type: "button",
|
|
1907
|
+
className: statusButtonClass("red", "filled"),
|
|
1908
|
+
onClick: () => reset ? reset() : window.location.reload(),
|
|
1909
|
+
children: "Try again"
|
|
1910
|
+
}
|
|
1911
|
+
)
|
|
1916
1912
|
}
|
|
1917
1913
|
);
|
|
1918
1914
|
}
|
|
@@ -7212,13 +7208,13 @@ export {
|
|
|
7212
7208
|
FieldSet,
|
|
7213
7209
|
FieldTitle,
|
|
7214
7210
|
Footer,
|
|
7211
|
+
Forbidden,
|
|
7215
7212
|
Form,
|
|
7216
7213
|
FormControl,
|
|
7217
7214
|
FormDescription,
|
|
7218
7215
|
FormItem,
|
|
7219
7216
|
FormLabel,
|
|
7220
7217
|
FormMessage,
|
|
7221
|
-
Header,
|
|
7222
7218
|
HoverCard,
|
|
7223
7219
|
HoverCardContent,
|
|
7224
7220
|
HoverCardTrigger,
|
|
@@ -7270,6 +7266,7 @@ export {
|
|
|
7270
7266
|
NavigationMenuList,
|
|
7271
7267
|
NavigationMenuTrigger,
|
|
7272
7268
|
NavigationMenuViewport,
|
|
7269
|
+
NotFound,
|
|
7273
7270
|
Pagination,
|
|
7274
7271
|
PaginationContent,
|
|
7275
7272
|
PaginationEllipsis,
|
|
@@ -7299,6 +7296,7 @@ export {
|
|
|
7299
7296
|
SelectTrigger,
|
|
7300
7297
|
SelectValue,
|
|
7301
7298
|
Separator,
|
|
7299
|
+
ServerError,
|
|
7302
7300
|
Sheet,
|
|
7303
7301
|
SheetClose,
|
|
7304
7302
|
SheetContent,
|
|
@@ -7327,6 +7325,7 @@ export {
|
|
|
7327
7325
|
Slider,
|
|
7328
7326
|
Slot,
|
|
7329
7327
|
Spinner,
|
|
7328
|
+
StatusScreen,
|
|
7330
7329
|
Switch,
|
|
7331
7330
|
Table,
|
|
7332
7331
|
TableBody,
|
|
@@ -7353,6 +7352,7 @@ export {
|
|
|
7353
7352
|
cn,
|
|
7354
7353
|
mergeRefs,
|
|
7355
7354
|
navigationMenuTriggerStyle,
|
|
7355
|
+
statusButtonClass,
|
|
7356
7356
|
toast,
|
|
7357
7357
|
toggleVariants,
|
|
7358
7358
|
useControllableState,
|