@scalemule/news-publication 0.0.48 → 0.0.50

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 (76) hide show
  1. package/README.md +54 -0
  2. package/dist/chunk-4JRWZXAP.js +62 -0
  3. package/dist/chunk-ABPJMDUG.js +251 -0
  4. package/dist/chunk-AFJ6S5WJ.js +124 -0
  5. package/dist/{chunk-GB36YM56.js → chunk-AMLVCZDP.js} +11 -1
  6. package/dist/chunk-QW3OZB22.js +616 -0
  7. package/dist/community-maps-view.d.cts +3 -3
  8. package/dist/community-maps-view.d.ts +3 -3
  9. package/dist/cookie-consent-banner.d.cts +2 -2
  10. package/dist/cookie-consent-banner.d.ts +2 -2
  11. package/dist/cookie-settings-view.d.cts +2 -2
  12. package/dist/cookie-settings-view.d.ts +2 -2
  13. package/dist/index.cjs +29 -1
  14. package/dist/index.d.cts +4 -3
  15. package/dist/index.d.ts +4 -3
  16. package/dist/index.js +3 -2
  17. package/dist/marketplace-forms.d.cts +3 -3
  18. package/dist/marketplace-forms.d.ts +3 -3
  19. package/dist/marketplace-view.d.cts +5 -5
  20. package/dist/marketplace-view.d.ts +5 -5
  21. package/dist/{meet-RWmfj3I3.d.cts → meet-BWpxY20X.d.ts} +5 -0
  22. package/dist/{meet-RWmfj3I3.d.ts → meet-CO9Unz5M.d.cts} +5 -0
  23. package/dist/meet-forms.d.cts +7 -6
  24. package/dist/meet-forms.d.ts +7 -6
  25. package/dist/meet-forms.js +2 -1
  26. package/dist/meet-view.cjs +22 -2
  27. package/dist/meet-view.d.cts +7 -5
  28. package/dist/meet-view.d.ts +7 -5
  29. package/dist/meet-view.js +21 -4
  30. package/dist/network-bar.d.cts +2 -2
  31. package/dist/network-bar.d.ts +2 -2
  32. package/dist/network-copyright.d.cts +2 -2
  33. package/dist/network-copyright.d.ts +2 -2
  34. package/dist/pets-auth-server.cjs +257 -0
  35. package/dist/pets-auth-server.d.cts +23 -0
  36. package/dist/pets-auth-server.d.ts +23 -0
  37. package/dist/pets-auth-server.js +198 -0
  38. package/dist/pets-forms.cjs +764 -0
  39. package/dist/pets-forms.d.cts +28 -0
  40. package/dist/pets-forms.d.ts +28 -0
  41. package/dist/pets-forms.js +714 -0
  42. package/dist/pets-interactions.cjs +333 -0
  43. package/dist/pets-interactions.d.cts +23 -0
  44. package/dist/pets-interactions.d.ts +23 -0
  45. package/dist/pets-interactions.js +320 -0
  46. package/dist/pets-plugin.cjs +546 -0
  47. package/dist/pets-plugin.d.cts +50 -0
  48. package/dist/pets-plugin.d.ts +50 -0
  49. package/dist/pets-plugin.js +312 -0
  50. package/dist/pets-publication.cjs +1014 -0
  51. package/dist/pets-publication.d.cts +40 -0
  52. package/dist/pets-publication.d.ts +40 -0
  53. package/dist/pets-publication.js +201 -0
  54. package/dist/pets-server.cjs +289 -0
  55. package/dist/pets-server.d.cts +42 -0
  56. package/dist/pets-server.d.ts +42 -0
  57. package/dist/pets-server.js +2 -0
  58. package/dist/pets-view.cjs +714 -0
  59. package/dist/pets-view.d.cts +58 -0
  60. package/dist/pets-view.d.ts +58 -0
  61. package/dist/pets-view.js +4 -0
  62. package/dist/pets.cjs +138 -0
  63. package/dist/pets.d.cts +127 -0
  64. package/dist/pets.d.ts +127 -0
  65. package/dist/pets.js +1 -0
  66. package/dist/sponsorship-view.d.cts +2 -2
  67. package/dist/sponsorship-view.d.ts +2 -2
  68. package/dist/sponsorship-view.js +2 -62
  69. package/dist/story-review.d.cts +6 -6
  70. package/dist/story-review.d.ts +6 -6
  71. package/dist/theme-toggle.d.cts +2 -2
  72. package/dist/theme-toggle.d.ts +2 -2
  73. package/dist/verified-card.d.cts +3 -3
  74. package/dist/verified-card.d.ts +3 -3
  75. package/package.json +45 -3
  76. package/pets.css +746 -0
