@flamingo-stack/openframe-frontend-core 0.0.213 → 0.0.214-snapshot.20260528192313

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 (746) hide show
  1. package/dist/{chunk-35XIT2CF.cjs → chunk-2G3NXF6J.cjs} +17 -17
  2. package/dist/{chunk-35XIT2CF.cjs.map → chunk-2G3NXF6J.cjs.map} +1 -1
  3. package/dist/{chunk-IK2X5YJU.js → chunk-7PCP7YQR.js} +2 -2
  4. package/dist/{chunk-ZDF6F7ED.cjs → chunk-D4MNFY67.cjs} +4 -3
  5. package/dist/chunk-D4MNFY67.cjs.map +1 -0
  6. package/dist/{chunk-OTKJASSX.cjs → chunk-NGFP4RVL.cjs} +24 -24
  7. package/dist/{chunk-OTKJASSX.cjs.map → chunk-NGFP4RVL.cjs.map} +1 -1
  8. package/dist/{chunk-3JWIJJ44.js → chunk-R6MLPU4A.js} +2 -2
  9. package/dist/{chunk-ZTJVRSN5.js → chunk-WQZP3JIZ.js} +4 -3
  10. package/dist/chunk-WQZP3JIZ.js.map +1 -0
  11. package/dist/components/chat/index.cjs +2 -2
  12. package/dist/components/chat/index.js +1 -1
  13. package/dist/components/contact/index.cjs +3 -3
  14. package/dist/components/contact/index.js +2 -2
  15. package/dist/components/features/index.cjs +2 -2
  16. package/dist/components/features/index.js +1 -1
  17. package/dist/components/index.cjs +49 -49
  18. package/dist/components/index.js +2 -2
  19. package/dist/components/navigation/index.cjs +2 -2
  20. package/dist/components/navigation/index.js +1 -1
  21. package/dist/components/tickets/index.cjs +61 -61
  22. package/dist/components/tickets/index.js +3 -3
  23. package/dist/components/ui/index.cjs +2 -2
  24. package/dist/components/ui/index.js +1 -1
  25. package/dist/index.cjs +2 -2
  26. package/dist/index.js +1 -1
  27. package/package.json +1 -1
  28. package/src/.index.md +36 -34
  29. package/src/components/.alert-dialog.md +27 -23
  30. package/src/components/.announcement-bar.md +26 -21
  31. package/src/components/.breadcrumb.md +19 -15
  32. package/src/components/.calendar.md +24 -19
  33. package/src/components/.categories-cart.md +29 -24
  34. package/src/components/.checkbox.md +23 -25
  35. package/src/components/.chevron-button.md +37 -32
  36. package/src/components/.comment-card.md +32 -62
  37. package/src/components/.dialog.md +26 -26
  38. package/src/components/.dynamic-skeleton.md +54 -57
  39. package/src/components/.empty-state.md +42 -51
  40. package/src/components/.faq-accordion.md +27 -21
  41. package/src/components/.filter-chip.md +41 -24
  42. package/src/components/.flamingo-logo.md +20 -23
  43. package/src/components/.footer-waitlist-button.md +29 -22
  44. package/src/components/.footer.md +32 -32
  45. package/src/components/.icons-block.md +27 -17
  46. package/src/components/.image-cropper.md +41 -32
  47. package/src/components/.index.md +33 -39
  48. package/src/components/.input.md +31 -35
  49. package/src/components/.logs-list.md +31 -20
  50. package/src/components/.media-carousel.md +35 -36
  51. package/src/components/.open-source-features.md +33 -16
  52. package/src/components/.pagination.md +52 -51
  53. package/src/components/.provider-button.md +21 -23
  54. package/src/components/.select.md +31 -20
  55. package/src/components/.sidebar.md +34 -24
  56. package/src/components/.smooth-accordion.md +29 -24
  57. package/src/components/.social-icon-row.md +36 -32
  58. package/src/components/.textarea.md +25 -31
  59. package/src/components/.tool-icon.md +24 -26
  60. package/src/components/.unified-filter-logic.md +37 -30
  61. package/src/components/.unified-pagination.md +23 -22
  62. package/src/components/.user-summary-stub.md +38 -22
  63. package/src/components/.vendor-display-button.md +25 -25
  64. package/src/components/.vendor-icon.md +33 -25
  65. package/src/components/.why-it-matters.md +28 -25
  66. package/src/components/chat/.approval-batch-message.md +51 -0
  67. package/src/components/chat/.approval-request-message.md +35 -34
  68. package/src/components/chat/.chat-attachment-bar.md +64 -0
  69. package/src/components/chat/.chat-container.md +36 -18
  70. package/src/components/chat/.chat-input.md +37 -20
  71. package/src/components/chat/.chat-message-enhanced.md +30 -49
  72. package/src/components/chat/.chat-message-list.md +45 -32
  73. package/src/components/chat/.chat-message-skeleton.md +26 -22
  74. package/src/components/chat/.chat-panel-context.md +52 -0
  75. package/src/components/chat/.chat-ref.types.md +42 -0
  76. package/src/components/chat/.chat-sidebar-skeleton.md +34 -25
  77. package/src/components/chat/.chat-sidebar.md +31 -26
  78. package/src/components/chat/.chat-ticket-list.md +39 -0
  79. package/src/components/chat/.context-compaction-display.md +36 -0
  80. package/src/components/chat/.cycling-phrase.md +52 -0
  81. package/src/components/chat/.embeddable-chat.md +48 -0
  82. package/src/components/chat/.expand-chevron.md +24 -0
  83. package/src/components/chat/.index.md +31 -35
  84. package/src/components/chat/.mingo-onboarding-card-skeleton.md +44 -0
  85. package/src/components/chat/.mingo-onboarding-card.md +62 -0
  86. package/src/components/chat/.model-display.md +32 -30
  87. package/src/components/chat/.nav-link-anchor-via-runtime.md +40 -0
  88. package/src/components/chat/.remark-card-links.md +38 -0
  89. package/src/components/chat/.slash-command-suggestions.md +47 -0
  90. package/src/components/chat/.source-action-button.md +48 -0
  91. package/src/components/chat/.thinking-display.md +42 -0
  92. package/src/components/chat/.tool-call-blocks.md +45 -0
  93. package/src/components/chat/.tool-execution-display.md +44 -36
  94. package/src/components/chat/chat-container.tsx +1 -1
  95. package/src/components/chat/entity-cards/.admin-content-card.md +43 -0
  96. package/src/components/chat/entity-cards/.block-card.md +47 -0
  97. package/src/components/chat/entity-cards/.blog-card.md +52 -0
  98. package/src/components/chat/entity-cards/.blog-image-placeholder.md +39 -0
  99. package/src/components/chat/entity-cards/.campaign-card-admin.md +47 -0
  100. package/src/components/chat/entity-cards/.case-study-card.md +58 -0
  101. package/src/components/chat/entity-cards/.chat-ticket-item.md +40 -0
  102. package/src/components/chat/entity-cards/.chat-video-entity-card.md +43 -0
  103. package/src/components/chat/entity-cards/.customer-interview-card.md +53 -0
  104. package/src/components/chat/entity-cards/.data-room-doc-card.md +47 -0
  105. package/src/components/chat/entity-cards/.dispatch.md +39 -0
  106. package/src/components/chat/entity-cards/.entity-author-card.md +51 -0
  107. package/src/components/chat/entity-cards/.generic-entity-card.md +62 -0
  108. package/src/components/chat/entity-cards/.github-activity-card.md +61 -0
  109. package/src/components/chat/entity-cards/.hubspot-ticket-card.md +53 -0
  110. package/src/components/chat/entity-cards/.index.md +66 -0
  111. package/src/components/chat/entity-cards/.investor-update-card.md +47 -0
  112. package/src/components/chat/entity-cards/.onboarding-guide-card.md +58 -0
  113. package/src/components/chat/entity-cards/.product-release-card-defaults.md +31 -0
  114. package/src/components/chat/entity-cards/.product-release-card.md +29 -0
  115. package/src/components/chat/entity-cards/.program-card-defaults.md +41 -0
  116. package/src/components/chat/entity-cards/.program-card.md +59 -0
  117. package/src/components/chat/entity-cards/.roadmap-card.md +46 -0
  118. package/src/components/chat/entity-cards/.roadmap-vote-button.md +52 -0
  119. package/src/components/chat/entity-cards/.slack-message-card.md +48 -0
  120. package/src/components/chat/entity-cards/.task-type-icon.md +47 -0
  121. package/src/components/chat/hooks/.index.md +36 -21
  122. package/src/components/chat/hooks/.use-chat-attachment-image-gallery.md +51 -0
  123. package/src/components/chat/hooks/.use-chat-attachments.md +48 -0
  124. package/src/components/chat/hooks/.use-chat-card-item.md +39 -0
  125. package/src/components/chat/hooks/.use-chat-identity.md +45 -0
  126. package/src/components/chat/hooks/.use-chat.md +58 -0
  127. package/src/components/chat/hooks/.use-chunk-catchup.md +46 -48
  128. package/src/components/chat/hooks/.use-close-on-navigation.md +44 -0
  129. package/src/components/chat/hooks/.use-collapsible.md +48 -0
  130. package/src/components/chat/hooks/.use-embedded-chat.md +32 -0
  131. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +40 -0
  132. package/src/components/chat/hooks/.use-nats-chat-adapter.md +52 -0
  133. package/src/components/chat/hooks/.use-nats-dialog-subscription.md +49 -30
  134. package/src/components/chat/hooks/.use-proxied-image-url.md +40 -0
  135. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +43 -40
  136. package/src/components/chat/hooks/.use-slash-commands.md +46 -0
  137. package/src/components/chat/hooks/.use-sse-chat-adapter.md +34 -0
  138. package/src/components/chat/hooks/.use-sse.md +60 -0
  139. package/src/components/chat/hooks/.use-unified-chat.md +57 -0
  140. package/src/components/chat/types/.api.types.md +52 -38
  141. package/src/components/chat/types/.chat.types.md +43 -34
  142. package/src/components/chat/types/.component.types.md +47 -48
  143. package/src/components/chat/types/.index.md +20 -27
  144. package/src/components/chat/types/.message.types.md +58 -48
  145. package/src/components/chat/types/.network.types.md +57 -31
  146. package/src/components/chat/types/.processing.types.md +49 -31
  147. package/src/components/chat/types/.unified-chat-state.types.md +41 -0
  148. package/src/components/chat/types/entities/.blog.md +43 -0
  149. package/src/components/chat/types/entities/.case-study.md +26 -0
  150. package/src/components/chat/types/entities/.content-ref.md +41 -0
  151. package/src/components/chat/types/entities/.customer-interview.md +28 -0
  152. package/src/components/chat/types/entities/.data-room-doc.md +36 -0
  153. package/src/components/chat/types/entities/.github-activity.md +43 -0
  154. package/src/components/chat/types/entities/.hubspot-ticket.md +53 -0
  155. package/src/components/chat/types/entities/.index.md +42 -0
  156. package/src/components/chat/types/entities/.investor-update.md +45 -0
  157. package/src/components/chat/types/entities/.onboarding-guide.md +50 -0
  158. package/src/components/chat/types/entities/.program-types.md +57 -0
  159. package/src/components/chat/types/entities/.roadmap-item.md +58 -0
  160. package/src/components/chat/types/entities/.slack-message.md +35 -0
  161. package/src/components/chat/utils/.agent-status-message.md +45 -0
  162. package/src/components/chat/utils/.auto-continuation-directive.md +58 -0
  163. package/src/components/chat/utils/.chat-attachment-markdown.md +54 -0
  164. package/src/components/chat/utils/.chat-authed-fetch.md +25 -0
  165. package/src/components/chat/utils/.chat-nav-resolution.md +46 -0
  166. package/src/components/chat/utils/.chat-proxy-auth-storage.md +38 -0
  167. package/src/components/chat/utils/.chip-action-class.md +34 -0
  168. package/src/components/chat/utils/.chip-styles.md +46 -0
  169. package/src/components/chat/utils/.chunk-parser.md +38 -28
  170. package/src/components/chat/utils/.clickup-task-type-utils.md +48 -0
  171. package/src/components/chat/utils/.compact-card-classes.md +62 -0
  172. package/src/components/chat/utils/.decide-new-tab.md +51 -0
  173. package/src/components/chat/utils/.external-app-urls.md +29 -0
  174. package/src/components/chat/utils/.extract-incomplete-message-state.md +25 -29
  175. package/src/components/chat/utils/.flatten-assistant-content.md +34 -0
  176. package/src/components/chat/utils/.icon-registry.md +46 -0
  177. package/src/components/chat/utils/.index.md +37 -32
  178. package/src/components/chat/utils/.is-cross-origin-url.md +35 -0
  179. package/src/components/chat/utils/.message-segment-accumulator.md +25 -34
  180. package/src/components/chat/utils/.nav-anchor-props.md +44 -0
  181. package/src/components/chat/utils/.nav-click-handler.md +47 -0
  182. package/src/components/chat/utils/.onboarding-icons.md +28 -0
  183. package/src/components/chat/utils/.process-historical-messages.md +46 -35
  184. package/src/components/chat/utils/.scroll-anchor.md +40 -0
  185. package/src/components/chat/utils/.slash-dispatch-utils.md +44 -0
  186. package/src/components/chat/utils/.source-icons.md +35 -0
  187. package/src/components/chat/utils/.source-row-cta.md +54 -0
  188. package/src/components/chat/utils/.tool-call-helpers.md +42 -0
  189. package/src/components/contact/.contact-form.md +43 -0
  190. package/src/components/contact/.index.md +27 -0
  191. package/src/components/features/.array-entry-manager.md +36 -45
  192. package/src/components/features/.changelog-manager.md +47 -21
  193. package/src/components/features/.changelog-sections-manager.md +21 -26
  194. package/src/components/features/.command-box.md +31 -28
  195. package/src/components/features/.entity-summary-editor.md +46 -0
  196. package/src/components/features/.entity-video-section.md +51 -0
  197. package/src/components/features/.figma-prototype-viewer.md +48 -29
  198. package/src/components/features/.filters-dropdown.md +33 -46
  199. package/src/components/features/.highlight-config-section.md +42 -0
  200. package/src/components/features/.highlight-generation-section.md +46 -0
  201. package/src/components/features/.highlight-video-combined-section.md +47 -0
  202. package/src/components/features/.highlight-video-preview.md +44 -0
  203. package/src/components/features/.highlight-video-section.md +47 -0
  204. package/src/components/features/.index.md +40 -66
  205. package/src/components/features/.media-gallery-manager.md +48 -38
  206. package/src/components/features/.more-about-button.md +22 -19
  207. package/src/components/features/.og-editor-preview.md +40 -36
  208. package/src/components/features/.parallax-image-showcase.md +33 -26
  209. package/src/components/features/.paths-display.md +42 -43
  210. package/src/components/features/.platform-badge.md +37 -36
  211. package/src/components/features/.platform-filter.md +23 -16
  212. package/src/components/features/.policy-configuration-panel.md +48 -56
  213. package/src/components/features/.provider-button.md +33 -36
  214. package/src/components/features/.push-button-selector.md +40 -29
  215. package/src/components/features/.release-media-manager.md +46 -31
  216. package/src/components/features/.section-selector.md +26 -31
  217. package/src/components/features/.select-button.md +35 -25
  218. package/src/components/features/.seo-editor-preview.md +41 -44
  219. package/src/components/features/.social-links-manager.md +25 -19
  220. package/src/components/features/.start-with-openframe-button.md +37 -29
  221. package/src/components/features/.status-filter-component.md +36 -20
  222. package/src/components/features/.tags-selector.md +40 -24
  223. package/src/components/features/.transcribe-and-summarize-combined-section.md +45 -0
  224. package/src/components/features/.transcribe-summarize-section.md +48 -0
  225. package/src/components/features/.transcript-summary-editor.md +53 -0
  226. package/src/components/features/.video-bites-display.md +46 -0
  227. package/src/components/features/.video-clips-section.md +41 -0
  228. package/src/components/features/.video-ratio-tabs.md +56 -0
  229. package/src/components/features/.video-source-selector.md +60 -0
  230. package/src/components/features/.video.md +44 -0
  231. package/src/components/features/.waitlist-form.md +60 -0
  232. package/src/components/features/ai-enrich/.AIEnrichButton.md +30 -27
  233. package/src/components/features/ai-enrich/.AIEnrichSection.md +46 -42
  234. package/src/components/features/board/.board-column-header.md +38 -0
  235. package/src/components/features/board/.board-column.md +43 -0
  236. package/src/components/features/board/.board.md +51 -0
  237. package/src/components/features/board/.color-utils.md +26 -0
  238. package/src/components/features/board/.index.md +56 -0
  239. package/src/components/features/board/.ticket-card-skeleton.md +38 -0
  240. package/src/components/features/board/.ticket-card.md +47 -0
  241. package/src/components/features/board/.types.md +45 -0
  242. package/src/components/features/board/.use-board-collapse.md +34 -0
  243. package/src/components/features/notifications/.index.md +57 -0
  244. package/src/components/features/notifications/.notification-drawer.md +34 -0
  245. package/src/components/features/notifications/.notification-tile.md +39 -0
  246. package/src/components/features/notifications/.notifications-context.md +73 -0
  247. package/src/components/features/notifications/.types.md +45 -0
  248. package/src/components/icons/.about-icon.md +20 -28
  249. package/src/components/icons/.ai-robot-icon.md +15 -17
  250. package/src/components/icons/.bash-icon.md +16 -23
  251. package/src/components/icons/.buildings-icon.md +10 -24
  252. package/src/components/icons/.capterra-icon.md +30 -26
  253. package/src/components/icons/.carta-icon.md +29 -0
  254. package/src/components/icons/.clickup-icon.md +26 -0
  255. package/src/components/icons/.cmd-icon.md +15 -22
  256. package/src/components/icons/.coins-icon.md +17 -25
  257. package/src/components/icons/.community-hub-icon.md +19 -25
  258. package/src/components/icons/.community-icon.md +24 -21
  259. package/src/components/icons/.compare-icon.md +32 -19
  260. package/src/components/icons/.copy-icon.md +29 -15
  261. package/src/components/icons/.custom-external-link-icon.md +19 -17
  262. package/src/components/icons/.custom-fork-icon.md +32 -21
  263. package/src/components/icons/.custom-license-icon.md +29 -25
  264. package/src/components/icons/.custom-star-icon.md +20 -28
  265. package/src/components/icons/.custom-time-icon.md +21 -22
  266. package/src/components/icons/.cut-vendor-costs-icon.md +6 -19
  267. package/src/components/icons/.dashboard-icon.md +13 -18
  268. package/src/components/icons/.deno-icon.md +16 -23
  269. package/src/components/icons/.donut-icon.md +12 -23
  270. package/src/components/icons/.double-chevron-icon.md +28 -36
  271. package/src/components/icons/.elestio-logo.md +13 -23
  272. package/src/components/icons/.empty-vendor-icon.md +16 -18
  273. package/src/components/icons/.explore-categories-icon.md +18 -29
  274. package/src/components/icons/.eye-icon.md +16 -26
  275. package/src/components/icons/.facebook-icon.md +9 -20
  276. package/src/components/icons/.figma-icon.md +8 -17
  277. package/src/components/icons/.filter-icon.md +15 -17
  278. package/src/components/icons/.flamingo-logo.md +28 -27
  279. package/src/components/icons/.folder-shield-icon.md +28 -19
  280. package/src/components/icons/.g2-icon.md +22 -21
  281. package/src/components/icons/.getapp-icon.md +25 -21
  282. package/src/components/icons/.github-icon.md +13 -25
  283. package/src/components/icons/.globe-icon.md +14 -19
  284. package/src/components/icons/.google-gemini-icon.md +16 -19
  285. package/src/components/icons/.google-logo.md +15 -21
  286. package/src/components/icons/.grid-view-icon.md +30 -19
  287. package/src/components/icons/.hamburger-icon.md +22 -20
  288. package/src/components/icons/.hand-dollar-icon.md +24 -34
  289. package/src/components/icons/.hotel-icon.md +27 -21
  290. package/src/components/icons/.icon-utils.md +28 -29
  291. package/src/components/icons/.image-icon.md +15 -22
  292. package/src/components/icons/.index.md +25 -28
  293. package/src/components/icons/.info-circle-icon.md +29 -30
  294. package/src/components/icons/.instagram-icon.md +10 -24
  295. package/src/components/icons/.jump-in-icon.md +18 -18
  296. package/src/components/icons/.linux-icon.md +18 -18
  297. package/src/components/icons/.log-out-icon.md +15 -23
  298. package/src/components/icons/.logs-icon.md +14 -23
  299. package/src/components/icons/.margin-crisis-icon.md +21 -20
  300. package/src/components/icons/.menu-icon.md +18 -19
  301. package/src/components/icons/.miami-cyber-gang-logo-face-only.md +18 -21
  302. package/src/components/icons/.miami-cyber-gang-logo.md +22 -14
  303. package/src/components/icons/.mlg-logo.md +18 -16
  304. package/src/components/icons/.moon-icon.md +32 -22
  305. package/src/components/icons/.ms-icon.md +30 -19
  306. package/src/components/icons/.nushell-icon.md +7 -21
  307. package/src/components/icons/.open-source-icon.md +19 -23
  308. package/src/components/icons/.openai-icon.md +9 -24
  309. package/src/components/icons/.openframe-ai-icons.md +25 -26
  310. package/src/components/icons/.openframe-logo.md +28 -22
  311. package/src/components/icons/.openframe-text.md +24 -27
  312. package/src/components/icons/.openmsp-logo.md +26 -23
  313. package/src/components/icons/.pilot-icon.md +23 -0
  314. package/src/components/icons/.powershell-icon.md +17 -22
  315. package/src/components/icons/.python-icon.md +16 -23
  316. package/src/components/icons/.queries-icon.md +13 -21
  317. package/src/components/icons/.reddit-icon.md +28 -24
  318. package/src/components/icons/.remote-control-icon.md +13 -17
  319. package/src/components/icons/.script-icon.md +27 -19
  320. package/src/components/icons/.search-icon.md +21 -21
  321. package/src/components/icons/.send-icon.md +14 -16
  322. package/src/components/icons/.settings-icon.md +30 -19
  323. package/src/components/icons/.shape-circle-dash-icon.md +16 -21
  324. package/src/components/icons/.shell-icon.md +15 -19
  325. package/src/components/icons/.shield-check-icon.md +18 -31
  326. package/src/components/icons/.shield-key-icon.md +25 -25
  327. package/src/components/icons/.shield-lock-icon.md +8 -18
  328. package/src/components/icons/.slack-icon.md +28 -32
  329. package/src/components/icons/.sparkles-icon.md +18 -23
  330. package/src/components/icons/.sso-configuration-icon.md +29 -16
  331. package/src/components/icons/.sun-icon.md +20 -18
  332. package/src/components/icons/.table-view-icon.md +17 -19
  333. package/src/components/icons/.telegram-icon.md +8 -22
  334. package/src/components/icons/.thumbs-down-icon.md +10 -19
  335. package/src/components/icons/.thumbs-up-icon.md +8 -17
  336. package/src/components/icons/.tool-directory-icons.md +24 -28
  337. package/src/components/icons/.trustpilot-icon.md +25 -22
  338. package/src/components/icons/.user-icon.md +26 -28
  339. package/src/components/icons/.users-group-icon.md +28 -24
  340. package/src/components/icons/.vendor-showcase-icons.md +21 -29
  341. package/src/components/icons/.vendors-icon.md +18 -22
  342. package/src/components/icons/.whatsapp-icon.md +30 -14
  343. package/src/components/icons/.x-icon.md +18 -23
  344. package/src/components/icons/.x-logo.md +13 -38
  345. package/src/components/icons/.youtube-icon.md +8 -19
  346. package/src/components/icons/device-type-icons/.get-device-type-icon.md +26 -34
  347. package/src/components/icons-v2-generated/.index.md +52 -0
  348. package/src/components/icons-v2-generated/alphabet/.index.md +33 -0
  349. package/src/components/icons-v2-generated/arrows/.index.md +39 -0
  350. package/src/components/icons-v2-generated/audio-and-visual/.index.md +40 -0
  351. package/src/components/icons-v2-generated/brand-logos/.elestio-logo-icon.md +40 -0
  352. package/src/components/icons-v2-generated/brand-logos/.gemini-logo-icon.md +37 -0
  353. package/src/components/icons-v2-generated/brand-logos/.google-gemini-logo-icon.md +33 -0
  354. package/src/components/icons-v2-generated/brand-logos/.index.md +38 -0
  355. package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-grey-icon.md +35 -0
  356. package/src/components/icons-v2-generated/brand-logos/.meshcentral-logo-icon.md +36 -0
  357. package/src/components/icons-v2-generated/buildings/.index.md +48 -0
  358. package/src/components/icons-v2-generated/charts/.index.md +40 -0
  359. package/src/components/icons-v2-generated/clothes/.index.md +48 -0
  360. package/src/components/icons-v2-generated/coding/.index.md +42 -0
  361. package/src/components/icons-v2-generated/communication/.index.md +39 -0
  362. package/src/components/icons-v2-generated/date-and-time/.index.md +29 -0
  363. package/src/components/icons-v2-generated/design/.index.md +39 -0
  364. package/src/components/icons-v2-generated/devices/.index.md +38 -0
  365. package/src/components/icons-v2-generated/documents/.index.md +38 -0
  366. package/src/components/icons-v2-generated/finance/.index.md +34 -0
  367. package/src/components/icons-v2-generated/food-and-drinks/.index.md +34 -0
  368. package/src/components/icons-v2-generated/food-and-drinks/.leafy-green-icon.md +36 -0
  369. package/src/components/icons-v2-generated/food-and-drinks/.strawberry-icon.md +39 -0
  370. package/src/components/icons-v2-generated/health/.index.md +40 -0
  371. package/src/components/icons-v2-generated/household/.index.md +45 -0
  372. package/src/components/icons-v2-generated/interface/.index.md +36 -0
  373. package/src/components/icons-v2-generated/map-and-travel/.index.md +41 -0
  374. package/src/components/icons-v2-generated/media-playback/.index.md +51 -0
  375. package/src/components/icons-v2-generated/number/.index.md +41 -0
  376. package/src/components/icons-v2-generated/school/.index.md +37 -0
  377. package/src/components/icons-v2-generated/security/.fingerprint-icon.md +38 -0
  378. package/src/components/icons-v2-generated/security/.index.md +39 -0
  379. package/src/components/icons-v2-generated/shopping/.index.md +42 -0
  380. package/src/components/icons-v2-generated/signs-and-symbols/.index.md +32 -0
  381. package/src/components/icons-v2-generated/sort-and-filter/.index.md +35 -0
  382. package/src/components/icons-v2-generated/sport/.index.md +41 -0
  383. package/src/components/icons-v2-generated/text-editor/.index.md +44 -0
  384. package/src/components/icons-v2-generated/users/.index.md +45 -0
  385. package/src/components/icons-v2-generated/vehicles-and-delivery/.index.md +36 -0
  386. package/src/components/icons-v2-generated/weather-and-nature/.flower-sakura-icon.md +36 -0
  387. package/src/components/icons-v2-generated/weather-and-nature/.index.md +34 -0
  388. package/src/components/layout/.article-detail-layout.md +43 -0
  389. package/src/components/layout/.back-button.md +40 -0
  390. package/src/components/layout/.list-page-layout.md +35 -26
  391. package/src/components/layout/.page-container.md +27 -38
  392. package/src/components/layout/.page-layout.md +50 -0
  393. package/src/components/layout/.title-block.md +42 -0
  394. package/src/components/loading/.card-skeleton.md +38 -29
  395. package/src/components/loading/.device-card-skeleton.md +29 -25
  396. package/src/components/loading/.index.md +39 -46
  397. package/src/components/loading/.margin-report-skeleton.md +45 -34
  398. package/src/components/loading/.organization-card-skeleton.md +39 -44
  399. package/src/components/loading/.page-layout-skeleton.md +34 -45
  400. package/src/components/loading/.unified-skeleton.md +62 -36
  401. package/src/components/navigation/.app-header.md +40 -29
  402. package/src/components/navigation/.app-layout.md +25 -26
  403. package/src/components/navigation/.header-global-search.md +34 -37
  404. package/src/components/navigation/.header-organization-filter.md +23 -22
  405. package/src/components/navigation/.header.md +31 -35
  406. package/src/components/navigation/.mobile-burger-menu.md +39 -47
  407. package/src/components/navigation/.mobile-nav-panel.md +51 -32
  408. package/src/components/navigation/.navigation-sidebar-header.md +36 -0
  409. package/src/components/navigation/.navigation-sidebar-item.md +45 -0
  410. package/src/components/navigation/.navigation-sidebar-toggle.md +38 -0
  411. package/src/components/navigation/.navigation-sidebar.md +33 -34
  412. package/src/components/navigation/.sliding-sidebar.md +52 -41
  413. package/src/components/navigation/.sticky-section-nav.md +56 -48
  414. package/src/components/platform/.ScriptArguments.md +39 -25
  415. package/src/components/platform/.ScriptInfoSection.md +30 -26
  416. package/src/components/platform/.ShellTypeBadge.md +18 -13
  417. package/src/components/platform/.SoftwareInfo.md +23 -27
  418. package/src/components/platform/.SoftwareSourceBadge.md +28 -19
  419. package/src/components/platform/.ToolBadge.md +25 -26
  420. package/src/components/platform/ShellTypeBadge.tsx +2 -2
  421. package/src/components/providers/.theme-provider.md +52 -0
  422. package/src/components/shared/delivery/.delivery-lists.md +39 -0
  423. package/src/components/shared/delivery/.delivery-row.md +41 -0
  424. package/src/components/shared/delivery/.delivery-table.md +41 -0
  425. package/src/components/shared/delivery/.index.md +38 -0
  426. package/src/components/shared/dev-section/.dev-card-row.md +60 -0
  427. package/src/components/shared/dev-section/.dev-section-page.md +48 -0
  428. package/src/components/shared/dev-section/.dev-section-view.md +43 -0
  429. package/src/components/shared/dev-section/.index.md +38 -0
  430. package/src/components/shared/legal-document/.index.md +40 -0
  431. package/src/components/shared/legal-document/.legal-document-page.md +50 -0
  432. package/src/components/shared/legal-document/.use-legal-docs.md +42 -0
  433. package/src/components/shared/onboarding/.onboarding-step-card.md +32 -31
  434. package/src/components/shared/onboarding/.onboarding-walkthrough.md +39 -43
  435. package/src/components/shared/product-release/.index.md +28 -30
  436. package/src/components/shared/product-release/.product-release-card-skeleton.md +28 -28
  437. package/src/components/shared/product-release/.product-release-card.md +45 -27
  438. package/src/components/shared/product-release/.release-detail-page.md +23 -24
  439. package/src/components/shared/roadmap/.index.md +37 -0
  440. package/src/components/shared/roadmap/.roadmap-grid-skeleton.md +39 -0
  441. package/src/components/shared/roadmap/.roadmap-grid.md +66 -0
  442. package/src/components/shared/roadmap/.use-roadmap-voting.md +68 -0
  443. package/src/components/tickets/.help-center-card.md +51 -0
  444. package/src/components/tickets/.help-center-create-form.md +38 -0
  445. package/src/components/tickets/.help-center-list.md +40 -0
  446. package/src/components/tickets/.index.md +65 -0
  447. package/src/components/tickets/.ticket-center.md +51 -0
  448. package/src/components/tickets/.ticket-detail-drawer.md +48 -0
  449. package/src/components/tickets/.ticket-linked-delivery-card.md +36 -0
  450. package/src/components/tickets/.ticket-open-form.md +50 -0
  451. package/src/components/tickets/.ticket-row.md +30 -0
  452. package/src/components/tickets/.types.md +57 -0
  453. package/src/components/tickets/hooks/.use-ticket-actions.md +77 -0
  454. package/src/components/tickets/hooks/.use-ticket-engagements.md +42 -0
  455. package/src/components/tickets/hooks/.use-tickets-list.md +54 -0
  456. package/src/components/ui/.actions-menu.md +66 -41
  457. package/src/components/ui/.alert-dialog.md +29 -26
  458. package/src/components/ui/.allowed-domains-input.md +29 -21
  459. package/src/components/ui/.assignee-dropdown.md +45 -0
  460. package/src/components/ui/.autocomplete.md +47 -41
  461. package/src/components/ui/.benefit-card.md +51 -36
  462. package/src/components/ui/.brand-association-card.md +30 -27
  463. package/src/components/ui/.breadcrumb.md +17 -15
  464. package/src/components/ui/.checkbox-block.md +39 -35
  465. package/src/components/ui/.checkbox-with-description.md +23 -16
  466. package/src/components/ui/.checkbox.md +31 -23
  467. package/src/components/ui/.circular-progress.md +49 -19
  468. package/src/components/ui/.content-loader.md +32 -20
  469. package/src/components/ui/.cursor-pagination.md +41 -52
  470. package/src/components/ui/.dashboard-info-card.md +33 -26
  471. package/src/components/ui/.date-picker.md +27 -25
  472. package/src/components/ui/.device-card-compact.md +28 -29
  473. package/src/components/ui/.device-card.md +27 -27
  474. package/src/components/ui/.dialog.md +25 -16
  475. package/src/components/ui/.drawer.md +86 -0
  476. package/src/components/ui/.dropdown-button.md +45 -0
  477. package/src/components/ui/.entity-image.md +46 -0
  478. package/src/components/ui/.error-state.md +41 -28
  479. package/src/components/ui/.feature-card.md +35 -31
  480. package/src/components/ui/.feature-list.md +48 -0
  481. package/src/components/ui/.field-wrapper.md +47 -0
  482. package/src/components/ui/.file-upload.md +42 -0
  483. package/src/components/ui/.filter-checkbox-item.md +43 -0
  484. package/src/components/ui/.filter-list.md +57 -0
  485. package/src/components/ui/.filter-modal.md +59 -0
  486. package/src/components/ui/.floating-tooltip.md +43 -26
  487. package/src/components/ui/.hidden-tags-popup.md +49 -0
  488. package/src/components/ui/.hover-dropdown.md +54 -0
  489. package/src/components/ui/.image-gallery-modal.md +41 -34
  490. package/src/components/ui/.image-uploader.md +53 -0
  491. package/src/components/ui/.index.md +40 -34
  492. package/src/components/ui/.info-card.md +31 -31
  493. package/src/components/ui/.info-row.md +31 -27
  494. package/src/components/ui/.input-trigger.md +44 -0
  495. package/src/components/ui/.input.md +37 -31
  496. package/src/components/ui/.markdown-editor.md +57 -0
  497. package/src/components/ui/.modal-v2.md +51 -0
  498. package/src/components/ui/.modal.md +32 -31
  499. package/src/components/ui/.more-actions-menu.md +45 -38
  500. package/src/components/ui/.organization-card.md +31 -37
  501. package/src/components/ui/.page-actions.md +44 -54
  502. package/src/components/ui/.phone-input.md +54 -0
  503. package/src/components/ui/.progress-bar.md +35 -27
  504. package/src/components/ui/.radio-group.md +39 -27
  505. package/src/components/ui/.release-changelog-section.md +34 -34
  506. package/src/components/ui/.search-input.md +48 -0
  507. package/src/components/ui/.select.md +54 -34
  508. package/src/components/ui/.service-card.md +42 -40
  509. package/src/components/ui/.sheet.md +27 -18
  510. package/src/components/ui/.simple-markdown-renderer.md +29 -31
  511. package/src/components/ui/.sort-column-item.md +42 -0
  512. package/src/components/ui/.square-avatar.md +34 -24
  513. package/src/components/ui/.status-badge.md +26 -38
  514. package/src/components/ui/.switch.md +22 -35
  515. package/src/components/ui/.tab-navigation.md +56 -53
  516. package/src/components/ui/.tab-selector.md +40 -0
  517. package/src/components/ui/.tag-key-value-filter.md +56 -0
  518. package/src/components/ui/.tag-search-input.md +53 -0
  519. package/src/components/ui/.tag.md +49 -31
  520. package/src/components/ui/.tags-manager.md +60 -0
  521. package/src/components/ui/.textarea.md +44 -34
  522. package/src/components/ui/.ticket-attachments-list.md +45 -0
  523. package/src/components/ui/.ticket-detail-section.md +29 -0
  524. package/src/components/ui/.ticket-info-section.md +56 -0
  525. package/src/components/ui/.ticket-note-card.md +53 -0
  526. package/src/components/ui/.ticket-notes-section.md +54 -0
  527. package/src/components/ui/.ticket-status-tag.md +49 -0
  528. package/src/components/ui/.title-content-block.md +25 -26
  529. package/src/components/ui/.toaster.md +40 -28
  530. package/src/components/ui/.tooltip.md +22 -11
  531. package/src/components/ui/.truncate-text.md +39 -0
  532. package/src/components/ui/button/.button-styles.md +35 -0
  533. package/src/components/ui/button/.button.md +53 -0
  534. package/src/components/ui/button/.split-button.md +48 -0
  535. package/src/components/ui/data-table/.data-table-body.md +48 -0
  536. package/src/components/ui/data-table/.data-table-column-filter.md +45 -0
  537. package/src/components/ui/data-table/.data-table-cursor-footer.md +45 -0
  538. package/src/components/ui/data-table/.data-table-empty.md +43 -0
  539. package/src/components/ui/data-table/.data-table-header.md +55 -0
  540. package/src/components/ui/data-table/.data-table-infinite-footer.md +44 -0
  541. package/src/components/ui/data-table/.data-table-row-count.md +43 -0
  542. package/src/components/ui/data-table/.data-table-row.md +47 -0
  543. package/src/components/ui/data-table/.data-table-skeleton.md +42 -0
  544. package/src/components/ui/data-table/.data-table.md +47 -0
  545. package/src/components/ui/data-table/.index.md +55 -0
  546. package/src/components/ui/data-table/.types.md +54 -0
  547. package/src/components/ui/data-table/.use-data-table.md +45 -0
  548. package/src/components/ui/data-table/.utils.md +38 -0
  549. package/src/components/ui/file-manager/.file-manager-action-bar.md +39 -30
  550. package/src/components/ui/file-manager/.file-manager-breadcrumb.md +29 -27
  551. package/src/components/ui/file-manager/.file-manager-context-menu.md +38 -42
  552. package/src/components/ui/file-manager/.file-manager-empty.md +26 -39
  553. package/src/components/ui/file-manager/.file-manager-table-row.md +33 -41
  554. package/src/components/ui/file-manager/.file-manager.md +35 -31
  555. package/src/components/ui/query-report-table/.index.md +43 -0
  556. package/src/components/ui/query-report-table/.query-report-table-header.md +36 -0
  557. package/src/components/ui/query-report-table/.query-report-table-row.md +40 -0
  558. package/src/components/ui/query-report-table/.query-report-table-skeleton.md +44 -0
  559. package/src/components/ui/query-report-table/.query-report-table.md +47 -0
  560. package/src/components/ui/query-report-table/.types.md +41 -0
  561. package/src/components/ui/query-report-table/.utils.md +35 -0
  562. package/src/components/ui/table/.index.md +27 -48
  563. package/src/components/ui/table/.table-cell.md +18 -27
  564. package/src/components/ui/table/.table-column-filter-dropdown.md +40 -0
  565. package/src/components/ui/table/.table-description-cell.md +24 -14
  566. package/src/components/ui/table/.table-empty-state.md +21 -22
  567. package/src/components/ui/table/.table-header.md +25 -40
  568. package/src/components/ui/table/.table-row.md +22 -40
  569. package/src/components/ui/table/.table-skeleton.md +33 -26
  570. package/src/components/ui/table/.table-timestamp-cell.md +26 -16
  571. package/src/components/ui/table/.table.md +39 -59
  572. package/src/components/ui/table/.types.md +44 -36
  573. package/src/components/ui/table/.utils.md +18 -20
  574. package/src/contexts/.chat-runtime-context.md +54 -0
  575. package/src/contexts/.endpoints-runtime-context.md +58 -0
  576. package/src/contexts/.index.md +53 -0
  577. package/src/contexts/.use-outer-or-default.md +36 -0
  578. package/src/embed-shims/.index.md +45 -0
  579. package/src/embed-shims/.next-dynamic.md +43 -0
  580. package/src/embed-shims/.next-image.md +45 -0
  581. package/src/embed-shims/.next-link.md +59 -0
  582. package/src/embed-shims/.next-navigation.md +59 -0
  583. package/src/hooks/.index.md +34 -29
  584. package/src/hooks/.use-access-code-integration.md +49 -0
  585. package/src/hooks/.use-contact-submission.md +37 -26
  586. package/src/hooks/.use-copy-to-clipboard.md +42 -0
  587. package/src/hooks/.use-near-viewport.md +44 -0
  588. package/src/hooks/.use-og-placeholder.md +51 -0
  589. package/src/hooks/.use-toast.md +36 -35
  590. package/src/hooks/state/.use-api-params.md +29 -46
  591. package/src/hooks/state/.use-query-params.md +37 -33
  592. package/src/hooks/ui/.index.md +33 -32
  593. package/src/hooks/ui/.use-auto-limit-tags.md +54 -0
  594. package/src/hooks/ui/.use-horizontal-scrollbar.md +74 -0
  595. package/src/hooks/ui/.use-image-edge-color.md +42 -0
  596. package/src/hooks/ui/.use-media-query.md +33 -25
  597. package/src/hooks/ui/.use-search.md +51 -0
  598. package/src/nats/.nats.md +49 -28
  599. package/src/schemas/.contact-schema.md +45 -0
  600. package/src/stories/.AnnouncementBar.stories.md +45 -0
  601. package/src/stories/.AppLayout.stories.md +20 -21
  602. package/src/stories/.Autocomplete.stories.md +48 -34
  603. package/src/stories/.Board.stories.md +35 -0
  604. package/src/stories/.Button.stories.md +36 -33
  605. package/src/stories/.ChatTicketList.stories.md +33 -0
  606. package/src/stories/.CheckboxBlock.stories.md +40 -28
  607. package/src/stories/.ContentLoader.stories.md +47 -0
  608. package/src/stories/.DashboardInfoCard.stories.md +57 -0
  609. package/src/stories/.DataTable.stories.md +41 -0
  610. package/src/stories/.DatePicker.stories.md +66 -52
  611. package/src/stories/.DeviceCard.stories.md +41 -40
  612. package/src/stories/.DeviceCardCompact.stories.md +41 -0
  613. package/src/stories/.DotsLoaderIcon.stories.md +36 -0
  614. package/src/stories/.Drawer.stories.md +58 -0
  615. package/src/stories/.EmbeddableChat.stories.md +41 -0
  616. package/src/stories/.FileManager.stories.md +41 -0
  617. package/src/stories/.FileManagerActionBar.stories.md +38 -0
  618. package/src/stories/.FileUpload.stories.md +53 -0
  619. package/src/stories/.FilterList.stories.md +54 -0
  620. package/src/stories/.FilterModal.stories.md +72 -0
  621. package/src/stories/.FiltersDropdown.stories.md +57 -0
  622. package/src/stories/.Header.stories.md +48 -0
  623. package/src/stories/.ImageUploader.stories.md +49 -0
  624. package/src/stories/.InfoCard.stories.md +54 -0
  625. package/src/stories/.Input.stories.md +48 -30
  626. package/src/stories/.ListPageLayout.stories.md +56 -43
  627. package/src/stories/.MingoOnboardingCard.stories.md +42 -0
  628. package/src/stories/.MingoOnboardingCardSkeleton.stories.md +35 -0
  629. package/src/stories/.Modal.stories.md +40 -31
  630. package/src/stories/.NotificationDrawer.stories.md +55 -0
  631. package/src/stories/.OnboardingStepCard.stories.md +41 -0
  632. package/src/stories/.OrganizationCard.stories.md +61 -0
  633. package/src/stories/.PageActions.stories.md +52 -49
  634. package/src/stories/.PageContainer.stories.md +41 -35
  635. package/src/stories/.PageLayout.stories.md +60 -0
  636. package/src/stories/.ParallaxImageShowcase.stories.md +49 -0
  637. package/src/stories/.PhoneInput.stories.md +53 -0
  638. package/src/stories/.QueryReportTable.stories.md +44 -0
  639. package/src/stories/.RadioGroup.stories.md +46 -0
  640. package/src/stories/.RadioGroupBlock.stories.md +45 -0
  641. package/src/stories/.Select.stories.md +29 -15
  642. package/src/stories/.SlashCommandSuggestions.stories.md +41 -0
  643. package/src/stories/.SplitButton.stories.md +62 -0
  644. package/src/stories/.TabNavigation.stories.md +47 -38
  645. package/src/stories/.TabSelector.stories.md +65 -0
  646. package/src/stories/.Table.stories.md +38 -46
  647. package/src/stories/.TableColumnFilterDropdown.stories.md +46 -0
  648. package/src/stories/.Tag.stories.md +43 -32
  649. package/src/stories/.TagKeyValueFilter.stories.md +44 -0
  650. package/src/stories/.TagSearchInput.stories.md +61 -0
  651. package/src/stories/.Textarea.stories.md +49 -26
  652. package/src/stories/.Theme.stories.md +41 -0
  653. package/src/stories/.TicketAttachmentsList.stories.md +39 -0
  654. package/src/stories/.TicketDescriptionViewer.stories.md +39 -0
  655. package/src/stories/.TicketInfoSection.stories.md +40 -0
  656. package/src/stories/.TicketKnowledgeBaseList.stories.md +36 -0
  657. package/src/stories/.TicketNotesSection.stories.md +50 -0
  658. package/src/stories/.Toaster.stories.md +40 -0
  659. package/src/stories/.ToolExecutionDisplay.stories.md +41 -0
  660. package/src/stories/.Tooltip.stories.md +41 -0
  661. package/src/stories/.UserSummary.stories.md +41 -0
  662. package/src/stories/.WaitlistForm.stories.md +42 -0
  663. package/src/stories/BlogCard.stories.tsx +61 -0
  664. package/src/stories/CampaignCardAdmin.stories.tsx +52 -0
  665. package/src/stories/CaseStudyCard.stories.tsx +42 -0
  666. package/src/stories/ChatContainer.stories.tsx +186 -0
  667. package/src/stories/ChatInlineVideoPill.stories.tsx +63 -0
  668. package/src/stories/CustomerInterviewCard.stories.tsx +42 -0
  669. package/src/stories/DataRoomDocCard.stories.tsx +52 -0
  670. package/src/stories/GenericEntityCard.stories.tsx +66 -0
  671. package/src/stories/GitHubActivityCard.stories.tsx +61 -0
  672. package/src/stories/HubspotTicketCard.stories.tsx +98 -0
  673. package/src/stories/InvestorUpdateCard.stories.tsx +42 -0
  674. package/src/stories/OnboardingGuideCard.stories.tsx +52 -0
  675. package/src/stories/ProductReleaseCard.stories.tsx +61 -0
  676. package/src/stories/ProgramCard.stories.tsx +79 -0
  677. package/src/stories/RoadmapCard.stories.tsx +75 -0
  678. package/src/stories/SlackMessageCard.stories.tsx +41 -0
  679. package/src/stories/__fixtures__/chat-cards.ts +604 -0
  680. package/src/types/.blog.md +53 -29
  681. package/src/types/.case-study.md +44 -27
  682. package/src/types/.customer-interview.md +66 -44
  683. package/src/types/.delivery.md +40 -0
  684. package/src/types/.employee.md +24 -30
  685. package/src/types/.index.md +33 -47
  686. package/src/types/.marketing.md +49 -44
  687. package/src/types/.navigation.md +33 -25
  688. package/src/types/.os.types.md +32 -27
  689. package/src/types/.platform.md +31 -28
  690. package/src/types/.product-release.md +65 -38
  691. package/src/types/.supabase.md +37 -29
  692. package/src/types/.team.md +41 -33
  693. package/src/types/.video-processing.md +54 -0
  694. package/src/types/.waitlist.md +40 -36
  695. package/src/utils/.access-code-client.md +37 -36
  696. package/src/utils/.cn.md +31 -23
  697. package/src/utils/.color-analysis.md +35 -0
  698. package/src/utils/.country-phone-utils.md +39 -0
  699. package/src/utils/.date-formatters.md +19 -18
  700. package/src/utils/.embed-authed-fetch.md +39 -0
  701. package/src/utils/.embed-proxy-auth-storage.md +38 -0
  702. package/src/utils/.fetch-priority.md +41 -0
  703. package/src/utils/.format.md +74 -25
  704. package/src/utils/.generic-domain-utils.md +42 -0
  705. package/src/utils/.image-proxy.md +59 -23
  706. package/src/utils/.index.md +42 -49
  707. package/src/utils/.local-storage-adapter.md +50 -0
  708. package/src/utils/.ods-color-utils.md +55 -38
  709. package/src/utils/.platform-config.md +45 -25
  710. package/src/utils/.scroll-into-view.md +40 -0
  711. package/src/utils/.source-icons.md +53 -0
  712. package/src/utils/.sse-decision-frame.md +46 -0
  713. package/src/utils/dev-sections/.index.md +34 -0
  714. package/src/utils/dev-sections/.openframe-dev-sections.md +49 -0
  715. package/dist/chunk-ZDF6F7ED.cjs.map +0 -1
  716. package/dist/chunk-ZTJVRSN5.js.map +0 -1
  717. package/src/components/.card.md +0 -42
  718. package/src/components/.contact-button.md +0 -30
  719. package/src/components/.drawer.md +0 -46
  720. package/src/components/.fixed-layout-container.md +0 -47
  721. package/src/components/.footer-waitlist-card.md +0 -29
  722. package/src/components/.join-waitlist-cta.md +0 -29
  723. package/src/components/.sheet.md +0 -47
  724. package/src/components/.sliding-panel.md +0 -48
  725. package/src/components/.tooltip.md +0 -48
  726. package/src/components/.use-mobile.md +0 -42
  727. package/src/components/.vendor-compact-card.md +0 -66
  728. package/src/components/.x-button.md +0 -42
  729. package/src/components/features/.github-repo-button.md +0 -40
  730. package/src/components/features/.organization-icon.md +0 -47
  731. package/src/components/features/.organization-selector.md +0 -45
  732. package/src/components/icons/.fleet-icon.md +0 -39
  733. package/src/components/icons/.meshcentral-icon.md +0 -35
  734. package/src/components/icons/.refresh-icon.md +0 -34
  735. package/src/components/icons/.tactical-icon.md +0 -35
  736. package/src/components/ui/.button.md +0 -69
  737. package/src/components/ui/.log-table-row.md +0 -47
  738. package/src/components/ui/.selectable-device-card.md +0 -46
  739. package/src/hooks/.api-hooks-stub.md +0 -45
  740. package/src/hooks/api/.use-product-releases.md +0 -53
  741. package/src/stories/.OrganizationSelector.stories.md +0 -42
  742. package/src/stories/.SelectableDeviceCard.stories.md +0 -30
  743. package/src/utils/.lite-youtube-embed-stub.md +0 -37
  744. package/src/utils/.lite-youtube-embed.md +0 -33
  745. /package/dist/{chunk-IK2X5YJU.js.map → chunk-7PCP7YQR.js.map} +0 -0
  746. /package/dist/{chunk-3JWIJJ44.js.map → chunk-R6MLPU4A.js.map} +0 -0
