@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
@@ -4,6 +4,7 @@ import { Check } from 'lucide-react';
4
4
  import type React from 'react';
5
5
  import { useEffect, useRef } from 'react';
6
6
  import { UnifiedSkeleton } from '../loading';
7
+ import { LoadingRegion } from '../loading/loading-region';
7
8
  import { Badge, Input } from '../ui';
8
9
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip';
9
10
 
@@ -78,32 +79,40 @@ interface PushButtonSelectorProps<Id extends SelectableOptionId = string> {
78
79
  footer?: React.ReactNode;
79
80
  }
80
81
 
81
- // Composed from the app-wide UnifiedSkeleton system (components/loading) —
82
- // the same base every other loading surface uses (bg-ods-skeleton pulse,
83
- // prefers-reduced-motion support, role="status" a11y). Each skeleton row
82
+ // Composed from the app-wide UnifiedSkeleton system (components/loading),
83
+ // announced once by its LoadingRegion. Each skeleton row
84
84
  // mirrors a LOADED option row exactly (bg-ods-bg card, p-4, icon + two
85
85
  // 20px-tall text lines + selection box) so the list never jumps on load.
86
- function PushButtonSelectorSkeleton({ count = 3, hasTitle }: { count?: number; hasTitle?: boolean }) {
86
+ function PushButtonSelectorSkeleton({
87
+ region = true,
88
+ count = 3,
89
+ hasTitle,
90
+ }: {
91
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
92
+ region?: boolean;
93
+ count?: number;
94
+ hasTitle?: boolean;
95
+ }) {
87
96
  return (
88
- <div className="space-y-3" role="status" aria-label="Loading options">
89
- {hasTitle && <UnifiedSkeleton className="h-5 w-20" aria-label="Loading title" />}
97
+ <LoadingRegion label="Loading options" announce={region} className="space-y-3">
98
+ {hasTitle && <UnifiedSkeleton className="h-5 w-20" />}
90
99
  <div className="space-y-3">
91
100
  {Array.from({ length: count }, (_, i) => (
92
101
  <div key={i} className="rounded-lg border border-ods-border bg-ods-bg p-4">
93
102
  <div className="flex items-center justify-between gap-4">
94
103
  <div className="flex items-center gap-3">
95
- <UnifiedSkeleton className="h-8 w-8" aria-label="Loading icon" />
104
+ <UnifiedSkeleton className="h-8 w-8" />
96
105
  <div>
97
- <UnifiedSkeleton variant="text" className="mb-2 h-4 w-24" aria-label="Loading name" />
98
- <UnifiedSkeleton variant="text" className="h-4 w-36" aria-label="Loading description" />
106
+ <UnifiedSkeleton variant="text" className="mb-2 h-4 w-24" />
107
+ <UnifiedSkeleton variant="text" className="h-4 w-36" />
99
108
  </div>
100
109
  </div>
101
- <UnifiedSkeleton className="h-6 w-6" aria-label="Loading selection state" />
110
+ <UnifiedSkeleton className="h-6 w-6" />
102
111
  </div>
103
112
  </div>
104
113
  ))}
105
114
  </div>
106
- </div>
115
+ </LoadingRegion>
107
116
  );
108
117
  }
109
118
 
@@ -11,9 +11,10 @@ import {
11
11
  Settings01Icon,
12
12
  } from '../../icons-v2-generated';
13
13
  import { PageLayout } from '../../layout/page-layout';
14
+ import { LoadingRegion } from '../../loading/loading-region';
15
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
14
16
  import { ActionsMenuDropdown, type ActionsMenuGroup } from '../../ui/actions-menu';
15
17
  import { Button } from '../../ui/button/button';
16
- import { Skeleton } from '../../ui/skeleton';
17
18
  import { TruncateText } from '../../ui/truncate-text';
18
19
  import { RemoteDesktopFullscreenToolbar } from './remote-desktop-fullscreen-toolbar';
19
20
 
@@ -206,27 +207,36 @@ export function RemoteDesktopView({
206
207
  }
207
208
 
208
209
  /** The page while the device is still loading: the header bar as placeholders over an empty screen. */
209
- export function RemoteDesktopViewSkeleton({ onBack }: Pick<RemoteDesktopViewProps, 'onBack'>) {
210
+ export function RemoteDesktopViewSkeleton({
211
+ onBack,
212
+ region = true,
213
+ }: Pick<RemoteDesktopViewProps, 'onBack'> & {
214
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
215
+ region?: boolean;
216
+ }) {
210
217
  return (
211
218
  <PageLayout className={PAGE_CLASS} backButton={onBack ? { label: 'Back', onClick: onBack } : undefined}>
212
- <div className={CONTROLS_BAR_CLASS}>
213
- <div className={CONTROLS_ROW_CLASS}>
214
- <div className="flex min-w-0 items-center gap-[var(--spacing-system-mf)]">
215
- <Skeleton className="h-9 w-9 flex-shrink-0 rounded-md" />
216
- <div className="flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]">
217
- <Skeleton className="h-5 w-48" />
218
- <Skeleton className="h-4 w-36" />
219
+ {/* `contents`: the page's own children stay its layout items; the region adds the one announcement. */}
220
+ <LoadingRegion label="Loading the remote session" announce={region} className="contents">
221
+ <div className={CONTROLS_BAR_CLASS}>
222
+ <div className={CONTROLS_ROW_CLASS}>
223
+ <div className="flex min-w-0 items-center gap-[var(--spacing-system-mf)]">
224
+ <UnifiedSkeleton className="h-9 w-9 flex-shrink-0 rounded-md" />
225
+ <div className="flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]">
226
+ <UnifiedSkeleton className="h-5 w-48" />
227
+ <UnifiedSkeleton className="h-4 w-36" />
228
+ </div>
229
+ </div>
230
+ <div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)]">
231
+ <UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
232
+ <UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
233
+ <UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
219
234
  </div>
220
- </div>
221
- <div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)]">
222
- <Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
223
- <Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
224
- <Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
225
235
  </div>
226
236
  </div>
227
- </div>
228
237
 
229
- <div className="min-h-0 min-w-0 flex-1 rounded-lg bg-black" />
238
+ <div className="min-h-0 min-w-0 flex-1 rounded-lg bg-black" />
239
+ </LoadingRegion>
230
240
  </PageLayout>
231
241
  );