@@ -1,4 +1,4 @@
1
- import react__default from 'react';
1
+ import React__default from 'react';
2
2
 
3
3
  interface CookieConsentBannerProps {
4
4
  /** Title displayed in banner. Default: "Help Us Improve Our Website with Cookies" */
@@ -20,6 +20,6 @@ interface CookieConsentBannerProps {
20
20
  /** URL of the central network consent iframe bridge. Default: "https://bayareachronicle.com/consent-bridge.html" */
21
21
  consentHubUrl?: string;
22
22
  }
23
- declare function CookieConsentBanner({ title, text, settingsUrl, className, publicationSlug, complianceEndpoint, countryCode, forceShow, consentHubUrl, }: CookieConsentBannerProps): react__default.JSX.Element | null;
23
+ declare function CookieConsentBanner({ title, text, settingsUrl, className, publicationSlug, complianceEndpoint, countryCode, forceShow, consentHubUrl, }: CookieConsentBannerProps): React__default.JSX.Element | null;
24
24
 
25
25
  export { CookieConsentBanner, type CookieConsentBannerProps };
@@ -1,4 +1,4 @@
1
- import react__default from 'react';
1
+ import React__default from 'react';
2
2
 
3
3
  interface CookieSettingsViewProps {
4
4
  /** The publication display name (e.g., "San Ramon Times") */
@@ -10,6 +10,6 @@ interface CookieSettingsViewProps {
10
10
  /** Optional publication slug for metadata */
11
11
  publicationSlug?: string;
12
12
  }
13
- declare function CookieSettingsView({ publicationName, region, complianceEndpoint, publicationSlug, }: CookieSettingsViewProps): react__default.JSX.Element;
13
+ declare function CookieSettingsView({ publicationName, region, complianceEndpoint, publicationSlug, }: CookieSettingsViewProps): React__default.JSX.Element;
14
14
 
15
15
  export { CookieSettingsView, type CookieSettingsViewProps };
@@ -1,4 +1,4 @@
1
- import react__default from 'react';
1
+ import React__default from 'react';
2
2
 
3
3
  interface CookieSettingsViewProps {
4
4
  /** The publication display name (e.g., "San Ramon Times") */
@@ -10,6 +10,6 @@ interface CookieSettingsViewProps {
10
10
  /** Optional publication slug for metadata */
11
11
  publicationSlug?: string;
12
12
  }
13
- declare function CookieSettingsView({ publicationName, region, complianceEndpoint, publicationSlug, }: CookieSettingsViewProps): react__default.JSX.Element;
13
+ declare function CookieSettingsView({ publicationName, region, complianceEndpoint, publicationSlug, }: CookieSettingsViewProps): React__default.JSX.Element;
14
14
 
15
15
  export { CookieSettingsView, type CookieSettingsViewProps };
package/dist/index.cjs CHANGED
@@ -752,6 +752,26 @@ function referralCode(publication, url) {
752
752
  }
753
753
  }
754
754
 
755
+ // src/pets.ts
756
+ function preparePawWalk(value) {
757
+ if (!Number.isInteger(value.duration_minutes) || value.duration_minutes < 10 || value.duration_minutes > 240)
758
+ throw new Error("Choose a walk duration from 10 to 240 minutes.");
759
+ if (value.distance_km !== void 0 && (!Number.isFinite(value.distance_km) || value.distance_km < 0 || value.distance_km > 30))
760
+ throw new Error("Choose a walking distance from 0 to 30 km.");
761
+ if (value.leash !== "required" && value.leash !== "venue_rules")
762
+ throw new Error("Choose the leash requirements.");
763
+ for (const field of [value.size_guidance, value.accessibility])
764
+ if (typeof field !== "string" || Array.from(field).length > 500)
765
+ throw new Error("Keep walk guidance within 500 characters.");
766
+ return {
767
+ duration_minutes: value.duration_minutes,
768
+ distance_km: value.distance_km,
769
+ leash: value.leash,
770
+ size_guidance: value.size_guidance,
771
+ accessibility: value.accessibility
772
+ };
773
+ }
774
+
755
775
  // src/meet.ts
756
776
  var MEET_ACTIVITIES = [
757
777
  { value: "coffee", label: "Coffee" },
@@ -811,6 +831,13 @@ function prepareMeetup(input, places, now = /* @__PURE__ */ new Date()) {
811
831
  if (!notes.ok) throw new Error(notes.reason);
812
832
  const capacity = Number(input.capacity ?? 6);
813
833
  if (!Number.isInteger(capacity) || capacity < 2 || capacity > 12) throw new Error("Choose a group size from 2 to 12.");
834
+ const walk = activity === "dogs" && input.walk ? preparePawWalk(input.walk) : void 0;
835
+ if (walk) for (const guidance of [walk.size_guidance, walk.accessibility]) {
836
+ if (guidance.trim()) {
837
+ const screened = screenMessage(guidance);
838
+ if (!screened.ok) throw new Error(screened.reason);
839
+ }
840
+ }
814
841
  return {
815
842
  activity,
816
843
  activityLabel: label,
@@ -819,7 +846,8 @@ function prepareMeetup(input, places, now = /* @__PURE__ */ new Date()) {
819
846
  placeDetail: place.detail,
820
847
  startsAt: new Date(starts).toISOString(),
821
848
  notes: notes.text,
822
- capacity
849
+ capacity,
850
+ ...walk ? { walk } : {}
823
851
  };
824
852
  }
825
853
 
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
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
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';
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-RWmfj3I3.cjs';
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
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';
6
6
  import { CookieCategoryDefinition, CookieConsentRecord } from '@scalemule/compliance';
@@ -11,12 +11,13 @@ export { ThemeToggle, ThemeToggleProps } from './theme-toggle.cjs';
11
11
  export { EDITORIAL_PRINCIPLES, EditorialPrinciple, NETWORK_PARENT, NetworkParent, PublicationNetworkItem, communityPublications, findPublicationByHost, findPublicationBySlug, getNetworkPublicationUrl, listedPublications, localPublications } from './network.cjs';
12
12
  export { LocalNetworkBar, LocalNetworkBarProps } from './network-bar.cjs';
13
13
  export { NetworkCopyrightNotice, NetworkCopyrightNoticeProps } from './network-copyright.cjs';
14
- import * as react from 'react';
14
+ import * as React from 'react';
15
15
  export { VerifiedCardComponent, VerifiedCardSection, getArticleCards, isSafeActionUrl } from './verified-card.cjs';
16
16
  export { C as CommunityMapArticleEmbed, c as communityMapEmbeds } from './community-maps-DKcYhQYN.cjs';
17
17
  export { C as ContentBlock, S as StructuredDocument, a as StructuredMedia, f as formatArtworkCaption, p as parseDocumentBlocks, r as renderArticleBlocksToHtml, s as sanitizeInlineMarkdown } from './article-blocks-DsabIDmH.cjs';
18
18
  import { M as Measurement } from './sponsorships-CtnBe3S8.cjs';
19
19
  export { a as Campaign, b as CampaignStatus, c as CampaignTarget, C as Creative, d as Placement, e as PlacementType, P as PublicAcknowledgment, S as SPONSORSHIP_OFFERINGS, f as SPONSORSHIP_POLICY, g as SponsorParty, p as placementAvailable, s as safeSponsorUrl } from './sponsorships-CtnBe3S8.cjs';
20
+ import './pets.cjs';
20
21
 
21
22
  /** Walnut Creek Times broadsheet colors. A paper overrides only what it changes. */
22
23
  declare const BROADSHEET_THEME: PublicationTheme;
@@ -424,7 +425,7 @@ declare function subscribeTheme(listener: () => void): () => void;
424
425
  declare function themeInitScript(): string;
425
426
 
426
427
  /** A reader projection, never an internal reporting package. */
427
- declare function ArticleProvenance({ metadata }: Pick<NewsArticle, 'metadata'>): react.JSX.Element | null;
428
+ declare function ArticleProvenance({ metadata }: Pick<NewsArticle, 'metadata'>): React.JSX.Element | null;
428
429
  declare function readerSources(input: unknown): {
429
430
  url: string;
430
431
  title?: string;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
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
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';
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-RWmfj3I3.js';
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
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';
6
6
  import { CookieCategoryDefinition, CookieConsentRecord } from '@scalemule/compliance';
@@ -11,12 +11,13 @@ export { ThemeToggle, ThemeToggleProps } from './theme-toggle.js';
11
11
  export { EDITORIAL_PRINCIPLES, EditorialPrinciple, NETWORK_PARENT, NetworkParent, PublicationNetworkItem, communityPublications, findPublicationByHost, findPublicationBySlug, getNetworkPublicationUrl, listedPublications, localPublications } from './network.js';
12
12
  export { LocalNetworkBar, LocalNetworkBarProps } from './network-bar.js';
13
13
  export { NetworkCopyrightNotice, NetworkCopyrightNoticeProps } from './network-copyright.js';
14
- import * as react from 'react';
14
+ import * as React from 'react';
15
15
  export { VerifiedCardComponent, VerifiedCardSection, getArticleCards, isSafeActionUrl } from './verified-card.js';
16
16
  export { C as CommunityMapArticleEmbed, c as communityMapEmbeds } from './community-maps-DKcYhQYN.js';
17
17
  export { C as ContentBlock, S as StructuredDocument, a as StructuredMedia, f as formatArtworkCaption, p as parseDocumentBlocks, r as renderArticleBlocksToHtml, s as sanitizeInlineMarkdown } from './article-blocks-DsabIDmH.js';
18
18
  import { M as Measurement } from './sponsorships-CtnBe3S8.js';
19
19
  export { a as Campaign, b as CampaignStatus, c as CampaignTarget, C as Creative, d as Placement, e as PlacementType, P as PublicAcknowledgment, S as SPONSORSHIP_OFFERINGS, f as SPONSORSHIP_POLICY, g as SponsorParty, p as placementAvailable, s as safeSponsorUrl } from './sponsorships-CtnBe3S8.js';
20
+ import './pets.js';
20
21
 
21
22
  /** Walnut Creek Times broadsheet colors. A paper overrides only what it changes. */
22
23
  declare const BROADSHEET_THEME: PublicationTheme;
@@ -424,7 +425,7 @@ declare function subscribeTheme(listener: () => void): () => void;
424
425
  declare function themeInitScript(): string;
425
426
 
426
427
  /** A reader projection, never an internal reporting package. */
427
- declare function ArticleProvenance({ metadata }: Pick<NewsArticle, 'metadata'>): react.JSX.Element | null;
428
+ declare function ArticleProvenance({ metadata }: Pick<NewsArticle, 'metadata'>): React.JSX.Element | null;
428
429
  declare function readerSources(input: unknown): {
429
430
  url: string;
430
431
  title?: string;
package/dist/index.js CHANGED
@@ -1,18 +1,19 @@
1
1
  export { NetworkCopyrightNotice } from './chunk-WAC6ATNP.js';
2
2
  export { CURATED_COMMUNITY_CARDS, VerifiedCardComponent, VerifiedCardSection, getArticleCards, isSafeActionUrl } from './chunk-FMCHQI7K.js';
3
- export { MEET_ACTIVITIES, activityLabel, canHostMeetup, isAdult, prepareMeetup, screenMessage } from './chunk-GB36YM56.js';
3
+ export { MEET_ACTIVITIES, activityLabel, canHostMeetup, isAdult, prepareMeetup, screenMessage } from './chunk-AMLVCZDP.js';
4
4
  export { CookieConsentBanner } from './chunk-GOWOYMSG.js';
5
5
  export { CookieSettingsView } from './chunk-UL2Q3N26.js';
6
6
  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
7
  export { LocalNetworkBar } from './chunk-2XSW7JZS.js';
8
8
  import { localPublications } from './chunk-JV76ZEIA.js';
9
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 } from './chunk-JV76ZEIA.js';
10
- export { SPONSORSHIP_OFFERINGS, SPONSORSHIP_POLICY, placementAvailable, safeSponsorUrl } from './chunk-66GI2IX6.js';
11
10
  export { communityMapEmbeds } from './chunk-IMYBSG7J.js';
12
11
  export { formatArtworkCaption, parseDocumentBlocks, renderArticleBlocksToHtml, sanitizeInlineMarkdown } from './chunk-OISLCYER.js';
13
12
  import { definePublication } from './chunk-57YVL6BD.js';
14
13
  export { BROADSHEET_THEME, FEATURE_NAMES, LAYOUT_COOKIE, acceptRemoteRecord, acceptSnapshot, definePublication, featureEnabled, parseSnapshot, publicationFromSnapshot, publicationRecord, resolveLayout, snapshotFromRecord, syncPublication } from './chunk-57YVL6BD.js';
15
14
  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';
15
+ export { SPONSORSHIP_OFFERINGS, SPONSORSHIP_POLICY, placementAvailable, safeSponsorUrl } from './chunk-66GI2IX6.js';
16
+ import './chunk-AFJ6S5WJ.js';
16
17
  import { jsxs, jsx } from 'react/jsx-runtime';
17
18
 
18
19
  // src/editorial.ts
@@ -1,10 +1,10 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
 
3
3
  declare function JobPostForm({ towns }: {
4
4
  towns: string[];
5
- }): react.JSX.Element;
5
+ }): React.JSX.Element;
6
6
  declare function ClassifiedPostForm({ towns }: {
7
7
  towns: string[];
8
- }): react.JSX.Element;
8
+ }): React.JSX.Element;
9
9
 
10
10
  export { ClassifiedPostForm, JobPostForm };
@@ -1,10 +1,10 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
 
3
3
  declare function JobPostForm({ towns }: {
4
4
  towns: string[];
5
- }): react.JSX.Element;
5
+ }): React.JSX.Element;
6
6
  declare function ClassifiedPostForm({ towns }: {
7
7
  towns: string[];
8
- }): react.JSX.Element;
8
+ }): React.JSX.Element;
9
9
 
