@ship-it-ui/shipit 0.0.14 → 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 CHANGED
@@ -55,7 +55,7 @@ __export(index_exports, {
55
55
  SuggestionChip: () => SuggestionChip,
56
56
  Testimonial: () => Testimonial,
57
57
  ToolCallCard: () => ToolCallCard,
58
- cn: () => import_ui32.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 import_ui32 = require("@ship-it-ui/ui");
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)("h2", { className: "m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]", children: title }),
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)("div", { className: "mb-[6px] text-[14px] font-medium", children: f.title }),
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.jsx)("div", { children: brand }),
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
- "h1",
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
- var PricingCard = (0, import_react23.forwardRef)(function PricingCard2({ tier, price, priceUnit, description, features, action, featured, className, ...props }, ref) {
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)("span", { className: "text-[14px] font-medium", children: tier }),
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
- var Testimonial = (0, import_react24.forwardRef)(function Testimonial2({ quote, author, role, avatar, className, ...props }, ref) {
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, import_ui28.cn)("mx-auto max-w-[620px] px-6 py-10 text-center", className),
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 import_ui29 = require("@ship-it-ui/ui");
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, import_ui29.formatRelative)(lastSyncedAt, relativeNow ?? /* @__PURE__ */ new Date()) : "";
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
- import_ui29.StatusDot,
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, import_ui29.cn)(
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, import_ui29.cn)(
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 import_ui30 = require("@ship-it-ui/ui");
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)(import_ui30.DataTable, { ...rest, rowKey: rowKey ?? ((row) => row.id) });
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 import_ui31 = require("@ship-it-ui/ui");
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, import_ui31.cn)("h-2 w-2 rounded-full", unread ? toneClass[tone] : "bg-border-strong")
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)("span", { className: "text-text-muted shrink-0 font-mono text-[11px] whitespace-nowrap", children: time })
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, import_ui31.cn)(
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, import_ui31.cn)(
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, import_ui31.cn)(
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
  ),