@scalemule/news-publication 0.0.48 → 0.0.49

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 (72) hide show
  1. package/README.md +28 -0
  2. package/dist/{chunk-GB36YM56.js → chunk-2MEYHM7M.js} +11 -1
  3. package/dist/chunk-4JRWZXAP.js +62 -0
  4. package/dist/chunk-MBBPEFDA.js +124 -0
  5. package/dist/chunk-TTLM7YOH.js +444 -0
  6. package/dist/chunk-ZXH3O537.js +251 -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 +4 -3
  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 +212 -0
  35. package/dist/pets-auth-server.d.cts +17 -0
  36. package/dist/pets-auth-server.d.ts +17 -0
  37. package/dist/pets-auth-server.js +155 -0
  38. package/dist/pets-forms.cjs +762 -0
  39. package/dist/pets-forms.d.cts +26 -0
  40. package/dist/pets-forms.d.ts +26 -0
  41. package/dist/pets-forms.js +712 -0
  42. package/dist/pets-interactions.cjs +332 -0
  43. package/dist/pets-interactions.d.cts +20 -0
  44. package/dist/pets-interactions.d.ts +20 -0
  45. package/dist/pets-interactions.js +319 -0
  46. package/dist/pets-publication.cjs +818 -0
  47. package/dist/pets-publication.d.cts +36 -0
  48. package/dist/pets-publication.d.ts +36 -0
  49. package/dist/pets-publication.js +177 -0
  50. package/dist/pets-server.cjs +289 -0
  51. package/dist/pets-server.d.cts +42 -0
  52. package/dist/pets-server.d.ts +42 -0
  53. package/dist/pets-server.js +2 -0
  54. package/dist/pets-view.cjs +541 -0
  55. package/dist/pets-view.d.cts +56 -0
  56. package/dist/pets-view.d.ts +56 -0
  57. package/dist/pets-view.js +4 -0
  58. package/dist/pets.cjs +138 -0
  59. package/dist/pets.d.cts +127 -0
  60. package/dist/pets.d.ts +127 -0
  61. package/dist/pets.js +1 -0
  62. package/dist/sponsorship-view.d.cts +2 -2
  63. package/dist/sponsorship-view.d.ts +2 -2
  64. package/dist/sponsorship-view.js +2 -62
  65. package/dist/story-review.d.cts +6 -6
  66. package/dist/story-review.d.ts +6 -6
  67. package/dist/theme-toggle.d.cts +2 -2
  68. package/dist/theme-toggle.d.ts +2 -2
  69. package/dist/verified-card.d.cts +3 -3
  70. package/dist/verified-card.d.ts +3 -3
  71. package/package.json +40 -3
  72. package/pets.css +538 -0
