@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,68 +1,66 @@
1
1
  import { cn } from '../../utils/cn';
2
- import { OrganizationIconSkeleton } from './organization-icon-skeleton';
2
+ import { LoadingRegion } from './loading-region';
3
+ import { UnifiedSkeleton } from './unified-skeleton';
3
4
 
4
5
  export interface DeviceCardSkeletonProps {
5
6
  /**
6
7
  * Additional CSS classes
7
8
  */
8
9
  className?: string;
10
+ /** Hold `DeviceCard`'s "more" button (its `actions.moreButton`). Default `true`. */
11
+ moreButton?: boolean;
12
+ /**
13
+ * Hold the box of `DeviceCard`'s `actions.detailsButton.component` with these size classes
14
+ * (e.g. `'h-12 w-[88px]'`). Omit when the card has no details button.
15
+ */
16
+ detailsButtonClassName?: string;
9
17
  }
10
18
 
11
19
  /**
12
- * DeviceCardSkeleton - Loading skeleton matching DeviceCard exact layout
20
+ * DeviceCardSkeleton: the loading box of `DeviceCard` (`ui/device-card.tsx`), box for box:
21
+ * the same container classes, then
22
+ * - Row 1: the bordered device-icon box, the OS icon and name line (`text-h4`) over the
23
+ * organization line (`text-h6`), the bordered "more" button (`moreButton`) and/or the details
24
+ * button's box (`detailsButtonClassName`);
25
+ * - Row 2: the status tag (`Tag`'s `h-8`) and the "Last seen" line (`text-h6`).
13
26
  *
14
- * Matches the structure of DeviceCard:
15
- * - Row 1: Device icon + Device name + More button
16
- * - Row 2: OS badge + Organization icon + Organization name
17
- * - Row 3: Status badge + Last seen
18
- *
19
- * Prevents layout jumps by matching exact dimensions.
27
+ * The loaded card replaces it with no movement.
20
28
  */
