@apteva/integrations 0.3.61 → 0.15.3

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 (434) hide show
  1. package/dist/aws-sigv4.d.ts +32 -0
  2. package/dist/aws-sigv4.d.ts.map +1 -0
  3. package/dist/aws-sigv4.js +126 -0
  4. package/dist/aws-sigv4.js.map +1 -0
  5. package/dist/explorer/main.js +21617 -0
  6. package/dist/explorer/main.js.map +90 -0
  7. package/dist/explorer/style.css +2 -0
  8. package/dist/http-executor.d.ts.map +1 -1
  9. package/dist/http-executor.js +145 -12
  10. package/dist/http-executor.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp-generator.d.ts +7 -2
  15. package/dist/mcp-generator.d.ts.map +1 -1
  16. package/dist/mcp-generator.js +46 -5
  17. package/dist/mcp-generator.js.map +1 -1
  18. package/dist/oauth.js +1 -1
  19. package/dist/oauth.js.map +1 -1
  20. package/dist/types.d.ts +251 -3
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/ui/github/ActivityFeed.d.ts +24 -0
  23. package/dist/ui/github/ActivityFeed.d.ts.map +1 -0
  24. package/dist/ui/github/ActivityFeed.js +106 -0
  25. package/dist/ui/github/ActivityFeed.js.map +1 -0
  26. package/dist/ui/github/ActivityFeed.mjs +3 -0
  27. package/dist/ui/github/ActivityFeed.mjs.map +29 -0
  28. package/dist/ui/github/CommitCard.d.ts +24 -0
  29. package/dist/ui/github/CommitCard.d.ts.map +1 -0
  30. package/dist/ui/github/CommitCard.js +102 -0
  31. package/dist/ui/github/CommitCard.js.map +1 -0
  32. package/dist/ui/github/CommitCard.mjs +5 -0
  33. package/dist/ui/github/CommitCard.mjs.map +11 -0
  34. package/dist/ui/github/IssueCard.d.ts +33 -0
  35. package/dist/ui/github/IssueCard.d.ts.map +1 -0
  36. package/dist/ui/github/IssueCard.js +131 -0
  37. package/dist/ui/github/IssueCard.js.map +1 -0
  38. package/dist/ui/github/IssueCard.mjs +3 -0
  39. package/dist/ui/github/IssueCard.mjs.map +21 -0
  40. package/dist/ui/github/PullRequestCard.d.ts +36 -0
  41. package/dist/ui/github/PullRequestCard.d.ts.map +1 -0
  42. package/dist/ui/github/PullRequestCard.js +158 -0
  43. package/dist/ui/github/PullRequestCard.js.map +1 -0
  44. package/dist/ui/github/PullRequestCard.mjs +3 -0
  45. package/dist/ui/github/PullRequestCard.mjs.map +22 -0
  46. package/dist/ui/github/WorkflowRunCard.d.ts +30 -0
  47. package/dist/ui/github/WorkflowRunCard.d.ts.map +1 -0
  48. package/dist/ui/github/WorkflowRunCard.js +124 -0
  49. package/dist/ui/github/WorkflowRunCard.js.map +1 -0
  50. package/dist/ui/github/WorkflowRunCard.mjs +3 -0
  51. package/dist/ui/github/WorkflowRunCard.mjs.map +11 -0
  52. package/dist/ui/github/lib/github.d.ts +43 -0
  53. package/dist/ui/github/lib/github.d.ts.map +1 -0
  54. package/dist/ui/github/lib/github.js +151 -0
  55. package/dist/ui/github/lib/github.js.map +1 -0
  56. package/dist/ui/hubspot/ActivityFeed.d.ts +22 -0
  57. package/dist/ui/hubspot/ActivityFeed.d.ts.map +1 -0
  58. package/dist/ui/hubspot/ActivityFeed.js +52 -0
  59. package/dist/ui/hubspot/ActivityFeed.js.map +1 -0
  60. package/dist/ui/hubspot/ActivityFeed.mjs +3 -0
  61. package/dist/ui/hubspot/ActivityFeed.mjs.map +26 -0
  62. package/dist/ui/hubspot/CompanyCard.d.ts +22 -0
  63. package/dist/ui/hubspot/CompanyCard.d.ts.map +1 -0
  64. package/dist/ui/hubspot/CompanyCard.js +63 -0
  65. package/dist/ui/hubspot/CompanyCard.js.map +1 -0
  66. package/dist/ui/hubspot/CompanyCard.mjs +3 -0
  67. package/dist/ui/hubspot/CompanyCard.mjs.map +11 -0
  68. package/dist/ui/hubspot/ContactCard.d.ts +22 -0
  69. package/dist/ui/hubspot/ContactCard.d.ts.map +1 -0
  70. package/dist/ui/hubspot/ContactCard.js +62 -0
  71. package/dist/ui/hubspot/ContactCard.js.map +1 -0
  72. package/dist/ui/hubspot/ContactCard.mjs +3 -0
  73. package/dist/ui/hubspot/ContactCard.mjs.map +11 -0
  74. package/dist/ui/hubspot/ContactList.d.ts +21 -0
  75. package/dist/ui/hubspot/ContactList.d.ts.map +1 -0
  76. package/dist/ui/hubspot/ContactList.js +31 -0
  77. package/dist/ui/hubspot/ContactList.js.map +1 -0
  78. package/dist/ui/hubspot/ContactList.mjs +3 -0
  79. package/dist/ui/hubspot/ContactList.mjs.map +11 -0
  80. package/dist/ui/hubspot/DealCard.d.ts +23 -0
  81. package/dist/ui/hubspot/DealCard.d.ts.map +1 -0
  82. package/dist/ui/hubspot/DealCard.js +63 -0
  83. package/dist/ui/hubspot/DealCard.js.map +1 -0
  84. package/dist/ui/hubspot/DealCard.mjs +3 -0
  85. package/dist/ui/hubspot/DealCard.mjs.map +11 -0
  86. package/dist/ui/hubspot/DealList.d.ts +24 -0
  87. package/dist/ui/hubspot/DealList.d.ts.map +1 -0
  88. package/dist/ui/hubspot/DealList.js +35 -0
  89. package/dist/ui/hubspot/DealList.js.map +1 -0
  90. package/dist/ui/hubspot/DealList.mjs +3 -0
  91. package/dist/ui/hubspot/DealList.mjs.map +11 -0
  92. package/dist/ui/hubspot/EmailCard.d.ts +25 -0
  93. package/dist/ui/hubspot/EmailCard.d.ts.map +1 -0
  94. package/dist/ui/hubspot/EmailCard.js +62 -0
  95. package/dist/ui/hubspot/EmailCard.js.map +1 -0
  96. package/dist/ui/hubspot/EmailCard.mjs +5 -0
  97. package/dist/ui/hubspot/EmailCard.mjs.map +11 -0
  98. package/dist/ui/hubspot/InboxStrip.d.ts +23 -0
  99. package/dist/ui/hubspot/InboxStrip.d.ts.map +1 -0
  100. package/dist/ui/hubspot/InboxStrip.js +36 -0
  101. package/dist/ui/hubspot/InboxStrip.js.map +1 -0
  102. package/dist/ui/hubspot/InboxStrip.mjs +3 -0
  103. package/dist/ui/hubspot/InboxStrip.mjs.map +11 -0
  104. package/dist/ui/hubspot/PipelineStrip.d.ts +22 -0
  105. package/dist/ui/hubspot/PipelineStrip.d.ts.map +1 -0
  106. package/dist/ui/hubspot/PipelineStrip.js +54 -0
  107. package/dist/ui/hubspot/PipelineStrip.js.map +1 -0
  108. package/dist/ui/hubspot/PipelineStrip.mjs +3 -0
  109. package/dist/ui/hubspot/PipelineStrip.mjs.map +11 -0
  110. package/dist/ui/hubspot/TicketCard.d.ts +25 -0
  111. package/dist/ui/hubspot/TicketCard.d.ts.map +1 -0
  112. package/dist/ui/hubspot/TicketCard.js +53 -0
  113. package/dist/ui/hubspot/TicketCard.js.map +1 -0
  114. package/dist/ui/hubspot/TicketCard.mjs +3 -0
  115. package/dist/ui/hubspot/TicketCard.mjs.map +21 -0
  116. package/dist/ui/hubspot/TicketList.d.ts +21 -0
  117. package/dist/ui/hubspot/TicketList.d.ts.map +1 -0
  118. package/dist/ui/hubspot/TicketList.js +33 -0
  119. package/dist/ui/hubspot/TicketList.js.map +1 -0
  120. package/dist/ui/hubspot/TicketList.mjs +3 -0
  121. package/dist/ui/hubspot/TicketList.mjs.map +11 -0
  122. package/dist/ui/hubspot/lib/hubspot.d.ts +24 -0
  123. package/dist/ui/hubspot/lib/hubspot.d.ts.map +1 -0
  124. package/dist/ui/hubspot/lib/hubspot.js +176 -0
  125. package/dist/ui/hubspot/lib/hubspot.js.map +1 -0
  126. package/dist/ui/notion/DatabaseCard.d.ts +24 -0
  127. package/dist/ui/notion/DatabaseCard.d.ts.map +1 -0
  128. package/dist/ui/notion/DatabaseCard.js +86 -0
  129. package/dist/ui/notion/DatabaseCard.js.map +1 -0
  130. package/dist/ui/notion/DatabaseCard.mjs +3 -0
  131. package/dist/ui/notion/DatabaseCard.mjs.map +11 -0
  132. package/dist/ui/notion/DatabaseRowList.d.ts +36 -0
  133. package/dist/ui/notion/DatabaseRowList.d.ts.map +1 -0
  134. package/dist/ui/notion/DatabaseRowList.js +87 -0
  135. package/dist/ui/notion/DatabaseRowList.js.map +1 -0
  136. package/dist/ui/notion/DatabaseRowList.mjs +3 -0
  137. package/dist/ui/notion/DatabaseRowList.mjs.map +11 -0
  138. package/dist/ui/notion/PageCard.d.ts +27 -0
  139. package/dist/ui/notion/PageCard.d.ts.map +1 -0
  140. package/dist/ui/notion/PageCard.js +80 -0
  141. package/dist/ui/notion/PageCard.js.map +1 -0
  142. package/dist/ui/notion/PageCard.mjs +3 -0
  143. package/dist/ui/notion/PageCard.mjs.map +11 -0
  144. package/dist/ui/notion/PageList.d.ts +24 -0
  145. package/dist/ui/notion/PageList.d.ts.map +1 -0
  146. package/dist/ui/notion/PageList.js +51 -0
  147. package/dist/ui/notion/PageList.js.map +1 -0
  148. package/dist/ui/notion/PageList.mjs +3 -0
  149. package/dist/ui/notion/PageList.mjs.map +11 -0
  150. package/dist/ui/notion/lib/notion.d.ts +35 -0
  151. package/dist/ui/notion/lib/notion.d.ts.map +1 -0
  152. package/dist/ui/notion/lib/notion.js +119 -0
  153. package/dist/ui/notion/lib/notion.js.map +1 -0
  154. package/dist/xml-to-json.d.ts +20 -0
  155. package/dist/xml-to-json.d.ts.map +1 -0
  156. package/dist/xml-to-json.js +256 -0
  157. package/dist/xml-to-json.js.map +1 -0
  158. package/package.json +12 -1
  159. package/src/apps/adroll.json +254 -0
  160. package/src/apps/ahrefs.json +156 -0
  161. package/src/apps/airtable.json +4 -13
  162. package/src/apps/algolia.json +115 -0
  163. package/src/apps/alibaba-cloud.json +211 -0
  164. package/src/apps/aliexpress.json +369 -0
  165. package/src/apps/alpaca-market-data.json +699 -0
  166. package/src/apps/alpaca-trading.json +214 -989
  167. package/src/apps/amazon-ads.json +249 -0
  168. package/src/apps/amazon-associates.json +102 -0
  169. package/src/apps/amplitude.json +86 -0
  170. package/src/apps/anchor-browser.json +173 -0
  171. package/src/apps/anthropic-api.json +9 -4
  172. package/src/apps/api-sports.json +180 -0
  173. package/src/apps/apple-search-ads.json +266 -0
  174. package/src/apps/auth0.json +126 -0
  175. package/src/apps/awin.json +111 -0
  176. package/src/apps/aws-codebuild.json +139 -0
  177. package/src/apps/aws-mediaconvert.json +196 -0
  178. package/src/apps/aws-s3.json +108 -192
  179. package/src/apps/aws-ses.json +666 -303
  180. package/src/apps/aws-sns.json +128 -106
  181. package/src/apps/azure-container-apps.json +116 -0
  182. package/src/apps/backblaze-b2.json +175 -0
  183. package/src/apps/bamboohr.json +303 -0
  184. package/src/apps/basiq.json +308 -0
  185. package/src/apps/bigcommerce.json +366 -0
  186. package/src/apps/bigquery.json +121 -0
  187. package/src/apps/binance-trading.json +7 -4
  188. package/src/apps/bing-webmaster-tools.json +158 -0
  189. package/src/apps/bitbucket.json +163 -0
  190. package/src/apps/blacksmith.json +81 -0
  191. package/src/apps/bls.json +104 -0
  192. package/src/apps/bluesky.json +74 -0
  193. package/src/apps/braze.json +103 -0
  194. package/src/apps/brevo.json +4 -1
  195. package/src/apps/brightdata.json +94 -0
  196. package/src/apps/browserbase.json +237 -0
  197. package/src/apps/bscscan.json +150 -0
  198. package/src/apps/buffer.json +121 -0
  199. package/src/apps/buildjet.json +80 -0
  200. package/src/apps/builtwith.json +101 -0
  201. package/src/apps/bunny-cdn.json +104 -0
  202. package/src/apps/bunny-stream.json +205 -3
  203. package/src/apps/byrd.json +585 -0
  204. package/src/apps/calendly.json +10 -7
  205. package/src/apps/campaign-manager-360.json +264 -0
  206. package/src/apps/capturekit.json +51 -0
  207. package/src/apps/circleci.json +212 -0
  208. package/src/apps/cirrus-runners.json +75 -0
  209. package/src/apps/cj-affiliate.json +101 -0
  210. package/src/apps/cjdropshipping.json +278 -0
  211. package/src/apps/clerk.json +153 -0
  212. package/src/apps/cloudflare-containers.json +98 -0
  213. package/src/apps/cloudflare-r2.json +180 -0
  214. package/src/apps/cloudflare.json +474 -157
  215. package/src/apps/cloudinary.json +119 -97
  216. package/src/apps/coconut.json +94 -0
  217. package/src/apps/contentful.json +157 -0
  218. package/src/apps/criteo.json +222 -0
  219. package/src/apps/crunchbase.json +104 -0
  220. package/src/apps/customer-io.json +106 -0
  221. package/src/apps/databricks.json +94 -0
  222. package/src/apps/deepgram.json +3 -0
  223. package/src/apps/deepl.json +113 -0
  224. package/src/apps/deepseek.json +5 -2
  225. package/src/apps/depot.json +102 -0
  226. package/src/apps/digitalocean-spaces.json +121 -0
  227. package/src/apps/digitalocean.json +115 -0
  228. package/src/apps/discord.json +90 -1
  229. package/src/apps/docker-build-cloud.json +68 -0
  230. package/src/apps/duffel.json +193 -77
  231. package/src/apps/dux-soup.json +4 -1
  232. package/src/apps/dv360.json +287 -0
  233. package/src/apps/earthly-cloud.json +84 -0
  234. package/src/apps/eia.json +121 -0
  235. package/src/apps/elasticsearch.json +282 -0
  236. package/src/apps/elevenlabs.json +336 -192
  237. package/src/apps/etherscan.json +162 -0
  238. package/src/apps/etsy.json +484 -0
  239. package/src/apps/eventbrite-events.json +5 -2
  240. package/src/apps/exa.json +101 -0
  241. package/src/apps/facebook-ads.json +3 -3
  242. package/src/apps/facebook-api.json +1484 -37
  243. package/src/apps/finnhub.json +232 -0
  244. package/src/apps/flightapi.json +248 -0
  245. package/src/apps/fly-io.json +134 -0
  246. package/src/apps/fred.json +156 -0
  247. package/src/apps/gdelt.json +96 -0
  248. package/src/apps/gelato.json +123 -0
  249. package/src/apps/gemini.json +143 -49
  250. package/src/apps/getscreenshot.json +52 -0
  251. package/src/apps/github.json +355 -39
  252. package/src/apps/gmail.json +151 -2
  253. package/src/apps/gnews.json +71 -0
  254. package/src/apps/google-analytics.json +311 -0
  255. package/src/apps/google-cloud-storage.json +484 -0
  256. package/src/apps/google-docs.json +2 -2
  257. package/src/apps/google-drive.json +2 -2
  258. package/src/apps/google-places.json +127 -0
  259. package/src/apps/google-search-console.json +126 -0
  260. package/src/apps/google-sheets.json +2 -2
  261. package/src/apps/grafana-cloud.json +98 -0
  262. package/src/apps/groq.json +119 -0
  263. package/src/apps/hetzner-object-storage.json +177 -0
  264. package/src/apps/hetzner.json +255 -367
  265. package/src/apps/heygen.json +828 -141
  266. package/src/apps/hive-fulfillment.json +559 -0
  267. package/src/apps/hotjar.json +91 -0
  268. package/src/apps/huawei-cloud.json +189 -0
  269. package/src/apps/huboo.json +286 -0
  270. package/src/apps/hubspot.json +253 -637
  271. package/src/apps/huggingface.json +5 -2
  272. package/src/apps/hunter.json +5 -2
  273. package/src/apps/hyperbrowser.json +205 -0
  274. package/src/apps/idrive-e2.json +128 -0
  275. package/src/apps/impact.json +106 -0
  276. package/src/apps/instagram-api.json +185 -11
  277. package/src/apps/instantly.json +169 -0
  278. package/src/apps/ionos.json +250 -0
  279. package/src/apps/{learning-platform.json → kalio.json} +162 -3
  280. package/src/apps/kalshi.json +144 -0
  281. package/src/apps/keywords-everywhere.json +86 -0
  282. package/src/apps/kickbox.json +71 -0
  283. package/src/apps/launchdarkly.json +111 -0
  284. package/src/apps/leadbyte.json +600 -0
  285. package/src/apps/leadfeeder.json +89 -0
  286. package/src/apps/lemlist.json +109 -0
  287. package/src/apps/linkedin-ads.json +279 -0
  288. package/src/apps/linkedin.json +96 -2
  289. package/src/apps/linode-object-storage.json +183 -0
  290. package/src/apps/linode.json +160 -0
  291. package/src/apps/lnk-bio.json +5 -2
  292. package/src/apps/loom.json +5 -2
  293. package/src/apps/lusha.json +104 -0
  294. package/src/apps/magalu-cloud.json +187 -0
  295. package/src/apps/majestic.json +117 -0
  296. package/src/apps/manifold-markets.json +144 -0
  297. package/src/apps/mapbox.json +118 -0
  298. package/src/apps/microsoft-ads.json +246 -0
  299. package/src/apps/microsoft-onedrive.json +380 -0
  300. package/src/apps/microsoft-teams.json +315 -96
  301. package/src/apps/millionverifier.json +85 -0
  302. package/src/apps/mindee.json +246 -0
  303. package/src/apps/miro.json +138 -0
  304. package/src/apps/mistral.json +129 -0
  305. package/src/apps/mixpanel.json +95 -0
  306. package/src/apps/moz.json +127 -0
  307. package/src/apps/mux.json +201 -0
  308. package/src/apps/namecheap.json +321 -123
  309. package/src/apps/namespace-cloud.json +84 -0
  310. package/src/apps/naver-cloud.json +184 -0
  311. package/src/apps/neon.json +122 -0
  312. package/src/apps/netlify.json +124 -0
  313. package/src/apps/neverbounce.json +92 -0
  314. package/src/apps/newrelic.json +80 -0
  315. package/src/apps/newsapi.json +86 -0
  316. package/src/apps/ngrok.json +29 -0
  317. package/src/apps/nixbuild.json +116 -0
  318. package/src/apps/northflank.json +161 -0
  319. package/src/apps/notion.json +3 -0
  320. package/src/apps/okta.json +131 -0
  321. package/src/apps/omnikit-analytics.json +73 -1
  322. package/src/apps/omnikit-api-gateway.json +74 -2
  323. package/src/apps/omnikit-billing.json +73 -1
  324. package/src/apps/omnikit-cms.json +73 -1
  325. package/src/apps/omnikit-code-ops.json +76 -4
  326. package/src/apps/omnikit-functions.json +74 -2
  327. package/src/apps/omnikit-intelligence.json +176 -33
  328. package/src/apps/omnikit-management.json +73 -1
  329. package/src/apps/omnikit-media.json +73 -1
  330. package/src/apps/omnikit-messaging.json +72 -0
  331. package/src/apps/omnikit-redirects.json +73 -1
  332. package/src/apps/omnikit-sites.json +325 -66
  333. package/src/apps/omnikit-storage.json +105 -8
  334. package/src/apps/omnikit-webhooks.json +73 -1
  335. package/src/apps/omnikit-workflows.json +73 -1
  336. package/src/apps/onesignal.json +108 -0
  337. package/src/apps/openai-api.json +176 -30
  338. package/src/apps/openai-codex.json +187 -0
  339. package/src/apps/opencode-go.json +113 -0
  340. package/src/apps/optinmonster.json +7 -4
  341. package/src/apps/outlook-calendar.json +350 -0
  342. package/src/apps/outlook-mail.json +337 -0
  343. package/src/apps/outscraper.json +118 -0
  344. package/src/apps/ovhcloud.json +209 -0
  345. package/src/apps/paddle.json +170 -0
  346. package/src/apps/pagerduty.json +151 -0
  347. package/src/apps/partnerstack.json +118 -0
  348. package/src/apps/perplexity.json +37 -0
  349. package/src/apps/phantombuster.json +85 -0
  350. package/src/apps/pinecone.json +129 -0
  351. package/src/apps/pinterest-ads.json +261 -0
  352. package/src/apps/pinterest.json +217 -0
  353. package/src/apps/planetscale.json +139 -0
  354. package/src/apps/polygonscan.json +157 -0
  355. package/src/apps/polymarket-clob.json +184 -0
  356. package/src/apps/polymarket-data.json +153 -0
  357. package/src/apps/porkbun.json +609 -145
  358. package/src/apps/posthog.json +107 -0
  359. package/src/apps/pushover.json +28 -0
  360. package/src/apps/quora-ads.json +251 -0
  361. package/src/apps/railway.json +57 -0
  362. package/src/apps/reddit-ads.json +238 -0
  363. package/src/apps/reddit.json +274 -0
  364. package/src/apps/render.json +124 -0
  365. package/src/apps/replicate.json +5 -2
  366. package/src/apps/reply-io.json +111 -0
  367. package/src/apps/resend.json +110 -0
  368. package/src/apps/ringover.json +1144 -0
  369. package/src/apps/rocketreach.json +158 -0
  370. package/src/apps/rollbar.json +88 -0
  371. package/src/apps/runs-on.json +70 -0
  372. package/src/apps/sanity.json +89 -0
  373. package/src/apps/scaleway-object-storage.json +175 -0
  374. package/src/apps/scrapingbee.json +75 -0
  375. package/src/apps/screenshotlayer.json +49 -0
  376. package/src/apps/screenshotmachine.json +49 -0
  377. package/src/apps/se-ranking.json +239 -0
  378. package/src/apps/seamless-ai.json +91 -0
  379. package/src/apps/sec-edgar.json +107 -0
  380. package/src/apps/segment.json +104 -0
  381. package/src/apps/semrush.json +153 -0
  382. package/src/apps/sentry.json +109 -0
  383. package/src/apps/serpapi.json +95 -0
  384. package/src/apps/serper.json +139 -0
  385. package/src/apps/shareasale.json +130 -0
  386. package/src/apps/skimlinks.json +48 -0
  387. package/src/apps/slack.json +101 -0
  388. package/src/apps/smartlead.json +146 -0
  389. package/src/apps/snapchat-ads.json +238 -0
  390. package/src/apps/snaprender.json +64 -0
  391. package/src/apps/snowflake.json +70 -0
  392. package/src/apps/snyk.json +108 -0
  393. package/src/apps/socialcast.json +74 -8
  394. package/src/apps/sovrn.json +125 -0
  395. package/src/apps/spotify-ads.json +231 -0
  396. package/src/apps/steel.json +239 -0
  397. package/src/apps/stocktwits.json +120 -0
  398. package/src/apps/stripe.json +153 -0
  399. package/src/apps/target-circle.json +348 -0
  400. package/src/apps/tavily.json +104 -0
  401. package/src/apps/tavus.json +403 -0
  402. package/src/apps/telegram.json +5 -2
  403. package/src/apps/teller.json +187 -0
  404. package/src/apps/tencent-cloud.json +214 -0
  405. package/src/apps/tennis-abstract.json +108 -0
  406. package/src/apps/the-odds-api.json +132 -0
  407. package/src/apps/the-sports-db.json +163 -0
  408. package/src/apps/tiktok-ads.json +295 -0
  409. package/src/apps/tiktok-api.json +181 -7
  410. package/src/apps/together.json +5 -2
  411. package/src/apps/trade-desk.json +237 -0
  412. package/src/apps/trading212.json +26 -29
  413. package/src/apps/transloadit.json +138 -0
  414. package/src/apps/truelayer.json +318 -0
  415. package/src/apps/twilio.json +313 -42
  416. package/src/apps/twitter-api.json +216 -33
  417. package/src/apps/ubicloud.json +82 -0
  418. package/src/apps/uplead.json +105 -0
  419. package/src/apps/upstash.json +90 -0
  420. package/src/apps/valueserp.json +63 -0
  421. package/src/apps/venice-ai.json +685 -0
  422. package/src/apps/vercel.json +137 -0
  423. package/src/apps/wappalyzer.json +65 -0
  424. package/src/apps/wasabi.json +175 -0
  425. package/src/apps/whale-alert.json +74 -0
  426. package/src/apps/whatsapp-business.json +131 -0
  427. package/src/apps/wikipedia.json +112 -0
  428. package/src/apps/workos.json +123 -0
  429. package/src/apps/yahoo-dsp.json +265 -0
  430. package/src/apps/yahoo-finance.json +60 -0
  431. package/src/apps/youtube-api.json +520 -142
  432. package/src/apps/zenrows.json +47 -0
  433. package/src/apps/zenserp.json +99 -0
  434. package/src/apps/zerobounce.json +80 -0