10
10
  export { ClassifiedPostForm, JobPostForm };
@@ -1,22 +1,22 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { C as ClassifiedListing, P as PublicDeal, a as PublicJob } from './marketplace-29i5w4LS.cjs';
3
3
 
4
4
  declare function JobsBoard({ region, jobs, query }: {
5
5
  region: string;
6
6
  jobs: PublicJob[];
7
7
  query: string;
8
- }): react.JSX.Element;
8
+ }): React.JSX.Element;
9
9
  declare function JobArticle({ job }: {
10
10
  job: PublicJob;
11
- }): react.JSX.Element;
11
+ }): React.JSX.Element;
12
12
  declare function ClassifiedsBoard({ region, listings, category, deals, }: {
13
13
  region: string;
14
14
  listings: ClassifiedListing[];
15
15
  category: string;
16
16
  deals?: PublicDeal[];
17
- }): react.JSX.Element;
17
+ }): React.JSX.Element;
18
18
  declare function ClassifiedArticle({ listing }: {
19
19
  listing: ClassifiedListing;
20
- }): react.JSX.Element;
20
+ }): React.JSX.Element;
21
21
 
22
22
  export { ClassifiedArticle, ClassifiedsBoard, JobArticle, JobsBoard };
@@ -1,22 +1,22 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { C as ClassifiedListing, P as PublicDeal, a as PublicJob } from './marketplace-29i5w4LS.js';
3
3
 
