@scalemule/news-publication 0.0.61 → 0.0.63

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.
Files changed (68) hide show
  1. package/dist/chunk-3QU6BJVF.js +540 -0
  2. package/dist/chunk-4WVAT5M2.js +213 -0
  3. package/dist/chunk-6SBK3D3B.js +347 -0
  4. package/dist/chunk-CHF3YPDV.js +314 -0
  5. package/dist/chunk-FHRO2Z3F.js +174 -0
  6. package/dist/{chunk-DM4KQNJH.js → chunk-FWEYKWKP.js} +1 -1
  7. package/dist/{chunk-FMCHQI7K.js → chunk-KYUVXEJY.js} +34 -12
  8. package/dist/{chunk-F53CPZQO.js → chunk-Q77T2S7B.js} +1 -1
  9. package/dist/chunk-SKG5C3MS.js +379 -0
  10. package/dist/{chunk-GYYUJYI4.js → chunk-X7AU7DV6.js} +2 -3
  11. package/dist/{chunk-XPOZGZTM.js → chunk-XSAVJJVW.js} +11 -4
  12. package/dist/{chunk-6S5FARL3.js → chunk-XWXPERLK.js} +2 -2
  13. package/dist/cookie-consent-banner.cjs +10 -3
  14. package/dist/cookie-consent-banner.d.cts +1 -1
  15. package/dist/cookie-consent-banner.d.ts +1 -1
  16. package/dist/cookie-consent-banner.js +2 -2
  17. package/dist/cookie-settings-view.cjs +2 -3
  18. package/dist/cookie-settings-view.js +2 -2
  19. package/dist/index.cjs +60 -18
  20. package/dist/index.d.cts +8 -7
  21. package/dist/index.d.ts +8 -7
  22. package/dist/index.js +10 -8
  23. package/dist/meet-view.d.cts +1 -1
  24. package/dist/meet-view.d.ts +1 -1
  25. package/dist/network-bar.js +2 -2
  26. package/dist/network-copyright.js +2 -2
  27. package/dist/network.js +1 -1
  28. package/dist/pets-plugin.js +4 -347
  29. package/dist/{snapshot-DmRw8G_B.d.ts → snapshot-CjP7bSXJ.d.ts} +1 -1
  30. package/dist/snapshot-file.d.cts +2 -2
  31. package/dist/snapshot-file.d.ts +2 -2
  32. package/dist/{snapshot-Dx4Lv-lB.d.cts → snapshot-qj4BeNzB.d.cts} +1 -1
  33. package/dist/toys-forms.cjs +609 -0
  34. package/dist/toys-forms.d.cts +35 -0
  35. package/dist/toys-forms.d.ts +35 -0
  36. package/dist/toys-forms.js +4 -0
  37. package/dist/toys-interactions.cjs +594 -0
  38. package/dist/toys-interactions.d.cts +54 -0
  39. package/dist/toys-interactions.d.ts +54 -0
  40. package/dist/toys-interactions.js +520 -0
  41. package/dist/toys-plugin.cjs +713 -0
  42. package/dist/toys-plugin.d.cts +88 -0
  43. package/dist/toys-plugin.d.ts +88 -0
  44. package/dist/toys-plugin.js +10 -0
  45. package/dist/toys-publication.cjs +437 -0
  46. package/dist/toys-publication.d.cts +26 -0
  47. package/dist/toys-publication.d.ts +26 -0
  48. package/dist/toys-publication.js +72 -0
  49. package/dist/toys-server.cjs +275 -0
  50. package/dist/toys-server.d.cts +28 -0
  51. package/dist/toys-server.d.ts +28 -0
  52. package/dist/toys-server.js +4 -0
  53. package/dist/toys-view.cjs +420 -0
  54. package/dist/toys-view.d.cts +55 -0
  55. package/dist/toys-view.d.ts +55 -0
  56. package/dist/toys-view.js +2 -0
  57. package/dist/toys.cjs +196 -0
  58. package/dist/toys.d.cts +278 -0
  59. package/dist/toys.d.ts +278 -0
  60. package/dist/toys.js +1 -0
  61. package/dist/{types-BJFCWWi0.d.cts → types-DBi49N8m.d.cts} +12 -3
  62. package/dist/{types-BJFCWWi0.d.ts → types-DBi49N8m.d.ts} +12 -3
  63. package/dist/verified-card.cjs +34 -12
  64. package/dist/verified-card.d.cts +1 -1
  65. package/dist/verified-card.d.ts +1 -1
  66. package/dist/verified-card.js +1 -1
  67. package/package.json +41 -4
  68. package/toys.css +823 -0
