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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-4DT5YXTM.cjs → chunk-2J2OBP4N.cjs} +26 -18
  3. package/dist/chunk-2YXOD2KL.cjs +137 -0
  4. package/dist/{chunk-BEC43GHL.cjs → chunk-34TWK3JE.cjs} +3 -3
  5. package/dist/{chunk-BBM2ICOY.cjs → chunk-3TELPOVH.cjs} +2 -2
  6. package/dist/{chunk-O6QQ44I3.cjs → chunk-45YRDD7W.cjs} +22 -19
  7. package/dist/{chunk-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
  8. package/dist/{chunk-4AWI6CCU.cjs → chunk-BN6NA5RM.cjs} +56 -53
  9. package/dist/{chunk-HNLI4OU5.cjs → chunk-C6LPOYDM.cjs} +24 -24
  10. package/dist/{chunk-4MGZYY6U.cjs → chunk-CLAJIQ7E.cjs} +26 -18
  11. package/dist/{chunk-WY4FKKCV.cjs → chunk-CXV7VBSI.cjs} +104 -118
  12. package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
  13. package/dist/{chunk-6RTHHU3S.cjs → chunk-E3KFEOFA.cjs} +9 -6
  14. package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
  15. package/dist/{chunk-TYW7NBP7.cjs → chunk-GOFEOCQN.cjs} +44 -27
  16. package/dist/{chunk-HTMHDEIV.cjs → chunk-HOEVD6EN.cjs} +4 -4
  17. package/dist/{chunk-2CEQGGRN.cjs → chunk-KRAQEZPB.cjs} +48 -40
  18. package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
  19. package/dist/{chunk-FCQCEQBY.cjs → chunk-LQT2ITMG.cjs} +6 -6
  20. package/dist/{chunk-PSIKUDUV.cjs → chunk-LVO7FALW.cjs} +5 -5
  21. package/dist/{chunk-L2RMTGOK.cjs → chunk-MGF3FUKD.cjs} +7 -7
  22. package/dist/{chunk-P7KTAXXE.cjs → chunk-OFO75R2O.cjs} +169 -175
  23. package/dist/{chunk-IJA3OZWF.cjs → chunk-OZLIKBKC.cjs} +24 -24
  24. package/dist/{chunk-B27QEHYR.cjs → chunk-P6F6PHVK.cjs} +9 -9
  25. package/dist/chunk-RB6BSE3O.cjs +21 -0
  26. package/dist/{chunk-R3FXJXSQ.cjs → chunk-SECT4H34.cjs} +1780 -2076
  27. package/dist/{chunk-LLAKQT3B.cjs → chunk-SGL47BS2.cjs} +12 -12
  28. package/dist/{chunk-PIQRV4EQ.cjs → chunk-SOPVUD2Y.cjs} +3 -3
  29. package/dist/chunk-UGCRLRCT.cjs +25 -0
  30. package/dist/{chunk-7Y5U3Y4S.cjs → chunk-V3UJ6NDR.cjs} +281 -462
  31. package/dist/{chunk-JPSMPXCH.cjs → chunk-VEVIMDNK.cjs} +137 -122
  32. package/dist/{chunk-C7NTL2GV.cjs → chunk-WZX26ODJ.cjs} +121 -121
  33. package/dist/{chunk-YIRX6C7V.cjs → chunk-XJ3J4UIS.cjs} +57 -22
  34. package/dist/{chunk-MA7T36JY.cjs → chunk-ZLF55RDR.cjs} +103 -98
  35. package/dist/{cloud-tenants-QJZIF2JS.cjs → cloud-tenants-2MYFHEYY.cjs} +16 -14
  36. package/dist/components/case-studies/index.cjs +29 -27
  37. package/dist/components/categories-cart.d.ts.map +1 -1
  38. package/dist/components/categories-cart.js +2 -7
  39. package/dist/components/chat/chat-container.js +4 -4
  40. package/dist/components/chat/chat-context-picker.d.ts.map +1 -1
  41. package/dist/components/chat/chat-context-picker.js +2 -1
  42. package/dist/components/chat/chat-message-row.d.ts.map +1 -1
  43. package/dist/components/chat/chat-message-row.js +6 -5
  44. package/dist/components/chat/chat-message-skeleton.d.ts +3 -1
  45. package/dist/components/chat/chat-message-skeleton.d.ts.map +1 -1
  46. package/dist/components/chat/chat-message-skeleton.js +8 -5
  47. package/dist/components/chat/chat-sidebar-skeleton.d.ts.map +1 -1
  48. package/dist/components/chat/chat-sidebar-skeleton.js +4 -3
  49. package/dist/components/chat/chat-top-navigation.js +4 -4
  50. package/dist/components/chat/context-items-list.d.ts.map +1 -1
  51. package/dist/components/chat/context-items-list.js +5 -3
  52. package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts +24 -1
  53. package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts.map +1 -1
  54. package/dist/components/chat/entity-cards/admin-content-card-grid.js +46 -15
  55. package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -1
  56. package/dist/components/chat/entity-cards/admin-content-card.js +2 -1
  57. package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -1
  58. package/dist/components/chat/entity-cards/blog-card.js +13 -12
  59. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -1
  60. package/dist/components/chat/entity-cards/campaign-card-admin.js +5 -4
  61. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  62. package/dist/components/chat/entity-cards/case-study-card.js +19 -18
  63. package/dist/components/chat/entity-cards/chat-ticket-item.js +5 -5
  64. package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -1
  65. package/dist/components/chat/entity-cards/customer-interview-card.js +15 -14
  66. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -1
  67. package/dist/components/chat/entity-cards/data-room-doc-card.js +7 -6
  68. package/dist/components/chat/entity-cards/design-doc-card.d.ts.map +1 -1
  69. package/dist/components/chat/entity-cards/design-doc-card.js +0 -2
  70. package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -1
  71. package/dist/components/chat/entity-cards/generic-entity-card.js +8 -7
  72. package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -1
  73. package/dist/components/chat/entity-cards/github-activity-card.js +11 -10
  74. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -1
  75. package/dist/components/chat/entity-cards/hubspot-ticket-card.js +16 -15
  76. package/dist/components/chat/entity-cards/index.d.ts +1 -1
  77. package/dist/components/chat/entity-cards/index.d.ts.map +1 -1
  78. package/dist/components/chat/entity-cards/index.js +2 -0
  79. package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -1
  80. package/dist/components/chat/entity-cards/investor-update-card.js +12 -11
  81. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
  82. package/dist/components/chat/entity-cards/onboarding-guide-card.js +25 -30
  83. package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -1
  84. package/dist/components/chat/entity-cards/program-card.js +29 -28
  85. package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -1
  86. package/dist/components/chat/entity-cards/roadmap-card.js +37 -39
  87. package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -1
  88. package/dist/components/chat/entity-cards/slack-message-card.js +12 -11
  89. package/dist/components/chat/guide-welcome.js +2 -2
  90. package/dist/components/chat/index.cjs +13 -9
  91. package/dist/components/chat/mingo-archive-list.d.ts.map +1 -1
  92. package/dist/components/chat/mingo-archive-list.js +2 -1
  93. package/dist/components/chat/mingo-chat-history.d.ts +4 -2
  94. package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
  95. package/dist/components/chat/mingo-chat-history.js +11 -5
  96. package/dist/components/chat/mingo-chat-rail.d.ts.map +1 -1
  97. package/dist/components/chat/mingo-chat-rail.js +2 -1
  98. package/dist/components/chat/mingo-info-card.d.ts.map +1 -1
  99. package/dist/components/chat/mingo-info-card.js +6 -5
  100. package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts +3 -1
  101. package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts.map +1 -1
  102. package/dist/components/chat/mingo-onboarding-card-skeleton.js +12 -12
  103. package/dist/components/chat/model-display.js +4 -4
  104. package/dist/components/chat/msp-organization-card-skeleton.js +5 -5
  105. package/dist/components/chat/quick-action-chip.d.ts +3 -3
  106. package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
  107. package/dist/components/chat/quick-action-chip.js +12 -6
  108. package/dist/components/chat/utils/compact-card-classes.d.ts +4 -4
  109. package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -1
  110. package/dist/components/chat/utils/compact-card-classes.js +2 -2
  111. package/dist/components/contact/index.cjs +17 -15
  112. package/dist/components/content-loading-container.d.ts +1 -1
  113. package/dist/components/content-loading-container.d.ts.map +1 -1
  114. package/dist/components/content-loading-container.js +6 -7
  115. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  116. package/dist/components/docs/doc-viewer.js +3 -2
  117. package/dist/components/docs/index.cjs +20 -18
  118. package/dist/components/docs/skeletons.d.ts +7 -8
  119. package/dist/components/docs/skeletons.d.ts.map +1 -1
  120. package/dist/components/docs/skeletons.js +62 -61
  121. package/dist/components/embeds/embed-iframe.d.ts +6 -6
  122. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  123. package/dist/components/embeds/embed-iframe.js +9 -4
  124. package/dist/components/embeds/index.cjs +19 -15
  125. package/dist/components/embeds/index.d.ts +2 -2
  126. package/dist/components/embeds/index.d.ts.map +1 -1
  127. package/dist/components/embeds/index.js +2 -1
  128. package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -1
  129. package/dist/components/embeds/linkedin-embed-client.js +7 -6
  130. package/dist/components/embeds/markdown-image.d.ts.map +1 -1
  131. package/dist/components/embeds/markdown-image.js +5 -3
  132. package/dist/components/embeds/og-link-preview.d.ts +19 -18
  133. package/dist/components/embeds/og-link-preview.d.ts.map +1 -1
  134. package/dist/components/embeds/og-link-preview.js +143 -88
  135. package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -1
  136. package/dist/components/embeds/reddit-embed-client.js +10 -9
  137. package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -1
  138. package/dist/components/embeds/twitter-embed-client.js +10 -9
  139. package/dist/components/faq/faq-section.d.ts.map +1 -1
  140. package/dist/components/faq/faq-section.js +9 -5
  141. package/dist/components/faq/index.cjs +18 -16
  142. package/dist/components/features/board/ticket-card-skeleton.js +8 -8
  143. package/dist/components/features/capability-explorer.d.ts +3 -1
  144. package/dist/components/features/capability-explorer.d.ts.map +1 -1
  145. package/dist/components/features/capability-explorer.js +27 -24
  146. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +5 -2
  147. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -1
  148. package/dist/components/features/devices/device-selector/device-selector-skeleton.js +2 -2
  149. package/dist/components/features/devices/device-selector/device-selector.d.ts +1 -1
  150. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -1
  151. package/dist/components/features/devices/device-selector/device-selector.js +2 -0
  152. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +2 -0
  153. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -1
  154. package/dist/components/features/devices/devices-grid.d.ts +3 -1
  155. package/dist/components/features/devices/devices-grid.d.ts.map +1 -1
  156. package/dist/components/features/devices/devices-grid.js +3 -2
  157. package/dist/components/features/devices/devices-panel-view.d.ts +6 -1
  158. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
  159. package/dist/components/features/devices/devices-panel-view.js +4 -1
  160. package/dist/components/features/devices/devices-table-columns.d.ts +3 -1
  161. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
  162. package/dist/components/features/devices/devices-table-columns.js +2 -0
  163. package/dist/components/features/index.cjs +18 -14
  164. package/dist/components/features/logs/logs-table-view.d.ts +3 -1
  165. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -1
  166. package/dist/components/features/logs/logs-table-view.js +2 -2
  167. package/dist/components/features/model-token-rates.d.ts +4 -1
  168. package/dist/components/features/model-token-rates.d.ts.map +1 -1
  169. package/dist/components/features/model-token-rates.js +18 -23
  170. package/dist/components/features/notifications/index.d.ts +2 -2
  171. package/dist/components/features/notifications/index.d.ts.map +1 -1
  172. package/dist/components/features/notifications/index.js +2 -1
  173. package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
  174. package/dist/components/features/notifications/notification-drawer.js +9 -16
  175. package/dist/components/features/notifications/notification-tile.d.ts +14 -0
  176. package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
  177. package/dist/components/features/notifications/notification-tile.js +36 -1
  178. package/dist/components/features/policies/policy-summary-cards.js +2 -2
  179. package/dist/components/features/push-button-selector.d.ts.map +1 -1
  180. package/dist/components/features/push-button-selector.js +12 -7
  181. package/dist/components/features/remote-session/remote-desktop-view.d.ts +4 -1
  182. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -1
  183. package/dist/components/features/remote-session/remote-desktop-view.js +14 -10
  184. package/dist/components/features/waitlist-form.d.ts.map +1 -1
  185. package/dist/components/features/waitlist-form.js +6 -5
  186. package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
  187. package/dist/components/help-center-pages/download-apps-page.js +2 -1
  188. package/dist/components/help-center-pages/index.cjs +127 -119
  189. package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
  190. package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
  191. package/dist/components/help-center-pages/trust-center-page.js +3 -2
  192. package/dist/components/help-center-pages/trust-center-sections.d.ts +4 -1
  193. package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
  194. package/dist/components/help-center-pages/trust-center-sections.js +5 -2
  195. package/dist/components/index.cjs +70 -112
  196. package/dist/components/index.d.ts +0 -2
  197. package/dist/components/index.d.ts.map +1 -1
  198. package/dist/components/index.js +0 -2
  199. package/dist/components/layout/title-block.d.ts.map +1 -1
  200. package/dist/components/layout/title-block.js +18 -11
  201. package/dist/components/loading/card-skeleton.d.ts +6 -3
  202. package/dist/components/loading/card-skeleton.d.ts.map +1 -1
  203. package/dist/components/loading/card-skeleton.js +7 -27
  204. package/dist/components/loading/category-card-skeleton.d.ts.map +1 -1
  205. package/dist/components/loading/category-card-skeleton.js +2 -4
  206. package/dist/components/loading/category-vendor-selector-skeleton.d.ts +3 -1
  207. package/dist/components/loading/category-vendor-selector-skeleton.d.ts.map +1 -1
  208. package/dist/components/loading/category-vendor-selector-skeleton.js +9 -4
  209. package/dist/components/loading/device-card-skeleton.d.ts +18 -9
  210. package/dist/components/loading/device-card-skeleton.d.ts.map +1 -1
  211. package/dist/components/loading/device-card-skeleton.js +30 -21
  212. package/dist/components/loading/index.d.ts +3 -4
  213. package/dist/components/loading/index.d.ts.map +1 -1
  214. package/dist/components/loading/index.js +6 -29
  215. package/dist/components/loading/loading-region.d.ts +33 -0
  216. package/dist/components/loading/loading-region.d.ts.map +1 -0
  217. package/dist/components/loading/loading-region.js +22 -0
  218. package/dist/components/loading/margin-report-skeleton.d.ts +3 -1
  219. package/dist/components/loading/margin-report-skeleton.d.ts.map +1 -1
  220. package/dist/components/loading/margin-report-skeleton.js +70 -61
  221. package/dist/components/loading/msp-profile-form-skeleton.d.ts +3 -1
  222. package/dist/components/loading/msp-profile-form-skeleton.d.ts.map +1 -1
  223. package/dist/components/loading/msp-profile-form-skeleton.js +6 -5
  224. package/dist/components/loading/organization-card-skeleton.d.ts +3 -1
  225. package/dist/components/loading/organization-card-skeleton.d.ts.map +1 -1
  226. package/dist/components/loading/organization-card-skeleton.js +5 -5
  227. package/dist/components/loading/organization-icon-skeleton.d.ts.map +1 -1
  228. package/dist/components/loading/organization-icon-skeleton.js +2 -1
  229. package/dist/components/loading/page-layout-skeleton.d.ts +21 -6
  230. package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
  231. package/dist/components/loading/page-layout-skeleton.js +283 -266
  232. package/dist/components/loading/settings-form-skeleton.d.ts +17 -0
  233. package/dist/components/loading/settings-form-skeleton.d.ts.map +1 -0
  234. package/dist/components/loading/settings-form-skeleton.js +42 -0
  235. package/dist/components/loading/unified-skeleton.d.ts +11 -4
  236. package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
  237. package/dist/components/loading/unified-skeleton.js +14 -89
  238. package/dist/components/loading/wizard-layout-skeleton.d.ts +3 -1
  239. package/dist/components/loading/wizard-layout-skeleton.d.ts.map +1 -1
  240. package/dist/components/loading/wizard-layout-skeleton.js +3 -2
  241. package/dist/components/media-carousel.d.ts.map +1 -1
  242. package/dist/components/media-carousel.js +2 -1
  243. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  244. package/dist/components/meeting-scheduler/booking-form.js +14 -8
  245. package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
  246. package/dist/components/meeting-scheduler/context-panel.js +8 -7
  247. package/dist/components/meeting-scheduler/directory.d.ts.map +1 -1
  248. package/dist/components/meeting-scheduler/directory.js +10 -9
  249. package/dist/components/meeting-scheduler/index.cjs +85 -75
  250. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  251. package/dist/components/meeting-scheduler/index.js +3 -2
  252. package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -1
  253. package/dist/components/meeting-scheduler/modal-header.js +8 -7
  254. package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
  255. package/dist/components/meeting-scheduler/slot-picker.js +4 -3
  256. package/dist/components/navigation/app-header.d.ts.map +1 -1
  257. package/dist/components/navigation/app-header.js +8 -7
  258. package/dist/components/navigation/index.cjs +19 -17
  259. package/dist/components/navigation/multi-level-navigation.d.ts.map +1 -1
  260. package/dist/components/navigation/multi-level-navigation.js +3 -2
  261. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  262. package/dist/components/navigation/navigation-sidebar-item.js +3 -2
  263. package/dist/components/onboarding-guides/index.cjs +19 -17
  264. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts +4 -1
  265. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts.map +1 -1
  266. package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.js +12 -8
  267. package/dist/components/product-demo/index.cjs +16 -15
  268. package/dist/components/product-demo/product-screen.d.ts.map +1 -1
  269. package/dist/components/product-demo/product-screen.js +4 -4
  270. package/dist/components/profile/ProfileLoadingSkeleton.d.ts +3 -1
  271. package/dist/components/profile/ProfileLoadingSkeleton.d.ts.map +1 -1
  272. package/dist/components/profile/ProfileLoadingSkeleton.js +10 -8
  273. package/dist/components/related-content/index.cjs +7 -5
  274. package/dist/components/related-content/related-content-section.d.ts.map +1 -1
  275. package/dist/components/related-content/related-content-section.js +3 -2
  276. package/dist/components/shared/delivery/delivery-table.d.ts.map +1 -1
  277. package/dist/components/shared/delivery/delivery-table.js +8 -7
  278. package/dist/components/shared/detail-page-skeleton.d.ts +5 -1
  279. package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
  280. package/dist/components/shared/detail-page-skeleton.js +18 -14
  281. package/dist/components/shared/dev-section/dev-card-row.d.ts +3 -1
  282. package/dist/components/shared/dev-section/dev-card-row.d.ts.map +1 -1
  283. package/dist/components/shared/dev-section/dev-card-row.js +22 -9
  284. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  285. package/dist/components/shared/legal-document/legal-document-page.js +8 -7
  286. package/dist/components/shared/onboarding/onboarding-step-card.d.ts.map +1 -1
  287. package/dist/components/shared/onboarding/onboarding-step-card.js +3 -2
  288. package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts.map +1 -1
  289. package/dist/components/shared/onboarding/onboarding-walkthrough.js +2 -1
  290. package/dist/components/shared/product-release/index.d.ts +0 -1
  291. package/dist/components/shared/product-release/index.d.ts.map +1 -1
  292. package/dist/components/shared/product-release/index.js +1 -3
  293. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
  294. package/dist/components/shared/product-release/product-release-card-skeleton.js +21 -20
  295. package/dist/components/shared/product-release/product-releases-view.d.ts.map +1 -1
  296. package/dist/components/shared/product-release/product-releases-view.js +2 -1
  297. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts +6 -13
  298. package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts.map +1 -1
  299. package/dist/components/shared/roadmap/roadmap-grid-skeleton.js +13 -25
  300. package/dist/components/tickets/help-center-create-form.d.ts +4 -1
  301. package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
  302. package/dist/components/tickets/help-center-create-form.js +38 -26
  303. package/dist/components/tickets/index.cjs +22 -20
  304. package/dist/components/tickets/ticket-center.d.ts.map +1 -1
  305. package/dist/components/tickets/ticket-center.js +13 -10
  306. package/dist/components/tickets/ticket-detail-drawer.d.ts.map +1 -1
  307. package/dist/components/tickets/ticket-detail-drawer.js +2 -1
  308. package/dist/components/ui/admin-form-drawer.d.ts.map +1 -1
  309. package/dist/components/ui/admin-form-drawer.js +6 -8
  310. package/dist/components/ui/admin-form-modal.d.ts.map +1 -1
  311. package/dist/components/ui/admin-form-modal.js +12 -11
  312. package/dist/components/ui/analyzing-state.d.ts +1 -1
  313. package/dist/components/ui/analyzing-state.d.ts.map +1 -1
  314. package/dist/components/ui/analyzing-state.js +4 -10
  315. package/dist/components/ui/content-loader.d.ts +5 -1
  316. package/dist/components/ui/content-loader.d.ts.map +1 -1
  317. package/dist/components/ui/content-loader.js +27 -23
  318. package/dist/components/ui/dashboard-info-card.d.ts +17 -3
  319. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  320. package/dist/components/ui/dashboard-info-card.js +30 -10
  321. package/dist/components/ui/data-attribution.d.ts +6 -0
  322. package/dist/components/ui/data-attribution.d.ts.map +1 -1
  323. package/dist/components/ui/data-attribution.js +12 -1
  324. package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
  325. package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
  326. package/dist/components/ui/data-table/data-table-body.js +3 -1
  327. package/dist/components/ui/data-table/data-table-infinite-footer.d.ts.map +1 -1
  328. package/dist/components/ui/data-table/data-table-infinite-footer.js +3 -1
  329. package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
  330. package/dist/components/ui/data-table/data-table-skeleton.js +7 -5
  331. package/dist/components/ui/feature-card.d.ts.map +1 -1
  332. package/dist/components/ui/feature-card.js +7 -9
  333. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts +3 -1
  334. package/dist/components/ui/file-manager/file-manager-skeleton.d.ts.map +1 -1
  335. package/dist/components/ui/file-manager/file-manager-skeleton.js +27 -21
  336. package/dist/components/ui/file-manager/file-manager-table.js +10 -10
  337. package/dist/components/ui/file-manager/index.cjs +45 -36
  338. package/dist/components/ui/filter-modal.d.ts.map +1 -1
  339. package/dist/components/ui/filter-modal.js +5 -5
  340. package/dist/components/ui/filter-pill-row.d.ts +10 -0
  341. package/dist/components/ui/filter-pill-row.d.ts.map +1 -1
  342. package/dist/components/ui/filter-pill-row.js +8 -1
  343. package/dist/components/ui/index.cjs +19 -28
  344. package/dist/components/ui/index.d.ts +0 -1
  345. package/dist/components/ui/index.d.ts.map +1 -1
  346. package/dist/components/ui/index.js +0 -1
  347. package/dist/components/ui/layout-hold.d.ts +5 -4
  348. package/dist/components/ui/layout-hold.d.ts.map +1 -1
  349. package/dist/components/ui/layout-hold.js +20 -29
  350. package/dist/components/ui/markdown/base-components.js +1 -1
  351. package/dist/components/ui/page-actions.d.ts.map +1 -1
  352. package/dist/components/ui/page-actions.js +6 -8
  353. package/dist/components/ui/photo-wall.d.ts.map +1 -1
  354. package/dist/components/ui/photo-wall.js +11 -18
  355. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts +1 -1
  356. package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts.map +1 -1
  357. package/dist/components/ui/query-report-table/query-report-table-skeleton.js +28 -18
  358. package/dist/components/ui/query-report-table/query-report-table.d.ts +1 -1
  359. package/dist/components/ui/query-report-table/query-report-table.d.ts.map +1 -1
  360. package/dist/components/ui/query-report-table/query-report-table.js +3 -1
  361. package/dist/components/ui/query-report-table/types.d.ts +4 -0
  362. package/dist/components/ui/query-report-table/types.d.ts.map +1 -1
  363. package/dist/components/ui/skeleton-surface.d.ts +7 -0
  364. package/dist/components/ui/skeleton-surface.d.ts.map +1 -0
  365. package/dist/components/ui/skeleton-surface.js +5 -0
  366. package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
  367. package/dist/components/ui/table/table-skeleton.js +11 -13
  368. package/dist/components/ui/test-run.d.ts +6 -4
  369. package/dist/components/ui/test-run.d.ts.map +1 -1
  370. package/dist/components/ui/test-run.js +9 -5
  371. package/dist/{devices-V55KQCAL.cjs → devices-FVXAGKVX.cjs} +17 -15
  372. package/dist/{embeddable-chat-5CDR4I6E.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
  373. package/dist/index.cjs +24 -31
  374. package/dist/{knowledge-S3VGDRKR.cjs → knowledge-ZL3ZHBSL.cjs} +17 -15
  375. package/dist/{logs-K5E2BGZE.cjs → logs-KQCWDIOB.cjs} +24 -22
  376. package/dist/{policies-BWU4FRFE.cjs → policies-ARDCZ3CT.cjs} +20 -18
  377. package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
  378. package/dist/{scripts-25UPGXZU.cjs → scripts-ZAMVWCY4.cjs} +23 -21
  379. package/dist/{software-update-F6UC7ULZ.cjs → software-update-6F7BIYS3.cjs} +20 -18
  380. package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
  381. package/dist/utils/index.cjs +49 -48
  382. package/dist/utils/markdown-to-plain.d.ts.map +1 -1
  383. package/dist/utils/markdown-to-plain.js +12 -7
  384. package/package.json +7 -2
  385. package/src/components/categories-cart.tsx +2 -4
  386. package/src/components/chat/chat-container.tsx +4 -4
  387. package/src/components/chat/chat-context-picker.tsx +3 -2
  388. package/src/components/chat/chat-message-row.tsx +6 -7
  389. package/src/components/chat/chat-message-skeleton.tsx +11 -6
  390. package/src/components/chat/chat-sidebar-skeleton.tsx +4 -3
  391. package/src/components/chat/chat-top-navigation.tsx +4 -4
  392. package/src/components/chat/context-items-list.tsx +9 -3
  393. package/src/components/chat/entity-cards/admin-content-card-grid.tsx +65 -18
  394. package/src/components/chat/entity-cards/admin-content-card.tsx +2 -1
  395. package/src/components/chat/entity-cards/blog-card.tsx +13 -12
  396. package/src/components/chat/entity-cards/campaign-card-admin.tsx +5 -4
  397. package/src/components/chat/entity-cards/case-study-card.tsx +19 -18
  398. package/src/components/chat/entity-cards/chat-ticket-item.tsx +5 -5
  399. package/src/components/chat/entity-cards/customer-interview-card.tsx +15 -14
  400. package/src/components/chat/entity-cards/data-room-doc-card.tsx +7 -6
  401. package/src/components/chat/entity-cards/design-doc-card.tsx +0 -2
  402. package/src/components/chat/entity-cards/generic-entity-card.tsx +8 -7
  403. package/src/components/chat/entity-cards/github-activity-card.tsx +11 -10
  404. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +16 -15
  405. package/src/components/chat/entity-cards/index.ts +2 -0
  406. package/src/components/chat/entity-cards/investor-update-card.tsx +12 -11
  407. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +21 -22
  408. package/src/components/chat/entity-cards/program-card.tsx +29 -28
  409. package/src/components/chat/entity-cards/roadmap-card.tsx +22 -23
  410. package/src/components/chat/entity-cards/slack-message-card.tsx +12 -11
  411. package/src/components/chat/guide-welcome.tsx +2 -2
  412. package/src/components/chat/mingo-archive-list.tsx +2 -1
  413. package/src/components/chat/mingo-chat-history.tsx +18 -9
  414. package/src/components/chat/mingo-chat-rail.tsx +2 -1
  415. package/src/components/chat/mingo-info-card.tsx +6 -5
  416. package/src/components/chat/mingo-onboarding-card-skeleton.tsx +15 -13
  417. package/src/components/chat/model-display.tsx +4 -4
  418. package/src/components/chat/msp-organization-card-skeleton.tsx +5 -5
  419. package/src/components/chat/quick-action-chip.tsx +17 -14
  420. package/src/components/chat/utils/compact-card-classes.ts +4 -5
  421. package/src/components/content-loading-container.tsx +7 -8
  422. package/src/components/docs/doc-viewer.tsx +3 -2
  423. package/src/components/docs/skeletons.tsx +64 -63
  424. package/src/components/embeds/embed-iframe.tsx +16 -9
  425. package/src/components/embeds/index.ts +2 -2
  426. package/src/components/embeds/linkedin-embed-client.tsx +7 -6
  427. package/src/components/embeds/markdown-image.tsx +5 -3
  428. package/src/components/embeds/og-link-preview.tsx +162 -79
  429. package/src/components/embeds/reddit-embed-client.tsx +10 -9
  430. package/src/components/embeds/twitter-embed-client.tsx +10 -9
  431. package/src/components/faq/faq-section.tsx +13 -6
  432. package/src/components/features/board/ticket-card-skeleton.tsx +8 -8
  433. package/src/components/features/capability-explorer.tsx +61 -30
  434. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +9 -3
  435. package/src/components/features/devices/device-selector/device-selector.tsx +2 -0
  436. package/src/components/features/devices/device-selector/device-selector.types.ts +2 -0
  437. package/src/components/features/devices/devices-grid.tsx +4 -1
  438. package/src/components/features/devices/devices-panel-view.tsx +9 -1
  439. package/src/components/features/devices/devices-table-columns.tsx +4 -0
  440. package/src/components/features/logs/logs-table-view.tsx +4 -2
  441. package/src/components/features/model-token-rates.tsx +27 -24
  442. package/src/components/features/notifications/index.ts +2 -2
  443. package/src/components/features/notifications/notification-drawer.tsx +7 -10
  444. package/src/components/features/notifications/notification-tile.tsx +57 -0
  445. package/src/components/features/policies/policy-summary-cards.tsx +2 -2
  446. package/src/components/features/push-button-selector.tsx +20 -11
  447. package/src/components/features/remote-session/remote-desktop-view.tsx +26 -16
  448. package/src/components/features/waitlist-form.tsx +6 -5
  449. package/src/components/help-center-pages/download-apps-page.tsx +3 -2
  450. package/src/components/help-center-pages/trust-center-page.tsx +6 -2
  451. package/src/components/help-center-pages/trust-center-sections.tsx +9 -3
  452. package/src/components/index.ts +0 -2
  453. package/src/components/layout/title-block.tsx +17 -15
  454. package/src/components/loading/card-skeleton.tsx +14 -46
  455. package/src/components/loading/category-card-skeleton.tsx +2 -4
  456. package/src/components/loading/category-vendor-selector-skeleton.tsx +12 -5
  457. package/src/components/loading/device-card-skeleton.tsx +58 -51
  458. package/src/components/loading/index.ts +5 -19
  459. package/src/components/loading/loading-region.tsx +60 -0
  460. package/src/components/loading/margin-report-skeleton.tsx +45 -34
  461. package/src/components/loading/msp-profile-form-skeleton.tsx +9 -6
  462. package/src/components/loading/organization-card-skeleton.tsx +8 -6
  463. package/src/components/loading/organization-icon-skeleton.tsx +3 -2
  464. package/src/components/loading/page-layout-skeleton.tsx +162 -133
  465. package/src/components/loading/settings-form-skeleton.tsx +52 -0
  466. package/src/components/loading/unified-skeleton.tsx +26 -71
  467. package/src/components/loading/wizard-layout-skeleton.tsx +6 -3
  468. package/src/components/media-carousel.tsx +2 -1
  469. package/src/components/meeting-scheduler/booking-form.tsx +10 -7
  470. package/src/components/meeting-scheduler/context-panel.tsx +8 -7
  471. package/src/components/meeting-scheduler/directory.tsx +10 -9
  472. package/src/components/meeting-scheduler/index.tsx +5 -4
  473. package/src/components/meeting-scheduler/modal-header.tsx +8 -7
  474. package/src/components/meeting-scheduler/slot-picker.tsx +4 -3
  475. package/src/components/navigation/app-header.tsx +8 -7
  476. package/src/components/navigation/multi-level-navigation.tsx +3 -2
  477. package/src/components/navigation/navigation-sidebar-item.tsx +3 -2
  478. package/src/components/onboarding-guides/onboarding-guides-catalog-skeleton.tsx +17 -10
  479. package/src/components/product-demo/product-screen.tsx +4 -4
  480. package/src/components/profile/ProfileLoadingSkeleton.tsx +13 -9
  481. package/src/components/related-content/related-content-section.tsx +5 -4
  482. package/src/components/shared/delivery/delivery-table.tsx +8 -7
  483. package/src/components/shared/detail-page-skeleton.tsx +22 -14
  484. package/src/components/shared/dev-section/dev-card-row.tsx +23 -10
  485. package/src/components/shared/legal-document/legal-document-page.tsx +8 -7
  486. package/src/components/shared/onboarding/onboarding-step-card.tsx +3 -2
  487. package/src/components/shared/onboarding/onboarding-walkthrough.tsx +2 -1
  488. package/src/components/shared/product-release/index.ts +0 -1
  489. package/src/components/shared/product-release/product-release-card-skeleton.tsx +23 -25
  490. package/src/components/shared/product-release/product-releases-view.tsx +3 -2
  491. package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +14 -56
  492. package/src/components/tickets/help-center-create-form.tsx +23 -12
  493. package/src/components/tickets/ticket-center.tsx +17 -11
  494. package/src/components/tickets/ticket-detail-drawer.tsx +3 -2
  495. package/src/components/ui/admin-form-drawer.tsx +7 -7
  496. package/src/components/ui/admin-form-modal.tsx +9 -8
  497. package/src/components/ui/analyzing-state.tsx +5 -8
  498. package/src/components/ui/content-loader.tsx +31 -23
  499. package/src/components/ui/dashboard-info-card.tsx +81 -20
  500. package/src/components/ui/data-attribution.tsx +18 -0
  501. package/src/components/ui/data-table/data-table-body.tsx +9 -2
  502. package/src/components/ui/data-table/data-table-infinite-footer.tsx +4 -2
  503. package/src/components/ui/data-table/data-table-skeleton.tsx +8 -5
  504. package/src/components/ui/feature-card.tsx +27 -11
  505. package/src/components/ui/file-manager/file-manager-skeleton.tsx +30 -22
  506. package/src/components/ui/file-manager/file-manager-table.tsx +10 -10
  507. package/src/components/ui/filter-modal.tsx +5 -5
  508. package/src/components/ui/filter-pill-row.tsx +19 -0
  509. package/src/components/ui/index.ts +0 -1
  510. package/src/components/ui/layout-hold.tsx +30 -38
  511. package/src/components/ui/markdown/base-components.tsx +1 -1
  512. package/src/components/ui/page-actions.tsx +10 -8
  513. package/src/components/ui/photo-wall.tsx +4 -7
  514. package/src/components/ui/query-report-table/query-report-table-skeleton.tsx +13 -7
  515. package/src/components/ui/query-report-table/query-report-table.tsx +2 -0
  516. package/src/components/ui/query-report-table/types.ts +4 -0
  517. package/src/components/ui/skeleton-surface.ts +6 -0
  518. package/src/components/ui/table/table-skeleton.tsx +11 -13
  519. package/src/components/ui/test-run.tsx +30 -22
  520. package/src/styles/ods-colors.css +2 -2
  521. package/src/utils/markdown-to-plain.ts +25 -16
  522. package/dist/chunk-5M5C6UV4.cjs +0 -125
  523. package/dist/components/dynamic-skeleton.d.ts +0 -108
  524. package/dist/components/dynamic-skeleton.d.ts.map +0 -1
  525. package/dist/components/dynamic-skeleton.js +0 -221
  526. package/dist/components/loading/content-skeleton.d.ts +0 -73
  527. package/dist/components/loading/content-skeleton.d.ts.map +0 -1
  528. package/dist/components/loading/content-skeleton.js +0 -217
  529. package/dist/components/loading/users-grid-skeleton.d.ts +0 -7
  530. package/dist/components/loading/users-grid-skeleton.d.ts.map +0 -1
  531. package/dist/components/loading/users-grid-skeleton.js +0 -13
  532. package/dist/components/shared/product-release/release-detail-skeleton.d.ts +0 -2
  533. package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +0 -1
  534. package/dist/components/shared/product-release/release-detail-skeleton.js +0 -9
  535. package/dist/components/skeleton.d.ts +0 -4
  536. package/dist/components/skeleton.d.ts.map +0 -1
  537. package/dist/components/skeleton.js +0 -9
  538. package/dist/components/ui/skeleton.d.ts +0 -44
  539. package/dist/components/ui/skeleton.d.ts.map +0 -1
  540. package/dist/components/ui/skeleton.js +0 -103
  541. package/dist/components/vendor-page-skeleton.d.ts +0 -2
  542. package/dist/components/vendor-page-skeleton.d.ts.map +0 -1
  543. package/dist/components/vendor-page-skeleton.js +0 -9
  544. package/src/components/dynamic-skeleton.tsx +0 -365
  545. package/src/components/loading/content-skeleton.tsx +0 -374
  546. package/src/components/loading/users-grid-skeleton.tsx +0 -36
  547. package/src/components/shared/product-release/release-detail-skeleton.tsx +0 -7
  548. package/src/components/skeleton.tsx +0 -8
  549. package/src/components/ui/skeleton.tsx +0 -173
  550. package/src/components/vendor-page-skeleton.tsx +0 -7
@@ -1,8 +1,6 @@
1
- 'use client';
2
-
3
- import { type ReactNode, type RefObject, useLayoutEffect, useRef, useState } from 'react';
1
+ import type { CSSProperties, ReactNode } from 'react';
4
2
  import { cn } from '../../utils/cn';
5
- import { SkeletonText } from './skeleton';
3
+ import { SKELETON_SURFACE_CLASS } from './skeleton-surface';
6
4
 
7
5
  /**
8
6
  * Holding a layout while its content is read, the two ways that are right at
@@ -13,8 +11,9 @@ import { SkeletonText } from './skeleton';
13
11
  *
14
12
  * - `TextHold`: an inline stand-in exactly as wide as the words it is given
15
13
  * (same font, same letter spacing, because it IS those words, not shown).
16
- * `bar` draws a `SkeletonText` of as many lines as the words take; `blank`
17
- * only keeps their space.
14
+ * `bar` draws one skeleton bar per line the words take, each as wide as
15
+ * its line, in plain CSS (no measuring, so it is in the server's HTML);
16
+ * `blank` only keeps their space.
18
17
  * - `LayoutHold`: a block as tall as the real layout rendered inside it, kept
19
18
  * invisible and inert: the layout's own height, at any width.
20
19
  *
@@ -23,51 +22,44 @@ import { SkeletonText } from './skeleton';
23
22
  export interface TextHoldProps {
24
23
  /** The words whose width is held (the content's own, or a stand-in of its length). */
25
24
  children: ReactNode;
26
- /** `bar`: a `SkeletonText` of as many lines as the words take. `blank`: the space only. */
25
+ /** `bar`: one skeleton bar per line the words take. `blank`: the space only. */
27
26
  variant?: 'bar' | 'blank';
28
27
  className?: string;
29
28
  }
30
29
 
30
+ /** A rounded rectangle filling whatever box it is drawn in: the shape of each line's bar. */
31
+ const ROUNDED_BAR = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100%25' height='100%25' rx='6'/%3E%3C/svg%3E")`;
32
+ /**
33
+ * Each line's bar: a text-high band in the middle of the line, so wrapped lines are separate bars with
34
+ * a gap between them. A line box's background is as tall as the font's whole ascent and descent, which in
35
+ * DM Sans fills the line, so unmasked the lines of a paragraph touch and read as one block.
36
+ */
37
+ const BAR_MASK = `${ROUNDED_BAR} center / 100% min(1em, calc(1lh - 6px)) no-repeat`;
38
+ const BAR_STYLE: CSSProperties = { mask: BAR_MASK, WebkitMask: BAR_MASK };
39
+
31
40
  export function TextHold({ children, variant = 'bar', className }: TextHoldProps) {
32
- const hold = useRef<HTMLSpanElement>(null);
33
- const words = useRef<HTMLSpanElement>(null);
34
- const lines = useLineCount(hold, words, variant === 'bar');
41
+ const bar = variant === 'bar';
35
42
  return (
36
43
  <span
37
- ref={hold}
38
44
  aria-hidden
39
- className={cn('pointer-events-none select-none', variant === 'bar' && 'relative inline-block', className)}
45
+ className={cn(
46
+ // `bar`: the words themselves, unseen, on the skeleton's surface. The span stays INLINE, so the
47
+ // browser paints one bar per line the words take, each exactly as wide as that line, and
48
+ // `box-decoration-clone` gives every line its own bar (and its own mask, `BAR_STYLE`). Pure CSS: it
49
+ // is drawn in the server's HTML, before any script runs (a loading state streamed by the server
50
+ // is often replaced before it hydrates).
51
+ bar ? cn(SKELETON_SURFACE_CLASS, 'rounded-md box-decoration-clone text-transparent') : 'invisible',
52
+ // A hold is never selectable or clickable, whatever it wraps.
53
+ 'pointer-events-none select-none',
54
+ className,
55
+ )}
56
+ style={bar ? BAR_STYLE : undefined}
40
57
  >
41
- <span ref={words} className="invisible">
42
- {children}
43
- </span>
44
- {lines > 0 ? (
45
- // `justify-around`: each `Skeleton` sits in the middle of the line it stands for.
46
- <SkeletonText lines={lines} className="absolute inset-0 flex flex-col justify-around space-y-0" />
47
- ) : null}
58
+ {children}
48
59
  </span>
49
60
  );
50
61
  }
51
62
 
52
- /** How many lines the words take (one box per line), kept current as the width changes. */
53
- function useLineCount(
54
- hold: RefObject<HTMLSpanElement | null>,
55
- words: RefObject<HTMLSpanElement | null>,
56
- enabled: boolean,
57
- ): number {
58
- const [lines, setLines] = useState(0);
59
- useLayoutEffect(() => {
60
- const box = hold.current;
61
- if (!enabled || !box) return undefined;
62
- const measure = () => setLines(words.current?.getClientRects().length ?? 0);
63
- measure();
64
- const observer = new ResizeObserver(measure);
65
- observer.observe(box);
66
- return () => observer.disconnect();
67
- }, [hold, words, enabled]);
68
- return lines;
69
- }
70
-
71
63
  export interface LayoutHoldProps {
72
64
  /** The real layout, rendered with the data at hand. */
73
65
  children: ReactNode;
@@ -387,7 +387,7 @@ export function buildBaseComponents({
387
387
 
388
388
  // --- tables ---
389
389
  // The frame and the scroll container are ONE element, matching the sibling
390
- // block embed (`mermaid-diagram.tsx`) and `users-grid-skeleton`. It used to
390
+ // block embed (`mermaid-diagram.tsx`). It used to
391
391
  // be two — `overflow-x-auto` outside, `rounded-lg border` on an inner
392
392
  // `min-w-full` div — so nothing clipped: the cells' own `border-r`/`border-b`
393
393
  // ran straight through the rounded corners and out past the frame's edge.
@@ -3,10 +3,10 @@
3
3
  import React from 'react';
4
4
  import { cn } from '../../utils/cn';
5
5
  import { Chevron02DownIcon } from '../icons-v2-generated';
6
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
6
7
  import { ActionsMenuDropdown, type ActionsMenuGroup, type ActionsMenuItem } from './actions-menu';
7
8
  import type { ButtonProps, SplitButtonIconAction } from './button';
8
9
  import { Button, SplitButton } from './button';
9
- import { Skeleton } from './skeleton';
10
10
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';
11
11
 
12
12
  export type PageActionButton = {
@@ -274,7 +274,7 @@ function ActionSkeletons({
274
274
  // icon action keeps its square box there too.
275
275
  const isIconOnly = action ? !action.label || !!action.iconOnlyOnDesktop : emptyFallback === 'icon';
276
276
  return (
277
- <Skeleton
277
+ <UnifiedSkeleton
278
278
  // Static placeholder list — index IS the identity here.
279
279
  key={`action-skeleton-${idx}`}
280
280
  className={cn(
@@ -290,9 +290,7 @@ function ActionSkeletons({
290
290
  }
291
291
 
292
292
  /** Mobile placeholder for the variants that collapse to ONE trigger (icon button or "…"). */
293
- function MobileTriggerSkeleton() {
294
- return <Skeleton className={cn(SKELETON_HEIGHT, SKELETON_ICON_WIDTH, SKELETON_RADIUS)} />;
295
- }
293
+ const MOBILE_TRIGGER_SKELETON_CLASS = cn(SKELETON_HEIGHT, SKELETON_ICON_WIDTH, SKELETON_RADIUS);
296
294
 
297
295
  export function PageActions({
298
296
  variant = 'icon-buttons',
@@ -372,7 +370,7 @@ function IconButtonsVariant({
372
370
  {/* Mobile: single icon button OR all actions merged into one "..." menu */}
373
371
  <div className={cn('flex content-md:hidden', className)}>
374
372
  {loading ? (
375
- <MobileTriggerSkeleton />
373
+ <UnifiedSkeleton className={MOBILE_TRIGGER_SKELETON_CLASS} />
376
374
  ) : useSingleActionMobile && singleAction ? (
377
375
  renderActionButton(singleAction, { iconOnly: true })
378
376
  ) : hasMobileMenuItems ? (
@@ -426,7 +424,11 @@ function PrimaryButtonsVariant({
426
424
  </div>
427
425
 
428
426
  <div className={cn('hidden items-center md:content-max-md:flex', ACTIONS_GAP, className)}>
429
- {loading ? <MobileTriggerSkeleton /> : <CompactPrimaryActions actions={desktopActions} />}
427
+ {loading ? (
428
+ <UnifiedSkeleton className={MOBILE_TRIGGER_SKELETON_CLASS} />
429
+ ) : (
430
+ <CompactPrimaryActions actions={desktopActions} />
431
+ )}
430
432
  </div>
431
433
 
432
434
  <MobileBottomActions actions={sortedActions} loading={loading} />
@@ -477,7 +479,7 @@ function MenuPrimaryVariant({
477
479
 
478
480
  <div className={cn('flex content-md:hidden', className)}>
479
481
  {loading ? (
480
- <MobileTriggerSkeleton />
482
+ <UnifiedSkeleton className={MOBILE_TRIGGER_SKELETON_CLASS} />
481
483
  ) : hasMobileMenuItems || selector ? (
482
484
  // The selector rides into the menu as its header row: on mobile the
483
485
  // title row has no room for it, and hiding it entirely (what
@@ -19,6 +19,7 @@
19
19
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
20
20
  import Image, { resizedImageUrl } from '../../embed-shims/next-image';
21
21
  import { cn } from '../../utils/cn';
22
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
22
23
  import { MarqueeWall } from './marquee-wall';
23
24
 
24
25
  export interface PhotoWallImage {
@@ -292,16 +293,12 @@ export function PhotoWall({ images, columns = 2, speed = 24, fadeColor, classNam
292
293
  </MarqueeWall>
293
294
  ))
294
295
  : Array.from({ length: columns }, (_, index) => (
295
- <div
296
- key={index}
297
- className="flex h-full animate-pulse flex-col overflow-hidden"
298
- style={{ gap: COLUMN_GAP_PX }}
299
- >
296
+ <div key={index} className="flex h-full flex-col overflow-hidden" style={{ gap: COLUMN_GAP_PX }}>
300
297
  {(index % 2 === 0 ? (['tall', 'wide', 'square'] as const) : (['wide', 'tall', 'wide'] as const)).map(
301
298
  (orientation, i) => (
302
- <div
299
+ <UnifiedSkeleton
303
300
  key={i}
304
- className="w-full shrink-0 rounded-lg bg-ods-card"
301
+ className="h-auto w-full shrink-0 rounded-lg"
305
302
  style={{ aspectRatio: PHOTO_WALL_FRAME[orientation] }}
306
303
  />
307
304
  ),
@@ -1,9 +1,12 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from '../../../utils/cn';
4
+ import { LoadingRegion } from '../../loading/loading-region';
5
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
4
6
  import type { QueryReportTableSkeletonProps } from './types';
5
7
 
6
8
  export function QueryReportTableSkeleton({
9
+ region = true,
7
10
  rows,
8
11
  columns,
9
12
  columnWidth,
@@ -13,12 +16,16 @@ export function QueryReportTableSkeleton({
13
16
  const isCompact = variant === 'compact';
14
17
 
15
18
  return (
16
- <div className={cn('flex flex-col', isCompact ? 'gap-0' : 'gap-[var(--spacing-system-xs)]', className)}>
19
+ <LoadingRegion
20
+ label="Loading results"
21
+ announce={region}
22
+ className={cn('flex flex-col', isCompact ? 'gap-0' : 'gap-[var(--spacing-system-xs)]', className)}
23
+ >
17
24
  {/* Skeleton header */}
18
25
  <div className={cn('flex items-center gap-4 px-4', isCompact ? 'border-b border-ods-border py-2' : '')}>
19
26
  {Array.from({ length: columns }).map((_, i) => (
20
27
  <div key={`header-${i}`} className="flex shrink-0 items-center" style={{ width: columnWidth, height: 48 }}>
21
- <div className="h-4 w-3/4 animate-pulse rounded bg-ods-bg-surface" />
28
+ <UnifiedSkeleton className="h-4 w-3/4 rounded" />
22
29
  </div>
23
30
  ))}
24
31
  </div>
@@ -28,7 +35,6 @@ export function QueryReportTableSkeleton({
28
35
  <div
29
36
  key={`row-${rowIndex}`}
30
37
  className={cn(
31
- 'animate-pulse',
32
38
  isCompact
33
39
  ? 'border-b border-ods-border'
34
40
  : 'relative overflow-hidden rounded-[6px] border border-ods-border bg-ods-card',
@@ -37,15 +43,15 @@ export function QueryReportTableSkeleton({
37
43
  <div className={cn('flex items-center gap-4 px-4', isCompact ? 'h-[56px]' : 'h-[80px]')}>
38
44
  {Array.from({ length: columns }).map((_cell, colIndex) => (
39
45
  <div key={`cell-${rowIndex}-${colIndex}`} className="shrink-0" style={{ width: columnWidth }}>
40
- <div
41
- className={cn('rounded bg-ods-bg-surface', isCompact ? 'h-4' : 'h-5')}
42
- style={{ width: `${55 + ((rowIndex * colIndex * 7) % 35)}%` }}
46
+ <UnifiedSkeleton
47
+ className={cn('rounded', isCompact ? 'h-4' : 'h-5')}
48
+ width={`${55 + ((rowIndex * colIndex * 7) % 35)}%`}
43
49
  />
44
50
  </div>
45
51
  ))}
46
52
  </div>
47
53
  </div>
48
54
  ))}
49
- </div>
55
+ </LoadingRegion>
50
56
  );
51
57
  }
@@ -16,6 +16,7 @@ export function QueryReportTable({
16
16
  title,
17
17
  data,
18
18
  loading = false,
19
+ loadingRegion = true,
19
20
  skeletonRows = 8,
20
21
  skeletonColumns = 6,
21
22
  emptyMessage,
@@ -84,6 +85,7 @@ export function QueryReportTable({
84
85
  columns={skeletonColumns}
85
86
  columnWidth={columnWidth}
86
87
  variant={variant}
88
+ region={loadingRegion}
87
89
  />
88
90
  )}
89
91
 
@@ -11,6 +11,8 @@ export interface QueryReportTableProps {
11
11
  data: QueryResultRow[];
12
12
  /** Show skeleton loading state */
13
13
  loading?: boolean;
14
+ /** The loading state announces itself ("Loading results"). `false` inside another loading region. Default `true`. */
15
+ loadingRegion?: boolean;
14
16
  /** Number of skeleton rows to display (default: 8) */
15
17
  skeletonRows?: number;
16
18
  /** Number of skeleton columns to display (default: 6) */
@@ -56,4 +58,6 @@ export interface QueryReportTableSkeletonProps {
56
58
  columnWidth: number;
57
59
  variant?: QueryReportTableVariant;
58
60
  className?: string;
61
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
62
+ region?: boolean;
59
63
  }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * What a skeleton looks like: the pulsing surface every loading stand-in draws
3
+ * (`UnifiedSkeleton` and its presets, `TextHold`'s bars). A plain module, with
4
+ * no client directive, so a server component can read the string itself.
5
+ */
6
+ export const SKELETON_SURFACE_CLASS = 'animate-pulse motion-reduce:animate-none bg-ods-skeleton';
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from '../../../utils/cn';
4
+ import { UnifiedSkeleton } from '../../loading/unified-skeleton';
4
5
  import type { TableCardSkeletonProps } from './types';
5
6
 
6
7
  // INNER row heights: the bordered row card adds 1px top + bottom, so the
@@ -36,10 +37,7 @@ export function TableCardSkeleton({
36
37
  {Array.from({ length: rows }).map((_, index) => (
37
38
  <div
38
39
  key={index}
39
- className={cn(
40
- 'relative animate-pulse overflow-hidden rounded-[6px] border border-ods-border bg-ods-card',
41
- className,
42
- )}
40
+ className={cn('relative overflow-hidden rounded-[6px] border border-ods-border bg-ods-card', className)}
43
41
  >
44
42
  {/* Desktop Skeleton */}
45
43
  {/* Matches the ROW it stands in for: a compact row is content-sized
@@ -54,10 +52,10 @@ export function TableCardSkeleton({
54
52
  >
55
53
  {columns.map(column => (
56
54
  <div key={column.key} className={cn('flex shrink-0 flex-col justify-center', column.width || 'flex-1')}>
57
- <div className="mb-1 h-5 w-3/4 rounded bg-ods-bg-surface" />
55
+ <UnifiedSkeleton className="mb-1 h-5 w-3/4 rounded" />
58
56
  {/* second line simulates multi-line content on the primary column */}
59
57
  {index % 2 === 0 && column.key === primaryKey && (
60
- <div className="h-4 w-1/2 rounded bg-ods-bg-surface opacity-60" />
58
+ <UnifiedSkeleton className="h-4 w-1/2 rounded opacity-60" />
61
59
  )}
62
60
  </div>
63
61
  ))}
@@ -65,15 +63,15 @@ export function TableCardSkeleton({
65
63
  {/* Actions skeleton */}
66
64
  {hasActions && (
67
65
  <div className={cn('flex shrink-0 items-center gap-2', !hasChevron && 'ml-auto')}>
68
- <div className="h-12 w-12 rounded bg-ods-bg-surface" />
69
- <div className="h-12 w-24 rounded bg-ods-bg-surface" />
66
+ <UnifiedSkeleton className="h-12 w-12 rounded" />
67
+ <UnifiedSkeleton className="h-12 w-24 rounded" />
70
68
  </div>
71
69
  )}
72
70
 
73
71
  {/* Chevron skeleton */}
74
72
  {hasChevron && (
75
73
  <div className={cn('flex w-12 shrink-0 items-center justify-end', !hasActions && 'ml-auto')}>
76
- <div className="h-8 w-8 rounded bg-ods-bg-surface" />
74
+ <UnifiedSkeleton className="h-8 w-8 rounded" />
77
75
  </div>
78
76
  )}
79
77
  </div>
@@ -94,11 +92,11 @@ export function TableCardSkeleton({
94
92
  sized by its own `py-2` + floor, so adding `py-3` here made the
95
93
  compact mobile skeleton 78px against a real row's 58. */}
96
94
  <div className={cn('flex min-w-0 flex-1 flex-col justify-center', compact ? 'py-0' : 'py-3')}>
97
- <div className="mb-2 h-4 w-3/4 rounded bg-ods-bg-surface" />
98
- <div className="h-3 w-1/2 rounded bg-ods-bg-surface opacity-60" />
95
+ <UnifiedSkeleton className="mb-2 h-4 w-3/4 rounded" />
96
+ <UnifiedSkeleton className="h-3 w-1/2 rounded opacity-60" />
99
97
  </div>
100
- {hasActions && <div className="h-12 w-12 shrink-0 rounded bg-ods-bg-surface" />}
101
- {hasChevron && <div className="h-8 w-8 shrink-0 rounded bg-ods-bg-surface" />}
98
+ {hasActions && <UnifiedSkeleton className="h-12 w-12 shrink-0 rounded" />}
99
+ {hasChevron && <UnifiedSkeleton className="h-8 w-8 shrink-0 rounded" />}
102
100
  </div>
103
101
  </div>
104
102
  ))}
@@ -6,6 +6,8 @@ import { useCopyToClipboard } from '../../hooks/use-copy-to-clipboard';
6
6
  import { cn } from '../../utils/cn';
7
7
  import { formatTime } from '../../utils/format-date';
8
8
  import { Copy02Icon, SearchIcon } from '../icons-v2-generated';
9
+ import { LoadingRegion } from '../loading/loading-region';
10
+ import { UnifiedSkeleton } from '../loading/unified-skeleton';
9
11
  import { DataTable } from './data-table';
10
12
  import { useDataTable } from './data-table/use-data-table';
11
13
  import { NoData } from './no-data';
@@ -34,35 +36,41 @@ const RESULT_COLUMN_MIN_WIDTH = 176;
34
36
  const SKELETON_COLUMNS = 6;
35
37
 
36
38
  /** Column-bar skeleton (header cells + one card row): fixed 160px columns on
37
- every breakpoint, scrolling horizontally when they do not fit. Bars use
38
- bg-ods-bg-surface like the table skeletons — the bg-ods-skeleton token is
39
- the same color as the card background and would be invisible on the row. */
40
- export function TestResultsSkeleton() {
39
+ every breakpoint, scrolling horizontally when they do not fit. Bars are
40
+ `UnifiedSkeleton`s, like the table skeletons. */
41
+ export function TestResultsSkeleton({
42
+ region = true,
43
+ }: {
44
+ /** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
45
+ region?: boolean;
46
+ } = {}) {
41
47
  return (
42
- <ScrollShadow axis="horizontal">
43
- {/* No gap between the header bars and the row card — the real table's
48
+ <LoadingRegion label="Loading the test results" announce={region}>
49
+ <ScrollShadow axis="horizontal">
50
+ {/* No gap between the header bars and the row card — the real table's
44
51
  header and body sit flush. */}
45
- <div className="flex w-max min-w-full flex-col">
46
- <div className="flex items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)]">
47
- {Array.from({ length: SKELETON_COLUMNS }).map((_, i) => (
48
- <div key={`skeleton-header-${i}`} className="flex h-12 w-[160px] shrink-0 items-center">
49
- <div className="h-4 w-3/4 animate-pulse rounded-sm bg-ods-bg-surface" />
50
- </div>
51
- ))}
52
- </div>
53
- <div className="animate-pulse overflow-hidden rounded-[6px] border border-ods-border bg-ods-card">
54
- {/* Same INNER row heights as the DataTable (66/78px + the 1px card
55
- border on each side = 68/80px total, per design). */}
56
- <div className="flex h-[66px] items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)] content-md:h-[78px]">
52
+ <div className="flex w-max min-w-full flex-col">
53
+ <div className="flex items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)]">
57
54
  {Array.from({ length: SKELETON_COLUMNS }).map((_, i) => (
58
- <div key={`skeleton-cell-${i}`} className="w-[160px] shrink-0">
59
- <div className="h-5 w-3/4 rounded-sm bg-ods-bg-surface" />
55
+ <div key={`skeleton-header-${i}`} className="flex h-12 w-[160px] shrink-0 items-center">
56
+ <UnifiedSkeleton className="h-4 w-3/4 rounded-sm" />
60
57
  </div>
61
58
  ))}
62
59
  </div>
60
+ <div className="overflow-hidden rounded-[6px] border border-ods-border bg-ods-card">
61
+ {/* Same INNER row heights as the DataTable (66/78px + the 1px card
62
+ border on each side = 68/80px total, per design). */}
63
+ <div className="flex h-[66px] items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)] content-md:h-[78px]">
64
+ {Array.from({ length: SKELETON_COLUMNS }).map((_, i) => (
65
+ <div key={`skeleton-cell-${i}`} className="w-[160px] shrink-0">
66
+ <UnifiedSkeleton className="h-5 w-3/4 rounded-sm" />
67
+ </div>
68
+ ))}
69
+ </div>
70
+ </div>
63
71
  </div>
64
- </div>
65
- </ScrollShadow>
72
+ </ScrollShadow>
73
+ </LoadingRegion>
66
74
  );
67
75
  }
68
76
 
@@ -285,8 +285,8 @@
285
285
  was byte-identical to --color-bg-card, so every `bg-ods-skeleton` pulse
286
286
  sitting on a card was invisible — it only appeared while the row's hover
287
287
  tint lightened the ground beneath it (people-hub score table, 2026-08).
288
- `soft-grey` is what `ui/Skeleton` (bg-ods-border) already pulses with, so
289
- the two skeleton primitives now read as one, in both themes. */
288
+ `soft-grey` is the border's grey too, so a skeleton reads the same on
289
+ every surface, in both themes. */
290
290
  --color-bg-skeleton: var(--ods-system-greys-soft-grey);
291
291
  --color-bg-surface: var(--ods-system-greys-soft-grey);
292
292
  --color-bg-surface-hover: var(--ods-system-greys-soft-grey-hover);
@@ -3,23 +3,32 @@
3
3
  * (article-body echo in JSON-LD) and chat entity-card preview (clamped previews
4
4
  * inside chat cards).
5
5
  *
6
- * The text is what a reader of the rendered page reads: the markdown is parsed with the SAME
7
- * pipeline the renderer uses (remark with GFM and line breaks, then rehype with raw HTML, as in
8
- * `components/ui/markdown/engine.tsx`), and the result is the `innerText` of that HTML
6
+ * The text is what a reader of the rendered page reads: the markdown goes through the SAME steps
7
+ * the renderer's pipeline runs (`components/ui/markdown/engine.tsx`: remark with GFM and line
8
+ * breaks, then rehype with raw HTML), and the result is the `innerText` of that HTML
9
9
  * (`hast-util-to-text`). So link, emphasis and heading syntax, raw HTML tags (`<a rel>`, `<div>`),
10
10
  * escapes (`\<`) and entities (`&amp;`) all come out as their text; script and style content and
11
11
  * comments do not. Code blocks and images are left out: their content is not prose.
12
12
  *
13
+ * The steps are unified's UTILITY functions, the ones those plugins wrap (`mdast-util-from-markdown`
14
+ * with the GFM extensions, `mdast-util-newline-to-break`, `mdast-util-to-hast`, `hast-util-raw`),
15
+ * not a `remark()` processor. This module is in the CommonJS builds, and a unified processor is a
16
+ * callable object without `Function.prototype`: the bundler compiles a call to an imported
17
+ * function as `.call(void 0)`, which a processor does not have (0.0.745 crashed on load:
18
+ * `_remark.remark.call is not a function`). Plain functions have no such limit, and one
19
+ * synchronous conversion needs no plugin system.
20
+ *
13
21
  * The two consumers differ only in whitespace — `mode: 'article'` keeps paragraph breaks;
14
22
  * `mode: 'preview'` collapses everything to a single line.
15
23
  */
16
24
  import type { Element, Root } from 'hast';
25
+ import { raw } from 'hast-util-raw';
17
26
  import { toText } from 'hast-util-to-text';
18
- import rehypeRaw from 'rehype-raw';
19
- import { remark } from 'remark';
20
- import remarkBreaks from 'remark-breaks';
21
- import remarkGfm from 'remark-gfm';
22
- import remarkRehype from 'remark-rehype';
27
+ import { fromMarkdown } from 'mdast-util-from-markdown';
28
+ import { gfmFromMarkdown } from 'mdast-util-gfm';
29
+ import { newlineToBreak } from 'mdast-util-newline-to-break';
30
+ import { toHast } from 'mdast-util-to-hast';
31
+ import { gfm } from 'micromark-extension-gfm';
23
32
  import { SKIP, visit } from 'unist-util-visit';
24
33
 
25
34
  export interface MarkdownToPlainOptions {
@@ -47,20 +56,20 @@ export function stripInlineMarkdown(s: string): string {
47
56
  .replace(/`([^`]+)`/g, '$1'); // `inline code` → inline code
48
57
  }
49
58
 
50
- // The renderer's own pipeline, up to the HTML tree. Built once; `runSync` has no async plugins.
51
- const toHtmlTree = remark()
52
- .use(remarkGfm)
53
- .use(remarkBreaks)
54
- .use(remarkRehype, { allowDangerousHtml: true })
55
- .use(rehypeRaw);
56
-
57
59
  /** Elements whose content is not prose: code blocks and images. */
58
60
  const NOT_PROSE = new Set(['pre', 'img']);
59
61
 
60
62
  const TABLE_SECTIONS = new Set(['thead', 'tbody', 'tfoot']);
61
63
 
64
+ /** The renderer's steps, as functions: markdown (GFM) → line breaks → HTML tree with raw HTML parsed. */
65
+ function htmlTree(markdown: string): Root {
66
+ const mdast = fromMarkdown(markdown, { extensions: [gfm()], mdastExtensions: [gfmFromMarkdown()] });
67
+ newlineToBreak(mdast);
68
+ return raw(toHast(mdast, { allowDangerousHtml: true })) as Root;
69
+ }
70
+
62
71
  function proseTree(markdown: string): Root {
63
- const tree: Root = toHtmlTree.runSync(toHtmlTree.parse(markdown));
72
+ const tree = htmlTree(markdown);
64
73
  visit(tree, 'element', (node: Element, index, parent) => {
65
74
  if (NOT_PROSE.has(node.tagName) && parent && index !== undefined) {
66
75
  parent.children.splice(index, 1);
@@ -1,125 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
-
3
-
4
- var _chunk3ATAYP36cjs = require('./chunk-3ATAYP36.cjs');
5
-
6
- // src/components/ui/portal-container.tsx
7
- var _react = require('react');
8
- var PortalContainerContext = _react.createContext.call(void 0, null);
9
- function usePortalContainer() {
10
- return _react.useContext.call(void 0, PortalContainerContext);
11
- }
12
- var CollisionBoundaryContext = _react.createContext.call(void 0, null);
13
- function useCollisionBoundary() {
14
- return _react.useContext.call(void 0, CollisionBoundaryContext);
15
- }
16
- var COLLISION_PADDING_PX = 8;
17
-
18
- // src/components/ui/skeleton.tsx
19
-
20
- var _jsxruntime = require('react/jsx-runtime');
21
- var Skeleton = _react.forwardRef.call(void 0, ({ className, ...props }, ref) => {
22
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "animate-pulse rounded-md bg-ods-border", className), ...props });
23
- });
24
- Skeleton.displayName = "Skeleton";
25
- var SkeletonText = _react.forwardRef.call(void 0, ({ lines = 1, className, ...props }, ref) => {
26
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "space-y-2", className), ...props, children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27
- Skeleton,
28
- {
29
- className: _chunk3ATAYP36cjs.cn.call(void 0,
30
- "h-4",
31
- i === lines - 1 && lines > 1 && "w-3/4"
32
- // Last line shorter for multi-line
33
- )
34
- },
35
- i
36
- )) });
37
- });
38
- SkeletonText.displayName = "SkeletonText";
39
- var SkeletonCard = _react.forwardRef.call(void 0,
40
- ({ showImage = false, className, ...props }, ref) => {
41
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "overflow-hidden rounded-lg border border-ods-border", className), ...props, children: [
42
- showImage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "h-48 w-full" }),
43
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "p-6", children: [
44
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "mb-4 h-6 w-3/4" }),
45
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SkeletonText, { lines: 3 })
46
- ] })
47
- ] });
48
- }
49
- );
50
- SkeletonCard.displayName = "SkeletonCard";
51
- var SkeletonGrid = _react.forwardRef.call(void 0,
52
- ({ columns = 3, items = 6, showImages = false, className, ...props }, ref) => {
53
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
54
- "div",
55
- {
56
- ref,
57
- className: _chunk3ATAYP36cjs.cn.call(void 0,
58
- `grid grid-cols-1 gap-6`,
59
- columns === 2 && "content-md:grid-cols-2",
60
- columns === 3 && "content-md:grid-cols-3",
61
- columns === 4 && "content-md:grid-cols-4",
62
- className
63
- ),
64
- ...props,
65
- children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SkeletonCard, { showImage: showImages }, i))
66
- }
67
- );
68
- }
69
- );
70
- SkeletonGrid.displayName = "SkeletonGrid";
71
- var SkeletonButton = _react.forwardRef.call(void 0,
72
- ({ size = "default", className, ...props }, ref) => {
73
- const sizeClasses = {
74
- sm: "h-8 w-20",
75
- default: "h-10 w-32",
76
- lg: "h-12 w-40"
77
- };
78
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "rounded-lg", sizeClasses[size], className), ...props });
79
- }
80
- );
81
- SkeletonButton.displayName = "SkeletonButton";
82
- var SkeletonHeading = _react.forwardRef.call(void 0, ({ level = 1, className, ...props }, ref) => {
83
- const heightClasses = {
84
- 1: "h-12",
85
- 2: "h-10",
86
- 3: "h-8",
87
- 4: "h-7",
88
- 5: "h-6",
89
- 6: "h-5"
90
- };
91
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, heightClasses[level], "w-3/4", className), ...props });
92
- });
93
- SkeletonHeading.displayName = "SkeletonHeading";
94
- var SkeletonList = _react.forwardRef.call(void 0, ({ items = 5, className, ...props }, ref) => {
95
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "space-y-3", className), ...props, children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-3", children: [
96
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "h-10 w-10 flex-shrink-0 rounded-full" }),
97
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1", children: [
98
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "mb-1 h-4 w-1/3" }),
99
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "h-3 w-1/2" })
100
- ] })
101
- ] }, i)) });
102
- });
103
- SkeletonList.displayName = "SkeletonList";
104
- var SkeletonNavigation = _react.forwardRef.call(void 0,
105
- ({ items = 6, className, ...props }, ref) => {
106
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref, className: _chunk3ATAYP36cjs.cn.call(void 0, "flex items-center gap-6", className), ...props, children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Skeleton, { className: "h-5 w-20" }, i)) });
107
- }
108
- );
109
- SkeletonNavigation.displayName = "SkeletonNavigation";
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
- exports.PortalContainerContext = PortalContainerContext; exports.usePortalContainer = usePortalContainer; exports.CollisionBoundaryContext = CollisionBoundaryContext; exports.useCollisionBoundary = useCollisionBoundary; exports.COLLISION_PADDING_PX = COLLISION_PADDING_PX; exports.Skeleton = Skeleton; exports.SkeletonText = SkeletonText; exports.SkeletonCard = SkeletonCard; exports.SkeletonGrid = SkeletonGrid; exports.SkeletonButton = SkeletonButton; exports.SkeletonHeading = SkeletonHeading; exports.SkeletonList = SkeletonList; exports.SkeletonNavigation = SkeletonNavigation;