4
4
  declare function JobsBoard({ region, jobs, query }: {
5
5
  region: string;
6
6
  jobs: PublicJob[];
7
7
  query: string;
8
- }): react.JSX.Element;
8
+ }): React.JSX.Element;
9
9
  declare function JobArticle({ job }: {
10
10
  job: PublicJob;
11
- }): react.JSX.Element;
11
+ }): React.JSX.Element;
12
12
  declare function ClassifiedsBoard({ region, listings, category, deals, }: {
13
13
  region: string;
14
14
  listings: ClassifiedListing[];
15
15
  category: string;
16
16
  deals?: PublicDeal[];
17
- }): react.JSX.Element;
17
+ }): React.JSX.Element;
18
18
  declare function ClassifiedArticle({ listing }: {
19
19
  listing: ClassifiedListing;
20
- }): react.JSX.Element;
20
+ }): React.JSX.Element;
21
21
 
22
22
  export { ClassifiedArticle, ClassifiedsBoard, JobArticle, JobsBoard };
@@ -1,4 +1,7 @@
1
+ import { PawWalkDetails } from './pets.js';
2
+
1
3
  /** Rules for in-person meetups and the paper's chat. */
4
+
2
5
  declare const MEET_ACTIVITIES: readonly [{
3
6
  readonly value: "coffee";
4
7
  readonly label: "Coffee";
@@ -52,6 +55,7 @@ type MeetupInput = {
52
55
  startsAt?: unknown;
53
56
  notes?: unknown;
54
57
  capacity?: unknown;
58
+ walk?: Partial<PawWalkDetails>;
55
59
  };
56
60
  type PreparedMeetup = {
57
61
  activity: MeetActivity;
@@ -62,6 +66,7 @@ type PreparedMeetup = {
62
66
  startsAt: string;
63
67
  notes: string;
64
68
  capacity: number;
69
+ walk?: PawWalkDetails;
65
70
  };
66
71
  declare function isAdult(bornOn: string, now?: Date): boolean;
67
72
  declare function canHostMeetup(accountCreatedAt: string, now?: Date): boolean;
@@ -1,4 +1,7 @@
1
+ import { PawWalkDetails } from './pets.cjs';
2
+
1
3
  /** Rules for in-person meetups and the paper's chat. */
4
+
2
5
  declare const MEET_ACTIVITIES: readonly [{
3
6
  readonly value: "coffee";
4
7
  readonly label: "Coffee";
@@ -52,6 +55,7 @@ type MeetupInput = {
52
55
  startsAt?: unknown;
53
56
  notes?: unknown;
54
57
  capacity?: unknown;
58
+ walk?: Partial<PawWalkDetails>;
55
59
  };
56
60
  type PreparedMeetup = {
57
61
  activity: MeetActivity;
@@ -62,6 +66,7 @@ type PreparedMeetup = {
62
66
  startsAt: string;
63
67
  notes: string;
64
68
  capacity: number;
69
+ walk?: PawWalkDetails;
65
70
  };
66
71
  declare function isAdult(bornOn: string, now?: Date): boolean;
67
72
  declare function canHostMeetup(accountCreatedAt: string, now?: Date): boolean;
@@ -1,13 +1,14 @@
1
- import * as react from 'react';
2
- import { P as PublicPlace } from './meet-RWmfj3I3.cjs';
1
+ import * as React from 'react';
2
+ import { P as PublicPlace } from './meet-CO9Unz5M.cjs';
3
+ import './pets.cjs';
3
4
 
4
5
  declare function MeetHostForm({ places }: {
5
6
  places: PublicPlace[];
6
- }): react.JSX.Element;
7
- declare function PhoneCheckForm(): react.JSX.Element;
8
- declare function BirthdayForm(): react.JSX.Element;
7
+ }): React.JSX.Element;
8
+ declare function PhoneCheckForm(): React.JSX.Element;
9
+ declare function BirthdayForm(): React.JSX.Element;
9
10
  declare function MeetupChat({ meetupId }: {
10
11
  meetupId: string;
11
- }): react.JSX.Element;
12
+ }): React.JSX.Element;
12
13
 
13
14
  export { BirthdayForm, MeetHostForm, MeetupChat, PhoneCheckForm };
@@ -1,13 +1,14 @@
1
- import * as react from 'react';
2
- import { P as PublicPlace } from './meet-RWmfj3I3.js';
1
+ import * as React from 'react';
2
+ import { P as PublicPlace } from './meet-BWpxY20X.js';
3
+ import './pets.js';
3
4
 
4
5
  declare function MeetHostForm({ places }: {
5
6
  places: PublicPlace[];
6
- }): react.JSX.Element;
7
- declare function PhoneCheckForm(): react.JSX.Element;
8
- declare function BirthdayForm(): react.JSX.Element;
7
+ }): React.JSX.Element;
8
+ declare function PhoneCheckForm(): React.JSX.Element;
9
+ declare function BirthdayForm(): React.JSX.Element;
9
10
  declare function MeetupChat({ meetupId }: {
10
11
  meetupId: string;
11
- }): react.JSX.Element;
12
+ }): React.JSX.Element;
12
13
 