@@ -1,46 +1,50 @@
1
- <!-- source-hash: 08e89e89864ea45d66eb024c149b3933 -->
2
- A TypeScript interface definition for waitlist entry management with HubSpot integration and cohort tracking capabilities. Defines the data structures for collecting user signups with comprehensive metadata tracking and CRM synchronization.
1
+ <!-- source-hash: f7e2eb6ca28207daca5b3bc5bf7ad178 -->
2
+ Defines TypeScript interfaces for managing waitlist entries in the Flamingo/OpenFrame platform, covering creation, retrieval, and API response shapes.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`WaitlistEntry`** - Complete waitlist entry interface with all fields including HubSpot integration metadata, platform relationships, and cohort membership data
7
- - **`CreateWaitlistEntry`** - Input interface for creating new waitlist entries with required and optional user data plus tracking fields
8
- - **`WaitlistResponse`** - API response wrapper interface with success/error handling and optional data payload
6
+ | Interface | Description |
7
+ |-----------|-------------|
8
+ | `WaitlistEntry` | Full waitlist record as returned from the database, including tracking, HubSpot integration metadata, enriched data, and cohort membership |
9
+ | `CreateWaitlistEntry` | Payload shape for submitting a new waitlist entry (subset of `WaitlistEntry`, no server-generated fields) |
10
+ | `WaitlistResponse` | Standard API response wrapper with `success` flag, optional `data`, and optional `error` |
9
11
 
