@flamingo-stack/openframe-frontend-core 0.0.703 → 0.0.704-snapshot.20261006133653

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 (336) hide show
  1. package/dist/{chunk-3L7KCOGO.cjs → chunk-2QEUFXNS.cjs} +30 -30
  2. package/dist/{chunk-BMJUKS6S.cjs → chunk-3256UJXS.cjs} +47 -47
  3. package/dist/{chunk-GZYLZ4MB.js → chunk-4S7TJYRQ.js} +3 -3
  4. package/dist/{chunk-ENGBNKUJ.js → chunk-5EFZO5EB.js} +675 -569
  5. package/dist/{chunk-TCZCMD5Q.js → chunk-5HBHO5TB.js} +1 -1
  6. package/dist/{chunk-BOUPNYUV.js → chunk-64HOMVYC.js} +5 -5
  7. package/dist/{chunk-YR6JPJF4.js → chunk-6XIF2Z7I.js} +4 -4
  8. package/dist/{chunk-NU724ZVN.cjs → chunk-7GHB2IK6.cjs} +121 -121
  9. package/dist/{chunk-GX3OUTFO.cjs → chunk-7ZYIC7NA.cjs} +69 -55
  10. package/dist/{chunk-53AC23ZN.js → chunk-A6WVQKOZ.js} +24 -24
  11. package/dist/{chunk-4OGAXAEG.cjs → chunk-ABU3TGXA.cjs} +3 -3
  12. package/dist/{chunk-RTXTGLGB.cjs → chunk-ACV4DFQ3.cjs} +4 -4
  13. package/dist/{chunk-RLDAYA2A.cjs → chunk-BH6PJP66.cjs} +29 -29
  14. package/dist/{chunk-BRXOGCH3.cjs → chunk-BIZNSF3U.cjs} +3 -3
  15. package/dist/{chunk-2A4XES7R.cjs → chunk-BM5MVGH3.cjs} +3 -3
  16. package/dist/{chunk-6YCXA7CN.js → chunk-CH5232HV.js} +20 -19
  17. package/dist/{chunk-UIBSSVON.cjs → chunk-D7BTSVMS.cjs} +2 -2
  18. package/dist/{chunk-YBGEPKC2.cjs → chunk-F7Y2ZS5U.cjs} +6 -6
  19. package/dist/{chunk-5V6O73EH.js → chunk-FLKJYMVB.js} +3 -3
  20. package/dist/{chunk-NMGX2ZTU.js → chunk-IFUQVZF4.js} +17 -17
  21. package/dist/{chunk-2NE3DNXY.js → chunk-IKCQK67U.js} +2 -2
  22. package/dist/{chunk-KFDP3DUL.cjs → chunk-IXPUM3AW.cjs} +98 -98
  23. package/dist/{chunk-QGTDWFT6.js → chunk-IZHZMBIX.js} +2469 -1928
  24. package/dist/{chunk-67CXGPTW.cjs → chunk-JKEEFQOX.cjs} +505 -72
  25. package/dist/{chunk-NYSYSKSH.cjs → chunk-M6HTJTFH.cjs} +15 -15
  26. package/dist/{chunk-OGLCD3UL.js → chunk-MFFCUVWG.js} +6 -6
  27. package/dist/{chunk-KJ5LWATV.js → chunk-MKXO4Q5P.js} +7 -7
  28. package/dist/{chunk-EMCQGFXD.cjs → chunk-MMOODW57.cjs} +28 -27
  29. package/dist/{chunk-Q76ZTHNV.js → chunk-MP2C3LJ4.js} +1 -1
  30. package/dist/{chunk-J4K5JOLI.js → chunk-MV4HYG3B.js} +25 -11
  31. package/dist/{chunk-2T6QWNXU.js → chunk-NDESEPW5.js} +99 -11
  32. package/dist/{chunk-HHFPQNP3.js → chunk-NJDHFC55.js} +15 -15
  33. package/dist/{chunk-HUOLB7ZN.cjs → chunk-OHFS7VOU.cjs} +9 -9
  34. package/dist/{chunk-7632TNE7.js → chunk-OSNIZNVH.js} +7 -7
  35. package/dist/{chunk-UTW4SQDI.js → chunk-OUHMD6EU.js} +10 -10
  36. package/dist/{chunk-MXHJROXJ.cjs → chunk-P23CRLU4.cjs} +1245 -1139
  37. package/dist/{chunk-64O4L7WN.js → chunk-PDWVPI3S.js} +11 -55
  38. package/dist/{chunk-DAW6TDZB.js → chunk-PFC2HWQA.js} +30 -16
  39. package/dist/{chunk-G55W76S6.js → chunk-POZ7F77D.js} +12 -13
  40. package/dist/{chunk-PJP5SMOU.js → chunk-PPEZGUL7.js} +500 -67
  41. package/dist/{chunk-SFGXIFYO.cjs → chunk-QC7Q3XCE.cjs} +24 -24
  42. package/dist/{chunk-MDBHZBW7.cjs → chunk-RKV5B7EU.cjs} +92 -4
  43. package/dist/{chunk-5VPIC5MD.cjs → chunk-SAAZEWUR.cjs} +12 -12
  44. package/dist/{chunk-IIMICN7L.cjs → chunk-TYWLNCNH.cjs} +4 -48
  45. package/dist/{chunk-HYLIQMZH.cjs → chunk-UBP5RNGK.cjs} +33 -33
  46. package/dist/{chunk-HUMWQMCU.js → chunk-UT4YHQZW.js} +3 -3
  47. package/dist/{chunk-BSEIEWM5.cjs → chunk-V3H26CNS.cjs} +28 -14
  48. package/dist/{chunk-NGJCWEYX.cjs → chunk-VHCACDKP.cjs} +46 -46
  49. package/dist/{chunk-SL2FOFT2.js → chunk-VMAZCLX4.js} +7 -7
  50. package/dist/{chunk-5FFNNJM7.js → chunk-VR2ZLFCP.js} +1 -1
  51. package/dist/{chunk-NCTYD7HL.js → chunk-VYWMEL5F.js} +14 -14
  52. package/dist/{chunk-HY5YL3U5.cjs → chunk-XBWE423R.cjs} +1994 -1453
  53. package/dist/{chunk-XCIFHW4E.cjs → chunk-XOYH2YQE.cjs} +2 -2
  54. package/dist/{chunk-S6V7A5FS.cjs → chunk-ZQZFIE2K.cjs} +32 -33
  55. package/dist/components/case-studies/index.cjs +24 -24
  56. package/dist/components/case-studies/index.js +10 -10
  57. package/dist/components/chat/chat-archive-page.d.ts +3 -3
  58. package/dist/components/chat/chat-archive-page.d.ts.map +1 -1
  59. package/dist/components/chat/chat-input.d.ts.map +1 -1
  60. package/dist/components/chat/chat-nav-sidebar.d.ts +4 -0
  61. package/dist/components/chat/chat-nav-sidebar.d.ts.map +1 -1
  62. package/dist/components/chat/chat-panel-header.d.ts +3 -2
  63. package/dist/components/chat/chat-panel-header.d.ts.map +1 -1
  64. package/dist/components/chat/embeddable-chat.d.ts +36 -2
  65. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  66. package/dist/components/chat/index.cjs +14 -6
  67. package/dist/components/chat/index.d.ts +4 -1
  68. package/dist/components/chat/index.d.ts.map +1 -1
  69. package/dist/components/chat/index.js +13 -5
  70. package/dist/components/chat/mingo-archive-list.d.ts +17 -0
  71. package/dist/components/chat/mingo-archive-list.d.ts.map +1 -0
  72. package/dist/components/chat/mingo-chat-header.d.ts +31 -0
  73. package/dist/components/chat/mingo-chat-header.d.ts.map +1 -0
  74. package/dist/components/chat/mingo-chat-rail.d.ts +54 -0
  75. package/dist/components/chat/mingo-chat-rail.d.ts.map +1 -0
  76. package/dist/components/chat/model-display.d.ts.map +1 -1
  77. package/dist/components/contact/contact-form.d.ts.map +1 -1
  78. package/dist/components/contact/index.cjs +11 -11
  79. package/dist/components/contact/index.js +10 -10
  80. package/dist/components/content-loading-container.d.ts +1 -1
  81. package/dist/components/content-loading-container.d.ts.map +1 -1
  82. package/dist/components/docs/index.cjs +14 -14
  83. package/dist/components/docs/index.js +13 -13
  84. package/dist/components/docs/skeletons.d.ts.map +1 -1
  85. package/dist/components/embeds/index.cjs +11 -11
  86. package/dist/components/embeds/index.js +10 -10
  87. package/dist/components/faq/index.cjs +12 -12
  88. package/dist/components/faq/index.js +11 -11
  89. package/dist/components/features/figma-prototype-viewer.d.ts.map +1 -1
  90. package/dist/components/features/index.cjs +10 -10
  91. package/dist/components/features/index.js +9 -9
  92. package/dist/components/features/media-gallery-manager.d.ts.map +1 -1
  93. package/dist/components/features/parallax-image-showcase.d.ts.map +1 -1
  94. package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
  95. package/dist/components/features/section-selector.d.ts.map +1 -1
  96. package/dist/components/help-center-pages/index.cjs +119 -119
  97. package/dist/components/help-center-pages/index.js +39 -39
  98. package/dist/components/help-center-pages/trust-center-sections.d.ts +2 -2
  99. package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
  100. package/dist/components/index.cjs +94 -86
  101. package/dist/components/index.js +32 -24
  102. package/dist/components/layout/article-detail-layout.d.ts +1 -1
  103. package/dist/components/layout/article-detail-layout.d.ts.map +1 -1
  104. package/dist/components/layout/page-container.d.ts.map +1 -1
  105. package/dist/components/layout/title-block.d.ts +2 -2
  106. package/dist/components/layout/title-block.d.ts.map +1 -1
  107. package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
  108. package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
  109. package/dist/components/meeting-scheduler/booking-form.d.ts +4 -4
  110. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  111. package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
  112. package/dist/components/meeting-scheduler/index.cjs +127 -127
  113. package/dist/components/meeting-scheduler/index.d.ts +2 -2
  114. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  115. package/dist/components/meeting-scheduler/index.js +50 -50
  116. package/dist/components/navigation/app-header.d.ts +4 -0
  117. package/dist/components/navigation/app-header.d.ts.map +1 -1
  118. package/dist/components/navigation/app-layout-side-panel.d.ts +142 -0
  119. package/dist/components/navigation/app-layout-side-panel.d.ts.map +1 -0
  120. package/dist/components/navigation/app-layout.d.ts +11 -1
  121. package/dist/components/navigation/app-layout.d.ts.map +1 -1
  122. package/dist/components/navigation/header-mingo-button.d.ts +4 -1
  123. package/dist/components/navigation/header-mingo-button.d.ts.map +1 -1
  124. package/dist/components/navigation/index.cjs +13 -13
  125. package/dist/components/navigation/index.d.ts +1 -0
  126. package/dist/components/navigation/index.d.ts.map +1 -1
  127. package/dist/components/navigation/index.js +12 -12
  128. package/dist/components/navigation/navigation-sidebar.d.ts +8 -1
  129. package/dist/components/navigation/navigation-sidebar.d.ts.map +1 -1
  130. package/dist/components/navigation/sliding-sidebar.d.ts.map +1 -1
  131. package/dist/components/onboarding-guides/index.cjs +14 -14
  132. package/dist/components/onboarding-guides/index.js +13 -13
  133. package/dist/components/persistent-filter-controls.d.ts.map +1 -1
  134. package/dist/components/related-content/index.cjs +7 -7
  135. package/dist/components/related-content/index.js +6 -6
  136. package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
  137. package/dist/components/tickets/help-center-create-form.d.ts +4 -4
  138. package/dist/components/tickets/index.cjs +15 -15
  139. package/dist/components/tickets/index.js +14 -14
  140. package/dist/components/ui/announcement-bar-view.d.ts.map +1 -1
  141. package/dist/components/ui/breadcrumb.d.ts.map +1 -1
  142. package/dist/components/ui/checkbox-block.d.ts.map +1 -1
  143. package/dist/components/ui/dashboard-info-card.d.ts +1 -1
  144. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  145. package/dist/components/ui/data-table/data-table-body.d.ts +2 -2
  146. package/dist/components/ui/data-table/data-table-skeleton.d.ts +2 -2
  147. package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
  148. package/dist/components/ui/data-table/utils.d.ts +2 -2
  149. package/dist/components/ui/dialog.d.ts.map +1 -1
  150. package/dist/components/ui/drawer.d.ts.map +1 -1
  151. package/dist/components/ui/entity-image.d.ts +2 -2
  152. package/dist/components/ui/file-manager/index.cjs +36 -36
  153. package/dist/components/ui/file-manager/index.js +3 -3
  154. package/dist/components/ui/filter-modal.d.ts.map +1 -1
  155. package/dist/components/ui/index.cjs +18 -10
  156. package/dist/components/ui/index.js +17 -9
  157. package/dist/components/ui/info-card-row.d.ts.map +1 -1
  158. package/dist/components/ui/menubar.d.ts +1 -1
  159. package/dist/components/ui/menubar.d.ts.map +1 -1
  160. package/dist/components/ui/modal-v2.d.ts.map +1 -1
  161. package/dist/components/ui/modal.d.ts.map +1 -1
  162. package/dist/components/ui/no-data/no-data-actions.d.ts.map +1 -1
  163. package/dist/components/ui/no-data/no-data-styles.d.ts +1 -1
  164. package/dist/components/ui/no-data/no-data-styles.d.ts.map +1 -1
  165. package/dist/components/ui/page-actions.d.ts.map +1 -1
  166. package/dist/components/ui/sheet.d.ts.map +1 -1
  167. package/dist/components/ui/table/table-skeleton.d.ts +1 -1
  168. package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
  169. package/dist/hooks/index.cjs +23 -9
  170. package/dist/hooks/index.js +24 -10
  171. package/dist/hooks/ui/index.d.ts +1 -0
  172. package/dist/hooks/ui/index.d.ts.map +1 -1
  173. package/dist/hooks/ui/use-content-breakpoint.d.ts +32 -0
  174. package/dist/hooks/ui/use-content-breakpoint.d.ts.map +1 -0
  175. package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts +2 -2
  176. package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts.map +1 -1
  177. package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
  178. package/dist/index.cjs +39 -17
  179. package/dist/index.js +41 -19
  180. package/dist/styles/layout-steps.d.ts +30 -0
  181. package/dist/styles/layout-steps.d.ts.map +1 -0
  182. package/dist/tailwind.config.cjs +36 -11
  183. package/dist/tailwind.config.js +36 -11
  184. package/eslint-config/README.md +9 -0
  185. package/eslint-config/base.js +17 -1
  186. package/eslint-config/layout-variants.js +57 -0
  187. package/package.json +3 -1
  188. package/src/ODS_TOKEN_RULES.md +40 -0
  189. package/src/components/chat/chat-archive-page.tsx +9 -7
  190. package/src/components/chat/chat-input.tsx +5 -1
  191. package/src/components/chat/chat-nav-sidebar.tsx +10 -4
  192. package/src/components/chat/chat-panel-header.tsx +8 -5
  193. package/src/components/chat/embeddable-chat.tsx +675 -485
  194. package/src/components/chat/index.ts +4 -0
  195. package/src/components/chat/mingo-archive-list.tsx +108 -0
  196. package/src/components/chat/mingo-chat-header.tsx +104 -0
  197. package/src/components/chat/mingo-chat-rail.tsx +361 -0
  198. package/src/components/chat/model-display.tsx +8 -1
  199. package/src/components/contact/contact-form.tsx +11 -9
  200. package/src/components/content-loading-container.tsx +4 -2
  201. package/src/components/docs/doc-viewer.tsx +7 -7
  202. package/src/components/docs/skeletons.tsx +7 -4
  203. package/src/components/dynamic-skeleton.tsx +1 -1
  204. package/src/components/embeds/claude-embed.tsx +1 -1
  205. package/src/components/embeds/embed-viewer-frame.tsx +4 -4
  206. package/src/components/embeds/figma-embed.tsx +2 -2
  207. package/src/components/embeds/google-sheets-viewer.tsx +1 -1
  208. package/src/components/embeds/pdf-viewer.tsx +3 -3
  209. package/src/components/empty-state.tsx +6 -6
  210. package/src/components/faq/faq-section.tsx +2 -2
  211. package/src/components/faq-accordion.tsx +1 -1
  212. package/src/components/features/board/board-column-header.tsx +1 -1
  213. package/src/components/features/command-box.tsx +3 -3
  214. package/src/components/features/entity-video-section.tsx +2 -2
  215. package/src/components/features/figma-prototype-viewer.tsx +4 -1
  216. package/src/components/features/media-gallery-manager.tsx +3 -1
  217. package/src/components/features/parallax-image-showcase.tsx +9 -6
  218. package/src/components/features/policy-configuration-panel.tsx +9 -7
  219. package/src/components/features/provider-button.tsx +1 -1
  220. package/src/components/features/section-selector.tsx +11 -6
  221. package/src/components/features/select-button.tsx +4 -4
  222. package/src/components/features/seo-editor-preview.tsx +2 -2
  223. package/src/components/features/video-ratio-tabs.tsx +3 -3
  224. package/src/components/features/waitlist-form.tsx +1 -1
  225. package/src/components/help-center-pages/trust-center-page.tsx +1 -1
  226. package/src/components/help-center-pages/trust-center-sections.tsx +14 -14
  227. package/src/components/icon-display.tsx +1 -1
  228. package/src/components/layout/article-detail-layout.tsx +4 -2
  229. package/src/components/layout/list-page-layout.tsx +2 -2
  230. package/src/components/layout/page-container.tsx +26 -14
  231. package/src/components/layout/page-heading.tsx +1 -1
  232. package/src/components/layout/page-layout.tsx +1 -1
  233. package/src/components/layout/title-block.tsx +13 -13
  234. package/src/components/loading/card-skeleton.tsx +11 -11
  235. package/src/components/loading/category-vendor-selector-skeleton.tsx +1 -1
  236. package/src/components/loading/content-skeleton.tsx +6 -6
  237. package/src/components/loading/device-card-skeleton.tsx +1 -1
  238. package/src/components/loading/margin-report-skeleton.tsx +7 -7
  239. package/src/components/loading/msp-profile-form-skeleton.tsx +3 -3
  240. package/src/components/loading/organization-card-skeleton.tsx +2 -2
  241. package/src/components/loading/page-layout-skeleton.tsx +80 -68
  242. package/src/components/loading/unified-skeleton.tsx +16 -6
  243. package/src/components/media-carousel.tsx +3 -3
  244. package/src/components/meeting-scheduler/booking-form.tsx +9 -8
  245. package/src/components/meeting-scheduler/context-panel.tsx +8 -6
  246. package/src/components/meeting-scheduler/directory.tsx +4 -4
  247. package/src/components/meeting-scheduler/index.tsx +15 -15
  248. package/src/components/meeting-scheduler/slot-picker.tsx +12 -12
  249. package/src/components/navigation/app-header.tsx +6 -0
  250. package/src/components/navigation/app-layout-side-panel.tsx +594 -0
  251. package/src/components/navigation/app-layout.tsx +69 -4
  252. package/src/components/navigation/header-mingo-button.tsx +13 -3
  253. package/src/components/navigation/index.ts +5 -0
  254. package/src/components/navigation/navigation-sidebar.tsx +17 -3
  255. package/src/components/navigation/sliding-sidebar.tsx +2 -1
  256. package/src/components/pagination.tsx +3 -3
  257. package/src/components/persistent-filter-controls.tsx +6 -2
  258. package/src/components/platform/ScriptArguments.tsx +1 -1
  259. package/src/components/platform/ScriptInfoSection.tsx +4 -4
  260. package/src/components/platform/SoftwareSourceBadge.tsx +1 -1
  261. package/src/components/shared/article-author-byline.tsx +1 -1
  262. package/src/components/shared/delivery/delivery-lists.tsx +2 -2
  263. package/src/components/shared/delivery/delivery-row.tsx +7 -7
  264. package/src/components/shared/delivery/delivery-table.tsx +3 -3
  265. package/src/components/shared/detail-page-skeleton.tsx +11 -5
  266. package/src/components/shared/dev-section/dev-card-row.tsx +6 -6
  267. package/src/components/shared/dev-section/dev-section-view.tsx +1 -1
  268. package/src/components/shared/product-release/product-release-card-skeleton.tsx +8 -8
  269. package/src/components/shared/product-release/product-release-card.tsx +9 -9
  270. package/src/components/shared/product-release/product-releases-view.tsx +1 -1
  271. package/src/components/shared/product-release/release-detail-page.tsx +5 -5
  272. package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +1 -1
  273. package/src/components/shared/roadmap/roadmap-grid.tsx +3 -3
  274. package/src/components/tickets/help-center-card.tsx +1 -1
  275. package/src/components/tickets/help-center-create-form.tsx +12 -12
  276. package/src/components/ui/announcement-bar-view.tsx +2 -10
  277. package/src/components/ui/benefit-card.tsx +18 -18
  278. package/src/components/ui/brand-association-grid.tsx +4 -4
  279. package/src/components/ui/breadcrumb.tsx +4 -1
  280. package/src/components/ui/card.tsx +1 -1
  281. package/src/components/ui/checkbox-block.tsx +9 -7
  282. package/src/components/ui/content-loader.tsx +3 -3
  283. package/src/components/ui/cursor-pagination.tsx +3 -3
  284. package/src/components/ui/dashboard-info-card.tsx +13 -9
  285. package/src/components/ui/data-attribution.tsx +2 -2
  286. package/src/components/ui/data-table/data-table-body.tsx +2 -2
  287. package/src/components/ui/data-table/data-table-header.tsx +15 -15
  288. package/src/components/ui/data-table/data-table-skeleton.tsx +6 -6
  289. package/src/components/ui/data-table/utils.ts +5 -5
  290. package/src/components/ui/dialog.tsx +4 -1
  291. package/src/components/ui/drawer.tsx +2 -1
  292. package/src/components/ui/duration-input.tsx +1 -1
  293. package/src/components/ui/entity-image.tsx +3 -3
  294. package/src/components/ui/feature-card.tsx +10 -10
  295. package/src/components/ui/file-manager/file-manager-action-bar.tsx +1 -1
  296. package/src/components/ui/file-manager/file-manager.tsx +1 -1
  297. package/src/components/ui/filter-modal.tsx +8 -1
  298. package/src/components/ui/highlight-card.tsx +7 -7
  299. package/src/components/ui/info-card-row.tsx +10 -6
  300. package/src/components/ui/modal-v2.tsx +7 -2
  301. package/src/components/ui/modal.tsx +3 -2
  302. package/src/components/ui/no-data/no-data-actions.tsx +10 -4
  303. package/src/components/ui/no-data/no-data-styles.ts +1 -1
  304. package/src/components/ui/no-data/no-data.tsx +1 -1
  305. package/src/components/ui/organization-card.tsx +1 -1
  306. package/src/components/ui/page-actions.tsx +34 -5
  307. package/src/components/ui/progress-bar.tsx +2 -2
  308. package/src/components/ui/query-report-table/query-report-table.tsx +1 -1
  309. package/src/components/ui/search-input.tsx +2 -2
  310. package/src/components/ui/service-card.tsx +2 -2
  311. package/src/components/ui/sheet.tsx +2 -1
  312. package/src/components/ui/skeleton.tsx +3 -3
  313. package/src/components/ui/stacked-rows-panel.tsx +4 -4
  314. package/src/components/ui/tab-navigation.tsx +2 -2
  315. package/src/components/ui/tab-selector.tsx +2 -2
  316. package/src/components/ui/table/table-header.tsx +3 -3
  317. package/src/components/ui/table/table-skeleton.tsx +3 -3
  318. package/src/components/ui/table/utils.ts +5 -5
  319. package/src/components/ui/tag-search-input.tsx +3 -3
  320. package/src/components/ui/tags-manager.tsx +5 -5
  321. package/src/components/ui/test-run.tsx +2 -2
  322. package/src/components/ui/ticket-info-section.tsx +1 -1
  323. package/src/components/ui/ticket-notes-section.tsx +1 -1
  324. package/src/components/ui/ticket-status-config-row.tsx +15 -15
  325. package/src/hooks/ui/index.ts +1 -0
  326. package/src/hooks/ui/use-content-breakpoint.ts +58 -0
  327. package/src/hooks/ui/use-media-query.ts +3 -2
  328. package/src/styles/app-globals.css +13 -0
  329. package/src/styles/index.css +2 -0
  330. package/src/styles/layout-steps.ts +14 -0
  331. package/src/styles/ods-colors.css +15 -0
  332. package/src/styles/ods-content-area-tokens.css +27 -0
  333. package/src/styles/ods-content-area.css +31 -0
  334. package/src/styles/ods-effects.css +4 -2
  335. package/src/styles/ods-responsive-tokens.css +14 -4
  336. package/tailwind.config.ts +42 -7
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunkMXHJROXJcjs = require('./chunk-MXHJROXJ.cjs');
4
+ var _chunkP23CRLU4cjs = require('./chunk-P23CRLU4.cjs');
5
5
 