13
14
  export { BirthdayForm, MeetHostForm, MeetupChat, PhoneCheckForm };
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { MEET_ACTIVITIES } from './chunk-GB36YM56.js';
2
+ import { MEET_ACTIVITIES } from './chunk-AMLVCZDP.js';
3
+ import './chunk-AFJ6S5WJ.js';
3
4
  import { useState } from 'react';
4
5
  import { jsxs, jsx } from 'react/jsx-runtime';
5
6
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
 
5
+ // src/pets.ts
6
+ var PET_SAFETY = {
7
+ walks: "Walks are independently organized. Bay Area Paw does not supervise meetups or guarantee participants\u2019 safety. Meet in a public place, follow leash rules and respect other people and animals."};
8
+
5
9
  // src/meet.ts
6
10
  var MEET_ACTIVITIES = [
7
11
  { value: "coffee", label: "Coffee" },
@@ -69,8 +73,24 @@ function MeetupDetail({ meetup, joined }) {
69
73
  meetup.capacity
70
74
  ] }),
71
75
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "body", children: meetup.notes }),
72
- !joined && meetup.going < meetup.capacity && /* @__PURE__ */ jsxRuntime.jsx("form", { className: "actions", method: "post", action: `/api/meet/${encodeURIComponent(meetup.id)}/join`, children: /* @__PURE__ */ jsxRuntime.jsx("button", { className: "primary", type: "submit", children: "I\u2019ll be there" }) }),
73
- joined && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "meta", children: "You\u2019re going. Use the chat below. Keep phone numbers for when you meet." })
76
+ meetup.activity === "dogs" && /* @__PURE__ */ jsxRuntime.jsxs("aside", { children: [
77
+ meetup.walk && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
78
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
79
+ meetup.walk.duration_minutes,
80
+ " minutes",
81
+ meetup.walk.distance_km !== void 0 ? ` \xB7 ${meetup.walk.distance_km} km` : "",
82
+ " \xB7 ",
83
+ meetup.walk.leash === "required" ? "Leashes required" : "Follow venue leash rules"
84
+ ] }),
85
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: meetup.walk.size_guidance }),
86
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: meetup.walk.accessibility })
87
+ ] }),
88
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: PET_SAFETY.walks })
89
+ ] }),
90
+ meetup.status === "cancelled" && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "status", children: "This meetup has been cancelled." }),
91
+ meetup.status !== "cancelled" && !joined && meetup.going < meetup.capacity && /* @__PURE__ */ jsxRuntime.jsx("form", { className: "actions", method: "post", action: `/api/meet/${encodeURIComponent(meetup.id)}/join`, children: /* @__PURE__ */ jsxRuntime.jsx("button", { className: "primary", type: "submit", children: "I\u2019ll be there" }) }),
92
+ meetup.status !== "cancelled" && joined && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "meta", children: "You\u2019re going. Use the chat below. Keep phone numbers for when you meet." }),
93
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: "/corrections?resource=" + encodeURIComponent(`/meet/${meetup.id}`), children: "Report this meetup to the publication" }) })
74
94
  ] });