232
242
  }
@@ -14,6 +14,7 @@ import type { FormRescueDefinition } from '../../utils/form-rescue';
14
14
  import { hasGenericEmailDomain } from '../../utils/generic-domain-utils';
15
15
  import type { HumanitySignals } from '../../utils/humanity-signals';
16
16
  import { OpenframeLogoIcon } from '../icons-v2-generated/logos/openframe-logo-icon';
17
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
17
18
  import { Button } from '../ui/button';
18
19
  import { CheckboxBlock } from '../ui/checkbox-block';
19
20
  import { HoneypotField } from '../ui/honeypot-field';
@@ -201,16 +202,16 @@ export function WaitlistForm({
201
202
  )}
202
203
  >
203
204
  {/* Email input skeleton */}
204
- <div className="h-12 w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-card" />
205
+ <UnifiedSkeleton className="h-12 w-full rounded-[6px] border border-ods-border" />
205
206
  {/* Phone input skeleton */}
206
207
  <div className="flex w-full gap-[var(--spacing-system-xs)]">
207
- <div className="h-12 w-[130px] shrink-0 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" />
208
- <div className="h-12 flex-1 animate-pulse rounded-[6px] border border-ods-border bg-ods-card" />
208
+ <UnifiedSkeleton className="h-12 w-[130px] shrink-0 rounded-[6px] border border-ods-border" />
209
+ <UnifiedSkeleton className="h-12 flex-1 rounded-[6px] border border-ods-border" />
209
210
  </div>
210
211
  {/* Disclaimer + button skeleton */}
211
212
  <div className="flex w-full flex-col items-end gap-[var(--spacing-system-m)]">
212
- <div className="w-full animate-pulse rounded-[6px] border border-ods-border bg-ods-bg px-4 py-6" />
213
- <div className="h-12 w-[200px] animate-pulse rounded-[6px] border border-ods-border bg-ods-card" />
213
+ <UnifiedSkeleton className="h-auto w-full rounded-[6px] border border-ods-border px-4 py-6" />
214
+ <UnifiedSkeleton className="h-12 w-[200px] rounded-[6px] border border-ods-border" />
214
215
  </div>
215
216
  </div>
216
217
  );
@@ -59,6 +59,7 @@ import { WindowsLogoGreyIcon } from '../icons-v2-generated/brand-logos/windows-l
59
59
  import { Download01Icon } from '../icons-v2-generated/interface/download-01-icon';
60
60
  import { PageShell } from '../layout/article-detail-layout';
61
61
  import { PageLayout } from '../layout/page-layout';
