@flamingo-stack/openframe-frontend-core 0.0.748 → 0.0.750

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 (554) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-7Y3VMMJB.cjs → chunk-2J2OBP4N.cjs} +26 -18
  3. package/dist/chunk-2YXOD2KL.cjs +137 -0
  4. package/dist/{chunk-BEC43GHL.cjs → chunk-34TWK3JE.cjs} +3 -3
  5. package/dist/{chunk-BBM2ICOY.cjs → chunk-3TELPOVH.cjs} +2 -2
  6. package/dist/{chunk-G2ELX3DG.cjs → chunk-45YRDD7W.cjs} +22 -19
  7. package/dist/{chunk-4AZHFLOM.cjs → chunk-4O2KYY4K.cjs} +3 -3
  8. package/dist/{chunk-6XP6RNFD.cjs → chunk-6KEJQR6L.cjs} +1875 -2116
  9. package/dist/{chunk-JNBOQ7F2.cjs → chunk-7RCTOWBA.cjs} +24 -24
  10. package/dist/{chunk-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
  11. package/dist/{chunk-TRXCQADV.cjs → chunk-AW6GP3JK.cjs} +103 -98
  12. package/dist/{chunk-GE4PCDNZ.cjs → chunk-BO6ZOAPB.cjs} +12 -12
  13. package/dist/{chunk-HNLI4OU5.cjs → chunk-C6LPOYDM.cjs} +24 -24
  14. package/dist/{chunk-4MGZYY6U.cjs → chunk-CLAJIQ7E.cjs} +26 -18
  15. package/dist/{chunk-EH3LOWGY.cjs → chunk-CNUZLOVA.cjs} +48 -40
  16. package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
  17. package/dist/{chunk-OZUJYBQ2.cjs → chunk-E3KFEOFA.cjs} +9 -6
  18. package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
  19. package/dist/{chunk-JOPFX3PJ.cjs → chunk-FP6HAJQV.cjs} +137 -122
  20. package/dist/{chunk-YKJQM2O6.cjs → chunk-GVETSV7H.cjs} +56 -53
  21. package/dist/{chunk-UNR74CAC.cjs → chunk-HOEVD6EN.cjs} +4 -4
  22. package/dist/{chunk-H34A2765.cjs → chunk-JPUTILTV.cjs} +104 -118
  23. package/dist/{chunk-46EIXJFC.cjs → chunk-KVSEWACW.cjs} +44 -27
  24. package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
  25. package/dist/{chunk-PSIKUDUV.cjs → chunk-LVO7FALW.cjs} +5 -5
  26. package/dist/{chunk-L2RMTGOK.cjs → chunk-MGF3FUKD.cjs} +7 -7
  27. package/dist/{chunk-P7KTAXXE.cjs → chunk-OFO75R2O.cjs} +169 -175
  28. package/dist/{chunk-B27QEHYR.cjs → chunk-P6F6PHVK.cjs} +9 -9
  29. package/dist/chunk-RB6BSE3O.cjs +21 -0
  30. package/dist/chunk-UGCRLRCT.cjs +25 -0
  31. package/dist/{chunk-BBTSJYTR.cjs → chunk-V3UJ6NDR.cjs} +243 -429
  32. package/dist/{chunk-ZNUSYMH7.cjs → chunk-WZX26ODJ.cjs} +121 -121
  33. package/dist/{chunk-YIRX6C7V.cjs → chunk-XJ3J4UIS.cjs} +57 -22
  34. package/dist/{chunk-D4XZL27V.cjs → chunk-YL62VAHC.cjs} +6 -6
  35. package/dist/{cloud-tenants-V5727B7F.cjs → cloud-tenants-E4JSG3GH.cjs} +16 -14
  36. package/dist/components/case-studies/index.cjs +29 -27
  37. package/dist/components/categories-cart.d.ts.map +1 -1
  38. package/dist/components/categories-cart.js +2 -7
  39. package/dist/components/chat/chat-container.js +4 -4
  40. package/dist/components/chat/chat-context-picker.d.ts.map +1 -1
  41. package/dist/components/chat/chat-context-picker.js +2 -1
  42. package/dist/components/chat/chat-message-row.d.ts.map +1 -1
  43. package/dist/components/chat/chat-message-row.js +6 -5
  44. package/dist/components/chat/chat-message-skeleton.d.ts +3 -1
  45. package/dist/components/chat/chat-message-skeleton.d.ts.map +1 -1
  46. package/dist/components/chat/chat-message-skeleton.js +8 -5
  47. package/dist/components/chat/chat-sidebar-skeleton.d.ts.map +1 -1
  48. package/dist/components/chat/chat-sidebar-skeleton.js +4 -3
  49. package/dist/components/chat/chat-top-navigation.js +4 -4
  50. package/dist/components/chat/context-items-list.d.ts.map +1 -1
  51. package/dist/components/chat/context-items-list.js +5 -3
  52. package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts +24 -1
  53. package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts.map +1 -1
  54. package/dist/components/chat/entity-cards/admin-content-card-grid.js +46 -15
  55. package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -1
  56. package/dist/components/chat/entity-cards/admin-content-card.js +2 -1
  57. package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -1
  58. package/dist/components/chat/entity-cards/blog-card.js +13 -12
  59. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -1
  60. package/dist/components/chat/entity-cards/campaign-card-admin.js +5 -4
  61. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  62. package/dist/components/chat/entity-cards/case-study-card.js +19 -18
  63. package/dist/components/chat/entity-cards/chat-ticket-item.js +5 -5
  64. package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -1
  65. package/dist/components/chat/entity-cards/customer-interview-card.js +15 -14
  66. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -1
  67. package/dist/components/chat/entity-cards/data-room-doc-card.js +7 -6
  68. package/dist/components/chat/entity-cards/design-doc-card.d.ts.map +1 -1
  69. package/dist/components/chat/entity-cards/design-doc-card.js +0 -2
  70. package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -1
  71. package/dist/components/chat/entity-cards/generic-entity-card.js +8 -7
  72. package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -1
  73. package/dist/components/chat/entity-cards/github-activity-card.js +11 -10
  74. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -1
  75. package/dist/components/chat/entity-cards/hubspot-ticket-card.js +16 -15
  76. package/dist/components/chat/entity-cards/index.d.ts +1 -1
  77. package/dist/components/chat/entity-cards/index.d.ts.map +1 -1
  78. package/dist/components/chat/entity-cards/index.js +2 -0
  79. package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -1
  80. package/dist/components/chat/entity-cards/investor-update-card.js +12 -11
  81. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
  82. package/dist/components/chat/entity-cards/onboarding-guide-card.js +25 -30
  83. package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -1
  84. package/dist/components/chat/entity-cards/program-card.js +29 -28
  85. package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -1
  86. package/dist/components/chat/entity-cards/roadmap-card.js +37 -39
  87. package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -1
  88. package/dist/components/chat/entity-cards/slack-message-card.js +12 -11
  89. package/dist/components/chat/guide-welcome.js +2 -2
  90. package/dist/components/chat/index.cjs +13 -9
  91. package/dist/components/chat/mingo-archive-list.d.ts.map +1 -1
  92. package/dist/components/chat/mingo-archive-list.js +2 -1
  93. package/dist/components/chat/mingo-chat-history.d.ts +4 -2
  94. package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
  95. package/dist/components/chat/mingo-chat-history.js +11 -5
  96. package/dist/components/chat/mingo-chat-rail.d.ts.map +1 -1
  97. package/dist/components/chat/mingo-chat-rail.js +2 -1
  98. package/dist/components/chat/mingo-info-card.d.ts.map +1 -1
  99. package/dist/components/chat/mingo-info-card.js +6 -5
  100. package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts +3 -1
  101. package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts.map +1 -1
  102. package/dist/components/chat/mingo-onboarding-card-skeleton.js +12 -12
  103. package/dist/components/chat/model-display.js +4 -4
  104. package/dist/components/chat/msp-organization-card-skeleton.js +5 -5
  105. package/dist/components/chat/quick-action-chip.d.ts +3 -3
  106. package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
  107. package/dist/components/chat/quick-action-chip.js +12 -6
  108. package/dist/components/chat/utils/compact-card-classes.d.ts +4 -4
  109. package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -1
  110. package/dist/components/chat/utils/compact-card-classes.js +2 -2
  111. package/dist/components/contact/index.cjs +17 -15
  112. package/dist/components/content-loading-container.d.ts +1 -1
  113. package/dist/components/content-loading-container.d.ts.map +1 -1
  114. package/dist/components/content-loading-container.js +6 -7
  115. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  116. package/dist/components/docs/doc-viewer.js +3 -2
  117. package/dist/components/docs/index.cjs +20 -18
  118. package/dist/components/docs/skeletons.d.ts +7 -8
  119. package/dist/components/docs/skeletons.d.ts.map +1 -1
  120. package/dist/components/docs/skeletons.js +62 -61
  121. package/dist/components/embeds/embed-iframe.d.ts +6 -6
  122. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  123. package/dist/components/embeds/embed-iframe.js +9 -4
  124. package/dist/components/embeds/index.cjs +19 -15
  125. package/dist/components/embeds/index.d.ts +2 -2
  126. package/dist/components/embeds/index.d.ts.map +1 -1
  127. package/dist/components/embeds/index.js +2 -1
  128. package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -1
  129. package/dist/components/embeds/linkedin-embed-client.js +7 -6
  130. package/dist/components/embeds/markdown-image.d.ts.map +1 -1
  131. package/dist/components/embeds/markdown-image.js +5 -3
  132. package/dist/components/embeds/og-link-preview.d.ts +19 -18
  133. package/dist/components/embeds/og-link-preview.d.ts.map +1 -1
  134. package/dist/components/embeds/og-link-preview.js +143 -88
  135. package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -1
  136. package/dist/components/embeds/reddit-embed-client.js +10 -9
  137. package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -1
  138. package/dist/components/embeds/twitter-embed-client.js +10 -9
  139. package/dist/components/faq/faq-section.d.ts.map +1 -1
  140. package/dist/components/faq/faq-section.js +9 -5
  141. package/dist/components/faq/index.cjs +18 -16
  142. package/dist/components/features/auth/login-form.d.ts +34 -21
  143. package/dist/components/features/auth/login-form.d.ts.map +1 -1
  144. package/dist/components/features/auth/login-form.js +77 -39
  145. package/dist/components/features/auth/sso-providers.d.ts +7 -1
  146. package/dist/components/features/auth/sso-providers.d.ts.map +1 -1
  147. package/dist/components/features/auth/sso-providers.js +22 -4
  148. package/dist/components/features/board/ticket-card-skeleton.js +8 -8
  149. package/dist/components/features/capability-explorer.d.ts +3 -1
  150. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  151. package/dist/components/features/capability-explorer.js +27 -24
  152. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +5 -2
  153. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -1
  154. package/dist/components/features/devices/device-selector/device-selector-skeleton.js +2 -2
  155. package/dist/components/features/devices/device-selector/device-selector.d.ts +1 -1
  156. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -1
  157. package/dist/components/features/devices/device-selector/device-selector.js +2 -0
  158. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +2 -0
  159. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -1
  160. package/dist/components/features/devices/devices-grid.d.ts +3 -1
  161. package/dist/components/features/devices/devices-grid.d.ts.map +1 -1
  162. package/dist/components/features/devices/devices-grid.js +3 -2
  163. package/dist/components/features/devices/devices-panel-view.d.ts +6 -1
  164. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
  165. package/dist/components/features/devices/devices-panel-view.js +4 -1
  166. package/dist/components/features/devices/devices-table-columns.d.ts +3 -1
  167. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
  168. package/dist/components/features/devices/devices-table-columns.js +2 -0
  169. package/dist/components/features/index.cjs +18 -14
  170. package/dist/components/features/logs/logs-table-view.d.ts +3 -1
  171. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -1
  172. package/dist/components/features/logs/logs-table-view.js +2 -2
  173. package/dist/components/features/model-token-rates.d.ts +4 -1
  174. package/dist/components/features/model-token-rates.d.ts.map +1 -1
  175. package/dist/components/features/model-token-rates.js +18 -23
  176. package/dist/components/features/notifications/index.d.ts +2 -2
  177. package/dist/components/features/notifications/index.d.ts.map +1 -1
  178. package/dist/components/features/notifications/index.js +2 -1
  179. package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
  180. package/dist/components/features/notifications/notification-drawer.js +9 -16
  181. package/dist/components/features/notifications/notification-tile.d.ts +14 -0
  182. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  183. package/dist/components/features/notifications/notification-tile.js +36 -1
  184. package/dist/components/features/policies/policy-summary-cards.js +2 -2
  185. package/dist/components/features/push-button-selector.d.ts.map +1 -1
  186. package/dist/components/features/push-button-selector.js +12 -7
  187. package/dist/components/features/remote-session/remote-desktop-view.d.ts +4 -1
  188. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -1
  189. package/dist/components/features/remote-session/remote-desktop-view.js +14 -10
  190. package/dist/components/features/waitlist-form.d.ts.map +1 -1
  191. package/dist/components/features/waitlist-form.js +6 -5
  192. package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
  193. package/dist/components/help-center-pages/download-apps-page.js +2 -1
  194. package/dist/components/help-center-pages/index.cjs +127 -119
  195. package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
  196. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  197. package/dist/components/help-center-pages/trust-center-page.js +3 -2
  198. package/dist/components/help-center-pages/trust-center-sections.d.ts +4 -1
  199. package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
  200. package/dist/components/help-center-pages/trust-center-sections.js +5 -2
  201. package/dist/components/index.cjs +70 -112
  202. package/dist/components/index.d.ts +0 -2
  203. package/dist/components/index.d.ts.map +1 -1
  204. package/dist/components/index.js +0 -2
  205. package/dist/components/layout/title-block.d.ts.map +1 -1
  206. package/dist/components/layout/title-block.js +18 -11
  207. package/dist/components/loading/card-skeleton.d.ts +6 -3
  208. package/dist/components/loading/card-skeleton.d.ts.map +1 -1
  209. package/dist/components/loading/card-skeleton.js +7 -27
  210. package/dist/components/loading/category-card-skeleton.d.ts.map +1 -1
  211. package/dist/components/loading/category-card-skeleton.js +2 -4
  212. package/dist/components/loading/category-vendor-selector-skeleton.d.ts +3 -1
  213. package/dist/components/loading/category-vendor-selector-skeleton.d.ts.map +1 -1
  214. package/dist/components/loading/category-vendor-selector-skeleton.js +9 -4
  215. package/dist/components/loading/device-card-skeleton.d.ts +18 -9
  216. package/dist/components/loading/device-card-skeleton.d.ts.map +1 -1
  217. package/dist/components/loading/device-card-skeleton.js +30 -21
  218. package/dist/components/loading/index.d.ts +3 -4
  219. package/dist/components/loading/index.d.ts.map +1 -1
  220. package/dist/components/loading/index.js +6 -29
  221. package/dist/components/loading/loading-region.d.ts +33 -0
  222. package/dist/components/loading/loading-region.d.ts.map +1 -0
  223. package/dist/components/loading/loading-region.js +22 -0
  224. package/dist/components/loading/margin-report-skeleton.d.ts +3 -1
  225. package/dist/components/loading/margin-report-skeleton.d.ts.map +1 -1
  226. package/dist/components/loading/margin-report-skeleton.js +70 -61
  227. package/dist/components/loading/msp-profile-form-skeleton.d.ts +3 -1
  228. package/dist/components/loading/msp-profile-form-skeleton.d.ts.map +1 -1
  229. package/dist/components/loading/msp-profile-form-skeleton.js +6 -5
  230. package/dist/components/loading/organization-card-skeleton.d.ts +3 -1
  231. package/dist/components/loading/organization-card-skeleton.d.ts.map +1 -1
  232. package/dist/components/loading/organization-card-skeleton.js +5 -5
  233. package/dist/components/loading/organization-icon-skeleton.d.ts.map +1 -1
  234. package/dist/components/loading/organization-icon-skeleton.js +2 -1
  235. package/dist/components/loading/page-layout-skeleton.d.ts +21 -6
  236. package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
  237. package/dist/components/loading/page-layout-skeleton.js +283 -266
  238. package/dist/components/loading/settings-form-skeleton.d.ts +17 -0
  239. package/dist/components/loading/settings-form-skeleton.d.ts.map +1 -0
  240. package/dist/components/loading/settings-form-skeleton.js +42 -0
  241. package/dist/components/loading/unified-skeleton.d.ts +11 -4
  242. package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
  243. package/dist/components/loading/unified-skeleton.js +14 -89
  244. package/dist/components/loading/wizard-layout-skeleton.d.ts +3 -1
  245. package/dist/components/loading/wizard-layout-skeleton.d.ts.map +1 -1
  246. package/dist/components/loading/wizard-layout-skeleton.js +3 -2
  247. package/dist/components/media-carousel.d.ts.map +1 -1
  248. package/dist/components/media-carousel.js +2 -1
  249. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  250. package/dist/components/meeting-scheduler/booking-form.js +14 -8
  251. package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
  252. package/dist/components/meeting-scheduler/context-panel.js +8 -7
  253. package/dist/components/meeting-scheduler/directory.d.ts.map +1 -1
  254. package/dist/components/meeting-scheduler/directory.js +10 -9
  255. package/dist/components/meeting-scheduler/index.cjs +85 -75
  256. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  257. package/dist/components/meeting-scheduler/index.js +3 -2
  258. package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -1
  259. package/dist/components/meeting-scheduler/modal-header.js +8 -7
  260. package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
  261. package/dist/components/meeting-scheduler/slot-picker.js +4 -3
  262. package/dist/components/navigation/app-header.d.ts.map +1 -1
  263. package/dist/components/navigation/app-header.js +8 -7
  264. package/dist/components/navigation/index.cjs +19 -17
  265. package/dist/components/navigation/multi-level-navigation.d.ts.map +1 -1
  266. package/dist/components/navigation/multi-level-navigation.js +3 -2
  267. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  268. package/dist/components/navigation/navigation-sidebar-item.js +3 -2
  269. package/dist/components/onboarding-guides/index.cjs +19 -17
  270. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts +4 -1
  271. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts.map +1 -1
  272. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.js +12 -8
  273. package/dist/components/product-demo/index.cjs +16 -15
  274. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  275. package/dist/components/product-demo/product-screen.js +4 -4
  276. package/dist/components/profile/ProfileLoadingSkeleton.d.ts +3 -1
  277. package/dist/components/profile/ProfileLoadingSkeleton.d.ts.map +1 -1
  278. package/dist/components/profile/ProfileLoadingSkeleton.js +10 -8
  279. package/dist/components/related-content/index.cjs +7 -5
  280. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  281. package/dist/components/related-content/related-content-section.js +3 -2
  282. package/dist/components/shared/delivery/delivery-table.d.ts.map +1 -1
  283. package/dist/components/shared/delivery/delivery-table.js +8 -7
  284. package/dist/components/shared/detail-page-skeleton.d.ts +5 -1
  285. package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
  286. package/dist/components/shared/detail-page-skeleton.js +18 -14
  287. package/dist/components/shared/dev-section/dev-card-row.d.ts +3 -1
  288. package/dist/components/shared/dev-section/dev-card-row.d.ts.map +1 -1
  289. package/dist/components/shared/dev-section/dev-card-row.js +22 -9
  290. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  291. package/dist/components/shared/legal-document/legal-document-page.js +8 -7
  292. package/dist/components/shared/onboarding/onboarding-step-card.d.ts.map +1 -1
  293. package/dist/components/shared/onboarding/onboarding-step-card.js +3 -2
  294. package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts.map +1 -1
  295. package/dist/components/shared/onboarding/onboarding-walkthrough.js +2 -1
  296. package/dist/components/shared/product-release/index.d.ts +0 -1
  297. package/dist/components/shared/product-release/index.d.ts.map +1 -1
  298. package/dist/components/shared/product-release/index.js +1 -3
  299. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
  300. package/dist/components/shared/product-release/product-release-card-skeleton.js +21 -20
  301. package/dist/components/shared/product-release/product-releases-view.d.ts.map +1 -1
  302. package/dist/components/shared/product-release/product-releases-view.js +2 -1
  303. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts +6 -13
  304. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts.map +1 -1
  305. package/dist/components/shared/roadmap/roadmap-grid-skeleton.js +13 -25
  306. package/dist/components/tickets/help-center-create-form.d.ts +4 -1
  307. package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
  308. package/dist/components/tickets/help-center-create-form.js +38 -26
  309. package/dist/components/tickets/index.cjs +22 -20
  310. package/dist/components/tickets/ticket-center.d.ts.map +1 -1
  311. package/dist/components/tickets/ticket-center.js +13 -10
  312. package/dist/components/tickets/ticket-detail-drawer.d.ts.map +1 -1
  313. package/dist/components/tickets/ticket-detail-drawer.js +2 -1
  314. package/dist/components/ui/admin-form-drawer.d.ts.map +1 -1
  315. package/dist/components/ui/admin-form-drawer.js +6 -8
  316. package/dist/components/ui/admin-form-modal.d.ts.map +1 -1
  317. package/dist/components/ui/admin-form-modal.js +12 -11
  318. package/dist/components/ui/analyzing-state.d.ts +1 -1
  319. package/dist/components/ui/analyzing-state.d.ts.map +1 -1
  320. package/dist/components/ui/analyzing-state.js +4 -10
  321. package/dist/components/ui/content-loader.d.ts +5 -1
  322. package/dist/components/ui/content-loader.d.ts.map +1 -1
  323. package/dist/components/ui/content-loader.js +27 -23
  324. package/dist/components/ui/dashboard-info-card.d.ts +17 -3
  325. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  326. package/dist/components/ui/dashboard-info-card.js +30 -10
  327. package/dist/components/ui/data-attribution.d.ts +6 -0
  328. package/dist/components/ui/data-attribution.d.ts.map +1 -1
  329. package/dist/components/ui/data-attribution.js +12 -1
  330. package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
  331. package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
  332. package/dist/components/ui/data-table/data-table-body.js +3 -1
  333. package/dist/components/ui/data-table/data-table-infinite-footer.d.ts.map +1 -1
  334. package/dist/components/ui/data-table/data-table-infinite-footer.js +3 -1
  335. package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
  336. package/dist/components/ui/data-table/data-table-skeleton.js +7 -5
  337. package/dist/components/ui/feature-card.d.ts.map +1 -1
  338. package/dist/components/ui/feature-card.js +7 -9
  339. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts +3 -1
  340. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts.map +1 -1
  341. package/dist/components/ui/file-manager/file-manager-skeleton.js +27 -21
  342. package/dist/components/ui/file-manager/file-manager-table.js +10 -10
  343. package/dist/components/ui/file-manager/index.cjs +45 -36
  344. package/dist/components/ui/filter-modal.d.ts.map +1 -1
  345. package/dist/components/ui/filter-modal.js +5 -5
  346. package/dist/components/ui/filter-pill-row.d.ts +10 -0
  347. package/dist/components/ui/filter-pill-row.d.ts.map +1 -1
  348. package/dist/components/ui/filter-pill-row.js +8 -1
  349. package/dist/components/ui/index.cjs +19 -28
  350. package/dist/components/ui/index.d.ts +0 -1
  351. package/dist/components/ui/index.d.ts.map +1 -1
  352. package/dist/components/ui/index.js +0 -1
  353. package/dist/components/ui/layout-hold.d.ts +5 -4
  354. package/dist/components/ui/layout-hold.d.ts.map +1 -1
  355. package/dist/components/ui/layout-hold.js +20 -29
  356. package/dist/components/ui/markdown/base-components.js +1 -1
  357. package/dist/components/ui/page-actions.d.ts.map +1 -1
  358. package/dist/components/ui/page-actions.js +6 -8
  359. package/dist/components/ui/photo-wall.d.ts.map +1 -1
  360. package/dist/components/ui/photo-wall.js +11 -18
  361. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts +1 -1
  362. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts.map +1 -1
  363. package/dist/components/ui/query-report-table/query-report-table-skeleton.js +28 -18
  364. package/dist/components/ui/query-report-table/query-report-table.d.ts +1 -1
  365. package/dist/components/ui/query-report-table/query-report-table.d.ts.map +1 -1
  366. package/dist/components/ui/query-report-table/query-report-table.js +3 -1
  367. package/dist/components/ui/query-report-table/types.d.ts +4 -0
  368. package/dist/components/ui/query-report-table/types.d.ts.map +1 -1
  369. package/dist/components/ui/skeleton-surface.d.ts +7 -0
  370. package/dist/components/ui/skeleton-surface.d.ts.map +1 -0
  371. package/dist/components/ui/skeleton-surface.js +5 -0
  372. package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
  373. package/dist/components/ui/table/table-skeleton.js +11 -13
  374. package/dist/components/ui/test-run.d.ts +6 -4
  375. package/dist/components/ui/test-run.d.ts.map +1 -1
  376. package/dist/components/ui/test-run.js +9 -5
  377. package/dist/{devices-WWMXIIHI.cjs → devices-AVRQGB2N.cjs} +17 -15
  378. package/dist/{embeddable-chat-IJHCGQ24.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
  379. package/dist/index.cjs +24 -31
  380. package/dist/{knowledge-JZP4RIXB.cjs → knowledge-S3CNISQH.cjs} +17 -15
  381. package/dist/{logs-WIRYFNUC.cjs → logs-WDLOKDXT.cjs} +24 -22
  382. package/dist/{policies-X7OJYA7G.cjs → policies-STML7NEZ.cjs} +20 -18
  383. package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
  384. package/dist/{scripts-GRMT2NGW.cjs → scripts-HO53VYGX.cjs} +23 -21
  385. package/dist/{software-update-G3QOB7RT.cjs → software-update-4VTK7LWQ.cjs} +20 -18
  386. package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
  387. package/package.json +1 -1
  388. package/src/components/categories-cart.tsx +2 -4
  389. package/src/components/chat/chat-container.tsx +4 -4
  390. package/src/components/chat/chat-context-picker.tsx +3 -2
  391. package/src/components/chat/chat-message-row.tsx +6 -7
  392. package/src/components/chat/chat-message-skeleton.tsx +11 -6
  393. package/src/components/chat/chat-sidebar-skeleton.tsx +4 -3
  394. package/src/components/chat/chat-top-navigation.tsx +4 -4
  395. package/src/components/chat/context-items-list.tsx +9 -3
  396. package/src/components/chat/entity-cards/admin-content-card-grid.tsx +65 -18
  397. package/src/components/chat/entity-cards/admin-content-card.tsx +2 -1
  398. package/src/components/chat/entity-cards/blog-card.tsx +13 -12
  399. package/src/components/chat/entity-cards/campaign-card-admin.tsx +5 -4
  400. package/src/components/chat/entity-cards/case-study-card.tsx +19 -18
  401. package/src/components/chat/entity-cards/chat-ticket-item.tsx +5 -5
  402. package/src/components/chat/entity-cards/customer-interview-card.tsx +15 -14
  403. package/src/components/chat/entity-cards/data-room-doc-card.tsx +7 -6
  404. package/src/components/chat/entity-cards/design-doc-card.tsx +0 -2
  405. package/src/components/chat/entity-cards/generic-entity-card.tsx +8 -7
  406. package/src/components/chat/entity-cards/github-activity-card.tsx +11 -10
  407. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +16 -15
  408. package/src/components/chat/entity-cards/index.ts +2 -0
  409. package/src/components/chat/entity-cards/investor-update-card.tsx +12 -11
  410. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +21 -22
  411. package/src/components/chat/entity-cards/program-card.tsx +29 -28
  412. package/src/components/chat/entity-cards/roadmap-card.tsx +22 -23
  413. package/src/components/chat/entity-cards/slack-message-card.tsx +12 -11
  414. package/src/components/chat/guide-welcome.tsx +2 -2
  415. package/src/components/chat/mingo-archive-list.tsx +2 -1
  416. package/src/components/chat/mingo-chat-history.tsx +18 -9
  417. package/src/components/chat/mingo-chat-rail.tsx +2 -1
  418. package/src/components/chat/mingo-info-card.tsx +6 -5
  419. package/src/components/chat/mingo-onboarding-card-skeleton.tsx +15 -13
  420. package/src/components/chat/model-display.tsx +4 -4
  421. package/src/components/chat/msp-organization-card-skeleton.tsx +5 -5
  422. package/src/components/chat/quick-action-chip.tsx +17 -14
  423. package/src/components/chat/utils/compact-card-classes.ts +4 -5
  424. package/src/components/content-loading-container.tsx +7 -8
  425. package/src/components/docs/doc-viewer.tsx +3 -2
  426. package/src/components/docs/skeletons.tsx +64 -63
  427. package/src/components/embeds/embed-iframe.tsx +16 -9
  428. package/src/components/embeds/index.ts +2 -2
  429. package/src/components/embeds/linkedin-embed-client.tsx +7 -6
  430. package/src/components/embeds/markdown-image.tsx +5 -3
  431. package/src/components/embeds/og-link-preview.tsx +162 -79
  432. package/src/components/embeds/reddit-embed-client.tsx +10 -9
  433. package/src/components/embeds/twitter-embed-client.tsx +10 -9
  434. package/src/components/faq/faq-section.tsx +13 -6
  435. package/src/components/features/auth/login-form.tsx +121 -64
  436. package/src/components/features/auth/sso-providers.tsx +21 -0
  437. package/src/components/features/board/ticket-card-skeleton.tsx +8 -8
  438. package/src/components/features/capability-explorer.tsx +61 -30
  439. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +9 -3
  440. package/src/components/features/devices/device-selector/device-selector.tsx +2 -0
  441. package/src/components/features/devices/device-selector/device-selector.types.ts +2 -0
  442. package/src/components/features/devices/devices-grid.tsx +4 -1
  443. package/src/components/features/devices/devices-panel-view.tsx +9 -1
  444. package/src/components/features/devices/devices-table-columns.tsx +4 -0
  445. package/src/components/features/logs/logs-table-view.tsx +4 -2
  446. package/src/components/features/model-token-rates.tsx +27 -24
  447. package/src/components/features/notifications/index.ts +2 -2
  448. package/src/components/features/notifications/notification-drawer.tsx +7 -10
  449. package/src/components/features/notifications/notification-tile.tsx +57 -0
  450. package/src/components/features/policies/policy-summary-cards.tsx +2 -2
  451. package/src/components/features/push-button-selector.tsx +20 -11
  452. package/src/components/features/remote-session/remote-desktop-view.tsx +26 -16
  453. package/src/components/features/waitlist-form.tsx +6 -5
  454. package/src/components/help-center-pages/download-apps-page.tsx +3 -2
  455. package/src/components/help-center-pages/trust-center-page.tsx +6 -2
  456. package/src/components/help-center-pages/trust-center-sections.tsx +9 -3
  457. package/src/components/index.ts +0 -2
  458. package/src/components/layout/title-block.tsx +17 -15
  459. package/src/components/loading/card-skeleton.tsx +14 -46
  460. package/src/components/loading/category-card-skeleton.tsx +2 -4
  461. package/src/components/loading/category-vendor-selector-skeleton.tsx +12 -5
  462. package/src/components/loading/device-card-skeleton.tsx +58 -51
  463. package/src/components/loading/index.ts +5 -19
  464. package/src/components/loading/loading-region.tsx +60 -0
  465. package/src/components/loading/margin-report-skeleton.tsx +45 -34
  466. package/src/components/loading/msp-profile-form-skeleton.tsx +9 -6
  467. package/src/components/loading/organization-card-skeleton.tsx +8 -6
  468. package/src/components/loading/organization-icon-skeleton.tsx +3 -2
  469. package/src/components/loading/page-layout-skeleton.tsx +162 -133
  470. package/src/components/loading/settings-form-skeleton.tsx +52 -0
  471. package/src/components/loading/unified-skeleton.tsx +26 -71
  472. package/src/components/loading/wizard-layout-skeleton.tsx +6 -3
  473. package/src/components/media-carousel.tsx +2 -1
  474. package/src/components/meeting-scheduler/booking-form.tsx +10 -7
  475. package/src/components/meeting-scheduler/context-panel.tsx +8 -7
  476. package/src/components/meeting-scheduler/directory.tsx +10 -9
  477. package/src/components/meeting-scheduler/index.tsx +5 -4
  478. package/src/components/meeting-scheduler/modal-header.tsx +8 -7
  479. package/src/components/meeting-scheduler/slot-picker.tsx +4 -3
  480. package/src/components/navigation/app-header.tsx +8 -7
  481. package/src/components/navigation/multi-level-navigation.tsx +3 -2
  482. package/src/components/navigation/navigation-sidebar-item.tsx +3 -2
  483. package/src/components/onboarding-guides/onboarding-guides-catalog-skeleton.tsx +17 -10
  484. package/src/components/product-demo/product-screen.tsx +4 -4
  485. package/src/components/profile/ProfileLoadingSkeleton.tsx +13 -9
  486. package/src/components/related-content/related-content-section.tsx +5 -4
  487. package/src/components/shared/delivery/delivery-table.tsx +8 -7
  488. package/src/components/shared/detail-page-skeleton.tsx +22 -14
  489. package/src/components/shared/dev-section/dev-card-row.tsx +23 -10
  490. package/src/components/shared/legal-document/legal-document-page.tsx +8 -7
  491. package/src/components/shared/onboarding/onboarding-step-card.tsx +3 -2
  492. package/src/components/shared/onboarding/onboarding-walkthrough.tsx +2 -1
  493. package/src/components/shared/product-release/index.ts +0 -1
  494. package/src/components/shared/product-release/product-release-card-skeleton.tsx +23 -25
  495. package/src/components/shared/product-release/product-releases-view.tsx +3 -2
  496. package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +14 -56
  497. package/src/components/tickets/help-center-create-form.tsx +23 -12
  498. package/src/components/tickets/ticket-center.tsx +17 -11
  499. package/src/components/tickets/ticket-detail-drawer.tsx +3 -2
  500. package/src/components/ui/admin-form-drawer.tsx +7 -7
  501. package/src/components/ui/admin-form-modal.tsx +9 -8
  502. package/src/components/ui/analyzing-state.tsx +5 -8
  503. package/src/components/ui/content-loader.tsx +31 -23
  504. package/src/components/ui/dashboard-info-card.tsx +81 -20
  505. package/src/components/ui/data-attribution.tsx +18 -0
  506. package/src/components/ui/data-table/data-table-body.tsx +9 -2
  507. package/src/components/ui/data-table/data-table-infinite-footer.tsx +4 -2
  508. package/src/components/ui/data-table/data-table-skeleton.tsx +8 -5
  509. package/src/components/ui/feature-card.tsx +27 -11
  510. package/src/components/ui/file-manager/file-manager-skeleton.tsx +30 -22
  511. package/src/components/ui/file-manager/file-manager-table.tsx +10 -10
  512. package/src/components/ui/filter-modal.tsx +5 -5
  513. package/src/components/ui/filter-pill-row.tsx +19 -0
  514. package/src/components/ui/index.ts +0 -1
  515. package/src/components/ui/layout-hold.tsx +30 -38
  516. package/src/components/ui/markdown/base-components.tsx +1 -1
  517. package/src/components/ui/page-actions.tsx +10 -8
  518. package/src/components/ui/photo-wall.tsx +4 -7
  519. package/src/components/ui/query-report-table/query-report-table-skeleton.tsx +13 -7
  520. package/src/components/ui/query-report-table/query-report-table.tsx +2 -0
  521. package/src/components/ui/query-report-table/types.ts +4 -0
  522. package/src/components/ui/skeleton-surface.ts +6 -0
  523. package/src/components/ui/table/table-skeleton.tsx +11 -13
  524. package/src/components/ui/test-run.tsx +30 -22
  525. package/src/styles/ods-colors.css +2 -2
  526. package/dist/chunk-5M5C6UV4.cjs +0 -125
  527. package/dist/components/dynamic-skeleton.d.ts +0 -108
  528. package/dist/components/dynamic-skeleton.d.ts.map +0 -1
  529. package/dist/components/dynamic-skeleton.js +0 -221
  530. package/dist/components/loading/content-skeleton.d.ts +0 -73
  531. package/dist/components/loading/content-skeleton.d.ts.map +0 -1
  532. package/dist/components/loading/content-skeleton.js +0 -217
  533. package/dist/components/loading/users-grid-skeleton.d.ts +0 -7
  534. package/dist/components/loading/users-grid-skeleton.d.ts.map +0 -1
  535. package/dist/components/loading/users-grid-skeleton.js +0 -13
  536. package/dist/components/shared/product-release/release-detail-skeleton.d.ts +0 -2
  537. package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +0 -1
  538. package/dist/components/shared/product-release/release-detail-skeleton.js +0 -9
  539. package/dist/components/skeleton.d.ts +0 -4
  540. package/dist/components/skeleton.d.ts.map +0 -1
  541. package/dist/components/skeleton.js +0 -9
  542. package/dist/components/ui/skeleton.d.ts +0 -44
  543. package/dist/components/ui/skeleton.d.ts.map +0 -1
  544. package/dist/components/ui/skeleton.js +0 -103
  545. package/dist/components/vendor-page-skeleton.d.ts +0 -2
  546. package/dist/components/vendor-page-skeleton.d.ts.map +0 -1
  547. package/dist/components/vendor-page-skeleton.js +0 -9
  548. package/src/components/dynamic-skeleton.tsx +0 -365
  549. package/src/components/loading/content-skeleton.tsx +0 -374
  550. package/src/components/loading/users-grid-skeleton.tsx +0 -36
  551. package/src/components/shared/product-release/release-detail-skeleton.tsx +0 -7
  552. package/src/components/skeleton.tsx +0 -8
  553. package/src/components/ui/skeleton.tsx +0 -173
  554. package/src/components/vendor-page-skeleton.tsx +0 -7
@@ -38,6 +38,7 @@ import { isImageMedia } from '../../../utils/media-type';
38
38
  import { programMetaFormatters, programMetaLine } from '../../../utils/program-instant';
39
39
  import { PROGRAM_META_RENDERERS } from '../../../utils/program-meta-renderers';
40
40
  import { CardHoverPlay } from '../../features/video-center-badge';
41
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
41
42
  import { Button } from '../../ui/button/button';
42
43
  import { ImageGalleryModal } from '../../ui/image-gallery-modal';
43
44
  import { SquareAvatar } from '../../ui/square-avatar';
@@ -119,32 +120,32 @@ export function ProgramCardSkeleton({
119
120
  // that row's line height.
120
121
  if (size === 'row') {
121
122
  return (
122
- <span className={cn(EDITORIAL_FRAME, EDITORIAL_ROW_GRID, 'animate-pulse')}>
123
- <span className={cn(EDITORIAL_ROW_THUMB, 'bg-ods-border/20')} />
123
+ <span className={cn(EDITORIAL_FRAME, EDITORIAL_ROW_GRID)}>
124
+ <UnifiedSkeleton as="span" className={EDITORIAL_ROW_THUMB} />
124
125
  <span className={EDITORIAL_ROW_TEXT}>
125
- <span className="block h-[2lh] w-full rounded bg-ods-border text-h3" />
126
+ <UnifiedSkeleton as="span" className="block h-[2lh] w-full rounded text-h3" />
126
127
  <span className={EDITORIAL_META_ROW}>
127
- <span className="block h-[1lh] w-40 rounded bg-ods-border" />
128
+ <UnifiedSkeleton as="span" className="block h-[1lh] w-40 rounded" />
128
129
  </span>
129
- <span className="block h-[2lh] w-full rounded bg-ods-border text-h6" />
130
+ <UnifiedSkeleton as="span" className="block h-[2lh] w-full rounded text-h6" />
130
131
  </span>
131
132
  </span>
132
133
  );
133
134
  }
134
135
  if (size === 'feature') {
135
136
  return (
136
- <span className={cn(EDITORIAL_FRAME, 'flex animate-pulse flex-col')}>
137
- <span className={cn(EDITORIAL_FEATURE_COVER, 'bg-ods-border/20')} />
137
+ <span className={cn(EDITORIAL_FRAME, 'flex flex-col')}>
138
+ <UnifiedSkeleton as="span" className={cn(EDITORIAL_FEATURE_COVER, 'rounded-none')} />
138
139
  <span className={EDITORIAL_FEATURE_BODY}>
139
- {eyebrow && <span className="block h-[1lh] w-28 rounded bg-ods-border text-h5" />}
140
- <span className="block h-[2lh] w-full rounded bg-ods-border text-h3" />
140
+ {eyebrow && <UnifiedSkeleton as="span" className="block h-[1lh] w-28 rounded text-h5" />}
141
+ <UnifiedSkeleton as="span" className="block h-[2lh] w-full rounded text-h3" />
141
142
  <span className={EDITORIAL_META_ROW}>
142
- <span className="block h-[1lh] w-40 rounded bg-ods-border" />
143
+ <UnifiedSkeleton as="span" className="block h-[1lh] w-40 rounded" />
143
144
  </span>
144
- <span className="block h-[3lh] w-full rounded bg-ods-border text-h4" />
145
+ <UnifiedSkeleton as="span" className="block h-[3lh] w-full rounded text-h4" />
145
146
  <span className={EDITORIAL_PERSON_ROW}>
146
- <span className="block h-8 w-8 shrink-0 rounded-full bg-ods-border" />
147
- <span className="block h-[1lh] w-40 rounded bg-ods-border text-h6" />
147
+ <UnifiedSkeleton as="span" className="block h-8 w-8 shrink-0 rounded-full" />
148
+ <UnifiedSkeleton as="span" className="block h-[1lh] w-40 rounded text-h6" />
148
149
  </span>
149
150
  </span>
150
151
  </span>
@@ -153,43 +154,43 @@ export function ProgramCardSkeleton({
153
154
  if (size === 'sm') {
154
155
  return (
155
156
  <span className={COMPACT_CARD_SKELETON_OUTER}>
156
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
157
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
157
158
  <span className={COMPACT_CARD_TEXT_COL}>
158
159
  <span className={COMPACT_CARD_TITLE_ROW}>
159
- <span className="h-3.5 w-3/5 rounded bg-ods-bg" />
160
+ <UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
160
161
  </span>
161
162
  <span className={COMPACT_CARD_META_ROW_BOX}>
162
- <span className="h-3 w-2/5 rounded bg-ods-bg/70" />
163
+ <UnifiedSkeleton as="span" className="h-3 w-2/5 rounded" />
163
164
  </span>
164
165
  <span className={COMPACT_CARD_META_ROW_BOX}>
165
- <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
166
+ <UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
166
167
  </span>
167
168
  </span>
168
169
  <span className="flex h-5 shrink-0 items-center self-start">
169
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
170
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
170
171
  </span>
171
172
  </span>
172
173
  );
173
174
  }
174
175
  return (
175
- <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, DEFAULT_BODY, 'animate-pulse')}>
176
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, DEFAULT_BODY)}>
176
177
  <div className={DEFAULT_HEADER}>
177
- <div className={`${DEFAULT_COVER_FRAME} bg-ods-border`} />
178
+ <UnifiedSkeleton className={DEFAULT_COVER_FRAME} />
178
179
  <div className={DEFAULT_TEXT}>
179
180
  <div className={DEFAULT_TITLE}>
180
- <span className="block h-[2lh] w-3/4 rounded bg-ods-border" />
181
+ <UnifiedSkeleton as="span" className="block h-[2lh] w-3/4 rounded" />
181
182
  </div>
182
183
  <div className={DEFAULT_META_ROW}>
183
- <span className="block h-[1lh] w-32 rounded bg-ods-border" />
184
- <span className="block h-[1lh] w-40 rounded bg-ods-border" />
184
+ <UnifiedSkeleton as="span" className="block h-[1lh] w-32 rounded" />
185
+ <UnifiedSkeleton as="span" className="block h-[1lh] w-40 rounded" />
185
186
  </div>
186
187
  <div className={DEFAULT_DESCRIPTION}>
187
- <span className="block h-[3lh] w-full rounded bg-ods-border" />
188
+ <UnifiedSkeleton as="span" className="block h-[3lh] w-full rounded" />
188
189
  </div>
189
190
  {tags && (
190
191
  <div className={DEFAULT_TAG_ROW}>
191
- <span className="block h-8 w-24 rounded bg-ods-border" />
192
- <span className="block h-8 w-24 rounded bg-ods-border" />
192
+ <UnifiedSkeleton as="span" className="block h-8 w-24 rounded" />
193
+ <UnifiedSkeleton as="span" className="block h-8 w-24 rounded" />
193
194
  </div>
194
195
  )}
195
196
  </div>
@@ -197,13 +198,13 @@ export function ProgramCardSkeleton({
197
198
  {media > 0 && (
198
199
  <div className={DEFAULT_GALLERY_ROW}>
199
200
  {Array.from({ length: media }, (_, i) => (
200
- <div key={i} className={`${DEFAULT_GALLERY_THUMB} bg-ods-border`} />
201
+ <UnifiedSkeleton key={i} className={DEFAULT_GALLERY_THUMB} />
201
202
  ))}
202
203
  </div>
203
204
  )}
204
205
  <div className={DEFAULT_FOOTER}>
205
206
  {/* The action button's own height (44px, 48px from md). */}
206
- <div className="h-11 w-40 rounded bg-ods-border md:h-12" />
207
+ <UnifiedSkeleton className="h-11 w-40 rounded md:h-12" />
207
208
  </div>
208
209
  </div>
209
210
  );
@@ -18,6 +18,7 @@ import { cn } from '../../../utils/cn';
18
18
  import { getProxiedImageUrl } from '../../../utils/image-proxy';
19
19
  import { ImageClassicIcon } from '../../icons-v2-generated/audio-and-visual/image-classic-icon';
20
20
  import { FigmaClassicIcon } from '../../icons-v2-generated/brand-logos/figma-classic-icon';
21
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
21
22
  import { AvatarStack, type AvatarStackPerson } from '../../ui/avatar-stack';
22
23
  import { Button } from '../../ui/button/button';
23
24
  import { ImageGalleryModal } from '../../ui/image-gallery-modal';
@@ -48,54 +49,52 @@ export function RoadmapCardSkeleton({ size = 'default' }: { size?: CardSize }) {
48
49
  if (size === 'sm') {
49
50
  return (
50
51
  <span className={COMPACT_CARD_SKELETON_OUTER}>
51
- <span className="block aspect-square h-12 w-12 shrink-0 self-start rounded-md border border-ods-border bg-ods-bg p-1.5" />
52
+ <UnifiedSkeleton
53
+ as="span"
54
+ className="block aspect-square h-12 w-12 shrink-0 self-start rounded-md border border-ods-border p-1.5"
55
+ />
52
56
  <span className={COMPACT_CARD_TEXT_COL}>
53
57
  <span className={`${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-2`}>
54
- <span className="h-3.5 w-1/2 rounded bg-ods-bg" />
55
- <span className="h-4 w-12 shrink-0 rounded bg-ods-bg/70" />
58
+ <UnifiedSkeleton as="span" className="h-3.5 w-1/2 rounded" />
59
+ <UnifiedSkeleton as="span" className="h-4 w-12 shrink-0 rounded" />
56
60
  </span>
57
61
  <span className={`${COMPACT_CARD_META_ROW_BOX} flex-nowrap gap-2`}>
58
- <span className="h-3 w-2/5 flex-1 rounded bg-ods-bg/60" />
59
- <span className="h-3 w-10 shrink-0 rounded bg-ods-bg/40" />
62
+ <UnifiedSkeleton as="span" className="h-3 w-2/5 flex-1 rounded" />
63
+ <UnifiedSkeleton as="span" className="h-3 w-10 shrink-0 rounded" />
60
64
  {/* assignee-stack placeholder — mirrors the xs AvatarStack
61
65
  slot so row width doesn't shift when assignees load */}
62
- <span className="h-6 w-14 shrink-0 rounded-full bg-ods-bg/40" />
66
+ <UnifiedSkeleton as="span" className="h-6 w-14 shrink-0 rounded-full" />
63
67
  </span>
64
68
  <span className={COMPACT_CARD_META_ROW_BOX}>
65
- <span className="h-3 w-5/6 rounded bg-ods-bg/40" />
69
+ <UnifiedSkeleton as="span" className="h-3 w-5/6 rounded" />
66
70
  </span>
67
71
  </span>
68
72
  </span>
69
73
  );
70
74
  }
71
75
  return (
72
- <div
73
- className={cn(
74
- CONTENT_CARD_SKELETON_FRAME_CLASS,
75
- 'flex h-full animate-pulse flex-col gap-4 p-[var(--spacing-system-lf)]',
76
- )}
77
- >
76
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex h-full flex-col gap-4 p-[var(--spacing-system-lf)]')}>
78
77
  <div className="flex items-center gap-4">
79
- <div className="h-16 w-16 flex-shrink-0 rounded-lg bg-ods-border" />
78
+ <UnifiedSkeleton className="h-16 w-16 flex-shrink-0 rounded-lg" />
80
79
  <div className="flex-1 space-y-2">
81
- <div className="h-5 w-3/4 rounded bg-ods-border" />
82
- <div className="h-3 w-1/2 rounded bg-ods-border" />
80
+ <UnifiedSkeleton className="h-5 w-3/4 rounded" />
81
+ <UnifiedSkeleton className="h-3 w-1/2 rounded" />
83
82
  </div>
84
- <div className="h-6 w-16 rounded bg-ods-border" />
83
+ <UnifiedSkeleton className="h-6 w-16 rounded" />
85
84
  </div>
86
85
  <div className="space-y-2">
87
- <div className="h-3 w-full rounded bg-ods-border" />
88
- <div className="h-3 w-5/6 rounded bg-ods-border" />
89
- <div className="h-3 w-4/5 rounded bg-ods-border" />
86
+ <UnifiedSkeleton className="h-3 w-full rounded" />
87
+ <UnifiedSkeleton className="h-3 w-5/6 rounded" />
88
+ <UnifiedSkeleton className="h-3 w-4/5 rounded" />
90
89
  </div>
91
90
  <div className="flex-1" />
92
91
  <div className="flex items-center justify-between">
93
- <div className="h-12 w-32 rounded bg-ods-border" />
92
+ <UnifiedSkeleton className="h-12 w-32 rounded" />
94
93
  <div className="flex items-center gap-2">
95
94
  {/* assignee-stack placeholder — matches the xs AvatarStack in
96
95
  the loaded card's action row */}
97
- <div className="h-6 w-14 rounded-full bg-ods-border" />
98
- <div className="h-8 w-20 rounded bg-ods-border" />
96
+ <UnifiedSkeleton className="h-6 w-14 rounded-full" />
97
+ <UnifiedSkeleton className="h-8 w-20 rounded" />
99
98
  </div>
100
99
  </div>
101
100
  </div>
@@ -14,6 +14,7 @@ import React from 'react';
14
14
  import Link from '../../../embed-shims/next-link';
15
15
  import { formatDateUTC as formatDate } from '../../../utils/format';
16
16
  import { SlackIcon } from '../../icons-v2-generated/brand-logos/slack-icon';
17
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
17
18
  import type { SlackMessageItem } from '../types/entities/slack-message';
18
19
  import {
19
20
  COMPACT_CARD_ICON_SLOT,
@@ -160,31 +161,31 @@ export function SlackMessageCardSkeleton({
160
161
  }) {
161
162
  if (variant === 'row') {
162
163
  return (
163
- <div className={`flex min-w-0 animate-pulse items-center gap-3 ${className ?? ''}`}>
164
- <div className="h-3.5 w-3.5 shrink-0 rounded bg-ods-bg" />
165
- <div className="h-3 w-32 shrink-0 rounded bg-ods-bg" />
166
- <div className="h-3 w-2/3 flex-1 rounded bg-ods-bg/60" />
167
- <div className="h-3 w-24 shrink-0 rounded bg-ods-bg/60" />
168
- <div className="h-3 w-20 shrink-0 rounded bg-ods-bg/60" />
164
+ <div className={`flex min-w-0 items-center gap-3 ${className ?? ''}`}>
165
+ <UnifiedSkeleton className="h-3.5 w-3.5 shrink-0 rounded" />
166
+ <UnifiedSkeleton className="h-3 w-32 shrink-0 rounded" />
167
+ <UnifiedSkeleton className="h-3 w-2/3 flex-1 rounded" />
168
+ <UnifiedSkeleton className="h-3 w-24 shrink-0 rounded" />
169
+ <UnifiedSkeleton className="h-3 w-20 shrink-0 rounded" />
169
170
  </div>
170
171
  );
171
172
  }
172
173
  return (
173
174
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
174
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
175
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
175
176
  <span className={COMPACT_CARD_TEXT_COL}>
176
177
  <span className={COMPACT_CARD_TITLE_ROW}>
177
- <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
178
+ <UnifiedSkeleton as="span" className="h-3.5 w-2/3 rounded" />
178
179
  </span>
179
180
  <span className={COMPACT_CARD_META_ROW_BOX}>
180
- <span className="h-3 w-5/6 rounded bg-ods-bg/60" />
181
+ <UnifiedSkeleton as="span" className="h-3 w-5/6 rounded" />
181
182
  </span>
182
183
  <span className={COMPACT_CARD_META_ROW_BOX}>
183
- <span className="h-3 w-1/3 rounded bg-ods-bg/70" />
184
+ <UnifiedSkeleton as="span" className="h-3 w-1/3 rounded" />
184
185
  </span>
185
186
  </span>
186
187
  <span className="flex h-5 shrink-0 items-center self-start">
187
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
188
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
188
189
  </span>
189
190
  </span>
190
191
  );
@@ -4,8 +4,8 @@ import { type ReactNode, useMemo } from 'react';
4
4
  import { cn } from '../../utils/cn';
5
5
  import { AgentMark } from '../agent-mark';
6
6
  import { EntityIcon } from '../icon-display';
7
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
7
8
  import { ScrollFadeOverlay, useScrollFade } from '../ui/scroll-fade';
8
- import { Skeleton } from '../ui/skeleton';
9
9
  import { accentFromIdentityIcon, type QuickActionAccent } from './quick-action-chip';
10
10
  import { QuickActionWall } from './quick-action-wall';
11
11
 
@@ -175,7 +175,7 @@ export function GuideWelcome({
175
175
  <p className="text-ods-text-secondary text-h4">{subtitle}</p>
176
176
  ) : subtitleLoading ? (
177
177
  <div className="flex w-full justify-center">
178
- <Skeleton className="h-5 w-3/4 max-w-80 rounded-sm" />
178
+ <UnifiedSkeleton className="h-5 w-3/4 max-w-80 rounded-sm" />
179
179
  </div>
180
180
  ) : null}
181
181
  </div>
@@ -3,6 +3,7 @@
3
3
  import { useEffect, useRef } from 'react';
4
4
  import { formatRelativeTime } from '../../utils/date-utils';
5
5
  import { BoxArchiveIcon } from '../icons-v2-generated';
6
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
6
7
  import { SquareAvatar } from '../ui/square-avatar';
7
8
  import { ChatListEmptyState } from './chat-list-empty-state';
8
9
  import { ChatListItem } from './chat-nav-sidebar';
@@ -93,7 +94,7 @@ export function MingoArchiveList({
93
94
  </>
94
95
  ) : isLoading ? (
95
96
  Array.from({ length: 6 }, (_, i) => (
96
- <div key={i} className="h-10 shrink-0 animate-pulse rounded-md bg-ods-skeleton" aria-hidden />
97
+ <UnifiedSkeleton key={i} aria-hidden className="h-10 shrink-0 rounded-md" />
97
98
  ))
98
99
  ) : (
99
100
  <ChatListEmptyState
@@ -3,6 +3,8 @@
3
3
  import { useState, useMemo, useRef, useEffect } from 'react';
4
4
  import { cn } from '../../utils/cn';
5
5
  import { Ellipsis01Icon, SearchXmarkIcon } from '../icons-v2-generated';
6
+ import { LoadingRegion } from '../loading/loading-region';
7
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
6
8
  import { ActionsMenuDropdown } from '../ui/actions-menu';
7
9
  import { Button } from '../ui/button';
8
10
  import { ScrollFadeOverlay, useScrollFade } from '../ui/scroll-fade';
@@ -250,22 +252,29 @@ function MingoChatHistoryRow({
250
252
  * above. Shown while the FIRST page of dialogs is in flight so the Mingo empty
251
253
  * state doesn't flash the new-user greeting+grid before the list arrives (the
252
254
  * two layouts are mutually exclusive — swapping between them mid-load reads as
253
- * a flicker). Pure ODS tokens, `animate-pulse`.
255
+ * a flicker). Built from `UnifiedSkeleton`.
254
256
  */
255
- export function MingoChatHistorySkeleton({ className }: { className?: string }) {
257
+ export function MingoChatHistorySkeleton({
258
+ region = true,
259
+ className,
260
+ }: {
261
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
262
+ region?: boolean;
263
+ className?: string;
264
+ }) {
256
265
  // Mirror the real grouped list exactly: a small group label, then a bordered
257
266
  // rounded container of `h-12` rows, each with a single title bar of varying
258
267
  // width (no unread-badge squares — the real rows currently never show one, so
259
- // a badge placeholder would mis-promise the layout). `bg-ods-border` matches
260
- // the kit's canonical `Skeleton` placeholder colour; `bg-ods-bg` rows read a
268
+ // a badge placeholder would mis-promise the layout). `bg-ods-bg` rows read a
261
269
  // touch darker than the `bg-ods-card` panel so the bars stay legible.
262
270
  const groups: ReadonlyArray<ReadonlyArray<string>> = [
263
271
  ['w-3/5', 'w-4/5', 'w-2/5', 'w-3/4'],
264
272
  ['w-1/2', 'w-2/3'],
265
273
  ];
266
274
  return (
267
- <div
268
- aria-hidden
275
+ <LoadingRegion
276
+ label="Loading conversations"
277
+ announce={region}
269
278
  // `overflow-hidden` clips the placeholder rows to the flex-1 box (the real
270
279
  // list scrolls; the skeleton just needs to stay within bounds).
271
280
  className={cn('flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-m)] overflow-hidden', className)}
@@ -273,20 +282,20 @@ export function MingoChatHistorySkeleton({ className }: { className?: string })
273
282
  {groups.map((widths, g) => (
274
283
  <div key={g} className="flex shrink-0 flex-col gap-[var(--spacing-system-xxs)]">
275
284
  {/* Group label (Today / Older). */}
276
- <div className="h-3 w-16 animate-pulse rounded bg-ods-border" />
285
+ <UnifiedSkeleton className="h-3 w-16 rounded" />
277
286
  <div className="overflow-hidden rounded-md border border-ods-border">
278
287
  {widths.map((w, i) => (
279
288
  <div
280
289
  key={i}
281
290
  className="flex h-12 items-center border-b border-ods-border bg-ods-bg px-[var(--spacing-system-s)] last:border-b-0"
282
291
  >
283
- <div className={cn('h-4 animate-pulse rounded bg-ods-border', w)} />
292
+ <UnifiedSkeleton className={cn('h-4 rounded', w)} />
284
293
  </div>
285
294
  ))}
286
295
  </div>
287
296
  </div>
288
297
  ))}
289
- </div>
298
+ </LoadingRegion>
290
299
  );
291
300
  }
292
301
 
@@ -19,6 +19,7 @@ import {
19
19
  UserIcon,
20
20
  UsersIcon,
21
21
  } from '../icons-v2-generated';
22
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
22
23
  import { ActionsMenuDropdown, type ActionsMenuItem } from '../ui/actions-menu';
23
24
  import { Button } from '../ui/button';
24
25
  import { chatDialogMenuItems } from './chat-dialog-menu-items';
@@ -209,7 +210,7 @@ export function MingoChatRail({
209
210
  );
210
211
  } else if (isLoadingHistory) {
211
212
  list = Array.from({ length: 6 }, (_, i) => (
212
- <div key={i} className="h-10 shrink-0 animate-pulse rounded-md bg-ods-skeleton" aria-hidden />
213
+ <UnifiedSkeleton key={i} aria-hidden className="h-10 shrink-0 rounded-md" />
213
214
  ));
214
215
  } else if (dialogs.length === 0 && !draftTitle) {
215
216
  list = hasSearch ? (
@@ -6,6 +6,7 @@ import Link from '../../embed-shims/next-link';
6
6
  import { cn } from '../../utils/cn';
7
7
  import { personInitials } from '../../utils/format';
8
8
  import { Ellipsis01Icon } from '../icons-v2-generated';
9
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
9
10
  import { ActionsMenuDropdown, type ActionsMenuGroup } from '../ui/actions-menu';
10
11
  import { tagVariants, type TagProps } from '../ui/tag';
11
12
 
@@ -158,16 +159,16 @@ export function MingoInfoCardSkeleton({ className }: { className?: string }) {
158
159
  return (
159
160
  <span
160
161
  className={cn(
161
- 'flex w-full animate-pulse items-center gap-[var(--spacing-system-s)] overflow-hidden rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-s)]',
162
+ 'flex w-full items-center gap-[var(--spacing-system-s)] overflow-hidden rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-s)]',
162
163
  className,
163
164
  )}
164
165
  >
165
- <span className="block size-10 shrink-0 rounded-md border border-ods-border bg-ods-bg" />
166
+ <UnifiedSkeleton as="span" className="block size-10 shrink-0 rounded-md border border-ods-border" />
166
167
  <span className="flex min-w-0 flex-1 flex-col justify-center gap-1.5">
167
- <span className="block h-4 w-1/2 rounded bg-ods-bg" />
168
- <span className="block h-3 w-3/4 rounded bg-ods-bg/60" />
168
+ <UnifiedSkeleton as="span" className="block h-4 w-1/2 rounded" />
169
+ <UnifiedSkeleton as="span" className="block h-3 w-3/4 rounded" />
169
170
  </span>
170
- <span className="block h-5 w-16 shrink-0 rounded bg-ods-bg/60" />
171
+ <UnifiedSkeleton as="span" className="block h-5 w-16 shrink-0 rounded" />
171
172
  </span>
172
173
  );
173
174
  }
@@ -1,7 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from '../../utils/cn';
4
- import { Skeleton } from '../ui/skeleton';
4
+ import { LoadingRegion } from '../loading/loading-region';
5
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
5
6
 
6
7
  export interface MingoOnboardingCardSkeletonProps {
7
8
  /** Title bar width — Tailwind width utility. Defaults to `w-32`. Vary
@@ -54,23 +55,23 @@ export function MingoOnboardingCardSkeleton({
54
55
  <div className="flex w-full flex-col gap-[var(--spacing-system-xxs)]">
55
56
  {/* Title row — icon + title bar + right-rail slash bar. */}
56
57
  <div className="flex w-full items-center gap-[var(--spacing-system-xxs)]">
57
- <Skeleton className="size-4 shrink-0 rounded-sm" />
58
- <Skeleton className={cn('h-3.5 rounded-sm', titleWidth)} />
58
+ <UnifiedSkeleton className="size-4 shrink-0 rounded-sm" />
59
+ <UnifiedSkeleton className={cn('h-3.5 rounded-sm', titleWidth)} />
59
60
  <span className="flex-1" />
60
- <Skeleton className={cn('h-3.5 shrink-0 rounded-sm', slashWidth)} />
61
+ <UnifiedSkeleton className={cn('h-3.5 shrink-0 rounded-sm', slashWidth)} />
61
62
  </div>
62
63
  {/* Description — 1 or 2 lines; second line is 70% so the
63
64
  * ragged edge mimics natural text wrapping. */}
64
65
  <div className="flex flex-col gap-[var(--spacing-system-xxs)]">
65
- <Skeleton className="h-3.5 w-full rounded-sm" />
66
- {descriptionLines === 2 ? <Skeleton className="h-3.5 w-[70%] rounded-sm" /> : null}
66
+ <UnifiedSkeleton className="h-3.5 w-full rounded-sm" />
67
+ {descriptionLines === 2 ? <UnifiedSkeleton className="h-3.5 w-[70%] rounded-sm" /> : null}
67
68
  </div>
68
69
  {/* Action chip row — `h-7` matches the live card's outline
69
70
  * chips so the skeleton sits at exactly the same height. */}
70
71
  {hasChips ? (
71
72
  <div className="mt-[var(--spacing-system-xs)] flex flex-wrap items-center gap-[var(--spacing-system-xxs)]">
72
73
  {chipWidths.map((w, i) => (
73
- <Skeleton key={i} className={cn('h-7 rounded-md', w)} />
74
+ <UnifiedSkeleton key={i} className={cn('h-7 rounded-md', w)} />
74
75
  ))}
75
76
  </div>
76
77
  ) : null}
@@ -80,6 +81,8 @@ export function MingoOnboardingCardSkeleton({
80
81
  }
81
82
 
82
83
  export interface MingoOnboardingListSkeletonProps {
84
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
85
+ region?: boolean;
83
86
  /** Row count. Defaults to 6 — fills the typical empty-state
84
87
  * viewport so the loader doesn't pop in shorter than the resolved
85
88
  * list. */
@@ -120,12 +123,11 @@ const ROW_VARIANTS: ReadonlyArray<{
120
123
  { titleWidth: 'w-24', slashWidth: 'w-16', descriptionLines: 2 },
121
124
  ];
122
125
 
123
- export function MingoOnboardingListSkeleton({ rows = 6, className }: MingoOnboardingListSkeletonProps) {
126
+ export function MingoOnboardingListSkeleton({ region = true, rows = 6, className }: MingoOnboardingListSkeletonProps) {
124
127
  return (
125
- <div
126
- role="status"
127
- aria-label="Loading slash commands"
128
- aria-busy="true"
128
+ <LoadingRegion
129
+ label="Loading slash commands"
130
+ announce={region}
129
131
  className={cn('overflow-hidden rounded-md border border-ods-border bg-ods-card', className)}
130
132
  >
131
133
  {Array.from({ length: rows }).map((_, i) => {
@@ -139,6 +141,6 @@ export function MingoOnboardingListSkeleton({ rows = 6, className }: MingoOnboar
139
141
  />
140
142
  );
141
143
  })}
142
- </div>
144
+ </LoadingRegion>
143
145
  );
144
146
  }
@@ -4,7 +4,7 @@ import React from 'react';
4
4
  import { cn } from '../../utils/cn';
5
5
  import { HoverCard, HoverCardContent, HoverCardTrigger } from '../hover-card';
6
6
  import { AnthropicLogoGreyIcon, GeminiLogoGreyIcon, OpenaiLogoGreyIcon } from '../icons-v2-generated';
7
- import { Skeleton } from '../ui/skeleton';
7
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
8
8
  import { useChatAppearance } from './chat-appearance-context';
9
9
  import type { ModelDisplayProps, ModelUsageBreakdown } from './types';
10
10
  import { CHAT_APPEARANCE } from './types/chat.types';
@@ -185,11 +185,11 @@ const ModelDisplaySkeleton = React.forwardRef<HTMLDivElement, ModelDisplaySkelet
185
185
  ({ className, showTokens = false, ...props }, ref) => (
186
186
  <div ref={ref} aria-hidden className={cn('flex items-center gap-1 text-h6', className)} {...props}>
187
187
  {/* provider icon */}
188
- <Skeleton className="h-5 w-4 shrink-0 rounded-sm" />
188
+ <UnifiedSkeleton className="h-5 w-4 shrink-0 rounded-sm" />
189
189
  {/* model name */}
190
- <Skeleton className="h-5 w-24" />
190
+ <UnifiedSkeleton className="h-5 w-24" />
191
191
  {/* "X / Y tokens used" tail — only when tokens are expected */}
192
- {showTokens && <Skeleton className="ml-auto h-3 w-32" />}
192
+ {showTokens && <UnifiedSkeleton className="ml-auto h-3 w-32" />}
193
193
  </div>
194
194
  ),
195
195
  );
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from '../../utils/cn';
4
- import { Skeleton } from '../ui/skeleton';
4
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
5
5
 
6
6
  export interface MspOrganizationCardSkeletonProps {
7
7
  /** Appended to the root element. */
@@ -22,12 +22,12 @@ export function MspOrganizationCardSkeleton({ className }: MspOrganizationCardSk
22
22
  className,
23
23
  )}
24
24
  >
25
- <Skeleton className="size-12 shrink-0 rounded-md" />
25
+ <UnifiedSkeleton className="size-12 shrink-0 rounded-md" />
26
26
  <div className="flex min-w-0 flex-1 flex-col justify-center gap-2 self-stretch">
27
- <Skeleton className="h-5 w-3/5 rounded-md" />
28
- <Skeleton className="h-4 w-2/5 rounded-md" />
27
+ <UnifiedSkeleton className="h-5 w-3/5 rounded-md" />
28
+ <UnifiedSkeleton className="h-4 w-2/5 rounded-md" />
29
29
  </div>
30
- <Skeleton className="size-12 shrink-0 rounded-md" />
30
+ <UnifiedSkeleton className="size-12 shrink-0 rounded-md" />
31
31
  </div>
32
32
  );
33
33
  }
@@ -1,8 +1,9 @@
1
1
  'use client';
2
2
 
3
- import { type CSSProperties, type ReactNode, isValidElement } from 'react';
3
+ import { type ReactNode, isValidElement } from 'react';
4
4
  import { cn } from '../../utils/cn';
5
5
  import { EntityIcon, type EntityIconValue } from '../icon-display';
6
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
6
7
  import { Tag } from '../ui/tag';
7
8
 
8
9
  // =============================================================================
@@ -201,18 +202,11 @@ export interface QuickActionChipSkeletonProps {
201
202
  className?: string;
202
203
  }
203
204
 
204
- /** Pulse bar inside the chip skeleton — the standard `ui/skeleton` treatment
205
- * (`animate-pulse bg-ods-border`), as a SPAN so it stays valid phrasing
206
- * content inside the Tag's label span. */
207
- function ChipSkelBar({ className, style }: { className?: string; style?: CSSProperties }) {
208
- return <span aria-hidden className={cn('animate-pulse rounded-md bg-ods-border', className)} style={style} />;
209
- }
210
-
211
205
  /**
212
206
  * Loading placeholder for {@link QuickActionChipButton} — renders the REAL
213
- * `Tag` (same height, padding, border, radius, icon box) with standard
214
- * skeleton pulse bars (identical animation + token as `ui/skeleton`) in the
215
- * icon/lozenge/label slots, so a skeleton chip is 1:1 with a loaded chip by
207
+ * `Tag` (same height, padding, border, radius, icon box) with `UnifiedSkeleton`
208
+ * bars (as spans, so they stay valid phrasing content inside the Tag's label
209
+ * span) in the icon/lozenge/label slots, so a skeleton chip is 1:1 with a loaded chip by
216
210
  * construction. Use anywhere quick actions stream in (chat empty states,
217
211
  * marketing walls, deck panels).
218
212
  */
@@ -231,12 +225,21 @@ export function QuickActionChipSkeleton({
231
225
  size={question ? 'sentence' : size}
232
226
  className={cn(question && 'max-w-full', className)}
233
227
  icon={
234
- icon && !question ? <ChipSkelBar className={size === 'large' ? 'block size-5' : 'block size-4'} /> : undefined
228
+ icon && !question ? (
229
+ <UnifiedSkeleton as="span" aria-hidden className={size === 'large' ? 'block size-5' : 'block size-4'} />
230
+ ) : undefined
235
231
  }
236
232
  label={
237
233
  <>
238
- {lozenge && <ChipSkelBar className="mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" />}
239
- <ChipSkelBar className="inline-block h-[0.9em] translate-y-[0.08em]" style={{ width: `${labelCh}ch` }} />
234
+ {lozenge && (
235
+ <UnifiedSkeleton as="span" aria-hidden className="mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" />
236
+ )}
237
+ <UnifiedSkeleton
238
+ as="span"
239
+ aria-hidden
240
+ className="inline-block h-[0.9em] translate-y-[0.08em]"
241
+ width={`${labelCh}ch`}
242
+ />
240
243
  </>
241
244
  }
242
245
  />
@@ -26,17 +26,16 @@ export const COMPACT_CARD_OUTER =
26
26
  export const COMPACT_CARD_OUTER_STATIC =
27
27
  'my-1.5 flex items-start gap-3 w-full p-2 rounded-lg border border-ods-border bg-ods-card no-underline cursor-default';
28
28
 
29
- /** Skeleton outer frame — same dimensions as loaded, plus `animate-pulse`. */
29
+ /** Skeleton outer frame: same dimensions as loaded. Static; its placeholders are `UnifiedSkeleton`s. */
30
30
  export const COMPACT_CARD_SKELETON_OUTER =
31
- 'my-1.5 flex w-full animate-pulse items-start gap-3 rounded-lg border border-ods-border bg-ods-card p-2';
31
+ 'my-1.5 flex w-full items-start gap-3 rounded-lg border border-ods-border bg-ods-card p-2';
32
32
 
33
33
  /** 56×56 image slot — for cards with a cover image. */
34
34
  export const COMPACT_CARD_IMAGE_SLOT =
35
35
  'relative block shrink-0 self-start w-14 h-14 aspect-square overflow-hidden rounded-md bg-ods-bg';
36
36
 
37
- /** 56×56 placeholder slot for skeletons. */
38
- export const COMPACT_CARD_SKELETON_IMAGE_SLOT =
39
- 'block h-14 w-14 aspect-square shrink-0 self-start rounded-md bg-ods-bg';
37
+ /** 56×56 placeholder slot for skeletons: the box of a `UnifiedSkeleton as="span"`, which draws the surface. */
38
+ export const COMPACT_CARD_SKELETON_IMAGE_SLOT = 'block h-14 w-14 aspect-square shrink-0 self-start rounded-md';
40
39
 
41
40
  /** 56×56 icon slot — for cards without a cover image. */
42
41
  export const COMPACT_CARD_ICON_SLOT =