75
95
  }
76
96
  function activityChoices() {
@@ -1,22 +1,24 @@
1
- import * as react from 'react';
2
- import { a as PreparedMeetup } from './meet-RWmfj3I3.cjs';
1
+ import * as React from 'react';
2
+ import { a as PreparedMeetup } from './meet-CO9Unz5M.cjs';
3
+ import './pets.cjs';
3
4
 
4
5
  type MeetupCard = PreparedMeetup & {
5
6
  id: string;
6
7
  hostName: string;
7
8
  going: number;
8
9
  conversationId?: string | null;
10
+ status?: "open" | "cancelled";
9
11
  };
10
12
  declare function MeetBoard({ region, meetups }: {
11
13
  region: string;
12
14
  meetups: MeetupCard[];
13
- }): react.JSX.Element;
15
+ }): React.JSX.Element;
14
16
  declare function MeetupDetail({ meetup, joined }: {
15
17
  meetup: MeetupCard;
16
18
  joined: boolean;
17
- }): react.JSX.Element;
19
+ }): React.JSX.Element;
18
20
  declare function activityChoices(): {
19
- value: "coffee" | "walk" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer" | "other";
21
+ value: "walk" | "other" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer";
20
22
  label: string;
21
23
  }[];
22
24
 
@@ -1,22 +1,24 @@
1
- import * as react from 'react';
2
- import { a as PreparedMeetup } from './meet-RWmfj3I3.js';
1
+ import * as React from 'react';
2
+ import { a as PreparedMeetup } from './meet-BWpxY20X.js';
3
+ import './pets.js';
3
4
 
