@flamingo-stack/openframe-frontend-core 0.0.747 → 0.0.749

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 (550) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-4DT5YXTM.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-O6QQ44I3.cjs → chunk-45YRDD7W.cjs} +22 -19
  7. package/dist/{chunk-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
  8. package/dist/{chunk-4AWI6CCU.cjs → chunk-BN6NA5RM.cjs} +56 -53
  9. package/dist/{chunk-HNLI4OU5.cjs → chunk-C6LPOYDM.cjs} +24 -24
  10. package/dist/{chunk-4MGZYY6U.cjs → chunk-CLAJIQ7E.cjs} +26 -18
  11. package/dist/{chunk-WY4FKKCV.cjs → chunk-CXV7VBSI.cjs} +104 -118
  12. package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
  13. package/dist/{chunk-6RTHHU3S.cjs → chunk-E3KFEOFA.cjs} +9 -6
  14. package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
  15. package/dist/{chunk-TYW7NBP7.cjs → chunk-GOFEOCQN.cjs} +44 -27
  16. package/dist/{chunk-HTMHDEIV.cjs → chunk-HOEVD6EN.cjs} +4 -4
  17. package/dist/{chunk-2CEQGGRN.cjs → chunk-KRAQEZPB.cjs} +48 -40
  18. package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
  19. package/dist/{chunk-FCQCEQBY.cjs → chunk-LQT2ITMG.cjs} +6 -6
  20. package/dist/{chunk-PSIKUDUV.cjs → chunk-LVO7FALW.cjs} +5 -5
  21. package/dist/{chunk-L2RMTGOK.cjs → chunk-MGF3FUKD.cjs} +7 -7
  22. package/dist/{chunk-P7KTAXXE.cjs → chunk-OFO75R2O.cjs} +169 -175
  23. package/dist/{chunk-IJA3OZWF.cjs → chunk-OZLIKBKC.cjs} +24 -24
  24. package/dist/{chunk-B27QEHYR.cjs → chunk-P6F6PHVK.cjs} +9 -9
  25. package/dist/chunk-RB6BSE3O.cjs +21 -0
  26. package/dist/{chunk-R3FXJXSQ.cjs → chunk-SECT4H34.cjs} +1780 -2076
  27. package/dist/{chunk-LLAKQT3B.cjs → chunk-SGL47BS2.cjs} +12 -12
  28. package/dist/{chunk-PIQRV4EQ.cjs → chunk-SOPVUD2Y.cjs} +3 -3
  29. package/dist/chunk-UGCRLRCT.cjs +25 -0
  30. package/dist/{chunk-7Y5U3Y4S.cjs → chunk-V3UJ6NDR.cjs} +281 -462
  31. package/dist/{chunk-JPSMPXCH.cjs → chunk-VEVIMDNK.cjs} +137 -122
  32. package/dist/{chunk-C7NTL2GV.cjs → chunk-WZX26ODJ.cjs} +121 -121
  33. package/dist/{chunk-YIRX6C7V.cjs → chunk-XJ3J4UIS.cjs} +57 -22
  34. package/dist/{chunk-MA7T36JY.cjs → chunk-ZLF55RDR.cjs} +103 -98
  35. package/dist/{cloud-tenants-QJZIF2JS.cjs → cloud-tenants-2MYFHEYY.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/board/ticket-card-skeleton.js +8 -8
  143. package/dist/components/features/capability-explorer.d.ts +3 -1
  144. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  145. package/dist/components/features/capability-explorer.js +27 -24
  146. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +5 -2
  147. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -1
  148. package/dist/components/features/devices/device-selector/device-selector-skeleton.js +2 -2
  149. package/dist/components/features/devices/device-selector/device-selector.d.ts +1 -1
  150. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -1
  151. package/dist/components/features/devices/device-selector/device-selector.js +2 -0
  152. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +2 -0
  153. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -1
  154. package/dist/components/features/devices/devices-grid.d.ts +3 -1
  155. package/dist/components/features/devices/devices-grid.d.ts.map +1 -1
  156. package/dist/components/features/devices/devices-grid.js +3 -2
  157. package/dist/components/features/devices/devices-panel-view.d.ts +6 -1
  158. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
  159. package/dist/components/features/devices/devices-panel-view.js +4 -1
  160. package/dist/components/features/devices/devices-table-columns.d.ts +3 -1
  161. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
  162. package/dist/components/features/devices/devices-table-columns.js +2 -0
  163. package/dist/components/features/index.cjs +18 -14
  164. package/dist/components/features/logs/logs-table-view.d.ts +3 -1
  165. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -1
  166. package/dist/components/features/logs/logs-table-view.js +2 -2
  167. package/dist/components/features/model-token-rates.d.ts +4 -1
  168. package/dist/components/features/model-token-rates.d.ts.map +1 -1
  169. package/dist/components/features/model-token-rates.js +18 -23
  170. package/dist/components/features/notifications/index.d.ts +2 -2
  171. package/dist/components/features/notifications/index.d.ts.map +1 -1
  172. package/dist/components/features/notifications/index.js +2 -1
  173. package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
  174. package/dist/components/features/notifications/notification-drawer.js +9 -16
  175. package/dist/components/features/notifications/notification-tile.d.ts +14 -0
  176. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  177. package/dist/components/features/notifications/notification-tile.js +36 -1
  178. package/dist/components/features/policies/policy-summary-cards.js +2 -2
  179. package/dist/components/features/push-button-selector.d.ts.map +1 -1
  180. package/dist/components/features/push-button-selector.js +12 -7
  181. package/dist/components/features/remote-session/remote-desktop-view.d.ts +4 -1
  182. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -1
  183. package/dist/components/features/remote-session/remote-desktop-view.js +14 -10
  184. package/dist/components/features/waitlist-form.d.ts.map +1 -1
  185. package/dist/components/features/waitlist-form.js +6 -5
  186. package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
  187. package/dist/components/help-center-pages/download-apps-page.js +2 -1
  188. package/dist/components/help-center-pages/index.cjs +127 -119
  189. package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
  190. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  191. package/dist/components/help-center-pages/trust-center-page.js +3 -2
  192. package/dist/components/help-center-pages/trust-center-sections.d.ts +4 -1
  193. package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
  194. package/dist/components/help-center-pages/trust-center-sections.js +5 -2
  195. package/dist/components/index.cjs +70 -112
  196. package/dist/components/index.d.ts +0 -2
  197. package/dist/components/index.d.ts.map +1 -1
  198. package/dist/components/index.js +0 -2
  199. package/dist/components/layout/title-block.d.ts.map +1 -1
  200. package/dist/components/layout/title-block.js +18 -11
  201. package/dist/components/loading/card-skeleton.d.ts +6 -3
  202. package/dist/components/loading/card-skeleton.d.ts.map +1 -1
  203. package/dist/components/loading/card-skeleton.js +7 -27
  204. package/dist/components/loading/category-card-skeleton.d.ts.map +1 -1
  205. package/dist/components/loading/category-card-skeleton.js +2 -4
  206. package/dist/components/loading/category-vendor-selector-skeleton.d.ts +3 -1
  207. package/dist/components/loading/category-vendor-selector-skeleton.d.ts.map +1 -1
  208. package/dist/components/loading/category-vendor-selector-skeleton.js +9 -4
  209. package/dist/components/loading/device-card-skeleton.d.ts +18 -9
  210. package/dist/components/loading/device-card-skeleton.d.ts.map +1 -1
  211. package/dist/components/loading/device-card-skeleton.js +30 -21
  212. package/dist/components/loading/index.d.ts +3 -4
  213. package/dist/components/loading/index.d.ts.map +1 -1
  214. package/dist/components/loading/index.js +6 -29
  215. package/dist/components/loading/loading-region.d.ts +33 -0
  216. package/dist/components/loading/loading-region.d.ts.map +1 -0
  217. package/dist/components/loading/loading-region.js +22 -0
  218. package/dist/components/loading/margin-report-skeleton.d.ts +3 -1
  219. package/dist/components/loading/margin-report-skeleton.d.ts.map +1 -1
  220. package/dist/components/loading/margin-report-skeleton.js +70 -61
  221. package/dist/components/loading/msp-profile-form-skeleton.d.ts +3 -1
  222. package/dist/components/loading/msp-profile-form-skeleton.d.ts.map +1 -1
  223. package/dist/components/loading/msp-profile-form-skeleton.js +6 -5
  224. package/dist/components/loading/organization-card-skeleton.d.ts +3 -1
  225. package/dist/components/loading/organization-card-skeleton.d.ts.map +1 -1
  226. package/dist/components/loading/organization-card-skeleton.js +5 -5
  227. package/dist/components/loading/organization-icon-skeleton.d.ts.map +1 -1
  228. package/dist/components/loading/organization-icon-skeleton.js +2 -1
  229. package/dist/components/loading/page-layout-skeleton.d.ts +21 -6
  230. package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
  231. package/dist/components/loading/page-layout-skeleton.js +283 -266
  232. package/dist/components/loading/settings-form-skeleton.d.ts +17 -0
  233. package/dist/components/loading/settings-form-skeleton.d.ts.map +1 -0
  234. package/dist/components/loading/settings-form-skeleton.js +42 -0
  235. package/dist/components/loading/unified-skeleton.d.ts +11 -4
  236. package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
  237. package/dist/components/loading/unified-skeleton.js +14 -89
  238. package/dist/components/loading/wizard-layout-skeleton.d.ts +3 -1
  239. package/dist/components/loading/wizard-layout-skeleton.d.ts.map +1 -1
  240. package/dist/components/loading/wizard-layout-skeleton.js +3 -2
  241. package/dist/components/media-carousel.d.ts.map +1 -1
  242. package/dist/components/media-carousel.js +2 -1
  243. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  244. package/dist/components/meeting-scheduler/booking-form.js +14 -8
  245. package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
  246. package/dist/components/meeting-scheduler/context-panel.js +8 -7
  247. package/dist/components/meeting-scheduler/directory.d.ts.map +1 -1
  248. package/dist/components/meeting-scheduler/directory.js +10 -9
  249. package/dist/components/meeting-scheduler/index.cjs +85 -75
  250. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  251. package/dist/components/meeting-scheduler/index.js +3 -2
  252. package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -1
  253. package/dist/components/meeting-scheduler/modal-header.js +8 -7
  254. package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
  255. package/dist/components/meeting-scheduler/slot-picker.js +4 -3
  256. package/dist/components/navigation/app-header.d.ts.map +1 -1
  257. package/dist/components/navigation/app-header.js +8 -7
  258. package/dist/components/navigation/index.cjs +19 -17
  259. package/dist/components/navigation/multi-level-navigation.d.ts.map +1 -1
  260. package/dist/components/navigation/multi-level-navigation.js +3 -2
  261. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  262. package/dist/components/navigation/navigation-sidebar-item.js +3 -2
  263. package/dist/components/onboarding-guides/index.cjs +19 -17
  264. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts +4 -1
  265. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts.map +1 -1
  266. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.js +12 -8
  267. package/dist/components/product-demo/index.cjs +16 -15
  268. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  269. package/dist/components/product-demo/product-screen.js +4 -4
  270. package/dist/components/profile/ProfileLoadingSkeleton.d.ts +3 -1
  271. package/dist/components/profile/ProfileLoadingSkeleton.d.ts.map +1 -1
  272. package/dist/components/profile/ProfileLoadingSkeleton.js +10 -8
  273. package/dist/components/related-content/index.cjs +7 -5
  274. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  275. package/dist/components/related-content/related-content-section.js +3 -2
  276. package/dist/components/shared/delivery/delivery-table.d.ts.map +1 -1
  277. package/dist/components/shared/delivery/delivery-table.js +8 -7
  278. package/dist/components/shared/detail-page-skeleton.d.ts +5 -1
  279. package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
  280. package/dist/components/shared/detail-page-skeleton.js +18 -14
  281. package/dist/components/shared/dev-section/dev-card-row.d.ts +3 -1
  282. package/dist/components/shared/dev-section/dev-card-row.d.ts.map +1 -1
  283. package/dist/components/shared/dev-section/dev-card-row.js +22 -9
  284. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  285. package/dist/components/shared/legal-document/legal-document-page.js +8 -7
  286. package/dist/components/shared/onboarding/onboarding-step-card.d.ts.map +1 -1
  287. package/dist/components/shared/onboarding/onboarding-step-card.js +3 -2
  288. package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts.map +1 -1
  289. package/dist/components/shared/onboarding/onboarding-walkthrough.js +2 -1
  290. package/dist/components/shared/product-release/index.d.ts +0 -1
  291. package/dist/components/shared/product-release/index.d.ts.map +1 -1
  292. package/dist/components/shared/product-release/index.js +1 -3
  293. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
  294. package/dist/components/shared/product-release/product-release-card-skeleton.js +21 -20
  295. package/dist/components/shared/product-release/product-releases-view.d.ts.map +1 -1
  296. package/dist/components/shared/product-release/product-releases-view.js +2 -1
  297. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts +6 -13
  298. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts.map +1 -1
  299. package/dist/components/shared/roadmap/roadmap-grid-skeleton.js +13 -25
  300. package/dist/components/tickets/help-center-create-form.d.ts +4 -1
  301. package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
  302. package/dist/components/tickets/help-center-create-form.js +38 -26
  303. package/dist/components/tickets/index.cjs +22 -20
  304. package/dist/components/tickets/ticket-center.d.ts.map +1 -1
  305. package/dist/components/tickets/ticket-center.js +13 -10
  306. package/dist/components/tickets/ticket-detail-drawer.d.ts.map +1 -1
  307. package/dist/components/tickets/ticket-detail-drawer.js +2 -1
  308. package/dist/components/ui/admin-form-drawer.d.ts.map +1 -1
  309. package/dist/components/ui/admin-form-drawer.js +6 -8
  310. package/dist/components/ui/admin-form-modal.d.ts.map +1 -1
  311. package/dist/components/ui/admin-form-modal.js +12 -11
  312. package/dist/components/ui/analyzing-state.d.ts +1 -1
  313. package/dist/components/ui/analyzing-state.d.ts.map +1 -1
  314. package/dist/components/ui/analyzing-state.js +4 -10
  315. package/dist/components/ui/content-loader.d.ts +5 -1
  316. package/dist/components/ui/content-loader.d.ts.map +1 -1
  317. package/dist/components/ui/content-loader.js +27 -23
  318. package/dist/components/ui/dashboard-info-card.d.ts +17 -3
  319. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  320. package/dist/components/ui/dashboard-info-card.js +30 -10
  321. package/dist/components/ui/data-attribution.d.ts +6 -0
  322. package/dist/components/ui/data-attribution.d.ts.map +1 -1
  323. package/dist/components/ui/data-attribution.js +12 -1
  324. package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
  325. package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
  326. package/dist/components/ui/data-table/data-table-body.js +3 -1
  327. package/dist/components/ui/data-table/data-table-infinite-footer.d.ts.map +1 -1
  328. package/dist/components/ui/data-table/data-table-infinite-footer.js +3 -1
  329. package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
  330. package/dist/components/ui/data-table/data-table-skeleton.js +7 -5
  331. package/dist/components/ui/feature-card.d.ts.map +1 -1
  332. package/dist/components/ui/feature-card.js +7 -9
  333. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts +3 -1
  334. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts.map +1 -1
  335. package/dist/components/ui/file-manager/file-manager-skeleton.js +27 -21
  336. package/dist/components/ui/file-manager/file-manager-table.js +10 -10
  337. package/dist/components/ui/file-manager/index.cjs +45 -36
  338. package/dist/components/ui/filter-modal.d.ts.map +1 -1
  339. package/dist/components/ui/filter-modal.js +5 -5
  340. package/dist/components/ui/filter-pill-row.d.ts +10 -0
  341. package/dist/components/ui/filter-pill-row.d.ts.map +1 -1
  342. package/dist/components/ui/filter-pill-row.js +8 -1
  343. package/dist/components/ui/index.cjs +19 -28
  344. package/dist/components/ui/index.d.ts +0 -1
  345. package/dist/components/ui/index.d.ts.map +1 -1
  346. package/dist/components/ui/index.js +0 -1
  347. package/dist/components/ui/layout-hold.d.ts +5 -4
  348. package/dist/components/ui/layout-hold.d.ts.map +1 -1
  349. package/dist/components/ui/layout-hold.js +20 -29
  350. package/dist/components/ui/markdown/base-components.js +1 -1
  351. package/dist/components/ui/page-actions.d.ts.map +1 -1
  352. package/dist/components/ui/page-actions.js +6 -8
  353. package/dist/components/ui/photo-wall.d.ts.map +1 -1
  354. package/dist/components/ui/photo-wall.js +11 -18
  355. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts +1 -1
  356. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts.map +1 -1
  357. package/dist/components/ui/query-report-table/query-report-table-skeleton.js +28 -18
  358. package/dist/components/ui/query-report-table/query-report-table.d.ts +1 -1
  359. package/dist/components/ui/query-report-table/query-report-table.d.ts.map +1 -1
  360. package/dist/components/ui/query-report-table/query-report-table.js +3 -1
  361. package/dist/components/ui/query-report-table/types.d.ts +4 -0
  362. package/dist/components/ui/query-report-table/types.d.ts.map +1 -1
  363. package/dist/components/ui/skeleton-surface.d.ts +7 -0
  364. package/dist/components/ui/skeleton-surface.d.ts.map +1 -0
  365. package/dist/components/ui/skeleton-surface.js +5 -0
  366. package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
  367. package/dist/components/ui/table/table-skeleton.js +11 -13
  368. package/dist/components/ui/test-run.d.ts +6 -4
  369. package/dist/components/ui/test-run.d.ts.map +1 -1
  370. package/dist/components/ui/test-run.js +9 -5
  371. package/dist/{devices-V55KQCAL.cjs → devices-FVXAGKVX.cjs} +17 -15
  372. package/dist/{embeddable-chat-5CDR4I6E.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
  373. package/dist/index.cjs +24 -31
  374. package/dist/{knowledge-S3VGDRKR.cjs → knowledge-ZL3ZHBSL.cjs} +17 -15
  375. package/dist/{logs-K5E2BGZE.cjs → logs-KQCWDIOB.cjs} +24 -22
  376. package/dist/{policies-BWU4FRFE.cjs → policies-ARDCZ3CT.cjs} +20 -18
  377. package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
  378. package/dist/{scripts-25UPGXZU.cjs → scripts-ZAMVWCY4.cjs} +23 -21
  379. package/dist/{software-update-F6UC7ULZ.cjs → software-update-6F7BIYS3.cjs} +20 -18
  380. package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
  381. package/dist/utils/index.cjs +49 -48
  382. package/dist/utils/markdown-to-plain.d.ts.map +1 -1
  383. package/dist/utils/markdown-to-plain.js +12 -7
  384. package/package.json +7 -2
  385. package/src/components/categories-cart.tsx +2 -4
  386. package/src/components/chat/chat-container.tsx +4 -4
  387. package/src/components/chat/chat-context-picker.tsx +3 -2
  388. package/src/components/chat/chat-message-row.tsx +6 -7
  389. package/src/components/chat/chat-message-skeleton.tsx +11 -6
  390. package/src/components/chat/chat-sidebar-skeleton.tsx +4 -3
  391. package/src/components/chat/chat-top-navigation.tsx +4 -4
  392. package/src/components/chat/context-items-list.tsx +9 -3
  393. package/src/components/chat/entity-cards/admin-content-card-grid.tsx +65 -18
  394. package/src/components/chat/entity-cards/admin-content-card.tsx +2 -1
  395. package/src/components/chat/entity-cards/blog-card.tsx +13 -12
  396. package/src/components/chat/entity-cards/campaign-card-admin.tsx +5 -4
  397. package/src/components/chat/entity-cards/case-study-card.tsx +19 -18
  398. package/src/components/chat/entity-cards/chat-ticket-item.tsx +5 -5
  399. package/src/components/chat/entity-cards/customer-interview-card.tsx +15 -14
  400. package/src/components/chat/entity-cards/data-room-doc-card.tsx +7 -6
  401. package/src/components/chat/entity-cards/design-doc-card.tsx +0 -2
  402. package/src/components/chat/entity-cards/generic-entity-card.tsx +8 -7
  403. package/src/components/chat/entity-cards/github-activity-card.tsx +11 -10
  404. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +16 -15
  405. package/src/components/chat/entity-cards/index.ts +2 -0
  406. package/src/components/chat/entity-cards/investor-update-card.tsx +12 -11
  407. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +21 -22
  408. package/src/components/chat/entity-cards/program-card.tsx +29 -28
  409. package/src/components/chat/entity-cards/roadmap-card.tsx +22 -23
  410. package/src/components/chat/entity-cards/slack-message-card.tsx +12 -11
  411. package/src/components/chat/guide-welcome.tsx +2 -2
  412. package/src/components/chat/mingo-archive-list.tsx +2 -1
  413. package/src/components/chat/mingo-chat-history.tsx +18 -9
  414. package/src/components/chat/mingo-chat-rail.tsx +2 -1
  415. package/src/components/chat/mingo-info-card.tsx +6 -5
  416. package/src/components/chat/mingo-onboarding-card-skeleton.tsx +15 -13
  417. package/src/components/chat/model-display.tsx +4 -4
  418. package/src/components/chat/msp-organization-card-skeleton.tsx +5 -5
  419. package/src/components/chat/quick-action-chip.tsx +17 -14
  420. package/src/components/chat/utils/compact-card-classes.ts +4 -5
  421. package/src/components/content-loading-container.tsx +7 -8
  422. package/src/components/docs/doc-viewer.tsx +3 -2
  423. package/src/components/docs/skeletons.tsx +64 -63
  424. package/src/components/embeds/embed-iframe.tsx +16 -9
  425. package/src/components/embeds/index.ts +2 -2
  426. package/src/components/embeds/linkedin-embed-client.tsx +7 -6
  427. package/src/components/embeds/markdown-image.tsx +5 -3
  428. package/src/components/embeds/og-link-preview.tsx +162 -79
  429. package/src/components/embeds/reddit-embed-client.tsx +10 -9
  430. package/src/components/embeds/twitter-embed-client.tsx +10 -9
  431. package/src/components/faq/faq-section.tsx +13 -6
  432. package/src/components/features/board/ticket-card-skeleton.tsx +8 -8
  433. package/src/components/features/capability-explorer.tsx +61 -30
  434. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +9 -3
  435. package/src/components/features/devices/device-selector/device-selector.tsx +2 -0
  436. package/src/components/features/devices/device-selector/device-selector.types.ts +2 -0
  437. package/src/components/features/devices/devices-grid.tsx +4 -1
  438. package/src/components/features/devices/devices-panel-view.tsx +9 -1
  439. package/src/components/features/devices/devices-table-columns.tsx +4 -0
  440. package/src/components/features/logs/logs-table-view.tsx +4 -2
  441. package/src/components/features/model-token-rates.tsx +27 -24
  442. package/src/components/features/notifications/index.ts +2 -2
  443. package/src/components/features/notifications/notification-drawer.tsx +7 -10
  444. package/src/components/features/notifications/notification-tile.tsx +57 -0
  445. package/src/components/features/policies/policy-summary-cards.tsx +2 -2
  446. package/src/components/features/push-button-selector.tsx +20 -11
  447. package/src/components/features/remote-session/remote-desktop-view.tsx +26 -16
  448. package/src/components/features/waitlist-form.tsx +6 -5
  449. package/src/components/help-center-pages/download-apps-page.tsx +3 -2
  450. package/src/components/help-center-pages/trust-center-page.tsx +6 -2
  451. package/src/components/help-center-pages/trust-center-sections.tsx +9 -3
  452. package/src/components/index.ts +0 -2
  453. package/src/components/layout/title-block.tsx +17 -15
  454. package/src/components/loading/card-skeleton.tsx +14 -46
  455. package/src/components/loading/category-card-skeleton.tsx +2 -4
  456. package/src/components/loading/category-vendor-selector-skeleton.tsx +12 -5
  457. package/src/components/loading/device-card-skeleton.tsx +58 -51
  458. package/src/components/loading/index.ts +5 -19
  459. package/src/components/loading/loading-region.tsx +60 -0
  460. package/src/components/loading/margin-report-skeleton.tsx +45 -34
  461. package/src/components/loading/msp-profile-form-skeleton.tsx +9 -6
  462. package/src/components/loading/organization-card-skeleton.tsx +8 -6
  463. package/src/components/loading/organization-icon-skeleton.tsx +3 -2
  464. package/src/components/loading/page-layout-skeleton.tsx +162 -133
  465. package/src/components/loading/settings-form-skeleton.tsx +52 -0
  466. package/src/components/loading/unified-skeleton.tsx +26 -71
  467. package/src/components/loading/wizard-layout-skeleton.tsx +6 -3
  468. package/src/components/media-carousel.tsx +2 -1
  469. package/src/components/meeting-scheduler/booking-form.tsx +10 -7
  470. package/src/components/meeting-scheduler/context-panel.tsx +8 -7
  471. package/src/components/meeting-scheduler/directory.tsx +10 -9
  472. package/src/components/meeting-scheduler/index.tsx +5 -4
  473. package/src/components/meeting-scheduler/modal-header.tsx +8 -7
  474. package/src/components/meeting-scheduler/slot-picker.tsx +4 -3
  475. package/src/components/navigation/app-header.tsx +8 -7
  476. package/src/components/navigation/multi-level-navigation.tsx +3 -2
  477. package/src/components/navigation/navigation-sidebar-item.tsx +3 -2
  478. package/src/components/onboarding-guides/onboarding-guides-catalog-skeleton.tsx +17 -10
  479. package/src/components/product-demo/product-screen.tsx +4 -4
  480. package/src/components/profile/ProfileLoadingSkeleton.tsx +13 -9
  481. package/src/components/related-content/related-content-section.tsx +5 -4
  482. package/src/components/shared/delivery/delivery-table.tsx +8 -7
  483. package/src/components/shared/detail-page-skeleton.tsx +22 -14
  484. package/src/components/shared/dev-section/dev-card-row.tsx +23 -10
  485. package/src/components/shared/legal-document/legal-document-page.tsx +8 -7
  486. package/src/components/shared/onboarding/onboarding-step-card.tsx +3 -2
  487. package/src/components/shared/onboarding/onboarding-walkthrough.tsx +2 -1
  488. package/src/components/shared/product-release/index.ts +0 -1
  489. package/src/components/shared/product-release/product-release-card-skeleton.tsx +23 -25
  490. package/src/components/shared/product-release/product-releases-view.tsx +3 -2
  491. package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +14 -56
  492. package/src/components/tickets/help-center-create-form.tsx +23 -12
  493. package/src/components/tickets/ticket-center.tsx +17 -11
  494. package/src/components/tickets/ticket-detail-drawer.tsx +3 -2
  495. package/src/components/ui/admin-form-drawer.tsx +7 -7
  496. package/src/components/ui/admin-form-modal.tsx +9 -8
  497. package/src/components/ui/analyzing-state.tsx +5 -8
  498. package/src/components/ui/content-loader.tsx +31 -23
  499. package/src/components/ui/dashboard-info-card.tsx +81 -20
  500. package/src/components/ui/data-attribution.tsx +18 -0
  501. package/src/components/ui/data-table/data-table-body.tsx +9 -2
  502. package/src/components/ui/data-table/data-table-infinite-footer.tsx +4 -2
  503. package/src/components/ui/data-table/data-table-skeleton.tsx +8 -5
  504. package/src/components/ui/feature-card.tsx +27 -11
  505. package/src/components/ui/file-manager/file-manager-skeleton.tsx +30 -22
  506. package/src/components/ui/file-manager/file-manager-table.tsx +10 -10
  507. package/src/components/ui/filter-modal.tsx +5 -5
  508. package/src/components/ui/filter-pill-row.tsx +19 -0
  509. package/src/components/ui/index.ts +0 -1
  510. package/src/components/ui/layout-hold.tsx +30 -38
  511. package/src/components/ui/markdown/base-components.tsx +1 -1
  512. package/src/components/ui/page-actions.tsx +10 -8
  513. package/src/components/ui/photo-wall.tsx +4 -7
  514. package/src/components/ui/query-report-table/query-report-table-skeleton.tsx +13 -7
  515. package/src/components/ui/query-report-table/query-report-table.tsx +2 -0
  516. package/src/components/ui/query-report-table/types.ts +4 -0
  517. package/src/components/ui/skeleton-surface.ts +6 -0
  518. package/src/components/ui/table/table-skeleton.tsx +11 -13
  519. package/src/components/ui/test-run.tsx +30 -22
  520. package/src/styles/ods-colors.css +2 -2
  521. package/src/utils/markdown-to-plain.ts +25 -16
  522. package/dist/chunk-5M5C6UV4.cjs +0 -125
  523. package/dist/components/dynamic-skeleton.d.ts +0 -108
  524. package/dist/components/dynamic-skeleton.d.ts.map +0 -1
  525. package/dist/components/dynamic-skeleton.js +0 -221
  526. package/dist/components/loading/content-skeleton.d.ts +0 -73
  527. package/dist/components/loading/content-skeleton.d.ts.map +0 -1
  528. package/dist/components/loading/content-skeleton.js +0 -217
  529. package/dist/components/loading/users-grid-skeleton.d.ts +0 -7
  530. package/dist/components/loading/users-grid-skeleton.d.ts.map +0 -1
  531. package/dist/components/loading/users-grid-skeleton.js +0 -13
  532. package/dist/components/shared/product-release/release-detail-skeleton.d.ts +0 -2
  533. package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +0 -1
  534. package/dist/components/shared/product-release/release-detail-skeleton.js +0 -9
  535. package/dist/components/skeleton.d.ts +0 -4
  536. package/dist/components/skeleton.d.ts.map +0 -1
  537. package/dist/components/skeleton.js +0 -9
  538. package/dist/components/ui/skeleton.d.ts +0 -44
  539. package/dist/components/ui/skeleton.d.ts.map +0 -1
  540. package/dist/components/ui/skeleton.js +0 -103
  541. package/dist/components/vendor-page-skeleton.d.ts +0 -2
  542. package/dist/components/vendor-page-skeleton.d.ts.map +0 -1
  543. package/dist/components/vendor-page-skeleton.js +0 -9
  544. package/src/components/dynamic-skeleton.tsx +0 -365
  545. package/src/components/loading/content-skeleton.tsx +0 -374
  546. package/src/components/loading/users-grid-skeleton.tsx +0 -36
  547. package/src/components/shared/product-release/release-detail-skeleton.tsx +0 -7
  548. package/src/components/skeleton.tsx +0 -8
  549. package/src/components/ui/skeleton.tsx +0 -173
  550. package/src/components/vendor-page-skeleton.tsx +0 -7
@@ -2,6 +2,8 @@
2
2
 
3
3
  import type { ComponentType, ReactNode } from 'react';
4
4
  import { cn } from '../../../utils/cn';
5
+ import { LoadingRegion } from '../../loading/loading-region';
6
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
5
7
 
6
8
  /** THE admin card grid: columns and gap shared by the live grid and its skeleton. */
7
9
  export const ADMIN_CONTENT_CARD_GRID_CLASS =
@@ -29,26 +31,26 @@ export function AdminContentCardSkeleton({
29
31
  return (
30
32
  <div
31
33
  className={cn(
32
- 'flex h-full animate-pulse flex-col overflow-hidden rounded-2xl border border-ods-border bg-transparent',
34
+ 'flex h-full flex-col overflow-hidden rounded-2xl border border-ods-border bg-transparent',
33
35
  className,
34
36
  )}
35
37
  >
36
- <div className="aspect-[3/2] w-full shrink-0 bg-ods-border/20" />
38
+ <UnifiedSkeleton className="aspect-[3/2] w-full shrink-0" />
37
39
  <div className="flex flex-1 flex-col gap-[var(--spacing-system-sf)] p-5">
38
- <div className="h-[2lh] w-full rounded bg-ods-border text-h3" />
39
- {subtitleRow && <div className="h-[1lh] w-1/2 rounded bg-ods-border text-h6" />}
40
- <div className="h-[2lh] w-full rounded bg-ods-border text-h6" />
40
+ <UnifiedSkeleton className="h-[2lh] w-full rounded text-h3" />
41
+ {subtitleRow && <UnifiedSkeleton className="h-[1lh] w-1/2 rounded text-h6" />}
42
+ <UnifiedSkeleton className="h-[2lh] w-full rounded text-h6" />
41
43
  <div className="flex h-7 items-center gap-[var(--spacing-system-xsf)]">
42
- <div className="h-5 w-20 rounded-full bg-ods-border" />
43
- <div className="h-5 w-24 rounded-full bg-ods-border" />
44
+ <UnifiedSkeleton className="h-5 w-20 rounded-full" />
45
+ <UnifiedSkeleton className="h-5 w-24 rounded-full" />
44
46
  </div>
45
- <div className="h-[1lh] w-32 rounded bg-ods-border text-h6" />
47
+ <UnifiedSkeleton className="h-[1lh] w-32 rounded text-h6" />
46
48
  {actions && (
47
49
  <div className="mt-auto flex items-center justify-between border-t border-ods-border pt-[var(--spacing-system-sf)]">
48
- <div className="h-10 w-24 rounded bg-ods-border" />
50
+ <UnifiedSkeleton className="h-10 w-24 rounded" />
49
51
  <div className="flex gap-[var(--spacing-system-xsf)]">
50
- <div className="h-10 w-20 rounded bg-ods-border" />
51
- <div className="h-10 w-20 rounded bg-ods-border" />
52
+ <UnifiedSkeleton className="h-10 w-20 rounded" />
53
+ <UnifiedSkeleton className="h-10 w-20 rounded" />
52
54
  </div>
53
55
  </div>
54
56
  )}
@@ -57,6 +59,44 @@ export function AdminContentCardSkeleton({
57
59
  );
58
60
  }
59
61
 
62
+ export interface AdminContentCardGridSkeletonProps {
63
+ /** How many placeholder cards: one page. */
64
+ count?: number;
65
+ /** The placeholder card. Default `AdminContentCardSkeleton`. */
66
+ Skeleton?: ComponentType<{ className?: string }>;
67
+ className?: string;
68
+ /** What is loading, read once by a screen reader. Default "Loading". */
69
+ label?: string;
70
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
71
+ region?: boolean;
72
+ }
73
+
74
+ /**
75
+ * The grid's loading state on its own: one page of placeholder cards in the
76
+ * grid's columns. `AdminContentCardGrid` draws exactly this while it loads; a
77
+ * page that has no grid yet (a Suspense fallback) draws it directly.
78
+ */
79
+ export function AdminContentCardGridSkeleton({
80
+ count = 12,
81
+ Skeleton = AdminContentCardSkeleton,
82
+ className,
83
+ label = 'Loading',
84
+ region = true,
85
+ }: AdminContentCardGridSkeletonProps) {
86
+ return (
87
+ <LoadingRegion
88
+ label={label}
89
+ announce={region}
90
+ className={cn(ADMIN_CONTENT_CARD_GRID_CLASS, className)}
91
+ data-state="loading"
92
+ >
93
+ {Array.from({ length: count }, (_, i) => (
94
+ <Skeleton key={i} />
95
+ ))}
96
+ </LoadingRegion>
97
+ );
98
+ }
99
+
60
100
  export interface AdminContentCardGridProps<T> {
61
101
  items: readonly T[];
62
102
  /** One page of cards: the loading skeleton count and the reserved slot count. */
@@ -73,6 +113,10 @@ export interface AdminContentCardGridProps<T> {
73
113
  */
74
114
  Skeleton?: ComponentType<{ className?: string }>;
75
115
  className?: string;
116
+ /** What is loading, read once by a screen reader while `loading`. Default "Loading". */
117
+ loadingLabel?: string;
118
+ /** The loading state announces itself. `false` inside another loading region. Default `true`. */
119
+ loadingRegion?: boolean;
76
120
  }
77
121
 
78
122
  /**
@@ -97,18 +141,21 @@ export function AdminContentCardGrid<T>({
97
141
  empty,
98
142
  Skeleton = AdminContentCardSkeleton,
99
143
  className,
144
+ loadingLabel,
145
+ loadingRegion,
100
146
  }: AdminContentCardGridProps<T>) {
101
147
  const gridClass = cn(ADMIN_CONTENT_CARD_GRID_CLASS, className);
102
148
 
103
- if (loading) {
149
+ if (loading)
104
150
  return (
105
- <div className={gridClass} data-state="loading">
106
- {Array.from({ length: pageSize }, (_, i) => (
107
- <Skeleton key={i} />
108
- ))}
109
- </div>
151
+ <AdminContentCardGridSkeleton
152
+ count={pageSize}
153
+ Skeleton={Skeleton}
154
+ className={className}
155
+ label={loadingLabel}
156
+ region={loadingRegion}
157
+ />
110
158
  );
111
- }
112
159
 
113
160
  const slots = Array.from({ length: Math.max(0, pageSize - items.length) }, (_, i) => (
114
161
  <Skeleton key={`slot-${i}`} className="invisible" />
@@ -6,6 +6,7 @@ import Image from '../../../embed-shims/next-image';
6
6
  import { useImageEdgeColor } from '../../../hooks/ui/use-image-edge-color';
7
7
  import { cn } from '../../../utils/cn';
8
8
  import { PlatformBadge } from '../../features/platform-badge';
9
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
9
10
  import { CONTENT_CARD_FRAME_CLASS } from './content-card-frame';
10
11
 
11
12
  interface PlatformInfo {
@@ -84,7 +85,7 @@ export function AdminContentCard({
84
85
  <div className="relative aspect-[3/2] w-full shrink-0 overflow-hidden" style={{ backgroundColor: imageBgColor }}>
85
86
  {displayUrl ? (
86
87
  <>
87
- {!imageLoaded && <div className="absolute inset-0 animate-pulse bg-ods-border/20" />}
88
+ {!imageLoaded && <UnifiedSkeleton className="absolute inset-0 h-full rounded-none" />}
88
89
  <Image
89
90
  src={displayUrl}
90
91
  alt={title}
@@ -24,6 +24,7 @@ import Link from '../../../embed-shims/next-link';
24
24
  import type { BlogPostSummary } from '../../../types/blog';
25
25
  import { cn } from '../../../utils/cn';
26
26
  import { formatDateWithTimezone } from '../../../utils/format';
27
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
27
28
  import { StatusBadge } from '../../ui/status-badge';
28
29
  import {
29
30
  COMPACT_CARD_IMAGE_SLOT,
@@ -76,32 +77,32 @@ export function BlogCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm'
76
77
  if (size === 'sm') {
77
78
  return (
78
79
  <span className={COMPACT_CARD_SKELETON_OUTER}>
79
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
80
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
80
81
  <span className={COMPACT_CARD_TEXT_COL}>
81
82
  <span className={COMPACT_CARD_TITLE_ROW}>
82
- <span className="h-3.5 w-3/5 rounded bg-ods-bg" />
83
+ <UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
83
84
  </span>
84
85
  <span className={COMPACT_CARD_META_ROW_BOX}>
85
- <span className="h-3 w-2/5 rounded bg-ods-bg/70" />
86
+ <UnifiedSkeleton as="span" className="h-3 w-2/5 rounded" />
86
87
  </span>
87
88
  <span className={COMPACT_CARD_META_ROW_BOX}>
88
- <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
89
+ <UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
89
90
  </span>
90
91
  </span>
91
92
  </span>
92
93
  );
93
94
  }
94
95
  return (
95
- <article className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'group flex h-full animate-pulse flex-col')}>
96
- <div className="aspect-[1200/630] bg-ods-border" />
96
+ <article className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'group flex h-full flex-col')}>
97
+ <UnifiedSkeleton className="aspect-[1200/630]" />
97
98
  <div className="flex flex-grow flex-col space-y-3 p-4">
98
- <div className="h-5 w-3/4 rounded bg-ods-border" />
99
- <div className="h-5 w-1/2 rounded bg-ods-border" />
100
- <div className="h-3 w-full rounded bg-ods-border" />
101
- <div className="h-3 w-4/5 rounded bg-ods-border" />
99
+ <UnifiedSkeleton className="h-5 w-3/4 rounded" />
100
+ <UnifiedSkeleton className="h-5 w-1/2 rounded" />
101
+ <UnifiedSkeleton className="h-3 w-full rounded" />
102
+ <UnifiedSkeleton className="h-3 w-4/5 rounded" />
102
103
  <div className="mt-auto flex items-center gap-2">
103
- <div className="h-8 w-8 rounded-full bg-ods-border" />
104
- <div className="h-3 w-24 rounded bg-ods-border" />
104
+ <UnifiedSkeleton className="h-8 w-8 rounded-full" />
105
+ <UnifiedSkeleton className="h-3 w-24 rounded" />
105
106
  </div>
106
107
  </div>
107
108
  </article>
@@ -13,6 +13,7 @@ import { Megaphone } from 'lucide-react';
13
13
  import type React from 'react';
14
14
  import Link from '../../../embed-shims/next-link';
15
15
  import { formatDateShort } from '../../../utils/date-formatters';
16
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
16
17
  import {
17
18
  COMPACT_CARD_ICON_SLOT,
18
19
  COMPACT_CARD_META_ROW_BOX,
@@ -96,16 +97,16 @@ export function CampaignCardAdmin({ campaign, className, anchorProps }: Campaign
96
97
  export function CampaignCardAdminSkeleton({ className }: { className?: string }) {
97
98
  return (
98
99
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
99
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
100
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
100
101
  <span className={COMPACT_CARD_TEXT_COL}>
101
102
  <span className={COMPACT_CARD_TITLE_ROW}>
102
- <span className="h-3.5 w-3/5 rounded bg-ods-bg" />
103
+ <UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
103
104
  </span>
104
105
  <span className={COMPACT_CARD_META_ROW_BOX}>
105
- <span className="h-3 w-1/2 rounded bg-ods-bg/70" />
106
+ <UnifiedSkeleton as="span" className="h-3 w-1/2 rounded" />
106
107
  </span>
107
108
  <span className={COMPACT_CARD_META_ROW_BOX}>
108
- <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
109
+ <UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
109
110
  </span>
110
111
  </span>
111
112
  </span>
@@ -27,6 +27,7 @@ import { sortBitesByFeaturedAtDesc } from '../../features/video-bites-shared';
27
27
  import { CardHoverPlay } from '../../features/video-center-badge';
28
28
  import { VideoHoverPreviewSurface } from '../../features/video-hover-preview';
29
29
  import { EntityIcon } from '../../icon-display';
30
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
30
31
  import { Card } from '../../ui/card';
31
32
  import {
32
33
  COMPACT_CARD_IMAGE_SLOT,
@@ -138,20 +139,20 @@ function CaseStudyPersonRow({ study }: { study: CaseStudyCardData }) {
138
139
  export function CaseStudyCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' | 'portrait' | 'result' }) {
139
140
  if (size === 'result') {
140
141
  return (
141
- <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, CASE_STUDY_RESULT_STACK, 'animate-pulse')}>
142
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, CASE_STUDY_RESULT_STACK)}>
142
143
  <div className="flex h-[60px] shrink-0 items-center gap-3">
143
- <div className="h-12 w-12 rounded-full bg-ods-border" />
144
+ <UnifiedSkeleton className="h-12 w-12 rounded-full" />
144
145
  <div className="flex-1 space-y-2">
145
- <div className="h-4 w-2/3 rounded bg-ods-border" />
146
- <div className="h-3 w-1/2 rounded bg-ods-border" />
146
+ <UnifiedSkeleton className="h-4 w-2/3 rounded" />
147
+ <UnifiedSkeleton className="h-3 w-1/2 rounded" />
147
148
  </div>
148
149
  </div>
149
150
  <div className={CASE_STUDY_RESULT_METRIC_BOX} data-testid="case-study-result-skeleton-metric">
150
- <div className="h-10 w-1/3 rounded bg-ods-border" />
151
- <div className="h-4 w-3/4 rounded bg-ods-border" />
151
+ <UnifiedSkeleton className="h-10 w-1/3 rounded" />
152
+ <UnifiedSkeleton className="h-4 w-3/4 rounded" />
152
153
  </div>
153
154
  <div className={CASE_STUDY_RESULT_FOOTER_BOX}>
154
- <div className="h-4 w-2/3 rounded bg-ods-border" />
155
+ <UnifiedSkeleton className="h-4 w-2/3 rounded" />
155
156
  </div>
156
157
  </div>
157
158
  );
@@ -159,34 +160,34 @@ export function CaseStudyCardSkeleton({ size = 'default' }: { size?: 'default' |
159
160
  if (size === 'sm') {
160
161
  return (
161
162
  <span className={COMPACT_CARD_SKELETON_OUTER}>
162
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
163
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
163
164
  <span className={COMPACT_CARD_TEXT_COL}>
164
165
  <span className={COMPACT_CARD_TITLE_ROW}>
165
- <span className="h-3.5 w-3/5 rounded bg-ods-bg" />
166
+ <UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
166
167
  </span>
167
168
  <span className={COMPACT_CARD_META_ROW_BOX}>
168
- <span className="h-3 w-1/2 rounded bg-ods-bg/70" />
169
+ <UnifiedSkeleton as="span" className="h-3 w-1/2 rounded" />
169
170
  </span>
170
171
  <span className={COMPACT_CARD_META_ROW_BOX}>
171
- <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
172
+ <UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
172
173
  </span>
173
174
  </span>
174
175
  </span>
175
176
  );
176
177
  }
177
178
  return (
178
- <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex animate-pulse flex-col gap-6 p-6')}>
179
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex flex-col gap-6 p-6')}>
179
180
  {/* Skeleton aspect matches the real card's image slot (OG 1200×630) */}
180
- <div className="aspect-[1200/630] w-full rounded-sm bg-ods-border" />
181
+ <UnifiedSkeleton className="aspect-[1200/630] w-full rounded-sm" />
181
182
  <div className="flex h-[72px] flex-col gap-2">
182
- <div className="h-5 w-3/4 rounded bg-ods-border" />
183
- <div className="h-5 w-1/2 rounded bg-ods-border" />
183
+ <UnifiedSkeleton className="h-5 w-3/4 rounded" />
184
+ <UnifiedSkeleton className="h-5 w-1/2 rounded" />
184
185
  </div>
185
186
  <div className="flex h-[60px] items-center gap-3">
186
- <div className="h-12 w-12 rounded-full bg-ods-border" />
187
+ <UnifiedSkeleton className="h-12 w-12 rounded-full" />
187
188
  <div className="flex-1 space-y-2">
188
- <div className="h-4 w-2/3 rounded bg-ods-border" />
189
- <div className="h-3 w-1/2 rounded bg-ods-border" />
189
+ <UnifiedSkeleton className="h-4 w-2/3 rounded" />
190
+ <UnifiedSkeleton className="h-3 w-1/2 rounded" />
190
191
  </div>
191
192
  </div>
192
193
  </div>
@@ -4,7 +4,7 @@ import { ChevronRight } from 'lucide-react';
4
4
  import { type ButtonHTMLAttributes, forwardRef } from 'react';
5
5
  import { cn } from '../../../utils/cn';
6
6
  import { WrenchIcon } from '../../icons-v2-generated/household/wrench-icon';
7
- import { Skeleton } from '../../ui/skeleton';
7
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
8
8
  import { Tag } from '../../ui/tag';
9
9
  import { TicketStatusTag, resolveStatusTagProps, resolveTicketStatus } from '../../ui/ticket-status-tag';
10
10
 
@@ -72,14 +72,14 @@ const ChatTicketItem = forwardRef<HTMLButtonElement, ChatTicketItemProps>(
72
72
  >
73
73
  <div className="flex min-w-0 flex-1 flex-col justify-center gap-1">
74
74
  {/* title line */}
75
- <Skeleton className="h-5 w-1/2" />
75
+ <UnifiedSkeleton className="h-5 w-1/2" />
76
76
  {/* subtitle line */}
77
- <Skeleton className="h-4 w-1/3" />
77
+ <UnifiedSkeleton className="h-4 w-1/3" />
78
78
  </div>
79
79
  {/* status tag */}
80
- <Skeleton className="h-8 w-20 shrink-0 rounded-r-md" />
80
+ <UnifiedSkeleton className="h-8 w-20 shrink-0 rounded-r-md" />
81
81
  {/* chevron box */}
82
- <Skeleton className="size-12 shrink-0 rounded-md" />
82
+ <UnifiedSkeleton className="size-12 shrink-0 rounded-md" />
83
83
  </div>
84
84
  );
85
85
  }
@@ -13,6 +13,7 @@ import Image from '../../../embed-shims/next-image';
13
13
  import Link from '../../../embed-shims/next-link';
14
14
  import type { CustomerInterview } from '../../../types/customer-interview';
15
15
  import { cn } from '../../../utils/cn';
16
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
16
17
  import { Card } from '../../ui/card';
17
18
  import {
18
19
  COMPACT_CARD_IMAGE_SLOT,
@@ -54,39 +55,39 @@ export function CustomerInterviewCardSkeleton({ size = 'default' }: { size?: 'de
54
55
  if (size === 'sm') {
55
56
  return (
56
57
  <span className={COMPACT_CARD_SKELETON_OUTER}>
57
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
58
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
58
59
  <span className={COMPACT_CARD_TEXT_COL}>
59
60
  <span className={COMPACT_CARD_TITLE_ROW}>
60
- <span className="h-3.5 w-3/5 rounded bg-ods-bg" />
61
+ <UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
61
62
  </span>
62
63
  <span className={COMPACT_CARD_META_ROW_BOX}>
63
- <span className="h-3 w-2/5 rounded bg-ods-bg/70" />
64
+ <UnifiedSkeleton as="span" className="h-3 w-2/5 rounded" />
64
65
  </span>
65
66
  <span className={COMPACT_CARD_META_ROW_BOX}>
66
- <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
67
+ <UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
67
68
  </span>
68
69
  </span>
69
70
  </span>
70
71
  );
71
72
  }
72
73
  return (
73
- <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex animate-pulse flex-col gap-6 p-6')}>
74
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex flex-col gap-6 p-6')}>
74
75
  {/* Aspect matches the loaded image slot (OG 1200×630) */}
75
- <div className="aspect-[1200/630] w-full rounded-sm bg-ods-border" />
76
+ <UnifiedSkeleton className="aspect-[1200/630] w-full rounded-sm" />
76
77
  <div className="space-y-2">
77
- <div className="h-5 w-3/4 rounded bg-ods-border" />
78
- <div className="h-5 w-1/2 rounded bg-ods-border" />
78
+ <UnifiedSkeleton className="h-5 w-3/4 rounded" />
79
+ <UnifiedSkeleton className="h-5 w-1/2 rounded" />
79
80
  </div>
80
81
  <div className="space-y-2">
81
- <div className="h-3 w-full rounded bg-ods-border" />
82
- <div className="h-3 w-5/6 rounded bg-ods-border" />
83
- <div className="h-3 w-4/5 rounded bg-ods-border" />
82
+ <UnifiedSkeleton className="h-3 w-full rounded" />
83
+ <UnifiedSkeleton className="h-3 w-5/6 rounded" />
84
+ <UnifiedSkeleton className="h-3 w-4/5 rounded" />
84
85
  </div>
85
86
  <div className="mt-auto flex h-[60px] items-center gap-3">
86
- <div className="h-12 w-12 rounded-full bg-ods-border" />
87
+ <UnifiedSkeleton className="h-12 w-12 rounded-full" />
87
88
  <div className="flex-1 space-y-2">
88
- <div className="h-4 w-2/3 rounded bg-ods-border" />
89
- <div className="h-3 w-1/2 rounded bg-ods-border" />
89
+ <UnifiedSkeleton className="h-4 w-2/3 rounded" />
90
+ <UnifiedSkeleton className="h-3 w-1/2 rounded" />
90
91
  </div>
91
92
  </div>
92
93
  </div>
@@ -16,6 +16,7 @@
16
16
  import { ExternalLink } from 'lucide-react';
17
17
  import type React from 'react';
18
18
  import Link from '../../../embed-shims/next-link';
19
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
19
20
  import { StatusBadge } from '../../ui/status-badge';
20
21
  import type { DataRoomDocCardItem } from '../types/entities/data-room-doc';
21
22
  import {
@@ -104,17 +105,17 @@ export function DataRoomDocCardSkeleton({ className }: { className?: string }) {
104
105
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
105
106
  <span className={COMPACT_CARD_TEXT_COL}>
106
107
  <span className="flex min-w-0 items-center gap-1.5">
107
- <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
108
- <span className="h-4 w-16 rounded-full bg-ods-bg/60" />
108
+ <UnifiedSkeleton as="span" className="h-3.5 w-2/3 rounded" />
109
+ <UnifiedSkeleton as="span" className="h-4 w-16 rounded-full" />
109
110
  </span>
110
- <span className="h-4 w-1/2 rounded bg-ods-bg/60" />
111
+ <UnifiedSkeleton as="span" className="h-4 w-1/2 rounded" />
111
112
  <span className="flex min-w-0 flex-col gap-0">
112
- <span className="h-5 w-5/6 rounded bg-ods-bg/60" />
113
- <span className="h-5 w-3/4 rounded bg-ods-bg/60" />
113
+ <UnifiedSkeleton as="span" className="h-5 w-5/6 rounded" />
114
+ <UnifiedSkeleton as="span" className="h-5 w-3/4 rounded" />
114
115
  </span>
115
116
  </span>
116
117
  <span className="flex h-5 shrink-0 items-center self-start">
117
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
118
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
118
119
  </span>
119
120
  </span>
120
121
  );
@@ -62,8 +62,6 @@ export function DesignDocCardSkeleton() {
62
62
  CONTENT_CARD_SKELETON_FRAME_CLASS,
63
63
  'flex h-full flex-col gap-[var(--spacing-system-mf)] p-[var(--spacing-system-lf)]',
64
64
  )}
65
- role="status"
66
- aria-label="Loading design doc"
67
65
  >
68
66
  <div className="flex w-full items-center gap-[16px]">
69
67
  <div className="flex min-w-0 flex-1 flex-col gap-2">
@@ -12,6 +12,7 @@ import { ExternalLink } from 'lucide-react';
12
12
  import type React from 'react';
13
13
  import Link from '../../../embed-shims/next-link';
14
14
  import { formatDateUTC as formatDate } from '../../../utils/format';
15
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
15
16
  import { StatusBadge } from '../../ui/status-badge';
16
17
  import {
17
18
  COMPACT_CARD_META_ROW,
@@ -127,18 +128,18 @@ export function GenericEntityCardSkeleton({ className }: { className?: string })
127
128
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
128
129
  <span className={COMPACT_CARD_TEXT_COL}>
129
130
  <span className="flex min-w-0 items-center gap-1.5">
130
- <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
131
- <span className="h-4 w-16 rounded-full bg-ods-bg/60" />
131
+ <UnifiedSkeleton as="span" className="h-3.5 w-2/3 rounded" />
132
+ <UnifiedSkeleton as="span" className="h-4 w-16 rounded-full" />
132
133
  </span>
133
- <span className="h-4 w-1/2 rounded bg-ods-bg/60" />
134
+ <UnifiedSkeleton as="span" className="h-4 w-1/2 rounded" />
134
135
  <span className="flex min-w-0 flex-col gap-0">
135
- <span className="h-5 w-5/6 rounded bg-ods-bg/60" />
136
- <span className="h-5 w-3/4 rounded bg-ods-bg/60" />
136
+ <UnifiedSkeleton as="span" className="h-5 w-5/6 rounded" />
137
+ <UnifiedSkeleton as="span" className="h-5 w-3/4 rounded" />
137
138
  </span>
138
- <span className="h-3 w-1/4 rounded bg-ods-bg/70" />
139
+ <UnifiedSkeleton as="span" className="h-3 w-1/4 rounded" />
139
140
  </span>
140
141
  <span className="flex h-5 shrink-0 items-center self-start">
141
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
142
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
142
143
  </span>
143
144
  </span>
144
145
  );
@@ -21,6 +21,7 @@ import React from 'react';
21
21
  import Link from '../../../embed-shims/next-link';
22
22
  import { formatDateUTC as formatDate } from '../../../utils/format';
23
23
  import { GithubClassicIcon } from '../../icons-v2-generated/brand-logos/github-classic-icon';
24
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
24
25
  import type { GitHubActivityItem, GitHubActivityKind, PrReviewState } from '../types/entities/github-activity';
25
26
  import {
26
27
  COMPACT_CARD_ICON_SLOT,
@@ -295,33 +296,33 @@ export function GitHubActivityCardSkeleton({
295
296
  }) {
296
297
  if (variant === 'row') {
297
298
  return (
298
- <div className={`flex min-w-0 animate-pulse items-center gap-3 ${className ?? ''}`}>
299
+ <div className={`flex min-w-0 items-center gap-3 ${className ?? ''}`}>
299
300
  <div className="flex w-28 shrink-0 items-center gap-2">
300
- <div className="h-3.5 w-3.5 rounded bg-ods-bg" />
301
- <div className="h-3 w-16 rounded bg-ods-bg" />
301
+ <UnifiedSkeleton className="h-3.5 w-3.5 rounded" />
302
+ <UnifiedSkeleton className="h-3 w-16 rounded" />
302
303
  </div>
303
- <div className="h-3 w-2/3 flex-1 rounded bg-ods-bg" />
304
- <div className="h-3 w-40 shrink-0 rounded bg-ods-bg/60" />
305
- <div className="h-3 w-20 shrink-0 rounded bg-ods-bg/60" />
304
+ <UnifiedSkeleton className="h-3 w-2/3 flex-1 rounded" />
305
+ <UnifiedSkeleton className="h-3 w-40 shrink-0 rounded" />
306
+ <UnifiedSkeleton className="h-3 w-20 shrink-0 rounded" />
306
307
  </div>
307
308
  );
308
309
  }
309
310
  return (
310
311
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
311
- <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
312
+ <UnifiedSkeleton as="span" className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
312
313
  <span className={COMPACT_CARD_TEXT_COL}>
313
314
  <span className={COMPACT_CARD_TITLE_ROW}>
314
- <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
315
+ <UnifiedSkeleton as="span" className="h-3.5 w-2/3 rounded" />
315
316
  </span>
316
317
  <span className={COMPACT_CARD_META_ROW_BOX}>
317
- <span className="h-3 w-1/2 rounded bg-ods-bg/70" />
318
+ <UnifiedSkeleton as="span" className="h-3 w-1/2 rounded" />
318
319
  </span>
319
320
  <span className={COMPACT_CARD_META_ROW_BOX}>
320
321
  <span className={COMPACT_CARD_SUMMARY}>{COMPACT_CARD_ROW_FILLER}</span>
321
322
  </span>
322
323
  </span>
323
324
  <span className="flex h-5 shrink-0 items-center self-start">
324
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
325
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
325
326
  </span>
326
327
  </span>
327
328
  );
@@ -13,6 +13,7 @@ import { ExternalLink } from 'lucide-react';
13
13
  import React from 'react';
14
14
  import Link from '../../../embed-shims/next-link';
15
15
  import { formatDateUTC as formatDate } from '../../../utils/format';
16
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
16
17
  import { StatusBadge } from '../../ui/status-badge';
17
18
  import type { HubspotTicketItem } from '../types/entities/hubspot-ticket';
18
19
  import {
@@ -177,11 +178,11 @@ export function HubspotTicketCardSkeleton({
177
178
  }) {
178
179
  if (variant === 'row') {
179
180
  return (
180
- <div className={`flex min-w-0 animate-pulse items-center gap-3 ${className ?? ''}`}>
181
- <div className="h-3 w-40 shrink-0 rounded bg-ods-bg" />
182
- <div className="h-3 w-2/3 flex-1 rounded bg-ods-bg/60" />
183
- <div className="h-3 w-16 shrink-0 rounded bg-ods-bg/60" />
184
- <div className="h-3 w-20 shrink-0 rounded bg-ods-bg/60" />
181
+ <div className={`flex min-w-0 items-center gap-3 ${className ?? ''}`}>
182
+ <UnifiedSkeleton className="h-3 w-40 shrink-0 rounded" />
183
+ <UnifiedSkeleton className="h-3 w-2/3 flex-1 rounded" />
184
+ <UnifiedSkeleton className="h-3 w-16 shrink-0 rounded" />
185
+ <UnifiedSkeleton className="h-3 w-20 shrink-0 rounded" />
185
186
  </div>
186
187
  );
187
188
  }
@@ -189,23 +190,23 @@ export function HubspotTicketCardSkeleton({
189
190
  <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
190
191
  <span className={COMPACT_CARD_TEXT_COL}>
191
192
  <span className="flex min-w-0 flex-wrap items-center gap-1.5">
192
- <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
193
- <span className="h-4 w-12 rounded-full bg-ods-bg/60" />
194
- <span className="h-4 w-16 rounded-full bg-ods-bg/60" />
193
+ <UnifiedSkeleton as="span" className="h-3.5 w-2/3 rounded" />
194
+ <UnifiedSkeleton as="span" className="h-4 w-12 rounded-full" />
195
+ <UnifiedSkeleton as="span" className="h-4 w-16 rounded-full" />
195
196
  </span>
196
- <span className="h-4 w-1/2 rounded bg-ods-bg/60" />
197
+ <UnifiedSkeleton as="span" className="h-4 w-1/2 rounded" />
197
198
  <span className="flex min-w-0 flex-col gap-0">
198
- <span className="h-5 w-5/6 rounded bg-ods-bg/60" />
199
- <span className="h-5 w-4/6 rounded bg-ods-bg/60" />
200
- <span className="h-5 w-3/4 rounded bg-ods-bg/60" />
201
- <span className="h-5 w-2/5 rounded bg-ods-bg/60" />
199
+ <UnifiedSkeleton as="span" className="h-5 w-5/6 rounded" />
200
+ <UnifiedSkeleton as="span" className="h-5 w-4/6 rounded" />
201
+ <UnifiedSkeleton as="span" className="h-5 w-3/4 rounded" />
202
+ <UnifiedSkeleton as="span" className="h-5 w-2/5 rounded" />
202
203
  </span>
203
204
  <span className={COMPACT_CARD_META_ROW_BOX}>
204
- <span className="h-3 w-1/3 rounded bg-ods-bg/70" />
205
+ <UnifiedSkeleton as="span" className="h-3 w-1/3 rounded" />
205
206
  </span>
206
207
  </span>
207
208
  <span className="flex h-5 shrink-0 items-center self-start">
208
- <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
209
+ <UnifiedSkeleton as="span" className="h-3.5 w-3.5 rounded" />
209
210
  </span>
210
211
  </span>
211
212
  );
@@ -27,9 +27,11 @@ export {
27
27
  } from './content-card-frame';
28
28
  export {
29
29
  AdminContentCardGrid,
30
+ AdminContentCardGridSkeleton,
30
31
  AdminContentCardSkeleton,
31
32
  ADMIN_CONTENT_CARD_GRID_CLASS,
32
33
  type AdminContentCardGridProps,
34
+ type AdminContentCardGridSkeletonProps,
33
35
  } from './admin-content-card-grid';
34
36
  export { EmployeeEntryCard, EmployeeEntryCardSkeleton, EmployeeEntryBadge } from './employee-entry-card';
35
37
  export type { EmployeeEntryCardData, EmployeeEntryCardProps } from './employee-entry-card';