62
+ import { LoadingRegion } from '../loading/loading-region';
62
63
  import { UnifiedSkeleton } from '../loading/unified-skeleton';
63
64
  import { Button } from '../ui/button/button';
64
65
  import { LoadError } from '../ui/error-state';
@@ -248,7 +249,7 @@ function WebCard({ web }: { web: DownloadAppsWebOption }) {
248
249
  /** A section's cards while the server's answer loads: the same grid and card frame, a button's box in each. */
249
250
  function CardsSkeleton({ label }: { label: string }) {
250
251
  return (
251
- <div className={CARDS_GRID_CLASS} aria-busy="true" aria-label={label}>
252
+ <LoadingRegion label={label} className={CARDS_GRID_CLASS}>
252
253
  {[0, 1].map(card => (
253
254
  <div key={card} className={CARD_CLASS}>
254
255
  <UnifiedSkeleton className="h-6 w-32 rounded" />
@@ -256,7 +257,7 @@ function CardsSkeleton({ label }: { label: string }) {
256
257
  <UnifiedSkeleton className="h-14 w-full rounded-md" />
257
258
  </div>
258
259
  ))}
259
- </div>
260
+ </LoadingRegion>
260
261
  );
261
262
  }
262
263
 
@@ -376,10 +376,14 @@ export function TrustCenterPageSkeleton({
376
376
  backButton = false,
377
377
  title = TRUST_CENTER_TITLE,
378
378
  subtitle = TRUST_CENTER_TAGLINE,
379
- }: Pick<TrustCenterPageProps, 'shell' | 'backButton' | 'title' | 'subtitle'>) {
379
+ region = true,
380
+ }: Pick<TrustCenterPageProps, 'shell' | 'backButton' | 'title' | 'subtitle'> & {
381
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
382
+ region?: boolean;
383
+ }) {
380
384
  return (
381
385
  <TrustCenterChrome shell={shell} title={title} subtitle={subtitle} backButton={backButton}>
382
- <TrustCenterSkeleton />
386
+ <TrustCenterSkeleton region={region} />
383
387
  </TrustCenterChrome>
384
388
  );
385
389
  }
@@ -46,6 +46,7 @@ import { ShieldCheckIcon } from '../icons-v2-generated/security/shield-check-ico
46
46
  import { CheckIcon } from '../icons-v2-generated/signs-and-symbols/check-icon';
47
47
  import { SECTION_HEADING_CLASS } from '../layout/page-heading';
48
48
  import { ListEmptyState } from '../list-empty-state';
49
+ import { LoadingRegion } from '../loading/loading-region';
49
50
  import { TextSkeleton, UnifiedSkeleton } from '../loading/unified-skeleton';
50
51
  import { Button } from '../ui/button/button';
51
52
  import { ComplianceLogo } from '../ui/compliance-badge';
@@ -666,7 +667,12 @@ function SectionRailSkeleton() {
666
667
  * the content replaces it. The status row, then Compliance, Controls and
667
668
  * Documents (what fills the first screens), beside the section rail.
668
669
  */
669
- export function TrustCenterSkeleton() {
670
+ export function TrustCenterSkeleton({
671
+ region = true,
672
+ }: {
673
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
674
+ region?: boolean;
675
+ } = {}) {
670
676
  return (
671
677
  <>
672
678
  <div className={TRUST_STATUS_ROW_CLASS} aria-hidden="true">
@@ -683,7 +689,7 @@ export function TrustCenterSkeleton() {
683
689
  <TextSkeleton.Body className="w-44" />
684
690
  </div>
685
691
  </div>
686
- <div className={TRUST_BODY_GRID_CLASS} aria-busy="true" aria-label="Loading the trust center">
692
+ <LoadingRegion label="Loading the trust center" announce={region} className={TRUST_BODY_GRID_CLASS}>
687
693
  <div className={TRUST_SECTIONS_COLUMN_CLASS}>
688
694
  <SkeletonSection id="compliance">
689
695
  <StackedRowsPanel rows={skeletonRows(3, { mark: 'logo', action: 'badge' })} />
@@ -698,7 +704,7 @@ export function TrustCenterSkeleton() {
698
704
  <aside className="hidden content-lg:block" aria-hidden="true">
699
705
  <SectionRailSkeleton />
700
706
  </aside>
701
- </div>
707
+ </LoadingRegion>
702
708
  </>
703
709
  );
704
710
  }
@@ -18,7 +18,6 @@ export * from './comment-card';
18
18
  export * from './comment-composer';
19
19
  export * from './comment-thread';
20
20
  export * from './content-loading-container';
21
- export * from './dynamic-skeleton';
22
21
  export * from './empty-state';
23
22
  export * from './list-empty-state';
24
23
  export * from './faq-accordion';
@@ -57,7 +56,6 @@ export * from './social-icon-row';
57
56
  export * from './user-display';
58
57
  export * from './vendor-display-button';
59
58
  export * from './vendor-icon';
60
- export * from './vendor-page-skeleton';
61
59
  export * from './vendor-tag';
62
60
  export * from './why-it-matters';
63
61
  export * from './yes-no-display';
@@ -84,6 +84,7 @@
84
84
  import type React from 'react';
85
85
  import { useIsTruncated } from '../../hooks/ui/use-is-truncated';
86
86
  import { cn } from '../../utils/cn';
87
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
87
88
  import type { ActionsMenuGroup } from '../ui/actions-menu';
88
89
  import { EntityImage } from '../ui/entity-image';
89
90
  import { FloatingTooltip } from '../ui/floating-tooltip';
@@ -159,21 +160,14 @@ export interface TitleBlockProps {
159
160
  }
160
161
 
161
162
  /**
162
- * Inline text skeleton — used only in `loading` mode, placed directly inside the real
163
- * `h1`/`p`. It is a single `inline-block` bar whose height is intentionally SHORTER than the
164
- * typography line-height, and it uses the default baseline alignment. That way the element's
163
+ * The inline text skeleton, used only in `loading` mode, placed directly inside the real
164
+ * `h1`/`p`: a single `inline-block` `UnifiedSkeleton` span whose height is intentionally SHORTER
165
+ * than the typography line-height, on the default baseline alignment. That way the element's
165
166
  * own line-box STRUT (text-h2 → 40px, text-h6 → 20px) sets the height exactly as it would for
166
- * real text — the bar fits within the ascent and never inflates the line. So a loading header
167
+ * real text: the bar fits within the ascent and never inflates the line. So a loading header
167
168
  * is pixel-identical in height to the loaded one. Phrasing-valid (`span` only).
168
169
  */
169
- function TitleTextSkeleton({ widthClass, heightClass }: { widthClass: string; heightClass: string }) {
170
- return (
171
- <span
172
- aria-hidden
173
- className={cn('inline-block max-w-full animate-pulse rounded-md bg-ods-border', widthClass, heightClass)}
174
- />
175
- );
176
- }
170
+ const TITLE_TEXT_SKELETON_CLASS = 'inline-block max-w-full rounded-md';
177
171
 
178
172
  /**
179
173
  * Bar geometry per title size, following the ODS type scale across breakpoints
@@ -184,7 +178,7 @@ function TitleTextSkeleton({ widthClass, heightClass }: { widthClass: string; he
184
178
  * 32/40 from tablet up. `text-h1` scales at both breakpoints (40 → 48 → 56), so
185
179
  * its bar does too — reusing the h2 bar there would leave a stamp-sized smudge
186
180
  * inside a 64px line. Heights stay well under the line box's ascent on purpose;
187
- * see `TitleTextSkeleton` for why that is what keeps the header height honest.
181
+ * see `TITLE_TEXT_SKELETON_CLASS` for why that is what keeps the header height honest.
188
182
  */
189
183
  const TITLE_SKELETON_SIZE = {
190
184
  h1: { width: 'w-56 content-md:w-80 content-lg:w-96', height: 'h-7 content-md:h-8 content-lg:h-9' },
@@ -226,7 +220,11 @@ export function TitleBlock({
226
220
  loading ? null : subtitle,
227
221
  );
228
222
  const titleNode = loading ? (
229
- <TitleTextSkeleton widthClass={skeletonSize.width} heightClass={skeletonSize.height} />
223
+ <UnifiedSkeleton
224
+ as="span"
225
+ aria-hidden
226
+ className={cn(TITLE_TEXT_SKELETON_CLASS, skeletonSize.width, skeletonSize.height)}
227
+ />
230
228
  ) : (
231
229
  title
232
230
  );
@@ -307,7 +305,11 @@ export function TitleBlock({
307
305
  aria-hidden={!loading && !subtitle ? true : undefined}
308
306
  >
309
307
  {loading ? (
310
- <TitleTextSkeleton widthClass="w-28 content-md:w-36" heightClass="h-2.5 content-md:h-3" />
308
+ <UnifiedSkeleton
309
+ as="span"
310
+ aria-hidden
311
+ className={cn(TITLE_TEXT_SKELETON_CLASS, 'h-2.5 w-28 content-md:h-3 content-md:w-36')}
312
+ />
311
313
  ) : (
312
314
  subtitle || '\u00A0'
313
315
  )}
@@ -1,12 +1,13 @@
1
1
  import { cn } from '../../utils/cn';
2
- import { TextSkeleton, MediaSkeleton, InteractiveSkeleton } from './unified-skeleton';
2
+ import { LoadingRegion } from './loading-region';
3
+ import { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from './unified-skeleton';
3
4
 
4
5
  interface CardSkeletonProps {
5
6
  className?: string;
6
7
  /**
7
8
  * Card layout variant
8
9
  */
9
- variant?: 'vendor' | 'blog' | 'category' | 'alternative';
10
+ variant?: 'vendor' | 'blog' | 'alternative';
10
11
  /**
11
12
  * Show action buttons area
12
13
  */
@@ -24,9 +25,10 @@ interface CardSkeletonProps {
24
25
  *
25
26
  * Supports different card types used across the application:
26
27
  * - vendor: Vendor cards with logo, title, description, and actions
27
- * - blog: Blog post cards with image, title, summary, and metadata
28
- * - category: Category cards with icon, title, and description
28
+ * - blog: Blog post cards with image, title, summary, and metadata
29
29
  * - alternative: Alternative vendor cards in comparison lists
30
+ *
31
+ * A category card's loading box is `CategoryCardSkeleton`.
30
32
  */
31
33
  export function CardSkeleton({
32
34
  className,
@@ -39,7 +41,6 @@ export function CardSkeleton({
39
41
  const cardContent = {
40
42
  vendor: <VendorCardContent showMetadata={showMetadata} />,
41
43
  blog: <BlogCardContent showActions={showActions} showMetadata={showMetadata} />,
42
- category: <CategoryCardContent />,
43
44
  alternative: <AlternativeCardContent showActions={showActions} />,
44
45
  };
45
46
 
@@ -53,8 +54,6 @@ export function CardSkeleton({
53
54
  variant === 'vendor' && 'flex h-full flex-col',
54
55
  className,
55
56
  )}
56
- role="status"
57
- aria-label={`Loading ${variant} card`}
58
57
  {...props}
59
58
  >
60
59
  {cardContent[variant]}
@@ -181,7 +180,7 @@ function BlogCardContent({ showActions, showMetadata }: { showActions: boolean;
181
180
  <div className="flex shrink-0 items-center gap-3 text-ods-text-muted">
182
181
  <TextSkeleton.Caption className="w-12" />
183
182
  {/* Separator dot */}
184
- <div className="h-1 w-1 rounded-full bg-ods-skeleton"></div>
183
+ <UnifiedSkeleton variant="circular" className="h-1 w-1" />
185
184
  <TextSkeleton.Caption className="w-16" />
186
185
  </div>
187
186
  </div>
@@ -192,39 +191,6 @@ function BlogCardContent({ showActions, showMetadata }: { showActions: boolean;
192
191
  );
193
192
  }
194
193
 
195
- /**
196
- * Category card skeleton content
197
- */
198
- function CategoryCardContent() {
199
- return (
200
- <div className="space-y-4 p-4 content-md:p-6">
201
- {/* Icon grid */}
202
- <div className="flex gap-2 content-md:gap-3">
203
- {Array.from({ length: 6 }).map((_, index) => (
204
- <MediaSkeleton.Icon key={index} size="lg" className="flex-shrink-0" />
205
- ))}
206
- </div>
207
-
208
- {/* Content */}
209
- <div className="space-y-2">
210
- <div className="space-y-1">
211
- <TextSkeleton.Subheading className="w-3/4" />
212
- <TextSkeleton.Caption className="w-1/2" />
213
- </div>
214
-
215
- <div className="flex items-start justify-between gap-4 content-md:items-end content-md:gap-6">
216
- <div className="flex-1 space-y-2">
217
- <TextSkeleton.Body className="w-full" />
218
- <TextSkeleton.Body className="w-2/3" />
219
- </div>
220
-
221
- <InteractiveSkeleton.Button className="h-10 w-10 flex-shrink-0 content-md:h-12 content-md:w-12" />
222
- </div>
223
- </div>
224
- </div>
225
- );
226
- }
227
-
228
194
  /**
229
195
  * Alternative card skeleton content (for vendor alternatives/comparisons)
230
196
  */
@@ -258,34 +224,36 @@ function AlternativeCardContent({ showActions }: { showActions: boolean }) {
258
224
  * Grid of card skeletons for loading lists
259
225
  */
260
226
  export function CardSkeletonGrid({
227
+ region = true,
261
228
  count = 6,
262
229
  variant = 'vendor',
263
230
  className,
264
231
  containerClassName,
265
232
  ...props
266
233
  }: {
234
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
235
+ region?: boolean;
267
236
  count?: number;
268
237
  variant?: CardSkeletonProps['variant'];
269
238
  className?: string;
270
239
  containerClassName?: string;
271
240
  } & Omit<CardSkeletonProps, 'variant'>) {
272
241
  return (
273
- <div
242
+ <LoadingRegion
243
+ label={`Loading ${variant} cards`}
244
+ announce={region}
274
245
  className={cn(
275
246
  'grid gap-4 content-md:gap-6',
276
247
  // Responsive grid based on card type
277
248
  variant === 'vendor' && 'grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-3',
278
249
  variant === 'blog' && 'grid-cols-1 content-md:grid-cols-2',
279
- variant === 'category' && 'grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-4',
280
250
  variant === 'alternative' && 'grid-cols-1',
281
251
  className,
282
252
  )}
283
- role="status"
284
- aria-label={`Loading ${count} ${variant} cards`}
285
253
  >
286
254
  {Array.from({ length: count }, (_, index) => (
287
255
  <CardSkeleton key={index} variant={variant} containerClassName={containerClassName} {...props} />
288
256
  ))}
289
- </div>
257
+ </LoadingRegion>
290
258
  );
291
259
  }
@@ -12,13 +12,11 @@ export function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {
12
12
  'box-border flex min-w-0 flex-col rounded-[12px] border border-ods-border bg-ods-card p-8',
13
13
  className,
14
14
  )}
15
- role="status"
16
- aria-label="Loading category card"
17
15
  >
18
16
  {/* Icons row */}
19
17
  <div className="mb-8 flex items-center justify-center gap-6">
20
18
  {Array.from({ length: 10 }).map((_, i) => (
21
- <UnifiedSkeleton key={i} variant="circular" className="h-10 w-10 flex-shrink-0" aria-label="Loading icon" />
19
+ <UnifiedSkeleton key={i} variant="circular" className="h-10 w-10 flex-shrink-0" />
22
20
  ))}
23
21
  </div>
24
22
 
@@ -31,7 +29,7 @@ export function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {
31
29
 
32
30
  {/* Arrow button placeholder */}
33
31
  <div className="mt-4 flex justify-end">
34
- <UnifiedSkeleton className="h-12 w-12 rounded-[6px]" aria-label="Loading button" />
32
+ <UnifiedSkeleton className="h-12 w-12 rounded-[6px]" />
35
33
  </div>
36
34
  </article>
37
35
  );
@@ -1,18 +1,25 @@
1
1
  import { cn } from '../../utils/cn';
2
+ import { LoadingRegion } from './loading-region';
2
3
  import { TextSkeleton, UnifiedSkeleton } from './unified-skeleton';
3
4
 
4
5
  interface CategoryVendorSelectorSkeletonProps {
6
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
7
+ region?: boolean;
5
8
  /** number of subcategory blocks to render */
6
9
  subcategories?: number;
7
10
  className?: string;
8
11
  }
9
12
 
10
- export function CategoryVendorSelectorSkeleton({ subcategories = 3, className }: CategoryVendorSelectorSkeletonProps) {
13
+ export function CategoryVendorSelectorSkeleton({
14
+ region = true,
15
+ subcategories = 3,
16
+ className,
17
+ }: CategoryVendorSelectorSkeletonProps) {
11
18
  return (
12
- <div
19
+ <LoadingRegion
20
+ label="Loading categories"
21
+ announce={region}
13
22
  className={cn('rounded-lg border border-ods-border bg-ods-card p-6', className)}
14
- role="status"
15
- aria-label="Loading category section"
16
23
  >
17
24
  {/* Header */}
18
25
  <div className="mb-6 max-w-xl space-y-2">
@@ -35,6 +42,6 @@ export function CategoryVendorSelectorSkeleton({ subcategories = 3, className }:
35
42
  </div>
36
43
  ))}
37
44
  </div>
38
- </div>
45
+ </LoadingRegion>
39
46
  );
40
47
  }