21
- export function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {
29
+ export function DeviceCardSkeleton({ className, moreButton = true, detailsButtonClassName }: DeviceCardSkeletonProps) {
22
30
  return (
23
31
  <div
24
- className={cn('h-full rounded-[6px] border border-ods-border bg-ods-card', className)}
25
- role="status"
26
- aria-label="Loading device card"
32
+ className={cn(
33
+ 'overflow-clip rounded-[6px] border border-ods-border bg-ods-card',
34
+ 'flex flex-col gap-4 p-4',
35
+ className,
36
+ )}
27
37
  >
28
- {/* Row 1: Device icon + Device name + More button */}
29
- <div className="flex items-center gap-4 px-4 py-3">
30
- {/* Device type icon (8x8 container) */}
31
- <div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-[6px] border border-ods-border bg-ods-bg">
32
- <div className="h-4 w-4 animate-pulse rounded bg-ods-border" />
38
+ {/* Row 1: device icon | name over organization | more button */}
39
+ <div className="flex w-full items-center gap-4">
40
+ <div className="flex shrink-0 items-center justify-center rounded-[6px] border border-ods-border p-2">
41
+ <UnifiedSkeleton className="size-4 rounded" />
33
42
  </div>
34
-
35
- {/* Device name */}
36
- <div className="min-w-0 flex-1">
37
- <div className="h-6 w-3/4 animate-pulse rounded bg-ods-border" />
38
- </div>
39
-
40
- {/* More button */}
41
- <div className="h-12 w-12 flex-shrink-0 animate-pulse rounded-[6px] bg-ods-border" />
42
- </div>
43
-
44
- {/* Row 2: OS badge + Organization */}
45
- <div className="flex items-center gap-4 px-4 py-2">
46
- {/* OS badge */}
47
- <div className="h-6 w-24 flex-shrink-0 animate-pulse rounded bg-ods-border" />
48
-
49
- {/* Organization icon */}
50
- <OrganizationIconSkeleton size="sm" />
51
-
52
- {/* Organization name */}
53
- <div className="min-w-0 flex-1">
54
- <div className="h-5 w-1/2 animate-pulse rounded bg-ods-border" />
43
+ <div className="flex min-w-0 flex-1 flex-col justify-center">
44
+ {/* OS icon (16px) + name, one `text-h4` line */}
45
+ <div className="flex items-center gap-1 text-h4">
46
+ <UnifiedSkeleton className="size-4 shrink-0 rounded" />
47
+ <UnifiedSkeleton className="h-[1lh] w-3/4 rounded" />
48
+ </div>
49
+ <UnifiedSkeleton className="h-[1lh] w-1/2 rounded text-h6" />
55
50
  </div>
51
+ {moreButton && (
52
+ <div className="flex shrink-0 items-center justify-center rounded-[6px] border border-ods-border p-3">
53
+ <UnifiedSkeleton className="size-6 rounded" />
54
+ </div>
55
+ )}
56
+ {detailsButtonClassName && <UnifiedSkeleton className={cn('shrink-0 rounded-[6px]', detailsButtonClassName)} />}
56
57
  </div>
57
58
 
58
- {/* Row 3: Status badge + Last seen */}
59
- <div className="flex items-center gap-4 px-4 py-2">
60
- {/* Status badge */}
61
- <div className="h-6 w-20 flex-shrink-0 animate-pulse rounded-full bg-ods-border" />
62
-
63
- {/* Last seen */}
64
- <div className="flex-1">
65
- <div className="h-5 w-40 animate-pulse rounded bg-ods-border" />
59
+ {/* Row 2: status tag | last seen */}
60
+ <div className="flex w-full items-center gap-2">
61
+ <UnifiedSkeleton className="h-8 w-20 shrink-0 rounded-md" />
62
+ <div className="min-w-0 flex-1 text-h6">
63
+ <UnifiedSkeleton className="h-[1lh] w-40 max-w-full rounded" />
66
64
  </div>
67
65
  </div>
68
66
  </div>
@@ -78,16 +76,25 @@ export function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {
78
76
  * - Desktop (lg): 3 columns
79
77
  * - Large (xl): 4 columns
80
78
  */
81
- export function DeviceCardSkeletonGrid({ count = 12, className }: { count?: number; className?: string }) {
79
+ export function DeviceCardSkeletonGrid({
80
+ region = true,
81
+ count = 12,
82
+ className,
83
+ }: {
84
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
85
+ region?: boolean;
86
+ count?: number;
87
+ className?: string;
88
+ }) {
82
89
  return (
83
- <div
90
+ <LoadingRegion
91
+ label="Loading devices"
92
+ announce={region}
84
93
  className={cn('grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-4', className)}
85
- role="status"
86
- aria-label={`Loading ${count} device cards`}
87
94
  >
88
95
  {Array.from({ length: count }, (_, index) => (
89
96
  <DeviceCardSkeleton key={index} />
90
97
  ))}
91
- </div>
98
+ </LoadingRegion>
92
99
  );
93
100
  }
@@ -7,6 +7,7 @@ export {
7
7
  SearchContainerSkeleton,
8
8
  CategorySidebarSkeleton,
9
9
  BreadcrumbSkeleton,
10
+ BreadcrumbLinkSkeleton,
10
11
  ResultsHeaderSkeleton,
11
12
  TwoColumnLayoutSkeleton,
12
13
  ArticleLayoutSkeleton,
@@ -26,25 +27,13 @@ export { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } fro
26
27
  // New unified loading components
27
28
  export { ContentLoadingContainer, useContentLoading } from '../content-loading-container';
28
29
 
29
- // Content skeleton components
30
- export {
31
- ParagraphSkeleton,
32
- ListSkeleton,
33
- TableSkeleton,
34
- FormSkeleton,
35
- NavigationSkeleton,
36
- ProfileSkeleton,
37
- CommentSkeleton,
38
- FeatureListSkeleton,
39
- TimelineSkeleton,
40
- PricingSkeleton,
41
- } from './content-skeleton';
42
-
43
30
  // Profile system loading skeleton
44
31
  export { ProfileLoadingSkeleton } from '../profile/ProfileLoadingSkeleton';
45
32
 
46
33
  export { MspProfileFormSkeleton } from './msp-profile-form-skeleton';
47
34
 
35
+ export { SettingsFormSkeleton, type SettingsFormSkeletonProps } from './settings-form-skeleton';
36
+
48
37
  export { CategoryCardSkeleton } from './category-card-skeleton';
49
38
 
50
39
  export { CategoryVendorSelectorSkeleton } from './category-vendor-selector-skeleton';
@@ -56,12 +45,9 @@ export { WizardLayoutSkeleton } from './wizard-layout-skeleton';
56
45
  // export it here, otherwise server components that import this index will
57
46
  // break due to client-only code.
58
47
 
59
- export { MarginReportSkeleton } from './margin-report-skeleton';
60
-
61
- export { UsersGridSkeleton } from './users-grid-skeleton';
48
+ export { LoadingRegion, type LoadingRegionProps } from './loading-region';
62
49
 
63
- // Dynamic ODS-aware skeleton components
64
- export { DynamicSkeleton, SkeletonPresets, PlatformSkeletonContainer, ProgressiveSkeleton } from '../dynamic-skeleton';
50
+ export { MarginReportSkeleton } from './margin-report-skeleton';
65
51
 
66
52
  // Organization & Device skeleton components
67
53
  export { OrganizationIconSkeleton } from './organization-icon-skeleton';
@@ -0,0 +1,60 @@
1
+ import type { ElementType, HTMLAttributes, ReactNode } from 'react';
2
+
3
+ /**
4
+ * THE container of a loading state: the one thing a screen reader hears while it loads.
5
+ *
6
+ * Skeleton bars (`UnifiedSkeleton`, `TextHold`) are decoration and are hidden from assistive technology;
7
+ * a page with forty bars must not announce "loading" forty times. The region around them says it ONCE:
8
+ * `aria-busy` on the container, and one polite status with the label. Few screen readers honour
9
+ * `aria-busy` alone, so the status is what is actually read. When the content replaces the region, the
10
+ * status goes with it.
11
+ *
12
+ * Put it on the top of a loading state (a page's skeleton, a card grid's, a Suspense fallback), never on
13
+ * every card inside it: nested regions would announce again.
14
+ */
15
+ export interface LoadingRegionProps extends HTMLAttributes<HTMLElement> {
16
+ /** What is loading, read once by a screen reader. */
17
+ label?: string;
18
+ /** The container element, so the region keeps the layout element it replaces (a `section`, a `li`, a `span` in text). */
19
+ as?: ElementType;
20
+ /**
21
+ * `false`: only the container is drawn (no `aria-busy`, no status), for a loading state rendered inside
22
+ * another region, which announces for both. Components expose it as their `region` / `loadingRegion` prop.
23
+ * Default `true`.
24
+ */
25
+ announce?: boolean;
26
+ /**
27
+ * `false`: `aria-busy` without a status of its own, for a container whose loading is already announced by a
28
+ * status elsewhere (a table footer's "Loading more results"). Default `true`.
29
+ */
30
+ status?: boolean;
31
+ children?: ReactNode;
32
+ }
33
+
34
+ export function LoadingRegion({
35
+ label = 'Loading',
36
+ as: Tag = 'div',
37
+ announce = true,
38
+ status = true,
39
+ className,
40
+ children,
41
+ ...props
42
+ }: LoadingRegionProps) {
43
+ if (!announce) {
44
+ return (
45
+ <Tag className={className} {...props}>
46
+ {children}
47
+ </Tag>
48
+ );
49
+ }
50
+ return (
51
+ <Tag aria-busy="true" className={className} {...props}>
52
+ {status && (
53
+ <span role="status" aria-live="polite" className="sr-only">
54
+ {label}
55
+ </span>
56
+ )}
57
+ {children}
58
+ </Tag>
59
+ );
60
+ }
@@ -1,6 +1,10 @@
1
1
  import type React from 'react';
2
+ import { LoadingRegion } from './loading-region';
3
+ import { UnifiedSkeleton } from './unified-skeleton';
2
4
 
3
5
  interface MarginReportSkeletonProps {
6
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
7
+ region?: boolean;
4
8
  /** Enable pulse animation (default: true) */
5
9
  animate?: boolean;
6
10
  /** Optional explanation text shown above overlay content */
@@ -9,63 +13,70 @@ interface MarginReportSkeletonProps {
9
13
  overlayContent?: React.ReactNode;
10
14
  }
11
15
 
12
- export function MarginReportSkeleton({ animate = true, description, overlayContent }: MarginReportSkeletonProps) {
16
+ export function MarginReportSkeleton({
17
+ region = true,
18
+ animate = true,
19
+ description,
20
+ overlayContent,
21
+ }: MarginReportSkeletonProps) {
13
22
  return (
14
- <main className={`bg-ods-bg ${animate ? 'animate-pulse' : ''} relative min-h-screen`}>
23
+ <LoadingRegion
24
+ label="Loading the report"
25
+ as="main"
26
+ announce={region && !overlayContent}
27
+ className="relative min-h-screen bg-ods-bg"
28
+ >
15
29
  <div className="mx-auto max-w-[1920px] space-y-10 px-6 py-6 content-md:px-20 content-md:py-10">
16
30
  {/* Header */}
17
31
  <div className="space-y-3">
18
- <div className="h-10 w-72 rounded bg-ods-skeleton" />
19
- <div className="h-4 w-80 rounded bg-ods-skeleton" />
32
+ <UnifiedSkeleton className="h-10 w-72 rounded" animate={animate} />
33
+ <UnifiedSkeleton className="h-4 w-80 rounded" animate={animate} />
20
34
  </div>
21
35
 
22
36
  {/* Summary cards */}
23
37
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-3">
24
38
  {Array.from({ length: 3 }).map((_, i) => (
25
- <div key={i} className="h-32 rounded border border-ods-border bg-ods-card" />
39
+ <UnifiedSkeleton key={i} className="h-32 rounded border border-ods-border" animate={animate} />
26
40
  ))}
27
41
  </div>
28
42
 
29
43
  {/* MSP Profile & Report Info cards */}
30
44
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2">
31
45
  {/* MSP profile skeleton */}
32
- <div className="flex animate-pulse items-center gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
33
- <div className="h-14 w-14 rounded-lg bg-ods-skeleton" />
46
+ <div className="flex items-center gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
47
+ <UnifiedSkeleton className="h-14 w-14 rounded-lg" animate={animate} />
34
48
  <div className="flex-1 space-y-2">
35
- <div className="h-4 w-3/4 rounded bg-ods-skeleton" />
36
- <div className="h-3 w-1/2 rounded bg-ods-skeleton" />
49
+ <UnifiedSkeleton className="h-4 w-3/4 rounded" animate={animate} />
50
+ <UnifiedSkeleton className="h-3 w-1/2 rounded" animate={animate} />
37
51
  </div>
38
52
  </div>
39
53
 
40
54
  {/* Report info skeleton */}
41
- <div className="flex animate-pulse flex-col gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
55
+ <div className="flex flex-col gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
42
56
  <div className="flex items-center justify-between gap-4">
43
57
  <div className="flex items-center gap-2">
44
- <div className="h-10 w-10 rounded-lg bg-ods-skeleton" />
58
+ <UnifiedSkeleton className="h-10 w-10 rounded-lg" animate={animate} />
45
59
  <div className="space-y-1">
46
- <div className="h-4 w-32 rounded bg-ods-skeleton" />
47
- <div className="h-3 w-20 rounded bg-ods-skeleton" />
60
+ <UnifiedSkeleton className="h-4 w-32 rounded" animate={animate} />
61
+ <UnifiedSkeleton className="h-3 w-20 rounded" animate={animate} />
48
62
  </div>
49
63
  </div>
50
- <div className="h-6 w-36 rounded bg-ods-skeleton" />
64
+ <UnifiedSkeleton className="h-6 w-36 rounded" animate={animate} />
51
65
  </div>
52
- <div className="mt-4 h-4 w-40 rounded bg-ods-skeleton" />
66
+ <UnifiedSkeleton className="mt-4 h-4 w-40 rounded" animate={animate} />
53
67
  </div>
54
68
  </div>
55
69
 
56
70
  {/* Vendor solution lists (Commercial & Open-Source) */}
57
71
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2">
58
72
  {['Commercial Stack', 'Open-Source Stack'].map((label, idx) => (
59
- <div
60
- key={idx}
61
- className="flex animate-pulse flex-col overflow-hidden rounded-lg border border-ods-border bg-ods-card"
62
- >
73
+ <div key={idx} className="flex flex-col overflow-hidden rounded-lg border border-ods-border bg-ods-card">
63
74
  {/* list header */}
64
75
  <div className="flex items-center justify-between px-6 py-4">
65
- <div className="h-6 w-40 rounded bg-ods-skeleton" />
76
+ <UnifiedSkeleton className="h-6 w-40 rounded" animate={animate} />
66
77
  <div className="flex items-center gap-2">
67
- <div className="h-5 w-20 rounded bg-ods-skeleton" />
68
- <div className="h-4 w-10 rounded bg-ods-skeleton" />
78
+ <UnifiedSkeleton className="h-5 w-20 rounded" animate={animate} />
79
+ <UnifiedSkeleton className="h-4 w-10 rounded" animate={animate} />
69
80
  </div>
70
81
  </div>
71
82
 
@@ -78,16 +89,16 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
78
89
  >
79
90
  {/* left section: icon + text */}
80
91
  <div className="flex min-w-0 items-center gap-3">
81
- <div className="h-12 w-12 flex-shrink-0 rounded-lg bg-ods-skeleton" />
92
+ <UnifiedSkeleton className="h-12 w-12 flex-shrink-0 rounded-lg" animate={animate} />
82
93
  <div className="flex min-w-0 flex-col">
83
- <div className="h-4 w-32 rounded bg-ods-skeleton" />
84
- <div className="mt-1 hidden h-3 w-24 rounded bg-ods-skeleton content-md:block" />
94
+ <UnifiedSkeleton className="h-4 w-32 rounded" animate={animate} />
95
+ <UnifiedSkeleton className="mt-1 hidden h-3 w-24 rounded content-md:block" animate={animate} />
85
96
  </div>
86
97
  </div>
87
98
  {/* right addon: cost text */}
88
99
  <div className="flex flex-shrink-0 items-center gap-1">
89
- <div className="h-4 w-16 rounded bg-ods-skeleton" />
90
- <div className="h-3 w-8 rounded bg-ods-skeleton" />
100
+ <UnifiedSkeleton className="h-4 w-16 rounded" animate={animate} />
101
+ <UnifiedSkeleton className="h-3 w-8 rounded" animate={animate} />
91
102
  </div>
92
103
  </div>
93
104
  ))}
@@ -97,12 +108,12 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
97
108
  </div>
98
109
 
99
110
  {/* Strategic Recommendations header placeholder */}
100
- <div className="h-6 w-60 rounded bg-ods-skeleton" />
111
+ <UnifiedSkeleton className="h-6 w-60 rounded" animate={animate} />
101
112
 
102
113
  {/* Recommendations grid */}
103
114
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
104
115
  {Array.from({ length: 3 }).map((_, i) => (
105
- <div key={i} className="h-48 rounded border border-ods-border bg-ods-card" />
116
+ <UnifiedSkeleton key={i} className="h-48 rounded border border-ods-border" animate={animate} />
106
117
  ))}
107
118
  </div>
108
119
 
@@ -111,17 +122,17 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
111
122
  {/* Section header */}
112
123
  <div className="flex items-start gap-6">
113
124
  <div className="min-w-0 flex-1 space-y-2">
114
- <div className="h-8 w-72 rounded bg-ods-skeleton" />
115
- <div className="h-4 w-3/4 rounded bg-ods-skeleton" />
125
+ <UnifiedSkeleton className="h-8 w-72 rounded" animate={animate} />
126
+ <UnifiedSkeleton className="h-4 w-3/4 rounded" animate={animate} />
116
127
  </div>
117
128
  {/* Logo placeholder */}
118
- <div className="h-12 w-12 shrink-0 rounded-md bg-ods-skeleton" />
129
+ <UnifiedSkeleton className="h-12 w-12 shrink-0 rounded-md" animate={animate} />
119
130
  </div>
120
131
 
121
132
  {/* Value cards grid */}
122
133
  <div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
123
134
  {Array.from({ length: 3 }).map((_, i) => (
124
- <div key={i} className="h-32 rounded border border-ods-border bg-ods-card" />
135
+ <UnifiedSkeleton key={i} className="h-32 rounded border border-ods-border" animate={animate} />
125
136
  ))}
126
137
  </div>
127
138
  </div>
@@ -137,6 +148,6 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
137
148
  </div>
138
149
  </div>
139
150
  )}
140
- </main>
151
+ </LoadingRegion>
141
152
  );
142
153
  }
@@ -1,7 +1,10 @@
1
1
  import { cn } from '../../utils/cn';
2
+ import { LoadingRegion } from './loading-region';
2
3
  import { UnifiedSkeleton, TextSkeleton, InteractiveSkeleton } from './unified-skeleton';
3
4
 
4
5
  interface SkeletonProps {
6
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
7
+ region?: boolean;
5
8
  className?: string;
6
9
  /**
7
10
  * Number of input fields to render on the right column (defaults to 4).
@@ -23,19 +26,19 @@ interface SkeletonProps {
23
26
  * – Mobile (<768px) collapses to one column via grid existing classes.
24
27
  * – Uses UnifiedSkeleton system to stay consistent with global loading design.
25
28
  */
26
- export function MspProfileFormSkeleton({ className, fields = 4 }: SkeletonProps) {
29
+ export function MspProfileFormSkeleton({ region = true, className, fields = 4 }: SkeletonProps) {
27
30
  return (
28
- <div
31
+ <LoadingRegion
32
+ label="Loading the MSP profile"
33
+ announce={region}
29
34
  className={cn('grid grid-cols-1 items-stretch gap-6 content-md:grid-cols-2', className)}
30
- role="status"
31
- aria-label="Loading MSP profile form"
32
35
  >
33
36
  {/* Left – Logo uploader placeholder */}
34
37
  <div className="flex h-full flex-col space-y-2">
35
38
  {/* Label skeleton */}
36
39
  <TextSkeleton.Body className="w-28" />
37
40
  <div className="min-h-[180px] flex-1 content-md:min-h-full">
38
- <UnifiedSkeleton className="h-full w-full rounded-lg" aria-label="Loading company logo" />
41
+ <UnifiedSkeleton className="h-full w-full rounded-lg" />
39
42
  </div>
40
43
  </div>
41
44
 
@@ -48,6 +51,6 @@ export function MspProfileFormSkeleton({ className, fields = 4 }: SkeletonProps)
48
51
  </div>
49
52
  ))}
50
53
  </div>
51
- </div>
54
+ </LoadingRegion>
52
55
  );
53
56
  }
@@ -1,4 +1,5 @@
1
1
  import { cn } from '../../utils/cn';
2
+ import { LoadingRegion } from './loading-region';
2
3
  import { OrganizationIconSkeleton } from './organization-icon-skeleton';
3
4
  import { TextSkeleton, MediaSkeleton } from './unified-skeleton';
4
5
 
@@ -47,8 +48,6 @@ export function OrganizationCardSkeleton({
47
48
  'flex h-full flex-col overflow-hidden rounded-lg',
48
49
  className,
49
50
  )}
50
- role="status"
51
- aria-label="Loading organization card"
52
51
  >
53
52
  <div className="flex flex-col gap-3 p-4">
54
53
  {/* Header Section - Row layout matching OrganizationCard/VendorCard */}
@@ -123,12 +122,15 @@ export function OrganizationCardSkeleton({
123
122
  * - Desktop (xl): 3 columns
124
123
  */
125
124
  export function OrganizationCardSkeletonGrid({
125
+ region = true,
126
126
  count = 12,
127
127
  className,
128
128
  containerClassName,
129
129
  showFooter = true,
130
130
  showDescription = true,
131
131
  }: {
132
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
133
+ region?: boolean;
132
134
  count?: number;
133
135
  className?: string;
134
136
  containerClassName?: string;
@@ -136,10 +138,10 @@ export function OrganizationCardSkeletonGrid({
136
138
  showDescription?: boolean;
137
139
  }) {
138
140
  return (
139
- <div
141
+ <LoadingRegion
142
+ label="Loading organizations"
143
+ announce={region}
140
144
  className={cn('grid grid-cols-1 gap-4 content-md:grid-cols-2 content-md:gap-6 content-lg:grid-cols-3', className)}
141
- role="status"
142
- aria-label={`Loading ${count} organization cards`}
143
145
  >
144
146
  {Array.from({ length: count }, (_, index) => (
145
147
  <OrganizationCardSkeleton
@@ -149,6 +151,6 @@ export function OrganizationCardSkeletonGrid({
149
151
  showDescription={showDescription}
150
152
  />
151
153
  ))}
152
- </div>
154
+ </LoadingRegion>
153
155
  );
154
156
  }
@@ -1,4 +1,5 @@
1
1
  import { cn } from '../../utils/cn';
2
+ import { UnifiedSkeleton } from './unified-skeleton';
2
3
 
3
4
  export interface OrganizationIconSkeletonProps {
4
5
  /**
@@ -87,8 +88,8 @@ export function OrganizationIconSkeleton({
87
88
  );
88
89
 
89
90
  return (
90
- <div className={containerClasses} role="status" aria-label="Loading organization icon">
91
- <div className="h-1/2 w-1/2 animate-pulse rounded-sm bg-ods-border" />
91
+ <div className={containerClasses}>
92
+ <UnifiedSkeleton className="h-1/2 w-1/2 rounded-sm" />
92
93
  </div>
93
94
  );
94
95
  }