@@ -0,0 +1,541 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+
5
+ // src/pets.ts
6
+ var PET_SAFETY = {
7
+ recovery: "Bay Area Paw does not independently verify pet ownership. A report is a contributor\u2019s account. Never send money or verification codes to someone claiming to have found a pet. Keep microchip numbers and ownership evidence private.",
8
+ adoption: "Contact the named shelter or rescue for current availability, eligibility and adoption arrangements. Bay Area Paw is not the adoption agency and does not collect adoption payments."};
9
+ function safePetLink(raw) {
10
+ if (raw.startsWith("/") && !raw.startsWith("//") && !/[\\\r\n]/.test(raw))
11
+ return raw;
12
+ try {
13
+ const url = new URL(raw);
14
+ return url.protocol === "https:" && !url.username && !url.password ? url.href : void 0;
15
+ } catch {
16
+ return void 0;
17
+ }
18
+ }
19
+ function adoptionAvailability(source, now = Date.now()) {
20
+ const at = source?.verified_at ? Date.parse(source.verified_at) : NaN;
21
+ return source?.availability_confirmed && Number.isFinite(at) && at <= now && now - at <= 864e5 ? "confirmed" : "check_with_organization";
22
+ }
23
+
24
+ // src/sponsorships.ts
25
+ function safeSponsorUrl(value) {
26
+ if (typeof value !== "string" || value.length > 2048) return void 0;
27
+ try {
28
+ const url = new URL(value);
29
+ if (url.protocol !== "https:" || url.username || url.password)
30
+ return void 0;
31
+ return url.toString();
32
+ } catch {
33
+ return void 0;
34
+ }
35
+ }
36
+ function SponsorAcknowledgment({
37
+ creative,
38
+ label = "Community Partner",
39
+ preview = false,
40
+ acknowledgment
41
+ }) {
42
+ const logo = safeSponsorUrl(creative.logo_url);
43
+ const destination = safeSponsorUrl(creative.destination_url);
44
+ return /* @__PURE__ */ jsxRuntime.jsxs(
45
+ "aside",
46
+ {
47
+ className: "sm-sponsorship",
48
+ "aria-label": `${label}: ${creative.name}`,
49
+ "data-sponsorship": preview ? void 0 : acknowledgment?.campaign_id,
50
+ "data-placement-id": preview ? void 0 : acknowledgment?.placement_id,
51
+ "data-publication-id": preview ? void 0 : acknowledgment?.publication_id,
52
+ "data-sponsor-id": preview ? void 0 : acknowledgment?.sponsor_id,
53
+ children: [
54
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sm-sponsorship-copy", children: [
55
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "sm-sponsorship-label", children: [
56
+ label,
57
+ preview ? " \xB7 Illustrative preview" : ""
58
+ ] }),
59
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "sm-sponsorship-name", children: creative.name }),
60
+ creative.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "sm-sponsorship-description", children: creative.description }),
61
+ destination && /* @__PURE__ */ jsxRuntime.jsxs(
62
+ "a",
63
+ {
64
+ href: destination,
65
+ rel: "sponsored noopener noreferrer",
66
+ referrerPolicy: "no-referrer",
67
+ "data-analytics-skip": "true",
68
+ children: [
69
+ creative.link_label || "Learn more",
70
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sm-sponsorship-sr", children: [
71
+ " about ",
72
+ creative.name
73
+ ] })
74
+ ]
75
+ }
76
+ )
77
+ ] }),
78
+ logo && /* @__PURE__ */ jsxRuntime.jsx(
79
+ "img",
80
+ {
81
+ src: logo,
82
+ alt: `${creative.name} logo`,
83
+ loading: "lazy",
84
+ decoding: "async",
85
+ referrerPolicy: "no-referrer",
86
+ className: "sm-sponsorship-logo"
87
+ }
88
+ )
89
+ ]
90
+ }
91
+ );
92
+ }
93
+ function PawMark({ size = 36 }) {
94
+ return /* @__PURE__ */ jsxRuntime.jsxs(
95
+ "svg",
96
+ {
97
+ width: size,
98
+ height: size,
99
+ viewBox: "0 0 48 48",
100
+ fill: "currentColor",
101
+ "aria-hidden": "true",
102
+ children: [
103
+ /* @__PURE__ */ jsxRuntime.jsx(
104
+ "ellipse",
105
+ {
106
+ cx: "10",
107
+ cy: "19",
108
+ rx: "5.1",
109
+ ry: "6.5",
110
+ transform: "rotate(-25 10 19)"
111
+ }
112
+ ),
113
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "20", cy: "10", rx: "5", ry: "6.5", transform: "rotate(-8 20 10)" }),
114
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "32", cy: "12", rx: "5", ry: "6.5", transform: "rotate(14 32 12)" }),
115
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "40", cy: "23", rx: "4.7", ry: "6.2", transform: "rotate(30 40 23)" }),
116
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11 35c0-5 7-16 13-16s14 11 14 16c0 6-6 9-11 6-2-1-4-1-6 0-5 3-10 0-10-6Z" })
117
+ ]
118
+ }
119
+ );
120
+ }
121
+ function Photo({
122
+ resource,
123
+ mediaUrl,
124
+ large = false
125
+ }) {
126
+ const photo = resource.media.find((m) => m.status === "PUBLISHED");
127
+ const src = photo && safePetLink(mediaUrl(resource.id, photo.id));
128
+ if (!src)
129
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-photo-empty", children: [
130
+ /* @__PURE__ */ jsxRuntime.jsx(PawMark, { size: 64 }),
131
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "A story from your community" })
132
+ ] });
133
+ const separator = src.includes("?") ? "&" : "?";
134
+ return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: "paw-photo", children: [
135
+ /* @__PURE__ */ jsxRuntime.jsxs("picture", { children: [
136
+ /* @__PURE__ */ jsxRuntime.jsx(
137
+ "source",
138
+ {
139
+ type: "image/webp",
140
+ srcSet: `${src}${separator}width=640&format=webp 640w, ${src}${separator}width=1280&format=webp 1280w`,
141
+ sizes: large ? "(max-width: 700px) 100vw, 65vw" : "(max-width: 700px) 100vw, 33vw"
142
+ }
143
+ ),
144
+ /* @__PURE__ */ jsxRuntime.jsx(
145
+ "img",
146
+ {
147
+ src: `${src}${separator}width=1280&format=jpeg`,
148
+ srcSet: `${src}${separator}width=640&format=jpeg 640w, ${src}${separator}width=1280&format=jpeg 1280w`,
149
+ sizes: large ? "(max-width: 700px) 100vw, 65vw" : "(max-width: 700px) 100vw, 33vw",
150
+ alt: photo.caption || resource.content.name,
151
+ width: large ? 1200 : 640,
152
+ height: large ? 900 : 480,
153
+ loading: large ? "eager" : "lazy"
154
+ }
155
+ )
156
+ ] }),
157
+ photo.attribution && /* @__PURE__ */ jsxRuntime.jsxs("figcaption", { children: [
158
+ "Photograph: ",
159
+ photo.attribution
160
+ ] })
161
+ ] });
162
+ }
163
+ function ResourceCard(props) {
164
+ const href = safePetLink(props.href);
165
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: `paw-resource${props.memorial ? " paw-memorial" : ""}`, children: [
166
+ /* @__PURE__ */ jsxRuntime.jsx(Photo, { ...props }),
167
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-resource-copy", children: [
168
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "paw-context", children: [
169
+ props.label,
170
+ " \xB7 ",
171
+ props.community
172
+ ] }),
173
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { children: href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href, children: props.resource.content.name }) : props.resource.content.name }),
174
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: props.resource.content.story }),
175
+ props.resource.content.attribution && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "paw-credit", children: [
176
+ "Shared by ",
177
+ props.resource.content.attribution
178
+ ] })
179
+ ] })
180
+ ] });
181
+ }
182
+ function PetProfileCard(props) {
183
+ return /* @__PURE__ */ jsxRuntime.jsx(ResourceCard, { ...props, label: "Meet a neighbor" });
184
+ }
185
+ function PetCelebrationCard(props) {
186
+ return /* @__PURE__ */ jsxRuntime.jsx(
187
+ ResourceCard,
188
+ {
189
+ ...props,
190
+ memorial: props.resource.content.category === "memorial",
191
+ label: props.resource.content.category === "memorial" ? "In loving memory" : "A little joy worth sharing"
192
+ }
193
+ );
194
+ }
195
+ function LostPetNotice(props) {
196
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-notice", children: [
197
+ /* @__PURE__ */ jsxRuntime.jsx(
198
+ ResourceCard,
199
+ {
200
+ ...props,
201
+ label: props.resource.reunited_at ? "Reported reunited" : props.resource.kind === "found" ? "Found pet" : "Lost pet"
202
+ }
203
+ ),
204
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-safety", children: PET_SAFETY.recovery })
205
+ ] });
206
+ }
207
+ function AdoptionListingCard(props) {
208
+ const source = props.resource.content.source;
209
+ const url = source && safePetLink(source.official_url);
210
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
211
+ /* @__PURE__ */ jsxRuntime.jsx(ResourceCard, { ...props, label: "Adoption discovery" }),
212
+ source && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "paw-source", children: [
213
+ adoptionAvailability(source) === "confirmed" ? "Availability recently confirmed." : "Check current availability with the organization.",
214
+ " ",
215
+ url && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: url, rel: "noopener noreferrer", children: [
216
+ "Visit ",
217
+ source.organization
218
+ ] }),
219
+ source.verified_at && /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
220
+ "Source checked",
221
+ " ",
222
+ new Date(source.verified_at).toLocaleDateString("en-US", {
223
+ timeZone: "America/Los_Angeles"
224
+ })
225
+ ] })
226
+ ] })
227
+ ] });
228
+ }
229
+ function PetEventCard(props) {
230
+ const event = props.resource.content.event, source = props.resource.content.source;
231
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
232
+ /* @__PURE__ */ jsxRuntime.jsx(ResourceCard, { ...props, label: "Pet community event" }),
233
+ event && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "paw-source", children: [
234
+ /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: event.starts_at, children: new Date(event.starts_at).toLocaleString("en-US", {
235
+ timeZone: "America/Los_Angeles",
236
+ dateStyle: "medium",
237
+ timeStyle: "short"
238
+ }) }),
239
+ " ",
240
+ "\xB7 Pacific time",
241
+ /* @__PURE__ */ jsxRuntime.jsx("br", {}),
242
+ event.cost_verified && event.cost === "free" ? "Verified free event" : event.cost_verified && event.cost === "paid" ? "Paid event \u2014 check official pricing" : "Check the official organization for cost"
243
+ ] }),
244
+ source && /* @__PURE__ */ jsxRuntime.jsx("p", { children: /* @__PURE__ */ jsxRuntime.jsxs("a", { href: safePetLink(source.official_url), rel: "noopener noreferrer", children: [
245
+ "Official details from ",
246
+ source.organization
247
+ ] }) })
248
+ ] });
249
+ }
250
+ function PawOfTheWeekCard(props) {
251
+ const href = safePetLink(props.href);
252
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "paw-spotlight", children: [
253
+ /* @__PURE__ */ jsxRuntime.jsx(Photo, { ...props, large: true }),
254
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-spotlight-copy", children: [
255
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "paw-context", children: [
256
+ props.community,
257
+ "\u2019s Paw of the Week"
258
+ ] }),
259
+ /* @__PURE__ */ jsxRuntime.jsxs("h2", { children: [
260
+ "Meet ",
261
+ props.resource.content.name,
262
+ "."
263
+ ] }),
264
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: props.resource.content.story }),
265
+ href && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "paw-button", href, children: "Read the story" }),
266
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-credit", children: "Chosen by our editors. Always free to submit." })
267
+ ] })
268
+ ] });
269
+ }
270
+ function PetFriendlyPlaceCard({
271
+ name,
272
+ description,
273
+ href,
274
+ verified,
275
+ verifiedAt
276
+ }) {
277
+ const url = safePetLink(href);
278
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: "paw-place", children: [
279
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-context", children: verified ? "Verified directory information" : "Community suggestion \u2014 not verified" }),
280
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { children: url ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: url, children: name }) : name }),
281
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: description }),
282
+ verifiedAt && /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
283
+ "Last checked ",
284
+ verifiedAt
285
+ ] })
286
+ ] });
287
+ }
288
+ function SponsorAcknowledgment2({
289
+ acknowledgment,
290
+ now = Date.now()
291
+ }) {
292
+ const start = Date.parse(acknowledgment.starts_at), end = Date.parse(acknowledgment.ends_at);
293
+ if (!(start <= now && now < end)) return null;
294
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-sponsor", children: [
295
+ /* @__PURE__ */ jsxRuntime.jsx(
296
+ SponsorAcknowledgment,
297
+ {
298
+ creative: acknowledgment.creative,
299
+ acknowledgment,
300
+ label: "Sponsored"
301
+ }
302
+ ),
303
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "Paid community sponsorship. Sponsorship does not influence editorial selections and is not an endorsement." })
304
+ ] });
305
+ }
306
+ function PetsSection({
307
+ name = "Bay Area Paw",
308
+ tagline = "Happier pets. Closer communities.",
309
+ community,
310
+ communities,
311
+ resources,
312
+ spotlight,
313
+ acknowledgments = [],
314
+ basePath = "/pets",
315
+ mediaUrl,
316
+ contributeUrl,
317
+ placesUrl,
318
+ walksUrl,
319
+ nextUrl,
320
+ unavailable,
321
+ regionLabel,
322
+ resourceBasePath,
323
+ browseBasePath = "/browse",
324
+ eventsUrl,
325
+ accountUrl
326
+ }) {
327
+ const location = community?.name || regionLabel || "the Bay Area";
328
+ const link = (id) => `${resourceBasePath || basePath}/${encodeURIComponent(id)}`;
329
+ const local = (id) => communities.find((c) => c.id === id)?.name || "Our community";
330
+ const communityQuery = community ? "?community=" + encodeURIComponent(community.slug) : "";
331
+ const photoBoard = resources.filter(
332
+ (r) => r.kind === "photo" || r.kind === "profile"
333
+ );
334
+ const celebrations = resources.filter((r) => r.kind === "celebration");
335
+ const notices = resources.filter((r) => ["lost", "found"].includes(r.kind));
336
+ const adoptions = resources.filter((r) => r.kind === "adoption");
337
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw", children: [
338
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "paw-masthead", children: [
339
+ /* @__PURE__ */ jsxRuntime.jsxs("a", { href: basePath || "/", className: "paw-brand", children: [
340
+ /* @__PURE__ */ jsxRuntime.jsx(PawMark, {}),
341
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: name })
342
+ ] }),
343
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: tagline }),
344
+ accountUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { href: safePetLink(accountUrl), children: "My pets" }),
345
+ contributeUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "paw-button", href: safePetLink(contributeUrl), children: "Share your pet" })
346
+ ] }),
347
+ /* @__PURE__ */ jsxRuntime.jsxs("nav", { className: "paw-nav", "aria-label": "Pet community", children: [
348
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#neighbors", children: "Our pets" }),
349
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#lost-found", children: "Lost & found" }),
350
+ walksUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { href: safePetLink(walksUrl), children: "Paw Walks" }),
351
+ placesUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { href: safePetLink(placesUrl), children: "Paw Places" }),
352
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#adoption", children: "Adoption" }),
353
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#celebrations", children: "Celebrations" }),
354
+ eventsUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { href: safePetLink(eventsUrl), children: "Events" })
355
+ ] }),
356
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-community", children: [
357
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
358
+ "A little closer to ",
359
+ location,
360
+ "."
361
+ ] }),
362
+ /* @__PURE__ */ jsxRuntime.jsxs("form", { action: basePath || "/", method: "get", children: [
363
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: "paw-community", children: "Your community" }),
364
+ /* @__PURE__ */ jsxRuntime.jsxs(
365
+ "select",
366
+ {
367
+ id: "paw-community",
368
+ name: "community",
369
+ defaultValue: community?.slug || "",
370
+ children: [
371
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "All communities" }),
372
+ communities.map((c) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: c.slug, children: c.name }, c.id))
373
+ ]
374
+ }
375
+ ),
376
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "submit", children: "Explore" })
377
+ ] })
378
+ ] }),
379
+ unavailable ? /* @__PURE__ */ jsxRuntime.jsxs("div", { role: "status", className: "paw-empty", children: [
380
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { children: "Your community is on its way." }),
381
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "We can\u2019t load the pet community right now. Please try again shortly." })
382
+ ] }) : spotlight ? /* @__PURE__ */ jsxRuntime.jsx(
383
+ PawOfTheWeekCard,
384
+ {
385
+ resource: spotlight,
386
+ community: local(spotlight.area_id),
387
+ href: link(spotlight.id),
388
+ mediaUrl
389
+ }
390
+ ) : /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "paw-welcome", children: [
391
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
392
+ /* @__PURE__ */ jsxRuntime.jsxs("h1", { children: [
393
+ "Every pet has a story.",
394
+ /* @__PURE__ */ jsxRuntime.jsx("br", {}),
395
+ "Let\u2019s meet yours."
396
+ ] }),
397
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "A place for familiar faces, happy reunions and the everyday joy of life with pets." }),
398
+ contributeUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "paw-button", href: safePetLink(contributeUrl), children: "Submit for Paw of the Week" }),
399
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "Free to enter. Thoughtfully selected by local editors." })
400
+ ] }),
401
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-emblem", children: [
402
+ /* @__PURE__ */ jsxRuntime.jsx(PawMark, { size: 180 }),
403
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
404
+ "Good neighbors.",
405
+ /* @__PURE__ */ jsxRuntime.jsx("br", {}),
406
+ "Great companions."
407
+ ] })
408
+ ] })
409
+ ] }),
410
+ !unavailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
411
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "neighbors", className: "paw-section", children: [
412
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-section-heading", children: [
413
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { children: "Friends around the corner" }),
414
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Small moments. Very good company." })
415
+ ] }),
416
+ photoBoard.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "paw-gallery", children: photoBoard.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
417
+ PetProfileCard,
418
+ {
419
+ resource: r,
420
+ community: local(r.area_id),
421
+ href: link(r.id),
422
+ mediaUrl
423
+ },
424
+ r.id
425
+ )) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-empty", children: "The photo board is ready for its first neighbors. Share a photograph and a few words about your pet." }),
426
+ /* @__PURE__ */ jsxRuntime.jsx(
427
+ "a",
428
+ {
429
+ href: safePetLink(browseBasePath + "/neighbors" + communityQuery),
430
+ children: "Browse all community pets"
431
+ }
432
+ )
433
+ ] }),
434
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "lost-found", className: "paw-section paw-recovery", children: [
435
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-section-heading", children: [
436
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { children: "Let\u2019s help them get home." }),
437
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Lost & found is always free." })
438
+ ] }),
439
+ notices.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "paw-gallery", children: notices.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
440
+ LostPetNotice,
441
+ {
442
+ resource: r,
443
+ community: local(r.area_id),
444
+ href: link(r.id),
445
+ mediaUrl
446
+ },
447
+ r.id
448
+ )) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { children: "No current, reviewed notices in this community." }),
449
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-safety", children: PET_SAFETY.recovery }),
450
+ /* @__PURE__ */ jsxRuntime.jsx(
451
+ "a",
452
+ {
453
+ href: safePetLink(
454
+ browseBasePath + "/lost_found" + communityQuery
455
+ ),
456
+ children: "Open the lost & found board"
457
+ }
458
+ )
459
+ ] }),
460
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "celebrations", className: "paw-section", children: [
461
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-section-heading", children: [
462
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { children: "A life full of little milestones" }),
463
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Birthdays, adoption days, new beginnings and fond memories." })
464
+ ] }),
465
+ celebrations.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "paw-gallery", children: celebrations.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
466
+ PetCelebrationCard,
467
+ {
468
+ resource: r,
469
+ community: local(r.area_id),
470
+ href: link(r.id),
471
+ mediaUrl
472
+ },
473
+ r.id
474
+ )) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-empty", children: "Celebrate someone who makes your days brighter. Every story is reviewed with care." }),
475
+ /* @__PURE__ */ jsxRuntime.jsx(
476
+ "a",
477
+ {
478
+ href: safePetLink(
479
+ browseBasePath + "/celebration" + communityQuery
480
+ ),
481
+ children: "More pet celebrations"
482
+ }
483
+ )
484
+ ] }),
485
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { id: "adoption", className: "paw-section", children: [
486
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "paw-section-heading", children: [
487
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { children: "A new chapter starts with hello." }),
488
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Discover animals through local shelters and rescue organizations." })
489
+ ] }),
490
+ adoptions.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "paw-gallery", children: adoptions.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
491
+ AdoptionListingCard,
492
+ {
493
+ resource: r,
494
+ community: local(r.area_id),
495
+ href: link(r.id),
496
+ mediaUrl
497
+ },
498
+ r.id
499
+ )) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-empty", children: "Our editors are gathering official shelter and rescue listings. Check directly with your local organization for current availability." }),
500
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "paw-safety", children: PET_SAFETY.adoption }),
501
+ /* @__PURE__ */ jsxRuntime.jsx(
502
+ "a",
503
+ {
504
+ href: safePetLink(browseBasePath + "/adoption" + communityQuery),
505
+ children: "Explore adoption listings"
506
+ }
507
+ )
508
+ ] }),
509
+ nextUrl && /* @__PURE__ */ jsxRuntime.jsx("a", { className: "paw-button", href: safePetLink(nextUrl), children: "More community pets" })
510
+ ] }),
511
+ acknowledgments.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-label": "Community support", children: [
512
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Bay Area Paw is made possible with support from our community partners." }),
513
+ acknowledgments.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
514
+ SponsorAcknowledgment2,
515
+ {
516
+ acknowledgment: item
517
+ },
518
+ item.campaign_id + item.placement_id
519
+ ))
520
+ ] }),
521
+ /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "paw-footer", children: [
522
+ /* @__PURE__ */ jsxRuntime.jsx(PawMark, { size: 24 }),
523
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
524
+ "A community project from Bay Area News Network.",
525
+ /* @__PURE__ */ jsxRuntime.jsx("br", {}),
526
+ tagline
527
+ ] })
528
+ ] })
529
+ ] });
530
+ }
531
+
532
+ exports.AdoptionListingCard = AdoptionListingCard;
533
+ exports.LostPetNotice = LostPetNotice;
534
+ exports.PawMark = PawMark;
535
+ exports.PawOfTheWeekCard = PawOfTheWeekCard;
536
+ exports.PetCelebrationCard = PetCelebrationCard;
537
+ exports.PetEventCard = PetEventCard;
538
+ exports.PetFriendlyPlaceCard = PetFriendlyPlaceCard;
539
+ exports.PetProfileCard = PetProfileCard;
540
+ exports.PetsSection = PetsSection;
541
+ exports.SponsorAcknowledgment = SponsorAcknowledgment2;
@@ -0,0 +1,56 @@
1
+ import React__default from 'react';
2
+ import { PetResource, PetCommunity } from './pets.cjs';
3
+ import { P as PublicAcknowledgment } from './sponsorships-CtnBe3S8.cjs';
4
+
5
+ declare function PawMark({ size }: {
6
+ size?: number;
7
+ }): React__default.JSX.Element;
8
+ type ResourceProps = {
9
+ resource: PetResource;
10
+ community: string;
11
+ href: string;
12
+ mediaUrl: (resource: string, media: string) => string;
13
+ };
14
+ declare function PetProfileCard(props: ResourceProps): React__default.JSX.Element;
15
+ declare function PetCelebrationCard(props: ResourceProps): React__default.JSX.Element;
16
+ declare function LostPetNotice(props: ResourceProps): React__default.JSX.Element;
17
+ declare function AdoptionListingCard(props: ResourceProps): React__default.JSX.Element;
18
+ declare function PetEventCard(props: ResourceProps): React__default.JSX.Element;
19
+ declare function PawOfTheWeekCard(props: ResourceProps): React__default.JSX.Element;
20
+ /** Uses a resolved Community Maps feature; supported facts remain in the directory. */
21
+ declare function PetFriendlyPlaceCard({ name, description, href, verified, verifiedAt, }: {
22
+ name: string;
23
+ description: string;
24
+ href: string;
25
+ verified: boolean;
26
+ verifiedAt?: string;
27
+ }): React__default.JSX.Element;
28
+ /** The caller must supply the existing sponsorship service's public projection. */
29
+ declare function SponsorAcknowledgment({ acknowledgment, now, }: {
30
+ acknowledgment: PublicAcknowledgment;
31
+ now?: number;
32
+ }): React__default.JSX.Element | null;
33
+ type PetsSectionProps = {
34
+ name?: string;
35
+ tagline?: string;
36
+ community?: PetCommunity;
37
+ communities: PetCommunity[];
38
+ resources: PetResource[];
39
+ spotlight?: PetResource;
40
+ acknowledgments?: PublicAcknowledgment[];
41
+ basePath?: string;
42
+ mediaUrl: ResourceProps["mediaUrl"];
43
+ contributeUrl?: string;
44
+ placesUrl?: string;
45
+ walksUrl?: string;
46
+ nextUrl?: string;
47
+ unavailable?: boolean;
48
+ regionLabel?: string;
49
+ resourceBasePath?: string;
50
+ browseBasePath?: string;
51
+ eventsUrl?: string;
52
+ accountUrl?: string;
53
+ };
54
+ declare function PetsSection({ name, tagline, community, communities, resources, spotlight, acknowledgments, basePath, mediaUrl, contributeUrl, placesUrl, walksUrl, nextUrl, unavailable, regionLabel, resourceBasePath, browseBasePath, eventsUrl, accountUrl, }: PetsSectionProps): React__default.JSX.Element;
55
+
56
+ export { AdoptionListingCard, LostPetNotice, PawMark, PawOfTheWeekCard, PetCelebrationCard, PetEventCard, PetFriendlyPlaceCard, PetProfileCard, PetsSection, type PetsSectionProps, SponsorAcknowledgment };
@@ -0,0 +1,56 @@
1
+ import React__default from 'react';
2
+ import { PetResource, PetCommunity } from './pets.js';
3
+ import { P as PublicAcknowledgment } from './sponsorships-CtnBe3S8.js';
4
+
5
+ declare function PawMark({ size }: {
6
+ size?: number;
7
+ }): React__default.JSX.Element;
8
+ type ResourceProps = {
9
+ resource: PetResource;
10
+ community: string;
11
+ href: string;
12
+ mediaUrl: (resource: string, media: string) => string;
13
+ };
14
+ declare function PetProfileCard(props: ResourceProps): React__default.JSX.Element;
15
+ declare function PetCelebrationCard(props: ResourceProps): React__default.JSX.Element;
16
+ declare function LostPetNotice(props: ResourceProps): React__default.JSX.Element;
17
+ declare function AdoptionListingCard(props: ResourceProps): React__default.JSX.Element;
18
+ declare function PetEventCard(props: ResourceProps): React__default.JSX.Element;
19
+ declare function PawOfTheWeekCard(props: ResourceProps): React__default.JSX.Element;
20
+ /** Uses a resolved Community Maps feature; supported facts remain in the directory. */
21
+ declare function PetFriendlyPlaceCard({ name, description, href, verified, verifiedAt, }: {
22
+ name: string;
23
+ description: string;
24
+ href: string;
25
+ verified: boolean;
26
+ verifiedAt?: string;
27
+ }): React__default.JSX.Element;
28
+ /** The caller must supply the existing sponsorship service's public projection. */
29
+ declare function SponsorAcknowledgment({ acknowledgment, now, }: {
30
+ acknowledgment: PublicAcknowledgment;
31
+ now?: number;
32
+ }): React__default.JSX.Element | null;
33
+ type PetsSectionProps = {
34
+ name?: string;
35
+ tagline?: string;
36
+ community?: PetCommunity;
37
+ communities: PetCommunity[];
38
+ resources: PetResource[];
39
+ spotlight?: PetResource;
40
+ acknowledgments?: PublicAcknowledgment[];
41
+ basePath?: string;
42
+ mediaUrl: ResourceProps["mediaUrl"];
43
+ contributeUrl?: string;
44
+ placesUrl?: string;
45
+ walksUrl?: string;
46
+ nextUrl?: string;
47
+ unavailable?: boolean;
48
+ regionLabel?: string;
49
+ resourceBasePath?: string;
50
+ browseBasePath?: string;
51
+ eventsUrl?: string;
52
+ accountUrl?: string;
53
+ };
54
+ declare function PetsSection({ name, tagline, community, communities, resources, spotlight, acknowledgments, basePath, mediaUrl, contributeUrl, placesUrl, walksUrl, nextUrl, unavailable, regionLabel, resourceBasePath, browseBasePath, eventsUrl, accountUrl, }: PetsSectionProps): React__default.JSX.Element;
55
+
56
+ export { AdoptionListingCard, LostPetNotice, PawMark, PawOfTheWeekCard, PetCelebrationCard, PetEventCard, PetFriendlyPlaceCard, PetProfileCard, PetsSection, type PetsSectionProps, SponsorAcknowledgment };
@@ -0,0 +1,4 @@
1
+ export { AdoptionListingCard, LostPetNotice, PawMark, PawOfTheWeekCard, PetCelebrationCard, PetEventCard, PetFriendlyPlaceCard, PetProfileCard, PetsSection, SponsorAcknowledgment } from './chunk-TTLM7YOH.js';
2
+ import './chunk-4JRWZXAP.js';
3
+ import './chunk-66GI2IX6.js';
4
+ import './chunk-MBBPEFDA.js';