10
12
  ## Usage Example
11
13
 
12
14
  ```typescript
13
- // Creating a new waitlist entry
14
- const newEntry: CreateWaitlistEntry = {
15
- email: "user@example.com",
16
- name: "John Doe",
17
- company: "Acme Corp",
18
- platform_id: "platform-123",
19
- referral_source: "google",
20
- utm_source: "newsletter",
21
- utm_campaign: "launch2024",
22
- ip_address: "192.168.1.1",
23
- user_agent: "Mozilla/5.0..."
15
+ import type {
16
+ WaitlistEntry,
17
+ CreateWaitlistEntry,
18
+ WaitlistResponse,
19
+ } from './waitlist';
20
+
21
+ // Submitting a new waitlist signup
22
+ const payload: CreateWaitlistEntry = {
23
+ email: 'dev@example.com',
24
+ name: 'Jane Dev',
25
+ company: 'Acme MSP',
26
+ platform_id: 'openframe',
27
+ referral_source: 'organic',
28
+ utm_source: 'google',
29
+ utm_medium: 'cpc',
30
+ utm_campaign: 'launch-2025',
24
31
  };
25
32
 
26
- // API response structure
27
- const response: WaitlistResponse = {
28
- success: true,
29
- data: {
30
- id: "entry-456",
31
- email: "user@example.com",
32
- platform_id: "platform-123",
33
- created_at: "2024-01-15T10:00:00Z",
34
- updated_at: "2024-01-15T10:00:00Z",
35
- hubspot_sync_status: "success",
36
- cohort: {
37
- cohort_id: "cohort-789",
38
- cohort_name: "Beta Launch",
39
- access_code: "BETA2024",
40
- access_code_used: false,
41
- membership_status: "active",
42
- // ...other cohort fields
43
- }
33
+ // Handling the API response
34
+ const response: WaitlistResponse = await submitWaitlist(payload);
35
+
36
+ if (response.success && response.data) {
37
+ const entry: WaitlistEntry = response.data;
38
+
39
+ // Access HubSpot sync status
40
+ console.log(entry.hubspot_sync_status); // 'success' | 'error' | 'missing' | null
41
+
42
+ // Access enriched cohort info (server-side populated)
43
+ if (entry.cohort) {
44
+ console.log(entry.cohort.cohort_name);
45
+ console.log(entry.cohort.access_code_used);
44
46
  }
45
- };
46
- ```
47
+ }
48
+ ```
49
+
50
+ > **Note:** `WaitlistEntry.cohort_memberships` may contain multiple records from the join, but business rules enforce a maximum of one active cohort per entry. Use the server-populated `cohort` shorthand field for clean access.
@@ -1,45 +1,46 @@
1
- <!-- source-hash: 94c99ad03b1be8fa4d35c9872f47a823 -->
2
- Client-side utilities for integrating access code validation and consumption into registration forms, providing both standalone functions and a React hook for seamless user registration workflows.
1
+ <!-- source-hash: 1d5aefc0169fc550dd115556a5cdbf7e -->
2
+ Pure standalone utility functions for validating and consuming access codes via HTTP, designed to be React-free and SSR-safe by requiring explicit endpoint URLs rather than reading from context.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **validateAccessCode** - Validates an access code against a user's email
7
- - **consumeAccessCode** - Marks an access code as used after successful registration
8
- - **validateAndConsumeAccessCode** - Convenience function combining validation and consumption
9
- - **useAccessCodeIntegration** - React hook with loading states for form integration
6
+ ### `AccessCodeEndpoints` (interface)
7
+ Defines the two endpoint URLs required by all client functions:
8
+ - `validateUrl` POST endpoint for code validation
9
+ - `consumeUrl` POST endpoint for code consumption
10
+
11
+ ### `validateAccessCode(email, code, endpoints)`
12
+ POSTs credentials to `validateUrl` and returns an `AccessCodeValidationResponse`. On HTTP or network errors, returns `{ valid: false, message }` rather than throwing.
13
+
14
+ ### `consumeAccessCode(email, code, endpoints)`
15
+ POSTs credentials to `consumeUrl` to mark a code as used. Should only be called **after** successful registration. On failure returns `{ success: false, consumed: false, message }`.
16
+
17
+ ### `validateAndConsumeAccessCode(email, code, endpoints)`
18
+ Convenience wrapper that sequentially calls validate → consume. Short-circuits and returns the validation failure immediately if the code is invalid. Returns a merged `AccessCodeValidationResponse & { consumed? }`.
10
19
 
11
20
  ## Usage Example
12
21
 
13
22
  ```typescript
