@businessdash/sdk 0.9.60

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 (268) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +899 -0
  3. package/dist/adapters-revalidate.d.ts +44 -0
  4. package/dist/adapters-revalidate.d.ts.map +1 -0
  5. package/dist/adapters-revalidate.js +68 -0
  6. package/dist/adapters-revalidate.js.map +1 -0
  7. package/dist/alpha.d.ts +21 -0
  8. package/dist/alpha.d.ts.map +1 -0
  9. package/dist/alpha.js +21 -0
  10. package/dist/alpha.js.map +1 -0
  11. package/dist/analytics-core.d.ts +34 -0
  12. package/dist/analytics-core.d.ts.map +1 -0
  13. package/dist/analytics-core.js +138 -0
  14. package/dist/analytics-core.js.map +1 -0
  15. package/dist/analytics-server.d.ts +54 -0
  16. package/dist/analytics-server.d.ts.map +1 -0
  17. package/dist/analytics-server.js +78 -0
  18. package/dist/analytics-server.js.map +1 -0
  19. package/dist/attribution-logo.d.ts +2 -0
  20. package/dist/attribution-logo.d.ts.map +1 -0
  21. package/dist/attribution-logo.js +5 -0
  22. package/dist/attribution-logo.js.map +1 -0
  23. package/dist/auth-handler.d.ts +92 -0
  24. package/dist/auth-handler.d.ts.map +1 -0
  25. package/dist/auth-handler.js +277 -0
  26. package/dist/auth-handler.js.map +1 -0
  27. package/dist/biab-forms.css +484 -0
  28. package/dist/cli.d.ts +46 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +1824 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/client.d.ts +1681 -0
  33. package/dist/client.d.ts.map +1 -0
  34. package/dist/client.js +2845 -0
  35. package/dist/client.js.map +1 -0
  36. package/dist/collections.d.ts +13 -0
  37. package/dist/collections.d.ts.map +1 -0
  38. package/dist/collections.js +13 -0
  39. package/dist/collections.js.map +1 -0
  40. package/dist/contracts.d.ts +14609 -0
  41. package/dist/contracts.d.ts.map +1 -0
  42. package/dist/contracts.js +2428 -0
  43. package/dist/contracts.js.map +1 -0
  44. package/dist/data-model-schema.d.ts +962 -0
  45. package/dist/data-model-schema.d.ts.map +1 -0
  46. package/dist/data-model-schema.js +2295 -0
  47. package/dist/data-model-schema.js.map +1 -0
  48. package/dist/distribution.d.ts +38 -0
  49. package/dist/distribution.d.ts.map +1 -0
  50. package/dist/distribution.js +61 -0
  51. package/dist/distribution.js.map +1 -0
  52. package/dist/element.d.ts +121 -0
  53. package/dist/element.d.ts.map +1 -0
  54. package/dist/element.js +276 -0
  55. package/dist/element.js.map +1 -0
  56. package/dist/enums.d.ts +25 -0
  57. package/dist/enums.d.ts.map +1 -0
  58. package/dist/enums.js +38 -0
  59. package/dist/enums.js.map +1 -0
  60. package/dist/errors.d.ts +195 -0
  61. package/dist/errors.d.ts.map +1 -0
  62. package/dist/errors.js +188 -0
  63. package/dist/errors.js.map +1 -0
  64. package/dist/forms-core/autocomplete.d.ts +37 -0
  65. package/dist/forms-core/autocomplete.d.ts.map +1 -0
  66. package/dist/forms-core/autocomplete.js +82 -0
  67. package/dist/forms-core/autocomplete.js.map +1 -0
  68. package/dist/forms-core/business-function.d.ts +61 -0
  69. package/dist/forms-core/business-function.d.ts.map +1 -0
  70. package/dist/forms-core/business-function.js +149 -0
  71. package/dist/forms-core/business-function.js.map +1 -0
  72. package/dist/forms-core/calculation.d.ts +72 -0
  73. package/dist/forms-core/calculation.d.ts.map +1 -0
  74. package/dist/forms-core/calculation.js +103 -0
  75. package/dist/forms-core/calculation.js.map +1 -0
  76. package/dist/forms-core/controller.d.ts +249 -0
  77. package/dist/forms-core/controller.d.ts.map +1 -0
  78. package/dist/forms-core/controller.js +590 -0
  79. package/dist/forms-core/controller.js.map +1 -0
  80. package/dist/forms-core/elements.d.ts +44 -0
  81. package/dist/forms-core/elements.d.ts.map +1 -0
  82. package/dist/forms-core/elements.js +68 -0
  83. package/dist/forms-core/elements.js.map +1 -0
  84. package/dist/forms-core/email-domains.d.ts +10 -0
  85. package/dist/forms-core/email-domains.d.ts.map +1 -0
  86. package/dist/forms-core/email-domains.js +69 -0
  87. package/dist/forms-core/email-domains.js.map +1 -0
  88. package/dist/forms-core/file-rules.d.ts +51 -0
  89. package/dist/forms-core/file-rules.d.ts.map +1 -0
  90. package/dist/forms-core/file-rules.js +105 -0
  91. package/dist/forms-core/file-rules.js.map +1 -0
  92. package/dist/forms-core/formula.d.ts +114 -0
  93. package/dist/forms-core/formula.d.ts.map +1 -0
  94. package/dist/forms-core/formula.js +1170 -0
  95. package/dist/forms-core/formula.js.map +1 -0
  96. package/dist/forms-core/index.d.ts +24 -0
  97. package/dist/forms-core/index.d.ts.map +1 -0
  98. package/dist/forms-core/index.js +28 -0
  99. package/dist/forms-core/index.js.map +1 -0
  100. package/dist/forms-core/units.d.ts +49 -0
  101. package/dist/forms-core/units.d.ts.map +1 -0
  102. package/dist/forms-core/units.js +255 -0
  103. package/dist/forms-core/units.js.map +1 -0
  104. package/dist/forms-core/us-states.d.ts +14 -0
  105. package/dist/forms-core/us-states.d.ts.map +1 -0
  106. package/dist/forms-core/us-states.js +66 -0
  107. package/dist/forms-core/us-states.js.map +1 -0
  108. package/dist/forms-core/validation.d.ts +266 -0
  109. package/dist/forms-core/validation.d.ts.map +1 -0
  110. package/dist/forms-core/validation.js +850 -0
  111. package/dist/forms-core/validation.js.map +1 -0
  112. package/dist/forms.d.ts +19 -0
  113. package/dist/forms.d.ts.map +1 -0
  114. package/dist/forms.js +29 -0
  115. package/dist/forms.js.map +1 -0
  116. package/dist/gallery-types.d.ts +32 -0
  117. package/dist/gallery-types.d.ts.map +1 -0
  118. package/dist/gallery-types.js +2 -0
  119. package/dist/gallery-types.js.map +1 -0
  120. package/dist/graphql.d.ts +97 -0
  121. package/dist/graphql.d.ts.map +1 -0
  122. package/dist/graphql.js +212 -0
  123. package/dist/graphql.js.map +1 -0
  124. package/dist/index.cjs +19448 -0
  125. package/dist/index.d.cts +19 -0
  126. package/dist/index.d.mts +19 -0
  127. package/dist/index.d.ts +19 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +20 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/marketing-schema.d.ts +216 -0
  132. package/dist/marketing-schema.d.ts.map +1 -0
  133. package/dist/marketing-schema.js +200 -0
  134. package/dist/marketing-schema.js.map +1 -0
  135. package/dist/mcp.d.ts +42 -0
  136. package/dist/mcp.d.ts.map +1 -0
  137. package/dist/mcp.js +87 -0
  138. package/dist/mcp.js.map +1 -0
  139. package/dist/native.d.ts +45 -0
  140. package/dist/native.d.ts.map +1 -0
  141. package/dist/native.js +43 -0
  142. package/dist/native.js.map +1 -0
  143. package/dist/next-revalidate.d.ts +43 -0
  144. package/dist/next-revalidate.d.ts.map +1 -0
  145. package/dist/next-revalidate.js +84 -0
  146. package/dist/next-revalidate.js.map +1 -0
  147. package/dist/parallel-pages.d.ts +102 -0
  148. package/dist/parallel-pages.d.ts.map +1 -0
  149. package/dist/parallel-pages.js +108 -0
  150. package/dist/parallel-pages.js.map +1 -0
  151. package/dist/payment-icons.d.ts +66 -0
  152. package/dist/payment-icons.d.ts.map +1 -0
  153. package/dist/payment-icons.js +160 -0
  154. package/dist/payment-icons.js.map +1 -0
  155. package/dist/proxy.d.ts +67 -0
  156. package/dist/proxy.d.ts.map +1 -0
  157. package/dist/proxy.js +97 -0
  158. package/dist/proxy.js.map +1 -0
  159. package/dist/react-analytics.d.ts +39 -0
  160. package/dist/react-analytics.d.ts.map +1 -0
  161. package/dist/react-analytics.js +59 -0
  162. package/dist/react-analytics.js.map +1 -0
  163. package/dist/react-attribution.d.ts +99 -0
  164. package/dist/react-attribution.d.ts.map +1 -0
  165. package/dist/react-attribution.js +52 -0
  166. package/dist/react-attribution.js.map +1 -0
  167. package/dist/react-marketing.d.ts +181 -0
  168. package/dist/react-marketing.d.ts.map +1 -0
  169. package/dist/react-marketing.js +215 -0
  170. package/dist/react-marketing.js.map +1 -0
  171. package/dist/react.d.ts +727 -0
  172. package/dist/react.d.ts.map +1 -0
  173. package/dist/react.js +2418 -0
  174. package/dist/react.js.map +1 -0
  175. package/dist/reserved-paths.d.ts +24 -0
  176. package/dist/reserved-paths.d.ts.map +1 -0
  177. package/dist/reserved-paths.js +60 -0
  178. package/dist/reserved-paths.js.map +1 -0
  179. package/dist/revalidate-verify.d.ts +30 -0
  180. package/dist/revalidate-verify.d.ts.map +1 -0
  181. package/dist/revalidate-verify.js +74 -0
  182. package/dist/revalidate-verify.js.map +1 -0
  183. package/dist/sdk.d.ts +678 -0
  184. package/dist/sdk.d.ts.map +1 -0
  185. package/dist/sdk.js +801 -0
  186. package/dist/sdk.js.map +1 -0
  187. package/dist/seo.d.ts +218 -0
  188. package/dist/seo.d.ts.map +1 -0
  189. package/dist/seo.js +309 -0
  190. package/dist/seo.js.map +1 -0
  191. package/dist/socials.d.ts +47 -0
  192. package/dist/socials.d.ts.map +1 -0
  193. package/dist/socials.js +172 -0
  194. package/dist/socials.js.map +1 -0
  195. package/dist/static.d.ts +14 -0
  196. package/dist/static.d.ts.map +1 -0
  197. package/dist/static.js +14 -0
  198. package/dist/static.js.map +1 -0
  199. package/dist/url-pattern.d.ts +47 -0
  200. package/dist/url-pattern.d.ts.map +1 -0
  201. package/dist/url-pattern.js +124 -0
  202. package/dist/url-pattern.js.map +1 -0
  203. package/dist/vanilla.d.ts +77 -0
  204. package/dist/vanilla.d.ts.map +1 -0
  205. package/dist/vanilla.js +903 -0
  206. package/dist/vanilla.js.map +1 -0
  207. package/openapi.json +13779 -0
  208. package/package.json +204 -0
  209. package/src/adapters-revalidate.ts +88 -0
  210. package/src/alpha.ts +89 -0
  211. package/src/analytics-core.ts +175 -0
  212. package/src/analytics-server.ts +99 -0
  213. package/src/angular/biab-form.component.ts +1443 -0
  214. package/src/angular/index.ts +26 -0
  215. package/src/attribution-logo.ts +5 -0
  216. package/src/auth-handler.ts +352 -0
  217. package/src/cli.ts +2517 -0
  218. package/src/client.ts +3578 -0
  219. package/src/collections.ts +101 -0
  220. package/src/contracts.ts +3390 -0
  221. package/src/data-model-schema.ts +4042 -0
  222. package/src/distribution.ts +73 -0
  223. package/src/element.ts +321 -0
  224. package/src/enums.ts +65 -0
  225. package/src/errors.ts +338 -0
  226. package/src/forms-core/autocomplete.ts +97 -0
  227. package/src/forms-core/business-function.ts +209 -0
  228. package/src/forms-core/calculation.ts +167 -0
  229. package/src/forms-core/controller.ts +922 -0
  230. package/src/forms-core/elements.ts +86 -0
  231. package/src/forms-core/email-domains.ts +68 -0
  232. package/src/forms-core/file-rules.ts +123 -0
  233. package/src/forms-core/formula.ts +1339 -0
  234. package/src/forms-core/index.ts +122 -0
  235. package/src/forms-core/units.ts +308 -0
  236. package/src/forms-core/us-states.ts +68 -0
  237. package/src/forms-core/validation.ts +1037 -0
  238. package/src/forms.ts +63 -0
  239. package/src/gallery-types.ts +31 -0
  240. package/src/graphql.ts +295 -0
  241. package/src/index.ts +505 -0
  242. package/src/marketing-schema.ts +395 -0
  243. package/src/mcp.ts +108 -0
  244. package/src/native.ts +73 -0
  245. package/src/next-revalidate.ts +124 -0
  246. package/src/parallel-pages.ts +192 -0
  247. package/src/payment-icons.ts +205 -0
  248. package/src/proxy.ts +173 -0
  249. package/src/qwik.tsx +1234 -0
  250. package/src/react-analytics.tsx +76 -0
  251. package/src/react-attribution.tsx +192 -0
  252. package/src/react-marketing.tsx +338 -0
  253. package/src/react.tsx +5495 -0
  254. package/src/reserved-paths.ts +65 -0
  255. package/src/revalidate-verify.ts +98 -0
  256. package/src/sdk.ts +1671 -0
  257. package/src/seo.ts +488 -0
  258. package/src/socials.ts +230 -0
  259. package/src/solid.tsx +1466 -0
  260. package/src/static.ts +21 -0
  261. package/src/styles/biab-forms.css +484 -0
  262. package/src/svelte/BiabForm.svelte +1069 -0
  263. package/src/svelte/context.ts +57 -0
  264. package/src/svelte/index.ts +79 -0
  265. package/src/url-pattern.ts +153 -0
  266. package/src/vanilla.ts +1290 -0
  267. package/src/vue/BiabForm.vue +1538 -0
  268. package/src/vue/index.ts +119 -0