4
5
  type MeetupCard = PreparedMeetup & {
5
6
  id: string;
6
7
  hostName: string;
7
8
  going: number;
8
9
  conversationId?: string | null;
10
+ status?: "open" | "cancelled";
9
11
  };
10
12
  declare function MeetBoard({ region, meetups }: {
11
13
  region: string;
12
14
  meetups: MeetupCard[];
13
- }): react.JSX.Element;
15
+ }): React.JSX.Element;
14
16
  declare function MeetupDetail({ meetup, joined }: {
15
17
  meetup: MeetupCard;
16
18
  joined: boolean;
17
- }): react.JSX.Element;
19
+ }): React.JSX.Element;
18
20
  declare function activityChoices(): {
19
- value: "coffee" | "walk" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer" | "other";
21
+ value: "walk" | "other" | "coffee" | "hike" | "pickleball" | "tennis" | "soccer" | "bike" | "dogs" | "books" | "games" | "kids" | "volunteer";
20
22
  label: string;
21
23
  }[];
22
24
 
package/dist/meet-view.js CHANGED
@@ -1,5 +1,6 @@
1
- import { MEET_ACTIVITIES, activityLabel } from './chunk-GB36YM56.js';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { MEET_ACTIVITIES, activityLabel } from './chunk-AMLVCZDP.js';
2
+ import { PET_SAFETY } from './chunk-AFJ6S5WJ.js';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
4
 
