@marvalt/shcoder 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -93,11 +93,11 @@ function useMembers(attrs) {
93
93
  orderby: attrs.orderby || 'date',
94
94
  order: attrs.order || 'desc',
95
95
  });
96
- // Process members to match Member interface
96
+ // Process members: preserve all keys (including ACF in member_meta); only normalize featured_image_urls
97
97
  const processedMembers = filtered.map((member) => {
98
98
  const processed = {
99
99
  ...member,
100
- member_meta: member.member_meta || {},
100
+ member_meta: member.member_meta ?? {},
101
101
  featured_image_urls: extractFeaturedImage(member),
102
102
  };
103
103
  return processed;
@@ -139,11 +139,11 @@ function useMembers(attrs) {
139
139
  throw new Error(`Failed to fetch members: ${response.statusText}`);
140
140
  }
141
141
  const data = await response.json();
142
- // Process members to extract featured images from _embedded
142
+ // Process members: preserve all keys (including ACF in member_meta); only normalize featured_image_urls
143
143
  const processedMembers = data.map((member) => {
144
144
  const processed = {
145
145
  ...member,
146
- member_meta: member.member_meta || {},
146
+ member_meta: member.member_meta ?? {},
147
147
  featured_image_urls: extractFeaturedImage(member),
148
148
  };
149
149
  return processed;
@@ -183,10 +183,10 @@ function useMember(id) {
183
183
  const provider = staticDataProvider();
184
184
  const found = provider.getMemberById(id);
185
185
  if (found) {
186
- // Process member to match Member interface
186
+ // Preserve all keys (including ACF in member_meta); only normalize featured_image_urls
187
187
  const processed = {
188
188
  ...found,
189
- member_meta: found.member_meta || {},
189
+ member_meta: found.member_meta ?? {},
190
190
  featured_image_urls: extractFeaturedImage(found),
191
191
  };
192
192
  setMember(processed);
@@ -208,10 +208,10 @@ function useMember(id) {
208
208
  throw new Error(`Failed to fetch member: ${response.statusText}`);
209
209
  }
210
210
  const data = await response.json();
211
- // Process member to extract featured image from _embedded
211
+ // Preserve all keys (including ACF in member_meta); only normalize featured_image_urls
212
212
  const processed = {
213
213
  ...data,
214
- member_meta: data.member_meta || {},
214
+ member_meta: data.member_meta ?? {},
215
215
  featured_image_urls: extractFeaturedImage(data),
216
216
  };
217
217
  setMember(processed);
@@ -1767,7 +1767,7 @@ function getCloudflareVariantUrl(url, options) {
1767
1767
  }
1768
1768
  const { width, height } = options;
1769
1769
  const base = url.endsWith('/') ? url.slice(0, -1) : url;
1770
- const variant = `w=${Math.max(1, Math.floor(width))}` + (`,h=${Math.max(1, Math.floor(height))}` );
1770
+ const variant = `w=${Math.max(1, Math.floor(width))}` + (height != null ? `,h=${Math.max(1, Math.floor(height))}` : '');
1771
1771
  return `${base}/${variant}`;
1772
1772
  }
1773
1773
 
@@ -1775,7 +1775,7 @@ function getCloudflareVariantUrl(url, options) {
1775
1775
  * MemberCardsGrid component - displays multiple members in a grid
1776
1776
  * Usage: [member_cards tax="leadership" cols="3" image="true"]
1777
1777
  */
1778
- const MemberCardsGrid = ({ tax, category, role, cols = '3', image = 'true', limit, orderby, order, className = '', }) => {
1778
+ const MemberCardsGrid = ({ tax, category, role, cols = '3', image = 'true', limit, orderby, order, className = '', getProfileUrl, profileButtonLabel, renderCardAction, }) => {
1779
1779
  const { members, loading, error } = useMembers({
1780
1780
  tax: tax || category,
1781
1781
  role,
@@ -1803,18 +1803,28 @@ const MemberCardsGrid = ({ tax, category, role, cols = '3', image = 'true', limi
1803
1803
  }[colsNum] || 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3';
1804
1804
  return (jsxRuntimeExports.jsx("div", { className: `member-cards-grid grid ${gridCols} gap-6 ${className}`, children: members.map((member) => {
1805
1805
  const meta = member.member_meta || {};
1806
- const rawImageUrl = showImage
1807
- ? (member.featured_image_urls?.medium?.url || member.featured_image_urls?.full?.url)
1806
+ // Prefer Cloudflare URL from static generator enrichment (featured_media_cloudflare_url), then featured_image_urls
1807
+ const cfFromEnrichment = showImage && typeof member.featured_media_cloudflare_url === 'string'
1808
+ ? member.featured_media_cloudflare_url
1808
1809
  : null;
1809
- // Prefer Cloudflare URLs with 9:16 @ 720x1280, but fall back to any URL so images still render
1810
- const imageUrl = rawImageUrl
1811
- ? (isCloudflareImageUrl(rawImageUrl)
1812
- ? getCloudflareVariantUrl(rawImageUrl, { width: 720, height: 1280 })
1813
- : rawImageUrl)
1810
+ const rawImageUrl = showImage && !cfFromEnrichment
1811
+ ? (member.featured_image_urls?.medium?.url || member.featured_image_urls?.full?.url)
1814
1812
  : null;
1813
+ const imageUrl = cfFromEnrichment
1814
+ ? getCloudflareVariantUrl(cfFromEnrichment, { width: 720, height: 1280 })
1815
+ : rawImageUrl
1816
+ ? (isCloudflareImageUrl(rawImageUrl)
1817
+ ? getCloudflareVariantUrl(rawImageUrl, { width: 720, height: 1280 })
1818
+ : rawImageUrl)
1819
+ : null;
1815
1820
  const fullName = [meta.members_firstname, meta.members_last_name].filter(Boolean).join(' ')
1816
1821
  || member.title.rendered;
1817
- return (jsxRuntimeExports.jsxs("div", { className: "member-card bg-white rounded-lg shadow-md overflow-hidden", children: [imageUrl && (jsxRuntimeExports.jsx("div", { className: "member-card-image aspect-[9/16] w-full overflow-hidden bg-slate-100", children: jsxRuntimeExports.jsx("img", { src: imageUrl, alt: fullName, className: "h-full w-full object-cover" }) })), jsxRuntimeExports.jsxs("div", { className: "member-card-content p-6", children: [jsxRuntimeExports.jsx("h3", { className: "member-card-name text-xl font-bold mb-2", children: fullName }), meta.member_role && (jsxRuntimeExports.jsx("p", { className: "member-card-role text-gray-600 mb-2", children: meta.member_role })), meta.business_name && (jsxRuntimeExports.jsx("p", { className: "member-card-company text-sm text-gray-500 mb-2", children: meta.business_name })), meta.tagline && (jsxRuntimeExports.jsx("p", { className: "member-card-tagline text-sm italic mb-3", children: meta.tagline })), meta.member_pitch && (jsxRuntimeExports.jsx("p", { className: "member-card-pitch text-sm mb-3 line-clamp-3", children: meta.member_pitch })), meta.website && (jsxRuntimeExports.jsx("a", { href: meta.website, target: "_blank", rel: "noopener noreferrer", className: "member-card-website text-blue-600 hover:underline text-sm", children: "Visit Website \u2192" }))] })] }, member.id));
1822
+ const profileUrl = getProfileUrl?.(member);
1823
+ const hasExplicitAction = !!(profileButtonLabel || renderCardAction);
1824
+ const wrapCardInLink = profileUrl && !hasExplicitAction;
1825
+ const cardContent = (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [imageUrl && (jsxRuntimeExports.jsx("div", { className: "member-card-image aspect-[9/16] w-full overflow-hidden bg-slate-100", children: jsxRuntimeExports.jsx("img", { src: imageUrl, alt: fullName, className: "h-full w-full object-cover" }) })), jsxRuntimeExports.jsxs("div", { className: "member-card-content p-6", children: [jsxRuntimeExports.jsx("h3", { className: "member-card-name text-xl font-bold mb-2", children: fullName }), meta.member_role && (jsxRuntimeExports.jsx("p", { className: "member-card-role text-gray-600 mb-2", children: meta.member_role })), meta.business_name && (jsxRuntimeExports.jsx("p", { className: "member-card-company text-sm text-gray-500 mb-2", children: meta.business_name })), meta.tagline && (jsxRuntimeExports.jsx("p", { className: "member-card-tagline text-sm italic mb-3", children: meta.tagline })), meta.member_pitch && (jsxRuntimeExports.jsx("p", { className: "member-card-pitch text-sm mb-3 line-clamp-3", children: meta.member_pitch })), meta.website && (jsxRuntimeExports.jsx("a", { href: meta.website, target: "_blank", rel: "noopener noreferrer", className: "member-card-website text-blue-600 hover:underline text-sm", children: "Visit Website \u2192" })), hasExplicitAction && (jsxRuntimeExports.jsx("div", { className: "member-card-actions mt-4", children: renderCardAction ? (renderCardAction(member)) : profileUrl && profileButtonLabel ? (jsxRuntimeExports.jsx("a", { href: profileUrl, className: "member-card-profile-button inline-block px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500", children: profileButtonLabel })) : null }))] })] }));
1826
+ const cardInner = wrapCardInLink ? (jsxRuntimeExports.jsx("a", { href: profileUrl, className: "member-card-link block h-full text-inherit no-underline hover:opacity-95 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500 rounded-lg", children: cardContent })) : (cardContent);
1827
+ return (jsxRuntimeExports.jsx("div", { className: "member-card bg-white rounded-lg shadow-md overflow-hidden", children: cardInner }, member.id));
1818
1828
  }) }));
1819
1829
  };
1820
1830