package/src/socials.ts ADDED
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Canonical social-profile support.
3
+ *
4
+ * The company profile (`storefrontMeta().socials`) is a free-form record keyed
5
+ * by BIAB's field keys (`meta`, `twitterX`, `tikTok`, …). Consumers kept
6
+ * re-implementing the key→icon→href mapping by hand and getting BIAB's exact
7
+ * keys wrong (e.g. mapping `facebook`/`x` and silently dropping `meta`/`twitterX`).
8
+ * This module is the single source of truth: every platform BIAB supports, in
9
+ * render order, with a stable icon slug + a handle→URL normalizer, plus alias
10
+ * resolution so older/lowercase spellings still match.
11
+ *
12
+ * `iconSlug` is a https://simpleicons.org slug (render it however you like —
13
+ * e.g. `https://cdn.simpleicons.org/<slug>`); `null` means there's no brand
14
+ * glyph, so fall back to a generic icon. For a drop-in React renderer that does
15
+ * this for you, see `SocialLinks` in `@businessdash/sdk/react`.
16
+ */
17
+
18
+ /** A social/profile platform key as stored on the BIAB company profile. */
19
+ export type SocialPlatformKey =
20
+ | "meta"
21
+ | "instagram"
22
+ | "twitterX"
23
+ | "tikTok"
24
+ | "youTube"
25
+ | "linkedIn"
26
+ | "pinterest"
27
+ | "threads"
28
+ | "bluesky"
29
+ | "mastodon"
30
+ | "truthSocial"
31
+ | "googleBusiness"
32
+ | "yelp"
33
+ | "nextdoor"
34
+ | "angi"
35
+ | "homeAdvisor"
36
+ | "houzz"
37
+ | "thumbtack"
38
+ | "bbb"
39
+ | "whatsApp"
40
+ | "discord"
41
+ | "substack"
42
+ | "reddit"
43
+ | "buyMeACoffee"
44
+ | "kofi"
45
+ | "patreon"
46
+ | "twitch"
47
+ | "vimeo"
48
+ | "github"
49
+ | "behance"
50
+ | "dribbble";
51
+
52
+ export type SocialPlatformMeta = {
53
+ key: SocialPlatformKey;
54
+ /** Human label — use for `aria-label` / `title`. */
55
+ label: string;
56
+ /** simple-icons slug, or `null` when there's no brand glyph (use a fallback). */
57
+ iconSlug: string | null;
58
+ /** Prefix applied to a bare handle (a value with no scheme). */
59
+ hrefPrefix?: string;
60
+ };
61
+
62
+ /** Every platform BIAB supports, in footer render order. */
63
+ export const SOCIAL_PLATFORMS: readonly SocialPlatformMeta[] = [
64
+ {
65
+ key: "meta",
66
+ label: "Facebook",
67
+ iconSlug: "facebook",
68
+ hrefPrefix: "https://facebook.com/",
69
+ },
70
+ {
71
+ key: "instagram",
72
+ label: "Instagram",
73
+ iconSlug: "instagram",
74
+ hrefPrefix: "https://instagram.com/",
75
+ },
76
+ { key: "twitterX", label: "X", iconSlug: "x", hrefPrefix: "https://x.com/" },
77
+ {
78
+ key: "tikTok",
79
+ label: "TikTok",
80
+ iconSlug: "tiktok",
81
+ hrefPrefix: "https://tiktok.com/@",
82
+ },
83
+ {
84
+ key: "youTube",
85
+ label: "YouTube",
86
+ iconSlug: "youtube",
87
+ hrefPrefix: "https://youtube.com/",
88
+ },
89
+ {
90
+ key: "linkedIn",
91
+ label: "LinkedIn",
92
+ iconSlug: "linkedin",
93
+ hrefPrefix: "https://linkedin.com/",
94
+ },
95
+ {
96
+ key: "pinterest",
97
+ label: "Pinterest",
98
+ iconSlug: "pinterest",
99
+ hrefPrefix: "https://pinterest.com/",
100
+ },
101
+ {
102
+ key: "threads",
103
+ label: "Threads",
104
+ iconSlug: "threads",
105
+ hrefPrefix: "https://threads.net/@",
106
+ },
107
+ { key: "bluesky", label: "Bluesky", iconSlug: "bluesky" },
108
+ { key: "mastodon", label: "Mastodon", iconSlug: "mastodon" },
109
+ { key: "truthSocial", label: "Truth Social", iconSlug: "truthsocial" },
110
+ { key: "googleBusiness", label: "Google", iconSlug: "google" },
111
+ { key: "yelp", label: "Yelp", iconSlug: "yelp" },
112
+ { key: "nextdoor", label: "Nextdoor", iconSlug: "nextdoor" },
113
+ { key: "angi", label: "Angi", iconSlug: null },
114
+ { key: "homeAdvisor", label: "HomeAdvisor", iconSlug: null },
115
+ { key: "houzz", label: "Houzz", iconSlug: "houzz" },
116
+ { key: "thumbtack", label: "Thumbtack", iconSlug: "thumbtack" },
117
+ { key: "bbb", label: "Better Business Bureau", iconSlug: null },
118
+ {
119
+ key: "whatsApp",
120
+ label: "WhatsApp",
121
+ iconSlug: "whatsapp",
122
+ hrefPrefix: "https://wa.me/",
123
+ },
124
+ { key: "discord", label: "Discord", iconSlug: "discord" },
125
+ { key: "substack", label: "Substack", iconSlug: "substack" },
126
+ { key: "reddit", label: "Reddit", iconSlug: "reddit" },
127
+ { key: "buyMeACoffee", label: "Buy Me a Coffee", iconSlug: "buymeacoffee" },
128
+ { key: "kofi", label: "Ko-fi", iconSlug: "kofi" },
129
+ { key: "patreon", label: "Patreon", iconSlug: "patreon" },
130
+ { key: "twitch", label: "Twitch", iconSlug: "twitch" },
131
+ { key: "vimeo", label: "Vimeo", iconSlug: "vimeo" },
132
+ {
133
+ key: "github",
134
+ label: "GitHub",
135
+ iconSlug: "github",
136
+ hrefPrefix: "https://github.com/",
137
+ },
138
+ { key: "behance", label: "Behance", iconSlug: "behance" },
139
+ { key: "dribbble", label: "Dribbble", iconSlug: "dribbble" },
140
+ ];
141
+
142
+ const PLATFORM_BY_KEY = new Map<string, SocialPlatformMeta>(
143
+ SOCIAL_PLATFORMS.map((p) => [p.key.toLowerCase(), p]),
144
+ );
145
+
146
+ /** Older / alternate spellings → canonical key (all compared lowercased + de-punctuated). */
147
+ const ALIASES: Record<string, SocialPlatformKey> = {
148
+ facebook: "meta",
149
+ fb: "meta",
150
+ x: "twitterX",
151
+ twitter: "twitterX",
152
+ tiktok: "tikTok",
153
+ youtube: "youTube",
154
+ linkedin: "linkedIn",
155
+ google: "googleBusiness",
156
+ googlemybusiness: "googleBusiness",
157
+ truthsocial: "truthSocial",
158
+ homeadvisor: "homeAdvisor",
159
+ betterbusinessbureau: "bbb",
160
+ whatsapp: "whatsApp",
161
+ buymeacoffee: "buyMeACoffee",
162
+ "ko-fi": "kofi",
163
+ };
164
+
165
+ /** Strip case + separators so `Truth Social`, `truth_social`, `truthSocial` all collapse. */
166
+ function canonicalize(raw: string): string {
167
+ return raw.toLowerCase().replace(/[\s_-]+/g, "");
168
+ }
169
+
170
+ /** Resolve any incoming social key (BIAB key, alias, or loose spelling) to its platform meta. */
171
+ export function resolveSocialPlatform(key: string): SocialPlatformMeta | null {
172
+ const c = canonicalize(key);
173
+ const direct = PLATFORM_BY_KEY.get(c);
174
+ if (direct) return direct;
175
+ const aliased = ALIASES[c];
176
+ return aliased ? (PLATFORM_BY_KEY.get(aliased.toLowerCase()) ?? null) : null;
177
+ }
178
+
179
+ /** Turn a stored value (full URL or bare handle) into an href using the platform prefix. */
180
+ export function socialHref(
181
+ value: string,
182
+ platform: SocialPlatformMeta,
183
+ ): string {
184
+ const v = value.trim();
185
+ if (/^(https?:\/\/|mailto:|tel:)/i.test(v)) return v;
186
+ if (platform.hrefPrefix) return platform.hrefPrefix + v.replace(/^@/, "");
187
+ return `https://${v.replace(/^\/+/, "")}`;
188
+ }
189
+
190
+ export type ResolvedSocialProfile = {
191
+ key: SocialPlatformKey;
192
+ label: string;
193
+ iconSlug: string | null;
194
+ url: string;
195
+ };
196
+
197
+ /**
198
+ * Turn the company profile's `socials` record into a render-ready, de-duped list
199
+ * in canonical order — every platform that has a non-empty value, resolved to its
200
+ * label, icon slug, and a normalized URL. Empty values and unknown keys are
201
+ * dropped. Pass `storefrontMeta().socials` straight in.
202
+ */
203
+ export function resolveSocialProfiles(
204
+ socials: unknown,
205
+ ): ResolvedSocialProfile[] {
206
+ if (!socials || typeof socials !== "object") return [];
207
+ const present = new Map<SocialPlatformKey, string>();
208
+ for (const [rawKey, rawVal] of Object.entries(
209
+ socials as Record<string, unknown>,
210
+ )) {
211
+ if (typeof rawVal !== "string") continue;
212
+ const value = rawVal.trim();
213
+ if (!value) continue;
214
+ const platform = resolveSocialPlatform(rawKey);
215
+ if (!platform || present.has(platform.key)) continue;
216
+ present.set(platform.key, value);
217
+ }
218
+ const rows: ResolvedSocialProfile[] = [];
219
+ for (const platform of SOCIAL_PLATFORMS) {
220
+ const value = present.get(platform.key);
221
+ if (!value) continue;
222
+ rows.push({
223
+ key: platform.key,
224
+ label: platform.label,
225
+ iconSlug: platform.iconSlug,
226
+ url: socialHref(value, platform),
227
+ });
228
+ }
229
+ return rows;
230
+ }