package/dist/index.cjs CHANGED
@@ -303,6 +303,7 @@ function newsArticleJsonLd(publication, article, canonical, authorName) {
303
303
  headline: article.title,
304
304
  description: article.excerpt ?? void 0,
305
305
  datePublished: article.published_at,
306
+ ...article.metadata?.editorial?.modified_at ? { dateModified: article.metadata.editorial.modified_at } : {},
306
307
  // updated_at also changes for media/operational maintenance. A trusted
307
308
  // editorial modification timestamp is required before emitting dateModified.
308
309
  image: image ? [image] : void 0,
@@ -672,6 +673,7 @@ var NETWORK_NAVIGATION = [
672
673
  editorial("transportation", "Transportation", { group: "news-knowledge", order: 50, more: true }),
673
674
  // More — Local life.
674
675
  { id: "pets", label: "Pets", href: "/pets", kind: "product", group: "local-life", order: 10, more: true },
676
+ { id: "toys", label: "Toy Swap", href: "/toys", kind: "product", group: "local-life", order: 15, more: true },
675
677
  { id: "celebrations", label: "Celebrations", href: "/sections/celebrations", kind: "product", group: "local-life", order: 20, more: true, enabled: false },
676
678
  { id: "community-maps", label: "Community maps", href: "/community-maps", kind: "product", group: "local-life", order: 30, more: true },
677
679
  { id: "town-chat", label: "Town chat", href: "/chat", kind: "product", group: "local-life", order: 40, more: true, feature: "chat" },
@@ -1525,7 +1527,7 @@ var COOKIE_CATEGORIES = [
1525
1527
  id: "performance",
1526
1528
  title: "Performance & Analytics Cookies",
1527
1529
  shortDescription: "Help us measure reader engagement, story completion, and site reliability.",
1528
- fullDescription: "With your permission, first-party identifiers support page-visit and reading measurements. Aggregate reports help us improve the publication. Measurements are incomplete when readers decline consent and are not a count of unique people.",
1530
+ fullDescription: "We always count page views and reading activity without cookies or any identifier stored on your device: the server derives a daily-rotating, non-reversible hash that cannot be linked back to you, and your IP address is truncated before it is stored. With these cookies turned on, first-party identifiers additionally let us recognise a return visit and measure sessions. In the United States and most other regions they are on by default and you can turn them off here; in the EU, EEA, UK and Switzerland they stay off until you accept them.",
1529
1531
  required: false,
1530
1532
  cookies: [
1531
1533
  {
@@ -1605,6 +1607,12 @@ function CookieConsentBanner({
1605
1607
  const [visible, setVisible] = react.useState(false);
1606
1608
  react.useEffect(() => {
1607
1609
  setMounted(true);
1610
+ if (countryCode && /^[A-Za-z]{2}$/.test(countryCode)) {
1611
+ try {
1612
+ document.cookie = `sm_geo_country=${countryCode.toUpperCase()}; Path=/; SameSite=Lax`;
1613
+ } catch {
1614
+ }
1615
+ }
1608
1616
  const url = new URL(window.location.href);
1609
1617
  if (url.searchParams.has("sm_consent")) {
1610
1618
  if (url.searchParams.get("sm_consent") === "0" && !compliance.hasConsented())
@@ -1612,11 +1620,12 @@ function CookieConsentBanner({
1612
1620
  url.searchParams.delete("sm_consent");
1613
1621
  window.history.replaceState(window.history.state, "", url);
1614
1622
  }
1615
- setVisible(!compliance.hasConsented() && !compliance.isGpcActive());
1623
+ const asks = forceShow || compliance.consentModel(countryCode) === "opt-in";
1624
+ setVisible(asks && !compliance.hasConsented() && !compliance.isGpcActive());
1616
1625
  }, [countryCode, forceShow, consentHubUrl]);
1617
1626
  react.useEffect(() => {
1618
1627
  const onConsentChange = () => {
1619
- setVisible(!compliance.hasConsented() && !compliance.isGpcActive());
1628
+ setVisible((visible2) => visible2 && !compliance.hasConsented() && !compliance.isGpcActive());
1620
1629
  };
1621
1630
  window.addEventListener(compliance.COOKIE_CONSENT_EVENT, onConsentChange);
1622
1631
  return () => window.removeEventListener(compliance.COOKIE_CONSENT_EVENT, onConsentChange);
@@ -1639,7 +1648,7 @@ function CookieConsentBanner({
1639
1648
  });
1640
1649
  };
1641
1650
  const defaultText = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1642
- "With your permission, we measure reading activity and sponsor acknowledgments. You can read the publication with optional cookies turned off. View",
1651
+ "We count page views without cookies or identifiers. With your permission, first-party cookies also let us measure reading sessions and sponsor acknowledgments. You can read the publication with optional cookies turned off. View",
1643
1652
  " ",
1644
1653
  /* @__PURE__ */ jsxRuntime.jsx("a", { href: settingsUrl, className: "sm-cookie-banner-link", children: "Cookie Settings" }),
1645
1654
  " ",
@@ -1691,8 +1700,7 @@ function CookieSettingsView({
1691
1700
  publicationSlug
1692
1701
  }) {
1693
1702
  const [preferences, setPreferences] = react.useState(() => {
1694
- const existing = compliance.getCookieConsent();
1695
- return existing ? existing.preferences : { ...compliance.DEFAULT_PREFERENCES_ACCEPTED };
1703
+ return { ...compliance.effectivePreferences() };
1696
1704
  });
1697
1705
  const [expandedCategories, setExpandedCategories] = react.useState({
1698
1706
  essential: false,
@@ -2938,7 +2946,13 @@ var ALLOWED_CARD_TYPES = /* @__PURE__ */ new Set([
2938
2946
  "ACTIVITY",
2939
2947
  "EVENT",
2940
2948
  "ORGANIZATION",
2941
- "PRODUCT"
2949
+ "PRODUCT",
2950
+ "FRAMEWORK",
2951
+ "STANDARD",
2952
+ "SPECIFICATION",
2953
+ "TOPIC",
2954
+ "RESOURCE",
2955
+ "REFERENCE"
2942
2956
  ]);
2943
2957
  function clip(val, maxChars) {
2944
2958
  if (typeof val !== "string") return void 0;
@@ -2980,9 +2994,18 @@ function parseRawCards(rawCards) {
2980
2994
  const id = clip(c.id, 64);
2981
2995
  const title = clip(c.title, 300);
2982
2996
  if (!id || !title) continue;
2983
- const rawType = typeof c.card_type === "string" ? c.card_type : c.cardType;
2984
- const cardType = ALLOWED_CARD_TYPES.has(rawType) ? rawType : "PLACE";
2985
- const kicker = clip(c.kicker, 120) || (cardType === "PLACE" ? "LOCAL VENUE \xB7 VERIFIED DIRECTORY" : cardType === "EVENT" ? "COMMUNITY EVENT \xB7 VERIFIED FACTSHEET" : cardType === "ACTIVITY" ? "COMMUNITY ACTIVITY \xB7 VERIFIED FACTSHEET" : cardType === "ORGANIZATION" ? "COMMUNITY ORGANIZATION \xB7 DIRECTORY" : "VERIFIED FACTSHEET");
2997
+ const rawKind = (typeof c.card_type === "string" ? c.card_type : typeof c.cardType === "string" ? c.cardType : "").trim().toUpperCase();
2998
+ let cardType;
2999
+ if (ALLOWED_CARD_TYPES.has(rawKind)) {
3000
+ cardType = rawKind;
3001
+ } else if (rawKind === "RESEARCH_FRAMEWORK") {
3002
+ cardType = "FRAMEWORK";
3003
+ } else if (c.address && c.hours) {
3004
+ cardType = "PLACE";
3005
+ } else {
3006
+ cardType = "REFERENCE";
3007
+ }
3008
+ const kicker = clip(c.kicker, 120) || (cardType === "PLACE" ? "LOCAL VENUE \xB7 DIRECTORY" : cardType === "EVENT" ? "COMMUNITY EVENT \xB7 FACTSHEET" : cardType === "ACTIVITY" ? "COMMUNITY ACTIVITY \xB7 FACTSHEET" : cardType === "ORGANIZATION" ? "ORGANIZATION \xB7 DIRECTORY" : cardType === "PRODUCT" ? "PRODUCT \xB7 FACTSHEET" : cardType === "FRAMEWORK" ? "TECHNICAL FRAMEWORK" : cardType === "STANDARD" ? "TECHNICAL STANDARD" : cardType === "SPECIFICATION" ? "SPECIFICATION" : cardType === "TOPIC" ? "TOPIC REFERENCE" : cardType === "RESOURCE" ? "DIGITAL RESOURCE" : "FACTSHEET");
2986
3009
  const subtitle = clip(c.subtitle, 300);
2987
3010
  const summary = clip(c.summary, 1e3);
2988
3011
  const badge = clip(c.badge, 64);
@@ -3003,16 +3026,23 @@ function parseRawCards(rawCards) {
3003
3026
  } else {
3004
3027
  const timeframe = clip(c.timeframe, 200);
3005
3028
  if (timeframe) facts.push({ label: "Timeframe", value: timeframe });
3029
+ const isPhysicalPlace = cardType === "PLACE" || cardType === "EVENT" || cardType === "ACTIVITY";
3006
3030
  const address = clip(c.address, 300);
3007
3031
  if (address) {
3008
3032
  facts.push({
3009
- label: "Address",
3033
+ label: isPhysicalPlace ? "Address" : "Location",
3010
3034
  value: address,
3011
- href: `https://maps.google.com/?q=${encodeURIComponent(address)}`
3035
+ href: isPhysicalPlace ? `https://maps.google.com/?q=${encodeURIComponent(address)}` : void 0
3012
3036
  });
3013
3037
  }
3014
3038
  const hours = clip(c.hours, 300);
3015
- if (hours) facts.push({ label: "Hours", value: hours });
3039
+ if (hours) {
3040
+ facts.push({ label: isPhysicalPlace ? "Hours" : "Details", value: hours });
3041
+ }
3042
+ const website = clip(c.website || c.url, 500);
3043
+ if (website && isSafeActionUrl(website)) {
3044
+ facts.push({ label: "Website", value: website.replace(/^https?:\/\//, ""), href: website });
3045
+ }
3016
3046
  const phone = clip(c.phone, 80);
3017
3047
  if (phone) {
3018
3048
  facts.push({
@@ -3060,8 +3090,8 @@ function parseRawCards(rawCards) {
3060
3090
  };
3061
3091
  }
3062
3092
  }
3063
- const verificationNote = clip(c.verification_note || c.verificationNote, 300) || "Verified by publication reporting staff";
3064
- const verifiedAt = clip(c.verified_at || c.verifiedAt, 100) || "October 2026";
3093
+ const verificationNote = clip(c.verification_note || c.verificationNote, 300);
3094
+ const verifiedAt = clip(c.verified_at || c.verifiedAt, 100);
3065
3095
  let rating = void 0;
3066
3096
  if (typeof c.rating === "number" || typeof c.rating === "string") {
3067
3097
  rating = c.rating;
@@ -3139,12 +3169,12 @@ function VerifiedCardComponent({
3139
3169
  },
3140
3170
  i
3141
3171
  )) }),
3142
- /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "article-verified-card__footer", children: [
3143
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "article-verified-card__seal", children: [
3172
+ (card.verificationNote || card.verifiedAt) && /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "article-verified-card__footer", children: [
3173
+ card.verificationNote && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "article-verified-card__seal", children: [
3144
3174
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "article-verified-card__seal-check", "aria-hidden": "true", children: "\u2713" }),
3145
3175
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: card.verificationNote })
3146
3176
  ] }),
3147
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "article-verified-card__date", children: card.verifiedAt })
3177
+ card.verifiedAt && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "article-verified-card__date", children: card.verifiedAt })
3148
3178
  ] })
3149
3179
  ]
3150
3180
  }
@@ -3574,10 +3604,18 @@ Object.defineProperty(exports, "clearCookieConsent", {
3574
3604
  enumerable: true,
3575
3605
  get: function () { return compliance.clearCookieConsent; }
3576
3606
  });
3607
+ Object.defineProperty(exports, "consentModel", {
3608
+ enumerable: true,
3609
+ get: function () { return compliance.consentModel; }
3610
+ });
3577
3611
  Object.defineProperty(exports, "decorateNetworkUrl", {
3578
3612
  enumerable: true,
3579
3613
  get: function () { return compliance.decorateNetworkUrl; }
3580
3614
  });
3615
+ Object.defineProperty(exports, "effectivePreferences", {
3616
+ enumerable: true,
3617
+ get: function () { return compliance.effectivePreferences; }
3618
+ });
3581
3619
  Object.defineProperty(exports, "getCookieConsent", {
3582
3620
  enumerable: true,
3583
3621
  get: function () { return compliance.getCookieConsent; }
@@ -3586,6 +3624,10 @@ Object.defineProperty(exports, "hasConsented", {
3586
3624
  enumerable: true,
3587
3625
  get: function () { return compliance.hasConsented; }
3588
3626
  });
3627
+ Object.defineProperty(exports, "impliedPreferences", {
3628
+ enumerable: true,
3629
+ get: function () { return compliance.impliedPreferences; }
3630
+ });
3589
3631
  Object.defineProperty(exports, "isCategoryAllowed", {
3590
3632
  enumerable: true,
3591
3633
  get: function () { return compliance.isCategoryAllowed; }
package/dist/index.d.cts CHANGED
@@ -1,10 +1,10 @@
1
- import { a as PublicationTheme, P as PublicationInput, N as NewsPublication, F as FeatureName, b as NewsItem, H as HomepageSelection, c as NearbyUpdate, E as EditorialSection, d as NewsArticle, C as CouponOffer } from './types-BJFCWWi0.cjs';
2
- export { A as ArticleCitation, e as CardType, f as CategoryRef, g as CouponSettings, h as CoverImageMetadata, i as FEATURE_NAMES, j as FeatureFlags, k as NewsFeed, l as NewsLayoutId, m as PublicationModules, R as ReferralSettings, S as StoryDisplay, T as TagRef, V as VerifiedCard, n as VerifiedCardAction, o as VerifiedCardFact, p as VerifiedCardImage } from './types-BJFCWWi0.cjs';
1
+ import { a as PublicationTheme, P as PublicationInput, N as NewsPublication, F as FeatureName, b as NewsItem, H as HomepageSelection, c as NearbyUpdate, E as EditorialSection, d as NewsArticle, C as CouponOffer } from './types-DBi49N8m.cjs';
2
+ export { A as ArticleCitation, e as CardType, f as CategoryRef, g as CouponSettings, h as CoverImageMetadata, i as FEATURE_NAMES, j as FeatureFlags, k as NewsFeed, l as NewsLayoutId, m as PublicationModules, R as ReferralSettings, S as StoryDisplay, T as TagRef, V as VerifiedCard, n as VerifiedCardAction, o as VerifiedCardFact, p as VerifiedCardImage } from './types-DBi49N8m.cjs';
3
3
  export { M as MEET_ACTIVITIES, b as MeetActivity, c as MeetupInput, a as PreparedMeetup, P as PublicPlace, d as activityLabel, e as canHostMeetup, i as isAdult, p as prepareMeetup, s as screenMessage } from './meet-CO9Unz5M.cjs';
4
4
  export { b as CLASSIFIED_CATEGORIES, c as ClassifiedCategory, C as ClassifiedListing, E as EmploymentType, J as JOB_EMPLOYMENT_TYPES, d as PreparedClassified, e as PreparedJob, P as PublicDeal, f as PublicDealOffer, a as PublicJob, g as categoryLabel, h as classifiedPath, i as classifiedSearchPath, j as clipChars, k as dealDollars, l as dealGoPath, m as dealsFeedPath, n as employmentLabel, o as isClassifiedCategory, p as isEmploymentType, q as jobEmployerBody, r as jobOpeningBody, s as jobPostingBody, t as prepareClassified, u as prepareJobPost, v as publicJobPath, w as publicJobsPath } from './marketplace-29i5w4LS.cjs';
5
- export { b as PublicationRecord, P as PublicationSnapshot, S as SnapshotHooks, c as SyncSource, a as SyncedPublication, d as acceptRemoteRecord, e as acceptSnapshot, p as parseSnapshot, f as publicationFromSnapshot, g as publicationRecord, s as snapshotFromRecord, h as syncPublication } from './snapshot-Dx4Lv-lB.cjs';
5
+ export { b as PublicationRecord, P as PublicationSnapshot, S as SnapshotHooks, c as SyncSource, a as SyncedPublication, d as acceptRemoteRecord, e as acceptSnapshot, p as parseSnapshot, f as publicationFromSnapshot, g as publicationRecord, s as snapshotFromRecord, h as syncPublication } from './snapshot-qj4BeNzB.cjs';
6
6
  import { CookieCategoryDefinition, CookieConsentRecord } from '@scalemule/compliance';
7
- export { COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, CookieCategory, CookieCategoryDefinition, CookieConsentRecord, CookieDisclosure, CookiePreferences, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, decorateNetworkUrl, getCookieConsent, hasConsented, isCategoryAllowed, isGeoConsentRequired, queryNetworkConsentHub, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub } from '@scalemule/compliance';
7
+ export { COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, CookieCategory, CookieCategoryDefinition, CookieConsentRecord, CookieDisclosure, CookiePreferences, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, consentModel, decorateNetworkUrl, effectivePreferences, getCookieConsent, hasConsented, impliedPreferences, isCategoryAllowed, isGeoConsentRequired, queryNetworkConsentHub, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub } from '@scalemule/compliance';
8
8
  export { CookieConsentBanner, CookieConsentBannerProps } from './cookie-consent-banner.cjs';
9
9
  export { CookieSettingsView, CookieSettingsViewProps } from './cookie-settings-view.cjs';
10
10
  export { ThemeToggle, ThemeToggleProps } from './theme-toggle.cjs';
@@ -397,14 +397,15 @@ declare function newsArticleJsonLd(publication: NewsPublication, article: NewsAr
397
397
  url: string;
398
398
  };
399
399
  isBasedOn?: string | undefined;
400
+ image: string[] | undefined;
401
+ mainEntityOfPage: string;
402
+ url: string;
403
+ dateModified?: string | undefined;
400
404
  "@context": string;
401
405
  "@type": string;
402
406
  headline: string;
403
407
  description: string | undefined;
404
408
  datePublished: string;
405
- image: string[] | undefined;
406
- mainEntityOfPage: string;
407
- url: string;
408
409
  };
409
410
  declare function publicationJsonLd(publication: NewsPublication, canonical: string): {
410
411
  "@context": string;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { a as PublicationTheme, P as PublicationInput, N as NewsPublication, F as FeatureName, b as NewsItem, H as HomepageSelection, c as NearbyUpdate, E as EditorialSection, d as NewsArticle, C as CouponOffer } from './types-BJFCWWi0.js';
2
- export { A as ArticleCitation, e as CardType, f as CategoryRef, g as CouponSettings, h as CoverImageMetadata, i as FEATURE_NAMES, j as FeatureFlags, k as NewsFeed, l as NewsLayoutId, m as PublicationModules, R as ReferralSettings, S as StoryDisplay, T as TagRef, V as VerifiedCard, n as VerifiedCardAction, o as VerifiedCardFact, p as VerifiedCardImage } from './types-BJFCWWi0.js';
1
+ import { a as PublicationTheme, P as PublicationInput, N as NewsPublication, F as FeatureName, b as NewsItem, H as HomepageSelection, c as NearbyUpdate, E as EditorialSection, d as NewsArticle, C as CouponOffer } from './types-DBi49N8m.js';
2
+ export { A as ArticleCitation, e as CardType, f as CategoryRef, g as CouponSettings, h as CoverImageMetadata, i as FEATURE_NAMES, j as FeatureFlags, k as NewsFeed, l as NewsLayoutId, m as PublicationModules, R as ReferralSettings, S as StoryDisplay, T as TagRef, V as VerifiedCard, n as VerifiedCardAction, o as VerifiedCardFact, p as VerifiedCardImage } from './types-DBi49N8m.js';
3
3
  export { M as MEET_ACTIVITIES, b as MeetActivity, c as MeetupInput, a as PreparedMeetup, P as PublicPlace, d as activityLabel, e as canHostMeetup, i as isAdult, p as prepareMeetup, s as screenMessage } from './meet-BWpxY20X.js';
4
4
  export { b as CLASSIFIED_CATEGORIES, c as ClassifiedCategory, C as ClassifiedListing, E as EmploymentType, J as JOB_EMPLOYMENT_TYPES, d as PreparedClassified, e as PreparedJob, P as PublicDeal, f as PublicDealOffer, a as PublicJob, g as categoryLabel, h as classifiedPath, i as classifiedSearchPath, j as clipChars, k as dealDollars, l as dealGoPath, m as dealsFeedPath, n as employmentLabel, o as isClassifiedCategory, p as isEmploymentType, q as jobEmployerBody, r as jobOpeningBody, s as jobPostingBody, t as prepareClassified, u as prepareJobPost, v as publicJobPath, w as publicJobsPath } from './marketplace-29i5w4LS.js';
5
- export { b as PublicationRecord, P as PublicationSnapshot, S as SnapshotHooks, c as SyncSource, a as SyncedPublication, d as acceptRemoteRecord, e as acceptSnapshot, p as parseSnapshot, f as publicationFromSnapshot, g as publicationRecord, s as snapshotFromRecord, h as syncPublication } from './snapshot-DmRw8G_B.js';
5
+ export { b as PublicationRecord, P as PublicationSnapshot, S as SnapshotHooks, c as SyncSource, a as SyncedPublication, d as acceptRemoteRecord, e as acceptSnapshot, p as parseSnapshot, f as publicationFromSnapshot, g as publicationRecord, s as snapshotFromRecord, h as syncPublication } from './snapshot-CjP7bSXJ.js';
6
6
  import { CookieCategoryDefinition, CookieConsentRecord } from '@scalemule/compliance';
7
- export { COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, CookieCategory, CookieCategoryDefinition, CookieConsentRecord, CookieDisclosure, CookiePreferences, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, decorateNetworkUrl, getCookieConsent, hasConsented, isCategoryAllowed, isGeoConsentRequired, queryNetworkConsentHub, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub } from '@scalemule/compliance';
7
+ export { COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, CookieCategory, CookieCategoryDefinition, CookieConsentRecord, CookieDisclosure, CookiePreferences, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, consentModel, decorateNetworkUrl, effectivePreferences, getCookieConsent, hasConsented, impliedPreferences, isCategoryAllowed, isGeoConsentRequired, queryNetworkConsentHub, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub } from '@scalemule/compliance';
8
8
  export { CookieConsentBanner, CookieConsentBannerProps } from './cookie-consent-banner.js';
9
9
  export { CookieSettingsView, CookieSettingsViewProps } from './cookie-settings-view.js';
10
10
  export { ThemeToggle, ThemeToggleProps } from './theme-toggle.js';
@@ -397,14 +397,15 @@ declare function newsArticleJsonLd(publication: NewsPublication, article: NewsAr
397
397
  url: string;
398
398
  };
399
399
  isBasedOn?: string | undefined;
400
+ image: string[] | undefined;
401
+ mainEntityOfPage: string;
402
+ url: string;
403
+ dateModified?: string | undefined;
400
404
  "@context": string;
401
405
  "@type": string;
402
406
  headline: string;
403
407
  description: string | undefined;
404
408
  datePublished: string;
405
- image: string[] | undefined;
406
- mainEntityOfPage: string;
407
- url: string;
408
409
  };
409
410
  declare function publicationJsonLd(publication: NewsPublication, canonical: string): {
410
411
  "@context": string;
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
- export { NetworkCopyrightNotice } from './chunk-DM4KQNJH.js';
2
- export { CURATED_COMMUNITY_CARDS, VerifiedCardComponent, VerifiedCardSection, getArticleCards, isSafeActionUrl } from './chunk-FMCHQI7K.js';
3
- export { MEET_ACTIVITIES, activityLabel, canHostMeetup, isAdult, prepareMeetup, screenMessage } from './chunk-AMLVCZDP.js';
4
- export { CookieConsentBanner } from './chunk-XPOZGZTM.js';
5
- export { CookieSettingsView } from './chunk-GYYUJYI4.js';
1
+ export { CURATED_COMMUNITY_CARDS, VerifiedCardComponent, VerifiedCardSection, getArticleCards, isSafeActionUrl } from './chunk-KYUVXEJY.js';
2
+ export { CookieConsentBanner } from './chunk-XSAVJJVW.js';
3
+ export { CookieSettingsView } from './chunk-X7AU7DV6.js';
6
4
  export { THEME_COOKIE, THEME_EVENT, THEME_MAX_AGE_SECONDS, THEME_STORAGE_KEY, ThemeToggle, applyTheme, clearTheme, getStoredTheme, getSystemTheme, resolveEffectiveTheme, setTheme, subscribeTheme, themeInitScript } from './chunk-NQD3M7ZY.js';
7
- export { LocalNetworkBar } from './chunk-F53CPZQO.js';
8
- import { localPublications } from './chunk-6S5FARL3.js';
9
- export { COOKIE_CATEGORIES, COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EDITORIAL_PRINCIPLES, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, NETWORK_PARENT, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, communityPublications, decorateNetworkUrl, findPublicationByHost, findPublicationBySlug, getCookieConsent, getNetworkPublicationUrl, hasConsented, isCategoryAllowed, isGeoConsentRequired, listedPublications, localPublications, queryNetworkConsentHub, recordConsentToCompliance, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub, topicalPublications } from './chunk-6S5FARL3.js';
5
+ export { LocalNetworkBar } from './chunk-Q77T2S7B.js';
6
+ export { NetworkCopyrightNotice } from './chunk-FWEYKWKP.js';
7
+ import { localPublications } from './chunk-XWXPERLK.js';
8
+ export { COOKIE_CATEGORIES, COOKIE_CONSENT_BACKUP_KEY, COOKIE_CONSENT_EVENT, COOKIE_CONSENT_KEY, COOKIE_CONSENT_MAX_AGE_SECONDS, DEFAULT_CONSENT_HUB_URL, DEFAULT_PREFERENCES_ACCEPTED, DEFAULT_PREFERENCES_REJECTED, EDITORIAL_PRINCIPLES, EU_EEA_UK_COUNTRIES, NETWORK_CONSENT_STORAGE_KEY, NETWORK_PARENT, acceptAllCookies, checkUrlConsentBridge, clearCookieConsent, communityPublications, consentModel, decorateNetworkUrl, effectivePreferences, findPublicationByHost, findPublicationBySlug, getCookieConsent, getNetworkPublicationUrl, hasConsented, impliedPreferences, isCategoryAllowed, isGeoConsentRequired, listedPublications, localPublications, queryNetworkConsentHub, recordConsentToCompliance, rejectOptionalCookies, setCookieConsent, setNetworkConsentHub, topicalPublications } from './chunk-XWXPERLK.js';
10
9
  export { communityMapEmbeds } from './chunk-IMYBSG7J.js';
11
10
  export { formatArtworkCaption, parseDocumentBlocks, renderArticleBlocksToHtml, sanitizeInlineMarkdown } from './chunk-OISLCYER.js';
12
11
  import { definePublication } from './chunk-57YVL6BD.js';
13
12
  export { BROADSHEET_THEME, FEATURE_NAMES, LAYOUT_COOKIE, acceptRemoteRecord, acceptSnapshot, definePublication, featureEnabled, parseSnapshot, publicationFromSnapshot, publicationRecord, resolveLayout, snapshotFromRecord, syncPublication } from './chunk-57YVL6BD.js';
14
13
  export { CLASSIFIED_CATEGORIES, JOB_EMPLOYMENT_TYPES, categoryLabel, classifiedPath, classifiedSearchPath, clipChars, dealDollars, dealGoPath, dealsFeedPath, employmentLabel, isClassifiedCategory, isEmploymentType, jobEmployerBody, jobOpeningBody, jobPostingBody, prepareClassified, prepareJobPost, publicJobPath, publicJobsPath } from './chunk-C7ZPLH2K.js';
14
+ export { MEET_ACTIVITIES, activityLabel, canHostMeetup, isAdult, prepareMeetup, screenMessage } from './chunk-AMLVCZDP.js';
15
15
  export { SPONSORSHIP_OFFERINGS, SPONSORSHIP_POLICY, placementAvailable, safeSponsorUrl } from './chunk-66GI2IX6.js';
16
16
  import './chunk-AFJ6S5WJ.js';
17
17
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -246,6 +246,7 @@ function newsArticleJsonLd(publication, article, canonical, authorName) {
246
246
  headline: article.title,
247
247
  description: article.excerpt ?? void 0,
248
248
  datePublished: article.published_at,
249
+ ...article.metadata?.editorial?.modified_at ? { dateModified: article.metadata.editorial.modified_at } : {},
249
250
  // updated_at also changes for media/operational maintenance. A trusted
250
251
  // editorial modification timestamp is required before emitting dateModified.
251
252
  image: image ? [image] : void 0,
@@ -615,6 +616,7 @@ var NETWORK_NAVIGATION = [
615
616
  editorial("transportation", "Transportation", { group: "news-knowledge", order: 50, more: true }),
616
617
  // More — Local life.
617
618
  { id: "pets", label: "Pets", href: "/pets", kind: "product", group: "local-life", order: 10, more: true },
619
+ { id: "toys", label: "Toy Swap", href: "/toys", kind: "product", group: "local-life", order: 15, more: true },
618
620
  { id: "celebrations", label: "Celebrations", href: "/sections/celebrations", kind: "product", group: "local-life", order: 20, more: true, enabled: false },
619
621
  { id: "community-maps", label: "Community maps", href: "/community-maps", kind: "product", group: "local-life", order: 30, more: true },
620
622
  { id: "town-chat", label: "Town chat", href: "/chat", kind: "product", group: "local-life", order: 40, more: true, feature: "chat" },
@@ -18,7 +18,7 @@ declare function MeetupDetail({ meetup, joined }: {
18
18
  joined: boolean;
19
19
  }): React.JSX.Element;
20
20
  declare function activityChoices(): {
21
- value: "walk" | "other" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer";
21
+ value: "walk" | "other" | "games" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "kids" | "volunteer";
22
22
  label: string;
23
23
  }[];
24
24
 
@@ -18,7 +18,7 @@ declare function MeetupDetail({ meetup, joined }: {
18
18
  joined: boolean;
19
19
  }): React.JSX.Element;
20
20
  declare function activityChoices(): {
21
- value: "walk" | "other" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer";
21
+ value: "walk" | "other" | "games" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "kids" | "volunteer";
22
22
  label: string;
23
23
  }[];
24
24
 
@@ -1,2 +1,2 @@
1
- export { LocalNetworkBar } from './chunk-F53CPZQO.js';
2
- import './chunk-6S5FARL3.js';
1
+ export { LocalNetworkBar } from './chunk-Q77T2S7B.js';
2
+ import './chunk-XWXPERLK.js';
@@ -1,2 +1,2 @@
1
- export { NetworkCopyrightNotice } from './chunk-DM4KQNJH.js';
2
- import './chunk-6S5FARL3.js';
1
+ export { NetworkCopyrightNotice } from './chunk-FWEYKWKP.js';
2
+ import './chunk-XWXPERLK.js';
package/dist/network.js CHANGED
@@ -1 +1 @@
1
- export { EDITORIAL_PRINCIPLES, NETWORK_PARENT, communityPublications, findPublicationByHost, findPublicationBySlug, getNetworkPublicationUrl, isNetworkHostname, listedPublications, localPublications, topicalPublications } from './chunk-6S5FARL3.js';
1
+ export { EDITORIAL_PRINCIPLES, NETWORK_PARENT, communityPublications, findPublicationByHost, findPublicationBySlug, getNetworkPublicationUrl, isNetworkHostname, listedPublications, localPublications, topicalPublications } from './chunk-XWXPERLK.js';