4
5
  function MeetBoard({ region, meetups }) {
5
6
  return /* @__PURE__ */ jsxs("div", { className: "np-market", children: [
@@ -48,8 +49,24 @@ function MeetupDetail({ meetup, joined }) {
48
49
  meetup.capacity
49
50
  ] }),
50
51
  /* @__PURE__ */ jsx("div", { className: "body", children: meetup.notes }),
51
- !joined && meetup.going < meetup.capacity && /* @__PURE__ */ jsx("form", { className: "actions", method: "post", action: `/api/meet/${encodeURIComponent(meetup.id)}/join`, children: /* @__PURE__ */ jsx("button", { className: "primary", type: "submit", children: "I\u2019ll be there" }) }),
52
- joined && /* @__PURE__ */ jsx("p", { className: "meta", children: "You\u2019re going. Use the chat below. Keep phone numbers for when you meet." })
52
+ meetup.activity === "dogs" && /* @__PURE__ */ jsxs("aside", { children: [
53
+ meetup.walk && /* @__PURE__ */ jsxs(Fragment, { children: [
54
+ /* @__PURE__ */ jsxs("p", { children: [
55
+ meetup.walk.duration_minutes,
56
+ " minutes",
57
+ meetup.walk.distance_km !== void 0 ? ` \xB7 ${meetup.walk.distance_km} km` : "",
58
+ " \xB7 ",
59
+ meetup.walk.leash === "required" ? "Leashes required" : "Follow venue leash rules"
60
+ ] }),
61
+ /* @__PURE__ */ jsx("p", { children: meetup.walk.size_guidance }),
62
+ /* @__PURE__ */ jsx("p", { children: meetup.walk.accessibility })
63
+ ] }),
64
+ /* @__PURE__ */ jsx("p", { children: PET_SAFETY.walks })
65
+ ] }),
66
+ meetup.status === "cancelled" && /* @__PURE__ */ jsx("p", { role: "status", children: "This meetup has been cancelled." }),
67
+ meetup.status !== "cancelled" && !joined && meetup.going < meetup.capacity && /* @__PURE__ */ jsx("form", { className: "actions", method: "post", action: `/api/meet/${encodeURIComponent(meetup.id)}/join`, children: /* @__PURE__ */ jsx("button", { className: "primary", type: "submit", children: "I\u2019ll be there" }) }),
68
+ meetup.status !== "cancelled" && joined && /* @__PURE__ */ jsx("p", { className: "meta", children: "You\u2019re going. Use the chat below. Keep phone numbers for when you meet." }),
69
+ /* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx("a", { href: "/corrections?resource=" + encodeURIComponent(`/meet/${meetup.id}`), children: "Report this meetup to the publication" }) })
53
70
  ] });
54
71
  }
55
72
  function activityChoices() {
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { CSSProperties } from 'react';
3
3
 
4
4
  interface LocalNetworkBarProps {
@@ -10,6 +10,6 @@ interface LocalNetworkBarProps {
10
10
  * Global navigation bar for the Bay Area Local News network.
11
11
  * Links across independent publication origins, transferring consent tokens automatically.
12
12
  */
13
- declare function LocalNetworkBar({ currentSlug, className, style }: LocalNetworkBarProps): react.JSX.Element;
13
+ declare function LocalNetworkBar({ currentSlug, className, style }: LocalNetworkBarProps): React.JSX.Element;
14
14
 
15
15
  export { LocalNetworkBar, type LocalNetworkBarProps };
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as React from 'react';
2
2
  import { CSSProperties } from 'react';
3
3
 
4
4
  interface LocalNetworkBarProps {
@@ -10,6 +10,6 @@ interface LocalNetworkBarProps {
10
10
  * Global navigation bar for the Bay Area Local News network.
11
11
  * Links across independent publication origins, transferring consent tokens automatically.
12
12
  */
13
- declare function LocalNetworkBar({ currentSlug, className, style }: LocalNetworkBarProps): react.JSX.Element;
13
+ declare function LocalNetworkBar({ currentSlug, className, style }: LocalNetworkBarProps): React.JSX.Element;
14
14
 
15
15
  export { LocalNetworkBar, type LocalNetworkBarProps };
@@ -1,4 +1,4 @@
1
- import react__default, { CSSProperties } from 'react';
1
+ import React__default, { CSSProperties } from 'react';
2
2
 
3
3
  interface NetworkCopyrightNoticeProps {
4
4
  className?: string;
@@ -13,6 +13,6 @@ interface NetworkCopyrightNoticeProps {
13
13
  * Reusable copyright and institutional network parent attribution notice for all ScaleMule news publications.
14
14
  * Links to the official Bay Area News Network institutional website.
15
15
  */
16
- declare function NetworkCopyrightNotice({ className, style, publicationName, showPublicationNotice, targetBlank, prefix, showRightsReserved, }: NetworkCopyrightNoticeProps): react__default.JSX.Element;
16
+ declare function NetworkCopyrightNotice({ className, style, publicationName, showPublicationNotice, targetBlank, prefix, showRightsReserved, }: NetworkCopyrightNoticeProps): React__default.JSX.Element;
17
17
 
18
18
  export { NetworkCopyrightNotice, type NetworkCopyrightNoticeProps };
@@ -1,4 +1,4 @@
1
- import react__default, { CSSProperties } from 'react';
1
+ import React__default, { CSSProperties } from 'react';
2
2
 
3
3
  interface NetworkCopyrightNoticeProps {
4
4
  className?: string;
@@ -13,6 +13,6 @@ interface NetworkCopyrightNoticeProps {
13
13
  * Reusable copyright and institutional network parent attribution notice for all ScaleMule news publications.
14
14
  * Links to the official Bay Area News Network institutional website.
15
15
  */
16
- declare function NetworkCopyrightNotice({ className, style, publicationName, showPublicationNotice, targetBlank, prefix, showRightsReserved, }: NetworkCopyrightNoticeProps): react__default.JSX.Element;
16
+ declare function NetworkCopyrightNotice({ className, style, publicationName, showPublicationNotice, targetBlank, prefix, showRightsReserved, }: NetworkCopyrightNoticeProps): React__default.JSX.Element;
17
17
 
18
18
  export { NetworkCopyrightNotice, type NetworkCopyrightNoticeProps };