@@ -0,0 +1,151 @@
1
+ // Shared helpers for every GitHub UI component.
2
+ //
3
+ // * githubVendor — CardHeader brand pill (logo + name + color)
4
+ // * URL builders — repo, issue, PR, commit, workflow run, branch
5
+ // * formatters — relative time, short sha, file-stat string
6
+ // * status mappers — PR state → StatusPill variant, run conclusion
7
+ // → StatusDot variant, etc.
8
+ //
9
+ // Mirrors the lib/hubspot.tsx pattern so any vendor lib has the
10
+ // same shape (logo + vendor + URL helpers + status mappers + time
11
+ // helpers).
12
+ // ─── Brand mark ───────────────────────────────────────────────────
13
+ //
14
+ // Octocat outline. currentColor so CardHeader's vendor pill can
15
+ // recolor it via inline `style.color`.
16
+ export const githubLogo = (<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" aria-hidden>
17
+ <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.807 1.305 3.492.998.108-.776.42-1.305.762-1.604-2.665-.305-5.466-1.334-5.466-5.93 0-1.31.467-2.38 1.235-3.22-.135-.303-.54-1.524.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.652.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.435.375.81 1.102.81 2.222 0 1.605-.015 2.898-.015 3.293 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
18
+ </svg>);
19
+ // GitHub Mona Purple — secondary brand color, used in the vendor
20
+ // pill and any GitHub-specific accents. Distinct from HubSpot orange
21
+ // so two cards from different vendors read as different upstreams at
22
+ // a glance.
23
+ export const GITHUB_BRAND_COLOR = "#8957e5";
24
+ export const githubVendor = {
25
+ name: "GitHub",
26
+ logo: githubLogo,
27
+ color: GITHUB_BRAND_COLOR,
28
+ };
29
+ // ─── URL builders ─────────────────────────────────────────────────
30
+ export function repoUrl(repo) {
31
+ return `https://github.com/${repo}`;
32
+ }
33
+ export function issueUrl(repo, number) {
34
+ return `https://github.com/${repo}/issues/${number}`;
35
+ }
36
+ export function pullRequestUrl(repo, number) {
37
+ return `https://github.com/${repo}/pull/${number}`;
38
+ }
39
+ export function commitUrl(repo, sha) {
40
+ return `https://github.com/${repo}/commit/${sha}`;
41
+ }
42
+ export function workflowRunUrl(repo, run_id) {
43
+ return `https://github.com/${repo}/actions/runs/${run_id}`;
44
+ }
45
+ export function branchUrl(repo, branch) {
46
+ return `https://github.com/${repo}/tree/${encodeURIComponent(branch)}`;
47
+ }
48
+ export function userUrl(login) {
49
+ return `https://github.com/${login}`;
50
+ }
51
+ // ─── Formatters ───────────────────────────────────────────────────
52
+ /** "3d ago" / "12m ago" / "just now" — coarse human-readable delta. */
53
+ export function timeAgo(iso) {
54
+ if (!iso)
55
+ return "";
56
+ const t = new Date(iso).getTime();
57
+ if (!Number.isFinite(t))
58
+ return "";
59
+ const s = Math.max(0, (Date.now() - t) / 1000);
60
+ if (s < 60)
61
+ return "just now";
62
+ const m = s / 60;
63
+ if (m < 60)
64
+ return `${Math.round(m)}m ago`;
65
+ const h = m / 60;
66
+ if (h < 24)
67
+ return `${Math.round(h)}h ago`;
68
+ const d = h / 24;
69
+ if (d < 30)
70
+ return `${Math.round(d)}d ago`;
71
+ const mo = d / 30;
72
+ if (mo < 12)
73
+ return `${Math.round(mo)}mo ago`;
74
+ return `${Math.round(mo / 12)}y ago`;
75
+ }
76
+ /** Coerce ISO durations to mm:ss / hh:mm:ss. Used for run/job times. */
77
+ export function formatDuration(ms) {
78
+ if (!ms || ms < 0)
79
+ return "—";
80
+ const s = Math.round(ms / 1000);
81
+ if (s < 60)
82
+ return `${s}s`;
83
+ const m = Math.floor(s / 60);
84
+ const rs = s % 60;
85
+ if (m < 60)
86
+ return rs ? `${m}m ${rs}s` : `${m}m`;
87
+ const h = Math.floor(m / 60);
88
+ return `${h}h ${m % 60}m`;
89
+ }
90
+ /** "abc1234" — 7-char short sha. Tolerates already-short input. */
91
+ export function shortSha(sha) {
92
+ if (!sha)
93
+ return "";
94
+ return sha.length > 7 ? sha.slice(0, 7) : sha;
95
+ }
96
+ /** Test fixture helper — same shape as lib/hubspot's minusHoursISO. */
97
+ export function minusHoursISO(h) {
98
+ return new Date(Date.now() - h * 60 * 60 * 1000).toISOString();
99
+ }
100
+ // ─── Status mappers ───────────────────────────────────────────────
101
+ /** PR state → StatusPill variant + label. */
102
+ export function pullRequestState(opts) {
103
+ if (opts.merged)
104
+ return { label: "merged", variant: "success", dot: "live" };
105
+ if (opts.state === "closed")
106
+ return { label: "closed", variant: "error", dot: "error" };
107
+ if (opts.draft)
108
+ return { label: "draft", variant: "neutral", dot: "muted" };
109
+ return { label: "open", variant: "info", dot: "active" };
110
+ }
111
+ /** Workflow-run status + conclusion → label/variant pair. */
112
+ export function runState(opts) {
113
+ if (opts.status === "in_progress")
114
+ return { label: "running", variant: "info", dot: "active" };
115
+ if (opts.status === "queued")
116
+ return { label: "queued", variant: "neutral", dot: "muted" };
117
+ switch (opts.conclusion) {
118
+ case "success": return { label: "success", variant: "success", dot: "live" };
119
+ case "failure": return { label: "failed", variant: "error", dot: "error" };
120
+ case "cancelled": return { label: "cancelled", variant: "neutral", dot: "muted" };
121
+ case "skipped": return { label: "skipped", variant: "neutral", dot: "muted" };
122
+ case "timed_out": return { label: "timed out", variant: "warn", dot: "warn" };
123
+ case "neutral": return { label: "neutral", variant: "neutral", dot: "muted" };
124
+ default: return { label: "—", variant: "neutral", dot: "muted" };
125
+ }
126
+ }
127
+ /** Job conclusion → small dot variant for inline lists. */
128
+ export function jobDot(conclusion, status) {
129
+ if (status === "in_progress")
130
+ return "active";
131
+ if (status === "queued")
132
+ return "muted";
133
+ switch (conclusion) {
134
+ case "success": return "live";
135
+ case "failure": return "error";
136
+ case "cancelled": return "muted";
137
+ case "skipped": return "muted";
138
+ case "timed_out": return "warn";
139
+ default: return "muted";
140
+ }
141
+ }
142
+ // ─── Mini avatar fallback (data URL) ──────────────────────────────
143
+ //
144
+ // IssueCard's preview avatars used inline data:image/svg+xml URLs so
145
+ // the explorer doesn't depend on network requests. Same helper
146
+ // reused across cards' preview samples.
147
+ export function avatarDataUrl(hexFill) {
148
+ return ("data:image/svg+xml;utf8," +
149
+ encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><circle cx='8' cy='8' r='8' fill='%23${hexFill}'/></svg>`));
150
+ }
151
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../src/ui/github/lib/github.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ type Kind = "email" | "call" | "note" | "task" | "meeting" | "record_change";
2
+ interface Event {
3
+ id: string;
4
+ kind: Kind;
5
+ /** ISO timestamp. */
6
+ timestamp: string;
7
+ title: string;
8
+ subtitle?: string;
9
+ /** Engagement id — used to build the canonical link. */
10
+ engagement_id?: string;
11
+ }
12
+ interface Props {
13
+ events?: Event[];
14
+ /** Cap rendered events; show "+N more" when exceeded. Default 12. */
15
+ max?: number;
16
+ portal_id?: string;
17
+ preview?: boolean;
18
+ projectId?: string;
19
+ }
20
+ export default function ActivityFeed(props: Props): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=ActivityFeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityFeed.d.ts","sourceRoot":"","sources":["../../../src/ui/hubspot/ActivityFeed.tsx"],"names":[],"mappings":"AAcA,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC;AAE7E,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,KAAK,+BAwBhD"}
@@ -0,0 +1,52 @@
1
+ // ActivityFeed — mixed engagement timeline grouped by day. Replaces
2
+ // the demo runner's raw event log with a CRM-shaped view: emails,
3
+ // calls, notes, tasks, and record changes side-by-side, color-banded
4
+ // by kind.
5
+ //
6
+ // Caller pre-merges events from HubSpot's per-engagement-type tools
7
+ // into a flat list. The component groups by local day.
8
+ import { Mail, Phone, FileText, CheckSquare, Calendar, RefreshCw } from "lucide-react";
9
+ import { Card, CardHeader, Timeline } from "@apteva/ui-kit";
10
+ import { recordUrl, minusHoursISO, hubspotVendor } from "./lib/hubspot";
11
+ const previewEvents = [
12
+ { id: "1", kind: "email", timestamp: minusHoursISO(2), title: "Inbound email from Sarah Chen", subtitle: "Acme · board review tomorrow", engagement_id: "30100" },
13
+ { id: "2", kind: "task", timestamp: minusHoursISO(2), title: "Created task: Draft renewal response", subtitle: "Owner: marc-olivier", engagement_id: "30101" },
14
+ { id: "3", kind: "note", timestamp: minusHoursISO(3), title: "Note added to Acme Q4 Renewal", subtitle: "Pricing locked at $48k", engagement_id: "30102" },
15
+ { id: "4", kind: "record_change", timestamp: minusHoursISO(28), title: "Deal stage → Contract sent", subtitle: "Acme Q4 Renewal · was Decision-maker bought in " },
16
+ { id: "5", kind: "call", timestamp: minusHoursISO(31), title: "Call logged with Lisa Rodriguez", subtitle: "Initech · 12 min", engagement_id: "30103" },
17
+ { id: "6", kind: "email", timestamp: minusHoursISO(54), title: "Outbound email to David Park", subtitle: "Globex · pilot follow-up", engagement_id: "30104" },
18
+ ];
19
+ const KIND_TONE = {
20
+ email: "info",
21
+ call: "accent",
22
+ note: "neutral",
23
+ task: "warn",
24
+ meeting: "accent",
25
+ record_change: "neutral",
26
+ };
27
+ const KIND_ICON = {
28
+ email: Mail,
29
+ call: Phone,
30
+ note: FileText,
31
+ task: CheckSquare,
32
+ meeting: Calendar,
33
+ record_change: RefreshCw,
34
+ };
35
+ export default function ActivityFeed(props) {
36
+ const evts = props.preview ? (props.events ?? previewEvents) : (props.events ?? []);
37
+ const max = props.max ?? 12;
38
+ const timelineEvents = evts.map((e) => ({
39
+ id: e.id,
40
+ timestamp: e.timestamp,
41
+ tone: KIND_TONE[e.kind],
42
+ icon: (() => { const Ico = KIND_ICON[e.kind]; return <Ico className="w-3.5 h-3.5"/>; })(),
43
+ title: e.title,
44
+ subtitle: e.subtitle,
45
+ href: e.engagement_id ? recordUrl("engagement", e.engagement_id, props.portal_id) : undefined,
46
+ }));
47
+ return (<Card fullWidth>
48
+ <CardHeader vendor={hubspotVendor} title="Recent CRM activity" subtitle={evts.length > 0 ? `${evts.length} event${evts.length === 1 ? "" : "s"}` : "Quiet"}/>
49
+ <Timeline events={timelineEvents} max={max} emptyLabel="No CRM activity yet."/>
50
+ </Card>);
51
+ }
52
+ //# sourceMappingURL=ActivityFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityFeed.js","sourceRoot":"","sources":["../../../src/ui/hubspot/ActivityFeed.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import{forwardRef as j,createElement as d}from"react";var O=(...Q)=>Q.filter((J,X,V)=>{return Boolean(J)&&J.trim()!==""&&V.indexOf(J)===X}).join(" ").trim();var R=(Q)=>Q.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var y=(Q)=>Q.replace(/^([A-Z])|[\s-_]+(\w)/g,(J,X,V)=>V?V.toUpperCase():X.toLowerCase());var U=(Q)=>{let J=y(Q);return J.charAt(0).toUpperCase()+J.slice(1)};import{forwardRef as l,createElement as z}from"react";var T={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var S=(Q)=>{for(let J in Q)if(J.startsWith("aria-")||J==="role"||J==="title")return!0;return!1};import{createContext as h,useContext as p,useMemo as TJ,createElement as PJ}from"react";var u=h({});var _=()=>p(u);var I=l(({color:Q,size:J,strokeWidth:X,absoluteStrokeWidth:V,className:Z="",children:G,iconNode:x,...W},L)=>{let{size:P=24,strokeWidth:A=2,absoluteStrokeWidth:C=!1,color:g="currentColor",className:f=""}=_()??{},k=V??C?Number(X??A)*24/Number(J??P):X??A;return z("svg",{ref:L,...T,width:J??P??T.width,height:J??P??T.height,stroke:Q??g,strokeWidth:k,className:O("lucide",f,Z),...!G&&!S(W)&&{"aria-hidden":"true"},...W},[...x.map(([v,w])=>z(v,w)),...Array.isArray(G)?G:[G]])});var $=(Q,J)=>{let X=j(({className:V,...Z},G)=>d(I,{ref:G,iconNode:J,className:O(`lucide-${R(U(Q))}`,`lucide-${Q}`,V),...Z}));return X.displayName=U(Q),X};var m=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Y=$("square-check-big",m);var t=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],B=$("calendar",t);var a=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],D=$("file-text",a);var r=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],F=$("mail",r);var c=[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]],H=$("phone",c);var n=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],K=$("refresh-cw",n);import{Card as JJ,CardHeader as QJ,Timeline as XJ}from"@apteva/ui-kit";import{jsx as E,jsxs as s}from"react/jsx-runtime";function q(Q){let J=new Date;return J.setHours(J.getHours()-Q),J.toISOString()}var i="0";function b(Q,J,X){return`https://app.hubspot.com/contacts/${X||i}/${Q}/${J}`}var o=s("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor","aria-hidden":!0,children:[E("circle",{cx:"18",cy:"6",r:"2.2"}),E("circle",{cx:"18",cy:"18",r:"2.2"}),E("circle",{cx:"6",cy:"12",r:"2.2"}),E("circle",{cx:"14",cy:"12",r:"3",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}),E("path",{d:"M8.2 12 L11 12 M16 7.5 L15 10.2 M16 16.5 L15 13.8",stroke:"currentColor",strokeWidth:"1.2",fill:"none"})]}),e="#FF7A59",N={name:"HubSpot",logo:o,color:e};import{jsx as M,jsxs as YJ}from"react/jsx-runtime";var ZJ=[{id:"1",kind:"email",timestamp:q(2),title:"Inbound email from Sarah Chen",subtitle:"Acme · board review tomorrow",engagement_id:"30100"},{id:"2",kind:"task",timestamp:q(2),title:"Created task: Draft renewal response",subtitle:"Owner: marc-olivier",engagement_id:"30101"},{id:"3",kind:"note",timestamp:q(3),title:"Note added to Acme Q4 Renewal",subtitle:"Pricing locked at $48k",engagement_id:"30102"},{id:"4",kind:"record_change",timestamp:q(28),title:"Deal stage → Contract sent",subtitle:"Acme Q4 Renewal · was Decision-maker bought in "},{id:"5",kind:"call",timestamp:q(31),title:"Call logged with Lisa Rodriguez",subtitle:"Initech · 12 min",engagement_id:"30103"},{id:"6",kind:"email",timestamp:q(54),title:"Outbound email to David Park",subtitle:"Globex · pilot follow-up",engagement_id:"30104"}],$J={email:"info",call:"accent",note:"neutral",task:"warn",meeting:"accent",record_change:"neutral"},VJ={email:F,call:H,note:D,task:Y,meeting:B,record_change:K};function GJ(Q){let J=Q.preview?Q.events??ZJ:Q.events??[],X=Q.max??12,V=J.map((Z)=>({id:Z.id,timestamp:Z.timestamp,tone:$J[Z.kind],icon:(()=>{let G=VJ[Z.kind];return M(G,{className:"w-3.5 h-3.5"})})(),title:Z.title,subtitle:Z.subtitle,href:Z.engagement_id?b("engagement",Z.engagement_id,Q.portal_id):void 0}));return YJ(JJ,{fullWidth:!0,children:[M(QJ,{vendor:N,title:"Recent CRM activity",subtitle:J.length>0?`${J.length} event${J.length===1?"":"s"}`:"Quiet"}),M(XJ,{events:V,max:X,emptyLabel:"No CRM activity yet."})]})}export{GJ as default};
2
+
3
+ //# debugId=C7DA5F38C945DC3864756E2164756E21
@@ -0,0 +1,26 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs", "../../../node_modules/lucide-react/dist/esm/Icon.mjs", "../../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs", "../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs", "../../../node_modules/lucide-react/dist/esm/context.mjs", "../../../node_modules/lucide-react/dist/esm/icons/square-check-big.mjs", "../../../node_modules/lucide-react/dist/esm/icons/calendar.mjs", "../../../node_modules/lucide-react/dist/esm/icons/file-text.mjs", "../../../node_modules/lucide-react/dist/esm/icons/mail.mjs", "../../../node_modules/lucide-react/dist/esm/icons/phone.mjs", "../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs", "../../../src/ui/hubspot/ActivityFeed.tsx", "../../../src/ui/hubspot/lib/hubspot.tsx"],
4
+ "sourcesContent": [
5
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n",
6
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n",
7
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n",
8
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n",
9
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n",
10
+ "\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n",
11
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n",
12
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n",
13
+ "\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n",
14
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344\", key: \"2acyp4\" }\n ],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst SquareCheckBig = createLucideIcon(\"square-check-big\", __iconNode);\n\nexport { __iconNode, SquareCheckBig as default };\n//# sourceMappingURL=square-check-big.mjs.map\n",
15
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.mjs.map\n",
16
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.mjs.map\n",
17
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.mjs.map\n",
18
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n];\nconst Phone = createLucideIcon(\"phone\", __iconNode);\n\nexport { __iconNode, Phone as default };\n//# sourceMappingURL=phone.mjs.map\n",
19
+ "/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n",
20
+ "// ActivityFeed — mixed engagement timeline grouped by day. Replaces\n// the demo runner's raw event log with a CRM-shaped view: emails,\n// calls, notes, tasks, and record changes side-by-side, color-banded\n// by kind.\n//\n// Caller pre-merges events from HubSpot's per-engagement-type tools\n// into a flat list. The component groups by local day.\n\nimport type { ComponentType } from \"react\";\nimport { Mail, Phone, FileText, CheckSquare, Calendar, RefreshCw } from \"lucide-react\";\nimport { Card, CardHeader, Timeline } from \"@apteva/ui-kit\";\nimport type { TimelineEvent, TimelineTone } from \"@apteva/ui-kit\";\nimport { recordUrl, minusHoursISO, hubspotVendor } from \"./lib/hubspot\";\n\ntype Kind = \"email\" | \"call\" | \"note\" | \"task\" | \"meeting\" | \"record_change\";\n\ninterface Event {\n id: string;\n kind: Kind;\n /** ISO timestamp. */\n timestamp: string;\n title: string;\n subtitle?: string;\n /** Engagement id — used to build the canonical link. */\n engagement_id?: string;\n}\n\ninterface Props {\n events?: Event[];\n /** Cap rendered events; show \"+N more\" when exceeded. Default 12. */\n max?: number;\n portal_id?: string;\n preview?: boolean;\n projectId?: string;\n}\n\nconst previewEvents: Event[] = [\n { id: \"1\", kind: \"email\", timestamp: minusHoursISO(2), title: \"Inbound email from Sarah Chen\", subtitle: \"Acme · board review tomorrow\", engagement_id: \"30100\" },\n { id: \"2\", kind: \"task\", timestamp: minusHoursISO(2), title: \"Created task: Draft renewal response\", subtitle: \"Owner: marc-olivier\", engagement_id: \"30101\" },\n { id: \"3\", kind: \"note\", timestamp: minusHoursISO(3), title: \"Note added to Acme Q4 Renewal\", subtitle: \"Pricing locked at $48k\", engagement_id: \"30102\" },\n { id: \"4\", kind: \"record_change\", timestamp: minusHoursISO(28), title: \"Deal stage → Contract sent\", subtitle: \"Acme Q4 Renewal · was Decision-maker bought in \" },\n { id: \"5\", kind: \"call\", timestamp: minusHoursISO(31), title: \"Call logged with Lisa Rodriguez\", subtitle: \"Initech · 12 min\", engagement_id: \"30103\" },\n { id: \"6\", kind: \"email\", timestamp: minusHoursISO(54), title: \"Outbound email to David Park\", subtitle: \"Globex · pilot follow-up\", engagement_id: \"30104\" },\n];\n\nconst KIND_TONE: Record<Kind, TimelineTone> = {\n email: \"info\",\n call: \"accent\",\n note: \"neutral\",\n task: \"warn\",\n meeting: \"accent\",\n record_change: \"neutral\",\n};\n\nconst KIND_ICON: Record<Kind, ComponentType<{ className?: string }>> = {\n email: Mail,\n call: Phone,\n note: FileText,\n task: CheckSquare,\n meeting: Calendar,\n record_change: RefreshCw,\n};\n\nexport default function ActivityFeed(props: Props) {\n const evts = props.preview ? (props.events ?? previewEvents) : (props.events ?? []);\n const max = props.max ?? 12;\n\n const timelineEvents: TimelineEvent[] = evts.map((e) => ({\n id: e.id,\n timestamp: e.timestamp,\n tone: KIND_TONE[e.kind],\n icon: (() => { const Ico = KIND_ICON[e.kind]; return <Ico className=\"w-3.5 h-3.5\" />; })(),\n title: e.title,\n subtitle: e.subtitle,\n href: e.engagement_id ? recordUrl(\"engagement\", e.engagement_id, props.portal_id) : undefined,\n }));\n\n return (\n <Card fullWidth>\n <CardHeader\n vendor={hubspotVendor}\n title=\"Recent CRM activity\"\n subtitle={evts.length > 0 ? `${evts.length} event${evts.length === 1 ? \"\" : \"s\"}` : \"Quiet\"}\n />\n <Timeline events={timelineEvents} max={max} emptyLabel=\"No CRM activity yet.\" />\n </Card>\n );\n}\n",
21
+ "// Shared helpers for every HubSpot UI component.\n//\n// * pill metadata for deal stages, ticket priorities, lifecycle\n// stages — one source of truth for label + color across cards\n// * formatters: USD, relative date, relative time-since\n// * URL builders for HubSpot canonical record links\n// * favicon helper (Google s2)\n// * pillToDot — bridges StatusPill variant → StatusDot variant for\n// CardHeader's status slot\n// * HubSpot brand mark SVG used in every card header\n\nimport type { StatusDotVariant, StatusPillVariant } from \"@apteva/ui-kit\";\n\n// ─── pill metadata ────────────────────────────────────────────────\n\nexport type PillMeta = { label: string; variant: StatusPillVariant };\n\nconst DEAL_STAGE: Record<string, PillMeta> = {\n appointmentscheduled: { label: \"Appointment scheduled\", variant: \"info\" },\n qualifiedtobuy: { label: \"Qualified to buy\", variant: \"info\" },\n presentationscheduled: { label: \"Presentation scheduled\", variant: \"info\" },\n decisionmakerboughtin: { label: \"Decision-maker bought in \", variant: \"info\" },\n contractsent: { label: \"Contract sent\", variant: \"warn\" },\n closedwon: { label: \"Closed (won)\", variant: \"success\" },\n closedlost: { label: \"Closed (lost)\", variant: \"error\" },\n};\n\nexport function dealStageMeta(id: string | undefined, override?: string): PillMeta {\n if (!id) return { label: override ?? \"—\", variant: \"neutral\" };\n const known = DEAL_STAGE[id];\n if (known) return { label: override ?? known.label, variant: known.variant };\n return { label: override ?? id, variant: \"neutral\" };\n}\n\nconst TICKET_PRIORITY: Record<string, PillMeta> = {\n LOW: { label: \"Low\", variant: \"neutral\" },\n MEDIUM: { label: \"Medium\", variant: \"info\" },\n HIGH: { label: \"High\", variant: \"warn\" },\n URGENT: { label: \"Urgent\", variant: \"error\" },\n};\n\nexport function ticketPriorityMeta(id: string | undefined): PillMeta {\n if (!id) return { label: \"—\", variant: \"neutral\" };\n return TICKET_PRIORITY[id] ?? { label: id, variant: \"neutral\" };\n}\n\nconst TICKET_STAGE: Record<string, PillMeta> = {\n \"1\": { label: \"New\", variant: \"info\" },\n \"2\": { label: \"Waiting on us\", variant: \"warn\" },\n \"3\": { label: \"Waiting on them\", variant: \"neutral\" },\n \"4\": { label: \"Closed\", variant: \"success\" },\n};\n\nexport function ticketStageMeta(id: string | undefined, override?: string): PillMeta {\n if (!id) return { label: override ?? \"—\", variant: \"neutral\" };\n const known = TICKET_STAGE[id];\n if (known) return { label: override ?? known.label, variant: known.variant };\n return { label: override ?? id, variant: \"neutral\" };\n}\n\nconst LIFECYCLE: Record<string, PillMeta> = {\n subscriber: { label: \"Subscriber\", variant: \"neutral\" },\n lead: { label: \"Lead\", variant: \"neutral\" },\n marketingqualifiedlead: { label: \"MQL\", variant: \"info\" },\n salesqualifiedlead: { label: \"SQL\", variant: \"info\" },\n opportunity: { label: \"Opportunity\", variant: \"info\" },\n customer: { label: \"Customer\", variant: \"success\" },\n evangelist: { label: \"Evangelist\", variant: \"success\" },\n other: { label: \"Other\", variant: \"neutral\" },\n};\n\nexport function lifecycleMeta(id: string | undefined): PillMeta {\n if (!id) return { label: \"—\", variant: \"neutral\" };\n return LIFECYCLE[id] ?? { label: id, variant: \"neutral\" };\n}\n\n// ─── formatters ───────────────────────────────────────────────────\n\nexport function formatUSD(raw: string | number | undefined | null): string {\n if (raw === undefined || raw === null || raw === \"\") return \"—\";\n const n = typeof raw === \"number\" ? raw : Number(raw);\n if (!Number.isFinite(n)) return String(raw);\n return n.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: n >= 1000 ? 0 : 2,\n });\n}\n\nexport function formatRelativeDate(iso: string | undefined): string {\n if (!iso) return \"—\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const now = new Date();\n const days = Math.round((d.getTime() - now.getTime()) / 86_400_000);\n const dateStr = d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n if (days === 0) return `${dateStr} · today`;\n if (days > 0) return `${dateStr} · in ${days} day${days === 1 ? \"\" : \"s\"}`;\n const overdue = -days;\n return `${dateStr} · ${overdue} day${overdue === 1 ? \"\" : \"s\"} overdue`;\n}\n\nexport function timeAgo(iso: string | undefined): string {\n if (!iso) return \"—\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const sec = Math.round((Date.now() - d.getTime()) / 1000);\n if (sec < 60) return \"just now\";\n const min = Math.round(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.round(min / 60);\n if (hr < 24) return `${hr}h ago`;\n const day = Math.round(hr / 24);\n if (day < 7) return `${day}d ago`;\n const wk = Math.round(day / 7);\n if (wk < 5) return `${wk}w ago`;\n return d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n}\n\nexport function addDaysISO(n: number): string {\n const d = new Date();\n d.setDate(d.getDate() + n);\n return d.toISOString().slice(0, 10);\n}\n\nexport function minusHoursISO(n: number): string {\n const d = new Date();\n d.setHours(d.getHours() - n);\n return d.toISOString();\n}\n\n// ─── URL builders ─────────────────────────────────────────────────\n\nconst PORTAL_FALLBACK = \"0\";\n\nexport function recordUrl(\n type: \"deal\" | \"company\" | \"contact\" | \"ticket\" | \"engagement\",\n id: string,\n portalId?: string,\n): string {\n const portal = portalId || PORTAL_FALLBACK;\n return `https://app.hubspot.com/contacts/${portal}/${type}/${id}`;\n}\n\nexport function pipelineUrl(portalId?: string, pipeline?: string): string {\n const portal = portalId || PORTAL_FALLBACK;\n const path = pipeline ? `?pipeline=${encodeURIComponent(pipeline)}` : \"\";\n return `https://app.hubspot.com/pipelines/${portal}/deals${path}`;\n}\n\n// ─── favicon helper ───────────────────────────────────────────────\n\nexport function faviconFor(domain: string | undefined, size = 32): string | undefined {\n if (!domain) return undefined;\n return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(domain)}&sz=${size}`;\n}\n\n// ─── pill → dot bridge ────────────────────────────────────────────\n//\n// CardHeader's status slot wants a StatusDot variant. StatusPill's\n// variant set is wider; this is the canonical mapping.\n\nexport function pillToDot(v: StatusPillVariant): StatusDotVariant {\n switch (v) {\n case \"success\": return \"live\";\n case \"info\": return \"active\";\n case \"warn\": return \"warn\";\n case \"error\": return \"error\";\n default: return \"muted\";\n }\n}\n\n// ─── HubSpot brand mark ───────────────────────────────────────────\n//\n// Simplified mark — three satellites linked to a central node. Reads\n// at 14×14 without shipping the full brand artwork. Uses currentColor\n// so the consumer can recolor it (CardHeader's vendor strip pipes the\n// HubSpot brand orange in via inline `style.color`).\n\nimport type { ReactNode } from \"react\";\nimport type { CardVendor } from \"@apteva/ui-kit\";\n\nexport const hubspotLogo: ReactNode = (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden>\n <circle cx=\"18\" cy=\"6\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2.2\" />\n <circle cx=\"6\" cy=\"12\" r=\"2.2\" />\n <circle cx=\"14\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8.2 12 L11 12 M16 7.5 L15 10.2 M16 16.5 L15 13.8\" stroke=\"currentColor\" strokeWidth=\"1.2\" fill=\"none\" />\n </svg>\n);\n\n// HubSpot's official brand orange. Passed through CardHeader's\n// `vendor.color` so the brand strip on every HubSpot-emitted card\n// reads as obviously HubSpot at a glance, in both light and dark.\nexport const HUBSPOT_BRAND_COLOR = \"#FF7A59\";\n\nexport const hubspotVendor: CardVendor = {\n name: \"HubSpot\",\n logo: hubspotLogo,\n color: HUBSPOT_BRAND_COLOR,\n};\n"
22
+ ],
23
+ "mappings": "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",
24
+ "debugId": "C7DA5F38C945DC3864756E2164756E21",
25
+ "names": []
26
+ }
@@ -0,0 +1,22 @@
1
+ interface Props {
2
+ company_id: string;
3
+ name?: string;
4
+ domain?: string;
5
+ industry?: string;
6
+ /** HubSpot returns numberofemployees as a string. */
7
+ numberofemployees?: string;
8
+ city?: string;
9
+ country?: string;
10
+ lifecyclestage?: string;
11
+ /** Sum of open-deal amounts associated with this company. Caller
12
+ * pre-computes (avoids an extra fetch on render). */
13
+ open_deal_total?: string;
14
+ open_deal_count?: number;
15
+ description?: string;
16
+ portal_id?: string;
17
+ preview?: boolean;
18
+ projectId?: string;
19
+ }
20
+ export default function CompanyCard(props: Props): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=CompanyCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompanyCard.d.ts","sourceRoot":"","sources":["../../../src/ui/hubspot/CompanyCard.tsx"],"names":[],"mappings":"AAQA,UAAU,KAAK;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;wDACoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA+BD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,KAAK,+BAwD/C"}
@@ -0,0 +1,63 @@
1
+ // CompanyCard — single HubSpot company. Domain favicon as the leading
2
+ // visual, lifecycle stage as the right-side pill, key facts in the
3
+ // data list. Designed to slot into chat after a get-by-id and into
4
+ // the dashboard's"key accounts" tile.
5
+ import { Card, CardHeader, StatusPill, DataList } from "@apteva/ui-kit";
6
+ import { lifecycleMeta, recordUrl, faviconFor, pillToDot, formatUSD, hubspotVendor } from "./lib/hubspot";
7
+ const previewSample = {
8
+ company_id: "1234567890",
9
+ name: "Acme Logistics",
10
+ domain: "acme-logistics.com",
11
+ industry: "Transportation & Logistics",
12
+ numberofemployees: "250",
13
+ city: "Chicago",
14
+ country: "United States",
15
+ lifecyclestage: "customer",
16
+ open_deal_total: "48000",
17
+ open_deal_count: 1,
18
+ description: "Mid-market freight + last-mile logistics provider.",
19
+ portal_id: "0",
20
+ };
21
+ function prettyIndustry(raw) {
22
+ if (!raw)
23
+ return undefined;
24
+ // HubSpot industries are SHOUTY_SNAKE_CASE — humanize for display.
25
+ return raw
26
+ .split("_")
27
+ .map((s) => s.length > 0 ? s[0].toUpperCase() + s.slice(1).toLowerCase() : s)
28
+ .join(" ")
29
+ .replace(/_/g, "");
30
+ }
31
+ export default function CompanyCard(props) {
32
+ const p = props.preview ? { ...previewSample, ...props } : props;
33
+ const lifecycle = lifecycleMeta(p.lifecyclestage);
34
+ const url = recordUrl("company", p.company_id, p.portal_id);
35
+ const favicon = faviconFor(p.domain, 32);
36
+ return (<Card>
37
+ <CardHeader vendor={hubspotVendor} title={p.name || `Company ${p.company_id}`} subtitle={p.domain} status={{ label: lifecycle.label, variant: pillToDot(lifecycle.variant) }} action={{ label: "View in HubSpot", href: url }}/>
38
+ <div className="px-3 py-3 flex flex-col gap-3">
39
+ <div className="flex items-center gap-3">
40
+ {favicon && (<img src={favicon} alt="" width={32} height={32} className="rounded-md bg-bg-hover flex-shrink-0"/>)}
41
+ <div className="min-w-0 flex-1">
42
+ <div className="text-text font-medium truncate">{p.name}</div>
43
+ {p.description && (<div className="text-text-dim text-xs line-clamp-2">{p.description}</div>)}
44
+ </div>
45
+ </div>
46
+
47
+ <DataList items={[
48
+ { label: "Lifecycle", value: <StatusPill variant={lifecycle.variant}>{lifecycle.label}</StatusPill> },
49
+ ...(p.industry ? [{ label: "Industry", value: prettyIndustry(p.industry) }] : []),
50
+ ...(p.numberofemployees ? [{ label: "Employees", value: <span className="tabular-nums">{Number(p.numberofemployees).toLocaleString("en-US")}</span> }] : []),
51
+ ...(p.city || p.country ? [{ label: "Location", value: [p.city, p.country].filter(Boolean).join(",") }] : []),
52
+ ...(p.open_deal_count !== undefined && p.open_deal_count > 0 ? [{
53
+ label: "Open deals",
54
+ value: (<span className="inline-flex items-center gap-1.5 tabular-nums">
55
+ <span className="text-text font-medium">{p.open_deal_count}</span>
56
+ {p.open_deal_total !== undefined && (<span className="text-text-dim">· {formatUSD(p.open_deal_total)}</span>)}
57
+ </span>),
58
+ }] : []),
59
+ ]}/>
60
+ </div>
61
+ </Card>);
62
+ }
63
+ //# sourceMappingURL=CompanyCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompanyCard.js","sourceRoot":"","sources":["../../../src/ui/hubspot/CompanyCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import{Card as K,CardHeader as P,StatusPill as R,DataList as O}from"@apteva/ui-kit";import{jsx as Z,jsxs as H}from"react/jsx-runtime";var B={subscriber:{label:"Subscriber",variant:"neutral"},lead:{label:"Lead",variant:"neutral"},marketingqualifiedlead:{label:"MQL",variant:"info"},salesqualifiedlead:{label:"SQL",variant:"info"},opportunity:{label:"Opportunity",variant:"info"},customer:{label:"Customer",variant:"success"},evangelist:{label:"Evangelist",variant:"success"},other:{label:"Other",variant:"neutral"}};function V(J){if(!J)return{label:"—",variant:"neutral"};return B[J]??{label:J,variant:"neutral"}}function G(J){if(J===void 0||J===null||J==="")return"—";let q=typeof J==="number"?J:Number(J);if(!Number.isFinite(q))return String(J);return q.toLocaleString("en-US",{style:"currency",currency:"USD",maximumFractionDigits:q>=1000?0:2})}var F="0";function N(J,q,W){return`https://app.hubspot.com/contacts/${W||F}/${J}/${q}`}function g(J,q=32){if(!J)return;return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(J)}&sz=${q}`}function z(J){switch(J){case"success":return"live";case"info":return"active";case"warn":return"warn";case"error":return"error";default:return"muted"}}var U=H("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"currentColor","aria-hidden":!0,children:[Z("circle",{cx:"18",cy:"6",r:"2.2"}),Z("circle",{cx:"18",cy:"18",r:"2.2"}),Z("circle",{cx:"6",cy:"12",r:"2.2"}),Z("circle",{cx:"14",cy:"12",r:"3",fill:"none",stroke:"currentColor",strokeWidth:"1.5"}),Z("path",{d:"M8.2 12 L11 12 M16 7.5 L15 10.2 M16 16.5 L15 13.8",stroke:"currentColor",strokeWidth:"1.2",fill:"none"})]}),D="#FF7A59",Y={name:"HubSpot",logo:U,color:D};import{jsx as Q,jsxs as X}from"react/jsx-runtime";var b={company_id:"1234567890",name:"Acme Logistics",domain:"acme-logistics.com",industry:"Transportation & Logistics",numberofemployees:"250",city:"Chicago",country:"United States",lifecyclestage:"customer",open_deal_total:"48000",open_deal_count:1,description:"Mid-market freight + last-mile logistics provider.",portal_id:"0"};function E(J){if(!J)return;return J.split("_").map((q)=>q.length>0?q[0].toUpperCase()+q.slice(1).toLowerCase():q).join(" ").replace(/_/g,"")}function _(J){let q=J.preview?{...b,...J}:J,W=V(q.lifecyclestage),$=N("company",q.company_id,q.portal_id),M=g(q.domain,32);return X(K,{children:[Q(P,{vendor:Y,title:q.name||`Company ${q.company_id}`,subtitle:q.domain,status:{label:W.label,variant:z(W.variant)},action:{label:"View in HubSpot",href:$}}),X("div",{className:"px-3 py-3 flex flex-col gap-3",children:[X("div",{className:"flex items-center gap-3",children:[M&&Q("img",{src:M,alt:"",width:32,height:32,className:"rounded-md bg-bg-hover flex-shrink-0"}),X("div",{className:"min-w-0 flex-1",children:[Q("div",{className:"text-text font-medium truncate",children:q.name}),q.description&&Q("div",{className:"text-text-dim text-xs line-clamp-2",children:q.description})]})]}),Q(O,{items:[{label:"Lifecycle",value:Q(R,{variant:W.variant,children:W.label})},...q.industry?[{label:"Industry",value:E(q.industry)}]:[],...q.numberofemployees?[{label:"Employees",value:Q("span",{className:"tabular-nums",children:Number(q.numberofemployees).toLocaleString("en-US")})}]:[],...q.city||q.country?[{label:"Location",value:[q.city,q.country].filter(Boolean).join(",")}]:[],...q.open_deal_count!==void 0&&q.open_deal_count>0?[{label:"Open deals",value:X("span",{className:"inline-flex items-center gap-1.5 tabular-nums",children:[Q("span",{className:"text-text font-medium",children:q.open_deal_count}),q.open_deal_total!==void 0&&X("span",{className:"text-text-dim",children:["· ",G(q.open_deal_total)]})]})}]:[]]})]})]})}export{_ as default};
2
+
3
+ //# debugId=58E670420209060564756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ui/hubspot/CompanyCard.tsx", "../../../src/ui/hubspot/lib/hubspot.tsx"],
4
+ "sourcesContent": [
5
+ "// CompanyCard — single HubSpot company. Domain favicon as the leading\n// visual, lifecycle stage as the right-side pill, key facts in the\n// data list. Designed to slot into chat after a get-by-id and into\n// the dashboard's\"key accounts\" tile.\n\nimport { Card, CardHeader, StatusPill, DataList } from \"@apteva/ui-kit\";\nimport { lifecycleMeta, recordUrl, faviconFor, pillToDot, formatUSD, hubspotVendor } from \"./lib/hubspot\";\n\ninterface Props {\n company_id: string;\n name?: string;\n domain?: string;\n industry?: string;\n /** HubSpot returns numberofemployees as a string. */\n numberofemployees?: string;\n city?: string;\n country?: string;\n lifecyclestage?: string;\n /** Sum of open-deal amounts associated with this company. Caller\n * pre-computes (avoids an extra fetch on render). */\n open_deal_total?: string;\n open_deal_count?: number;\n description?: string;\n portal_id?: string;\n preview?: boolean;\n projectId?: string;\n}\n\nconst previewSample: Required<Pick<Props,\n |\"company_id\" |\"name\" |\"domain\" |\"industry\" |\"numberofemployees\"\n |\"city\" |\"country\" |\"lifecyclestage\" |\"open_deal_total\"\n |\"open_deal_count\" |\"description\" |\"portal_id\"\n>> = {\n company_id: \"1234567890\",\n name: \"Acme Logistics\",\n domain: \"acme-logistics.com\",\n industry: \"Transportation & Logistics\",\n numberofemployees: \"250\",\n city: \"Chicago\",\n country: \"United States\",\n lifecyclestage: \"customer\",\n open_deal_total: \"48000\",\n open_deal_count: 1,\n description: \"Mid-market freight + last-mile logistics provider.\",\n portal_id: \"0\",\n};\n\nfunction prettyIndustry(raw: string | undefined): string | undefined {\n if (!raw) return undefined;\n // HubSpot industries are SHOUTY_SNAKE_CASE — humanize for display.\n return raw\n .split(\"_\")\n .map((s) => s.length > 0 ? s[0]!.toUpperCase() + s.slice(1).toLowerCase() : s)\n .join(\" \")\n .replace(/_/g,\"\");\n}\n\nexport default function CompanyCard(props: Props) {\n const p: Props = props.preview ? { ...previewSample, ...props } : props;\n const lifecycle = lifecycleMeta(p.lifecyclestage);\n const url = recordUrl(\"company\", p.company_id, p.portal_id);\n const favicon = faviconFor(p.domain, 32);\n\n return (\n <Card>\n <CardHeader\n vendor={hubspotVendor}\n title={p.name || `Company ${p.company_id}`}\n subtitle={p.domain}\n status={{ label: lifecycle.label, variant: pillToDot(lifecycle.variant) }}\n action={{ label: \"View in HubSpot\", href: url }}\n />\n <div className=\"px-3 py-3 flex flex-col gap-3\">\n <div className=\"flex items-center gap-3\">\n {favicon && (\n <img\n src={favicon}\n alt=\"\"\n width={32}\n height={32}\n className=\"rounded-md bg-bg-hover flex-shrink-0\"\n />\n )}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-text font-medium truncate\">{p.name}</div>\n {p.description && (\n <div className=\"text-text-dim text-xs line-clamp-2\">{p.description}</div>\n )}\n </div>\n </div>\n\n <DataList\n items={[\n { label: \"Lifecycle\", value: <StatusPill variant={lifecycle.variant}>{lifecycle.label}</StatusPill> },\n ...(p.industry ? [{ label: \"Industry\", value: prettyIndustry(p.industry)! }] : []),\n ...(p.numberofemployees ? [{ label: \"Employees\", value: <span className=\"tabular-nums\">{Number(p.numberofemployees).toLocaleString(\"en-US\")}</span> }] : []),\n ...(p.city || p.country ? [{ label: \"Location\", value: [p.city, p.country].filter(Boolean).join(\",\") }] : []),\n ...(p.open_deal_count !== undefined && p.open_deal_count > 0 ? [{\n label: \"Open deals\",\n value: (\n <span className=\"inline-flex items-center gap-1.5 tabular-nums\">\n <span className=\"text-text font-medium\">{p.open_deal_count}</span>\n {p.open_deal_total !== undefined && (\n <span className=\"text-text-dim\">· {formatUSD(p.open_deal_total)}</span>\n )}\n </span>\n ),\n }] : []),\n ]}\n />\n </div>\n </Card>\n );\n}\n",
6
+ "// Shared helpers for every HubSpot UI component.\n//\n// * pill metadata for deal stages, ticket priorities, lifecycle\n// stages — one source of truth for label + color across cards\n// * formatters: USD, relative date, relative time-since\n// * URL builders for HubSpot canonical record links\n// * favicon helper (Google s2)\n// * pillToDot — bridges StatusPill variant → StatusDot variant for\n// CardHeader's status slot\n// * HubSpot brand mark SVG used in every card header\n\nimport type { StatusDotVariant, StatusPillVariant } from \"@apteva/ui-kit\";\n\n// ─── pill metadata ────────────────────────────────────────────────\n\nexport type PillMeta = { label: string; variant: StatusPillVariant };\n\nconst DEAL_STAGE: Record<string, PillMeta> = {\n appointmentscheduled: { label: \"Appointment scheduled\", variant: \"info\" },\n qualifiedtobuy: { label: \"Qualified to buy\", variant: \"info\" },\n presentationscheduled: { label: \"Presentation scheduled\", variant: \"info\" },\n decisionmakerboughtin: { label: \"Decision-maker bought in \", variant: \"info\" },\n contractsent: { label: \"Contract sent\", variant: \"warn\" },\n closedwon: { label: \"Closed (won)\", variant: \"success\" },\n closedlost: { label: \"Closed (lost)\", variant: \"error\" },\n};\n\nexport function dealStageMeta(id: string | undefined, override?: string): PillMeta {\n if (!id) return { label: override ?? \"—\", variant: \"neutral\" };\n const known = DEAL_STAGE[id];\n if (known) return { label: override ?? known.label, variant: known.variant };\n return { label: override ?? id, variant: \"neutral\" };\n}\n\nconst TICKET_PRIORITY: Record<string, PillMeta> = {\n LOW: { label: \"Low\", variant: \"neutral\" },\n MEDIUM: { label: \"Medium\", variant: \"info\" },\n HIGH: { label: \"High\", variant: \"warn\" },\n URGENT: { label: \"Urgent\", variant: \"error\" },\n};\n\nexport function ticketPriorityMeta(id: string | undefined): PillMeta {\n if (!id) return { label: \"—\", variant: \"neutral\" };\n return TICKET_PRIORITY[id] ?? { label: id, variant: \"neutral\" };\n}\n\nconst TICKET_STAGE: Record<string, PillMeta> = {\n \"1\": { label: \"New\", variant: \"info\" },\n \"2\": { label: \"Waiting on us\", variant: \"warn\" },\n \"3\": { label: \"Waiting on them\", variant: \"neutral\" },\n \"4\": { label: \"Closed\", variant: \"success\" },\n};\n\nexport function ticketStageMeta(id: string | undefined, override?: string): PillMeta {\n if (!id) return { label: override ?? \"—\", variant: \"neutral\" };\n const known = TICKET_STAGE[id];\n if (known) return { label: override ?? known.label, variant: known.variant };\n return { label: override ?? id, variant: \"neutral\" };\n}\n\nconst LIFECYCLE: Record<string, PillMeta> = {\n subscriber: { label: \"Subscriber\", variant: \"neutral\" },\n lead: { label: \"Lead\", variant: \"neutral\" },\n marketingqualifiedlead: { label: \"MQL\", variant: \"info\" },\n salesqualifiedlead: { label: \"SQL\", variant: \"info\" },\n opportunity: { label: \"Opportunity\", variant: \"info\" },\n customer: { label: \"Customer\", variant: \"success\" },\n evangelist: { label: \"Evangelist\", variant: \"success\" },\n other: { label: \"Other\", variant: \"neutral\" },\n};\n\nexport function lifecycleMeta(id: string | undefined): PillMeta {\n if (!id) return { label: \"—\", variant: \"neutral\" };\n return LIFECYCLE[id] ?? { label: id, variant: \"neutral\" };\n}\n\n// ─── formatters ───────────────────────────────────────────────────\n\nexport function formatUSD(raw: string | number | undefined | null): string {\n if (raw === undefined || raw === null || raw === \"\") return \"—\";\n const n = typeof raw === \"number\" ? raw : Number(raw);\n if (!Number.isFinite(n)) return String(raw);\n return n.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n maximumFractionDigits: n >= 1000 ? 0 : 2,\n });\n}\n\nexport function formatRelativeDate(iso: string | undefined): string {\n if (!iso) return \"—\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const now = new Date();\n const days = Math.round((d.getTime() - now.getTime()) / 86_400_000);\n const dateStr = d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n if (days === 0) return `${dateStr} · today`;\n if (days > 0) return `${dateStr} · in ${days} day${days === 1 ? \"\" : \"s\"}`;\n const overdue = -days;\n return `${dateStr} · ${overdue} day${overdue === 1 ? \"\" : \"s\"} overdue`;\n}\n\nexport function timeAgo(iso: string | undefined): string {\n if (!iso) return \"—\";\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const sec = Math.round((Date.now() - d.getTime()) / 1000);\n if (sec < 60) return \"just now\";\n const min = Math.round(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.round(min / 60);\n if (hr < 24) return `${hr}h ago`;\n const day = Math.round(hr / 24);\n if (day < 7) return `${day}d ago`;\n const wk = Math.round(day / 7);\n if (wk < 5) return `${wk}w ago`;\n return d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n}\n\nexport function addDaysISO(n: number): string {\n const d = new Date();\n d.setDate(d.getDate() + n);\n return d.toISOString().slice(0, 10);\n}\n\nexport function minusHoursISO(n: number): string {\n const d = new Date();\n d.setHours(d.getHours() - n);\n return d.toISOString();\n}\n\n// ─── URL builders ─────────────────────────────────────────────────\n\nconst PORTAL_FALLBACK = \"0\";\n\nexport function recordUrl(\n type: \"deal\" | \"company\" | \"contact\" | \"ticket\" | \"engagement\",\n id: string,\n portalId?: string,\n): string {\n const portal = portalId || PORTAL_FALLBACK;\n return `https://app.hubspot.com/contacts/${portal}/${type}/${id}`;\n}\n\nexport function pipelineUrl(portalId?: string, pipeline?: string): string {\n const portal = portalId || PORTAL_FALLBACK;\n const path = pipeline ? `?pipeline=${encodeURIComponent(pipeline)}` : \"\";\n return `https://app.hubspot.com/pipelines/${portal}/deals${path}`;\n}\n\n// ─── favicon helper ───────────────────────────────────────────────\n\nexport function faviconFor(domain: string | undefined, size = 32): string | undefined {\n if (!domain) return undefined;\n return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(domain)}&sz=${size}`;\n}\n\n// ─── pill → dot bridge ────────────────────────────────────────────\n//\n// CardHeader's status slot wants a StatusDot variant. StatusPill's\n// variant set is wider; this is the canonical mapping.\n\nexport function pillToDot(v: StatusPillVariant): StatusDotVariant {\n switch (v) {\n case \"success\": return \"live\";\n case \"info\": return \"active\";\n case \"warn\": return \"warn\";\n case \"error\": return \"error\";\n default: return \"muted\";\n }\n}\n\n// ─── HubSpot brand mark ───────────────────────────────────────────\n//\n// Simplified mark — three satellites linked to a central node. Reads\n// at 14×14 without shipping the full brand artwork. Uses currentColor\n// so the consumer can recolor it (CardHeader's vendor strip pipes the\n// HubSpot brand orange in via inline `style.color`).\n\nimport type { ReactNode } from \"react\";\nimport type { CardVendor } from \"@apteva/ui-kit\";\n\nexport const hubspotLogo: ReactNode = (\n <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden>\n <circle cx=\"18\" cy=\"6\" r=\"2.2\" />\n <circle cx=\"18\" cy=\"18\" r=\"2.2\" />\n <circle cx=\"6\" cy=\"12\" r=\"2.2\" />\n <circle cx=\"14\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8.2 12 L11 12 M16 7.5 L15 10.2 M16 16.5 L15 13.8\" stroke=\"currentColor\" strokeWidth=\"1.2\" fill=\"none\" />\n </svg>\n);\n\n// HubSpot's official brand orange. Passed through CardHeader's\n// `vendor.color` so the brand strip on every HubSpot-emitted card\n// reads as obviously HubSpot at a glance, in both light and dark.\nexport const HUBSPOT_BRAND_COLOR = \"#FF7A59\";\n\nexport const hubspotVendor: CardVendor = {\n name: \"HubSpot\",\n logo: hubspotLogo,\n color: HUBSPOT_BRAND_COLOR,\n};\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "58E670420209060564756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,22 @@
1
+ interface Props {
2
+ contact_id: string;
3
+ firstname?: string;
4
+ lastname?: string;
5
+ email?: string;
6
+ phone?: string;
7
+ jobtitle?: string;
8
+ lifecyclestage?: string;
9
+ /** Pre-resolved by the agent (HubSpot returns associated company id). */
10
+ company_name?: string;
11
+ company_domain?: string;
12
+ /** ISO timestamp of the most recent engagement (email open, call,
13
+ * note, etc.) — surfaced as"emailed 3d ago" /"no contact in 14d". */
14
+ last_engagement_at?: string;
15
+ last_engagement_kind?: string;
16
+ portal_id?: string;
17
+ preview?: boolean;
18
+ projectId?: string;
19
+ }
20
+ export default function ContactCard(props: Props): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=ContactCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactCard.d.ts","sourceRoot":"","sources":["../../../src/ui/hubspot/ContactCard.tsx"],"names":[],"mappings":"AAQA,UAAU,KAAK;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;wEACoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AA8BD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,KAAK,+BA+C/C"}