@ship-it-ui/shipit 0.0.15 → 0.0.16
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 +191 -37
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +109 -2
- package/dist/index.d.ts +109 -2
- package/dist/index.js +190 -29
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -55,7 +55,7 @@ __export(index_exports, {
|
|
|
55
55
|
SuggestionChip: () => SuggestionChip,
|
|
56
56
|
Testimonial: () => Testimonial,
|
|
57
57
|
ToolCallCard: () => ToolCallCard,
|
|
58
|
-
cn: () =>
|
|
58
|
+
cn: () => import_ui31.cn,
|
|
59
59
|
entityColumn: () => entityColumn,
|
|
60
60
|
entityTypeColumn: () => entityTypeColumn,
|
|
61
61
|
formatAge: () => formatAge,
|
|
@@ -66,7 +66,7 @@ __export(index_exports, {
|
|
|
66
66
|
resetEntityTypeRegistry: () => resetEntityTypeRegistry
|
|
67
67
|
});
|
|
68
68
|
module.exports = __toCommonJS(index_exports);
|
|
69
|
-
var
|
|
69
|
+
var import_ui31 = require("@ship-it-ui/ui");
|
|
70
70
|
|
|
71
71
|
// src/ai/AskBar.tsx
|
|
72
72
|
var import_ui = require("@ship-it-ui/ui");
|
|
@@ -1254,7 +1254,7 @@ PathOverlay.displayName = "PathOverlay";
|
|
|
1254
1254
|
var import_ui22 = require("@ship-it-ui/ui");
|
|
1255
1255
|
var import_react19 = require("react");
|
|
1256
1256
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1257
|
-
var CTAStrip = (0, import_react19.forwardRef)(function CTAStrip2({ title, description, actions, className, ...props }, ref) {
|
|
1257
|
+
var CTAStrip = (0, import_react19.forwardRef)(function CTAStrip2({ title, titleAs = "h2", description, actions, className, ...props }, ref) {
|
|
1258
1258
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1259
1259
|
"section",
|
|
1260
1260
|
{
|
|
@@ -1266,7 +1266,7 @@ var CTAStrip = (0, import_react19.forwardRef)(function CTAStrip2({ title, descri
|
|
|
1266
1266
|
),
|
|
1267
1267
|
...props,
|
|
1268
1268
|
children: [
|
|
1269
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1269
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_ui22.Heading, { as: titleAs, className: "m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]", children: title }),
|
|
1270
1270
|
description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-text-muted m-0 mb-5 text-[13px]", children: description }),
|
|
1271
1271
|
actions && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex flex-wrap justify-center gap-2", children: actions })
|
|
1272
1272
|
]
|
|
@@ -1284,7 +1284,7 @@ var colsClass = {
|
|
|
1284
1284
|
3: "md:grid-cols-3",
|
|
1285
1285
|
4: "md:grid-cols-2 lg:grid-cols-4"
|
|
1286
1286
|
};
|
|
1287
|
-
var FeatureGrid = (0, import_react20.forwardRef)(function FeatureGrid2({ features, columns = 3, className, ...props }, ref) {
|
|
1287
|
+
var FeatureGrid = (0, import_react20.forwardRef)(function FeatureGrid2({ features, columns = 3, featureTitleAs = "h3", className, ...props }, ref) {
|
|
1288
1288
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1289
1289
|
"div",
|
|
1290
1290
|
{
|
|
@@ -1293,7 +1293,7 @@ var FeatureGrid = (0, import_react20.forwardRef)(function FeatureGrid2({ feature
|
|
|
1293
1293
|
...props,
|
|
1294
1294
|
children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "rounded-base border-border bg-panel border p-5", children: [
|
|
1295
1295
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-hidden": true, className: "text-accent mb-3 text-[22px]", children: f.glyph }),
|
|
1296
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1296
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_ui23.Heading, { as: featureTitleAs, className: "mb-[6px] text-[14px] font-medium", children: f.title }),
|
|
1297
1297
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-text-muted text-[12px] leading-[1.55]", children: f.description })
|
|
1298
1298
|
] }, i))
|
|
1299
1299
|
}
|
|
@@ -1305,21 +1305,16 @@ FeatureGrid.displayName = "FeatureGrid";
|
|
|
1305
1305
|
var import_ui24 = require("@ship-it-ui/ui");
|
|
1306
1306
|
var import_react21 = require("react");
|
|
1307
1307
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1308
|
-
var Footer = (0, import_react21.forwardRef)(function Footer2({ brand, columns, copyright, closing, className, ...props }, ref) {
|
|
1308
|
+
var Footer = (0, import_react21.forwardRef)(function Footer2({ brand, columns, copyright, closing, address, className, ...props }, ref) {
|
|
1309
1309
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("footer", { ref, className: (0, import_ui24.cn)("px-7 py-7", className), ...props, children: [
|
|
1310
1310
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "mb-7 flex flex-wrap gap-8", children: [
|
|
1311
|
-
brand && /* @__PURE__ */ (0, import_jsx_runtime21.
|
|
1311
|
+
brand && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
1312
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { children: brand }),
|
|
1313
|
+
address && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("address", { className: "text-text-dim text-[12px] not-italic", children: address })
|
|
1314
|
+
] }),
|
|
1312
1315
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]", children: columns.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex flex-col gap-[6px]", children: [
|
|
1313
1316
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase", children: col.heading }),
|
|
1314
|
-
col.links.map((link, j) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1315
|
-
"a",
|
|
1316
|
-
{
|
|
1317
|
-
href: link.href,
|
|
1318
|
-
className: "text-text-muted hover:text-text no-underline",
|
|
1319
|
-
children: link.label
|
|
1320
|
-
},
|
|
1321
|
-
j
|
|
1322
|
-
))
|
|
1317
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "m-0 flex list-none flex-col gap-[6px] p-0", children: col.links.map((link, j) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("a", { href: link.href, className: "text-text-muted hover:text-text no-underline", children: link.label }) }, j)) })
|
|
1323
1318
|
] }, i)) })
|
|
1324
1319
|
] }),
|
|
1325
1320
|
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "border-border text-text-dim flex border-t pt-4 font-mono text-[11px]", children: [
|
|
@@ -1334,7 +1329,7 @@ Footer.displayName = "Footer";
|
|
|
1334
1329
|
var import_ui25 = require("@ship-it-ui/ui");
|
|
1335
1330
|
var import_react22 = require("react");
|
|
1336
1331
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1337
|
-
var Hero = (0, import_react22.forwardRef)(function Hero2({ eyebrow, title, description, actions, visual, className, ...props }, ref) {
|
|
1332
|
+
var Hero = (0, import_react22.forwardRef)(function Hero2({ eyebrow, title, titleAs = "h1", description, actions, visual, className, ...props }, ref) {
|
|
1338
1333
|
const hasVisual = visual != null;
|
|
1339
1334
|
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
1340
1335
|
"section",
|
|
@@ -1350,8 +1345,9 @@ var Hero = (0, import_react22.forwardRef)(function Hero2({ eyebrow, title, descr
|
|
|
1350
1345
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: (0, import_ui25.cn)("max-w-[680px]", !hasVisual && "mx-auto text-center"), children: [
|
|
1351
1346
|
eyebrow,
|
|
1352
1347
|
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1353
|
-
|
|
1348
|
+
import_ui25.Heading,
|
|
1354
1349
|
{
|
|
1350
|
+
as: titleAs,
|
|
1355
1351
|
className: (0, import_ui25.cn)(
|
|
1356
1352
|
"mb-4 text-[44px] leading-[1.05] font-medium tracking-[-1.6px] md:text-[56px]",
|
|
1357
1353
|
eyebrow && "mt-5"
|
|
@@ -1373,7 +1369,73 @@ Hero.displayName = "Hero";
|
|
|
1373
1369
|
var import_ui26 = require("@ship-it-ui/ui");
|
|
1374
1370
|
var import_react23 = require("react");
|
|
1375
1371
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1376
|
-
|
|
1372
|
+
function parsePrice(priceAmount, price) {
|
|
1373
|
+
if (typeof priceAmount === "number" && Number.isFinite(priceAmount)) {
|
|
1374
|
+
return priceAmount;
|
|
1375
|
+
}
|
|
1376
|
+
const text = (0, import_ui26.nodeToString)(price);
|
|
1377
|
+
if (!text) return null;
|
|
1378
|
+
const cleaned = text.replace(/[^\d.]/g, "");
|
|
1379
|
+
if (!cleaned) return null;
|
|
1380
|
+
const n = Number(cleaned);
|
|
1381
|
+
return Number.isFinite(n) ? n : null;
|
|
1382
|
+
}
|
|
1383
|
+
function buildOfferSchema(props) {
|
|
1384
|
+
if (!props.priceCurrency) return null;
|
|
1385
|
+
const name = props.tierName ?? (0, import_ui26.nodeToString)(props.tier);
|
|
1386
|
+
if (!name) return null;
|
|
1387
|
+
const numericPrice = parsePrice(props.priceAmount, props.price);
|
|
1388
|
+
if (numericPrice === null) return null;
|
|
1389
|
+
const schema = {
|
|
1390
|
+
"@context": "https://schema.org",
|
|
1391
|
+
"@type": "Offer",
|
|
1392
|
+
name,
|
|
1393
|
+
price: numericPrice,
|
|
1394
|
+
priceCurrency: props.priceCurrency
|
|
1395
|
+
};
|
|
1396
|
+
const description = props.descriptionText ?? (0, import_ui26.nodeToString)(props.description);
|
|
1397
|
+
if (description) {
|
|
1398
|
+
schema.description = description;
|
|
1399
|
+
}
|
|
1400
|
+
if (props.availability) {
|
|
1401
|
+
schema.availability = props.availability;
|
|
1402
|
+
}
|
|
1403
|
+
if (props.url) {
|
|
1404
|
+
schema.url = props.url;
|
|
1405
|
+
}
|
|
1406
|
+
return schema;
|
|
1407
|
+
}
|
|
1408
|
+
var PricingCard = (0, import_react23.forwardRef)(function PricingCard2({
|
|
1409
|
+
tier,
|
|
1410
|
+
price,
|
|
1411
|
+
priceUnit,
|
|
1412
|
+
description,
|
|
1413
|
+
features,
|
|
1414
|
+
action,
|
|
1415
|
+
featured,
|
|
1416
|
+
tierAs = "h3",
|
|
1417
|
+
priceCurrency,
|
|
1418
|
+
priceAmount,
|
|
1419
|
+
availability,
|
|
1420
|
+
url,
|
|
1421
|
+
tierName,
|
|
1422
|
+
descriptionText,
|
|
1423
|
+
noStructuredData,
|
|
1424
|
+
className,
|
|
1425
|
+
...props
|
|
1426
|
+
}, ref) {
|
|
1427
|
+
const structuredData = !noStructuredData ? buildOfferSchema({
|
|
1428
|
+
tier,
|
|
1429
|
+
price,
|
|
1430
|
+
features,
|
|
1431
|
+
priceCurrency,
|
|
1432
|
+
priceAmount,
|
|
1433
|
+
availability,
|
|
1434
|
+
url,
|
|
1435
|
+
tierName,
|
|
1436
|
+
description,
|
|
1437
|
+
descriptionText
|
|
1438
|
+
}) : null;
|
|
1377
1439
|
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
1378
1440
|
"div",
|
|
1379
1441
|
{
|
|
@@ -1385,9 +1447,10 @@ var PricingCard = (0, import_react23.forwardRef)(function PricingCard2({ tier, p
|
|
|
1385
1447
|
),
|
|
1386
1448
|
...props,
|
|
1387
1449
|
children: [
|
|
1450
|
+
structuredData && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_ui26.JsonLd, { data: structuredData }),
|
|
1388
1451
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
|
|
1389
1452
|
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "mb-1 flex flex-wrap items-center gap-2", children: [
|
|
1390
|
-
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1453
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_ui26.Heading, { as: tierAs, className: "text-[14px] font-medium", children: tier }),
|
|
1391
1454
|
featured && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]", children: "recommended" })
|
|
1392
1455
|
] }),
|
|
1393
1456
|
description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-text-muted text-[12px]", children: description })
|
|
@@ -1409,17 +1472,71 @@ PricingCard.displayName = "PricingCard";
|
|
|
1409
1472
|
|
|
1410
1473
|
// src/marketing/Testimonial.tsx
|
|
1411
1474
|
var import_ui27 = require("@ship-it-ui/ui");
|
|
1412
|
-
var import_ui28 = require("@ship-it-ui/ui");
|
|
1413
1475
|
var import_react24 = require("react");
|
|
1414
1476
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1415
|
-
|
|
1477
|
+
function buildTestimonialSchema(props) {
|
|
1478
|
+
const authorName = props.authorName ?? (0, import_ui27.nodeToString)(props.author);
|
|
1479
|
+
const reviewBody = props.quoteText ?? (0, import_ui27.nodeToString)(props.quote);
|
|
1480
|
+
if (!authorName || !reviewBody) return null;
|
|
1481
|
+
const schema = {
|
|
1482
|
+
"@context": "https://schema.org",
|
|
1483
|
+
"@type": "Review",
|
|
1484
|
+
author: { "@type": "Person", name: authorName },
|
|
1485
|
+
reviewBody
|
|
1486
|
+
};
|
|
1487
|
+
const jobTitle = props.authorJobTitle ?? (0, import_ui27.nodeToString)(props.role);
|
|
1488
|
+
if (jobTitle) {
|
|
1489
|
+
schema.author.jobTitle = jobTitle;
|
|
1490
|
+
}
|
|
1491
|
+
if (typeof props.rating === "number") {
|
|
1492
|
+
schema.reviewRating = {
|
|
1493
|
+
"@type": "Rating",
|
|
1494
|
+
ratingValue: props.rating,
|
|
1495
|
+
bestRating: 5
|
|
1496
|
+
};
|
|
1497
|
+
}
|
|
1498
|
+
if (props.itemReviewedName) {
|
|
1499
|
+
schema.itemReviewed = { "@type": "Thing", name: props.itemReviewedName };
|
|
1500
|
+
if (props.url) {
|
|
1501
|
+
schema.itemReviewed.url = props.url;
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
return schema;
|
|
1505
|
+
}
|
|
1506
|
+
var Testimonial = (0, import_react24.forwardRef)(function Testimonial2({
|
|
1507
|
+
quote,
|
|
1508
|
+
author,
|
|
1509
|
+
role,
|
|
1510
|
+
avatar,
|
|
1511
|
+
quoteText,
|
|
1512
|
+
authorName,
|
|
1513
|
+
authorJobTitle,
|
|
1514
|
+
rating,
|
|
1515
|
+
itemReviewedName,
|
|
1516
|
+
url,
|
|
1517
|
+
noStructuredData,
|
|
1518
|
+
className,
|
|
1519
|
+
...props
|
|
1520
|
+
}, ref) {
|
|
1521
|
+
const structuredData = !noStructuredData ? buildTestimonialSchema({
|
|
1522
|
+
quote,
|
|
1523
|
+
author,
|
|
1524
|
+
role,
|
|
1525
|
+
quoteText,
|
|
1526
|
+
authorName,
|
|
1527
|
+
authorJobTitle,
|
|
1528
|
+
rating,
|
|
1529
|
+
itemReviewedName,
|
|
1530
|
+
url
|
|
1531
|
+
}) : null;
|
|
1416
1532
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
1417
1533
|
"figure",
|
|
1418
1534
|
{
|
|
1419
1535
|
ref,
|
|
1420
|
-
className: (0,
|
|
1536
|
+
className: (0, import_ui27.cn)("mx-auto max-w-[620px] px-6 py-10 text-center", className),
|
|
1421
1537
|
...props,
|
|
1422
1538
|
children: [
|
|
1539
|
+
structuredData && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_ui27.JsonLd, { data: structuredData }),
|
|
1423
1540
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { "aria-hidden": true, className: "text-accent mb-4 text-[40px] leading-none", children: "\u201C" }),
|
|
1424
1541
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("blockquote", { className: "m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]", children: quote }),
|
|
1425
1542
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("figcaption", { className: "mt-5 flex items-center justify-center gap-[10px]", children: [
|
|
@@ -1437,9 +1554,24 @@ Testimonial.displayName = "Testimonial";
|
|
|
1437
1554
|
|
|
1438
1555
|
// src/data/ConnectorCard.tsx
|
|
1439
1556
|
var import_icons6 = require("@ship-it-ui/icons");
|
|
1440
|
-
var
|
|
1557
|
+
var import_ui28 = require("@ship-it-ui/ui");
|
|
1441
1558
|
var import_react25 = require("react");
|
|
1442
1559
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1560
|
+
function buildConnectorSchema(input) {
|
|
1561
|
+
const name = input.nameText ?? (0, import_ui28.nodeToString)(input.name);
|
|
1562
|
+
if (!name) return null;
|
|
1563
|
+
const schema = {
|
|
1564
|
+
"@context": "https://schema.org",
|
|
1565
|
+
"@type": "SoftwareApplication",
|
|
1566
|
+
name
|
|
1567
|
+
};
|
|
1568
|
+
if (input.applicationCategory) schema.applicationCategory = input.applicationCategory;
|
|
1569
|
+
if (input.url) schema.url = input.url;
|
|
1570
|
+
if (input.softwareVersion) schema.softwareVersion = input.softwareVersion;
|
|
1571
|
+
const dateModified = (0, import_ui28.toIsoString)(input.lastSyncedAt);
|
|
1572
|
+
if (dateModified) schema.dateModified = dateModified;
|
|
1573
|
+
return schema;
|
|
1574
|
+
}
|
|
1443
1575
|
var statusDot = {
|
|
1444
1576
|
connected: "ok",
|
|
1445
1577
|
syncing: "sync",
|
|
@@ -1462,11 +1594,24 @@ var ConnectorCard = (0, import_react25.forwardRef)(function ConnectorCard2({
|
|
|
1462
1594
|
actions,
|
|
1463
1595
|
onClick,
|
|
1464
1596
|
accessibleName,
|
|
1597
|
+
nameText,
|
|
1598
|
+
applicationCategory,
|
|
1599
|
+
url,
|
|
1600
|
+
softwareVersion,
|
|
1601
|
+
noStructuredData,
|
|
1465
1602
|
className,
|
|
1466
1603
|
...props
|
|
1467
1604
|
}, ref) {
|
|
1468
1605
|
const interactive = typeof onClick === "function";
|
|
1469
|
-
const time = lastSyncedAt ? (0,
|
|
1606
|
+
const time = lastSyncedAt ? (0, import_ui28.formatRelative)(lastSyncedAt, relativeNow ?? /* @__PURE__ */ new Date()) : "";
|
|
1607
|
+
const structuredData = !noStructuredData ? buildConnectorSchema({
|
|
1608
|
+
name,
|
|
1609
|
+
nameText,
|
|
1610
|
+
applicationCategory,
|
|
1611
|
+
url,
|
|
1612
|
+
softwareVersion,
|
|
1613
|
+
lastSyncedAt
|
|
1614
|
+
}) : null;
|
|
1470
1615
|
const labelBlock = /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
1471
1616
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1472
1617
|
"span",
|
|
@@ -1480,7 +1625,7 @@ var ConnectorCard = (0, import_react25.forwardRef)(function ConnectorCard2({
|
|
|
1480
1625
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
1481
1626
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate text-[14px] font-medium", children: name }),
|
|
1482
1627
|
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1483
|
-
|
|
1628
|
+
import_ui28.StatusDot,
|
|
1484
1629
|
{
|
|
1485
1630
|
state: statusDot[status],
|
|
1486
1631
|
pulse: status === "syncing",
|
|
@@ -1498,7 +1643,7 @@ var ConnectorCard = (0, import_react25.forwardRef)(function ConnectorCard2({
|
|
|
1498
1643
|
] })
|
|
1499
1644
|
] })
|
|
1500
1645
|
] });
|
|
1501
|
-
const labelRegionClass = (0,
|
|
1646
|
+
const labelRegionClass = (0, import_ui28.cn)(
|
|
1502
1647
|
"flex flex-1 items-start gap-3 rounded-md p-1 text-left transition-colors duration-(--duration-micro)",
|
|
1503
1648
|
interactive && "hover:bg-panel-2 focus-visible:ring-accent-dim cursor-pointer outline-none focus-visible:ring-[3px]"
|
|
1504
1649
|
);
|
|
@@ -1516,12 +1661,13 @@ var ConnectorCard = (0, import_react25.forwardRef)(function ConnectorCard2({
|
|
|
1516
1661
|
"div",
|
|
1517
1662
|
{
|
|
1518
1663
|
ref,
|
|
1519
|
-
className: (0,
|
|
1664
|
+
className: (0, import_ui28.cn)(
|
|
1520
1665
|
"rounded-base border-border bg-panel flex items-start gap-2 border p-3",
|
|
1521
1666
|
className
|
|
1522
1667
|
),
|
|
1523
1668
|
...props,
|
|
1524
1669
|
children: [
|
|
1670
|
+
structuredData && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_ui28.JsonLd, { data: structuredData }),
|
|
1525
1671
|
labelRegion,
|
|
1526
1672
|
actions && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "shrink-0 self-center pr-1", children: actions })
|
|
1527
1673
|
]
|
|
@@ -1532,12 +1678,12 @@ ConnectorCard.displayName = "ConnectorCard";
|
|
|
1532
1678
|
|
|
1533
1679
|
// src/data/EntityTable.tsx
|
|
1534
1680
|
var import_icons7 = require("@ship-it-ui/icons");
|
|
1535
|
-
var
|
|
1681
|
+
var import_ui29 = require("@ship-it-ui/ui");
|
|
1536
1682
|
var import_react26 = require("react");
|
|
1537
1683
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1538
1684
|
function EntityTable(props) {
|
|
1539
1685
|
const { rowKey, ...rest } = props;
|
|
1540
|
-
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1686
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_ui29.DataTable, { ...rest, rowKey: rowKey ?? ((row) => row.id) });
|
|
1541
1687
|
}
|
|
1542
1688
|
function entityColumn(options = {}) {
|
|
1543
1689
|
return {
|
|
@@ -1563,7 +1709,7 @@ function entityTypeColumn(options = {}) {
|
|
|
1563
1709
|
}
|
|
1564
1710
|
|
|
1565
1711
|
// src/notifications/NotifRow.tsx
|
|
1566
|
-
var
|
|
1712
|
+
var import_ui30 = require("@ship-it-ui/ui");
|
|
1567
1713
|
var import_react27 = require("react");
|
|
1568
1714
|
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1569
1715
|
var toneClass = {
|
|
@@ -1576,6 +1722,7 @@ var NotifRow = (0, import_react27.forwardRef)(function NotifRow2({
|
|
|
1576
1722
|
title,
|
|
1577
1723
|
body,
|
|
1578
1724
|
time,
|
|
1725
|
+
dateTime,
|
|
1579
1726
|
tone = "neutral",
|
|
1580
1727
|
unread,
|
|
1581
1728
|
isFirst,
|
|
@@ -1589,18 +1736,25 @@ var NotifRow = (0, import_react27.forwardRef)(function NotifRow2({
|
|
|
1589
1736
|
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pt-1", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1590
1737
|
"div",
|
|
1591
1738
|
{
|
|
1592
|
-
className: (0,
|
|
1739
|
+
className: (0, import_ui30.cn)("h-2 w-2 rounded-full", unread ? toneClass[tone] : "bg-border-strong")
|
|
1593
1740
|
}
|
|
1594
1741
|
) }),
|
|
1595
1742
|
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1596
1743
|
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
1597
1744
|
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "truncate text-[14px] font-medium tracking-tight", children: title }),
|
|
1598
|
-
time != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1745
|
+
time != null && (dateTime !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1746
|
+
import_ui30.DateTime,
|
|
1747
|
+
{
|
|
1748
|
+
iso: dateTime,
|
|
1749
|
+
className: "text-text-muted shrink-0 font-mono text-[11px] whitespace-nowrap",
|
|
1750
|
+
children: time
|
|
1751
|
+
}
|
|
1752
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-text-muted shrink-0 font-mono text-[11px] whitespace-nowrap", children: time }))
|
|
1599
1753
|
] }),
|
|
1600
1754
|
body && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-text-muted mt-[3px] text-[13px] leading-tight", children: body })
|
|
1601
1755
|
] })
|
|
1602
1756
|
] });
|
|
1603
|
-
const baseClass = (0,
|
|
1757
|
+
const baseClass = (0, import_ui30.cn)(
|
|
1604
1758
|
"flex gap-3 p-[14px] bg-panel border-border border-l border-r",
|
|
1605
1759
|
isFirst ? "border-t rounded-t-m-card" : "",
|
|
1606
1760
|
"border-b",
|
|
@@ -1615,7 +1769,7 @@ var NotifRow = (0, import_react27.forwardRef)(function NotifRow2({
|
|
|
1615
1769
|
ref,
|
|
1616
1770
|
href,
|
|
1617
1771
|
onClick,
|
|
1618
|
-
className: (0,
|
|
1772
|
+
className: (0, import_ui30.cn)(
|
|
1619
1773
|
baseClass,
|
|
1620
1774
|
"text-text focus-visible:ring-accent-dim no-underline outline-none focus-visible:ring-[3px]"
|
|
1621
1775
|
),
|
|
@@ -1631,7 +1785,7 @@ var NotifRow = (0, import_react27.forwardRef)(function NotifRow2({
|
|
|
1631
1785
|
type: "button",
|
|
1632
1786
|
ref,
|
|
1633
1787
|
onClick,
|
|
1634
|
-
className: (0,
|
|
1788
|
+
className: (0, import_ui30.cn)(
|
|
1635
1789
|
baseClass,
|
|
1636
1790
|
"focus-visible:ring-accent-dim text-left outline-none focus-visible:ring-[3px]"
|
|
1637
1791
|
),
|