6
6
 
7
- var _chunk4OGAXAEGcjs = require('./chunk-4OGAXAEG.cjs');
7
+ var _chunkABU3TGXAcjs = require('./chunk-ABU3TGXA.cjs');
8
8
 
9
9
 
10
10
 
@@ -12,16 +12,16 @@ var _chunk4OGAXAEGcjs = require('./chunk-4OGAXAEG.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkHY5YL3U5cjs = require('./chunk-HY5YL3U5.cjs');
15
+ var _chunkXBWE423Rcjs = require('./chunk-XBWE423R.cjs');
16
16
 
17
17
 
18
- var _chunkIIMICN7Lcjs = require('./chunk-IIMICN7L.cjs');
18
+ var _chunkTYWLNCNHcjs = require('./chunk-TYWLNCNH.cjs');
19
19
 
20
20
 
21
21
  var _chunk7DNL734Scjs = require('./chunk-7DNL734S.cjs');
22
22
 
23
23
 
24
- var _chunkEMCQGFXDcjs = require('./chunk-EMCQGFXD.cjs');
24
+ var _chunkMMOODW57cjs = require('./chunk-MMOODW57.cjs');
25
25
 
26
26
 
27
27
  var _chunkUJ7AXHRZcjs = require('./chunk-UJ7AXHRZ.cjs');
@@ -39,7 +39,7 @@ var _jsxruntime = require('react/jsx-runtime');
39
39
  function DocSearchResultRow({ result, isHighlighted }) {
40
40
  const docType = _optionalChain([result, 'access', _ => _.metadata, 'optionalAccess', _2 => _2.documentType]) || void 0;
41
41
  const sourceRepo = _optionalChain([result, 'access', _3 => _3.metadata, 'optionalAccess', _4 => _4.sourceRepo]) || void 0;
42
- const { Icon: SourceIcon, label: iconLabel } = _chunkHY5YL3U5cjs.resolveSourceIcon.call(void 0, {
42
+ const { Icon: SourceIcon, label: iconLabel } = _chunkXBWE423Rcjs.resolveSourceIcon.call(void 0, {
43
43
  sourceRepo,
44
44
  documentType: docType
45
45
  });
@@ -69,7 +69,7 @@ function DocSearchBar({
69
69
  renderResult
70
70
  }) {
71
71
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
72
- _chunkMXHJROXJcjs.SearchInput,
72
+ _chunkP23CRLU4cjs.SearchInput,
73
73
  {
74
74
  placeholder,
75
75
  value: query,
@@ -119,7 +119,7 @@ function mapDocSearchResults(docs) {
119
119
  results.push({
120
120
  id: `group-${entry.repo}`,
121
121
  // Same table label and count as the chat's grouped chip: one owner each.
122
- title: `${_chunkHY5YL3U5cjs.getSourceLabel.call(void 0, entry.repo)} ${_chunkHY5YL3U5cjs.recordCountLabel.call(void 0, rows.length)}`,
122
+ title: `${_chunkXBWE423Rcjs.getSourceLabel.call(void 0, entry.repo)} ${_chunkXBWE423Rcjs.recordCountLabel.call(void 0, rows.length)}`,
123
123
  path: rows[0].path,
124
124
  type: "file",
125
125
  metadata: {
@@ -182,7 +182,7 @@ function resolveSearchResultAction(result, source, runtimeMode, composeContentUr
182
182
  if (composed && !isAbsoluteHref(href)) {
183
183
  return { kind: "navigate-same-tab", href };
184
184
  }
185
- const isNewTab = _chunkEMCQGFXDcjs.decideNewTab.call(void 0, {
185
+ const isNewTab = _chunkMMOODW57cjs.decideNewTab.call(void 0, {
186
186
  href,
187
187
  targetPlatform: composed ? composed.targetPlatform : targetPlatform,
188
188
  surface: "useUnifiedNav",
@@ -254,7 +254,7 @@ function useDocSearch(config) {
254
254
  const [query, setQuery] = _react.useState.call(void 0, "");
255
255
  const [results, setResults] = _react.useState.call(void 0, NO_RESULTS);
256
256
  const [isFetching, setIsFetching] = _react.useState.call(void 0, false);
257
- const debouncedQuery = _chunkIIMICN7Lcjs.useDebounce.call(void 0, query, 300);
257
+ const debouncedQuery = _chunkTYWLNCNHcjs.useDebounce.call(void 0, query, 300);
258
258
  const searchable = debouncedQuery.trim().length >= 2;
259
259
  const [wasSearchable, setWasSearchable] = _react.useState.call(void 0, searchable);
260
260
  if (wasSearchable !== searchable) {
@@ -276,7 +276,7 @@ function useDocSearch(config) {
276
276
  limit: "10"
277
277
  });
278
278
  if (tableIdsKey) params.set("tableIds", tableIdsKey);
279
- const response = await _chunk4OGAXAEGcjs.contentFetch.call(void 0, `${resolvedSearchEndpoint}?${params.toString()}`);
279
+ const response = await _chunkABU3TGXAcjs.contentFetch.call(void 0, `${resolvedSearchEndpoint}?${params.toString()}`);
280
280
  if (!response.ok) {
281
281
  throw new Error(`Search request failed: ${response.status}`);
282
282
  }
@@ -311,27 +311,27 @@ function useDocSearch(config) {
311
311
  case "navigate-same-tab": {
312
312
  if (wantsNewTab) {
313
313
  setKeepOpen(true);
314
- window.open(action.href, "_blank", _chunkHY5YL3U5cjs.NEW_TAB_FEATURES);
314
+ window.open(action.href, "_blank", _chunkXBWE423Rcjs.NEW_TAB_FEATURES);
315
315
  return;
316
316
  }
317
317
  setKeepOpen(false);
318
318
  const path = baseRoute && action.href.startsWith(`${baseRoute}/`) ? action.href.slice(baseRoute.length + 1) : null;
319
319
  if (path && _optionalChain([onInPageSwap, 'optionalCall', _16 => _16(path)])) return;
320
- router.push(_chunkHY5YL3U5cjs.stripSameOriginToPath.call(void 0, action.href));
320
+ router.push(_chunkXBWE423Rcjs.stripSameOriginToPath.call(void 0, action.href));
321
321
  return;
322
322
  }
323
323
  case "navigate-new-tab":
324
324
  setKeepOpen(true);
325
325
  if (_optionalChain([runtime, 'optionalAccess', _17 => _17.navigation, 'access', _18 => _18.mode]) === "embed") {
326
326
  const targetPlatform = _nullishCoalesce(_optionalChain([result, 'access', _19 => _19.metadata, 'optionalAccess', _20 => _20.targetPlatform]), () => ( null));
327
- _chunkHY5YL3U5cjs.resolveExternalNavigation.call(void 0, {
327
+ _chunkXBWE423Rcjs.resolveExternalNavigation.call(void 0, {
328
328
  href: action.href,
329
329
  targetPlatform,
330
330
  runtime
331
331
  }).open();
332
332
  return;
333
333
  }
334
- window.open(action.href, "_blank", _chunkHY5YL3U5cjs.NEW_TAB_FEATURES);
334
+ window.open(action.href, "_blank", _chunkXBWE423Rcjs.NEW_TAB_FEATURES);
335
335
  return;
336
336
  case "ask-ai":
337
337
  setKeepOpen(false);
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  Pagination
4
- } from "./chunk-HUMWQMCU.js";
4
+ } from "./chunk-UT4YHQZW.js";
5
5
  import {
6
6
  withQuery
7
- } from "./chunk-Q76ZTHNV.js";
7
+ } from "./chunk-MP2C3LJ4.js";
8
8
  import {
9
9
  usePathname,
10
10
  useRouter,
@@ -126,10 +126,10 @@ function EmptyState({
126
126
  const displayDescription = description || defaultContent.description;
127
127
  const smartCTA = ctaHref ? null : getSmartCTA();
128
128
  const ctaButtonVariant = ctaVariant === "primary" ? "accent" : "outline";
129
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center px-6 py-6 text-center md:py-16", children: [
130
- /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center justify-center md:mb-6", children: /* @__PURE__ */ jsx("div", { className: "rounded-full border border-ods-border bg-ods-card p-3 md:p-6", children: /* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center text-ods-text-secondary md:h-16 md:w-16", children: defaultContent.icon }) }) }),
131
- /* @__PURE__ */ jsx("h2", { className: "mb-2 text-ods-text-primary text-h3 md:mb-3", children: displayTitle }),
132
- /* @__PURE__ */ jsx("p", { className: "mb-4 max-w-md text-ods-text-secondary text-h6 md:mb-8", children: displayDescription }),
129
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center px-6 py-6 text-center content-md:py-16", children: [
130
+ /* @__PURE__ */ jsx("div", { className: "mb-3 flex items-center justify-center content-md:mb-6", children: /* @__PURE__ */ jsx("div", { className: "rounded-full border border-ods-border bg-ods-card p-3 content-md:p-6", children: /* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center text-ods-text-secondary content-md:h-16 content-md:w-16", children: defaultContent.icon }) }) }),
131
+ /* @__PURE__ */ jsx("h2", { className: "mb-2 text-ods-text-primary text-h3 content-md:mb-3", children: displayTitle }),
132
+ /* @__PURE__ */ jsx("p", { className: "mb-4 max-w-md text-ods-text-secondary text-h6 content-md:mb-8", children: displayDescription }),
133
133
  showCTA && ctaHref && /* @__PURE__ */ jsx("div", { className: "mb-3 w-full max-w-xs", children: /* @__PURE__ */ jsx(Button, { href: ctaHref, variant: ctaButtonVariant, className: "w-full", children: ctaText || "Contact us" }) }),
134
134
  showCTA && !ctaHref && smartCTA && /* @__PURE__ */ jsx("div", { className: "mb-3 w-full max-w-xs", children: /* @__PURE__ */ jsx(Button, { onClick: smartCTA.action, variant: ctaButtonVariant, className: "w-full", children: smartCTA.text }) }),
135
135
  showBackButton && onGoBack && /* @__PURE__ */ jsx("div", { className: "w-full max-w-xs", children: /* @__PURE__ */ jsx(
@@ -9,18 +9,16 @@ import {
9
9
  parseSchemaParams,
10
10
  positiveInt,
11
11
  shouldIncludeInUrl
12
- } from "./chunk-Q76ZTHNV.js";
12
+ } from "./chunk-MP2C3LJ4.js";
13
13
  import {
14
14
  ToolIcon,
15
15
  apiErrorMessage,
16
- breakpoints,
17
16
  getHashTargetElement,
18
17
  normalizeHashFragment,
19
18
  scrollElementIntoView,
20
19
  useAutoplay,
21
- useDebounce,
22
- useMediaQuery
23
- } from "./chunk-64O4L7WN.js";
20
+ useDebounce
21
+ } from "./chunk-PDWVPI3S.js";
24
22
  import {
25
23
  useRouter,
26
24
  useSearchParams
@@ -35,9 +33,11 @@ import {
35
33
  XmarkIcon
36
34
  } from "./chunk-Z2VNQQ74.js";
37
35
  import {
36
+ breakpoints,
38
37
  createLocalStorageAdapter,
39
- getPlatformBrandClasses
40
- } from "./chunk-2T6QWNXU.js";
38
+ getPlatformBrandClasses,
39
+ useMediaQuery
40
+ } from "./chunk-NDESEPW5.js";
41
41
  import {
42
42
  MiamiCyberGangLogoFaceOnly,
43
43
  OpenFrameLogo
@@ -8,7 +8,8 @@ var _chunkMGHIV4L6cjs = require('./chunk-MGHIV4L6.cjs');
8
8
 
9
9
 
10
10
 
11
- var _chunkMDBHZBW7cjs = require('./chunk-MDBHZBW7.cjs');
11
+
12
+ var _chunkRKV5B7EUcjs = require('./chunk-RKV5B7EU.cjs');
12
13
 
13
14
 
14
15
 
@@ -266,7 +267,7 @@ var disabledTagClasses = [
266
267
  ];
267
268
  function TagLabel({ label, labelClassName }) {
268
269
  const isString = typeof label === "string";
269
- const { ref, isTruncated } = _chunkMDBHZBW7cjs.useIsTruncated.call(void 0, isString ? label : null);
270
+ const { ref, isTruncated } = _chunkRKV5B7EUcjs.useIsTruncated.call(void 0, isString ? label : null);
270
271
  if (!isString) {
271
272
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "truncate", labelClassName), children: label });
272
273
  }
@@ -359,7 +360,7 @@ function CardHorizontal({ icon, title, description, className = "", borderLeft =
359
360
  "div",
360
361
  {
361
362
  className: _chunk3ATAYP36cjs.cn.call(void 0,
362
- "flex min-h-[80px] w-full flex-row items-center gap-3 bg-ods-card p-4 md:gap-4 md:p-6",
363
+ "flex min-h-[80px] w-full flex-row items-center gap-3 bg-ods-card p-4 content-md:gap-4 content-md:p-6",
363
364
  borderLeft ? "border-l border-ods-border" : "",
364
365
  className
365
366
  ),
@@ -853,7 +854,7 @@ var SquareAvatar = _react3.memo.call(void 0,
853
854
  style,
854
855
  ...props
855
856
  }, ref) => {
856
- const resolvedSrc = _chunkMDBHZBW7cjs.useAuthedImageSrc.call(void 0, src);
857
+ const resolvedSrc = _chunkRKV5B7EUcjs.useAuthedImageSrc.call(void 0, src);
857
858
  const sizeClasses2 = {
858
859
  // xs (24px): dense card meta rows — avatar stacks on delivery/
859
860
  // roadmap cards. Part of the shared scale so no caller ever
@@ -1034,7 +1035,7 @@ var Modal = _react3.forwardRef.call(void 0, ({ isOpen, onClose, children, classN
1034
1035
  return () => document.removeEventListener("keydown", handleKeyDown);
1035
1036
  }, [isOpen, onClose]);
1036
1037
  if (!isOpen) return null;
1037
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "fixed inset-0 z-[1300] flex items-center justify-center", children: [
1038
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "ods-viewport-layer fixed inset-0 z-[1300] flex items-center justify-center", children: [
1038
1039
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 bg-ods-overlay", onClick: onClose, "aria-hidden": "true" }),
1039
1040
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1040
1041
  "div",
@@ -1046,7 +1047,7 @@ var Modal = _react3.forwardRef.call(void 0, ({ isOpen, onClose, children, classN
1046
1047
  ),
1047
1048
  role: "dialog",
1048
1049
  "aria-modal": "true",
1049
- children
1050
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRKV5B7EUcjs.ViewportBreakpoints, { children })
1050
1051
  }
1051
1052
  )
1052
1053
  ] });
@@ -1707,7 +1708,7 @@ function EntityPortraitCard({
1707
1708
  setMeasured({ src, isWide: img.naturalWidth / img.naturalHeight >= MIN_WIDE_RATIO });
1708
1709
  }
1709
1710
  };
1710
- const edgeColor = _chunkMDBHZBW7cjs.useImageEdgeColor.call(void 0, isWide === false ? src : null, "var(--color-bg-surface)");
1711
+ const edgeColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, isWide === false ? src : null, "var(--color-bg-surface)");
1711
1712
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "a", { href, target, rel, className: _chunk3ATAYP36cjs.cn.call(void 0, "block h-full", className), "aria-label": `Open ${title}`, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Card, { className: _chunk3ATAYP36cjs.cn.call(void 0, CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col gap-6 p-6"), children: [
1712
1713
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1713
1714
  "div",
@@ -1920,7 +1921,7 @@ function PlatformBadge({ platform, size: size2 = "sm", showLabel = true, classNa
1920
1921
  return null;
1921
1922
  }
1922
1923
  const sizes = sizeClasses[size2];
1923
- const colors = _chunkMDBHZBW7cjs.getPlatformBrandClasses.call(void 0, platform.name);
1924
+ const colors = _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platform.name);
1924
1925
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1925
1926
  "div",
1926
1927
  {
@@ -1962,7 +1963,7 @@ function AdminContentCard({
1962
1963
  const [loadedUrl, setLoadedUrl] = _react3.useState.call(void 0, null);
1963
1964
  const displayUrl = imageUrl && !imageError ? imageUrl : placeholderUrl;
1964
1965
  const imageLoaded = Boolean(displayUrl) && loadedUrl === displayUrl;
1965
- const imageBgColor = _chunkMDBHZBW7cjs.useImageEdgeColor.call(void 0, displayUrl || null, "transparent");
1966
+ const imageBgColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, displayUrl || null, "transparent");
1966
1967
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "article", { className: _chunk3ATAYP36cjs.cn.call(void 0, CONTENT_CARD_FRAME_CLASS, "flex h-full flex-col", className), children: [
1967
1968
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "relative aspect-[3/2] w-full shrink-0 overflow-hidden", style: { backgroundColor: imageBgColor }, children: displayUrl ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1968
1969
  !imageLoaded && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "absolute inset-0 animate-pulse bg-ods-border/20" }),
@@ -2228,7 +2229,7 @@ var AiPromptCardSkeleton = EmployeeEntryCardSkeleton;
2228
2229
 
2229
2230
  var PAGE_HEADING_CLASS = "text-h1 text-ods-text-primary";
2230
2231
  var SECTION_HEADING_CLASS = "text-h2 text-ods-text-primary";
2231
- var DESCRIPTION_CLASS = "mt-6 max-w-[640px] font-body text-[16px] md:text-[18px] leading-[24px] md:leading-[28px] text-ods-text-secondary";
2232
+ var DESCRIPTION_CLASS = "mt-6 max-w-[640px] font-body text-[16px] content-md:text-[18px] leading-[24px] content-md:leading-[28px] text-ods-text-secondary";
2232
2233
  function PageHeading({
2233
2234
  children,
2234
2235
  as: Tag2 = "h1",
@@ -2247,7 +2248,7 @@ function PageHeading({
2247
2248
  var SENTENCE_MARK = /([.:?!]+)(?=\s|$)/g;
2248
2249
  var ONLY_MARKS = /^\s*[.:?!]+\s*$/;
2249
2250
  function headingAccentClass(platform) {
2250
- return platform ? _chunkMDBHZBW7cjs.getPlatformBrandClasses.call(void 0, platform).accentText : "text-ods-accent";
2251
+ return platform ? _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platform).accentText : "text-ods-accent";
2251
2252
  }
2252
2253
  function accentSentenceMarks(node, platform) {
2253
2254
  return accentMarks(node, headingAccentClass(platform));
@@ -2391,8 +2392,8 @@ function ProductReleaseCard({
2391
2392
  } : { value: "\u2014", label: "Released", uppercase: false }
2392
2393
  ];
2393
2394
  const effectiveAuthor = _optionalChain([author, 'optionalAccess', _45 => _45.full_name]) ? author : { full_name: "\u2014", avatar_url: null, job_title: "Unknown" };
2394
- const gridColsClass = "md:grid-cols-4";
2395
- const dividerClass = "border-b md:border-b-0 md:border-r border-ods-border";
2395
+ const gridColsClass = "content-md:grid-cols-4";
2396
+ const dividerClass = "border-b content-md:border-b-0 content-md:border-r border-ods-border";
2396
2397
  const interactive = !!anchorProps || !!onClick;
2397
2398
  const frameClass = _chunk3ATAYP36cjs.cn.call(void 0,
2398
2399
  interactive ? CONTENT_CARD_FRAME_CLASS : CONTENT_CARD_SKELETON_FRAME_CLASS,
@@ -2402,8 +2403,8 @@ function ProductReleaseCard({
2402
2403
  className
2403
2404
  );
2404
2405
  const innerLayout = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
2405
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4 md:flex-row md:gap-6", children: [
2406
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full flex-shrink-0 md:w-[256px]", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative aspect-[1200/630] w-full overflow-hidden rounded-lg bg-ods-bg", children: [
2406
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4 content-md:flex-row content-md:gap-6", children: [
2407
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-full flex-shrink-0 content-md:w-[256px]", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative aspect-[1200/630] w-full overflow-hidden rounded-lg bg-ods-bg", children: [
2407
2408
  coverImage ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2408
2409
  _chunkMGHIV4L6cjs.next_image_default,
2409
2410
  {
@@ -2422,8 +2423,8 @@ function ProductReleaseCard({
2422
2423
  "v",
2423
2424
  version
2424
2425
  ] }) }),
2425
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mb-3 flex min-h-[60px] items-start md:min-h-[72px]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "line-clamp-2 font-['Azeret_Mono'] text-xl font-semibold leading-tight text-ods-text-primary md:text-2xl", children: title }) }),
2426
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-[68px] md:min-h-[78px]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "line-clamp-3 font-['DM_Sans'] text-sm leading-relaxed text-ods-text-secondary md:text-base", children: _nullishCoalesce(summary, () => ( "")) }) })
2426
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mb-3 flex min-h-[60px] items-start content-md:min-h-[72px]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "line-clamp-2 font-['Azeret_Mono'] text-xl font-semibold leading-tight text-ods-text-primary content-md:text-2xl", children: title }) }),
2427
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "min-h-[68px] content-md:min-h-[78px]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "line-clamp-3 font-['DM_Sans'] text-sm leading-relaxed text-ods-text-secondary content-md:text-base", children: _nullishCoalesce(summary, () => ( "")) }) })
2427
2428
  ] })
2428
2429
  ] }),
2429
2430
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1.5 border-t border-ods-border pt-3 text-ods-text-secondary text-h6", children: totalChangelog > 0 && changelogCounts ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -2581,15 +2582,15 @@ function ProductReleaseCard({
2581
2582
  function ProductReleaseCardSkeleton({ className, size: size2 = "lg" }) {
2582
2583
  if (size2 === "lg") {
2583
2584
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, CONTENT_CARD_SKELETON_FRAME_CLASS, "flex flex-col gap-4 p-6", "animate-pulse", className), children: [
2584
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4 md:flex-row md:gap-6", children: [
2585
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aspect-[1200/630] w-full flex-shrink-0 rounded-lg bg-ods-border md:w-[256px]" }),
2585
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4 content-md:flex-row content-md:gap-6", children: [
2586
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aspect-[1200/630] w-full flex-shrink-0 rounded-lg bg-ods-border content-md:w-[256px]" }),
2586
2587
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-w-0 flex-1 flex-col", children: [
2587
2588
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "mb-3 flex items-center gap-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-7 w-20 rounded bg-ods-border" }) }),
2588
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-3 flex min-h-[60px] flex-col justify-start gap-1.5 md:min-h-[72px]", children: [
2589
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-[25px] w-3/4 rounded bg-ods-border md:h-[30px]" }),
2590
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-[25px] w-1/2 rounded bg-ods-border md:h-[30px]" })
2589
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-3 flex min-h-[60px] flex-col justify-start gap-1.5 content-md:min-h-[72px]", children: [
2590
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-[25px] w-3/4 rounded bg-ods-border content-md:h-[30px]" }),
2591
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-[25px] w-1/2 rounded bg-ods-border content-md:h-[30px]" })
2591
2592
  ] }),
2592
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-[68px] flex-col justify-start gap-2 md:min-h-[78px]", children: [
2593
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex min-h-[68px] flex-col justify-start gap-2 content-md:min-h-[78px]", children: [
2593
2594
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-3 w-full rounded bg-ods-border/70" }),
2594
2595
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-3 w-11/12 rounded bg-ods-border/70" }),
2595
2596
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-3 w-5/6 rounded bg-ods-border/70" })
@@ -2597,11 +2598,11 @@ function ProductReleaseCardSkeleton({ className, size: size2 = "lg" }) {
2597
2598
  ] })
2598
2599
  ] }),
2599
2600
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "border-t border-ods-border pt-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-5 w-2/3 rounded bg-ods-border/70" }) }),
2600
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid w-full grid-cols-1 overflow-hidden rounded-md border border-ods-border md:grid-cols-4", children: [
2601
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid w-full grid-cols-1 overflow-hidden rounded-md border border-ods-border content-md:grid-cols-4", children: [
2601
2602
  [0, 1, 2].map((i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2602
2603
  "div",
2603
2604
  {
2604
- className: "flex flex-col gap-3 border-b border-ods-border p-4 md:border-b-0 md:border-r",
2605
+ className: "flex flex-col gap-3 border-b border-ods-border p-4 content-md:border-b-0 content-md:border-r",
2605
2606
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
2606
2607
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-7 w-24 rounded bg-ods-border" }),
2607
2608
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-4 w-16 rounded bg-ods-border" })
@@ -2810,7 +2811,7 @@ function useEntityCardPlaceholder({
2810
2811
  siteName = "",
2811
2812
  aspect = "wide"
2812
2813
  }) {
2813
- const derived = _chunkMDBHZBW7cjs.useOgPlaceholderUrl.call(void 0, { title, siteName, aspect });
2814
+ const derived = _chunkRKV5B7EUcjs.useOgPlaceholderUrl.call(void 0, { title, siteName, aspect });
2814
2815
  return placeholderUrl !== void 0 ? placeholderUrl : derived;
2815
2816
  }
2816
2817
 
@@ -4416,7 +4417,7 @@ function ProgramEditorialCard({
4416
4417
  playable,
4417
4418
  className
4418
4419
  }) {
4419
- const edgeColor = _chunkMDBHZBW7cjs.useImageEdgeColor.call(void 0, feature ? cover : null, "transparent");
4420
+ const edgeColor = _chunkRKV5B7EUcjs.useImageEdgeColor.call(void 0, feature ? cover : null, "transparent");
4420
4421
  const meta = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: EDITORIAL_META_ROW, children: [
4421
4422
  date && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-ods-flamingo-pink", children: date }),
4422
4423
  [typeMeta, feature ? null : _optionalChain([profile, 'optionalAccess', _140 => _140.name])].filter((part) => !!part).map((part) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-[var(--spacing-system-s)] text-ods-text-secondary", children: [
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  embedAuthedFetch,
4
4
  hasEmbedAuthAdapter
5
- } from "./chunk-2T6QWNXU.js";
5
+ } from "./chunk-NDESEPW5.js";
6
6
 
7
7
  // src/utils/search-params.ts
8
8
  function positiveInt(raw, fallback, { min = 1, max } = {}) {
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import {
3
3
  PageLayout
4
- } from "./chunk-ENGBNKUJ.js";
4
+ } from "./chunk-5EFZO5EB.js";
5
5
  import {
6
6
  formatBioText,
7
7
  formatDateWithTimezone,
8
8
  getProxiedImageUrl
9
- } from "./chunk-6YCXA7CN.js";
9
+ } from "./chunk-CH5232HV.js";
10
10
  import {
11
11
  next_image_default
12
12
  } from "./chunk-FBZMAPWO.js";
@@ -27,8 +27,8 @@ function DetailPageSkeleton({
27
27
  showImageGallery = true,
28
28
  bare = false
29
29
  } = {}) {
30
- const content = /* @__PURE__ */ jsxs("div", { className: "animate-pulse space-y-6 md:space-y-10", children: [
31
- /* @__PURE__ */ jsx("div", { className: "flex w-full flex-col gap-6", children: /* @__PURE__ */ jsx("div", { className: "h-16 w-full max-w-3xl rounded bg-ods-card md:h-20" }) }),
30
+ const content = /* @__PURE__ */ jsxs("div", { className: "animate-pulse space-y-6 content-md:space-y-10", children: [
31
+ /* @__PURE__ */ jsx("div", { className: "flex w-full flex-col gap-6", children: /* @__PURE__ */ jsx("div", { className: "h-16 w-full max-w-3xl rounded bg-ods-card content-md:h-20" }) }),
32
32
  /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-wrap gap-2", children: [
33
33
  /* @__PURE__ */ jsx("div", { className: "h-8 w-32 rounded bg-ods-card" }),
34
34
  /* @__PURE__ */ jsx("div", { className: "h-8 w-28 rounded bg-ods-card" }),
@@ -37,11 +37,18 @@ function DetailPageSkeleton({
37
37
  /* @__PURE__ */ jsx(
38
38
  "div",
39
39
  {
40
- className: `grid grid-cols-1 md:grid-cols-${metadataColumns} w-full overflow-hidden rounded-md border border-ods-border`,
41
- children: Array.from({ length: metadataColumns }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "border-b border-ods-border bg-ods-card p-4 last:border-r-0 md:border-b-0 md:border-r", children: [
42
- /* @__PURE__ */ jsx("div", { className: "mb-2 h-6 w-24 rounded bg-ods-border" }),
43
- /* @__PURE__ */ jsx("div", { className: "h-5 w-20 rounded bg-ods-border" })
44
- ] }, i))
40
+ className: `grid grid-cols-1 content-md:grid-cols-${metadataColumns} w-full overflow-hidden rounded-md border border-ods-border`,
41
+ children: Array.from({ length: metadataColumns }).map((_, i) => /* @__PURE__ */ jsxs(
42
+ "div",
43
+ {
44
+ className: "border-b border-ods-border bg-ods-card p-4 last:border-r-0 content-md:border-b-0 content-md:border-r",
45
+ children: [
46
+ /* @__PURE__ */ jsx("div", { className: "mb-2 h-6 w-24 rounded bg-ods-border" }),
47
+ /* @__PURE__ */ jsx("div", { className: "h-5 w-20 rounded bg-ods-border" })
48
+ ]
49
+ },
50
+ i
51
+ ))
45
52
  }
46
53
  ),
47
54
  showImageGallery && /* @__PURE__ */ jsx("div", { className: "flex w-full gap-6 overflow-x-auto", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx("div", { className: "h-[200px] w-[240px] shrink-0 rounded-md border border-ods-border bg-ods-card" }, i)) }),
@@ -56,7 +63,14 @@ function DetailPageSkeleton({
56
63
  ] }, section))
57
64
  ] });
58
65
  if (bare) return content;
59
- return /* @__PURE__ */ jsx(PageLayout, { showHeader: false, className: "mx-auto max-w-[1280px] bg-ods-bg px-6 py-6 md:px-20 md:py-10", children: content });
66
+ return /* @__PURE__ */ jsx(
67
+ PageLayout,
68
+ {
69
+ showHeader: false,
70
+ className: "mx-auto max-w-[1280px] bg-ods-bg px-6 py-6 content-md:px-20 content-md:py-10",
71
+ children: content
72
+ }
73
+ );
60
74
  }
61
75
 
62
76
  // src/components/shared/article-author-byline.tsx
@@ -94,7 +108,7 @@ function ArticleAuthorByline({
94
108
  {
95
109
  className: cn(
96
110
  "rounded-lg border border-ods-border bg-ods-card p-6",
97
- "flex flex-col items-start gap-4 md:flex-row",
111
+ "flex flex-col items-start gap-4 content-md:flex-row",
98
112
  className
99
113
  ),
100
114
  children: [
@@ -3,14 +3,64 @@ import {
3
3
  useChatRuntime
4
4
  } from "./chunk-E4ABZWTJ.js";
5
5
 
6
+ // src/hooks/ui/use-isomorphic-layout-effect.ts
7
+ import { useEffect, useLayoutEffect } from "react";
8
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
9
+
10
+ // src/hooks/ui/use-media-query.ts
11
+ import { useState } from "react";
12
+
13
+ // src/styles/layout-steps.ts
14
+ var LAYOUT_STEPS = {
15
+ sm: { viewport: 640, content: 640 },
16
+ md: { viewport: 800, content: 720 },
17
+ lg: { viewport: 1280, content: 1024 },
18
+ xl: { viewport: 1440, content: 1216 },
19
+ "2xl": { viewport: 1536, content: 1312 }
20
+ };
21
+
22
+ // src/hooks/ui/use-media-query.ts
23
+ function useMediaQuery(query) {
24
+ const [matches, setMatches] = useState(void 0);
25
+ useIsomorphicLayoutEffect(() => {
26
+ const matchMedia = window.matchMedia(query);
27
+ const handleChange = () => {
28
+ setMatches(matchMedia.matches);
29
+ };
30
+ handleChange();
31
+ matchMedia.addEventListener("change", handleChange);
32
+ return () => {
33
+ matchMedia.removeEventListener("change", handleChange);
34
+ };
35
+ }, [query]);
36
+ return matches;
37
+ }
38
+ var breakpoints = {
39
+ md: `(min-width: ${LAYOUT_STEPS.md.viewport}px)`,
40
+ // Tablet
41
+ lg: `(min-width: ${LAYOUT_STEPS.lg.viewport}px)`
42
+ // Desktop
43
+ };
44
+ function useSmUp() {
45
+ return useMdUp();
46
+ }
47
+ function useMdUp() {
48
+ const matches = useMediaQuery(breakpoints.md);
49
+ return matches === void 0 ? void 0 : matches;
50
+ }
51
+ function useLgUp() {
52
+ const matches = useMediaQuery(breakpoints.lg);
53
+ return matches === void 0 ? void 0 : matches;
54
+ }
55
+
6
56
  // src/hooks/ui/use-is-truncated.ts
7
- import { useCallback, useEffect, useState } from "react";
57
+ import { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
8
58
  function useIsTruncated(value, options) {
9
59
  const multiline = options?.multiline ?? false;
10
- const [element, setElement] = useState(null);
11
- const [isTruncated, setIsTruncated] = useState(false);
60
+ const [element, setElement] = useState2(null);
61
+ const [isTruncated, setIsTruncated] = useState2(false);
12
62
  const ref = useCallback((node) => setElement(node), []);
13
- useEffect(() => {
63
+ useEffect2(() => {
14
64
  if (!element) return void 0;
15
65
  const check = () => {
16
66
  setIsTruncated(
@@ -25,12 +75,38 @@ function useIsTruncated(value, options) {
25
75
  return { ref, isTruncated: element ? isTruncated : false };
26
76
  }
27
77
 
28
- // src/hooks/ui/use-isomorphic-layout-effect.ts
29
- import { useEffect as useEffect2, useLayoutEffect } from "react";
30
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect2;
78
+ // src/hooks/ui/use-content-breakpoint.ts
79
+ import { createContext, createElement, useContext } from "react";
80
+ var CONTENT_BREAKPOINTS = { md: LAYOUT_STEPS.md.content, lg: LAYOUT_STEPS.lg.content };
81
+ var ContentAreaWidthContext = createContext(null);
82
+ function ViewportBreakpoints({ children }) {
83
+ return createElement(ContentAreaWidthContext.Provider, { value: null }, children);
84
+ }
85
+ function contentBreakpointFor(width) {
86
+ if (width >= CONTENT_BREAKPOINTS.lg) return "desktop";
87
+ if (width >= CONTENT_BREAKPOINTS.md) return "tablet";
88
+ return "mobile";
89
+ }
90
+ function useContentBreakpoint() {
91
+ const width = useContext(ContentAreaWidthContext);
92
+ const mdUp = useMdUp();
93
+ const lgUp = useLgUp();
94
+ if (width !== null) return contentBreakpointFor(width);
95
+ if (mdUp === void 0) return void 0;
96
+ if (lgUp) return "desktop";
97
+ return mdUp ? "tablet" : "mobile";
98
+ }
99
+ function useContentMdUp() {
100
+ const breakpoint = useContentBreakpoint();
101
+ return breakpoint === void 0 ? void 0 : breakpoint !== "mobile";
102
+ }
103
+ function useContentLgUp() {
104
+ const breakpoint = useContentBreakpoint();
105
+ return breakpoint === void 0 ? void 0 : breakpoint === "desktop";
106
+ }
31
107
 
32
108
  // src/hooks/ui/use-image-edge-color.ts
33
- import { useState as useState2, useEffect as useEffect3 } from "react";
109
+ import { useState as useState3, useEffect as useEffect3 } from "react";
34
110
  function extractEdgeColor(img) {
35
111
  const canvas = document.createElement("canvas");
36
112
  const ctx = canvas.getContext("2d");
@@ -86,8 +162,8 @@ function extractEdgeColor(img) {
86
162
  return `rgb(${r}, ${g}, ${b})`;
87
163
  }
88
164
  function useImageEdgeColor(imageUrl, fallback = "#000000") {
89
- const [color, setColor] = useState2(fallback);
90
- const [resetFor, setResetFor] = useState2({ imageUrl, fallback });
165
+ const [color, setColor] = useState3(fallback);
166
+ const [resetFor, setResetFor] = useState3({ imageUrl, fallback });
91
167
  if (resetFor.imageUrl !== imageUrl || resetFor.fallback !== fallback) {
92
168
  setResetFor({ imageUrl, fallback });
93
169
  if (!imageUrl) setColor(fallback);
@@ -732,8 +808,20 @@ function useOgPlaceholderUrl({
732
808
  }
733
809
 
734
810
  export {
735
- useIsTruncated,
736
811
  useIsomorphicLayoutEffect,
812
+ useMediaQuery,
813
+ breakpoints,
814
+ useSmUp,
815
+ useMdUp,
816
+ useLgUp,
817
+ useIsTruncated,
818
+ CONTENT_BREAKPOINTS,
819
+ ContentAreaWidthContext,
820
+ ViewportBreakpoints,
821
+ contentBreakpointFor,
822
+ useContentBreakpoint,
823
+ useContentMdUp,
824
+ useContentLgUp,
737
825
  useImageEdgeColor,
738
826
  createLocalStorageAdapter,
739
827
  platformDisplayNames,