@flamingo-stack/openframe-frontend-core 0.0.748 → 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 (546) 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-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
  8. package/dist/{chunk-YKJQM2O6.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-H34A2765.cjs → chunk-CXV7VBSI.cjs} +104 -118
  12. package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
  13. package/dist/{chunk-OZUJYBQ2.cjs → chunk-E3KFEOFA.cjs} +9 -6
  14. package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
  15. package/dist/{chunk-46EIXJFC.cjs → chunk-GOFEOCQN.cjs} +44 -27
  16. package/dist/{chunk-UNR74CAC.cjs → chunk-HOEVD6EN.cjs} +4 -4
  17. package/dist/{chunk-EH3LOWGY.cjs → chunk-KRAQEZPB.cjs} +48 -40
  18. package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
  19. package/dist/{chunk-D4XZL27V.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-JNBOQ7F2.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-6XP6RNFD.cjs → chunk-SECT4H34.cjs} +1780 -2076
  27. package/dist/{chunk-GE4PCDNZ.cjs → chunk-SGL47BS2.cjs} +12 -12
  28. package/dist/{chunk-4AZHFLOM.cjs → chunk-SOPVUD2Y.cjs} +3 -3
  29. package/dist/chunk-UGCRLRCT.cjs +25 -0
  30. package/dist/{chunk-BBTSJYTR.cjs → chunk-V3UJ6NDR.cjs} +243 -429
  31. package/dist/{chunk-JOPFX3PJ.cjs → chunk-VEVIMDNK.cjs} +137 -122
  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-TRXCQADV.cjs → chunk-ZLF55RDR.cjs} +103 -98
  35. package/dist/{cloud-tenants-V5727B7F.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-WWMXIIHI.cjs → devices-FVXAGKVX.cjs} +17 -15
  372. package/dist/{embeddable-chat-IJHCGQ24.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
  373. package/dist/index.cjs +24 -31
  374. package/dist/{knowledge-JZP4RIXB.cjs → knowledge-ZL3ZHBSL.cjs} +17 -15
  375. package/dist/{logs-WIRYFNUC.cjs → logs-KQCWDIOB.cjs} +24 -22
  376. package/dist/{policies-X7OJYA7G.cjs → policies-ARDCZ3CT.cjs} +20 -18
  377. package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
  378. package/dist/{scripts-GRMT2NGW.cjs → scripts-ZAMVWCY4.cjs} +23 -21
  379. package/dist/{software-update-G3QOB7RT.cjs → software-update-6F7BIYS3.cjs} +20 -18
  380. package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
  381. package/package.json +1 -1
  382. package/src/components/categories-cart.tsx +2 -4
  383. package/src/components/chat/chat-container.tsx +4 -4
  384. package/src/components/chat/chat-context-picker.tsx +3 -2
  385. package/src/components/chat/chat-message-row.tsx +6 -7
  386. package/src/components/chat/chat-message-skeleton.tsx +11 -6
  387. package/src/components/chat/chat-sidebar-skeleton.tsx +4 -3
  388. package/src/components/chat/chat-top-navigation.tsx +4 -4
  389. package/src/components/chat/context-items-list.tsx +9 -3
  390. package/src/components/chat/entity-cards/admin-content-card-grid.tsx +65 -18
  391. package/src/components/chat/entity-cards/admin-content-card.tsx +2 -1
  392. package/src/components/chat/entity-cards/blog-card.tsx +13 -12
  393. package/src/components/chat/entity-cards/campaign-card-admin.tsx +5 -4
  394. package/src/components/chat/entity-cards/case-study-card.tsx +19 -18
  395. package/src/components/chat/entity-cards/chat-ticket-item.tsx +5 -5
  396. package/src/components/chat/entity-cards/customer-interview-card.tsx +15 -14
  397. package/src/components/chat/entity-cards/data-room-doc-card.tsx +7 -6
  398. package/src/components/chat/entity-cards/design-doc-card.tsx +0 -2
  399. package/src/components/chat/entity-cards/generic-entity-card.tsx +8 -7
  400. package/src/components/chat/entity-cards/github-activity-card.tsx +11 -10
  401. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +16 -15
  402. package/src/components/chat/entity-cards/index.ts +2 -0
  403. package/src/components/chat/entity-cards/investor-update-card.tsx +12 -11
  404. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +21 -22
  405. package/src/components/chat/entity-cards/program-card.tsx +29 -28
  406. package/src/components/chat/entity-cards/roadmap-card.tsx +22 -23
  407. package/src/components/chat/entity-cards/slack-message-card.tsx +12 -11
  408. package/src/components/chat/guide-welcome.tsx +2 -2
  409. package/src/components/chat/mingo-archive-list.tsx +2 -1
  410. package/src/components/chat/mingo-chat-history.tsx +18 -9
  411. package/src/components/chat/mingo-chat-rail.tsx +2 -1
  412. package/src/components/chat/mingo-info-card.tsx +6 -5
  413. package/src/components/chat/mingo-onboarding-card-skeleton.tsx +15 -13
  414. package/src/components/chat/model-display.tsx +4 -4
  415. package/src/components/chat/msp-organization-card-skeleton.tsx +5 -5
  416. package/src/components/chat/quick-action-chip.tsx +17 -14
  417. package/src/components/chat/utils/compact-card-classes.ts +4 -5
  418. package/src/components/content-loading-container.tsx +7 -8
  419. package/src/components/docs/doc-viewer.tsx +3 -2
  420. package/src/components/docs/skeletons.tsx +64 -63
  421. package/src/components/embeds/embed-iframe.tsx +16 -9
  422. package/src/components/embeds/index.ts +2 -2
  423. package/src/components/embeds/linkedin-embed-client.tsx +7 -6
  424. package/src/components/embeds/markdown-image.tsx +5 -3
  425. package/src/components/embeds/og-link-preview.tsx +162 -79
  426. package/src/components/embeds/reddit-embed-client.tsx +10 -9
  427. package/src/components/embeds/twitter-embed-client.tsx +10 -9
  428. package/src/components/faq/faq-section.tsx +13 -6
  429. package/src/components/features/board/ticket-card-skeleton.tsx +8 -8
  430. package/src/components/features/capability-explorer.tsx +61 -30
  431. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +9 -3
  432. package/src/components/features/devices/device-selector/device-selector.tsx +2 -0
  433. package/src/components/features/devices/device-selector/device-selector.types.ts +2 -0
  434. package/src/components/features/devices/devices-grid.tsx +4 -1
  435. package/src/components/features/devices/devices-panel-view.tsx +9 -1
  436. package/src/components/features/devices/devices-table-columns.tsx +4 -0
  437. package/src/components/features/logs/logs-table-view.tsx +4 -2
  438. package/src/components/features/model-token-rates.tsx +27 -24
  439. package/src/components/features/notifications/index.ts +2 -2
  440. package/src/components/features/notifications/notification-drawer.tsx +7 -10
  441. package/src/components/features/notifications/notification-tile.tsx +57 -0
  442. package/src/components/features/policies/policy-summary-cards.tsx +2 -2
  443. package/src/components/features/push-button-selector.tsx +20 -11
  444. package/src/components/features/remote-session/remote-desktop-view.tsx +26 -16
  445. package/src/components/features/waitlist-form.tsx +6 -5
  446. package/src/components/help-center-pages/download-apps-page.tsx +3 -2
  447. package/src/components/help-center-pages/trust-center-page.tsx +6 -2
  448. package/src/components/help-center-pages/trust-center-sections.tsx +9 -3
  449. package/src/components/index.ts +0 -2
  450. package/src/components/layout/title-block.tsx +17 -15
  451. package/src/components/loading/card-skeleton.tsx +14 -46
  452. package/src/components/loading/category-card-skeleton.tsx +2 -4
  453. package/src/components/loading/category-vendor-selector-skeleton.tsx +12 -5
  454. package/src/components/loading/device-card-skeleton.tsx +58 -51
  455. package/src/components/loading/index.ts +5 -19
  456. package/src/components/loading/loading-region.tsx +60 -0
  457. package/src/components/loading/margin-report-skeleton.tsx +45 -34
  458. package/src/components/loading/msp-profile-form-skeleton.tsx +9 -6
  459. package/src/components/loading/organization-card-skeleton.tsx +8 -6
  460. package/src/components/loading/organization-icon-skeleton.tsx +3 -2
  461. package/src/components/loading/page-layout-skeleton.tsx +162 -133
  462. package/src/components/loading/settings-form-skeleton.tsx +52 -0
  463. package/src/components/loading/unified-skeleton.tsx +26 -71
  464. package/src/components/loading/wizard-layout-skeleton.tsx +6 -3
  465. package/src/components/media-carousel.tsx +2 -1
  466. package/src/components/meeting-scheduler/booking-form.tsx +10 -7
  467. package/src/components/meeting-scheduler/context-panel.tsx +8 -7
  468. package/src/components/meeting-scheduler/directory.tsx +10 -9
  469. package/src/components/meeting-scheduler/index.tsx +5 -4
  470. package/src/components/meeting-scheduler/modal-header.tsx +8 -7
  471. package/src/components/meeting-scheduler/slot-picker.tsx +4 -3
  472. package/src/components/navigation/app-header.tsx +8 -7
  473. package/src/components/navigation/multi-level-navigation.tsx +3 -2
  474. package/src/components/navigation/navigation-sidebar-item.tsx +3 -2
  475. package/src/components/onboarding-guides/onboarding-guides-catalog-skeleton.tsx +17 -10
  476. package/src/components/product-demo/product-screen.tsx +4 -4
  477. package/src/components/profile/ProfileLoadingSkeleton.tsx +13 -9
  478. package/src/components/related-content/related-content-section.tsx +5 -4
  479. package/src/components/shared/delivery/delivery-table.tsx +8 -7
  480. package/src/components/shared/detail-page-skeleton.tsx +22 -14
  481. package/src/components/shared/dev-section/dev-card-row.tsx +23 -10
  482. package/src/components/shared/legal-document/legal-document-page.tsx +8 -7
  483. package/src/components/shared/onboarding/onboarding-step-card.tsx +3 -2
  484. package/src/components/shared/onboarding/onboarding-walkthrough.tsx +2 -1
  485. package/src/components/shared/product-release/index.ts +0 -1
  486. package/src/components/shared/product-release/product-release-card-skeleton.tsx +23 -25
  487. package/src/components/shared/product-release/product-releases-view.tsx +3 -2
  488. package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +14 -56
  489. package/src/components/tickets/help-center-create-form.tsx +23 -12
  490. package/src/components/tickets/ticket-center.tsx +17 -11
  491. package/src/components/tickets/ticket-detail-drawer.tsx +3 -2
  492. package/src/components/ui/admin-form-drawer.tsx +7 -7
  493. package/src/components/ui/admin-form-modal.tsx +9 -8
  494. package/src/components/ui/analyzing-state.tsx +5 -8
  495. package/src/components/ui/content-loader.tsx +31 -23
  496. package/src/components/ui/dashboard-info-card.tsx +81 -20
  497. package/src/components/ui/data-attribution.tsx +18 -0
  498. package/src/components/ui/data-table/data-table-body.tsx +9 -2
  499. package/src/components/ui/data-table/data-table-infinite-footer.tsx +4 -2
  500. package/src/components/ui/data-table/data-table-skeleton.tsx +8 -5
  501. package/src/components/ui/feature-card.tsx +27 -11
  502. package/src/components/ui/file-manager/file-manager-skeleton.tsx +30 -22
  503. package/src/components/ui/file-manager/file-manager-table.tsx +10 -10
  504. package/src/components/ui/filter-modal.tsx +5 -5
  505. package/src/components/ui/filter-pill-row.tsx +19 -0
  506. package/src/components/ui/index.ts +0 -1
  507. package/src/components/ui/layout-hold.tsx +30 -38
  508. package/src/components/ui/markdown/base-components.tsx +1 -1
  509. package/src/components/ui/page-actions.tsx +10 -8
  510. package/src/components/ui/photo-wall.tsx +4 -7
  511. package/src/components/ui/query-report-table/query-report-table-skeleton.tsx +13 -7
  512. package/src/components/ui/query-report-table/query-report-table.tsx +2 -0
  513. package/src/components/ui/query-report-table/types.ts +4 -0
  514. package/src/components/ui/skeleton-surface.ts +6 -0
  515. package/src/components/ui/table/table-skeleton.tsx +11 -13
  516. package/src/components/ui/test-run.tsx +30 -22
  517. package/src/styles/ods-colors.css +2 -2
  518. package/dist/chunk-5M5C6UV4.cjs +0 -125
  519. package/dist/components/dynamic-skeleton.d.ts +0 -108
  520. package/dist/components/dynamic-skeleton.d.ts.map +0 -1
  521. package/dist/components/dynamic-skeleton.js +0 -221
  522. package/dist/components/loading/content-skeleton.d.ts +0 -73
  523. package/dist/components/loading/content-skeleton.d.ts.map +0 -1
  524. package/dist/components/loading/content-skeleton.js +0 -217
  525. package/dist/components/loading/users-grid-skeleton.d.ts +0 -7
  526. package/dist/components/loading/users-grid-skeleton.d.ts.map +0 -1
  527. package/dist/components/loading/users-grid-skeleton.js +0 -13
  528. package/dist/components/shared/product-release/release-detail-skeleton.d.ts +0 -2
  529. package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +0 -1
  530. package/dist/components/shared/product-release/release-detail-skeleton.js +0 -9
  531. package/dist/components/skeleton.d.ts +0 -4
  532. package/dist/components/skeleton.d.ts.map +0 -1
  533. package/dist/components/skeleton.js +0 -9
  534. package/dist/components/ui/skeleton.d.ts +0 -44
  535. package/dist/components/ui/skeleton.d.ts.map +0 -1
  536. package/dist/components/ui/skeleton.js +0 -103
  537. package/dist/components/vendor-page-skeleton.d.ts +0 -2
  538. package/dist/components/vendor-page-skeleton.d.ts.map +0 -1
  539. package/dist/components/vendor-page-skeleton.js +0 -9
  540. package/src/components/dynamic-skeleton.tsx +0 -365
  541. package/src/components/loading/content-skeleton.tsx +0 -374
  542. package/src/components/loading/users-grid-skeleton.tsx +0 -36
  543. package/src/components/shared/product-release/release-detail-skeleton.tsx +0 -7
  544. package/src/components/skeleton.tsx +0 -8
  545. package/src/components/ui/skeleton.tsx +0 -173
  546. package/src/components/vendor-page-skeleton.tsx +0 -7
@@ -1,31 +1,41 @@
1
1
  import type React from 'react';
2
2
  import { cn } from '../../utils/cn';
3
3
  import { CardSkeletonGrid } from './card-skeleton';
4
+ import { LoadingRegion } from './loading-region';
4
5
  import { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from './unified-skeleton';
5
6
 
6
7
  interface PageLayoutSkeletonProps {
7
8
  className?: string;
8
9
  }
9
10
 
11
+ /**
12
+ * A whole loading state (a layout or a grid, not a piece of chrome): it announces itself once
13
+ * (`LoadingRegion`). `region={false}` inside another loading region.
14
+ */
15
+ interface LoadingLayoutProps extends PageLayoutSkeletonProps {
16
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
17
+ region?: boolean;
18
+ }
19
+
10
20
  /**
11
21
  * Announcement bar skeleton that matches the AnnouncementBar component
12
22
  */
13
23
  export function AnnouncementBarSkeleton() {
14
24
  return (
15
- <div className="relative w-full animate-pulse bg-ods-skeleton">
25
+ <div className="relative w-full bg-ods-card">
16
26
  <div className="relative flex w-full flex-row items-center">
17
27
  <div className="relative box-border flex w-full flex-row items-center justify-start gap-4 py-3 pl-4 pr-12 content-md:gap-6 content-md:py-4 content-md:pl-6 content-md:pr-16">
18
28
  {/* Logo skeleton */}
19
- <div className="relative h-6 w-6 shrink-0 rounded bg-ods-border content-md:h-8 content-md:w-8"></div>
29
+ <UnifiedSkeleton className="relative h-6 w-6 shrink-0 rounded content-md:h-8 content-md:w-8" />
20
30
 
21
31
  {/* Text content skeleton */}
22
32
  <div className="min-w-0 flex-1 space-y-1 content-md:space-y-2">
23
- <div className="h-[14px] w-3/4 max-w-md rounded bg-ods-border content-md:h-[18px]"></div>
24
- <div className="hidden h-[12px] w-full max-w-lg rounded bg-ods-border content-md:block content-md:h-[18px]"></div>
33
+ <UnifiedSkeleton className="h-[14px] w-3/4 max-w-md rounded content-md:h-[18px]" />
34
+ <UnifiedSkeleton className="hidden h-[12px] w-full max-w-lg rounded content-md:block content-md:h-[18px]" />
25
35
  </div>
26
36
 
27
37
  {/* Close button skeleton */}
28
- <div className="absolute right-2 top-2 h-6 w-6 rounded bg-ods-border"></div>
38
+ <UnifiedSkeleton className="absolute right-2 top-2 h-6 w-6 rounded" />
29
39
  </div>
30
40
  </div>
31
41
  </div>
@@ -37,10 +47,10 @@ export function AnnouncementBarSkeleton() {
37
47
  */
38
48
  export function HeaderSkeleton() {
39
49
  return (
40
- <header className="sticky top-0 z-40 flex w-full animate-pulse items-center justify-between border-b border-ods-border bg-ods-card bg-ods-card/95 px-4 py-3 backdrop-blur-sm content-md:px-[80px] content-md:py-[12px]">
50
+ <header className="sticky top-0 z-40 flex w-full items-center justify-between border-b border-ods-border bg-ods-card bg-ods-card/95 px-4 py-3 backdrop-blur-sm content-md:px-[80px] content-md:py-[12px]">
41
51
  {/* Left: Logo skeleton */}
42
52
  <div className="flex min-w-0 flex-1 items-center justify-start">
43
- <div className="h-[26px] w-[110px] rounded bg-ods-skeleton content-md:h-8 content-md:w-[137px]"></div>
53
+ <UnifiedSkeleton className="h-[26px] w-[110px] rounded content-md:h-8 content-md:w-[137px]" />
44
54
  </div>
45
55
 
46
56
  {/* Center: Navigation skeleton - hidden on mobile, visible on desktop */}
@@ -76,7 +86,7 @@ export function HeaderSkeleton() {
76
86
  export function HeroSkeleton() {
77
87
  return (
78
88
  <section
79
- className="flex w-full animate-pulse flex-col items-center justify-center px-4 py-12 text-center content-md:px-8 content-md:py-20"
89
+ className="flex w-full flex-col items-center justify-center px-4 py-12 text-center content-md:px-8 content-md:py-20"
80
90
  style={{
81
91
  background: 'radial-gradient(circle at 50% 0%, #242323 0%, #1A1A1A 100%)',
82
92
  }}
@@ -190,6 +200,14 @@ export function BreadcrumbSkeleton({ className }: PageLayoutSkeletonProps) {
190
200
  );
191
201
  }
192
202
 
203
+ /**
204
+ * ONE breadcrumb link while it loads: a bar the height of the link's line
205
+ * (`text-h6`), for a trail whose links stream in one by one.
206
+ */
207
+ export function BreadcrumbLinkSkeleton({ className }: PageLayoutSkeletonProps) {
208
+ return <UnifiedSkeleton as="span" className={cn('inline-block h-5 w-16', className)} />;
209
+ }
210
+
193
211
  /**
194
212
  * Results header skeleton with count and sorting
195
213
  */
@@ -217,16 +235,20 @@ export function TwoColumnLayoutSkeleton({
217
235
  sidebarContent,
218
236
  mainContent,
219
237
  sidebarPosition = 'left',
220
- }: PageLayoutSkeletonProps & {
238
+ region = true,
239
+ }: LoadingLayoutProps & {
221
240
  sidebarContent?: React.ReactNode;
222
241
  mainContent?: React.ReactNode;
223
242
  sidebarPosition?: 'left' | 'right';
224
243
  }) {
225
244
  const sidebar = sidebarContent || <CategorySidebarSkeleton />;
226
- const main = mainContent || <CardSkeletonGrid count={6} />;
245
+ // The layout announces for its parts: content passed in should not announce again (`region={false}`).
246
+ const main = mainContent || <CardSkeletonGrid count={6} region={false} />;
227
247
 
228
248
  return (
229
- <div
249
+ <LoadingRegion
250
+ label="Loading"
251
+ announce={region}
230
252
  className={cn(
231
253
  'grid grid-cols-1 gap-6 content-lg:grid-cols-[320px_1fr] content-lg:gap-8',
232
254
  sidebarPosition === 'right' && 'content-lg:grid-cols-[1fr_320px]',
@@ -244,16 +266,21 @@ export function TwoColumnLayoutSkeleton({
244
266
  <aside className="order-2">{sidebar}</aside>
245
267
  </>
246
268
  )}
247
- </div>
269
+ </LoadingRegion>
248
270
  );
249
271
  }
250
272
 
251
273
  /**
252
274
  * Article/blog post layout skeleton
253
275
  */
254
- export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
276
+ export function ArticleLayoutSkeleton({ className, region = true }: LoadingLayoutProps) {
255
277
  return (
256
- <article className={cn('mx-auto max-w-4xl', className)}>
278
+ <LoadingRegion
279
+ label="Loading the article"
280
+ as="article"
281
+ announce={region}
282
+ className={cn('mx-auto max-w-4xl', className)}
283
+ >
257
284
  {/* Article header */}
258
285
  <header className="mb-8 space-y-4 content-md:mb-12 content-md:space-y-6">
259
286
  {/* Category/tags */}
@@ -305,7 +332,7 @@ export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
305
332
  </div>
306
333
  </div>
307
334
  </div>
308
- </article>
335
+ </LoadingRegion>
309
336
  );
310
337
  }
311
338
 
@@ -313,9 +340,14 @@ export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
313
340
  * Vendor Detail Layout Skeleton - Complete vendor detail page structure
314
341
  * Matches the refactored vendor detail page with proper platform colors and responsive layout
315
342
  */
316
- export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
343
+ export function VendorDetailLayoutSkeleton({ className, region = true }: LoadingLayoutProps) {
317
344
  return (
318
- <main className={cn('min-h-screen bg-ods-bg', className)}>
345
+ <LoadingRegion
346
+ label="Loading the vendor"
347
+ as="main"
348
+ announce={region}
349
+ className={cn('min-h-screen bg-ods-bg', className)}
350
+ >
319
351
  <div className="mx-auto max-w-[1920px] px-6 py-6 content-md:px-20 content-md:py-10">
320
352
  {/* Breadcrumb */}
321
353
  <BreadcrumbSkeleton className="mb-6" />
@@ -328,28 +360,28 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
328
360
  <div className="mb-10">
329
361
  {/* Header - Logo and Title Side by Side */}
330
362
  <div className="mb-6 flex gap-6">
331
- <div className="h-20 w-20 flex-shrink-0 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
363
+ <UnifiedSkeleton className="h-20 w-20 flex-shrink-0 rounded-lg border border-ods-border" />
332
364
 
333
365
  <div className="flex flex-col gap-3">
334
366
  <div className="flex flex-col gap-2">
335
367
  {/* Large title skeleton */}
336
- <div className="h-12 w-80 max-w-full animate-pulse rounded bg-ods-skeleton content-md:h-16 content-lg:h-20"></div>
368
+ <UnifiedSkeleton className="h-12 w-80 max-w-full rounded content-md:h-16 content-lg:h-20" />
337
369
  {/* Category text */}
338
- <div className="h-5 w-32 animate-pulse rounded bg-ods-skeleton content-md:h-6"></div>
370
+ <UnifiedSkeleton className="h-5 w-32 rounded content-md:h-6" />
339
371
  </div>
340
372
 
341
373
  {/* Pricing tags */}
342
374
  <div className="flex items-center gap-2">
343
- <div className="h-8 w-20 animate-pulse rounded bg-ods-skeleton"></div>
344
- <div className="h-8 w-16 animate-pulse rounded bg-ods-skeleton"></div>
375
+ <UnifiedSkeleton className="h-8 w-20 rounded" />
376
+ <UnifiedSkeleton className="h-8 w-16 rounded" />
345
377
  </div>
346
378
  </div>
347
379
  </div>
348
380
 
349
381
  {/* Vendor Image Display Skeleton */}
350
- <div className="mb-2 h-[300px] w-full animate-pulse rounded-lg border border-ods-border bg-ods-card content-md:h-[400px] content-lg:h-[500px]"></div>
382
+ <UnifiedSkeleton className="mb-2 h-[300px] w-full rounded-lg border border-ods-border content-md:h-[400px] content-lg:h-[500px]" />
351
383
  <div className="text-center">
352
- <div className="mx-auto h-4 w-24 animate-pulse rounded bg-ods-skeleton"></div>
384
+ <UnifiedSkeleton className="mx-auto h-4 w-24 rounded" />
353
385
  </div>
354
386
  </div>
355
387
 
@@ -357,22 +389,22 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
357
389
  <div className="mb-10 content-lg:hidden">
358
390
  <div className="space-y-4">
359
391
  {/* Deploy Button */}
360
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
392
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
361
393
 
362
394
  {/* Voting Buttons */}
363
395
  <div className="space-y-2">
364
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
365
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
396
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
397
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
366
398
  </div>
367
399
 
368
400
  {/* GitHub Score Section */}
369
401
  <div className="overflow-hidden rounded-lg border border-ods-border">
370
402
  {/* Header */}
371
403
  <div className="flex items-center gap-3 bg-ods-card p-4">
372
- <div className="h-8 w-8 animate-pulse rounded bg-ods-skeleton"></div>
404
+ <UnifiedSkeleton className="h-8 w-8 rounded" />
373
405
  <div className="flex flex-col gap-1">
374
- <div className="h-4 w-20 animate-pulse rounded bg-ods-skeleton"></div>
375
- <div className="h-6 w-12 animate-pulse rounded bg-ods-skeleton"></div>
406
+ <UnifiedSkeleton className="h-4 w-20 rounded" />
407
+ <UnifiedSkeleton className="h-6 w-12 rounded" />
376
408
  </div>
377
409
  </div>
378
410
 
@@ -380,10 +412,10 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
380
412
  <div className="space-y-3 p-4">
381
413
  {Array.from({ length: 4 }).map((_, i) => (
382
414
  <div key={i} className="flex items-center gap-3">
383
- <div className="h-6 w-6 animate-pulse rounded bg-ods-skeleton"></div>
415
+ <UnifiedSkeleton className="h-6 w-6 rounded" />
384
416
  <div className="flex items-end gap-1">
385
- <div className="h-4 w-12 animate-pulse rounded bg-ods-skeleton"></div>
386
- <div className="h-3 w-8 animate-pulse rounded bg-ods-skeleton"></div>
417
+ <UnifiedSkeleton className="h-4 w-12 rounded" />
418
+ <UnifiedSkeleton className="h-3 w-8 rounded" />
387
419
  </div>
388
420
  </div>
389
421
  ))}
@@ -392,39 +424,33 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
392
424
 
393
425
  {/* Action Buttons */}
394
426
  <div className="space-y-3">
395
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
396
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
397
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
427
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
428
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
429
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
398
430
  </div>
399
431
  </div>
400
432
  </div>
401
433
 
402
434
  {/* Alternatives Container */}
403
435
  <div className="mb-20 flex flex-col gap-6">
404
- <div className="h-8 w-48 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
436
+ <UnifiedSkeleton className="h-8 w-48 rounded content-md:h-10" />
405
437
 
406
438
  {/* Open Source Alternatives */}
407
439
  <div className="flex flex-col gap-4">
408
- <div className="h-5 w-48 animate-pulse rounded bg-ods-skeleton"></div>
440
+ <UnifiedSkeleton className="h-5 w-48 rounded" />
409
441
  <div className="flex flex-wrap gap-2">
410
442
  {Array.from({ length: 6 }).map((_, i) => (
411
- <div
412
- key={i}
413
- className="h-10 w-24 animate-pulse rounded-lg border border-ods-border bg-ods-card"
414
- ></div>
443
+ <UnifiedSkeleton key={i} className="h-10 w-24 rounded-lg border border-ods-border" />
415
444
  ))}
416
445
  </div>
417
446
  </div>
418
447
 
419
448
  {/* Commercial Alternatives */}
420
449
  <div className="flex flex-col gap-4">
421
- <div className="h-5 w-52 animate-pulse rounded bg-ods-skeleton"></div>
450
+ <UnifiedSkeleton className="h-5 w-52 rounded" />
422
451
  <div className="flex flex-wrap gap-2">
423
452
  {Array.from({ length: 4 }).map((_, i) => (
424
- <div
425
- key={i}
426
- className="h-10 w-28 animate-pulse rounded-lg border border-ods-border bg-ods-card"
427
- ></div>
453
+ <UnifiedSkeleton key={i} className="h-10 w-28 rounded-lg border border-ods-border" />
428
454
  ))}
429
455
  </div>
430
456
  </div>
@@ -432,28 +458,28 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
432
458
 
433
459
  {/* About Section */}
434
460
  <div className="mb-20 flex flex-col gap-6">
435
- <div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
461
+ <UnifiedSkeleton className="h-8 w-64 rounded content-md:h-10" />
436
462
 
437
463
  <div className="rounded-lg border border-ods-border bg-ods-card p-6 content-md:p-8">
438
464
  <div className="space-y-4">
439
- <div className="h-6 animate-pulse rounded bg-ods-skeleton"></div>
440
- <div className="h-6 animate-pulse rounded bg-ods-skeleton"></div>
441
- <div className="h-6 w-5/6 animate-pulse rounded bg-ods-skeleton"></div>
442
- <div className="h-6 w-4/5 animate-pulse rounded bg-ods-skeleton"></div>
465
+ <UnifiedSkeleton className="h-6 rounded" />
466
+ <UnifiedSkeleton className="h-6 rounded" />
467
+ <UnifiedSkeleton className="h-6 w-5/6 rounded" />
468
+ <UnifiedSkeleton className="h-6 w-4/5 rounded" />
443
469
  </div>
444
470
  </div>
445
471
  </div>
446
472
 
447
473
  {/* Key Features Section */}
448
474
  <div className="mb-20 flex flex-col gap-6">
449
- <div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
475
+ <UnifiedSkeleton className="h-8 w-72 rounded content-md:h-10" />
450
476
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
451
477
  {Array.from({ length: 6 }).map((_, i) => (
452
478
  <div key={i} className="flex gap-4 rounded-lg border border-ods-border bg-ods-card p-4">
453
- <div className="h-12 w-12 flex-shrink-0 animate-pulse rounded bg-ods-skeleton"></div>
479
+ <UnifiedSkeleton className="h-12 w-12 flex-shrink-0 rounded" />
454
480
  <div className="flex-1 space-y-2">
455
- <div className="h-5 w-3/4 animate-pulse rounded bg-ods-skeleton"></div>
456
- <div className="h-4 animate-pulse rounded bg-ods-skeleton"></div>
481
+ <UnifiedSkeleton className="h-5 w-3/4 rounded" />
482
+ <UnifiedSkeleton className="h-4 rounded" />
457
483
  </div>
458
484
  </div>
459
485
  ))}
@@ -462,30 +488,30 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
462
488
 
463
489
  {/* Pros and Cons Section */}
464
490
  <div className="mb-20 flex flex-col gap-6">
465
- <div className="h-8 w-80 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
491
+ <UnifiedSkeleton className="h-8 w-80 rounded content-md:h-10" />
466
492
  <div className="grid grid-cols-1 gap-6 content-lg:grid-cols-2">
467
493
  {/* Pros Column */}
468
494
  <div className="flex flex-col gap-6">
469
- <div className="h-5 w-16 animate-pulse rounded bg-ods-skeleton"></div>
495
+ <UnifiedSkeleton className="h-5 w-16 rounded" />
470
496
  {Array.from({ length: 3 }).map((_, i) => (
471
497
  <div key={i} className="flex gap-3 rounded-lg border border-ods-border bg-ods-card p-4">
472
- <div className="h-12 w-12 flex-shrink-0 animate-pulse rounded border border-ods-border bg-ods-bg"></div>
498
+ <UnifiedSkeleton className="h-12 w-12 flex-shrink-0 rounded border border-ods-border" />
473
499
  <div className="flex-1 space-y-2">
474
- <div className="h-5 w-2/3 animate-pulse rounded bg-ods-skeleton"></div>
475
- <div className="h-4 animate-pulse rounded bg-ods-skeleton"></div>
500
+ <UnifiedSkeleton className="h-5 w-2/3 rounded" />
501
+ <UnifiedSkeleton className="h-4 rounded" />
476
502
  </div>
477
503
  </div>
478
504
  ))}
479
505
  </div>
480
506
  {/* Cons Column */}
481
507
  <div className="flex flex-col gap-6">
482
- <div className="h-5 w-16 animate-pulse rounded bg-ods-skeleton"></div>
508
+ <UnifiedSkeleton className="h-5 w-16 rounded" />
483
509
  {Array.from({ length: 3 }).map((_, i) => (
484
510
  <div key={i} className="flex gap-3 rounded-lg border border-ods-border bg-ods-card p-4">
485
- <div className="h-12 w-12 flex-shrink-0 animate-pulse rounded border border-ods-border bg-ods-bg"></div>
511
+ <UnifiedSkeleton className="h-12 w-12 flex-shrink-0 rounded border border-ods-border" />
486
512
  <div className="flex-1 space-y-2">
487
- <div className="h-5 w-2/3 animate-pulse rounded bg-ods-skeleton"></div>
488
- <div className="h-4 animate-pulse rounded bg-ods-skeleton"></div>
513
+ <UnifiedSkeleton className="h-5 w-2/3 rounded" />
514
+ <UnifiedSkeleton className="h-4 rounded" />
489
515
  </div>
490
516
  </div>
491
517
  ))}
@@ -495,42 +521,42 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
495
521
 
496
522
  {/* Alternatives Section */}
497
523
  <div className="mb-20 flex flex-col gap-6">
498
- <div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
524
+ <UnifiedSkeleton className="h-8 w-72 rounded content-md:h-10" />
499
525
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
500
526
  {Array.from({ length: 6 }).map((_, i) => (
501
527
  <div key={i} className="space-y-4 rounded-lg border border-ods-border bg-ods-card p-6">
502
528
  {/* Header */}
503
529
  <div className="flex items-start gap-4">
504
- <div className="h-16 w-16 flex-shrink-0 animate-pulse rounded-lg border border-ods-border bg-ods-bg"></div>
530
+ <UnifiedSkeleton className="h-16 w-16 flex-shrink-0 rounded-lg border border-ods-border" />
505
531
  <div className="flex-1 space-y-2">
506
- <div className="h-6 w-3/4 animate-pulse rounded bg-ods-skeleton"></div>
507
- <div className="h-4 w-1/2 animate-pulse rounded bg-ods-skeleton"></div>
532
+ <UnifiedSkeleton className="h-6 w-3/4 rounded" />
533
+ <UnifiedSkeleton className="h-4 w-1/2 rounded" />
508
534
  </div>
509
- <div className="h-6 w-20 animate-pulse rounded bg-ods-skeleton"></div>
535
+ <UnifiedSkeleton className="h-6 w-20 rounded" />
510
536
  </div>
511
537
 
512
538
  {/* Description */}
513
539
  <div className="space-y-2">
514
- <div className="h-4 animate-pulse rounded bg-ods-skeleton"></div>
515
- <div className="h-4 w-5/6 animate-pulse rounded bg-ods-skeleton"></div>
516
- <div className="h-4 w-4/5 animate-pulse rounded bg-ods-skeleton"></div>
540
+ <UnifiedSkeleton className="h-4 rounded" />
541
+ <UnifiedSkeleton className="h-4 w-5/6 rounded" />
542
+ <UnifiedSkeleton className="h-4 w-4/5 rounded" />
517
543
  </div>
518
544
 
519
545
  {/* Footer */}
520
546
  <div className="flex items-center justify-between border-t border-ods-border pt-2">
521
- <div className="h-4 w-16 animate-pulse rounded bg-ods-skeleton"></div>
522
- <div className="h-4 w-20 animate-pulse rounded bg-ods-skeleton"></div>
547
+ <UnifiedSkeleton className="h-4 w-16 rounded" />
548
+ <UnifiedSkeleton className="h-4 w-20 rounded" />
523
549
  </div>
524
550
  </div>
525
551
  ))}
526
552
  </div>
527
553
  {/* Show All Button */}
528
- <div className="h-12 animate-pulse rounded-md bg-ods-skeleton"></div>
554
+ <UnifiedSkeleton className="h-12 rounded-md" />
529
555
  </div>
530
556
 
531
557
  {/* Comments Section */}
532
558
  <div className="mb-20 flex flex-col gap-6">
533
- <div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
559
+ <UnifiedSkeleton className="h-8 w-64 rounded content-md:h-10" />
534
560
 
535
561
  {/* Comment Form Skeleton */}
536
562
  <div className="space-y-3">
@@ -538,24 +564,24 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
538
564
  <div className="flex-1 overflow-hidden rounded-lg border border-ods-border bg-ods-bg">
539
565
  {/* Title Section */}
540
566
  <div className="border-b border-ods-border p-3">
541
- <div className="mb-2 h-3 w-8 animate-pulse rounded bg-ods-skeleton"></div>
542
- <div className="h-6 w-full animate-pulse rounded bg-ods-skeleton"></div>
567
+ <UnifiedSkeleton className="mb-2 h-3 w-8 rounded" />
568
+ <UnifiedSkeleton className="h-6 w-full rounded" />
543
569
  </div>
544
570
 
545
571
  {/* Description Section */}
546
572
  <div className="p-3">
547
- <div className="mb-2 h-3 w-16 animate-pulse rounded bg-ods-skeleton"></div>
573
+ <UnifiedSkeleton className="mb-2 h-3 w-16 rounded" />
548
574
  <div className="space-y-2">
549
- <div className="h-4 w-full animate-pulse rounded bg-ods-skeleton"></div>
550
- <div className="h-4 w-3/4 animate-pulse rounded bg-ods-skeleton"></div>
551
- <div className="h-4 w-1/2 animate-pulse rounded bg-ods-skeleton"></div>
575
+ <UnifiedSkeleton className="h-4 w-full rounded" />
576
+ <UnifiedSkeleton className="h-4 w-3/4 rounded" />
577
+ <UnifiedSkeleton className="h-4 w-1/2 rounded" />
552
578
  </div>
553
579
  </div>
554
580
  </div>
555
581
 
556
582
  {/* Send Button */}
557
583
  <div className="flex items-stretch">
558
- <div className="h-[120px] w-20 animate-pulse rounded-lg bg-ods-skeleton"></div>
584
+ <UnifiedSkeleton className="h-[120px] w-20 rounded-lg" />
559
585
  </div>
560
586
  </div>
561
587
  </div>
@@ -569,22 +595,22 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
569
595
  <div className="flex items-center gap-2">
570
596
  {/* User Info */}
571
597
  <div className="flex items-center gap-2 rounded-lg border border-ods-border bg-ods-card px-3 py-2">
572
- <div className="h-8 w-8 animate-pulse rounded-lg bg-ods-skeleton"></div>
573
- <div className="h-4 w-20 animate-pulse rounded bg-ods-skeleton"></div>
598
+ <UnifiedSkeleton className="h-8 w-8 rounded-lg" />
599
+ <UnifiedSkeleton className="h-4 w-20 rounded" />
574
600
  </div>
575
601
 
576
602
  {/* Timestamp */}
577
- <div className="h-4 w-12 animate-pulse rounded bg-ods-skeleton"></div>
603
+ <UnifiedSkeleton className="h-4 w-12 rounded" />
578
604
  </div>
579
605
  </div>
580
606
 
581
607
  {/* Comment Content */}
582
608
  <div className="space-y-2">
583
- <div className="h-6 w-2/3 animate-pulse rounded bg-ods-skeleton"></div>
609
+ <UnifiedSkeleton className="h-6 w-2/3 rounded" />
584
610
  <div className="space-y-1">
585
- <div className="h-4 w-full animate-pulse rounded bg-ods-skeleton"></div>
586
- <div className="h-4 w-4/5 animate-pulse rounded bg-ods-skeleton"></div>
587
- <div className="h-4 w-3/5 animate-pulse rounded bg-ods-skeleton"></div>
611
+ <UnifiedSkeleton className="h-4 w-full rounded" />
612
+ <UnifiedSkeleton className="h-4 w-4/5 rounded" />
613
+ <UnifiedSkeleton className="h-4 w-3/5 rounded" />
588
614
  </div>
589
615
  </div>
590
616
  </div>
@@ -597,22 +623,22 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
597
623
  <div className="hidden w-[290px] flex-shrink-0 content-lg:block">
598
624
  <div className="space-y-4">
599
625
  {/* Deploy Button */}
600
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
626
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
601
627
 
602
628
  {/* Voting Buttons */}
603
629
  <div className="space-y-2">
604
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
605
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
630
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
631
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
606
632
  </div>
607
633
 
608
634
  {/* GitHub Score Section */}
609
635
  <div className="overflow-hidden rounded-lg border border-ods-border">
610
636
  {/* Header */}
611
637
  <div className="flex items-center gap-3 bg-ods-card p-4">
612
- <div className="h-8 w-8 animate-pulse rounded bg-ods-skeleton"></div>
638
+ <UnifiedSkeleton className="h-8 w-8 rounded" />
613
639
  <div className="flex flex-col gap-1">
614
- <div className="h-4 w-20 animate-pulse rounded bg-ods-skeleton"></div>
615
- <div className="h-6 w-12 animate-pulse rounded bg-ods-skeleton"></div>
640
+ <UnifiedSkeleton className="h-4 w-20 rounded" />
641
+ <UnifiedSkeleton className="h-6 w-12 rounded" />
616
642
  </div>
617
643
  </div>
618
644
 
@@ -620,10 +646,10 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
620
646
  <div className="space-y-3 p-4">
621
647
  {Array.from({ length: 4 }).map((_, i) => (
622
648
  <div key={i} className="flex items-center gap-3">
623
- <div className="h-6 w-6 animate-pulse rounded bg-ods-skeleton"></div>
649
+ <UnifiedSkeleton className="h-6 w-6 rounded" />
624
650
  <div className="flex items-end gap-1">
625
- <div className="h-4 w-12 animate-pulse rounded bg-ods-skeleton"></div>
626
- <div className="h-3 w-8 animate-pulse rounded bg-ods-skeleton"></div>
651
+ <UnifiedSkeleton className="h-4 w-12 rounded" />
652
+ <UnifiedSkeleton className="h-3 w-8 rounded" />
627
653
  </div>
628
654
  </div>
629
655
  ))}
@@ -632,15 +658,15 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
632
658
 
633
659
  {/* Action Buttons */}
634
660
  <div className="space-y-3">
635
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
636
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
637
- <div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
661
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
662
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
663
+ <UnifiedSkeleton className="h-12 rounded-lg border border-ods-border" />
638
664
  </div>
639
665
  </div>
640
666
  </div>
641
667
  </div>
642
668
  </div>
643
- </main>
669
+ </LoadingRegion>
644
670
  );
645
671
  }
646
672
 
@@ -677,10 +703,10 @@ export function StatsSectionSkeleton({ className, columns = 3 }: PageLayoutSkele
677
703
  * Blog Card Grid Skeleton - Always displays exactly 4 blog card skeletons
678
704
  * Used for consistent blog page layout with predictable height
679
705
  */
680
- export function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {
706
+ export function BlogCardGridSkeleton({ className, region = true }: LoadingLayoutProps) {
681
707
  return (
682
708
  <div className={cn('space-y-6', className)}>
683
- <CardSkeletonGrid count={4} variant="blog" className="grid-cols-1 content-md:grid-cols-2" />
709
+ <CardSkeletonGrid count={4} variant="blog" region={region} className="grid-cols-1 content-md:grid-cols-2" />
684
710
  </div>
685
711
  );
686
712
  }
@@ -689,12 +715,13 @@ export function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {
689
715
  * Vendor Grid Skeleton - Always displays exactly 12 vendor card skeletons
690
716
  * Used for consistent vendor page layout with predictable height
691
717
  */
692
- export function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {
718
+ export function VendorGridSkeleton({ className, region = true }: LoadingLayoutProps) {
693
719
  return (
694
720
  <div className={cn('space-y-6', className)}>
695
721
  <CardSkeletonGrid
696
722
  count={12}
697
723
  variant="vendor"
724
+ region={region}
698
725
  className="grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-3"
699
726
  />
700
727
  </div>
@@ -705,42 +732,44 @@ export function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {
705
732
  * Slack Community Section Skeleton
706
733
  * Matches SlackCommunity component structure with title, channel list, and chat interface
707
734
  */
708
- export function SlackCommunitySkeleton() {
735
+ export function SlackCommunitySkeleton({ region = true }: { region?: boolean } = {}) {
709
736
  return (
710
- <section
737
+ <LoadingRegion
738
+ label="Loading the Slack community"
739
+ as="section"
740
+ announce={region}
711
741
  className="w-full bg-ods-bg px-4 py-12 content-md:px-20 content-md:py-20 content-lg:px-20"
712
- aria-label="Slack Community Loading"
713
742
  >
714
743
  {/* Frame 651 Container */}
715
744
  <div className="flex w-full flex-col gap-4 content-md:gap-6">
716
745
  {/* Title Skeleton */}
717
746
  <div className="w-full">
718
- <div className="h-8 max-w-md animate-pulse rounded-lg bg-ods-skeleton content-md:h-12 content-lg:h-14"></div>
747
+ <UnifiedSkeleton className="h-8 max-w-md rounded-lg content-md:h-12 content-lg:h-14" />
719
748
  </div>
720
749
 
721
750
  {/* Content Area - Channel List + Chat Interface */}
722
751
  <div className="flex w-full min-w-0 flex-col gap-4 content-md:gap-6 content-lg:flex-row content-lg:items-start content-lg:justify-end">
723
752
  {/* Channel List Skeleton */}
724
- <div className="flex w-full flex-shrink-0 animate-pulse flex-col overflow-hidden rounded border border-ods-border bg-ods-bg content-lg:w-[290px] content-lg:max-w-[290px]">
753
+ <div className="flex w-full flex-shrink-0 flex-col overflow-hidden rounded border border-ods-border bg-ods-bg content-lg:w-[290px] content-lg:max-w-[290px]">
725
754
  <div className="space-y-4 p-4">
726
755
  {/* Header */}
727
756
  <div className="flex flex-col gap-2">
728
757
  <div className="flex items-center justify-between">
729
- <div className="h-4 w-24 rounded bg-ods-skeleton"></div>
730
- <div className="h-3 w-16 rounded bg-ods-skeleton"></div>
758
+ <UnifiedSkeleton className="h-4 w-24 rounded" />
759
+ <UnifiedSkeleton className="h-3 w-16 rounded" />
731
760
  </div>
732
- <div className="h-3 w-32 rounded bg-ods-skeleton"></div>
761
+ <UnifiedSkeleton className="h-3 w-32 rounded" />
733
762
  </div>
734
763
 
735
764
  {/* Channels */}
736
765
  <div className="flex flex-col gap-1">
737
- <div className="mb-2 h-3 w-16 rounded bg-ods-skeleton"></div>
766
+ <UnifiedSkeleton className="mb-2 h-3 w-16 rounded" />
738
767
  {Array.from({ length: 5 }).map((_, i) => (
739
768
  <div key={i} className="flex min-h-[48px] items-center gap-2 px-2 py-3">
740
- <div className="h-4 w-4 rounded bg-ods-skeleton"></div>
769
+ <UnifiedSkeleton className="h-4 w-4 rounded" />
741
770
  <div className="flex-1">
742
- <div className="mb-1 h-3 w-24 rounded bg-ods-skeleton"></div>
743
- <div className="h-2 w-16 rounded bg-ods-skeleton"></div>
771
+ <UnifiedSkeleton className="mb-1 h-3 w-24 rounded" />
772
+ <UnifiedSkeleton className="h-2 w-16 rounded" />
744
773
  </div>
745
774
  </div>
746
775
  ))}
@@ -750,12 +779,12 @@ export function SlackCommunitySkeleton() {
750
779
  <div className="mt-2 border-t border-ods-border pt-3">
751
780
  <div className="space-y-2">
752
781
  <div className="flex justify-between">
753
- <div className="h-3 w-16 rounded bg-ods-skeleton"></div>
754
- <div className="h-3 w-8 rounded bg-ods-skeleton"></div>
782
+ <UnifiedSkeleton className="h-3 w-16 rounded" />
783
+ <UnifiedSkeleton className="h-3 w-8 rounded" />
755
784
  </div>
756
785
  <div className="flex justify-between">
757
- <div className="h-3 w-20 rounded bg-ods-skeleton"></div>
758
- <div className="h-3 w-8 rounded bg-ods-skeleton"></div>
786
+ <UnifiedSkeleton className="h-3 w-20 rounded" />
787
+ <UnifiedSkeleton className="h-3 w-8 rounded" />
759
788
  </div>
760
789
  </div>
761
790
  </div>
@@ -763,27 +792,27 @@ export function SlackCommunitySkeleton() {
763
792
  </div>
764
793
 
765
794
  {/* Chat Interface Skeleton */}
766
- <div className="flex h-[450px] min-h-[450px] min-w-0 flex-1 animate-pulse flex-col rounded-lg border border-ods-border bg-ods-card content-md:h-[500px] content-md:min-h-[500px] content-lg:h-[600px] content-lg:min-h-[600px]">
795
+ <div className="flex h-[450px] min-h-[450px] min-w-0 flex-1 flex-col rounded-lg border border-ods-border bg-ods-card content-md:h-[500px] content-md:min-h-[500px] content-lg:h-[600px] content-lg:min-h-[600px]">
767
796
  {/* Header */}
768
797
  <div className="flex h-[56px] flex-shrink-0 items-center justify-between border-b border-ods-border bg-ods-bg p-4 content-md:h-[60px] content-md:p-6">
769
798
  <div className="flex items-center gap-2">
770
- <div className="h-3 w-3 rounded bg-ods-skeleton content-md:h-4 content-md:w-4"></div>
771
- <div className="h-3 w-24 rounded bg-ods-skeleton content-md:h-4 content-md:w-32"></div>
799
+ <UnifiedSkeleton className="h-3 w-3 rounded content-md:h-4 content-md:w-4" />
800
+ <UnifiedSkeleton className="h-3 w-24 rounded content-md:h-4 content-md:w-32" />
772
801
  </div>
773
- <div className="h-3 w-12 rounded bg-ods-skeleton content-md:w-16"></div>
802
+ <UnifiedSkeleton className="h-3 w-12 rounded content-md:w-16" />
774
803
  </div>
775
804
 
776
805
  {/* Messages */}
777
806
  <div className="min-h-[280px] flex-1 space-y-3 overflow-hidden bg-ods-bg p-4 content-md:min-h-[320px] content-md:space-y-4 content-md:p-6 content-lg:min-h-[420px]">
778
807
  {Array.from({ length: 6 }).map((_, i) => (
779
808
  <div key={i} className="flex gap-2 content-md:gap-3">
780
- <div className="h-10 w-10 flex-shrink-0 rounded-lg bg-ods-skeleton content-md:h-12 content-md:w-12"></div>
809
+ <UnifiedSkeleton className="h-10 w-10 flex-shrink-0 rounded-lg content-md:h-12 content-md:w-12" />
781
810
  <div className="flex-1">
782
811
  <div className="mb-1 flex items-center gap-2">
783
- <div className="h-3 w-16 rounded bg-ods-skeleton content-md:w-20"></div>
784
- <div className="h-3 w-12 rounded bg-ods-skeleton content-md:w-16"></div>
812
+ <UnifiedSkeleton className="h-3 w-16 rounded content-md:w-20" />
813
+ <UnifiedSkeleton className="h-3 w-12 rounded content-md:w-16" />
785
814
  </div>
786
- <div className="h-3 w-full rounded bg-ods-skeleton content-md:h-4"></div>
815
+ <UnifiedSkeleton className="h-3 w-full rounded content-md:h-4" />
787
816
  </div>
788
817
  </div>
789
818
  ))}
@@ -792,12 +821,12 @@ export function SlackCommunitySkeleton() {
792
821
  {/* Input Area */}
793
822
  <div className="h-[72px] flex-shrink-0 border-t border-ods-border bg-ods-card p-4 content-md:h-[80px] content-md:p-6">
794
823
  <div className="flex items-end justify-center gap-3 content-md:justify-end">
795
- <div className="h-10 w-28 rounded-lg bg-ods-skeleton content-md:h-12 content-md:w-32"></div>
824
+ <UnifiedSkeleton className="h-10 w-28 rounded-lg content-md:h-12 content-md:w-32" />
796
825
  </div>
797
826
  </div>
798
827
  </div>
799
828
  </div>
800
829
  </div>
801
- </section>
830
+ </LoadingRegion>
802
831
  );
803
832
  }