14
- import { validateAccessCode, consumeAccessCode, useAccessCodeIntegration } from './access-code-client';
15
-
16
- // Standalone validation
17
- const validation = await validateAccessCode('user@example.com', 'ABC123XY');
18
- if (validation.valid) {
19
- console.log(`Welcome to ${validation.cohort_name}!`);
20
-
21
- // After successful registration, consume the code
22
- await consumeAccessCode('user@example.com', 'ABC123XY');
23
- }
23
+ import {
24
+ validateAndConsumeAccessCode,
25
+ AccessCodeEndpoints
26
+ } from './access-code-client';
24
27
 
25
- // React component integration
26
- function RegistrationForm() {
27
- const { validate, consume, isValidating } = useAccessCodeIntegration();
28
-
29
- const handleSubmit = async (formData) => {
30
- const result = await validate(formData.email, formData.accessCode);
31
- if (result.valid) {
32
- // Process registration, then consume code
33
- await registerUser(formData);
34
- await consume(formData.email, formData.accessCode);
35
- }
36
- };
37
-
38
- return (
39
- <form onSubmit={handleSubmit}>
40
- {/* form fields */}
41
- <button disabled={isValidating}>Register</button>
42
- </form>
43
- );
28
+ const endpoints: AccessCodeEndpoints = {
29
+ validateUrl: '/api/access-codes/validate',
30
+ consumeUrl: '/api/access-codes/consume',
31
+ };
32
+
33
+ const result = await validateAndConsumeAccessCode(
34
+ 'user@example.com',
35
+ 'ABC123XY',
36
+ endpoints,
37
+ );
38
+
39
+ if (result.valid && result.consumed) {
40
+ console.log(`Welcome to ${result.cohort_name}!`);
41
+ } else {
42
+ console.error(result.message);
44
43
  }
45
- ```
44
+ ```
45
+
46
+ > **Note:** Endpoint binding from `EndpointsRuntimeContext` is handled by the React-side hook `hooks/use-access-code-integration.ts` (`useAccessCodeIntegration`). Keeping this file React-free allows it to be safely bundled in the server-side `utils/index` tsup build without crashing SSR.
package/src/utils/.cn.md CHANGED
@@ -1,36 +1,44 @@
1
- <!-- source-hash: 567d16aaedd1c7358dff3eda50893349 -->
2
- A utility module providing class name merging, formatting functions, and platform URL management for the Flamingo/OpenMSP ecosystem.
1
+ <!-- source-hash: c1693a304ddf9b29bde0ca02b6f6b8ea -->
2
+ Utility module providing class name merging with extended Tailwind support, and platform URL resolution helpers for multi-tenant Flamingo/OpenFrame deployments.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`cn(...inputs)`** - Combines and merges Tailwind CSS class names using clsx and tailwind-merge
7
- - **`formatDate(date, options)`** - Formats dates to human-readable strings with validation
8
- - **`formatNumber(num)`** - Adds thousands separators to numbers
9
- - **`formatPrice(price, currency)`** - Formats prices with currency symbols
10
- - **`formatBytes(bytes, decimals)`** - Converts bytes to human-readable sizes (KB, MB, GB, etc.)
11
- - **`getBaseUrl(platform?)`** - Gets application base URLs with environment-specific logic
12
- - **`getAllPlatformBaseDomains()`** - Extracts all unique base domains for cross-platform cookie sharing
13
- - **`getPlatformProductionUrl(platform)`** - Maps platform identifiers to their production URLs
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `cn` | Function | Merges class names using `clsx` + `tailwind-merge`, extended with custom ODS typography classes (`text-h1`–`text-h6`) |
9
+ | `getPlatformProductionUrl` | Function | Returns the production URL for a named platform, with `NEXT_PUBLIC_*` env var override support |
10
+ | `getAllPlatformBaseDomains` | Function | Extracts all unique base domains across platforms; handles localhost, Vercel preview, and production cases (useful for cross-domain cookie scope) |
11
+ | `getBaseUrl` | Function | Resolves the current app's base URL using a priority chain: env override → platform URL → Vercel domain → production fallback → `localhost:3000` |
14
12
 
15
13
  ## Usage Example
16
14
 
17
15
  ```typescript
18
- import { cn, formatDate, formatBytes, getBaseUrl } from './cn'
16
+ import { cn, getBaseUrl, getPlatformProductionUrl, getAllPlatformBaseDomains } from '@/lib/cn'
19
17
 
20
- // Merge CSS classes with Tailwind conflict resolution
21
- const buttonClass = cn('px-4 py-2', 'px-6', 'bg-blue-500', { 'bg-red-500': isError })
18
+ // Merge Tailwind classes (including custom ODS typography)
19
+ const className = cn('text-h1 font-bold', isActive && 'text-yellow-400')
22
20
 
23
- // Format various data types
24
- const displayDate = formatDate(new Date(), { month: 'short', day: 'numeric' })
25
- const fileSize = formatBytes(1024000) // "1000 KB"
26
- const price = formatPrice(99.99, 'USD') // "$99.99"
21
+ // Resolve current app base URL
22
+ const apiBase = getBaseUrl() // http://localhost:3000 (dev)
23
+ // https://www.openmsp.ai (prod fallback)
27
24
 
28
- // Get platform URLs
29
- const flamingoUrl = getBaseUrl('flamingo') // https://flamingo.run (prod) or localhost (dev)
30
- const currentUrl = getBaseUrl() // Current app's base URL
25
+ // Resolve a specific platform URL (respects NEXT_PUBLIC_* overrides)
26
+ const flamingoUrl = getBaseUrl('flamingo') // https://www.flamingo.run
27
+ const openframeUrl = getPlatformProductionUrl('openframe') // https://openframe.ai
31
28
 
32
- // Get all domains for cookie configuration
33
- const domains = getAllPlatformBaseDomains() // ['.flamingo.so', 'flamingo.so', ...]
29
+ // Get all cookie-scoped base domains (e.g. for document.cookie domain=)
30
+ const domains = getAllPlatformBaseDomains()
31
+ // Production: ['.flamingo.run', 'flamingo.run', '.openmsp.ai', 'openmsp.ai', ...]
32
+ // Vercel preview: ['.vercel.app', 'vercel.app']
33
+ // Localhost: []
34
34
  ```
35
35
 
36
- The module handles environment detection, supports Vercel deployments, and provides consistent URL resolution across the Flamingo platform ecosystem including OpenMSP, Flamingo, TMCG, and OpenFrame applications.
36
+ ## Environment Variables
37
+
38
+ | Variable | Platform | Default |
39
+ |----------|----------|---------|
40
+ | `NEXT_PUBLIC_FLAMINGO_URL` | `flamingo`, `universal` | `https://www.flamingo.run` |
41
+ | `NEXT_PUBLIC_OPENMSP_URL` | `openmsp` | `https://www.openmsp.ai` |
42
+ | `NEXT_PUBLIC_OPENFRAME_URL` | `openframe` | `https://openframe.ai` |
43
+ | `NEXT_PUBLIC_MARKETING_HUB_URL` | `marketing-hub` | `https://marketing-hub.flamingo.so` |
44
+ | `NEXT_PUBLIC_DEV_URL` | all (dev only) | `http://localhost:3000` |
@@ -0,0 +1,35 @@
1
+ <!-- source-hash: 320c7ab088203622f31bd929824e3767 -->
2
+ Provides color analysis utilities for extracting dominant colors from images and selecting accessible contrast colors from the Flamingo design palette, primarily used for dynamic badge and card styling.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `ColorPalette` | Interface | Color descriptor with `name`, `hex`, and `rgb` tuple |
9
+ | `DESIGN_PALETTE` | Constant | Three-color palette: yellow `#FFC008`, black `#161616`, gray `#888888` |
10
+ | `hexToRgb` | Function | Converts a hex string to an RGB tuple |
11
+ | `getContrastRatio` | Function | Returns WCAG contrast ratio between two RGB colors |
12
+ | `extractDominantColor` | Function | Samples a canvas to find the most frequent bucketed color |
13
+ | `getBestContrastColor` | Function | Picks the palette color with highest contrast (≥ 3:1 minimum) |
14
+ | `analyzeImageColor` | Function | Loads an image URL, extracts dominant color, returns best palette match |
15
+ | `extractImageEdgeColorAsync` | Function | Samples edge pixels of an image and returns the dominant hex color for background fills |
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ import { analyzeImageColor, extractImageEdgeColorAsync, getContrastRatio, hexToRgb } from './color-analysis';
21
+
22
+ // Get the best badge text color for a logo image
23
+ const badgeColor = await analyzeImageColor('https://example.com/logo.png');
24
+ console.log(badgeColor.hex); // '#161616'
25
+
26
+ // Extract edge color for email/card background fill
27
+ const bgColor = await extractImageEdgeColorAsync('https://example.com/hero.jpg');
28
+ console.log(bgColor); // '#1a2b3c'
29
+
30
+ // Manual contrast check between two hex colors
31
+ const ratio = getContrastRatio(hexToRgb('#FFC008'), hexToRgb('#161616'));
32
+ console.log(ratio); // ~11.5 (passes WCAG AA and AAA)
33
+ ```
34
+
35
+ > **Note:** `extractDominantColor` and `analyzeImageColor` are client-side only and require `document`/`canvas` APIs. `extractImageEdgeColorAsync` also guards against SSR with a `typeof window` check, resolving to `#000000` on the server.
@@ -0,0 +1,39 @@
1
+ <!-- source-hash: 2a8a74c3b98ef6150c8b43768d8c2035 -->
2
+ Utility module for working with international phone numbers and country data, combining `libphonenumber-js` metadata with the `Intl.DisplayNames` API to provide country selection, validation, and formatting helpers.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `CountryPhoneData` | Interface | Shape of a country entry: ISO code, display name, dial code, and flag emoji |
9
+ | `getCountryPhoneData()` | Function | Returns all countries split into `priority` (US, CA, GB, AU) and `others` (alphabetically sorted), lazily cached |
10
+ | `getCountryByCode(code)` | Function | Looks up a single `CountryPhoneData` entry by ISO 3166-1 alpha-2 code |
11
+ | `validatePhoneNumber(phone, code)` | Function | Returns `true` if the number is valid for the given country (empty strings pass as optional) |
12
+ | `formatPhoneE164(phone, code)` | Function | Formats a number to E.164 (e.g., `+14155552671`), falling back to digit-only concatenation on parse failure |
13
+
14
+ ## Usage Example
15
+
16
+ ```typescript
17
+ import {
18
+ getCountryPhoneData,
19
+ getCountryByCode,
20
+ validatePhoneNumber,
21
+ formatPhoneE164,
22
+ } from './country-phone-utils'
23
+
24
+ // Populate a country selector
25
+ const { priority, others } = getCountryPhoneData()
26
+ // priority → [{ code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸' }, ...]
27
+
28
+ // Look up a specific country
29
+ const canada = getCountryByCode('CA')
30
+ // → { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦' }
31
+
32
+ // Validate user input
33
+ const isValid = validatePhoneNumber('(415) 555-2671', 'US') // true
34
+
35
+ // Normalize to E.164 before storing/sending
36
+ const e164 = formatPhoneE164('(415) 555-2671', 'US') // '+14155552671'
37
+ ```
38
+
39
+ > **Note:** `getCountryPhoneData()` builds and caches the full country list on first call. Priority countries (US, CA, GB, AU) are always surfaced at the top of the list, making them convenient as default options in phone-number input components.
@@ -1,27 +1,28 @@
1
- <!-- source-hash: 4bb8e085097eb8f5246e47f5b9a36698 -->
2
- Provides centralized date formatting utilities to ensure consistent date display across the application while avoiding timezone-related issues.
1
+ <!-- source-hash: bdbe45fc465896066574c96cffcccb6f -->
2
+ Timezone-safe date formatting utilities providing a single source of truth for consistent date display across the application. All functions parse ISO date strings via string splitting to avoid `new Date()` UTC-to-local timezone shifts.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`formatReleaseDate(dateString: string)`** - Formats ISO date strings into human-readable release dates without timezone shifts
6
+ | Export | Output Example | Use Case |
7
+ |--------|---------------|----------|
8
+ | `formatReleaseDate` | `"November 11, 2025"` | Release dates, long-form display |
9
+ | `formatDateShort` | `"Jan 5, 2025"` | Admin cards (waitlist, publication, media, investor, campaign) |
10
+ | `formatDateSlashUTC` | `"11/11/2025"` | Product release & customer interview cards |
11
+
12
+ **Internal helper:** `splitYmd(dateString)` — splits ISO date/datetime strings into `[year, month, day]` without constructing a `Date` object, preventing the off-by-one day bug west of UTC.
7
13
 
8
14
  ## Usage Example
9
15
 
10
16
  ```typescript
11
- import { formatReleaseDate } from './date-formatters';
12
-
13
- // Format a release date from API response
14
- const releaseDate = "2025-11-11T00:00:00Z";
15
- const formatted = formatReleaseDate(releaseDate);
16
- console.log(formatted); // "November 11, 2025"
17
-
18
- // Use in product release components
19
- const ProductRelease = ({ release }) => (
20
- <div>
21
- <h3>{release.name}</h3>
22
- <p>Released: {formatReleaseDate(release.date)}</p>
23
- </div>
24
- );
17
+ import { formatReleaseDate, formatDateShort, formatDateSlashUTC } from './date-formatters'
18
+
19
+ // ISO date-only string
20
+ formatReleaseDate('2025-11-11') // → "November 11, 2025"
21
+ formatDateShort('2025-01-05') // "Jan 5, 2025"
22
+ formatDateSlashUTC('2025-11-11') // "11/11/2025"
23
+
24
+ // ISO datetime strings also work (time component is ignored)
25
+ formatDateShort('2025-06-20T14:30:00Z') // "Jun 20, 2025"
25
26
  ```
26
27
 
27
- The utility manually parses date components to avoid JavaScript's automatic timezone conversions, ensuring release dates display consistently regardless of user location. Perfect for product release lists and detail pages where date accuracy is critical.
28
+ > **Why not `new Date()`?** Passing `"2025-11-11"` to `new Date()` creates a UTC midnight timestamp. In timezones west of UTC, `.getMonth()` / `.getDate()` resolve to the *previous* day. String splitting eliminates this class of bug entirely.
@@ -0,0 +1,39 @@
1
+ <!-- source-hash: 585108e1683f75548fc4f177781fa0c8 -->
2
+ A client-side `fetch` wrapper for embedded surfaces (chat, ticket center, widgets) that automatically attaches bearer-act-as proxy authentication headers from `sessionStorage` while enforcing same-origin security.
3
+
4
+ ## Key Components
5
+
6
+ ### `embedAuthedFetch(url, init?)`
7
+ Drop-in replacement for `fetch()` that:
8
+ - Normalizes `RequestInit.headers` (handles `Headers` instance, tuple arrays, or plain objects) into `Record<string, string>`
9
+ - Delegates to `applyProxyAuth` to merge `Authorization` and `X-Chat-Act-As` headers — **proxy credentials always win** over caller-supplied headers
10
+ - Defaults `Content-Type: application/json` when no headers are provided
11
+ - Forces `credentials: 'same-origin'` to ensure Supabase auth cookies are included alongside bearer tokens
12
+
13
+ ### `assertSameOrigin(url)` *(internal)*
14
+ Defense-in-depth guard that:
15
+ - Resolves all URL forms (relative, absolute, protocol-relative, whitespace-prefixed) against `window.location.href` via the WHATWG `URL` constructor — bypasses regex shortcuts vulnerable to `\t`/`\n` prefix tricks
16
+ - Blocks non-`http(s):` schemes explicitly (`javascript:`, `data:`, `blob:`, etc.)
17
+ - Throws on cross-origin destinations before any bearer token leaves the page
18
+ - Skips silently during SSR (`typeof window === 'undefined'`)
19
+
20
+ ## Usage Example
21
+
22
+ ```typescript
23
+ // JSON POST to chat API — proxy headers attached automatically
24
+ const res = await embedAuthedFetch('/api/chat/messages', {
25
+ method: 'POST',
26
+ body: JSON.stringify({ message: 'Hello' }),
27
+ })
28
+
29
+ // GET with explicit empty headers — skips Content-Type default
30
+ const upload = await embedAuthedFetch('/api/storage/generate-upload-url', {
31
+ method: 'GET',
32
+ headers: {},
33
+ })
34
+
35
+ // Vanilla fetch — use for routes that don't need bearer-act-as
36
+ const profile = await fetch('/api/profile/me', { credentials: 'same-origin' })
37
+ ```
38
+
39
+ > Routes outside the `/api/chat/*`, `/api/docs/chat/*`, or `/api/storage/generate-upload-url` surfaces should use vanilla `fetch` — this wrapper is scoped to embedded auth contexts only.
@@ -0,0 +1,38 @@
1
+ <!-- source-hash: 4f6996d4ad0ba284b64e13807891eb62 -->
2
+ Manages client-side persistence of embed-surface proxy credentials (`CHAT_PROXY_SECRET` + impersonation email) in `localStorage`, enabling embedded surfaces (chat widget, ticket center, etc.) to authenticate as a proxied customer across sessions.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `EmbedProxyAuth` | Interface | Shape of persisted credentials: `secret`, `email`, and optional identity fields (`firstName`, `lastName`, `avatarUrl`) |
9
+ | `getEmbedProxyAuth()` | Function | Returns full normalized credentials or `null` (falls back to cookie auth) |
10
+ | `getPersistedProxyEmail()` | Function | Returns only the last saved email, used to pre-fill the creds bar on mount |
11
+ | `setEmbedProxyAuth()` | Function | Persists credentials with normalization; trims/lowercases email, strips whitespace-only optional fields |
12
+ | `clearEmbedProxyAuth()` | Function | Removes credentials from `localStorage` |
13
+ | `applyProxyAuth()` | Function | Attaches `Authorization: Bearer` + `X-Chat-Act-As` (and optional identity headers) to any fetch call |
14
+
15
+ Storage key `<appType>.chat.proxy-auth.v1` is intentionally frozen — renaming it would silently log out all existing admin sessions.
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ import { setEmbedProxyAuth, applyProxyAuth, clearEmbedProxyAuth } from './embed-proxy-auth-storage'
21
+
22
+ // Save credentials (e.g. from the /debug creds bar)
23
+ setEmbedProxyAuth({
24
+ secret: 'my-proxy-secret',
25
+ email: 'customer@example.com',
26
+ firstName: 'Jane',
27
+ lastName: 'Doe',
28
+ })
29
+
30
+ // Apply to a fetch call — no-op when no creds are stored
31
+ const { url, headers } = applyProxyAuth('/api/chat/stream')
32
+ const response = await fetch(url, { method: 'POST', headers })
33
+
34
+ // Admin logout / "Clear" button
35
+ clearEmbedProxyAuth()
36
+ ```
37
+
38
+ > **Security note:** Credentials persist in `localStorage` (survives tab close and browser restart). This is intentional — re-pasting on every tab was rejected as a dev-experience tradeoff. The `/debug` entry point is admin-gated, and all headers are server-validated against `CHAT_PROXY_SECRET`.
@@ -0,0 +1,41 @@
1
+ <!-- source-hash: 786a6c83f7b7be019293590b300def02 -->
2
+ Provides a React-version-aware helper that returns the correct prop shape for the HTML `fetchpriority` attribute, avoiding console warnings across React 18 and React 19+.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `FetchPriorityValue` | `type` | Union of valid HTML fetch-priority strings: `'high' \| 'low' \| 'auto'` |
9
+ | `fetchPriorityProp()` | `function` | Returns `{ fetchpriority: value }` (React 18) or `{ fetchPriority: value }` (React 19+) |
10
+ | `REACT_MAJOR` | internal `const` | Major version parsed from `React.version` at module load |
11
+ | `USE_CAMEL_CASE_FETCH_PRIORITY` | internal `const` | `true` when React major ≥ 19 |
12
+
13
+ ## Behavior
14
+
15
+ - **`undefined`** → resolves to `'auto'` (DOM default), safe to spread without null-checking at each callsite
16
+ - **`true`** → `'high'` (intended for LCP candidates)
17
+ - **`false`** → `'low'`
18
+ - **`'high' | 'low' | 'auto'`** → passed through as-is
19
+
20
+ ## Usage Example
21
+
22
+ ```typescript
23
+ import { fetchPriorityProp } from './fetch-priority';
24
+
25
+ // Boolean shorthand — LCP hero image
26
+ <img
27
+ src="/hero.jpg"
28
+ alt="Hero"
29
+ {...fetchPriorityProp(true)} // React 18: { fetchpriority: "high" }
30
+ // React 19: { fetchPriority: "high" }
31
+ />
32
+
33
+ // Explicit value
34
+ <iframe
35
+ src="/embed"
36
+ {...fetchPriorityProp('low')}
37
+ />
38
+
39
+ // Optional prop — undefined safely becomes 'auto'
40
+ <img src={src} {...fetchPriorityProp(maybeHigh)} />
41
+ ```
@@ -1,38 +1,87 @@
1
- <!-- source-hash: b4d93cdfa7c612b1623c539002378201 -->
2
- This module provides a comprehensive set of utility functions for formatting various types of data into human-readable strings, including dates, numbers, currency, file sizes, and abbreviated large numbers.
1
+ <!-- source-hash: dbfaad05e48db5fac78d6f613b9afd1e -->
2
+ Utility functions for formatting data across dates, numbers, currencies, bytes, durations, and display strings. Serves as the single source of truth for all presentation-layer formatting in the Flamingo/OpenFrame stack.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`formatDate`** - Converts Date objects or ISO strings to localized date strings with customizable options
7
- - **`formatNumber`** - Adds thousands separators to numbers using locale-specific formatting
8
- - **`formatPrice`** - Formats numbers as currency with proper symbols and localization
9
- - **`formatBytes`** - Converts byte values to human-readable file sizes (KB, MB, GB, etc.)
10
- - **`formatLargeNumber`** - Abbreviates large numbers to compact form (K, M, B) without decimals
11
- - **`formatAbbreviatedNumber`** - Similar to `formatLargeNumber` but includes decimal precision for better readability
6
+ | Function | Description |
7
+ |---|---|
8
+ | `formatDate` | Locale-aware date formatting with `Intl.DateTimeFormatOptions` support |
9
+ | `formatDateUTC` | UTC-anchored date formatter with fallback; handles ISO strings, epoch ms, and numeric strings |
10
+ | `formatLegalDate` | Fixed `MM/DD/YYYY` format for legal documents |
11
+ | `formatNumber` | Thousands-separator number formatting |
12
+ | `formatPrice` | Currency-symbol formatting via `Intl.NumberFormat` |
13
+ | `formatCurrency` | USD whole-dollar KPI formatter with `'N/A'` null guard |
14
+ | `formatWholeDollars` | Configurable whole-dollar formatter (no cents) |
15
+ | `formatPercent` | Fixed 2-decimal percent string with `'N/A'` null guard |
16
+ | `formatBytes` | Human-readable byte sizes up to YB |
17
+ | `formatBytesShort` | Compact byte formatter (`'B'` unit) for tight UI spaces |
18
+ | `formatLargeNumber` | Abbreviated integers — `1K`, `2M`, `3B` (floor, no decimals) |
19
+ | `formatAbbreviatedNumber` | Abbreviated numbers with one decimal when needed — `1.2K`, `2.5M` |
20
+ | `getFirstLastInitials` | First + last word initials (e.g. `"John Michael Doe"` → `"JD"`) |
21
+ | `nameInitials` | First + second word initials, max 2 chars, with configurable fallback |
22
+ | `formatDurationMMSS` | Duration as `MM:SS` or `HH:MM:SS` |
23
+ | `formatDurationCompact` | Duration as `"Xh Xm"` or `"X min"` |
24
+ | `formatDurationFromRange` | Duration between two timestamps as compact string |
25
+ | `formatTimeWithTimezone` | Time string with optional timezone label |
26
+ | `formatCompactMetric` | Metric value with compact notation for KPI cards (partial) |
27
+ | `MetricFormat` | Type: `'number' \| 'currency' \| 'percentage' \| 'months'` |
28
+ | `TrendPolarity` | Type: `'positive' \| 'negative' \| 'neutral'` |
12
29
 
13
30
  ## Usage Example
14
31
 
15
32
  ```typescript
16
- import {
17
- formatDate,
18
- formatNumber,
19
- formatPrice,
20
- formatBytes,
33
+ import {
34
+ formatDate,
35
+ formatDateUTC,
36
+ formatBytes,
37
+ formatBytesShort,
21
38
  formatLargeNumber,
22
- formatAbbreviatedNumber
39
+ formatAbbreviatedNumber,
40
+ formatPrice,
41
+ formatCurrency,
42
+ formatPercent,
43
+ formatDurationMMSS,
44
+ formatDurationCompact,
45
+ formatDurationFromRange,
46
+ formatTimeWithTimezone,
47
+ nameInitials,
48
+ getFirstLastInitials,
23
49
  } from './format'
24
50
 
25
- // Date formatting
26
- const date = new Date('2024-01-15')
27
- console.log(formatDate(date)) // "January 15, 2024"
28
- console.log(formatDate(date, { month: 'short', day: 'numeric' })) // "Jan 15"
51
+ // Dates
52
+ formatDate('2024-08-15')
53
+ // "August 15, 2024"
29
54
 
30
- // Number formatting
31
- console.log(formatNumber(1234567)) // "1,234,567"
32
- console.log(formatPrice(29.99, 'USD')) // "$29.99"
33
- console.log(formatBytes(1024000)) // "1000 KB"
55
+ formatDateUTC('2024-08-15')
56
+ // "Aug 15, 2024" (UTC-anchored, no timezone drift)
34
57
 
35
- // Large number abbreviation
36
- console.log(formatLargeNumber(1500)) // "1K"
37
- console.log(formatAbbreviatedNumber(1500)) // "1.5K"
58
+ formatDateUTC(null, { fallback: 'Unknown' })
59
+ // "Unknown"
60
+
61
+ // Bytes
62
+ formatBytes(1536) // → "1.5 KB"
63
+ formatBytesShort(1536) // → "1.5 KB" (tight UI variant)
64
+
65
+ // Numbers
66
+ formatLargeNumber(1_500_000) // → "1M" (floor, no decimals)
67
+ formatAbbreviatedNumber(1_200) // → "1.2K" (one decimal when needed)
68
+
69
+ // Currency
70
+ formatPrice(49.99) // → "$49.99"
71
+ formatCurrency(1234567) // → "$1,234,567"
72
+ formatPercent(12.5) // → "12.50%"
73
+
74
+ // Duration
75
+ formatDurationMMSS(3725) // → "1:02:05"
76
+ formatDurationCompact(3725) // → "1h 2m"
77
+ formatDurationFromRange('2024-01-01T10:00:00Z', '2024-01-01T11:30:00Z')
78
+ // → "1h 30m"
79
+
80
+ formatTimeWithTimezone(new Date(), 'EST')
81
+ // → "10:30 AM EST"
82
+
83
+ // Initials
84
+ nameInitials('John Michael Doe') // → "JM"
85
+ getFirstLastInitials('John Michael Doe') // → "JD"
86
+ nameInitials(null) // → "E" (default fallback)
38
87
  ```