@omnitron-dev/prism 0.2.0 → 0.3.1

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 (961) hide show
  1. package/README.md +148 -0
  2. package/dist/accessibility/index.d.ts +7 -151
  3. package/dist/accessibility/index.d.ts.map +1 -0
  4. package/dist/accessibility/index.js +0 -1
  5. package/dist/accessibility/index.js.map +1 -1
  6. package/dist/accessibility/vision-mode.d.ts +154 -0
  7. package/dist/accessibility/vision-mode.d.ts.map +1 -0
  8. package/dist/blocks/auth-block/auth-block.d.ts +107 -0
  9. package/dist/blocks/auth-block/auth-block.d.ts.map +1 -0
  10. package/dist/blocks/auth-block/guards.d.ts +262 -0
  11. package/dist/blocks/auth-block/guards.d.ts.map +1 -0
  12. package/dist/blocks/auth-block/index.d.ts +13 -0
  13. package/dist/blocks/auth-block/index.d.ts.map +1 -0
  14. package/dist/blocks/auth-block/types.d.ts +232 -0
  15. package/dist/blocks/auth-block/types.d.ts.map +1 -0
  16. package/dist/blocks/dashboard-block/dashboard-block.d.ts +53 -0
  17. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -0
  18. package/dist/blocks/dashboard-block/index.d.ts +12 -0
  19. package/dist/blocks/dashboard-block/index.d.ts.map +1 -0
  20. package/dist/blocks/dashboard-block/types.d.ts +182 -0
  21. package/dist/blocks/dashboard-block/types.d.ts.map +1 -0
  22. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +95 -0
  23. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -0
  24. package/dist/blocks/data-grid-block/data-grid-block.d.ts +81 -0
  25. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -0
  26. package/dist/blocks/data-grid-block/index.d.ts +11 -0
  27. package/dist/blocks/data-grid-block/index.d.ts.map +1 -0
  28. package/dist/blocks/data-grid-block/types.d.ts +304 -0
  29. package/dist/blocks/data-grid-block/types.d.ts.map +1 -0
  30. package/dist/blocks/index.d.ts +10 -1235
  31. package/dist/blocks/index.d.ts.map +1 -0
  32. package/dist/blocks/index.js +141 -42
  33. package/dist/blocks/index.js.map +1 -1
  34. package/dist/{chunk-IZOIO7PA.js → chunk-472SOF76.js} +31 -22
  35. package/dist/chunk-472SOF76.js.map +1 -0
  36. package/dist/chunk-4Z5DE5GK.js +1579 -0
  37. package/dist/chunk-4Z5DE5GK.js.map +1 -0
  38. package/dist/chunk-52PQL67Q.js +559 -0
  39. package/dist/chunk-52PQL67Q.js.map +1 -0
  40. package/dist/chunk-75FQ5IW3.js +590 -0
  41. package/dist/chunk-75FQ5IW3.js.map +1 -0
  42. package/dist/{chunk-VAAIHNWQ.js → chunk-7G5D5PTC.js} +4 -3
  43. package/dist/chunk-7G5D5PTC.js.map +1 -0
  44. package/dist/{chunk-JDTC2SBY.js → chunk-AD4W7HYC.js} +2 -2
  45. package/dist/chunk-AD4W7HYC.js.map +1 -0
  46. package/dist/{chunk-SNKGGHBT.js → chunk-ADG4HZEP.js} +3 -3
  47. package/dist/chunk-ADG4HZEP.js.map +1 -0
  48. package/dist/{chunk-JNU4QHJK.js → chunk-AYYFMTMI.js} +5 -4
  49. package/dist/{chunk-JNU4QHJK.js.map → chunk-AYYFMTMI.js.map} +1 -1
  50. package/dist/chunk-BJE2AKD4.js +105 -0
  51. package/dist/chunk-BJE2AKD4.js.map +1 -0
  52. package/dist/{chunk-HO2GKTWJ.js → chunk-BRDWQVRT.js} +2 -2
  53. package/dist/chunk-BRDWQVRT.js.map +1 -0
  54. package/dist/{chunk-2FYNRDXR.js → chunk-DRFNMZLG.js} +2 -2
  55. package/dist/chunk-DRFNMZLG.js.map +1 -0
  56. package/dist/chunk-FF5RF32O.js +248 -0
  57. package/dist/chunk-FF5RF32O.js.map +1 -0
  58. package/dist/{chunk-KTCWPGON.js → chunk-GMIE6III.js} +561 -111
  59. package/dist/chunk-GMIE6III.js.map +1 -0
  60. package/dist/{chunk-BV32OJ2A.js → chunk-GUFHFEPZ.js} +2 -2
  61. package/dist/chunk-GUFHFEPZ.js.map +1 -0
  62. package/dist/chunk-GUGTDURV.js +826 -0
  63. package/dist/chunk-GUGTDURV.js.map +1 -0
  64. package/dist/chunk-HOXFSQUV.js +573 -0
  65. package/dist/chunk-HOXFSQUV.js.map +1 -0
  66. package/dist/chunk-JSQTYDPG.js +3 -0
  67. package/dist/{chunk-77KIJLPP.js.map → chunk-JSQTYDPG.js.map} +1 -1
  68. package/dist/{chunk-MEFT6XPH.js → chunk-KQ67XB6T.js} +351 -704
  69. package/dist/chunk-KQ67XB6T.js.map +1 -0
  70. package/dist/{chunk-YJMAQL3S.js → chunk-LOY2NPCO.js} +129 -635
  71. package/dist/chunk-LOY2NPCO.js.map +1 -0
  72. package/dist/{chunk-A2Z7NVGL.js → chunk-LSPFFEJT.js} +1026 -2128
  73. package/dist/chunk-LSPFFEJT.js.map +1 -0
  74. package/dist/{chunk-XXP3ZGU6.js → chunk-OKTLA23Q.js} +22 -14
  75. package/dist/chunk-OKTLA23Q.js.map +1 -0
  76. package/dist/chunk-PFT2BNYO.js +191 -0
  77. package/dist/chunk-PFT2BNYO.js.map +1 -0
  78. package/dist/chunk-PGHEP4JD.js +106 -0
  79. package/dist/chunk-PGHEP4JD.js.map +1 -0
  80. package/dist/chunk-PXXPLHIY.js +74 -0
  81. package/dist/chunk-PXXPLHIY.js.map +1 -0
  82. package/dist/chunk-SNZK5X6F.js +594 -0
  83. package/dist/chunk-SNZK5X6F.js.map +1 -0
  84. package/dist/chunk-SU3LVQ7N.js +518 -0
  85. package/dist/chunk-SU3LVQ7N.js.map +1 -0
  86. package/dist/{chunk-DDY7TLUI.js → chunk-XIXSSI3B.js} +28 -2
  87. package/dist/chunk-XIXSSI3B.js.map +1 -0
  88. package/dist/chunk-YHE7HXSG.js +206 -0
  89. package/dist/chunk-YHE7HXSG.js.map +1 -0
  90. package/dist/{chunk-XWL6J6IO.js → chunk-YSIG2XYH.js} +2 -2
  91. package/dist/chunk-YSIG2XYH.js.map +1 -0
  92. package/dist/cli/commands/add.d.ts +22 -0
  93. package/dist/cli/commands/add.d.ts.map +1 -0
  94. package/dist/cli/commands/diff.d.ts +13 -0
  95. package/dist/cli/commands/diff.d.ts.map +1 -0
  96. package/dist/cli/commands/doctor.d.ts +13 -0
  97. package/dist/cli/commands/doctor.d.ts.map +1 -0
  98. package/dist/cli/commands/init.d.ts +13 -0
  99. package/dist/cli/commands/init.d.ts.map +1 -0
  100. package/dist/cli/commands/list.d.ts +13 -0
  101. package/dist/cli/commands/list.d.ts.map +1 -0
  102. package/dist/cli/commands/remove.d.ts +13 -0
  103. package/dist/cli/commands/remove.d.ts.map +1 -0
  104. package/dist/cli/commands/update.d.ts +13 -0
  105. package/dist/cli/commands/update.d.ts.map +1 -0
  106. package/dist/cli/config.d.ts +73 -0
  107. package/dist/cli/config.d.ts.map +1 -0
  108. package/dist/cli/constants.d.ts +60 -0
  109. package/dist/cli/constants.d.ts.map +1 -0
  110. package/dist/cli/index.d.ts +27 -0
  111. package/dist/cli/index.d.ts.map +1 -0
  112. package/dist/cli/index.js +38 -39
  113. package/dist/cli/index.js.map +1 -1
  114. package/dist/components/accordion/accordion.d.ts +149 -0
  115. package/dist/components/accordion/accordion.d.ts.map +1 -0
  116. package/dist/components/accordion/index.d.ts +7 -0
  117. package/dist/components/accordion/index.d.ts.map +1 -0
  118. package/dist/components/admin-filters/admin-data-table.d.ts +185 -0
  119. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -0
  120. package/dist/components/admin-filters/amount-cell.d.ts +39 -0
  121. package/dist/components/admin-filters/amount-cell.d.ts.map +1 -0
  122. package/dist/components/admin-filters/filter-toolbar.d.ts +99 -0
  123. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -0
  124. package/dist/components/admin-filters/index.d.ts +13 -0
  125. package/dist/components/admin-filters/index.d.ts.map +1 -0
  126. package/dist/components/admin-filters/status-chip.d.ts +55 -0
  127. package/dist/components/admin-filters/status-chip.d.ts.map +1 -0
  128. package/dist/components/alert/alert.d.ts +159 -0
  129. package/dist/components/alert/alert.d.ts.map +1 -0
  130. package/dist/components/alert/index.d.ts +7 -0
  131. package/dist/components/alert/index.d.ts.map +1 -0
  132. package/dist/components/animate/animate-border.d.ts +33 -0
  133. package/dist/components/animate/animate-border.d.ts.map +1 -0
  134. package/dist/components/animate/index.d.ts +3 -0
  135. package/dist/components/animate/index.d.ts.map +1 -0
  136. package/dist/components/animate/motion-lazy.d.ts +5 -0
  137. package/dist/components/animate/motion-lazy.d.ts.map +1 -0
  138. package/dist/components/avatar/avatar.d.ts +78 -0
  139. package/dist/components/avatar/avatar.d.ts.map +1 -0
  140. package/dist/components/avatar/index.d.ts +7 -0
  141. package/dist/components/avatar/index.d.ts.map +1 -0
  142. package/dist/components/badge/badge.d.ts +102 -0
  143. package/dist/components/badge/badge.d.ts.map +1 -0
  144. package/dist/components/badge/index.d.ts +7 -0
  145. package/dist/components/badge/index.d.ts.map +1 -0
  146. package/dist/components/breadcrumbs/breadcrumbs.d.ts +100 -0
  147. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  148. package/dist/components/breadcrumbs/index.d.ts +7 -0
  149. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  150. package/dist/components/card/card.d.ts +127 -0
  151. package/dist/components/card/card.d.ts.map +1 -0
  152. package/dist/components/card/index.d.ts +7 -0
  153. package/dist/components/card/index.d.ts.map +1 -0
  154. package/dist/components/carousel/carousel.d.ts +35 -0
  155. package/dist/components/carousel/carousel.d.ts.map +1 -0
  156. package/dist/components/carousel/classes.d.ts +35 -0
  157. package/dist/components/carousel/classes.d.ts.map +1 -0
  158. package/dist/components/carousel/index.d.ts +10 -0
  159. package/dist/components/carousel/index.d.ts.map +1 -0
  160. package/dist/components/carousel/types.d.ts +167 -0
  161. package/dist/components/carousel/types.d.ts.map +1 -0
  162. package/dist/components/carousel/use-carousel.d.ts +51 -0
  163. package/dist/components/carousel/use-carousel.d.ts.map +1 -0
  164. package/dist/components/changelog/changelog-entry.d.ts +10 -0
  165. package/dist/components/changelog/changelog-entry.d.ts.map +1 -0
  166. package/dist/components/changelog/changelog-timeline.d.ts +9 -0
  167. package/dist/components/changelog/changelog-timeline.d.ts.map +1 -0
  168. package/dist/components/changelog/index.d.ts +3 -0
  169. package/dist/components/changelog/index.d.ts.map +1 -0
  170. package/dist/components/chart/chart.d.ts +39 -0
  171. package/dist/components/chart/chart.d.ts.map +1 -0
  172. package/dist/components/chart/classes.d.ts +24 -0
  173. package/dist/components/chart/classes.d.ts.map +1 -0
  174. package/dist/components/chart/components/chart-legends.d.ts +24 -0
  175. package/dist/components/chart/components/chart-legends.d.ts.map +1 -0
  176. package/dist/components/chart/components/chart-loading.d.ts +21 -0
  177. package/dist/components/chart/components/chart-loading.d.ts.map +1 -0
  178. package/dist/components/chart/components/index.d.ts +8 -0
  179. package/dist/components/chart/components/index.d.ts.map +1 -0
  180. package/dist/components/chart/index.d.ts +14 -0
  181. package/dist/components/chart/index.d.ts.map +1 -0
  182. package/dist/components/chart/types.d.ts +264 -0
  183. package/dist/components/chart/types.d.ts.map +1 -0
  184. package/dist/components/chart/use-chart.d.ts +34 -0
  185. package/dist/components/chart/use-chart.d.ts.map +1 -0
  186. package/dist/components/command-palette/command-palette.d.ts +73 -0
  187. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  188. package/dist/components/command-palette/index.d.ts +7 -0
  189. package/dist/components/command-palette/index.d.ts.map +1 -0
  190. package/dist/components/confirm-dialog/confirm-dialog.d.ts +89 -0
  191. package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
  192. package/dist/components/confirm-dialog/index.d.ts +7 -0
  193. package/dist/components/confirm-dialog/index.d.ts.map +1 -0
  194. package/dist/components/content-renderer/classes.d.ts +33 -0
  195. package/dist/components/content-renderer/classes.d.ts.map +1 -0
  196. package/dist/components/content-renderer/content-renderer.d.ts +37 -0
  197. package/dist/components/content-renderer/content-renderer.d.ts.map +1 -0
  198. package/dist/components/content-renderer/html-tags.d.ts +6 -0
  199. package/dist/components/content-renderer/html-tags.d.ts.map +1 -0
  200. package/dist/components/content-renderer/html-to-markdown.d.ts +7 -0
  201. package/dist/components/content-renderer/html-to-markdown.d.ts.map +1 -0
  202. package/dist/components/content-renderer/index.d.ts +7 -0
  203. package/dist/components/content-renderer/index.d.ts.map +1 -0
  204. package/dist/components/content-renderer/markdown.d.ts +23 -0
  205. package/dist/components/content-renderer/markdown.d.ts.map +1 -0
  206. package/dist/components/content-renderer/remark-spoiler.d.ts +9 -0
  207. package/dist/components/content-renderer/remark-spoiler.d.ts.map +1 -0
  208. package/dist/components/content-renderer/styles.d.ts +2 -0
  209. package/dist/components/content-renderer/styles.d.ts.map +1 -0
  210. package/dist/components/country-select/country-select.d.ts +101 -0
  211. package/dist/components/country-select/country-select.d.ts.map +1 -0
  212. package/dist/components/country-select/flag-icon.d.ts +36 -0
  213. package/dist/components/country-select/flag-icon.d.ts.map +1 -0
  214. package/dist/components/country-select/index.d.ts +5 -0
  215. package/dist/components/country-select/index.d.ts.map +1 -0
  216. package/dist/components/date-input/date-input.d.ts +27 -0
  217. package/dist/components/date-input/date-input.d.ts.map +1 -0
  218. package/dist/components/date-input/index.d.ts +4 -0
  219. package/dist/components/date-input/index.d.ts.map +1 -0
  220. package/dist/components/date-input/value.d.ts +9 -0
  221. package/dist/components/date-input/value.d.ts.map +1 -0
  222. package/dist/components/date-range-picker/date-range-input.d.ts +48 -0
  223. package/dist/components/date-range-picker/date-range-input.d.ts.map +1 -0
  224. package/dist/components/date-range-picker/date-range-picker.d.ts +39 -0
  225. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  226. package/dist/components/date-range-picker/index.d.ts +7 -0
  227. package/dist/components/date-range-picker/index.d.ts.map +1 -0
  228. package/dist/components/date-range-picker/use-date-range-picker.d.ts +28 -0
  229. package/dist/components/date-range-picker/use-date-range-picker.d.ts.map +1 -0
  230. package/dist/components/deadline-chip/deadline-chip.d.ts +41 -0
  231. package/dist/components/deadline-chip/deadline-chip.d.ts.map +1 -0
  232. package/dist/components/deadline-chip/index.d.ts +7 -0
  233. package/dist/components/deadline-chip/index.d.ts.map +1 -0
  234. package/dist/components/doc-layout/doc-layout.d.ts +17 -0
  235. package/dist/components/doc-layout/doc-layout.d.ts.map +1 -0
  236. package/dist/components/doc-layout/doc-section-nav.d.ts +16 -0
  237. package/dist/components/doc-layout/doc-section-nav.d.ts.map +1 -0
  238. package/dist/components/doc-layout/doc-sidebar.d.ts +18 -0
  239. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -0
  240. package/dist/components/doc-layout/index.d.ts +4 -0
  241. package/dist/components/doc-layout/index.d.ts.map +1 -0
  242. package/dist/components/doc-layout/index.js +6 -0
  243. package/dist/components/doc-layout/index.js.map +1 -0
  244. package/dist/components/drawer/drawer.d.ts +65 -0
  245. package/dist/components/drawer/drawer.d.ts.map +1 -0
  246. package/dist/components/drawer/index.d.ts +7 -0
  247. package/dist/components/drawer/index.d.ts.map +1 -0
  248. package/dist/components/duration-picker/duration-picker.d.ts +24 -0
  249. package/dist/components/duration-picker/duration-picker.d.ts.map +1 -0
  250. package/dist/components/duration-picker/index.d.ts +2 -0
  251. package/dist/components/duration-picker/index.d.ts.map +1 -0
  252. package/dist/components/editor/classes.d.ts +52 -0
  253. package/dist/components/editor/classes.d.ts.map +1 -0
  254. package/dist/components/editor/editor.d.ts +15 -0
  255. package/dist/components/editor/editor.d.ts.map +1 -0
  256. package/dist/components/editor/extensions/clear-format.d.ts +3 -0
  257. package/dist/components/editor/extensions/clear-format.d.ts.map +1 -0
  258. package/dist/components/editor/extensions/index.d.ts +3 -0
  259. package/dist/components/editor/extensions/index.d.ts.map +1 -0
  260. package/dist/components/editor/extensions/text-transform.d.ts +20 -0
  261. package/dist/components/editor/extensions/text-transform.d.ts.map +1 -0
  262. package/dist/components/editor/icons/index.d.ts +34 -0
  263. package/dist/components/editor/icons/index.d.ts.map +1 -0
  264. package/dist/components/editor/index.d.ts +41 -104
  265. package/dist/components/editor/index.d.ts.map +1 -0
  266. package/dist/components/editor/index.js +3 -2
  267. package/dist/components/editor/presets.d.ts +3 -0
  268. package/dist/components/editor/presets.d.ts.map +1 -0
  269. package/dist/components/editor/styles.d.ts +2 -0
  270. package/dist/components/editor/styles.d.ts.map +1 -0
  271. package/dist/components/editor/toolbar/bubble-toolbar.d.ts +9 -0
  272. package/dist/components/editor/toolbar/bubble-toolbar.d.ts.map +1 -0
  273. package/dist/components/editor/toolbar/code-highlight-block.d.ts +3 -0
  274. package/dist/components/editor/toolbar/code-highlight-block.d.ts.map +1 -0
  275. package/dist/components/editor/toolbar/heading-block.d.ts +11 -0
  276. package/dist/components/editor/toolbar/heading-block.d.ts.map +1 -0
  277. package/dist/components/editor/toolbar/image-block.d.ts +11 -0
  278. package/dist/components/editor/toolbar/image-block.d.ts.map +1 -0
  279. package/dist/components/editor/toolbar/link-block.d.ts +13 -0
  280. package/dist/components/editor/toolbar/link-block.d.ts.map +1 -0
  281. package/dist/components/editor/toolbar/toolbar-item.d.ts +3 -0
  282. package/dist/components/editor/toolbar/toolbar-item.d.ts.map +1 -0
  283. package/dist/components/editor/toolbar/toolbar.d.ts +3 -0
  284. package/dist/components/editor/toolbar/toolbar.d.ts.map +1 -0
  285. package/dist/components/editor/toolbar/use-toolbar-state.d.ts +24 -0
  286. package/dist/components/editor/toolbar/use-toolbar-state.d.ts.map +1 -0
  287. package/dist/components/editor/types.d.ts +130 -0
  288. package/dist/components/editor/types.d.ts.map +1 -0
  289. package/dist/components/emoji-picker/emoji-picker.d.ts +24 -0
  290. package/dist/components/emoji-picker/emoji-picker.d.ts.map +1 -0
  291. package/dist/components/emoji-picker/emoji-search.d.ts +22 -0
  292. package/dist/components/emoji-picker/emoji-search.d.ts.map +1 -0
  293. package/dist/components/emoji-picker/emoji.d.ts +19 -0
  294. package/dist/components/emoji-picker/emoji.d.ts.map +1 -0
  295. package/dist/components/emoji-picker/index.d.ts +14 -0
  296. package/dist/components/emoji-picker/index.d.ts.map +1 -0
  297. package/dist/components/emoji-picker/index.js +3 -0
  298. package/dist/components/emoji-picker/index.js.map +1 -0
  299. package/dist/components/emoji-picker/twemoji-url.d.ts +26 -0
  300. package/dist/components/emoji-picker/twemoji-url.d.ts.map +1 -0
  301. package/dist/components/emoji-picker/types.d.ts +96 -0
  302. package/dist/components/emoji-picker/types.d.ts.map +1 -0
  303. package/dist/components/emoji-picker/use-emoji-data.d.ts +26 -0
  304. package/dist/components/emoji-picker/use-emoji-data.d.ts.map +1 -0
  305. package/dist/components/emoji-picker/use-recent-emojis.d.ts +16 -0
  306. package/dist/components/emoji-picker/use-recent-emojis.d.ts.map +1 -0
  307. package/dist/components/empty-content/empty-content.d.ts +92 -0
  308. package/dist/components/empty-content/empty-content.d.ts.map +1 -0
  309. package/dist/components/empty-content/index.d.ts +7 -0
  310. package/dist/components/empty-content/index.d.ts.map +1 -0
  311. package/dist/components/error-boundary/error-boundary.d.ts +162 -0
  312. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -0
  313. package/dist/components/error-boundary/index.d.ts +7 -0
  314. package/dist/components/error-boundary/index.d.ts.map +1 -0
  315. package/dist/components/field/field-autocomplete.d.ts +74 -0
  316. package/dist/components/field/field-autocomplete.d.ts.map +1 -0
  317. package/dist/components/field/field-checkbox.d.ts +42 -0
  318. package/dist/components/field/field-checkbox.d.ts.map +1 -0
  319. package/dist/components/field/field-code.d.ts +80 -0
  320. package/dist/components/field/field-code.d.ts.map +1 -0
  321. package/dist/components/field/field-country-select.d.ts +84 -0
  322. package/dist/components/field/field-country-select.d.ts.map +1 -0
  323. package/dist/components/field/field-date-picker.d.ts +58 -0
  324. package/dist/components/field/field-date-picker.d.ts.map +1 -0
  325. package/dist/components/field/field-datetime-picker.d.ts +96 -0
  326. package/dist/components/field/field-datetime-picker.d.ts.map +1 -0
  327. package/dist/components/field/field-editor.d.ts +218 -0
  328. package/dist/components/field/field-editor.d.ts.map +1 -0
  329. package/dist/components/field/field-multi-checkbox.d.ts +91 -0
  330. package/dist/components/field/field-multi-checkbox.d.ts.map +1 -0
  331. package/dist/components/field/field-multi-select.d.ts +85 -0
  332. package/dist/components/field/field-multi-select.d.ts.map +1 -0
  333. package/dist/components/field/field-multi-switch.d.ts +93 -0
  334. package/dist/components/field/field-multi-switch.d.ts.map +1 -0
  335. package/dist/components/field/field-number.d.ts +50 -0
  336. package/dist/components/field/field-number.d.ts.map +1 -0
  337. package/dist/components/field/field-phone.d.ts +82 -0
  338. package/dist/components/field/field-phone.d.ts.map +1 -0
  339. package/dist/components/field/field-radio.d.ts +64 -0
  340. package/dist/components/field/field-radio.d.ts.map +1 -0
  341. package/dist/components/field/field-rating.d.ts +43 -0
  342. package/dist/components/field/field-rating.d.ts.map +1 -0
  343. package/dist/components/field/field-select.d.ts +50 -0
  344. package/dist/components/field/field-select.d.ts.map +1 -0
  345. package/dist/components/field/field-slider.d.ts +56 -0
  346. package/dist/components/field/field-slider.d.ts.map +1 -0
  347. package/dist/components/field/field-switch.d.ts +44 -0
  348. package/dist/components/field/field-switch.d.ts.map +1 -0
  349. package/dist/components/field/field-text.d.ts +38 -0
  350. package/dist/components/field/field-text.d.ts.map +1 -0
  351. package/dist/components/field/field-time-picker.d.ts +79 -0
  352. package/dist/components/field/field-time-picker.d.ts.map +1 -0
  353. package/dist/components/field/field-upload.d.ts +120 -0
  354. package/dist/components/field/field-upload.d.ts.map +1 -0
  355. package/dist/components/field/index.d.ts +149 -0
  356. package/dist/components/field/index.d.ts.map +1 -0
  357. package/dist/components/image/image.d.ts +79 -0
  358. package/dist/components/image/image.d.ts.map +1 -0
  359. package/dist/components/image/index.d.ts +7 -0
  360. package/dist/components/image/index.d.ts.map +1 -0
  361. package/dist/components/index.css +4 -0
  362. package/dist/components/index.css.map +1 -1
  363. package/dist/components/index.d.ts +60 -7072
  364. package/dist/components/index.d.ts.map +1 -0
  365. package/dist/components/index.js +21 -11
  366. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  367. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  368. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  369. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  370. package/dist/components/knowledge-graph/index.css +176 -0
  371. package/dist/components/knowledge-graph/index.css.map +1 -0
  372. package/dist/components/knowledge-graph/index.d.ts +3 -0
  373. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  374. package/dist/components/knowledge-graph/index.js +795 -0
  375. package/dist/components/knowledge-graph/index.js.map +1 -0
  376. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  377. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  378. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  379. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  380. package/dist/components/knowledge-graph/model.d.ts +92 -0
  381. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  382. package/dist/components/label/index.d.ts +7 -0
  383. package/dist/components/label/index.d.ts.map +1 -0
  384. package/dist/components/label/label.d.ts +71 -0
  385. package/dist/components/label/label.d.ts.map +1 -0
  386. package/dist/components/lightbox/classes.d.ts +34 -0
  387. package/dist/components/lightbox/classes.d.ts.map +1 -0
  388. package/dist/components/lightbox/index.d.ts +11 -0
  389. package/dist/components/lightbox/index.d.ts.map +1 -0
  390. package/dist/components/lightbox/lightbox.d.ts +42 -0
  391. package/dist/components/lightbox/lightbox.d.ts.map +1 -0
  392. package/dist/components/lightbox/types.d.ts +233 -0
  393. package/dist/components/lightbox/types.d.ts.map +1 -0
  394. package/dist/components/lightbox/use-lightbox.d.ts +42 -0
  395. package/dist/components/lightbox/use-lightbox.d.ts.map +1 -0
  396. package/dist/components/loading-screen/index.d.ts +8 -0
  397. package/dist/components/loading-screen/index.d.ts.map +1 -0
  398. package/dist/components/loading-screen/loading-screen.d.ts +37 -0
  399. package/dist/components/loading-screen/loading-screen.d.ts.map +1 -0
  400. package/dist/components/loading-screen/splash-screen.d.ts +80 -0
  401. package/dist/components/loading-screen/splash-screen.d.ts.map +1 -0
  402. package/dist/components/map/Map.d.ts +39 -0
  403. package/dist/components/map/Map.d.ts.map +1 -0
  404. package/dist/components/map/MapCoverageLayer.d.ts +25 -0
  405. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -0
  406. package/dist/components/map/MapMarker.d.ts +17 -0
  407. package/dist/components/map/MapMarker.d.ts.map +1 -0
  408. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  409. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  410. package/dist/components/map/MapPointPicker.d.ts +35 -0
  411. package/dist/components/map/MapPointPicker.d.ts.map +1 -0
  412. package/dist/components/map/coordinates.d.ts +10 -0
  413. package/dist/components/map/coordinates.d.ts.map +1 -0
  414. package/dist/components/map/index.css +4 -0
  415. package/dist/components/map/index.css.map +1 -0
  416. package/dist/components/map/index.d.ts +19 -0
  417. package/dist/components/map/index.d.ts.map +1 -0
  418. package/dist/components/map/index.js +3 -0
  419. package/dist/components/map/index.js.map +1 -0
  420. package/dist/components/mega-menu/index.d.ts +12 -0
  421. package/dist/components/mega-menu/index.d.ts.map +1 -0
  422. package/dist/components/mega-menu/mega-menu-horizontal.d.ts +41 -0
  423. package/dist/components/mega-menu/mega-menu-horizontal.d.ts.map +1 -0
  424. package/dist/components/mega-menu/mega-menu-mobile.d.ts +28 -0
  425. package/dist/components/mega-menu/mega-menu-mobile.d.ts.map +1 -0
  426. package/dist/components/mega-menu/mega-menu-vertical.d.ts +28 -0
  427. package/dist/components/mega-menu/mega-menu-vertical.d.ts.map +1 -0
  428. package/dist/components/mega-menu/styles.d.ts +18 -0
  429. package/dist/components/mega-menu/styles.d.ts.map +1 -0
  430. package/dist/components/mega-menu/types.d.ts +200 -0
  431. package/dist/components/mega-menu/types.d.ts.map +1 -0
  432. package/dist/components/menu/index.d.ts +7 -0
  433. package/dist/components/menu/index.d.ts.map +1 -0
  434. package/dist/components/menu/menu.d.ts +144 -0
  435. package/dist/components/menu/menu.d.ts.map +1 -0
  436. package/dist/components/nav-card/index.d.ts +8 -0
  437. package/dist/components/nav-card/index.d.ts.map +1 -0
  438. package/dist/components/nav-card/nav-card-grid.d.ts +57 -0
  439. package/dist/components/nav-card/nav-card-grid.d.ts.map +1 -0
  440. package/dist/components/nav-card/nav-card.d.ts +69 -0
  441. package/dist/components/nav-card/nav-card.d.ts.map +1 -0
  442. package/dist/components/nav-section/components.d.ts +143 -0
  443. package/dist/components/nav-section/components.d.ts.map +1 -0
  444. package/dist/components/nav-section/index.d.ts +15 -0
  445. package/dist/components/nav-section/index.d.ts.map +1 -0
  446. package/dist/components/nav-section/nav-context.d.ts +80 -0
  447. package/dist/components/nav-section/nav-context.d.ts.map +1 -0
  448. package/dist/components/nav-section/nav-item.d.ts +20 -0
  449. package/dist/components/nav-section/nav-item.d.ts.map +1 -0
  450. package/dist/components/nav-section/nav-list.d.ts +25 -0
  451. package/dist/components/nav-section/nav-list.d.ts.map +1 -0
  452. package/dist/components/nav-section/nav-section-horizontal.d.ts +29 -0
  453. package/dist/components/nav-section/nav-section-horizontal.d.ts.map +1 -0
  454. package/dist/components/nav-section/nav-section-mini.d.ts +30 -0
  455. package/dist/components/nav-section/nav-section-mini.d.ts.map +1 -0
  456. package/dist/components/nav-section/nav-section-vertical.d.ts +37 -0
  457. package/dist/components/nav-section/nav-section-vertical.d.ts.map +1 -0
  458. package/dist/components/nav-section/styles.d.ts +35 -0
  459. package/dist/components/nav-section/styles.d.ts.map +1 -0
  460. package/dist/components/nav-section/types.d.ts +178 -0
  461. package/dist/components/nav-section/types.d.ts.map +1 -0
  462. package/dist/components/navigation-progress/index.d.ts +7 -0
  463. package/dist/components/navigation-progress/index.d.ts.map +1 -0
  464. package/dist/components/navigation-progress/navigation-progress.d.ts +36 -0
  465. package/dist/components/navigation-progress/navigation-progress.d.ts.map +1 -0
  466. package/dist/components/page-content/index.d.ts +7 -0
  467. package/dist/components/page-content/index.d.ts.map +1 -0
  468. package/dist/components/page-content/page-content.d.ts +55 -0
  469. package/dist/components/page-content/page-content.d.ts.map +1 -0
  470. package/dist/components/popover/index.d.ts +7 -0
  471. package/dist/components/popover/index.d.ts.map +1 -0
  472. package/dist/{popover-Dmw7SJLR.d.ts → components/popover/popover.d.ts} +11 -14
  473. package/dist/components/popover/popover.d.ts.map +1 -0
  474. package/dist/components/progress/countdown-ring.d.ts +60 -0
  475. package/dist/components/progress/countdown-ring.d.ts.map +1 -0
  476. package/dist/components/progress/index.d.ts +8 -0
  477. package/dist/components/progress/index.d.ts.map +1 -0
  478. package/dist/components/progress/progress.d.ts +106 -0
  479. package/dist/components/progress/progress.d.ts.map +1 -0
  480. package/dist/components/rail/index.d.ts +7 -0
  481. package/dist/components/rail/index.d.ts.map +1 -0
  482. package/dist/components/rail/rail.d.ts +39 -0
  483. package/dist/components/rail/rail.d.ts.map +1 -0
  484. package/dist/components/research/diagram-image.d.ts +11 -0
  485. package/dist/components/research/diagram-image.d.ts.map +1 -0
  486. package/dist/components/research/diagram.d.ts +8 -0
  487. package/dist/components/research/diagram.d.ts.map +1 -0
  488. package/dist/components/research/document.d.ts +33 -0
  489. package/dist/components/research/document.d.ts.map +1 -0
  490. package/dist/components/research/frontmatter.d.ts +15 -0
  491. package/dist/components/research/frontmatter.d.ts.map +1 -0
  492. package/dist/components/research/index.css +51 -0
  493. package/dist/components/research/index.css.map +1 -0
  494. package/dist/components/research/index.d.ts +3 -0
  495. package/dist/components/research/index.d.ts.map +1 -0
  496. package/dist/components/research/index.js +6 -0
  497. package/dist/components/research/index.js.map +1 -0
  498. package/dist/components/research/parse.d.ts +29 -0
  499. package/dist/components/research/parse.d.ts.map +1 -0
  500. package/dist/components/research-editor/block-commands.d.ts +20 -0
  501. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  502. package/dist/components/research-editor/block-controls.d.ts +13 -0
  503. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  504. package/dist/components/research-editor/editor.d.ts +75 -0
  505. package/dist/components/research-editor/editor.d.ts.map +1 -0
  506. package/dist/components/research-editor/extensions.d.ts +14 -0
  507. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  508. package/dist/components/research-editor/index.css +332 -0
  509. package/dist/components/research-editor/index.css.map +1 -0
  510. package/dist/components/research-editor/index.d.ts +5 -0
  511. package/dist/components/research-editor/index.d.ts.map +1 -0
  512. package/dist/components/research-editor/index.js +1592 -0
  513. package/dist/components/research-editor/index.js.map +1 -0
  514. package/dist/components/research-editor/math-input.d.ts +32 -0
  515. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  516. package/dist/components/research-editor/math-markup.d.ts +4 -0
  517. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  518. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  519. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  520. package/dist/components/research-editor/math-node.d.ts +11 -0
  521. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  522. package/dist/components/research-editor/source.d.ts +19 -0
  523. package/dist/components/research-editor/source.d.ts.map +1 -0
  524. package/dist/components/scroll-spy/index.d.ts +3 -0
  525. package/dist/components/scroll-spy/index.d.ts.map +1 -0
  526. package/dist/components/scroll-spy/scroll-spy-provider.d.ts +26 -0
  527. package/dist/components/scroll-spy/scroll-spy-provider.d.ts.map +1 -0
  528. package/dist/components/scroll-spy/scroll-spy-section.d.ts +10 -0
  529. package/dist/components/scroll-spy/scroll-spy-section.d.ts.map +1 -0
  530. package/dist/components/scroll-to-top/index.d.ts +7 -0
  531. package/dist/components/scroll-to-top/index.d.ts.map +1 -0
  532. package/dist/components/scroll-to-top/scroll-to-top.d.ts +25 -0
  533. package/dist/components/scroll-to-top/scroll-to-top.d.ts.map +1 -0
  534. package/dist/components/scrollbar/index.d.ts +7 -0
  535. package/dist/components/scrollbar/index.d.ts.map +1 -0
  536. package/dist/components/scrollbar/scrollbar.d.ts +61 -0
  537. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
  538. package/dist/components/search-input/index.d.ts +2 -0
  539. package/dist/components/search-input/index.d.ts.map +1 -0
  540. package/dist/components/search-input/search-input.d.ts +36 -0
  541. package/dist/components/search-input/search-input.d.ts.map +1 -0
  542. package/dist/components/settings/index.d.ts +10 -0
  543. package/dist/components/settings/index.d.ts.map +1 -0
  544. package/dist/components/settings/settings-drawer.d.ts +39 -0
  545. package/dist/components/settings/settings-drawer.d.ts.map +1 -0
  546. package/dist/components/settings/settings-provider.d.ts +106 -0
  547. package/dist/components/settings/settings-provider.d.ts.map +1 -0
  548. package/dist/components/skeleton/index.d.ts +7 -0
  549. package/dist/components/skeleton/index.d.ts.map +1 -0
  550. package/dist/components/skeleton/skeleton.d.ts +77 -0
  551. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  552. package/dist/components/snackbar/index.d.ts +7 -0
  553. package/dist/components/snackbar/index.d.ts.map +1 -0
  554. package/dist/components/snackbar/snackbar.d.ts +120 -0
  555. package/dist/components/snackbar/snackbar.d.ts.map +1 -0
  556. package/dist/components/sponsored-slot/index.d.ts +3 -0
  557. package/dist/components/sponsored-slot/index.d.ts.map +1 -0
  558. package/dist/components/sponsored-slot/sponsored-slot.d.ts +16 -0
  559. package/dist/components/sponsored-slot/sponsored-slot.d.ts.map +1 -0
  560. package/dist/components/sponsored-slot/types.d.ts +45 -0
  561. package/dist/components/sponsored-slot/types.d.ts.map +1 -0
  562. package/dist/components/stepper/index.d.ts +7 -0
  563. package/dist/components/stepper/index.d.ts.map +1 -0
  564. package/dist/components/stepper/stepper.d.ts +145 -0
  565. package/dist/components/stepper/stepper.d.ts.map +1 -0
  566. package/dist/components/svg-color/index.d.ts +7 -0
  567. package/dist/components/svg-color/index.d.ts.map +1 -0
  568. package/dist/components/svg-color/svg-color.d.ts +80 -0
  569. package/dist/components/svg-color/svg-color.d.ts.map +1 -0
  570. package/dist/components/table/index.d.ts +7 -0
  571. package/dist/components/table/index.d.ts.map +1 -0
  572. package/dist/components/table/table.d.ts +184 -0
  573. package/dist/components/table/table.d.ts.map +1 -0
  574. package/dist/components/tabs/index.d.ts +7 -0
  575. package/dist/components/tabs/index.d.ts.map +1 -0
  576. package/dist/components/tabs/tabs.d.ts +146 -0
  577. package/dist/components/tabs/tabs.d.ts.map +1 -0
  578. package/dist/components/tag-cloud/index.d.ts +7 -0
  579. package/dist/components/tag-cloud/index.d.ts.map +1 -0
  580. package/dist/components/tag-cloud/tag-cloud.d.ts +58 -0
  581. package/dist/components/tag-cloud/tag-cloud.d.ts.map +1 -0
  582. package/dist/components/tiptap-renderer/index.d.ts +2 -0
  583. package/dist/components/tiptap-renderer/index.d.ts.map +1 -0
  584. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +46 -0
  585. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -0
  586. package/dist/components/tooltip/index.d.ts +7 -0
  587. package/dist/components/tooltip/index.d.ts.map +1 -0
  588. package/dist/components/tooltip/tooltip.d.ts +38 -0
  589. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  590. package/dist/components/virtual-list/index.d.ts +7 -0
  591. package/dist/components/virtual-list/index.d.ts.map +1 -0
  592. package/dist/components/virtual-list/virtual-list.d.ts +64 -0
  593. package/dist/components/virtual-list/virtual-list.d.ts.map +1 -0
  594. package/dist/core/accessibility/index.d.ts +96 -0
  595. package/dist/core/accessibility/index.d.ts.map +1 -0
  596. package/dist/core/accessibility/skip-link.d.ts +31 -0
  597. package/dist/core/accessibility/skip-link.d.ts.map +1 -0
  598. package/dist/core/context.d.ts +99 -0
  599. package/dist/core/context.d.ts.map +1 -0
  600. package/dist/core/hooks/use-boolean.d.ts +54 -0
  601. package/dist/core/hooks/use-boolean.d.ts.map +1 -0
  602. package/dist/core/hooks/use-breakpoints.d.ts +87 -0
  603. package/dist/core/hooks/use-breakpoints.d.ts.map +1 -0
  604. package/dist/core/hooks/use-click-outside.d.ts +26 -0
  605. package/dist/core/hooks/use-click-outside.d.ts.map +1 -0
  606. package/dist/core/hooks/use-copy-to-clipboard.d.ts +66 -0
  607. package/dist/core/hooks/use-copy-to-clipboard.d.ts.map +1 -0
  608. package/dist/core/hooks/use-countdown.d.ts +105 -0
  609. package/dist/core/hooks/use-countdown.d.ts.map +1 -0
  610. package/dist/core/hooks/use-debounce.d.ts +64 -0
  611. package/dist/core/hooks/use-debounce.d.ts.map +1 -0
  612. package/dist/core/hooks/use-event-listener.d.ts +37 -0
  613. package/dist/core/hooks/use-event-listener.d.ts.map +1 -0
  614. package/dist/core/hooks/use-interval.d.ts +30 -0
  615. package/dist/core/hooks/use-interval.d.ts.map +1 -0
  616. package/dist/core/hooks/use-is-client.d.ts +24 -0
  617. package/dist/core/hooks/use-is-client.d.ts.map +1 -0
  618. package/dist/core/hooks/use-local-storage.d.ts +61 -0
  619. package/dist/core/hooks/use-local-storage.d.ts.map +1 -0
  620. package/dist/core/hooks/use-media-query.d.ts +107 -0
  621. package/dist/core/hooks/use-media-query.d.ts.map +1 -0
  622. package/dist/core/hooks/use-mounted.d.ts +33 -0
  623. package/dist/core/hooks/use-mounted.d.ts.map +1 -0
  624. package/dist/core/hooks/use-multi-select.d.ts +113 -0
  625. package/dist/core/hooks/use-multi-select.d.ts.map +1 -0
  626. package/dist/core/hooks/use-previous.d.ts +23 -0
  627. package/dist/core/hooks/use-previous.d.ts.map +1 -0
  628. package/dist/core/hooks/use-set-state.d.ts +56 -0
  629. package/dist/core/hooks/use-set-state.d.ts.map +1 -0
  630. package/dist/core/hooks/use-tabs.d.ts +74 -0
  631. package/dist/core/hooks/use-tabs.d.ts.map +1 -0
  632. package/dist/core/hooks/use-timeout.d.ts +37 -0
  633. package/dist/core/hooks/use-timeout.d.ts.map +1 -0
  634. package/dist/core/index.d.ts +36 -468
  635. package/dist/core/index.d.ts.map +1 -0
  636. package/dist/core/index.js +10 -7
  637. package/dist/core/provider-stack.d.ts +181 -0
  638. package/dist/core/provider-stack.d.ts.map +1 -0
  639. package/dist/core/provider.d.ts +72 -0
  640. package/dist/core/provider.d.ts.map +1 -0
  641. package/dist/forms/index.d.ts +6 -557
  642. package/dist/forms/index.d.ts.map +1 -0
  643. package/dist/forms/index.js +0 -1
  644. package/dist/forms/index.js.map +1 -1
  645. package/dist/forms/schema-provider.d.ts +282 -0
  646. package/dist/forms/schema-provider.d.ts.map +1 -0
  647. package/dist/forms/schema-utils.d.ts +286 -0
  648. package/dist/forms/schema-utils.d.ts.map +1 -0
  649. package/dist/hooks/index.d.ts +38 -8
  650. package/dist/hooks/index.d.ts.map +1 -0
  651. package/dist/hooks/index.js +12 -9
  652. package/dist/hooks/use-array.d.ts +126 -0
  653. package/dist/hooks/use-array.d.ts.map +1 -0
  654. package/dist/hooks/use-async.d.ts +88 -0
  655. package/dist/hooks/use-async.d.ts.map +1 -0
  656. package/dist/hooks/use-back-to-top.d.ts +57 -0
  657. package/dist/hooks/use-back-to-top.d.ts.map +1 -0
  658. package/dist/hooks/use-client-rect.d.ts +67 -0
  659. package/dist/hooks/use-client-rect.d.ts.map +1 -0
  660. package/dist/hooks/use-config-from-query.d.ts +98 -0
  661. package/dist/hooks/use-config-from-query.d.ts.map +1 -0
  662. package/dist/hooks/use-cookies.d.ts +62 -0
  663. package/dist/hooks/use-cookies.d.ts.map +1 -0
  664. package/dist/hooks/use-countdown-date.d.ts +47 -0
  665. package/dist/hooks/use-countdown-date.d.ts.map +1 -0
  666. package/dist/hooks/use-countdown-seconds.d.ts +83 -0
  667. package/dist/hooks/use-countdown-seconds.d.ts.map +1 -0
  668. package/dist/hooks/use-double-click.d.ts +67 -0
  669. package/dist/hooks/use-double-click.d.ts.map +1 -0
  670. package/dist/hooks/use-focus-trap.d.ts +66 -0
  671. package/dist/hooks/use-focus-trap.d.ts.map +1 -0
  672. package/dist/hooks/use-image-dimensions.d.ts +124 -0
  673. package/dist/hooks/use-image-dimensions.d.ts.map +1 -0
  674. package/dist/hooks/use-infinite-scroll.d.ts +204 -0
  675. package/dist/hooks/use-infinite-scroll.d.ts.map +1 -0
  676. package/dist/hooks/use-intersection-observer.d.ts +93 -0
  677. package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
  678. package/dist/hooks/use-isomorphic-layout-effect.d.ts +34 -0
  679. package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  680. package/dist/hooks/use-keyboard-shortcut.d.ts +112 -0
  681. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -0
  682. package/dist/hooks/use-lazy-query.d.ts +132 -0
  683. package/dist/hooks/use-lazy-query.d.ts.map +1 -0
  684. package/dist/hooks/use-mutation.d.ts +141 -0
  685. package/dist/hooks/use-mutation.d.ts.map +1 -0
  686. package/dist/hooks/use-online-status.d.ts +56 -0
  687. package/dist/hooks/use-online-status.d.ts.map +1 -0
  688. package/dist/hooks/use-password-visibility.d.ts +83 -0
  689. package/dist/hooks/use-password-visibility.d.ts.map +1 -0
  690. package/dist/hooks/use-popover-hover.d.ts +78 -0
  691. package/dist/hooks/use-popover-hover.d.ts.map +1 -0
  692. package/dist/hooks/use-scroll-offset-top.d.ts +69 -0
  693. package/dist/hooks/use-scroll-offset-top.d.ts.map +1 -0
  694. package/dist/hooks/use-scroll-position.d.ts +96 -0
  695. package/dist/hooks/use-scroll-position.d.ts.map +1 -0
  696. package/dist/hooks/use-session-storage.d.ts +66 -0
  697. package/dist/hooks/use-session-storage.d.ts.map +1 -0
  698. package/dist/hooks/use-throttle.d.ts +67 -0
  699. package/dist/hooks/use-throttle.d.ts.map +1 -0
  700. package/dist/hooks/use-update-effect.d.ts +53 -0
  701. package/dist/hooks/use-update-effect.d.ts.map +1 -0
  702. package/dist/hooks/use-window-size.d.ts +132 -0
  703. package/dist/hooks/use-window-size.d.ts.map +1 -0
  704. package/dist/http/client.d.ts +74 -0
  705. package/dist/http/client.d.ts.map +1 -0
  706. package/dist/http/index.d.ts +6 -229
  707. package/dist/http/index.d.ts.map +1 -0
  708. package/dist/http/index.js +0 -2
  709. package/dist/http/index.js.map +1 -1
  710. package/dist/http/types.d.ts +158 -0
  711. package/dist/http/types.d.ts.map +1 -0
  712. package/dist/icons/context.d.ts +17 -0
  713. package/dist/icons/context.d.ts.map +1 -0
  714. package/dist/icons/controls.d.ts +51 -0
  715. package/dist/icons/controls.d.ts.map +1 -0
  716. package/dist/icons/index.d.ts +3 -0
  717. package/dist/icons/index.d.ts.map +1 -0
  718. package/dist/icons/index.js +4 -0
  719. package/dist/icons/index.js.map +1 -0
  720. package/dist/icons/theme.d.ts +4 -0
  721. package/dist/icons/theme.d.ts.map +1 -0
  722. package/dist/index.css +4 -0
  723. package/dist/index.css.map +1 -1
  724. package/dist/index.d.ts +19 -2758
  725. package/dist/index.d.ts.map +1 -0
  726. package/dist/index.js +46 -63
  727. package/dist/index.js.map +1 -1
  728. package/dist/layouts/auth/centered.d.ts +49 -0
  729. package/dist/layouts/auth/centered.d.ts.map +1 -0
  730. package/dist/layouts/auth/index.d.ts +12 -0
  731. package/dist/layouts/auth/index.d.ts.map +1 -0
  732. package/dist/layouts/auth/simple.d.ts +58 -0
  733. package/dist/layouts/auth/simple.d.ts.map +1 -0
  734. package/dist/layouts/auth/split.d.ts +81 -0
  735. package/dist/layouts/auth/split.d.ts.map +1 -0
  736. package/dist/layouts/core/context.d.ts +102 -0
  737. package/dist/layouts/core/context.d.ts.map +1 -0
  738. package/dist/layouts/core/css-vars.d.ts +43 -0
  739. package/dist/layouts/core/css-vars.d.ts.map +1 -0
  740. package/dist/layouts/core/header-section.d.ts +79 -0
  741. package/dist/layouts/core/header-section.d.ts.map +1 -0
  742. package/dist/layouts/core/index.d.ts +18 -0
  743. package/dist/layouts/core/index.d.ts.map +1 -0
  744. package/dist/layouts/core/layout-section.d.ts +64 -0
  745. package/dist/layouts/core/layout-section.d.ts.map +1 -0
  746. package/dist/layouts/core/user-menu.d.ts +88 -0
  747. package/dist/layouts/core/user-menu.d.ts.map +1 -0
  748. package/dist/layouts/dashboard/index.d.ts +10 -0
  749. package/dist/layouts/dashboard/index.d.ts.map +1 -0
  750. package/dist/layouts/dashboard/labels.d.ts +12 -0
  751. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  752. package/dist/layouts/dashboard/layout.d.ts +96 -0
  753. package/dist/layouts/dashboard/layout.d.ts.map +1 -0
  754. package/dist/layouts/dashboard/sidenav.d.ts +62 -0
  755. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -0
  756. package/dist/layouts/dashboard/topnav.d.ts +41 -0
  757. package/dist/layouts/dashboard/topnav.d.ts.map +1 -0
  758. package/dist/layouts/index.d.ts +32 -850
  759. package/dist/layouts/index.d.ts.map +1 -0
  760. package/dist/layouts/index.js +8 -4
  761. package/dist/layouts/panel-layout.d.ts +35 -0
  762. package/dist/layouts/panel-layout.d.ts.map +1 -0
  763. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  764. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  765. package/dist/layouts/types.d.ts +317 -0
  766. package/dist/layouts/types.d.ts.map +1 -0
  767. package/dist/netron/context.d.ts +18 -0
  768. package/dist/netron/context.d.ts.map +1 -0
  769. package/dist/netron/hooks.d.ts +10 -0
  770. package/dist/netron/hooks.d.ts.map +1 -0
  771. package/dist/netron/index.d.ts +47 -4
  772. package/dist/netron/index.d.ts.map +1 -0
  773. package/dist/netron/index.js +1 -2
  774. package/dist/netron/types.d.ts +12 -0
  775. package/dist/netron/types.d.ts.map +1 -0
  776. package/dist/registry/index.d.ts +8 -341
  777. package/dist/registry/index.d.ts.map +1 -0
  778. package/dist/registry/index.js +1 -2
  779. package/dist/registry/installer.d.ts +137 -0
  780. package/dist/registry/installer.d.ts.map +1 -0
  781. package/dist/registry/manager.d.ts +196 -0
  782. package/dist/registry/manager.d.ts.map +1 -0
  783. package/dist/state/create-store.d.ts +164 -0
  784. package/dist/state/create-store.d.ts.map +1 -0
  785. package/dist/state/index.d.ts +12 -969
  786. package/dist/state/index.d.ts.map +1 -0
  787. package/dist/state/index.js +2 -3
  788. package/dist/state/settings-version.d.ts +255 -0
  789. package/dist/state/settings-version.d.ts.map +1 -0
  790. package/dist/state/stores/auth.d.ts +143 -0
  791. package/dist/state/stores/auth.d.ts.map +1 -0
  792. package/dist/state/stores/index.d.ts +10 -0
  793. package/dist/state/stores/index.d.ts.map +1 -0
  794. package/dist/state/stores/settings.d.ts +151 -0
  795. package/dist/state/stores/settings.d.ts.map +1 -0
  796. package/dist/state/stores/theme.d.ts +87 -0
  797. package/dist/state/stores/theme.d.ts.map +1 -0
  798. package/dist/state/stores/ui.d.ts +106 -0
  799. package/dist/state/stores/ui.d.ts.map +1 -0
  800. package/dist/theme/colors/base.d.ts +61 -0
  801. package/dist/theme/colors/base.d.ts.map +1 -0
  802. package/dist/theme/colors/index.d.ts +10 -0
  803. package/dist/theme/colors/index.d.ts.map +1 -0
  804. package/dist/theme/colors/luxury.d.ts +49 -0
  805. package/dist/theme/colors/luxury.d.ts.map +1 -0
  806. package/dist/theme/components/Autocomplete.d.ts +9 -0
  807. package/dist/theme/components/Autocomplete.d.ts.map +1 -0
  808. package/dist/theme/components/Button.d.ts +33 -0
  809. package/dist/theme/components/Button.d.ts.map +1 -0
  810. package/dist/theme/components/Card.d.ts +20 -0
  811. package/dist/theme/components/Card.d.ts.map +1 -0
  812. package/dist/theme/components/Chip.d.ts +29 -0
  813. package/dist/theme/components/Chip.d.ts.map +1 -0
  814. package/dist/theme/components/DataGrid.d.ts +15 -0
  815. package/dist/theme/components/DataGrid.d.ts.map +1 -0
  816. package/dist/theme/components/DatePicker.d.ts +19 -0
  817. package/dist/theme/components/DatePicker.d.ts.map +1 -0
  818. package/dist/theme/components/Dialog.d.ts +23 -0
  819. package/dist/theme/components/Dialog.d.ts.map +1 -0
  820. package/dist/theme/components/FormControls.d.ts +44 -0
  821. package/dist/theme/components/FormControls.d.ts.map +1 -0
  822. package/dist/theme/components/Tabs.d.ts +21 -0
  823. package/dist/theme/components/Tabs.d.ts.map +1 -0
  824. package/dist/theme/components/TextField.d.ts +87 -0
  825. package/dist/theme/components/TextField.d.ts.map +1 -0
  826. package/dist/theme/components/index.d.ts +27 -0
  827. package/dist/theme/components/index.d.ts.map +1 -0
  828. package/dist/theme/components/theme-utils.d.ts +42 -0
  829. package/dist/theme/components/theme-utils.d.ts.map +1 -0
  830. package/dist/theme/create-theme.d.ts +119 -0
  831. package/dist/theme/create-theme.d.ts.map +1 -0
  832. package/dist/theme/css-variables.d.ts +42 -0
  833. package/dist/theme/css-variables.d.ts.map +1 -0
  834. package/dist/theme/custom-shadows.d.ts +58 -0
  835. package/dist/theme/custom-shadows.d.ts.map +1 -0
  836. package/dist/theme/index.d.ts +23 -1045
  837. package/dist/theme/index.d.ts.map +1 -0
  838. package/dist/theme/index.js +6 -3
  839. package/dist/theme/mixins.d.ts +334 -0
  840. package/dist/theme/mixins.d.ts.map +1 -0
  841. package/dist/theme/opacity.d.ts +51 -0
  842. package/dist/theme/opacity.d.ts.map +1 -0
  843. package/dist/theme/palette/builder.d.ts +138 -0
  844. package/dist/theme/palette/builder.d.ts.map +1 -0
  845. package/dist/theme/palette/index.d.ts +7 -0
  846. package/dist/theme/palette/index.d.ts.map +1 -0
  847. package/dist/theme/palette/overrides.d.ts +23 -0
  848. package/dist/theme/palette/overrides.d.ts.map +1 -0
  849. package/dist/theme/palette.d.ts +43 -0
  850. package/dist/theme/palette.d.ts.map +1 -0
  851. package/dist/theme/presets/arctic.d.ts +13 -0
  852. package/dist/theme/presets/arctic.d.ts.map +1 -0
  853. package/dist/theme/presets/default.d.ts +13 -0
  854. package/dist/theme/presets/default.d.ts.map +1 -0
  855. package/dist/theme/presets/dracula.d.ts +27 -0
  856. package/dist/theme/presets/dracula.d.ts.map +1 -0
  857. package/dist/theme/presets/ember.d.ts +23 -0
  858. package/dist/theme/presets/ember.d.ts.map +1 -0
  859. package/dist/theme/presets/index.d.ts +39 -0
  860. package/dist/theme/presets/index.d.ts.map +1 -0
  861. package/dist/theme/presets/luxury.d.ts +13 -0
  862. package/dist/theme/presets/luxury.d.ts.map +1 -0
  863. package/dist/theme/presets/midnight.d.ts +23 -0
  864. package/dist/theme/presets/midnight.d.ts.map +1 -0
  865. package/dist/theme/presets/minimal.d.ts +23 -0
  866. package/dist/theme/presets/minimal.d.ts.map +1 -0
  867. package/dist/theme/presets/nature.d.ts +14 -0
  868. package/dist/theme/presets/nature.d.ts.map +1 -0
  869. package/dist/theme/presets/retro.d.ts +23 -0
  870. package/dist/theme/presets/retro.d.ts.map +1 -0
  871. package/dist/theme/shadows.d.ts +61 -0
  872. package/dist/theme/shadows.d.ts.map +1 -0
  873. package/dist/theme/typography.d.ts +24 -0
  874. package/dist/theme/typography.d.ts.map +1 -0
  875. package/dist/theme/utils/color.d.ts +295 -0
  876. package/dist/theme/utils/color.d.ts.map +1 -0
  877. package/dist/theme/utils/index.d.ts +7 -0
  878. package/dist/theme/utils/index.d.ts.map +1 -0
  879. package/dist/{registry-DQcIzW2s.d.ts → types/blocks.d.ts} +30 -191
  880. package/dist/types/blocks.d.ts.map +1 -0
  881. package/dist/{components-BCGZ-Rwt.d.ts → types/components.d.ts} +17 -20
  882. package/dist/types/components.d.ts.map +1 -0
  883. package/dist/{config-Pct0n_Kq.d.ts → types/config.d.ts} +14 -16
  884. package/dist/types/config.d.ts.map +1 -0
  885. package/dist/types/index.d.ts +13 -7
  886. package/dist/types/index.d.ts.map +1 -0
  887. package/dist/types/index.js +1 -2
  888. package/dist/types/registry.d.ts +158 -0
  889. package/dist/types/registry.d.ts.map +1 -0
  890. package/dist/{theme-B4Q3Bg5o.d.ts → types/theme.d.ts} +31 -34
  891. package/dist/types/theme.d.ts.map +1 -0
  892. package/dist/ui/index.d.ts +18 -0
  893. package/dist/ui/index.d.ts.map +1 -0
  894. package/dist/ui/index.js +148 -0
  895. package/dist/ui/index.js.map +1 -0
  896. package/dist/utils/async-lock.d.ts +169 -0
  897. package/dist/utils/async-lock.d.ts.map +1 -0
  898. package/dist/utils/cn.d.ts +80 -0
  899. package/dist/utils/cn.d.ts.map +1 -0
  900. package/dist/utils/cookies.d.ts +68 -0
  901. package/dist/utils/cookies.d.ts.map +1 -0
  902. package/dist/utils/create-classes.d.ts +90 -0
  903. package/dist/utils/create-classes.d.ts.map +1 -0
  904. package/dist/utils/errors.d.ts +201 -0
  905. package/dist/utils/errors.d.ts.map +1 -0
  906. package/dist/utils/fetch-interceptor.d.ts +230 -0
  907. package/dist/utils/fetch-interceptor.d.ts.map +1 -0
  908. package/dist/utils/font.d.ts +65 -0
  909. package/dist/utils/font.d.ts.map +1 -0
  910. package/dist/utils/format-crypto.d.ts +312 -0
  911. package/dist/utils/format-crypto.d.ts.map +1 -0
  912. package/dist/utils/format-date.d.ts +240 -0
  913. package/dist/utils/format-date.d.ts.map +1 -0
  914. package/dist/utils/format-number.d.ts +245 -0
  915. package/dist/utils/format-number.d.ts.map +1 -0
  916. package/dist/utils/i18n-text.d.ts +68 -0
  917. package/dist/utils/i18n-text.d.ts.map +1 -0
  918. package/dist/utils/index.d.ts +30 -0
  919. package/dist/utils/index.d.ts.map +1 -0
  920. package/dist/utils/jwt.d.ts +227 -0
  921. package/dist/utils/jwt.d.ts.map +1 -0
  922. package/dist/utils/object.d.ts +96 -0
  923. package/dist/utils/object.d.ts.map +1 -0
  924. package/dist/utils/refs.d.ts +60 -0
  925. package/dist/utils/refs.d.ts.map +1 -0
  926. package/dist/utils/rtl.d.ts +75 -0
  927. package/dist/utils/rtl.d.ts.map +1 -0
  928. package/dist/utils/storage.d.ts +190 -0
  929. package/dist/utils/storage.d.ts.map +1 -0
  930. package/dist/utils/string.d.ts +216 -0
  931. package/dist/utils/string.d.ts.map +1 -0
  932. package/dist/utils/template-resolver.d.ts +12 -0
  933. package/dist/utils/template-resolver.d.ts.map +1 -0
  934. package/dist/utils/toast.d.ts +25 -0
  935. package/dist/utils/toast.d.ts.map +1 -0
  936. package/dist/utils/transform-number.d.ts +108 -0
  937. package/dist/utils/transform-number.d.ts.map +1 -0
  938. package/dist/utils/url.d.ts +198 -0
  939. package/dist/utils/url.d.ts.map +1 -0
  940. package/package.json +120 -63
  941. package/dist/chunk-2FYNRDXR.js.map +0 -1
  942. package/dist/chunk-77KIJLPP.js +0 -37
  943. package/dist/chunk-A2Z7NVGL.js.map +0 -1
  944. package/dist/chunk-BV32OJ2A.js.map +0 -1
  945. package/dist/chunk-DDY7TLUI.js.map +0 -1
  946. package/dist/chunk-HO2GKTWJ.js.map +0 -1
  947. package/dist/chunk-IZOIO7PA.js.map +0 -1
  948. package/dist/chunk-JDTC2SBY.js.map +0 -1
  949. package/dist/chunk-KTCWPGON.js.map +0 -1
  950. package/dist/chunk-MEFT6XPH.js.map +0 -1
  951. package/dist/chunk-SNKGGHBT.js.map +0 -1
  952. package/dist/chunk-VAAIHNWQ.js.map +0 -1
  953. package/dist/chunk-XQXGE2PW.js +0 -16793
  954. package/dist/chunk-XQXGE2PW.js.map +0 -1
  955. package/dist/chunk-XWL6J6IO.js.map +0 -1
  956. package/dist/chunk-XXP3ZGU6.js.map +0 -1
  957. package/dist/chunk-YJMAQL3S.js.map +0 -1
  958. package/dist/index-nmJ8Muwg.d.ts +0 -2368
  959. package/dist/settings-CAC0qFjS.d.ts +0 -455
  960. package/dist/text-transform-D6MzzF7V.d.ts +0 -165
  961. package/dist/use-timeout-D7U3EAtH.d.ts +0 -808
@@ -1,20 +1,22 @@
1
- import { PRESET_NAMES, PRESET_DISPLAY_NAMES } from './chunk-MEFT6XPH.js';
2
- import { SearchInput } from './chunk-KTCWPGON.js';
3
- import { useBoolean } from './chunk-HO2GKTWJ.js';
4
- import { useSettingsStore } from './chunk-DDY7TLUI.js';
5
- import { forwardRef, useMemo, useState, useCallback, createContext, lazy, useTransition, useRef, useEffect, useId, Children, Fragment as Fragment$1, useContext, isValidElement, Component, Suspense } from 'react';
1
+ import { contentClasses, ContentRoot, TipTapRenderer } from './chunk-GUGTDURV.js';
2
+ import { PRESET_NAMES, PRESET_DISPLAY_NAMES } from './chunk-KQ67XB6T.js';
3
+ import { useSettingsStore } from './chunk-XIXSSI3B.js';
4
+ import { SearchInput } from './chunk-GMIE6III.js';
5
+ import { useBoolean } from './chunk-BRDWQVRT.js';
6
+ import { FilterIcon, EmptyIcon, CloseIcon, ChevronDownIcon, ChevronRightIcon, ZoomOutIcon, ZoomInIcon, FullscreenExitIcon, FullscreenIcon, DownloadIcon, ShareIcon, ChevronLeftIcon, PlayIcon, ChevronUpIcon } from './chunk-PGHEP4JD.js';
7
+ import { createContext, lazy, useCallback, useState, useMemo, useTransition, useRef, useEffect, Fragment as Fragment$1, useId, Children, useContext, isValidElement, Suspense } from 'react';
6
8
  import Stack from '@mui/material/Stack';
7
9
  import TextField2 from '@mui/material/TextField';
8
10
  import Chip from '@mui/material/Chip';
9
11
  import MenuItem from '@mui/material/MenuItem';
10
- import Box20 from '@mui/material/Box';
12
+ import Box19 from '@mui/material/Box';
11
13
  import Button from '@mui/material/Button';
12
14
  import Typography5 from '@mui/material/Typography';
13
15
  import Badge from '@mui/material/Badge';
14
16
  import { styled, alpha, useTheme } from '@mui/material/styles';
15
17
  import dayjs from 'dayjs';
16
18
  import InputAdornment from '@mui/material/InputAdornment';
17
- import IconButton3 from '@mui/material/IconButton';
19
+ import IconButton4 from '@mui/material/IconButton';
18
20
  import Dialog from '@mui/material/Dialog';
19
21
  import DialogTitle from '@mui/material/DialogTitle';
20
22
  import DialogActions from '@mui/material/DialogActions';
@@ -34,26 +36,27 @@ import TableSortLabel from '@mui/material/TableSortLabel';
34
36
  import TablePagination from '@mui/material/TablePagination';
35
37
  import Paper from '@mui/material/Paper';
36
38
  import Checkbox from '@mui/material/Checkbox';
37
- import Skeleton from '@mui/material/Skeleton';
39
+ import Skeleton3 from '@mui/material/Skeleton';
38
40
  import Autocomplete from '@mui/material/Autocomplete';
39
41
  import { LazyMotion, domMax, useMotionValue, useAnimationFrame, useTransform, useMotionTemplate, m } from 'framer-motion';
40
42
  import MuiAvatar from '@mui/material/Avatar';
41
43
  import AvatarGroup from '@mui/material/AvatarGroup';
42
- import MuiCard from '@mui/material/Card';
44
+ import Card2 from '@mui/material/Card';
43
45
  import CardHeader from '@mui/material/CardHeader';
44
46
  import CardContent from '@mui/material/CardContent';
45
47
  import CardActions from '@mui/material/CardActions';
46
48
  import DialogContentText from '@mui/material/DialogContentText';
49
+ import CardActionArea from '@mui/material/CardActionArea';
50
+ import Tooltip2 from '@mui/material/Tooltip';
47
51
  import Grid from '@mui/material/Grid';
48
52
  import Portal from '@mui/material/Portal';
49
53
  import MuiLinearProgress from '@mui/material/LinearProgress';
50
54
  import CircularProgress from '@mui/material/CircularProgress';
51
- import List2 from '@mui/material/List';
55
+ import List from '@mui/material/List';
52
56
  import ListItemButton from '@mui/material/ListItemButton';
53
57
  import ListItemText from '@mui/material/ListItemText';
54
58
  import Snackbar from '@mui/material/Snackbar';
55
59
  import MuiAlert from '@mui/material/Alert';
56
- import CloseIcon3 from '@mui/icons-material/Close';
57
60
  import { useVirtualizer } from '@tanstack/react-virtual';
58
61
  import Divider3 from '@mui/material/Divider';
59
62
  import MuiTabs from '@mui/material/Tabs';
@@ -61,43 +64,31 @@ import MuiTab from '@mui/material/Tab';
61
64
  import MuiAccordion from '@mui/material/Accordion';
62
65
  import MuiAccordionSummary from '@mui/material/AccordionSummary';
63
66
  import MuiAccordionDetails from '@mui/material/AccordionDetails';
64
- import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
65
67
  import MuiMenu from '@mui/material/Menu';
66
68
  import ListItemIcon from '@mui/material/ListItemIcon';
67
69
  import NProgress from 'nprogress';
68
- import Collapse from '@mui/material/Collapse';
69
- import ContentCopyIcon from '@mui/icons-material/ContentCopy';
70
70
  import Drawer from '@mui/material/Drawer';
71
- import Tooltip from '@mui/material/Tooltip';
72
71
  import Switch from '@mui/material/Switch';
73
72
  import Slider from '@mui/material/Slider';
74
73
  import ToggleButton from '@mui/material/ToggleButton';
75
74
  import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
76
75
  import FormControlLabel from '@mui/material/FormControlLabel';
77
76
  import AlertTitle from '@mui/material/AlertTitle';
77
+ import { useForkRef } from '@mui/material/utils';
78
78
  import MuiBreadcrumbs from '@mui/material/Breadcrumbs';
79
79
  import Link from '@mui/material/Link';
80
80
  import SvgIcon from '@mui/material/SvgIcon';
81
- import ChevronRightIcon from '@mui/icons-material/ChevronRight';
82
81
  import MuiStepper from '@mui/material/Stepper';
83
82
  import Step from '@mui/material/Step';
84
83
  import StepLabel from '@mui/material/StepLabel';
85
84
  import StepContent from '@mui/material/StepContent';
86
85
  import { clsx } from 'clsx';
87
- import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
88
- import ZoomInIcon from '@mui/icons-material/ZoomIn';
89
- import ZoomOutIcon from '@mui/icons-material/ZoomOut';
90
- import FullscreenIcon from '@mui/icons-material/Fullscreen';
91
- import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
92
- import DownloadIcon from '@mui/icons-material/Download';
93
- import ShareIcon from '@mui/icons-material/Share';
94
- import PlayArrowIcon from '@mui/icons-material/PlayArrow';
95
- import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';
96
- import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
97
86
  import ButtonBase from '@mui/material/ButtonBase';
87
+ import Collapse from '@mui/material/Collapse';
98
88
  import Popover from '@mui/material/Popover';
99
89
  import ReactMarkdown from 'react-markdown';
100
90
  import rehypeRaw from 'rehype-raw';
91
+ import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
101
92
  import rehypeHighlight from 'rehype-highlight';
102
93
  import remarkGfm from 'remark-gfm';
103
94
  import TurndownService from 'turndown';
@@ -129,7 +120,7 @@ function DateRangePicker({
129
120
  const txTitle = translations?.title ?? title ?? "Select date range";
130
121
  const txStart = translations?.startDate ?? "Start date";
131
122
  const txEnd = translations?.endDate ?? "End date";
132
- const txErrorRange = translations?.errorRange ?? "End date must be later than start date";
123
+ const txErrorRange = translations?.errorRange ?? "End date cannot be earlier than start date";
133
124
  const txCancel = translations?.cancel ?? "Cancel";
134
125
  const txApply = translations?.apply ?? "Apply";
135
126
  const mdUp = useMediaQuery((theme) => theme.breakpoints.up("md"));
@@ -277,6 +268,7 @@ function DateRangeInput({
277
268
  const txPlaceholder = translations?.placeholder ?? "Select dates...";
278
269
  const txFrom = translations?.from ?? "From";
279
270
  const txTo = translations?.to ?? "To";
271
+ const txClear = translations?.clear ?? "Clear date range";
280
272
  const displayLabel = useMemo(
281
273
  () => formatLabel(startDate, endDate, txFrom, txTo),
282
274
  [startDate, endDate, txFrom, txTo]
@@ -317,7 +309,7 @@ function DateRangeInput({
317
309
  sx: { cursor: "pointer" },
318
310
  startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", sx: { color: "text.disabled" }, children: /* @__PURE__ */ jsx(CalendarIcon, {}) }),
319
311
  ...hasValue && {
320
- endAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(IconButton3, { size: "small", onClick: handleClear, sx: { p: 0.25 }, children: /* @__PURE__ */ jsx(ClearIcon, {}) }) })
312
+ endAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx(IconButton4, { size: "small", onClick: handleClear, "aria-label": txClear, sx: { p: 0.25 }, children: /* @__PURE__ */ jsx(ClearIcon, {}) }) })
321
313
  }
322
314
  },
323
315
  inputLabel: { shrink: true }
@@ -356,22 +348,6 @@ function DateRangeInput({
356
348
  )
357
349
  ] });
358
350
  }
359
- function FilterIcon() {
360
- return /* @__PURE__ */ jsx(
361
- "svg",
362
- {
363
- width: "16",
364
- height: "16",
365
- viewBox: "0 0 24 24",
366
- fill: "none",
367
- stroke: "currentColor",
368
- strokeWidth: "2",
369
- strokeLinecap: "round",
370
- strokeLinejoin: "round",
371
- children: /* @__PURE__ */ jsx("polygon", { points: "22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3" })
372
- }
373
- );
374
- }
375
351
  function useDebounce(value, delay) {
376
352
  const [debouncedValue, setDebouncedValue] = useState(value);
377
353
  useEffect(() => {
@@ -413,6 +389,12 @@ function FilterToolbar({
413
389
  });
414
390
  }
415
391
  }, [debouncedSearch, searchFilter?.key, onChange, values]);
392
+ const searchValue = values[searchFilter?.key ?? "search"] ?? "";
393
+ useEffect(() => {
394
+ if (searchValue === prevDebouncedRef.current) return;
395
+ prevDebouncedRef.current = searchValue;
396
+ setLocalSearch(searchValue);
397
+ }, [searchValue]);
416
398
  const activeCount = useMemo(
417
399
  () => filters.filter((f) => f.type !== "search" && isFilterActive(f, values[f.key])).length,
418
400
  [filters, values]
@@ -476,16 +458,23 @@ function FilterToolbar({
476
458
  size: "small",
477
459
  value: values[key] ?? "",
478
460
  onChange: (e) => handleChange(key, e.target.value),
479
- slotProps: { select: { displayEmpty: true } },
461
+ slotProps: { select: { displayEmpty: true, "aria-label": label } },
480
462
  sx: {
481
463
  minWidth: width ?? 150,
482
464
  "& .MuiOutlinedInput-root": { borderRadius: 1 },
483
465
  "& .MuiOutlinedInput-notchedOutline legend": { width: 0 }
484
466
  },
485
467
  children: [
486
- /* @__PURE__ */ jsx(MenuItem, { value: "", children: /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: {
487
- color: "text.secondary"
488
- }, children: label }) }),
468
+ /* @__PURE__ */ jsx(MenuItem, { value: "", children: /* @__PURE__ */ jsx(
469
+ Typography5,
470
+ {
471
+ variant: "body2",
472
+ sx: {
473
+ color: "text.secondary"
474
+ },
475
+ children: label
476
+ }
477
+ ) }),
489
478
  options?.map((opt) => /* @__PURE__ */ jsx(MenuItem, { value: opt.value, children: opt.label }, opt.value))
490
479
  ]
491
480
  },
@@ -504,12 +493,23 @@ function FilterToolbar({
504
493
  select: {
505
494
  multiple: true,
506
495
  displayEmpty: true,
496
+ // Same reason as the single select above: the label lives in
497
+ // `renderValue` as placeholder text, leaving the control
498
+ // without an accessible name.
499
+ "aria-label": label,
507
500
  renderValue: (selected) => {
508
501
  const sel = selected;
509
502
  if (sel.length === 0) {
510
- return /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: {
511
- color: "text.secondary"
512
- }, children: label });
503
+ return /* @__PURE__ */ jsx(
504
+ Typography5,
505
+ {
506
+ variant: "body2",
507
+ sx: {
508
+ color: "text.secondary"
509
+ },
510
+ children: label
511
+ }
512
+ );
513
513
  }
514
514
  return /* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 0.5, sx: { overflow: "hidden" }, children: sel.map((val) => {
515
515
  const opt = options?.find((o) => o.value === val);
@@ -574,43 +574,52 @@ function FilterToolbar({
574
574
  key
575
575
  );
576
576
  case "number-range":
577
- return /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, sx: {
578
- alignItems: "center"
579
- }, children: [
580
- /* @__PURE__ */ jsx(
581
- TextField2,
582
- {
583
- type: "number",
584
- size: "small",
585
- label: `${label} min`,
586
- value: values[`${key}Min`] ?? "",
587
- onChange: (e) => handleChange(`${key}Min`, e.target.value),
588
- sx: { minWidth: width ?? 100 }
589
- }
590
- ),
591
- /* @__PURE__ */ jsx(
592
- Typography5,
593
- {
594
- variant: "body2",
595
- sx: {
596
- color: "text.disabled",
597
- px: 0.5
598
- },
599
- children: "\u2014"
600
- }
601
- ),
602
- /* @__PURE__ */ jsx(
603
- TextField2,
604
- {
605
- type: "number",
606
- size: "small",
607
- label: `${label} max`,
608
- value: values[`${key}Max`] ?? "",
609
- onChange: (e) => handleChange(`${key}Max`, e.target.value),
610
- sx: { minWidth: width ?? 100 }
611
- }
612
- )
613
- ] }, key);
577
+ return /* @__PURE__ */ jsxs(
578
+ Stack,
579
+ {
580
+ direction: "row",
581
+ spacing: 1,
582
+ sx: {
583
+ alignItems: "center"
584
+ },
585
+ children: [
586
+ /* @__PURE__ */ jsx(
587
+ TextField2,
588
+ {
589
+ type: "number",
590
+ size: "small",
591
+ label: `${label} min`,
592
+ value: values[`${key}Min`] ?? "",
593
+ onChange: (e) => handleChange(`${key}Min`, e.target.value),
594
+ sx: { minWidth: width ?? 100 }
595
+ }
596
+ ),
597
+ /* @__PURE__ */ jsx(
598
+ Typography5,
599
+ {
600
+ variant: "body2",
601
+ sx: {
602
+ color: "text.disabled",
603
+ px: 0.5
604
+ },
605
+ children: "\u2014"
606
+ }
607
+ ),
608
+ /* @__PURE__ */ jsx(
609
+ TextField2,
610
+ {
611
+ type: "number",
612
+ size: "small",
613
+ label: `${label} max`,
614
+ value: values[`${key}Max`] ?? "",
615
+ onChange: (e) => handleChange(`${key}Max`, e.target.value),
616
+ sx: { minWidth: width ?? 100 }
617
+ }
618
+ )
619
+ ]
620
+ },
621
+ key
622
+ );
614
623
  default:
615
624
  return null;
616
625
  }
@@ -650,7 +659,7 @@ function FilterToolbar({
650
659
  ml: "auto"
651
660
  },
652
661
  children: [
653
- activeCount > 0 && /* @__PURE__ */ jsx(Badge, { badgeContent: activeCount, color: "primary", sx: { "& .MuiBadge-badge": { fontSize: "0.65rem" } }, children: /* @__PURE__ */ jsx(Box20, { sx: { color: "text.secondary", display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(FilterIcon, {}) }) }),
662
+ activeCount > 0 && /* @__PURE__ */ jsx(Badge, { badgeContent: activeCount, color: "primary", sx: { "& .MuiBadge-badge": { fontSize: "0.65rem" } }, children: /* @__PURE__ */ jsx(Box19, { sx: { color: "text.secondary", display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(FilterIcon, {}) }) }),
654
663
  hasAnyActive && /* @__PURE__ */ jsx(
655
664
  Button,
656
665
  {
@@ -708,7 +717,11 @@ var StyledTableRow = styled(TableRow)(({ theme }) => ({
708
717
  transition: theme.transitions.create("background-color", {
709
718
  duration: theme.transitions.duration.shortest
710
719
  }),
711
- "&:nth-of-type(even)": {
720
+ // `:nth-child(even)` for zebra-striping — table rows are homogeneous
721
+ // siblings, so child-position is equivalent to of-type but doesn't
722
+ // assume the rendered tag never changes (e.g. a row replaced by a
723
+ // skeleton placeholder still alternates correctly).
724
+ "&:nth-child(even)": {
712
725
  backgroundColor: alpha(theme.palette.grey[500], 0.02)
713
726
  },
714
727
  "&:hover": {
@@ -719,32 +732,12 @@ var StyledTableRow = styled(TableRow)(({ theme }) => ({
719
732
  }
720
733
  }));
721
734
  var EMPTY_SELECTION = /* @__PURE__ */ new Set();
722
- function EmptyIcon() {
723
- return /* @__PURE__ */ jsxs(
724
- "svg",
725
- {
726
- width: "48",
727
- height: "48",
728
- viewBox: "0 0 24 24",
729
- fill: "none",
730
- stroke: "currentColor",
731
- strokeWidth: "1.5",
732
- strokeLinecap: "round",
733
- strokeLinejoin: "round",
734
- opacity: "0.3",
735
- children: [
736
- /* @__PURE__ */ jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }),
737
- /* @__PURE__ */ jsx("polyline", { points: "14 2 14 8 20 8" }),
738
- /* @__PURE__ */ jsx("line", { x1: "9", y1: "15", x2: "15", y2: "15" })
739
- ]
740
- }
741
- );
742
- }
743
735
  function AdminDataTable({
744
736
  columns,
745
737
  data,
746
738
  total,
747
739
  loading = false,
740
+ loadingRows = 5,
748
741
  page,
749
742
  pageSize,
750
743
  onPageChange,
@@ -753,12 +746,17 @@ function AdminDataTable({
753
746
  sortOrder = "asc",
754
747
  onSort,
755
748
  emptyMessage = "No data found",
749
+ loadError = null,
750
+ loadErrorLabels,
756
751
  rowKey,
757
752
  onRowClick,
753
+ rowSx,
754
+ renderExpanded,
758
755
  pageSizeOptions = [10, 25, 50, 100],
759
756
  stickyHeader = false,
760
757
  dense = false,
761
758
  maxHeight,
759
+ paginationLabels,
762
760
  sx,
763
761
  selectable = false,
764
762
  selectedKeys,
@@ -770,9 +768,14 @@ function AdminDataTable({
770
768
  if (rowKey) return rowKey(row);
771
769
  const record = row;
772
770
  if (record["id"] !== void 0) return String(record["id"]);
771
+ if (selectable && process.env["NODE_ENV"] !== "production") {
772
+ console.error(
773
+ "[AdminDataTable] `selectable` is on but rows have no stable key: pass `rowKey`, or give each row an `id`. Index-based keys make the selection positional, so sorting or paging silently re-targets it."
774
+ );
775
+ }
773
776
  return String(index);
774
777
  },
775
- [rowKey]
778
+ [rowKey, selectable]
776
779
  );
777
780
  const selection = selectedKeys ?? EMPTY_SELECTION;
778
781
  const pageRowKeys = useMemo(
@@ -820,11 +823,12 @@ function AdminDataTable({
820
823
  },
821
824
  [onPageSizeChange, onPageChange]
822
825
  );
826
+ const skeletonRowCount = Math.max(1, Math.min(pageSize, loadingRows));
823
827
  const skeletonRows = useMemo(
824
- () => Array.from({ length: pageSize }, (_, i) => /* @__PURE__ */ jsxs(TableRow, { children: [
825
- selectable && /* @__PURE__ */ jsx(TableCell, { padding: "checkbox", children: /* @__PURE__ */ jsx(Skeleton, { variant: "rectangular", width: 18, height: 18, sx: { borderRadius: 0.5 } }) }),
828
+ () => Array.from({ length: skeletonRowCount }, (_, i) => /* @__PURE__ */ jsxs(TableRow, { children: [
829
+ selectable && /* @__PURE__ */ jsx(TableCell, { padding: "checkbox", children: /* @__PURE__ */ jsx(Skeleton3, { variant: "rectangular", width: 18, height: 18, sx: { borderRadius: 0.5 } }) }),
826
830
  columns.map((col) => /* @__PURE__ */ jsx(TableCell, { align: col.align ?? "left", children: /* @__PURE__ */ jsx(
827
- Skeleton,
831
+ Skeleton3,
828
832
  {
829
833
  variant: "text",
830
834
  width: col.align === "right" ? "60%" : "80%",
@@ -835,7 +839,7 @@ function AdminDataTable({
835
839
  }
836
840
  ) }, col.key))
837
841
  ] }, `skeleton-${i}`)),
838
- [pageSize, columns, selectable]
842
+ [skeletonRowCount, columns, selectable]
839
843
  );
840
844
  const showBulkBar = selectable && selection.size > 0 && !!bulkActions;
841
845
  if (!loading && data.length === 0) {
@@ -845,7 +849,7 @@ function AdminDataTable({
845
849
  columns.map((col) => /* @__PURE__ */ jsx(TableCell, { align: col.align ?? "left", style: { width: col.width }, children: col.header }, col.key))
846
850
  ] }) }) }),
847
851
  /* @__PURE__ */ jsxs(
848
- Box20,
852
+ Box19,
849
853
  {
850
854
  sx: {
851
855
  py: 6,
@@ -856,15 +860,41 @@ function AdminDataTable({
856
860
  },
857
861
  children: [
858
862
  /* @__PURE__ */ jsx(EmptyIcon, {}),
859
- /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: {
860
- color: "text.disabled"
861
- }, children: emptyMessage })
863
+ /* @__PURE__ */ jsx(
864
+ Typography5,
865
+ {
866
+ variant: "body2",
867
+ sx: { color: loadError ? "text.secondary" : "text.disabled" },
868
+ children: loadError ? loadErrorLabels?.empty ?? "Could not load this data" : emptyMessage
869
+ }
870
+ ),
871
+ loadError && /* @__PURE__ */ jsx(Typography5, { variant: "caption", sx: { color: "text.disabled", maxWidth: 420, textAlign: "center" }, children: loadError })
862
872
  ]
863
873
  }
864
874
  )
865
875
  ] });
866
876
  }
867
877
  return /* @__PURE__ */ jsxs(StyledTableContainer, { sx: { maxHeight, ...sx }, children: [
878
+ loadError && /* @__PURE__ */ jsxs(
879
+ Box19,
880
+ {
881
+ role: "status",
882
+ sx: {
883
+ display: "flex",
884
+ alignItems: "center",
885
+ gap: 1,
886
+ px: 2,
887
+ py: 1,
888
+ borderBottom: 1,
889
+ borderColor: "divider",
890
+ bgcolor: (theme) => alpha(theme.palette.warning.main, 0.12)
891
+ },
892
+ children: [
893
+ /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: { color: "warning.dark", fontWeight: 600 }, children: loadErrorLabels?.partial ?? "Some of this data could not be loaded" }),
894
+ /* @__PURE__ */ jsx(Typography5, { variant: "caption", sx: { color: "text.secondary" }, children: loadError })
895
+ ]
896
+ }
897
+ ),
868
898
  showBulkBar && /* @__PURE__ */ jsxs(
869
899
  Stack,
870
900
  {
@@ -878,13 +908,20 @@ function AdminDataTable({
878
908
  bgcolor: (theme) => alpha(theme.palette.primary.main, 0.06)
879
909
  },
880
910
  children: [
881
- /* @__PURE__ */ jsxs(Typography5, { variant: "body2", sx: {
882
- fontWeight: 600
883
- }, children: [
884
- selection.size,
885
- " selected"
886
- ] }),
887
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1 } }),
911
+ /* @__PURE__ */ jsxs(
912
+ Typography5,
913
+ {
914
+ variant: "body2",
915
+ sx: {
916
+ fontWeight: 600
917
+ },
918
+ children: [
919
+ selection.size,
920
+ " selected"
921
+ ]
922
+ }
923
+ ),
924
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1 } }),
888
925
  bulkActions(selection)
889
926
  ]
890
927
  }
@@ -926,13 +963,16 @@ function AdminDataTable({
926
963
  /* @__PURE__ */ jsx(TableBody, { children: loading ? skeletonRows : data.map((row, index) => {
927
964
  const key = getRowKey(row, index);
928
965
  const isSelected = selectable && selection.has(key);
929
- return /* @__PURE__ */ jsxs(
966
+ const body = /* @__PURE__ */ jsxs(
930
967
  StyledTableRow,
931
968
  {
932
969
  hover: true,
933
970
  selected: isSelected,
934
971
  onClick: onRowClick ? () => onRowClick(row) : void 0,
935
- sx: { cursor: onRowClick ? "pointer" : "default" },
972
+ sx: {
973
+ cursor: onRowClick ? "pointer" : "default",
974
+ ...rowSx?.(row, index)
975
+ },
936
976
  children: [
937
977
  selectable && /* @__PURE__ */ jsx(
938
978
  TableCell,
@@ -957,6 +997,12 @@ function AdminDataTable({
957
997
  },
958
998
  key
959
999
  );
1000
+ const detail = renderExpanded?.(row, index);
1001
+ if (detail == null) return body;
1002
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
1003
+ body,
1004
+ /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: columns.length + (selectable ? 1 : 0), sx: { py: 0, borderBottom: 0 }, children: detail }) })
1005
+ ] }, `${key}-group`);
960
1006
  }) })
961
1007
  ] }) }),
962
1008
  /* @__PURE__ */ jsx(
@@ -969,6 +1015,8 @@ function AdminDataTable({
969
1015
  rowsPerPageOptions: pageSizeOptions,
970
1016
  onPageChange: handlePageChange,
971
1017
  onRowsPerPageChange: handlePageSizeChange,
1018
+ ...paginationLabels?.rowsPerPage != null && { labelRowsPerPage: paginationLabels.rowsPerPage },
1019
+ ...paginationLabels?.displayedRows != null && { labelDisplayedRows: paginationLabels.displayedRows },
972
1020
  sx: {
973
1021
  borderTop: (theme) => `1px solid ${theme.palette.divider}`,
974
1022
  "& .MuiTablePagination-displayedRows": {
@@ -1011,41 +1059,166 @@ var DEFAULT_COLOR_MAP = {
1011
1059
  new: "info",
1012
1060
  open: "info"
1013
1061
  };
1014
- function StatusChip({ status, colorMap, size = "small", sx }) {
1062
+ function StatusChip({ status, label, colorMap, size = "small", sx, ref, ...other }) {
1015
1063
  const normalizedStatus = status.toLowerCase();
1016
1064
  const mergedMap = colorMap ? { ...DEFAULT_COLOR_MAP, ...colorMap } : DEFAULT_COLOR_MAP;
1017
- const color = mergedMap[normalizedStatus] ?? "default";
1018
- const displayLabel = status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();
1065
+ const mapped = Object.hasOwn(mergedMap, normalizedStatus) ? mergedMap[normalizedStatus] : void 0;
1066
+ const color = mapped ?? "default";
1067
+ const displayLabel = label ?? status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();
1019
1068
  return /* @__PURE__ */ jsx(
1020
1069
  Chip,
1021
1070
  {
1071
+ ref,
1072
+ ...other,
1022
1073
  label: displayLabel,
1023
1074
  size,
1024
- sx: {
1025
- height: size === "small" ? 22 : 28,
1026
- fontSize: size === "small" ? "0.7rem" : "0.775rem",
1027
- fontWeight: 600,
1028
- borderRadius: 0.75,
1029
- letterSpacing: "0.01em",
1030
- ...color !== "default" && {
1031
- color: (theme) => theme.palette[color].main,
1032
- bgcolor: (theme) => alpha(theme.palette[color].main, 0.1),
1033
- border: (theme) => `1px solid ${alpha(theme.palette[color].main, 0.2)}`
1034
- },
1035
- ...color === "default" && {
1036
- color: "text.secondary",
1037
- bgcolor: (theme) => alpha(theme.palette.grey[500], 0.08),
1038
- border: (theme) => `1px solid ${alpha(theme.palette.grey[500], 0.16)}`
1075
+ sx: [
1076
+ {
1077
+ height: size === "small" ? 22 : 28,
1078
+ fontSize: size === "small" ? "0.7rem" : "0.775rem",
1079
+ fontWeight: 600,
1080
+ borderRadius: 0.75,
1081
+ letterSpacing: "0.01em",
1082
+ ...color !== "default" && {
1083
+ color: (theme) => theme.palette[color].main,
1084
+ bgcolor: (theme) => alpha(theme.palette[color].main, 0.1),
1085
+ border: (theme) => `1px solid ${alpha(theme.palette[color].main, 0.2)}`
1086
+ },
1087
+ ...color === "default" && {
1088
+ color: "text.secondary",
1089
+ bgcolor: (theme) => alpha(theme.palette.grey[500], 0.08),
1090
+ border: (theme) => `1px solid ${alpha(theme.palette.grey[500], 0.16)}`
1091
+ }
1039
1092
  },
1040
- ...sx
1041
- }
1093
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
1094
+ ]
1042
1095
  }
1043
1096
  );
1044
1097
  }
1098
+
1099
+ // src/utils/format-crypto.ts
1100
+ var COIN_DISPLAY_DECIMALS = Object.freeze(
1101
+ // Prototype-free: a plain literal answers `COIN_DISPLAY_DECIMALS['constructor']`
1102
+ // with a function, which `?? FALLBACK_DECIMALS` accepts as a precision. That
1103
+ // produced `toFixed(NaN)` — silently formatting with zero decimals instead
1104
+ // of eight, for any coin code that collides with an Object.prototype key.
1105
+ Object.assign(/* @__PURE__ */ Object.create(null), { btc: 8, xmr: 8 })
1106
+ );
1107
+ var COIN_WIRE_DECIMALS = Object.freeze(
1108
+ Object.assign(/* @__PURE__ */ Object.create(null), { btc: 8, xmr: 12 })
1109
+ );
1110
+ var FALLBACK_DECIMALS = 8;
1111
+ var FALLBACK_WIRE_DECIMALS = 12;
1112
+ var DECIMAL = /^([+-]?)(\d*)(?:\.(\d*))?$/;
1113
+ function getCoinDecimals(coin) {
1114
+ const decimals = COIN_DISPLAY_DECIMALS[coin.toLowerCase()];
1115
+ return typeof decimals === "number" ? decimals : FALLBACK_DECIMALS;
1116
+ }
1117
+ function getCoinWireDecimals(coin) {
1118
+ const decimals = COIN_WIRE_DECIMALS[coin.toLowerCase()];
1119
+ return typeof decimals === "number" ? decimals : FALLBACK_WIRE_DECIMALS;
1120
+ }
1121
+ function formatDecimalString(raw, decimals, rounding = "down") {
1122
+ const scaled = toScaledInteger(raw, decimals, rounding);
1123
+ return scaled === null ? null : fromScaledInteger(scaled, decimals);
1124
+ }
1125
+ function toScaledInteger(raw, decimals, rounding = "half-up") {
1126
+ const match = DECIMAL.exec(raw.trim());
1127
+ if (!match) return null;
1128
+ const [, sign = "", intPart = "", fracPart = ""] = match;
1129
+ if (intPart === "" && fracPart === "") return null;
1130
+ const digits = `${intPart || "0"}${fracPart.slice(0, decimals).padEnd(decimals, "0")}`;
1131
+ const roundUp = rounding === "half-up" && (fracPart[decimals] ?? "0") >= "5";
1132
+ const magnitude = BigInt(digits) + (roundUp ? 1n : 0n);
1133
+ return sign === "-" ? -magnitude : magnitude;
1134
+ }
1135
+ function fromScaledInteger(scaled, decimals) {
1136
+ const negative = scaled < 0n;
1137
+ const asString = (negative ? -scaled : scaled).toString().padStart(decimals + 1, "0");
1138
+ const whole = asString.slice(0, asString.length - decimals) || "0";
1139
+ const fraction = decimals > 0 ? asString.slice(asString.length - decimals) : "";
1140
+ const magnitude = decimals > 0 ? `${whole}.${fraction}` : whole;
1141
+ return `${negative && scaled !== 0n ? "-" : ""}${magnitude}`;
1142
+ }
1143
+ function isNonZeroDecimal(raw) {
1144
+ const match = DECIMAL.exec(raw.trim());
1145
+ if (!match) return false;
1146
+ const [, , intPart = "", fracPart = ""] = match;
1147
+ if (intPart === "" && fracPart === "") return false;
1148
+ return /[1-9]/.test(intPart) || /[1-9]/.test(fracPart);
1149
+ }
1150
+ function sumDecimalStrings(values, decimals, options) {
1151
+ const rounding = options?.rounding ?? "half-up";
1152
+ let total = 0n;
1153
+ for (const value of values) {
1154
+ if (value === null || value === void 0 || value === "") continue;
1155
+ const scaled = toScaledInteger(
1156
+ typeof value === "number" ? String(value) : value,
1157
+ decimals,
1158
+ rounding
1159
+ );
1160
+ if (scaled !== null) total += scaled;
1161
+ }
1162
+ return fromScaledInteger(total, decimals);
1163
+ }
1164
+ function subtractDecimalStrings(minuend, subtrahends, decimals, options) {
1165
+ if (minuend === null || minuend === void 0 || minuend === "") return null;
1166
+ const rounding = options?.rounding ?? "half-up";
1167
+ let total = toScaledInteger(
1168
+ typeof minuend === "number" ? String(minuend) : minuend,
1169
+ decimals,
1170
+ rounding
1171
+ );
1172
+ if (total === null) return null;
1173
+ for (const value of subtrahends) {
1174
+ if (value === null || value === void 0 || value === "") continue;
1175
+ const scaled = toScaledInteger(
1176
+ typeof value === "number" ? String(value) : value,
1177
+ decimals,
1178
+ rounding
1179
+ );
1180
+ if (scaled !== null) total -= scaled;
1181
+ }
1182
+ if (options?.clampAtZero && total < 0n) total = 0n;
1183
+ return fromScaledInteger(total, decimals);
1184
+ }
1185
+ function formatCoinAmount(value, coin, options) {
1186
+ const code = coin.toLowerCase();
1187
+ const symbol = options?.symbol ?? coin.toUpperCase();
1188
+ const withSymbol = options?.withSymbol !== false;
1189
+ const decimals = Math.max(0, options?.precision ?? getCoinDecimals(code));
1190
+ const trim = options?.trim === true;
1191
+ const rounding = options?.rounding ?? "down";
1192
+ const markDust = options?.markDust !== false;
1193
+ const raw = typeof value === "string" ? value.trim() : typeof value === "number" && Number.isFinite(value) ? String(Object.is(value, -0) ? 0 : value) : "";
1194
+ let formatted = raw === "" ? null : formatDecimalString(raw, decimals, rounding);
1195
+ const exact = formatted !== null;
1196
+ if (formatted === null) {
1197
+ let n = typeof value === "number" ? value : Number(raw);
1198
+ if (!Number.isFinite(n)) n = 0;
1199
+ if (Object.is(n, -0)) n = 0;
1200
+ formatted = n.toFixed(decimals);
1201
+ }
1202
+ if (markDust && exact && !/[1-9]/.test(formatted) && isNonZeroDecimal(raw)) {
1203
+ const epsilon = fromScaledInteger(1n, decimals);
1204
+ const below = raw.startsWith("-");
1205
+ return withSymbol ? `${below ? ">" : "<"} ${below ? "-" : ""}${epsilon} ${symbol}` : `${below ? ">" : "<"} ${below ? "-" : ""}${epsilon}`;
1206
+ }
1207
+ if (trim && formatted.includes(".")) {
1208
+ formatted = formatted.replace(/\.?0+$/, "");
1209
+ if (formatted === "" || formatted === "-") formatted = "0";
1210
+ }
1211
+ return withSymbol ? `${formatted} ${symbol}` : formatted;
1212
+ }
1213
+ function formatCoinAmountList(totals, options) {
1214
+ const sep = options?.separator ?? " \xB7 ";
1215
+ return Object.keys(totals).sort().map((coin) => formatCoinAmount(totals[coin], coin, options)).join(sep);
1216
+ }
1045
1217
  function formatAmount(amount, decimals) {
1046
1218
  const num = parseFloat(amount);
1047
1219
  if (Number.isNaN(num)) return amount;
1048
- const fixed = decimals !== void 0 ? num.toFixed(decimals) : amount;
1220
+ const scaled = decimals !== void 0 ? formatDecimalString(amount, decimals) : null;
1221
+ const fixed = scaled ?? (decimals !== void 0 ? num.toFixed(decimals) : amount);
1049
1222
  const [intPart, decPart] = fixed.split(".");
1050
1223
  const absInt = intPart.replace("-", "");
1051
1224
  const formatted = absInt.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
@@ -1326,7 +1499,7 @@ function CountrySelect({
1326
1499
  const isWorldRow = worldwideValue !== void 0 && option.iso2 === worldwideValue;
1327
1500
  const src = isWorldRow ? null : getFlagSrc?.(option.iso2.toLowerCase()) ?? null;
1328
1501
  return /* @__PURE__ */ jsxs(
1329
- Box20,
1502
+ Box19,
1330
1503
  {
1331
1504
  component: "li",
1332
1505
  ...rest,
@@ -1531,7 +1704,7 @@ function AnimateBorder({ sx, children, duration, slotProps, className, ...other
1531
1704
  }
1532
1705
  );
1533
1706
  return /* @__PURE__ */ jsxs(
1534
- Box20,
1707
+ Box19,
1535
1708
  {
1536
1709
  dir: "ltr",
1537
1710
  ref: rootRef,
@@ -1589,7 +1762,7 @@ function MovingBorder({ sx, size, isHidden, rx = "30%", ry = "30%", duration = 8
1589
1762
  const x = useTransform(progress, (val) => calculateTransform(val).x);
1590
1763
  const y = useTransform(progress, (val) => calculateTransform(val).y);
1591
1764
  const transform = useMotionTemplate`translateX(${x}px) translateY(${y}px) translateX(-50%) translateY(-50%)`;
1592
- return /* @__PURE__ */ jsxs(Box20, { component: "span", sx: [{ textAlign: "initial" }, ...Array.isArray(sx) ? sx : [sx]], ...other, children: [
1765
+ return /* @__PURE__ */ jsxs(Box19, { component: "span", sx: [{ textAlign: "initial" }, ...Array.isArray(sx) ? sx : [sx]], ...other, children: [
1593
1766
  /* @__PURE__ */ jsx(
1594
1767
  "svg",
1595
1768
  {
@@ -1603,7 +1776,7 @@ function MovingBorder({ sx, size, isHidden, rx = "30%", ry = "30%", duration = 8
1603
1776
  }
1604
1777
  ),
1605
1778
  /* @__PURE__ */ jsx(
1606
- Box20,
1779
+ Box19,
1607
1780
  {
1608
1781
  component: m.span,
1609
1782
  style: { transform },
@@ -1772,7 +1945,7 @@ function AvatarWrapper({
1772
1945
  badge && /* @__PURE__ */ jsx("span", { style: badgeStyle, children: badge })
1773
1946
  ] });
1774
1947
  }
1775
- var Avatar = forwardRef(function Avatar2({ size = "md", shape = "circular", name, src, alt, online, offline, badge, badgeColor, children, sx, ...other }, ref) {
1948
+ function Avatar({ size = "md", shape = "circular", name, src, alt, online, offline, badge, badgeColor, children, sx, ref, ...other }) {
1776
1949
  const initials = useMemo(() => {
1777
1950
  if (children) return null;
1778
1951
  return name ? getInitials(name) : null;
@@ -1789,7 +1962,7 @@ var Avatar = forwardRef(function Avatar2({ size = "md", shape = "circular", name
1789
1962
  };
1790
1963
  const avatarContent = /* @__PURE__ */ jsx(StyledAvatar, { ref, src, alt: alt || name, ownerState, sx, ...other, children: children || initials });
1791
1964
  return /* @__PURE__ */ jsx(AvatarWrapper, { online, offline, badge, badgeColor, size, children: avatarContent });
1792
- });
1965
+ }
1793
1966
  function CustomAvatarGroup({ avatars, size = "sm", max = 4, sx, ...other }) {
1794
1967
  return /* @__PURE__ */ jsx(AvatarGroup, { max, sx, ...other, children: avatars.map((avatar, index) => /* @__PURE__ */ jsx(Avatar, { name: avatar.name, src: avatar.src, alt: avatar.alt || avatar.name, size }, index)) });
1795
1968
  }
@@ -1859,7 +2032,7 @@ var StyledBadge = styled(Badge, {
1859
2032
  }
1860
2033
  };
1861
2034
  });
1862
- var Badge2 = forwardRef(function Badge3({ variant = "standard", color = "error", size = "medium", badgeContent, children, sx, ...other }, ref) {
2035
+ function Badge2({ variant = "standard", color = "error", size = "medium", badgeContent, children, sx, ref, ...other }) {
1863
2036
  const ownerState = { variant, color, size };
1864
2037
  const isStatusVariant = variant === "online" || variant === "offline" || variant === "busy";
1865
2038
  const isDotVariant = variant === "dot" || isStatusVariant;
@@ -1875,14 +2048,16 @@ var Badge2 = forwardRef(function Badge3({ variant = "standard", color = "error",
1875
2048
  children
1876
2049
  }
1877
2050
  );
1878
- });
2051
+ }
1879
2052
  function CountBadge({
1880
2053
  count,
1881
2054
  max = 99,
1882
2055
  showZero = false,
1883
2056
  color = "error",
1884
2057
  size = "medium",
1885
- sx
2058
+ sx,
2059
+ ref,
2060
+ ...other
1886
2061
  }) {
1887
2062
  if (!showZero && count === 0) {
1888
2063
  return null;
@@ -1905,28 +2080,32 @@ function CountBadge({
1905
2080
  };
1906
2081
  const bgColor = colorMap[color];
1907
2082
  return /* @__PURE__ */ jsx(
1908
- Box20,
2083
+ Box19,
1909
2084
  {
1910
2085
  component: "span",
1911
- sx: {
1912
- display: "inline-flex",
1913
- alignItems: "center",
1914
- justifyContent: "center",
1915
- minWidth,
1916
- height,
1917
- padding: "0 4px",
1918
- borderRadius: height / 2,
1919
- fontSize,
1920
- fontWeight: 600,
1921
- backgroundColor: bgColor,
1922
- color: "white",
1923
- ...sx
1924
- },
2086
+ ref,
2087
+ ...other,
2088
+ sx: [
2089
+ {
2090
+ display: "inline-flex",
2091
+ alignItems: "center",
2092
+ justifyContent: "center",
2093
+ minWidth,
2094
+ height,
2095
+ padding: "0 4px",
2096
+ borderRadius: height / 2,
2097
+ fontSize,
2098
+ fontWeight: 600,
2099
+ backgroundColor: bgColor,
2100
+ color: "white"
2101
+ },
2102
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
2103
+ ],
1925
2104
  children: displayCount
1926
2105
  }
1927
2106
  );
1928
2107
  }
1929
- function StatusDot({ status, size = 8, pulse = true, sx }) {
2108
+ function StatusDot({ status, size = 8, pulse = true, sx, ref, ...other }) {
1930
2109
  const statusColors = {
1931
2110
  online: "#22c55e",
1932
2111
  offline: "#9ca3af",
@@ -1935,24 +2114,28 @@ function StatusDot({ status, size = 8, pulse = true, sx }) {
1935
2114
  };
1936
2115
  const color = statusColors[status];
1937
2116
  return /* @__PURE__ */ jsx(
1938
- Box20,
2117
+ Box19,
1939
2118
  {
1940
2119
  component: "span",
1941
- sx: {
1942
- display: "inline-block",
1943
- width: size,
1944
- height: size,
1945
- borderRadius: "50%",
1946
- backgroundColor: color,
1947
- ...pulse && status === "online" && {
1948
- animation: "pulse 2s infinite"
2120
+ ref,
2121
+ ...other,
2122
+ sx: [
2123
+ {
2124
+ display: "inline-block",
2125
+ width: size,
2126
+ height: size,
2127
+ borderRadius: "50%",
2128
+ backgroundColor: color,
2129
+ ...pulse && status === "online" && {
2130
+ animation: "pulse 2s infinite"
2131
+ }
1949
2132
  },
1950
- ...sx
1951
- }
2133
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
2134
+ ]
1952
2135
  }
1953
2136
  );
1954
2137
  }
1955
- var StyledCard = styled(MuiCard, {
2138
+ var StyledCard = styled(Card2, {
1956
2139
  shouldForwardProp: (prop) => prop !== "ownerState"
1957
2140
  })(({ theme, ownerState }) => {
1958
2141
  const { variant } = ownerState;
@@ -1971,7 +2154,7 @@ var StyledCard = styled(MuiCard, {
1971
2154
  }
1972
2155
  };
1973
2156
  });
1974
- var Card = forwardRef(function Card2({
2157
+ function Card({
1975
2158
  variant = "elevation",
1976
2159
  title,
1977
2160
  subheader,
@@ -1983,8 +2166,9 @@ var Card = forwardRef(function Card2({
1983
2166
  disablePadding,
1984
2167
  children,
1985
2168
  sx,
2169
+ ref,
1986
2170
  ...other
1987
- }, ref) {
2171
+ }) {
1988
2172
  const ownerState = { variant };
1989
2173
  const hasHeader = title || subheader || headerAction;
1990
2174
  return /* @__PURE__ */ jsxs(
@@ -2011,9 +2195,9 @@ var Card = forwardRef(function Card2({
2011
2195
  ]
2012
2196
  }
2013
2197
  );
2014
- });
2198
+ }
2015
2199
  function CardSection({ title, description, children, sx }) {
2016
- return /* @__PURE__ */ jsxs(Box20, { sx: { mb: 3, ...sx }, children: [
2200
+ return /* @__PURE__ */ jsxs(Box19, { sx: { mb: 3, ...sx }, children: [
2017
2201
  title && /* @__PURE__ */ jsx(
2018
2202
  Typography5,
2019
2203
  {
@@ -2053,10 +2237,10 @@ function StatCard({
2053
2237
  }) {
2054
2238
  const isPositive = change && change > 0;
2055
2239
  const isNegative = change && change < 0;
2056
- return /* @__PURE__ */ jsx(Card, { variant, contentSx: { p: 2, "&:last-child": { pb: 2 } }, sx, ...other, children: /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", justifyContent: "space-between", alignItems: "flex-start" }, children: [
2057
- /* @__PURE__ */ jsx(Box20, { children: loading ? /* @__PURE__ */ jsxs(Fragment, { children: [
2058
- /* @__PURE__ */ jsx(Skeleton, { width: 80, height: 16 }),
2059
- /* @__PURE__ */ jsx(Skeleton, { width: 50, height: 32, sx: { mt: 0.5 } })
2240
+ return /* @__PURE__ */ jsx(Card, { variant, contentSx: { p: 2, "&:last-child": { pb: 2 } }, sx, ...other, children: /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", justifyContent: "space-between", alignItems: "flex-start" }, children: [
2241
+ /* @__PURE__ */ jsx(Box19, { children: loading ? /* @__PURE__ */ jsxs(Fragment, { children: [
2242
+ /* @__PURE__ */ jsx(Skeleton3, { width: 80, height: 16 }),
2243
+ /* @__PURE__ */ jsx(Skeleton3, { width: 50, height: 32, sx: { mt: 0.5 } })
2060
2244
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2061
2245
  /* @__PURE__ */ jsx(
2062
2246
  Typography5,
@@ -2104,7 +2288,7 @@ function StatCard({
2104
2288
  color: "text.secondary"
2105
2289
  }, children: subtitle })
2106
2290
  ] }) }),
2107
- icon && !loading && /* @__PURE__ */ jsx(Box20, { sx: { color: `${color}.main` }, children: icon })
2291
+ icon && !loading && /* @__PURE__ */ jsx(Box19, { sx: { color: `${color}.main` }, children: icon })
2108
2292
  ] }) });
2109
2293
  }
2110
2294
  function ConfirmDialog({
@@ -2123,18 +2307,21 @@ function ConfirmDialog({
2123
2307
  }) {
2124
2308
  const titleId = useId();
2125
2309
  const descriptionId = useId();
2310
+ const [confirming, setConfirming] = useState(false);
2311
+ const busy = loading || confirming;
2126
2312
  const handleConfirm = () => {
2313
+ if (busy) return;
2127
2314
  const result = onConfirm();
2128
- if (result instanceof Promise) {
2129
- result.catch(() => {
2130
- });
2131
- }
2315
+ if (!(result instanceof Promise)) return;
2316
+ setConfirming(true);
2317
+ result.catch(() => {
2318
+ }).finally(() => setConfirming(false));
2132
2319
  };
2133
2320
  return /* @__PURE__ */ jsxs(
2134
2321
  Dialog,
2135
2322
  {
2136
2323
  open,
2137
- onClose: loading ? void 0 : onClose,
2324
+ onClose: busy ? void 0 : onClose,
2138
2325
  maxWidth,
2139
2326
  fullWidth: true,
2140
2327
  "aria-labelledby": titleId,
@@ -2144,8 +2331,8 @@ function ConfirmDialog({
2144
2331
  /* @__PURE__ */ jsx(DialogTitle, { id: titleId, children: title }),
2145
2332
  content && /* @__PURE__ */ jsx(DialogContent, { children: typeof content === "string" ? /* @__PURE__ */ jsx(DialogContentText, { id: descriptionId, children: content }) : /* @__PURE__ */ jsx("div", { id: descriptionId, children: content }) }),
2146
2333
  /* @__PURE__ */ jsxs(DialogActions, { sx: { px: 3, pb: 2 }, children: [
2147
- /* @__PURE__ */ jsx(Button, { onClick: onClose, color: "inherit", disabled: loading, variant: "outlined", children: cancelLabel }),
2148
- /* @__PURE__ */ jsx(Button, { onClick: handleConfirm, color: confirmColor, variant: "contained", loading, disabled, children: confirmLabel })
2334
+ /* @__PURE__ */ jsx(Button, { onClick: onClose, color: "inherit", disabled: busy, variant: "outlined", children: cancelLabel }),
2335
+ /* @__PURE__ */ jsx(Button, { onClick: handleConfirm, color: confirmColor, variant: "contained", loading: busy, disabled, children: confirmLabel })
2149
2336
  ] })
2150
2337
  ]
2151
2338
  }
@@ -2163,184 +2350,85 @@ function DeleteDialog({ itemName, content, ...props }) {
2163
2350
  }
2164
2351
  );
2165
2352
  }
2166
- function IconWrapper({ icon, color = "primary.main", size = 64 }) {
2167
- return /* @__PURE__ */ jsx(
2168
- Box20,
2353
+
2354
+ // src/components/sponsored-slot/types.ts
2355
+ var DEFAULT_SPONSORED_SLOT_LABELS = {
2356
+ sponsored: "Sponsored"
2357
+ };
2358
+ var TILE_IMAGE = { width: "100%", aspectRatio: "4 / 3" };
2359
+ var BANNER_IMAGE = { width: 160, minHeight: 120, flexShrink: 0 };
2360
+ function SponsoredSlot({
2361
+ content,
2362
+ variant = "tile",
2363
+ loading = false,
2364
+ labels: labelsProp,
2365
+ icon,
2366
+ link,
2367
+ onOpen,
2368
+ id
2369
+ }) {
2370
+ const labels = { ...DEFAULT_SPONSORED_SLOT_LABELS, ...labelsProp };
2371
+ const banner = variant === "banner";
2372
+ const imageBox = banner ? BANNER_IMAGE : TILE_IMAGE;
2373
+ if (!content) {
2374
+ if (!loading) return null;
2375
+ return /* @__PURE__ */ jsx(Card2, { variant: "outlined", sx: { height: "100%" }, "data-sponsored-pending": "", children: /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", flexDirection: banner ? "row" : "column", height: "100%" }, children: [
2376
+ /* @__PURE__ */ jsx(Skeleton3, { variant: "rectangular", sx: { ...imageBox, height: banner ? void 0 : "auto" } }),
2377
+ /* @__PURE__ */ jsxs(Box19, { sx: { p: 1.5, flex: 1 }, children: [
2378
+ /* @__PURE__ */ jsx(Skeleton3, { width: "40%" }),
2379
+ /* @__PURE__ */ jsx(Skeleton3, { width: "80%" })
2380
+ ] })
2381
+ ] }) });
2382
+ }
2383
+ const mark = /* @__PURE__ */ jsxs(
2384
+ Box19,
2169
2385
  {
2170
- sx: {
2171
- width: size,
2172
- height: size,
2173
- borderRadius: "50%",
2174
- display: "flex",
2175
- alignItems: "center",
2176
- justifyContent: "center",
2177
- bgcolor: (theme) => {
2178
- const parts = color.split(".");
2179
- let resolved = theme.palette;
2180
- for (const part of parts) {
2181
- resolved = resolved?.[part];
2182
- }
2183
- return typeof resolved === "string" ? alpha(resolved, 0.08) : alpha(theme.palette.primary.main, 0.08);
2184
- }
2185
- },
2186
- children: icon
2386
+ component: "span",
2387
+ sx: { display: "inline-flex", alignItems: "center", gap: 0.5, color: "text.secondary", typography: "caption" },
2388
+ children: [
2389
+ icon,
2390
+ content.byline || labels.sponsored
2391
+ ]
2187
2392
  }
2188
2393
  );
2394
+ const body = /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", flexDirection: banner ? "row" : "column", height: "100%" }, children: [
2395
+ content.image && /* @__PURE__ */ jsx(
2396
+ Box19,
2397
+ {
2398
+ component: "img",
2399
+ src: content.image,
2400
+ alt: "",
2401
+ loading: "lazy",
2402
+ decoding: "async",
2403
+ sx: {
2404
+ display: "block",
2405
+ objectFit: content.imageFit ?? "cover",
2406
+ ...content.imageFit === "contain" && { p: 2, boxSizing: "border-box" },
2407
+ bgcolor: "action.hover",
2408
+ ...imageBox
2409
+ }
2410
+ }
2411
+ ),
2412
+ /* @__PURE__ */ jsxs(Box19, { sx: { p: 1.5, display: "flex", flexDirection: "column", gap: 0.5, minWidth: 0 }, children: [
2413
+ content.because ? /* @__PURE__ */ jsx(Tooltip2, { title: content.because, children: mark }) : mark,
2414
+ /* @__PURE__ */ jsx(Typography5, { variant: "subtitle2", sx: { fontWeight: 600 }, noWrap: !banner, children: content.title }),
2415
+ content.body && /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: { color: "text.secondary" }, children: content.body }),
2416
+ link && content.cta && /* @__PURE__ */ jsx(Typography5, { variant: "caption", sx: { color: "primary.main", fontWeight: 600, mt: "auto" }, children: content.cta })
2417
+ ] })
2418
+ ] });
2419
+ return /* @__PURE__ */ jsx(Card2, { variant: "outlined", sx: { height: "100%" }, ...id !== void 0 && { "data-sponsored": id }, children: link ? /* @__PURE__ */ jsx(CardActionArea, { component: link.component, ...link.props, onClick: onOpen, sx: { height: "100%" }, children: body }) : body });
2189
2420
  }
2190
- function EmptyContent({
2191
- illustration,
2192
- icon,
2193
- iconColor = "primary.main",
2194
- iconSize = 64,
2195
- title = "No data",
2196
- description,
2197
- action,
2198
- actions,
2199
- maxWidth = 400,
2200
- filled = false,
2421
+ var PAGE_GAP = 3;
2422
+ var GRID_GAP = 3;
2423
+ function PageContent({
2424
+ children,
2425
+ gap = PAGE_GAP,
2426
+ fill,
2201
2427
  sx,
2202
- illustrationSx,
2203
- slotProps,
2204
- compact = false
2428
+ ref,
2429
+ ...rest
2205
2430
  }) {
2206
- const visual = icon ? /* @__PURE__ */ jsx(IconWrapper, { icon, color: iconColor, size: iconSize }) : illustration ? /* @__PURE__ */ jsx(Box20, { sx: illustrationSx, children: illustration }) : null;
2207
- const allActions = [...actions ?? [], ...action ? [action] : []];
2208
2431
  return /* @__PURE__ */ jsx(
2209
- Stack,
2210
- {
2211
- sx: {
2212
- alignItems: "center",
2213
- justifyContent: "center",
2214
- textAlign: "center",
2215
- py: compact ? 4 : 8,
2216
- px: 2,
2217
- // Default non-compact behavior: vertically center inside the
2218
- // available "main content" area. Two complementary anchors:
2219
- // * `flex: 1, alignSelf: 'stretch'` — when the parent IS a
2220
- // flex column with explicit height (DashboardLayout main,
2221
- // full-height page wrappers), EmptyContent grows to fill
2222
- // the column and the inner `justifyContent: center` puts
2223
- // the message in the middle of that column.
2224
- // * `minHeight: calc(100vh - 240px)` — fallback for the
2225
- // common case where the page wrapper is just a content-
2226
- // sized `<Stack>` or `<Box>`. 240px is the typical
2227
- // vertical chrome (header ~64 + breadcrumbs ~60 + page
2228
- // padding ~80 + a small margin), so this leaves enough
2229
- // space below the breadcrumbs for the message to sit at
2230
- // the optical center of the visible viewport.
2231
- //
2232
- // `compact` keeps the inline-sized behavior for callers that
2233
- // drop EmptyContent inside a card cell or sidebar.
2234
- // `filled` is the explicit "fill my parent" mode and shares
2235
- // the same fallback so the visual is consistent.
2236
- ...!compact && {
2237
- flex: 1,
2238
- alignSelf: "stretch",
2239
- minHeight: "calc(100vh - 240px)"
2240
- },
2241
- ...filled && { height: "100%" },
2242
- ...sx
2243
- },
2244
- children: /* @__PURE__ */ jsxs(
2245
- Box20,
2246
- {
2247
- sx: {
2248
- maxWidth,
2249
- display: "flex",
2250
- flexDirection: "column",
2251
- alignItems: "center",
2252
- gap: compact ? 1.5 : 2.5
2253
- },
2254
- children: [
2255
- visual,
2256
- /* @__PURE__ */ jsxs(Stack, { spacing: 0.5, sx: {
2257
- alignItems: "center"
2258
- }, children: [
2259
- title && /* @__PURE__ */ jsx(
2260
- Typography5,
2261
- {
2262
- variant: compact ? "subtitle1" : "h6",
2263
- sx: {
2264
- color: "text.secondary",
2265
- fontWeight: 600,
2266
- ...slotProps?.title
2267
- },
2268
- children: title
2269
- }
2270
- ),
2271
- description && /* @__PURE__ */ jsx(
2272
- Typography5,
2273
- {
2274
- variant: "body2",
2275
- sx: {
2276
- color: "text.disabled",
2277
- lineHeight: 1.6,
2278
- ...slotProps?.description
2279
- },
2280
- children: description
2281
- }
2282
- )
2283
- ] }),
2284
- allActions.length > 0 && /* @__PURE__ */ jsx(
2285
- Stack,
2286
- {
2287
- direction: "row",
2288
- spacing: 1,
2289
- sx: { mt: compact ? 0.5 : 1, flexWrap: "wrap", justifyContent: "center", ...slotProps?.actions },
2290
- children: allActions.map((a, i) => /* @__PURE__ */ jsx(Box20, { children: a }, i))
2291
- }
2292
- )
2293
- ]
2294
- }
2295
- )
2296
- }
2297
- );
2298
- }
2299
- function SearchEmptyContent({
2300
- query,
2301
- ...props
2302
- }) {
2303
- return /* @__PURE__ */ jsx(
2304
- EmptyContent,
2305
- {
2306
- title: "No results found",
2307
- description: query ? `Your search for "${query}" did not match any results.` : "Try adjusting your search criteria.",
2308
- ...props
2309
- }
2310
- );
2311
- }
2312
- function LoadingEmptyContent({ ...props }) {
2313
- return /* @__PURE__ */ jsx(
2314
- EmptyContent,
2315
- {
2316
- title: "Loading...",
2317
- illustration: /* @__PURE__ */ jsx(
2318
- Box20,
2319
- {
2320
- sx: {
2321
- width: 64,
2322
- height: 64,
2323
- borderRadius: "50%",
2324
- border: "3px solid",
2325
- borderColor: "divider",
2326
- borderTopColor: "primary.main",
2327
- animation: "spin 1s linear infinite",
2328
- "@keyframes spin": {
2329
- from: { transform: "rotate(0deg)" },
2330
- to: { transform: "rotate(360deg)" }
2331
- }
2332
- }
2333
- }
2334
- ),
2335
- compact: true,
2336
- ...props
2337
- }
2338
- );
2339
- }
2340
- var PAGE_GAP = 3;
2341
- var GRID_GAP = 3;
2342
- var PageContent = forwardRef(
2343
- ({ children, gap = PAGE_GAP, fill, sx, ...rest }, ref) => /* @__PURE__ */ jsx(
2344
2432
  Stack,
2345
2433
  {
2346
2434
  ref,
@@ -2349,9 +2437,8 @@ var PageContent = forwardRef(
2349
2437
  ...rest,
2350
2438
  children
2351
2439
  }
2352
- )
2353
- );
2354
- PageContent.displayName = "PageContent";
2440
+ );
2441
+ }
2355
2442
  var COLUMN_SIZE = {
2356
2443
  1: { xs: 12, md: 12 },
2357
2444
  2: { xs: 12, md: 6 },
@@ -2365,7 +2452,7 @@ function CardGrid({ children, columns = 2, gap = GRID_GAP, sx }) {
2365
2452
  (child) => child != null ? /* @__PURE__ */ jsx(Grid, { size, sx: { display: "flex" }, children: child }) : null
2366
2453
  ) });
2367
2454
  }
2368
- var ImageRoot = styled(Box20, {
2455
+ var ImageRoot = styled(Box19, {
2369
2456
  shouldForwardProp: (prop) => prop !== "ownerState"
2370
2457
  })(({ theme, ownerState }) => {
2371
2458
  const { ratio, hasError } = ownerState;
@@ -2406,7 +2493,7 @@ var StyledImg = styled("img")(() => ({
2406
2493
  objectFit: "cover",
2407
2494
  display: "block"
2408
2495
  }));
2409
- var PlaceholderBox = styled(Box20)(({ theme }) => ({
2496
+ var PlaceholderBox = styled(Box19)(({ theme }) => ({
2410
2497
  position: "absolute",
2411
2498
  top: 0,
2412
2499
  left: 0,
@@ -2431,7 +2518,7 @@ var PlaceholderBox = styled(Box20)(({ theme }) => ({
2431
2518
  }
2432
2519
  }
2433
2520
  }));
2434
- var OverlayBox = styled(Box20)(() => ({
2521
+ var OverlayBox = styled(Box19)(() => ({
2435
2522
  position: "absolute",
2436
2523
  top: 0,
2437
2524
  left: 0,
@@ -2441,7 +2528,7 @@ var OverlayBox = styled(Box20)(() => ({
2441
2528
  alignItems: "center",
2442
2529
  justifyContent: "center"
2443
2530
  }));
2444
- var FallbackBox = styled(Box20)(({ theme }) => ({
2531
+ var FallbackBox = styled(Box19)(({ theme }) => ({
2445
2532
  width: "100%",
2446
2533
  height: "100%",
2447
2534
  minHeight: 100,
@@ -2450,7 +2537,7 @@ var FallbackBox = styled(Box20)(({ theme }) => ({
2450
2537
  justifyContent: "center",
2451
2538
  color: theme.palette.text.disabled
2452
2539
  }));
2453
- var Image = forwardRef(function Image2({
2540
+ function Image({
2454
2541
  src,
2455
2542
  alt,
2456
2543
  ratio,
@@ -2464,8 +2551,9 @@ var Image = forwardRef(function Image2({
2464
2551
  imgSx,
2465
2552
  onLoad,
2466
2553
  onError,
2554
+ ref,
2467
2555
  ...imgProps
2468
- }, ref) {
2556
+ }) {
2469
2557
  const [isLoaded, setIsLoaded] = useState(false);
2470
2558
  const [hasError, setHasError] = useState(false);
2471
2559
  const [currentSrc, setCurrentSrc] = useState(src);
@@ -2511,9 +2599,9 @@ var Image = forwardRef(function Image2({
2511
2599
  ),
2512
2600
  overlay && /* @__PURE__ */ jsx(OverlayBox, { children: overlay })
2513
2601
  ] });
2514
- });
2602
+ }
2515
2603
  function DefaultImageIcon() {
2516
- return /* @__PURE__ */ jsx(Box20, { component: "svg", viewBox: "0 0 24 24", sx: { width: 48, height: 48, opacity: 0.5 }, children: /* @__PURE__ */ jsx(
2604
+ return /* @__PURE__ */ jsx(Box19, { component: "svg", viewBox: "0 0 24 24", sx: { width: 48, height: 48, opacity: 0.5 }, children: /* @__PURE__ */ jsx(
2517
2605
  "path",
2518
2606
  {
2519
2607
  fill: "currentColor",
@@ -2591,7 +2679,17 @@ var StyledLabel = styled("span", {
2591
2679
  ...variantStyles[variant]
2592
2680
  };
2593
2681
  });
2594
- var Label = forwardRef(function Label2({ children, color = "default", variant = "soft", startIcon, endIcon, sx, disabled, ...other }, ref) {
2682
+ function Label({
2683
+ children,
2684
+ color = "default",
2685
+ variant = "soft",
2686
+ startIcon,
2687
+ endIcon,
2688
+ sx,
2689
+ disabled,
2690
+ ref,
2691
+ ...other
2692
+ }) {
2595
2693
  const ownerState = {
2596
2694
  color,
2597
2695
  variant,
@@ -2604,11 +2702,11 @@ var Label = forwardRef(function Label2({ children, color = "default", variant =
2604
2702
  "& svg, & img": { width: "100%", height: "100%" }
2605
2703
  };
2606
2704
  return /* @__PURE__ */ jsxs(StyledLabel, { ref, ownerState, sx, ...other, children: [
2607
- startIcon && /* @__PURE__ */ jsx(Box20, { sx: { mr: 0.5, ...iconStyles }, children: startIcon }),
2705
+ startIcon && /* @__PURE__ */ jsx(Box19, { sx: { mr: 0.5, ...iconStyles }, children: startIcon }),
2608
2706
  children,
2609
- endIcon && /* @__PURE__ */ jsx(Box20, { sx: { ml: 0.5, ...iconStyles }, children: endIcon })
2707
+ endIcon && /* @__PURE__ */ jsx(Box19, { sx: { ml: 0.5, ...iconStyles }, children: endIcon })
2610
2708
  ] });
2611
- });
2709
+ }
2612
2710
  function StatusLabel({
2613
2711
  status,
2614
2712
  ...props
@@ -2631,6 +2729,155 @@ function BooleanLabel({
2631
2729
  }) {
2632
2730
  return /* @__PURE__ */ jsx(Label, { color: value ? "success" : "error", ...props, children: value ? trueText : falseText });
2633
2731
  }
2732
+ var MINUTE = 6e4;
2733
+ var HOUR = 60 * MINUTE;
2734
+ var DAY = 24 * HOUR;
2735
+ function deadlineUrgency(leftMs, urgentWithinMs = HOUR, soonWithinMs = DAY) {
2736
+ if (leftMs <= 0) return "overdue";
2737
+ if (leftMs < urgentWithinMs) return "urgent";
2738
+ if (leftMs < soonWithinMs) return "soon";
2739
+ return "later";
2740
+ }
2741
+ function relativeTimeLeft(leftMs, locale) {
2742
+ const words = new Intl.RelativeTimeFormat(locale, { numeric: "always", style: "short" });
2743
+ const size = Math.abs(leftMs);
2744
+ const sign = leftMs < 0 ? -1 : 1;
2745
+ if (size < HOUR) return words.format(sign * Math.max(1, Math.round(size / MINUTE)), "minute");
2746
+ if (size < 2 * DAY) return words.format(sign * Math.round(size / HOUR), "hour");
2747
+ return words.format(sign * Math.round(size / DAY), "day");
2748
+ }
2749
+ var LOOK = {
2750
+ overdue: { color: "error", variant: "filled" },
2751
+ urgent: { color: "error", variant: "soft" },
2752
+ soon: { color: "warning", variant: "soft" },
2753
+ later: { color: "default", variant: "soft" }
2754
+ };
2755
+ function DeadlineChip({
2756
+ deadline,
2757
+ locale,
2758
+ overdueLabel,
2759
+ urgentWithinMs,
2760
+ soonWithinMs,
2761
+ now = Date.now,
2762
+ sx
2763
+ }) {
2764
+ const [at, setAt] = useState(now);
2765
+ useEffect(() => {
2766
+ const tick = setInterval(() => setAt(now()), 3e4);
2767
+ return () => clearInterval(tick);
2768
+ }, [now]);
2769
+ const due = new Date(deadline).getTime();
2770
+ if (Number.isNaN(due)) return null;
2771
+ const left = due - at;
2772
+ const urgency = deadlineUrgency(left, urgentWithinMs, soonWithinMs);
2773
+ const look = LOOK[urgency];
2774
+ const text = urgency === "overdue" && overdueLabel ? overdueLabel : relativeTimeLeft(left, locale);
2775
+ const exact = new Intl.DateTimeFormat(locale, { dateStyle: "medium", timeStyle: "short" }).format(due);
2776
+ return /* @__PURE__ */ jsx(
2777
+ Label,
2778
+ {
2779
+ color: look.color,
2780
+ variant: look.variant,
2781
+ "data-urgency": urgency,
2782
+ sx: [{ fontVariantNumeric: "tabular-nums" }, ...Array.isArray(sx) ? sx : [sx]],
2783
+ children: /* @__PURE__ */ jsx("time", { dateTime: new Date(due).toISOString(), title: exact, children: text })
2784
+ }
2785
+ );
2786
+ }
2787
+ var DEFAULT_ITEM_WIDTH = { xs: "78%", sm: "46%", md: "31%", lg: "23.5%" };
2788
+ function Chevron({ direction }) {
2789
+ return direction === "left" ? /* @__PURE__ */ jsx(ChevronLeftIcon, { fontSize: "small" }) : /* @__PURE__ */ jsx(ChevronRightIcon, { fontSize: "small" });
2790
+ }
2791
+ function Rail({
2792
+ children,
2793
+ "aria-label": ariaLabel,
2794
+ itemWidth = DEFAULT_ITEM_WIDTH,
2795
+ gap = 2,
2796
+ labels,
2797
+ sx
2798
+ }) {
2799
+ const track = useRef(null);
2800
+ const [reach, setReach] = useState({ back: false, forward: false });
2801
+ const measure = useCallback(() => {
2802
+ const el = track.current;
2803
+ if (!el) return;
2804
+ const max = el.scrollWidth - el.clientWidth;
2805
+ setReach({ back: el.scrollLeft > 1, forward: el.scrollLeft < max - 1 });
2806
+ }, []);
2807
+ useEffect(() => {
2808
+ measure();
2809
+ const el = track.current;
2810
+ if (!el || typeof ResizeObserver === "undefined") return void 0;
2811
+ const observer = new ResizeObserver(measure);
2812
+ observer.observe(el);
2813
+ return () => observer.disconnect();
2814
+ }, [measure]);
2815
+ const page = (direction) => {
2816
+ const el = track.current;
2817
+ if (el) el.scrollBy({ left: direction * el.clientWidth * 0.9, behavior: "smooth" });
2818
+ };
2819
+ const arrow = (direction, show, label) => show ? /* @__PURE__ */ jsx(
2820
+ IconButton4,
2821
+ {
2822
+ size: "small",
2823
+ "aria-label": label,
2824
+ onClick: () => page(direction),
2825
+ sx: {
2826
+ position: "absolute",
2827
+ top: "50%",
2828
+ transform: "translateY(-50%)",
2829
+ [direction === 1 ? "right" : "left"]: -8,
2830
+ zIndex: 1,
2831
+ bgcolor: "background.paper",
2832
+ boxShadow: 2,
2833
+ "&:hover": { bgcolor: "background.paper" },
2834
+ "@media (hover: none)": { display: "none" }
2835
+ },
2836
+ children: /* @__PURE__ */ jsx(Chevron, { direction: direction === 1 ? "right" : "left" })
2837
+ }
2838
+ ) : null;
2839
+ return /* @__PURE__ */ jsxs(
2840
+ Box19,
2841
+ {
2842
+ component: "section",
2843
+ "aria-label": ariaLabel,
2844
+ "data-testid": "prism-rail",
2845
+ sx: [{ position: "relative" }, ...Array.isArray(sx) ? sx : [sx]],
2846
+ children: [
2847
+ arrow(-1, reach.back, labels?.previous ?? "Previous"),
2848
+ /* @__PURE__ */ jsx(
2849
+ Box19,
2850
+ {
2851
+ component: "ul",
2852
+ ref: track,
2853
+ tabIndex: 0,
2854
+ onScroll: measure,
2855
+ sx: {
2856
+ display: "grid",
2857
+ gridAutoFlow: "column",
2858
+ gridAutoColumns: itemWidth,
2859
+ gap,
2860
+ m: 0,
2861
+ p: 0,
2862
+ listStyle: "none",
2863
+ overflowX: "auto",
2864
+ overscrollBehaviorX: "contain",
2865
+ scrollSnapType: "x mandatory",
2866
+ scrollbarWidth: "none",
2867
+ "&::-webkit-scrollbar": { display: "none" },
2868
+ "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main", outlineOffset: 2 }
2869
+ },
2870
+ children: Children.map(
2871
+ children,
2872
+ (child) => child == null || child === false ? null : /* @__PURE__ */ jsx(Box19, { component: "li", sx: { scrollSnapAlign: "start", minWidth: 0 }, children: child })
2873
+ )
2874
+ }
2875
+ ),
2876
+ arrow(1, reach.forward, labels?.next ?? "Next")
2877
+ ]
2878
+ }
2879
+ );
2880
+ }
2634
2881
  var LoadingContent = styled("div")(({ theme }) => ({
2635
2882
  flexGrow: 1,
2636
2883
  width: "100%",
@@ -2655,7 +2902,7 @@ function LoadingScreen({ portal, slots, slotProps, sx, ...other }) {
2655
2902
  }
2656
2903
  ) }) });
2657
2904
  }
2658
- var SplashContainer = styled(Box20, {
2905
+ var SplashContainer = styled(Box19, {
2659
2906
  shouldForwardProp: (prop) => prop !== "fullScreen"
2660
2907
  })(({ theme, fullScreen }) => ({
2661
2908
  display: "flex",
@@ -2767,7 +3014,7 @@ function TagCloud({
2767
3014
  const theme = useTheme();
2768
3015
  const visible = maxItems ? tags.slice(0, maxItems) : tags;
2769
3016
  if (variant === "list") {
2770
- return /* @__PURE__ */ jsx(List2, { disablePadding: true, sx, children: visible.map((tag) => /* @__PURE__ */ jsxs(
3017
+ return /* @__PURE__ */ jsx(List, { disablePadding: true, sx, children: visible.map((tag) => /* @__PURE__ */ jsxs(
2771
3018
  ListItemButton,
2772
3019
  {
2773
3020
  onClick: onTagClick ? () => onTagClick(tag) : void 0,
@@ -2782,10 +3029,10 @@ function TagCloud({
2782
3029
  /* @__PURE__ */ jsx(
2783
3030
  ListItemText,
2784
3031
  {
2785
- primary: /* @__PURE__ */ jsxs(Box20, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
3032
+ primary: /* @__PURE__ */ jsxs(Box19, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
2786
3033
  /* @__PURE__ */ jsx("span", { children: `#${tag.name}` }),
2787
3034
  tag.trending && /* @__PURE__ */ jsx(
2788
- Box20,
3035
+ Box19,
2789
3036
  {
2790
3037
  component: "span",
2791
3038
  sx: {
@@ -2851,7 +3098,7 @@ function TagCloud({
2851
3098
  return /* @__PURE__ */ jsx(
2852
3099
  Chip,
2853
3100
  {
2854
- label: /* @__PURE__ */ jsxs(Box20, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
3101
+ label: /* @__PURE__ */ jsxs(Box19, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
2855
3102
  /* @__PURE__ */ jsx("span", { children: `#${tag.name}` }),
2856
3103
  renderAdornment?.(tag)
2857
3104
  ] }),
@@ -2880,84 +3127,6 @@ function TagCloud({
2880
3127
  }
2881
3128
  );
2882
3129
  }
2883
- var ScrollbarRoot = styled(Box20, {
2884
- shouldForwardProp: (prop) => prop !== "ownerState"
2885
- })(({ theme, ownerState }) => {
2886
- const { fillContent, hideScrollbar, axis } = ownerState;
2887
- const scrollbarColor = alpha(theme.palette.text.disabled, 0.4);
2888
- const scrollbarHoverColor = alpha(theme.palette.text.disabled, 0.6);
2889
- const scrollbarTrackColor = alpha(theme.palette.grey[500], 0.08);
2890
- const getOverflow = () => {
2891
- if (axis === "x") return { overflowX: "auto", overflowY: "hidden" };
2892
- if (axis === "y") return { overflowX: "hidden", overflowY: "auto" };
2893
- return { overflow: "auto" };
2894
- };
2895
- return {
2896
- minWidth: 0,
2897
- minHeight: 0,
2898
- ...getOverflow(),
2899
- ...fillContent && {
2900
- flexGrow: 1,
2901
- display: "flex",
2902
- flexDirection: "column"
2903
- },
2904
- // Custom scrollbar styles
2905
- ...!hideScrollbar && {
2906
- scrollbarWidth: "thin",
2907
- scrollbarColor: `${scrollbarColor} ${scrollbarTrackColor}`,
2908
- // Webkit browsers
2909
- "&::-webkit-scrollbar": {
2910
- width: 8,
2911
- height: 8
2912
- },
2913
- "&::-webkit-scrollbar-track": {
2914
- backgroundColor: scrollbarTrackColor,
2915
- borderRadius: 4
2916
- },
2917
- "&::-webkit-scrollbar-thumb": {
2918
- backgroundColor: scrollbarColor,
2919
- borderRadius: 4,
2920
- "&:hover": {
2921
- backgroundColor: scrollbarHoverColor
2922
- }
2923
- },
2924
- "&::-webkit-scrollbar-corner": {
2925
- backgroundColor: "transparent"
2926
- }
2927
- },
2928
- ...hideScrollbar && {
2929
- scrollbarWidth: "none",
2930
- msOverflowStyle: "none",
2931
- "&::-webkit-scrollbar": {
2932
- display: "none"
2933
- }
2934
- }
2935
- };
2936
- });
2937
- var Scrollbar = forwardRef(function Scrollbar2({ children, sx, fillContent = false, hideScrollbar = false, axis = "y", maxHeight, minHeight, className, ...other }, ref) {
2938
- const ownerState = {
2939
- fillContent,
2940
- hideScrollbar,
2941
- axis
2942
- };
2943
- return /* @__PURE__ */ jsx(
2944
- ScrollbarRoot,
2945
- {
2946
- ref,
2947
- ownerState,
2948
- className,
2949
- sx: [
2950
- {
2951
- ...maxHeight !== void 0 && { maxHeight },
2952
- ...minHeight !== void 0 && { minHeight }
2953
- },
2954
- ...Array.isArray(sx) ? sx : [sx]
2955
- ],
2956
- ...other,
2957
- children
2958
- }
2959
- );
2960
- });
2961
3130
  var SnackbarContext = createContext(null);
2962
3131
  function useSnackbar() {
2963
3132
  const context = useContext(SnackbarContext);
@@ -3061,7 +3230,7 @@ function SnackbarProvider({
3061
3230
  severity: state.severity,
3062
3231
  variant: "filled",
3063
3232
  onClose: handleClose,
3064
- action: state.action || /* @__PURE__ */ jsx(IconButton3, { size: "small", "aria-label": "close", color: "inherit", onClick: close, children: /* @__PURE__ */ jsx(CloseIcon3, { fontSize: "small" }) }),
3233
+ action: state.action || /* @__PURE__ */ jsx(IconButton4, { size: "small", "aria-label": "close", color: "inherit", onClick: close, children: /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" }) }),
3065
3234
  sx: { width: "100%", alignItems: "center" },
3066
3235
  children: state.message
3067
3236
  }
@@ -3091,7 +3260,7 @@ var SvgRoot = styled("span")(() => ({
3091
3260
  display: "inline-flex",
3092
3261
  backgroundColor: "currentColor"
3093
3262
  }));
3094
- var SvgColor = forwardRef(function SvgColor2({ src, color, size = 24, width, height, className, sx }, ref) {
3263
+ function SvgColor({ src, color, size = 24, width, height, className, sx, ref }) {
3095
3264
  const computedWidth = width ?? size;
3096
3265
  const computedHeight = height ?? size;
3097
3266
  return /* @__PURE__ */ jsx(
@@ -3111,7 +3280,7 @@ var SvgColor = forwardRef(function SvgColor2({ src, color, size = 24, width, hei
3111
3280
  ]
3112
3281
  }
3113
3282
  );
3114
- });
3283
+ }
3115
3284
  function createIconComponent(basePath) {
3116
3285
  function Icon({ name, ...props }) {
3117
3286
  return /* @__PURE__ */ jsx(SvgColor, { src: `${basePath}/${name}.svg`, ...props });
@@ -3141,7 +3310,7 @@ var StyledTableRow2 = styled(TableRow)(({ theme }) => ({
3141
3310
  }
3142
3311
  }
3143
3312
  }));
3144
- function TableInner({
3313
+ function Table({
3145
3314
  columns,
3146
3315
  data,
3147
3316
  rowKey = "id",
@@ -3161,14 +3330,16 @@ function TableInner({
3161
3330
  rowsPerPageOptions = [5, 10, 25, 50],
3162
3331
  emptyContent,
3163
3332
  loading = false,
3333
+ loadingRows = 5,
3164
3334
  dense = false,
3165
3335
  stickyHeader = false,
3166
3336
  maxHeight,
3167
3337
  onRowClick,
3168
3338
  containerSx,
3169
3339
  sx,
3340
+ ref,
3170
3341
  ...other
3171
- }, ref) {
3342
+ }) {
3172
3343
  const getRowKey = useCallback(
3173
3344
  (row, index) => {
3174
3345
  if (typeof rowKey === "function") {
@@ -3233,7 +3404,7 @@ function TableInner({
3233
3404
  return data;
3234
3405
  }, [data, paginated, page, rowsPerPage, totalRows]);
3235
3406
  if (!loading && data.length === 0) {
3236
- return /* @__PURE__ */ jsx(StyledTableContainer2, { sx: containerSx, children: /* @__PURE__ */ jsx(Box20, { sx: { p: 4, textAlign: "center" }, children: emptyContent || /* @__PURE__ */ jsx(Typography5, { sx: {
3407
+ return /* @__PURE__ */ jsx(StyledTableContainer2, { sx: containerSx, children: /* @__PURE__ */ jsx(Box19, { sx: { p: 4, textAlign: "center" }, children: emptyContent || /* @__PURE__ */ jsx(Typography5, { sx: {
3237
3408
  color: "text.secondary"
3238
3409
  }, children: "No data available" }) }) });
3239
3410
  }
@@ -3267,34 +3438,40 @@ function TableInner({
3267
3438
  String(column.id)
3268
3439
  ))
3269
3440
  ] }) }),
3270
- /* @__PURE__ */ jsx(TableBody, { children: displayData.map((row, index) => {
3271
- const key = getRowKey(row, index);
3272
- const isSelected = selected.includes(key);
3273
- return /* @__PURE__ */ jsxs(
3274
- StyledTableRow2,
3275
- {
3276
- hover: true,
3277
- selected: isSelected,
3278
- onClick: () => onRowClick?.(row, index),
3279
- sx: { cursor: onRowClick ? "pointer" : "default" },
3280
- children: [
3281
- selectable && /* @__PURE__ */ jsx(TableCell, { padding: "checkbox", children: /* @__PURE__ */ jsx(
3282
- Checkbox,
3283
- {
3284
- checked: isSelected,
3285
- onClick: (e) => e.stopPropagation(),
3286
- onChange: () => handleSelectRow(key)
3287
- }
3288
- ) }),
3289
- columns.map((column) => {
3290
- const value = row[column.id];
3291
- return /* @__PURE__ */ jsx(TableCell, { align: column.align || "left", children: column.render ? column.render(row, index) : column.format ? column.format(value) : String(value ?? "") }, String(column.id));
3292
- })
3293
- ]
3294
- },
3295
- key
3296
- );
3297
- }) })
3441
+ /* @__PURE__ */ jsxs(TableBody, { children: [
3442
+ loading && Array.from({ length: Math.max(1, loadingRows) }, (_, rowIndex) => /* @__PURE__ */ jsxs(TableRow, { children: [
3443
+ selectable && /* @__PURE__ */ jsx(TableCell, { padding: "checkbox", children: /* @__PURE__ */ jsx(Skeleton3, { variant: "rectangular", width: 18, height: 18 }) }),
3444
+ columns.map((column) => /* @__PURE__ */ jsx(TableCell, { align: column.align || "left", children: /* @__PURE__ */ jsx(Skeleton3, { variant: "text", width: column.width ?? "80%" }) }, String(column.id)))
3445
+ ] }, `loading-${rowIndex}`)),
3446
+ !loading && displayData.map((row, index) => {
3447
+ const key = getRowKey(row, index);
3448
+ const isSelected = selected.includes(key);
3449
+ return /* @__PURE__ */ jsxs(
3450
+ StyledTableRow2,
3451
+ {
3452
+ hover: true,
3453
+ selected: isSelected,
3454
+ onClick: () => onRowClick?.(row, index),
3455
+ sx: { cursor: onRowClick ? "pointer" : "default" },
3456
+ children: [
3457
+ selectable && /* @__PURE__ */ jsx(TableCell, { padding: "checkbox", children: /* @__PURE__ */ jsx(
3458
+ Checkbox,
3459
+ {
3460
+ checked: isSelected,
3461
+ onClick: (e) => e.stopPropagation(),
3462
+ onChange: () => handleSelectRow(key)
3463
+ }
3464
+ ) }),
3465
+ columns.map((column) => {
3466
+ const value = row[column.id];
3467
+ return /* @__PURE__ */ jsx(TableCell, { align: column.align || "left", children: column.render ? column.render(row, index) : column.format ? column.format(value) : String(value ?? "") }, String(column.id));
3468
+ })
3469
+ ]
3470
+ },
3471
+ key
3472
+ );
3473
+ })
3474
+ ] })
3298
3475
  ] }),
3299
3476
  paginated && /* @__PURE__ */ jsx(
3300
3477
  TablePagination,
@@ -3312,7 +3489,6 @@ function TableInner({
3312
3489
  }
3313
3490
  );
3314
3491
  }
3315
- var Table = forwardRef(TableInner);
3316
3492
  function useTable({
3317
3493
  data,
3318
3494
  defaultPage = 0,
@@ -3367,26 +3543,26 @@ function useTable({
3367
3543
  reset
3368
3544
  };
3369
3545
  }
3370
- function Skeleton3({ variant = "text", ...props }) {
3371
- return /* @__PURE__ */ jsx(Skeleton, { variant, ...props });
3546
+ function Skeleton5({ variant = "text", ...props }) {
3547
+ return /* @__PURE__ */ jsx(Skeleton3, { variant, ...props });
3372
3548
  }
3373
3549
  function CardSkeleton({ hasAvatar = true, lines = 2, width = "100%" }) {
3374
- return /* @__PURE__ */ jsxs(Box20, { sx: { width, p: 2 }, children: [
3375
- hasAvatar && /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", mb: 2 }, children: [
3376
- /* @__PURE__ */ jsx(Skeleton3, { variant: "circular", width: 40, height: 40 }),
3377
- /* @__PURE__ */ jsxs(Box20, { sx: { ml: 1, flex: 1 }, children: [
3378
- /* @__PURE__ */ jsx(Skeleton3, { variant: "text", width: "60%" }),
3379
- /* @__PURE__ */ jsx(Skeleton3, { variant: "text", width: "40%" })
3550
+ return /* @__PURE__ */ jsxs(Box19, { sx: { width, p: 2 }, children: [
3551
+ hasAvatar && /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", mb: 2 }, children: [
3552
+ /* @__PURE__ */ jsx(Skeleton5, { variant: "circular", width: 40, height: 40 }),
3553
+ /* @__PURE__ */ jsxs(Box19, { sx: { ml: 1, flex: 1 }, children: [
3554
+ /* @__PURE__ */ jsx(Skeleton5, { variant: "text", width: "60%" }),
3555
+ /* @__PURE__ */ jsx(Skeleton5, { variant: "text", width: "40%" })
3380
3556
  ] })
3381
3557
  ] }),
3382
- /* @__PURE__ */ jsx(Skeleton3, { variant: "rectangular", width: "100%", height: 118, sx: { borderRadius: 1 } }),
3383
- /* @__PURE__ */ jsx(Box20, { sx: { mt: 1 }, children: Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx(Skeleton3, { variant: "text", width: i === lines - 1 ? "80%" : "100%" }, i)) })
3558
+ /* @__PURE__ */ jsx(Skeleton5, { variant: "rectangular", width: "100%", height: 118, sx: { borderRadius: 1 } }),
3559
+ /* @__PURE__ */ jsx(Box19, { sx: { mt: 1 }, children: Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx(Skeleton5, { variant: "text", width: i === lines - 1 ? "80%" : "100%" }, i)) })
3384
3560
  ] });
3385
3561
  }
3386
3562
  function TableSkeleton({ rows = 5, columns = 4, hasHeader = true }) {
3387
- return /* @__PURE__ */ jsxs(Box20, { sx: { width: "100%" }, children: [
3388
- hasHeader && /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", gap: 2, mb: 1, pb: 1, borderBottom: 1, borderColor: "divider" }, children: Array.from({ length: columns }, (_, i) => /* @__PURE__ */ jsx(Skeleton3, { variant: "text", sx: { flex: 1 }, height: 24 }, i)) }),
3389
- Array.from({ length: rows }, (_row, rowIndex) => /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", gap: 2, py: 1 }, children: Array.from({ length: columns }, (_col, colIndex) => /* @__PURE__ */ jsx(Skeleton3, { variant: "text", sx: { flex: 1 } }, colIndex)) }, rowIndex))
3563
+ return /* @__PURE__ */ jsxs(Box19, { sx: { width: "100%" }, children: [
3564
+ hasHeader && /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", gap: 2, mb: 1, pb: 1, borderBottom: 1, borderColor: "divider" }, children: Array.from({ length: columns }, (_, i) => /* @__PURE__ */ jsx(Skeleton5, { variant: "text", sx: { flex: 1 }, height: 24 }, i)) }),
3565
+ Array.from({ length: rows }, (_row, rowIndex) => /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", gap: 2, py: 1 }, children: Array.from({ length: columns }, (_col, colIndex) => /* @__PURE__ */ jsx(Skeleton5, { variant: "text", sx: { flex: 1 } }, colIndex)) }, rowIndex))
3390
3566
  ] });
3391
3567
  }
3392
3568
  function LinearProgress3({
@@ -3404,7 +3580,7 @@ function LinearProgress3({
3404
3580
  return /* @__PURE__ */ jsx(MuiLinearProgress, { variant, value, color, sx: { borderRadius: 1, ...sx }, ...props });
3405
3581
  }
3406
3582
  if (labelPosition === "below") {
3407
- return /* @__PURE__ */ jsxs(Box20, { sx: { width: "100%" }, children: [
3583
+ return /* @__PURE__ */ jsxs(Box19, { sx: { width: "100%" }, children: [
3408
3584
  /* @__PURE__ */ jsx(MuiLinearProgress, { variant, value, color, sx: { borderRadius: 1, ...sx }, ...props }),
3409
3585
  /* @__PURE__ */ jsx(
3410
3586
  Typography5,
@@ -3421,8 +3597,8 @@ function LinearProgress3({
3421
3597
  )
3422
3598
  ] });
3423
3599
  }
3424
- return /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
3425
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1 }, children: /* @__PURE__ */ jsx(MuiLinearProgress, { variant, value, color, sx: { borderRadius: 1, ...sx }, ...props }) }),
3600
+ return /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
3601
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1 }, children: /* @__PURE__ */ jsx(MuiLinearProgress, { variant, value, color, sx: { borderRadius: 1, ...sx }, ...props }) }),
3426
3602
  /* @__PURE__ */ jsx(
3427
3603
  Typography5,
3428
3604
  {
@@ -3449,10 +3625,10 @@ function CircularProgress2({
3449
3625
  return /* @__PURE__ */ jsx(CircularProgress, { variant, value, color, size, ...props });
3450
3626
  }
3451
3627
  const label = formatLabel2 ? formatLabel2(value ?? 0) : `${Math.round(value ?? 0)}%`;
3452
- return /* @__PURE__ */ jsxs(Box20, { sx: { position: "relative", display: "inline-flex" }, children: [
3628
+ return /* @__PURE__ */ jsxs(Box19, { sx: { position: "relative", display: "inline-flex" }, children: [
3453
3629
  /* @__PURE__ */ jsx(CircularProgress, { variant, value, color, size, ...props }),
3454
3630
  /* @__PURE__ */ jsx(
3455
- Box20,
3631
+ Box19,
3456
3632
  {
3457
3633
  sx: {
3458
3634
  position: "absolute",
@@ -3489,9 +3665,9 @@ function ProgressBar({ segments, height = 8, showLabels = false }) {
3489
3665
  info: "info.main",
3490
3666
  inherit: "text.primary"
3491
3667
  };
3492
- return /* @__PURE__ */ jsxs(Box20, { sx: { width: "100%" }, children: [
3668
+ return /* @__PURE__ */ jsxs(Box19, { sx: { width: "100%" }, children: [
3493
3669
  /* @__PURE__ */ jsx(
3494
- Box20,
3670
+ Box19,
3495
3671
  {
3496
3672
  sx: {
3497
3673
  display: "flex",
@@ -3501,7 +3677,7 @@ function ProgressBar({ segments, height = 8, showLabels = false }) {
3501
3677
  bgcolor: "action.hover"
3502
3678
  },
3503
3679
  children: segments.map((segment, index) => /* @__PURE__ */ jsx(
3504
- Box20,
3680
+ Box19,
3505
3681
  {
3506
3682
  sx: {
3507
3683
  width: `${segment.value}%`,
@@ -3513,9 +3689,9 @@ function ProgressBar({ segments, height = 8, showLabels = false }) {
3513
3689
  ))
3514
3690
  }
3515
3691
  ),
3516
- showLabels && /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", gap: 2, mt: 1 }, children: segments.map((segment, index) => /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
3692
+ showLabels && /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", gap: 2, mt: 1 }, children: segments.map((segment, index) => /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
3517
3693
  /* @__PURE__ */ jsx(
3518
- Box20,
3694
+ Box19,
3519
3695
  {
3520
3696
  sx: {
3521
3697
  width: 8,
@@ -3615,7 +3791,7 @@ function VirtualList({
3615
3791
  }
3616
3792
  }, [lastItem, virtualizer, items.length, loadMoreThreshold, onEndReached]);
3617
3793
  return /* @__PURE__ */ jsx(
3618
- Box20,
3794
+ Box19,
3619
3795
  {
3620
3796
  ref: parentRef,
3621
3797
  sx: {
@@ -3626,7 +3802,7 @@ function VirtualList({
3626
3802
  ...sx
3627
3803
  },
3628
3804
  children: /* @__PURE__ */ jsx(
3629
- Box20,
3805
+ Box19,
3630
3806
  {
3631
3807
  sx: {
3632
3808
  height: virtualizer.getTotalSize() + paddingY * 2,
@@ -3637,7 +3813,7 @@ function VirtualList({
3637
3813
  const item = items[virtualRow.index];
3638
3814
  if (item === void 0) return null;
3639
3815
  return /* @__PURE__ */ jsx(
3640
- Box20,
3816
+ Box19,
3641
3817
  {
3642
3818
  "data-index": virtualRow.index,
3643
3819
  ref: virtualizer.measureElement,
@@ -3748,7 +3924,7 @@ function CommandPalette({
3748
3924
  }
3749
3925
  },
3750
3926
  children: /* @__PURE__ */ jsxs(DialogContent, { sx: { p: 0 }, children: [
3751
- /* @__PURE__ */ jsx(Box20, { sx: { p: 2, pb: 1 }, children: /* @__PURE__ */ jsx(
3927
+ /* @__PURE__ */ jsx(Box19, { sx: { p: 2, pb: 1 }, children: /* @__PURE__ */ jsx(
3752
3928
  TextField2,
3753
3929
  {
3754
3930
  inputRef,
@@ -3764,23 +3940,23 @@ function CommandPalette({
3764
3940
  slotProps: {
3765
3941
  input: {
3766
3942
  disableUnderline: true,
3767
- startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", sx: { ml: 0.5, mr: 1 }, children: /* @__PURE__ */ jsx(Box20, { component: "span", sx: { fontSize: 18, opacity: 0.6 }, children: "\u2318" }) })
3943
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", sx: { ml: 0.5, mr: 1 }, children: /* @__PURE__ */ jsx(Box19, { component: "span", sx: { fontSize: 18, opacity: 0.6 }, children: "\u2318" }) })
3768
3944
  }
3769
3945
  }
3770
3946
  }
3771
3947
  ) }),
3772
3948
  /* @__PURE__ */ jsx(Divider3, {}),
3773
3949
  /* @__PURE__ */ jsx(
3774
- Box20,
3950
+ Box19,
3775
3951
  {
3776
3952
  sx: {
3777
3953
  maxHeight: 360,
3778
3954
  overflowY: "auto",
3779
3955
  py: 0.5
3780
3956
  },
3781
- children: filtered.length === 0 ? /* @__PURE__ */ jsx(Box20, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: {
3957
+ children: filtered.length === 0 ? /* @__PURE__ */ jsx(Box19, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: {
3782
3958
  color: "text.secondary"
3783
- }, children: emptyMessage }) }) : grouped.map((g) => /* @__PURE__ */ jsxs(Box20, { children: [
3959
+ }, children: emptyMessage }) }) : grouped.map((g) => /* @__PURE__ */ jsxs(Box19, { children: [
3784
3960
  g.label ? /* @__PURE__ */ jsx(
3785
3961
  Typography5,
3786
3962
  {
@@ -3826,7 +4002,7 @@ function Row({
3826
4002
  }
3827
4003
  }, [selected]);
3828
4004
  return /* @__PURE__ */ jsxs(
3829
- Box20,
4005
+ Box19,
3830
4006
  {
3831
4007
  ref,
3832
4008
  onMouseEnter: onHover,
@@ -3845,8 +4021,8 @@ function Row({
3845
4021
  }
3846
4022
  }),
3847
4023
  children: [
3848
- action.icon ? /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", alignItems: "center", width: 20, opacity: 0.8 }, children: action.icon }) : null,
3849
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, sx: {
4024
+ action.icon ? /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", alignItems: "center", width: 20, opacity: 0.8 }, children: action.icon }) : null,
4025
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, sx: {
3850
4026
  alignItems: "baseline"
3851
4027
  }, children: [
3852
4028
  /* @__PURE__ */ jsx(Typography5, { variant: "body2", sx: { fontWeight: 500 }, noWrap: true, children: action.title }),
@@ -3945,9 +4121,9 @@ function Tabs({
3945
4121
  return items;
3946
4122
  }, [tabs, children]);
3947
4123
  const hasAction = action !== void 0 && action !== null && action !== false;
3948
- return /* @__PURE__ */ jsxs(Box20, { sx: { width: "100%" }, children: [
4124
+ return /* @__PURE__ */ jsxs(Box19, { sx: { width: "100%" }, children: [
3949
4125
  /* @__PURE__ */ jsxs(
3950
- Box20,
4126
+ Box19,
3951
4127
  {
3952
4128
  sx: {
3953
4129
  display: "flex",
@@ -3968,7 +4144,7 @@ function Tabs({
3968
4144
  tab.value
3969
4145
  )) }),
3970
4146
  hasAction && /* @__PURE__ */ jsx(
3971
- Box20,
4147
+ Box19,
3972
4148
  {
3973
4149
  sx: {
3974
4150
  display: "flex",
@@ -3987,7 +4163,7 @@ function Tabs({
3987
4163
  if (!isActive && !keepMounted) return null;
3988
4164
  if (tab.content === void 0) return null;
3989
4165
  return /* @__PURE__ */ jsx(
3990
- Box20,
4166
+ Box19,
3991
4167
  {
3992
4168
  role: "tabpanel",
3993
4169
  hidden: !isActive,
@@ -4060,7 +4236,6 @@ function Accordion({
4060
4236
  return {
4061
4237
  border: 1,
4062
4238
  borderColor: "divider",
4063
- "&:not(:last-child)": { borderBottom: 0 },
4064
4239
  "&::before": { display: "none" },
4065
4240
  boxShadow: "none"
4066
4241
  };
@@ -4086,7 +4261,7 @@ function Accordion({
4086
4261
  /* @__PURE__ */ jsxs(
4087
4262
  MuiAccordionSummary,
4088
4263
  {
4089
- expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}),
4264
+ expandIcon: /* @__PURE__ */ jsx(ChevronDownIcon, {}),
4090
4265
  "aria-controls": `${item.id}-content`,
4091
4266
  id: `${item.id}-header`,
4092
4267
  children: [
@@ -4114,7 +4289,7 @@ function Accordion({
4114
4289
  }
4115
4290
  function SimpleAccordion({ title, subtitle, children, icon, ...props }) {
4116
4291
  return /* @__PURE__ */ jsxs(MuiAccordion, { ...props, children: [
4117
- /* @__PURE__ */ jsxs(MuiAccordionSummary, { expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}), children: [
4292
+ /* @__PURE__ */ jsxs(MuiAccordionSummary, { expandIcon: /* @__PURE__ */ jsx(ChevronDownIcon, {}), children: [
4118
4293
  icon && /* @__PURE__ */ jsx(Typography5, { component: "span", sx: { mr: 1, display: "flex", alignItems: "center" }, children: icon }),
4119
4294
  /* @__PURE__ */ jsx(Typography5, { component: "span", sx: { fontWeight: 500 }, children: title }),
4120
4295
  subtitle && /* @__PURE__ */ jsx(
@@ -4455,281 +4630,6 @@ function ScrollToTop({ pathname }) {
4455
4630
  }, [pathname]);
4456
4631
  return null;
4457
4632
  }
4458
- function parseStackFrame(line) {
4459
- const patterns = [
4460
- // Named function with file: at functionName (file:line:col)
4461
- /at\s+(?:async\s+)?([^\s(]+)\s+\((.+?):(\d+):(\d+)\)/,
4462
- // Anonymous at file: at file:line:col
4463
- /at\s+(.+?):(\d+):(\d+)/,
4464
- // Webpack/Vite transformed: at Module.functionName (file?xxx:line:col)
4465
- /at\s+(?:async\s+)?(?:Module\.)?([^\s(]+)\s+\((.+?)\?[^:]*:(\d+):(\d+)\)/
4466
- ];
4467
- for (const pattern of patterns) {
4468
- const match = line.match(pattern);
4469
- if (match) {
4470
- const [, funcOrFile, file, lineStr, colStr] = match;
4471
- const hasFile = file !== void 0;
4472
- const functionName = hasFile ? funcOrFile : null;
4473
- const filePath = hasFile ? file : funcOrFile;
4474
- const lineNumber = parseInt(hasFile ? lineStr : file, 10);
4475
- const columnNumber = parseInt(hasFile ? colStr : lineStr, 10);
4476
- const isAppCode = filePath.includes("/src/") || filePath.includes("src/") && !filePath.includes("node_modules");
4477
- return {
4478
- functionName: functionName || null,
4479
- filePath: cleanFilePath(filePath),
4480
- lineNumber: isNaN(lineNumber) ? null : lineNumber,
4481
- columnNumber: isNaN(columnNumber) ? null : columnNumber,
4482
- isAppCode
4483
- };
4484
- }
4485
- }
4486
- return null;
4487
- }
4488
- function cleanFilePath(path) {
4489
- const cleaned = path.replace(/\?.*$/, "");
4490
- const srcIndex = cleaned.indexOf("/src/");
4491
- if (srcIndex !== -1) {
4492
- return cleaned.slice(srcIndex + 1);
4493
- }
4494
- const parts = cleaned.split("/");
4495
- if (parts.length > 3) {
4496
- return parts.slice(-3).join("/");
4497
- }
4498
- return cleaned;
4499
- }
4500
- function parseStackTrace(stack) {
4501
- if (!stack) {
4502
- return { primary: null, frames: [], raw: "" };
4503
- }
4504
- const lines = stack.split("\n");
4505
- const frames = [];
4506
- for (const line of lines) {
4507
- const frame = parseStackFrame(line.trim());
4508
- if (frame) {
4509
- frames.push(frame);
4510
- }
4511
- }
4512
- const primary = frames.find((f) => f.isAppCode) ?? frames[0] ?? null;
4513
- return { primary, frames, raw: stack };
4514
- }
4515
- function getErrorLocation(error) {
4516
- const parsed = parseStackTrace(error.stack);
4517
- const { primary } = parsed;
4518
- if (!primary) {
4519
- return "Unknown location";
4520
- }
4521
- const parts = [];
4522
- if (primary.functionName) {
4523
- parts.push(`in ${primary.functionName}`);
4524
- }
4525
- if (primary.filePath) {
4526
- const location = primary.lineNumber ? `${primary.filePath}:${primary.lineNumber}` : primary.filePath;
4527
- parts.push(`(${location})`);
4528
- }
4529
- return parts.join(" ") || "Unknown location";
4530
- }
4531
- function DefaultErrorFallback({
4532
- error,
4533
- parsedStack,
4534
- resetErrorBoundary,
4535
- sx,
4536
- showDetails
4537
- }) {
4538
- const [expanded, setExpanded] = useState(false);
4539
- const [copied, setCopied] = useState(false);
4540
- const shouldShowDetails = showDetails ?? (typeof process !== "undefined" && process.env.NODE_ENV === "development");
4541
- const handleCopyStack = async () => {
4542
- try {
4543
- const text = [
4544
- `Error: ${error.message}`,
4545
- `Location: ${getErrorLocation(error)}`,
4546
- "",
4547
- "Stack Trace:",
4548
- parsedStack.raw
4549
- ].join("\n");
4550
- await navigator.clipboard.writeText(text);
4551
- setCopied(true);
4552
- setTimeout(() => setCopied(false), 2e3);
4553
- } catch {
4554
- }
4555
- };
4556
- return /* @__PURE__ */ jsxs(
4557
- Box20,
4558
- {
4559
- sx: {
4560
- display: "flex",
4561
- flexDirection: "column",
4562
- alignItems: "center",
4563
- justifyContent: "center",
4564
- minHeight: 200,
4565
- p: 3,
4566
- textAlign: "center",
4567
- ...sx
4568
- },
4569
- children: [
4570
- /* @__PURE__ */ jsx(Typography5, { variant: "h6", color: "error", gutterBottom: true, children: "Something went wrong" }),
4571
- /* @__PURE__ */ jsx(
4572
- Typography5,
4573
- {
4574
- variant: "body2",
4575
- sx: {
4576
- color: "text.secondary",
4577
- mb: 1,
4578
- maxWidth: 400
4579
- },
4580
- children: error.message || "An unexpected error occurred"
4581
- }
4582
- ),
4583
- shouldShowDetails && parsedStack.primary && /* @__PURE__ */ jsxs(
4584
- Typography5,
4585
- {
4586
- variant: "caption",
4587
- sx: {
4588
- color: "text.secondary",
4589
- mb: 2,
4590
- fontFamily: "monospace"
4591
- },
4592
- children: [
4593
- parsedStack.primary.filePath,
4594
- parsedStack.primary.lineNumber && `:${parsedStack.primary.lineNumber}`,
4595
- parsedStack.primary.functionName && ` (${parsedStack.primary.functionName})`
4596
- ]
4597
- }
4598
- ),
4599
- /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", gap: 1, mb: 2 }, children: [
4600
- /* @__PURE__ */ jsx(Button, { variant: "outlined", onClick: resetErrorBoundary, children: "Try Again" }),
4601
- shouldShowDetails && /* @__PURE__ */ jsxs(Fragment, { children: [
4602
- /* @__PURE__ */ jsx(
4603
- IconButton3,
4604
- {
4605
- size: "small",
4606
- onClick: () => setExpanded(!expanded),
4607
- sx: {
4608
- transform: expanded ? "rotate(180deg)" : "rotate(0deg)",
4609
- transition: "transform 0.2s"
4610
- },
4611
- children: /* @__PURE__ */ jsx(ExpandMoreIcon, {})
4612
- }
4613
- ),
4614
- /* @__PURE__ */ jsx(IconButton3, { size: "small", onClick: handleCopyStack, title: "Copy error details", children: /* @__PURE__ */ jsx(ContentCopyIcon, { fontSize: "small" }) }),
4615
- copied && /* @__PURE__ */ jsx(
4616
- Typography5,
4617
- {
4618
- variant: "caption",
4619
- sx: {
4620
- color: "success.main",
4621
- alignSelf: "center"
4622
- },
4623
- children: "Copied!"
4624
- }
4625
- )
4626
- ] })
4627
- ] }),
4628
- shouldShowDetails && /* @__PURE__ */ jsx(Collapse, { in: expanded, children: /* @__PURE__ */ jsx(
4629
- Box20,
4630
- {
4631
- sx: {
4632
- mt: 1,
4633
- p: 2,
4634
- bgcolor: "grey.100",
4635
- borderRadius: 1,
4636
- maxWidth: 600,
4637
- maxHeight: 300,
4638
- overflow: "auto",
4639
- textAlign: "left"
4640
- },
4641
- children: /* @__PURE__ */ jsx(Typography5, { variant: "caption", component: "pre", sx: { fontFamily: "monospace", m: 0 }, children: parsedStack.frames.map((frame, i) => /* @__PURE__ */ jsxs(
4642
- Box20,
4643
- {
4644
- component: "span",
4645
- sx: {
4646
- display: "block",
4647
- color: frame.isAppCode ? "error.main" : "text.secondary",
4648
- fontWeight: frame.isAppCode ? 600 : 400
4649
- },
4650
- children: [
4651
- frame.functionName || "(anonymous)",
4652
- " at ",
4653
- frame.filePath || "unknown",
4654
- frame.lineNumber && `:${frame.lineNumber}`
4655
- ]
4656
- },
4657
- i
4658
- )) })
4659
- }
4660
- ) })
4661
- ]
4662
- }
4663
- );
4664
- }
4665
- var ErrorBoundary = class extends Component {
4666
- constructor(props) {
4667
- super(props);
4668
- this.state = {
4669
- hasError: false,
4670
- error: null,
4671
- errorInfo: null
4672
- };
4673
- }
4674
- static getDerivedStateFromError(error) {
4675
- return {
4676
- hasError: true,
4677
- error
4678
- };
4679
- }
4680
- componentDidCatch(error, errorInfo) {
4681
- const parsedStack = parseStackTrace(error.stack);
4682
- this.setState({ errorInfo });
4683
- this.props.onError?.(error, errorInfo, parsedStack);
4684
- }
4685
- componentDidUpdate(prevProps) {
4686
- const { resetKeys } = this.props;
4687
- const { hasError } = this.state;
4688
- if (hasError && resetKeys && prevProps.resetKeys) {
4689
- const hasKeyChanged = resetKeys.some((key, index) => key !== prevProps.resetKeys?.[index]);
4690
- if (hasKeyChanged) {
4691
- this.resetErrorBoundary();
4692
- }
4693
- }
4694
- }
4695
- resetErrorBoundary = () => {
4696
- this.props.onReset?.();
4697
- this.setState({
4698
- hasError: false,
4699
- error: null,
4700
- errorInfo: null
4701
- });
4702
- };
4703
- render() {
4704
- const { hasError, error, errorInfo } = this.state;
4705
- const { children, fallback, sx, showDetails } = this.props;
4706
- if (hasError && error) {
4707
- const parsedStack = parseStackTrace(error.stack);
4708
- const fallbackProps = {
4709
- error,
4710
- errorInfo,
4711
- parsedStack,
4712
- resetErrorBoundary: this.resetErrorBoundary
4713
- };
4714
- if (typeof fallback === "function") {
4715
- return fallback(fallbackProps);
4716
- }
4717
- if (fallback) {
4718
- return fallback;
4719
- }
4720
- return /* @__PURE__ */ jsx(DefaultErrorFallback, { ...fallbackProps, sx, showDetails });
4721
- }
4722
- return children;
4723
- }
4724
- };
4725
- function useErrorBoundary() {
4726
- const [, setError] = useState(null);
4727
- return (error) => {
4728
- setError(() => {
4729
- throw error;
4730
- });
4731
- };
4732
- }
4733
4633
  var SettingsContext = createContext(null);
4734
4634
  function SettingsProvider({ children, defaultOpen = false }) {
4735
4635
  const [open, setOpen] = useState(defaultOpen);
@@ -4846,7 +4746,7 @@ var PRESET_COLORS = {
4846
4746
  minimal: "#64748B"
4847
4747
  };
4848
4748
  function Section({ title, children }) {
4849
- return /* @__PURE__ */ jsxs(Box20, { sx: { mb: 3 }, children: [
4749
+ return /* @__PURE__ */ jsxs(Box19, { sx: { mb: 3 }, children: [
4850
4750
  /* @__PURE__ */ jsx(
4851
4751
  Typography5,
4852
4752
  {
@@ -4990,7 +4890,7 @@ function PresetsSection() {
4990
4890
  const { settings, actions } = useSettings();
4991
4891
  const theme = useTheme();
4992
4892
  return /* @__PURE__ */ jsx(Section, { title: "Presets", children: /* @__PURE__ */ jsx(
4993
- Box20,
4893
+ Box19,
4994
4894
  {
4995
4895
  sx: {
4996
4896
  display: "grid",
@@ -5000,8 +4900,8 @@ function PresetsSection() {
5000
4900
  children: PRESET_NAMES.map((preset) => {
5001
4901
  const isSelected = settings.preset === preset;
5002
4902
  const color = PRESET_COLORS[preset] || "#666";
5003
- return /* @__PURE__ */ jsx(Tooltip, { title: PRESET_DISPLAY_NAMES[preset], placement: "top", children: /* @__PURE__ */ jsx(
5004
- Box20,
4903
+ return /* @__PURE__ */ jsx(Tooltip2, { title: PRESET_DISPLAY_NAMES[preset], placement: "top", children: /* @__PURE__ */ jsx(
4904
+ Box19,
5005
4905
  {
5006
4906
  onClick: () => actions.setPreset(preset),
5007
4907
  sx: {
@@ -5021,7 +4921,7 @@ function PresetsSection() {
5021
4921
  }
5022
4922
  },
5023
4923
  children: isSelected && /* @__PURE__ */ jsx(
5024
- Box20,
4924
+ Box19,
5025
4925
  {
5026
4926
  sx: {
5027
4927
  width: 8,
@@ -5050,11 +4950,11 @@ var COLOR_OPTIONS = [
5050
4950
  function PrimaryColorSection() {
5051
4951
  const { settings, actions } = useSettings();
5052
4952
  const theme = useTheme();
5053
- return /* @__PURE__ */ jsx(Section, { title: "Primary Color", children: /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", gap: 1, flexWrap: "wrap" }, children: [
4953
+ return /* @__PURE__ */ jsx(Section, { title: "Primary Color", children: /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", gap: 1, flexWrap: "wrap" }, children: [
5054
4954
  COLOR_OPTIONS.map((option) => {
5055
4955
  const isSelected = settings.primaryColor === option.value;
5056
- return /* @__PURE__ */ jsx(Tooltip, { title: option.label, placement: "top", children: /* @__PURE__ */ jsx(
5057
- Box20,
4956
+ return /* @__PURE__ */ jsx(Tooltip2, { title: option.label, placement: "top", children: /* @__PURE__ */ jsx(
4957
+ Box19,
5058
4958
  {
5059
4959
  onClick: () => actions.setPrimaryColor(option.value),
5060
4960
  sx: {
@@ -5073,7 +4973,7 @@ function PrimaryColorSection() {
5073
4973
  }
5074
4974
  },
5075
4975
  children: isSelected && /* @__PURE__ */ jsx(
5076
- Box20,
4976
+ Box19,
5077
4977
  {
5078
4978
  sx: {
5079
4979
  width: 6,
@@ -5086,8 +4986,8 @@ function PrimaryColorSection() {
5086
4986
  }
5087
4987
  ) }, option.value);
5088
4988
  }),
5089
- settings.primaryColor && /* @__PURE__ */ jsx(Tooltip, { title: "Reset to default", placement: "top", children: /* @__PURE__ */ jsx(
5090
- Box20,
4989
+ settings.primaryColor && /* @__PURE__ */ jsx(Tooltip2, { title: "Reset to default", placement: "top", children: /* @__PURE__ */ jsx(
4990
+ Box19,
5091
4991
  {
5092
4992
  onClick: () => actions.setPrimaryColor(null),
5093
4993
  sx: {
@@ -5177,10 +5077,10 @@ function NavLayoutSection() {
5177
5077
  { value: "horizontal", label: "Horizontal", icon: "\u25AC" },
5178
5078
  { value: "mini", label: "Mini", icon: "\u2502" }
5179
5079
  ];
5180
- return /* @__PURE__ */ jsx(Section, { title: "Navigation Layout", children: /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", gap: 1.5 }, children: layoutOptions.map((option) => {
5080
+ return /* @__PURE__ */ jsx(Section, { title: "Navigation Layout", children: /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", gap: 1.5 }, children: layoutOptions.map((option) => {
5181
5081
  const isSelected = settings.navLayout === option.value;
5182
5082
  return /* @__PURE__ */ jsxs(
5183
- Box20,
5083
+ Box19,
5184
5084
  {
5185
5085
  onClick: () => actions.setNavLayout(option.value),
5186
5086
  sx: {
@@ -5248,7 +5148,7 @@ function SettingsDrawer({ width = 300, sections = DEFAULT_SECTIONS }) {
5248
5148
  },
5249
5149
  children: [
5250
5150
  /* @__PURE__ */ jsxs(
5251
- Box20,
5151
+ Box19,
5252
5152
  {
5253
5153
  sx: {
5254
5154
  display: "flex",
@@ -5260,22 +5160,22 @@ function SettingsDrawer({ width = 300, sections = DEFAULT_SECTIONS }) {
5260
5160
  children: [
5261
5161
  /* @__PURE__ */ jsx(Typography5, { variant: "h6", sx: { fontWeight: 600 }, children: "Settings" }),
5262
5162
  /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 0.5, children: [
5263
- canReset && /* @__PURE__ */ jsx(Tooltip, { title: "Reset to defaults", children: /* @__PURE__ */ jsx(IconButton3, { size: "small", onClick: actions.reset, "aria-label": "Reset settings to defaults", children: /* @__PURE__ */ jsx(RefreshIcon, {}) }) }),
5264
- /* @__PURE__ */ jsx(IconButton3, { size: "small", onClick: drawer.onClose, "aria-label": "Close settings", children: /* @__PURE__ */ jsx(CloseIcon2, {}) })
5163
+ canReset && /* @__PURE__ */ jsx(Tooltip2, { title: "Reset to defaults", children: /* @__PURE__ */ jsx(IconButton4, { size: "small", onClick: actions.reset, "aria-label": "Reset settings to defaults", children: /* @__PURE__ */ jsx(RefreshIcon, {}) }) }),
5164
+ /* @__PURE__ */ jsx(IconButton4, { size: "small", onClick: drawer.onClose, "aria-label": "Close settings", children: /* @__PURE__ */ jsx(CloseIcon2, {}) })
5265
5165
  ] })
5266
5166
  ]
5267
5167
  }
5268
5168
  ),
5269
- /* @__PURE__ */ jsx(Box20, { sx: { p: 2.5, flex: 1, overflowY: "auto" }, children: sections.map((section) => {
5169
+ /* @__PURE__ */ jsx(Box19, { sx: { p: 2.5, flex: 1, overflowY: "auto" }, children: sections.map((section) => {
5270
5170
  const SectionComponent = SECTION_COMPONENTS[section];
5271
5171
  return SectionComponent ? /* @__PURE__ */ jsx(SectionComponent, {}, section) : null;
5272
5172
  }) }),
5273
- /* @__PURE__ */ jsx(Box20, { sx: { p: 2, borderTop: `1px solid ${theme.palette.divider}` }, children: /* @__PURE__ */ jsx(Button, { fullWidth: true, variant: "soft", color: "primary", onClick: drawer.onClose, children: "Close" }) })
5173
+ /* @__PURE__ */ jsx(Box19, { sx: { p: 2, borderTop: `1px solid ${theme.palette.divider}` }, children: /* @__PURE__ */ jsx(Button, { fullWidth: true, variant: "soft", color: "primary", onClick: drawer.onClose, children: "Close" }) })
5274
5174
  ]
5275
5175
  }
5276
5176
  );
5277
5177
  }
5278
- function Tooltip2({
5178
+ function Tooltip3({
5279
5179
  title,
5280
5180
  children,
5281
5181
  arrow = true,
@@ -5287,7 +5187,7 @@ function Tooltip2({
5287
5187
  return children;
5288
5188
  }
5289
5189
  return /* @__PURE__ */ jsx(
5290
- Tooltip,
5190
+ Tooltip2,
5291
5191
  {
5292
5192
  title,
5293
5193
  arrow,
@@ -5305,6 +5205,9 @@ function Tooltip2({
5305
5205
  }
5306
5206
  );
5307
5207
  }
5208
+ function mergeSx(own, sx) {
5209
+ return [own, ...Array.isArray(sx) ? sx : sx ? [sx] : []];
5210
+ }
5308
5211
  function Alert2({
5309
5212
  severity = "info",
5310
5213
  variant = "standard",
@@ -5314,27 +5217,31 @@ function Alert2({
5314
5217
  closable = false,
5315
5218
  icon,
5316
5219
  action,
5317
- sx
5220
+ sx,
5221
+ ref,
5222
+ ...other
5318
5223
  }) {
5319
5224
  const muiVariant = variant === "soft" ? "standard" : variant;
5320
5225
  return /* @__PURE__ */ jsxs(
5321
5226
  MuiAlert,
5322
5227
  {
5228
+ ref,
5229
+ ...other,
5323
5230
  severity,
5324
5231
  variant: muiVariant,
5325
5232
  onClose: closable ? onClose : void 0,
5326
5233
  icon,
5327
5234
  action,
5328
- sx: {
5329
- ...variant === "soft" && {
5235
+ sx: mergeSx(
5236
+ variant === "soft" ? {
5330
5237
  backgroundColor: (theme) => alpha(theme.palette[severity].main, theme.palette.mode === "light" ? 0.12 : 0.16),
5331
5238
  color: (theme) => theme.palette.mode === "light" ? theme.palette[severity].dark : theme.palette[severity].light,
5332
5239
  "& .MuiAlert-icon": {
5333
5240
  color: "inherit"
5334
5241
  }
5335
- },
5336
- ...sx
5337
- },
5242
+ } : {},
5243
+ sx
5244
+ ),
5338
5245
  children: [
5339
5246
  title && /* @__PURE__ */ jsx(AlertTitle, { children: title }),
5340
5247
  children
@@ -5342,19 +5249,24 @@ function Alert2({
5342
5249
  }
5343
5250
  );
5344
5251
  }
5345
- function InlineAlert({ severity = "info", message, icon }) {
5252
+ function InlineAlert({ severity = "info", message, icon, sx, ref, ...other }) {
5346
5253
  return /* @__PURE__ */ jsx(
5347
5254
  MuiAlert,
5348
5255
  {
5256
+ ref,
5257
+ ...other,
5349
5258
  severity,
5350
5259
  icon,
5351
- sx: {
5352
- py: 0,
5353
- px: 1,
5354
- "& .MuiAlert-message": {
5355
- py: 0.5
5356
- }
5357
- },
5260
+ sx: mergeSx(
5261
+ {
5262
+ py: 0,
5263
+ px: 1,
5264
+ "& .MuiAlert-message": {
5265
+ py: 0.5
5266
+ }
5267
+ },
5268
+ sx
5269
+ ),
5358
5270
  children: message
5359
5271
  }
5360
5272
  );
@@ -5365,11 +5277,14 @@ function FormAlert({
5365
5277
  children,
5366
5278
  onClose,
5367
5279
  autoScroll = true,
5368
- sx
5280
+ sx,
5281
+ ref: outerRef,
5282
+ ...other
5369
5283
  }) {
5370
5284
  const ref = useRef(null);
5285
+ const handleRef = useForkRef(ref, outerRef);
5371
5286
  useEffect(() => {
5372
- if (!autoScroll) return;
5287
+ if (!autoScroll) return void 0;
5373
5288
  const id = requestAnimationFrame(() => {
5374
5289
  ref.current?.scrollIntoView({ block: "nearest", behavior: "smooth" });
5375
5290
  });
@@ -5378,17 +5293,20 @@ function FormAlert({
5378
5293
  return /* @__PURE__ */ jsxs(
5379
5294
  MuiAlert,
5380
5295
  {
5381
- ref,
5296
+ ref: handleRef,
5297
+ ...other,
5382
5298
  severity,
5383
5299
  onClose,
5384
5300
  role: "alert",
5385
5301
  "aria-live": "assertive",
5386
5302
  "aria-atomic": "true",
5387
- sx: {
5388
- alignItems: "flex-start",
5389
- mb: 2,
5390
- ...sx
5391
- },
5303
+ sx: mergeSx(
5304
+ {
5305
+ alignItems: "flex-start",
5306
+ mb: 2
5307
+ },
5308
+ sx
5309
+ ),
5392
5310
  children: [
5393
5311
  title && /* @__PURE__ */ jsx(AlertTitle, { sx: { mb: 0.5 }, children: title }),
5394
5312
  children
@@ -5443,7 +5361,12 @@ var ItemRoot = styled("div", {
5443
5361
  }));
5444
5362
  var ItemIcon = styled("span")({
5445
5363
  display: "inherit",
5446
- "& > :first-of-type:not(style):not(:first-of-type ~ *)": {
5364
+ // Constrain the icon (first real child) to 20×20. The previous
5365
+ // selector chain `:first-of-type:not(style):not(:first-of-type ~ *)`
5366
+ // was an obscure way to say "the first child that isn't a <style>
5367
+ // tag" — replaced with the modern `:first-child:not(style)` for
5368
+ // both readability and v9 lint compliance.
5369
+ "& > :first-child:not(style)": {
5447
5370
  width: 20,
5448
5371
  height: 20
5449
5372
  }
@@ -5510,8 +5433,18 @@ function BreadcrumbLink({
5510
5433
  }
5511
5434
  return content;
5512
5435
  }
5436
+ var SAFE_LINK_SCHEMES = /* @__PURE__ */ new Set(["http:", "https:", "mailto:", "tel:"]);
5437
+ function isSafeExternalLink(href) {
5438
+ const trimmed = href.trim();
5439
+ if (trimmed.startsWith("/") || trimmed.startsWith("#")) return true;
5440
+ try {
5441
+ return SAFE_LINK_SCHEMES.has(new URL(trimmed, "https://placeholder.invalid").protocol);
5442
+ } catch {
5443
+ return false;
5444
+ }
5445
+ }
5513
5446
  function MoreLinks({ links, sx, ...other }) {
5514
- return /* @__PURE__ */ jsx(MoreLinksRoot, { sx, ...other, children: links?.map((href) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { href, variant: "body2", target: "_blank", rel: "noopener noreferrer", children: href }) }, href)) });
5447
+ return /* @__PURE__ */ jsx(MoreLinksRoot, { sx, ...other, children: links?.filter(isSafeExternalLink).map((href) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { href, variant: "body2", target: "_blank", rel: "noopener noreferrer", children: href }) }, href)) });
5515
5448
  }
5516
5449
  function Breadcrumbs({
5517
5450
  sx,
@@ -5573,7 +5506,7 @@ function NavCard({
5573
5506
  const label = ariaLabel ?? (typeof title === "string" && typeof description === "string" ? `${title} \u2014 ${description}` : void 0);
5574
5507
  const isVertical = orientation === "vertical";
5575
5508
  return /* @__PURE__ */ jsx(
5576
- MuiCard,
5509
+ Card2,
5577
5510
  {
5578
5511
  variant: "outlined",
5579
5512
  ...linkProps,
@@ -5643,7 +5576,7 @@ function NavCard({
5643
5576
  // arrow into a narrow tile just steals text space).
5644
5577
  /* @__PURE__ */ jsxs(Fragment, { children: [
5645
5578
  icon && /* @__PURE__ */ jsx(
5646
- Box20,
5579
+ Box19,
5647
5580
  {
5648
5581
  sx: {
5649
5582
  width: 40,
@@ -5659,7 +5592,7 @@ function NavCard({
5659
5592
  children: icon
5660
5593
  }
5661
5594
  ),
5662
- /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
5595
+ /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
5663
5596
  /* @__PURE__ */ jsx(
5664
5597
  Typography5,
5665
5598
  {
@@ -5699,10 +5632,10 @@ function NavCard({
5699
5632
  }
5700
5633
  )
5701
5634
  ] })
5702
- ) : /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", gap: 1 }, children: [
5703
- /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 2, minWidth: 0 }, children: [
5635
+ ) : /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", gap: 1 }, children: [
5636
+ /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 2, minWidth: 0 }, children: [
5704
5637
  icon && /* @__PURE__ */ jsx(
5705
- Box20,
5638
+ Box19,
5706
5639
  {
5707
5640
  sx: {
5708
5641
  width: iconSize,
@@ -5718,8 +5651,8 @@ function NavCard({
5718
5651
  children: icon
5719
5652
  }
5720
5653
  ),
5721
- /* @__PURE__ */ jsxs(Box20, { sx: { minWidth: 0, flex: 1 }, children: [
5722
- /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
5654
+ /* @__PURE__ */ jsxs(Box19, { sx: { minWidth: 0, flex: 1 }, children: [
5655
+ /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 1, flexWrap: "wrap" }, children: [
5723
5656
  /* @__PURE__ */ jsx(
5724
5657
  Typography5,
5725
5658
  {
@@ -5754,7 +5687,7 @@ function NavCard({
5754
5687
  )
5755
5688
  ] })
5756
5689
  ] }),
5757
- arrow !== false && /* @__PURE__ */ jsx(Box20, { sx: { display: "flex", alignItems: "center", flexShrink: 0, color: "text.secondary" }, children: arrow === true ? /* @__PURE__ */ jsx(ChevronRightIcon, {}) : arrow })
5690
+ arrow !== false && /* @__PURE__ */ jsx(Box19, { sx: { display: "flex", alignItems: "center", flexShrink: 0, color: "text.secondary" }, children: arrow === true ? /* @__PURE__ */ jsx(ChevronRightIcon, {}) : arrow })
5758
5691
  ] })
5759
5692
  }
5760
5693
  )
@@ -5768,7 +5701,7 @@ function NavCardGrid({
5768
5701
  sx
5769
5702
  }) {
5770
5703
  return /* @__PURE__ */ jsx(
5771
- Box20,
5704
+ Box19,
5772
5705
  {
5773
5706
  sx: {
5774
5707
  display: "grid",
@@ -5830,7 +5763,7 @@ function Drawer2({
5830
5763
  children: [
5831
5764
  (title || showCloseButton || headerActions) && /* @__PURE__ */ jsxs(Fragment, { children: [
5832
5765
  /* @__PURE__ */ jsxs(
5833
- Box20,
5766
+ Box19,
5834
5767
  {
5835
5768
  sx: {
5836
5769
  display: "flex",
@@ -5841,9 +5774,9 @@ function Drawer2({
5841
5774
  },
5842
5775
  children: [
5843
5776
  title && /* @__PURE__ */ jsx(Typography5, { variant: "h6", component: "div", children: title }),
5844
- /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 1, ml: "auto" }, children: [
5777
+ /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 1, ml: "auto" }, children: [
5845
5778
  headerActions,
5846
- showCloseButton && onClose && /* @__PURE__ */ jsx(IconButton3, { onClick: onClose, edge: "end", size: "small", "aria-label": "Close drawer", children: closeIcon ?? /* @__PURE__ */ jsx(DefaultCloseIcon, {}) })
5779
+ showCloseButton && onClose && /* @__PURE__ */ jsx(IconButton4, { onClick: onClose, edge: "end", size: "small", "aria-label": "Close drawer", children: closeIcon ?? /* @__PURE__ */ jsx(DefaultCloseIcon, {}) })
5847
5780
  ] })
5848
5781
  ]
5849
5782
  }
@@ -5851,7 +5784,7 @@ function Drawer2({
5851
5784
  /* @__PURE__ */ jsx(Divider3, {})
5852
5785
  ] }),
5853
5786
  /* @__PURE__ */ jsx(
5854
- Box20,
5787
+ Box19,
5855
5788
  {
5856
5789
  sx: {
5857
5790
  flex: 1,
@@ -5863,7 +5796,7 @@ function Drawer2({
5863
5796
  ),
5864
5797
  footer && /* @__PURE__ */ jsxs(Fragment, { children: [
5865
5798
  /* @__PURE__ */ jsx(Divider3, {}),
5866
- /* @__PURE__ */ jsx(Box20, { sx: { p: 2 }, children: footer })
5799
+ /* @__PURE__ */ jsx(Box19, { sx: { p: 2 }, children: footer })
5867
5800
  ] })
5868
5801
  ]
5869
5802
  }
@@ -5963,9 +5896,9 @@ function StepperActions({
5963
5896
  disableNext = false,
5964
5897
  actions
5965
5898
  }) {
5966
- return /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", gap: 2, mt: 3 }, children: [
5899
+ return /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", gap: 2, mt: 3 }, children: [
5967
5900
  /* @__PURE__ */ jsx(Button, { variant: "outlined", onClick: stepper.prevStep, disabled: stepper.isFirstStep, children: backLabel }),
5968
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1 } }),
5901
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1 } }),
5969
5902
  actions,
5970
5903
  /* @__PURE__ */ jsx(Button, { variant: "contained", onClick: stepper.nextStep, disabled: disableNext, children: stepper.isLastStep ? finishLabel : nextLabel })
5971
5904
  ] });
@@ -6007,7 +5940,7 @@ var CIRCULAR_TYPES = ["donut", "radialBar", "pie", "polarArea"];
6007
5940
  function ChartLoading({ sx, className, type, ...other }) {
6008
5941
  const isCircular = type && CIRCULAR_TYPES.includes(type);
6009
5942
  return /* @__PURE__ */ jsx(
6010
- Box20,
5943
+ Box19,
6011
5944
  {
6012
5945
  className: cn(chartClasses.loading, className),
6013
5946
  sx: [
@@ -6029,7 +5962,7 @@ function ChartLoading({ sx, className, type, ...other }) {
6029
5962
  ],
6030
5963
  ...other,
6031
5964
  children: /* @__PURE__ */ jsx(
6032
- Skeleton,
5965
+ Skeleton3,
6033
5966
  {
6034
5967
  variant: "circular",
6035
5968
  sx: {
@@ -6378,6 +6311,17 @@ function deepMerge(target, source) {
6378
6311
  return output;
6379
6312
  }
6380
6313
 
6314
+ // src/components/lightbox/types.ts
6315
+ var DEFAULT_LIGHTBOX_LABELS = {
6316
+ zoomIn: "Zoom in",
6317
+ zoomOut: "Zoom out",
6318
+ download: "Download",
6319
+ share: "Share",
6320
+ close: "Close",
6321
+ previous: "Previous",
6322
+ next: "Next"
6323
+ };
6324
+
6381
6325
  // src/components/lightbox/classes.ts
6382
6326
  var lightboxClasses = {
6383
6327
  root: createClasses("lightbox__root"),
@@ -6428,12 +6372,14 @@ function Lightbox({
6428
6372
  closeOnBackdropClick = true,
6429
6373
  closeOnEsc = true,
6430
6374
  toolbar = { show: true, position: "top" },
6375
+ labels: labelOverrides,
6431
6376
  sx,
6432
6377
  slotProps,
6433
6378
  className,
6434
6379
  ...dialogProps
6435
6380
  }) {
6436
6381
  const theme = useTheme();
6382
+ const labels = useMemo(() => ({ ...DEFAULT_LIGHTBOX_LABELS, ...labelOverrides }), [labelOverrides]);
6437
6383
  const [currentIndex, setCurrentIndex] = useState(controlledIndex);
6438
6384
  const [zoomLevel, setZoomLevel] = useState(MIN_ZOOM);
6439
6385
  const [isFullscreen, setIsFullscreen] = useState(false);
@@ -6502,14 +6448,11 @@ function Lightbox({
6502
6448
  setZoomLevel((prevZoom) => Math.min(prevZoom + ZOOM_STEP, MAX_ZOOM));
6503
6449
  }, []);
6504
6450
  const zoomOut = useCallback(() => {
6505
- setZoomLevel((prevZoom) => {
6506
- const newZoom = Math.max(prevZoom - ZOOM_STEP, MIN_ZOOM);
6507
- if (newZoom === MIN_ZOOM) {
6508
- setPosition({ x: 0, y: 0 });
6509
- }
6510
- return newZoom;
6511
- });
6451
+ setZoomLevel((prevZoom) => Math.max(prevZoom - ZOOM_STEP, MIN_ZOOM));
6512
6452
  }, []);
6453
+ useEffect(() => {
6454
+ if (zoomLevel === MIN_ZOOM) setPosition({ x: 0, y: 0 });
6455
+ }, [zoomLevel]);
6513
6456
  const zoomReset = useCallback(() => {
6514
6457
  setZoomLevel(MIN_ZOOM);
6515
6458
  setPosition({ x: 0, y: 0 });
@@ -6710,14 +6653,14 @@ function Lightbox({
6710
6653
  /* @__PURE__ */ jsx(Typography5, { component: "span", sx: { mx: 0.5, opacity: 0.5 }, children: "/" }),
6711
6654
  totalSlides
6712
6655
  ] }),
6713
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1 } }),
6714
- zoom && /* @__PURE__ */ jsxs(Box20, { sx: { display: "flex", alignItems: "center", gap: 0.25 }, children: [
6656
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1 } }),
6657
+ zoom && /* @__PURE__ */ jsxs(Box19, { sx: { display: "flex", alignItems: "center", gap: 0.25 }, children: [
6715
6658
  /* @__PURE__ */ jsx(
6716
6659
  GlassButton,
6717
6660
  {
6718
6661
  onClick: zoomOut,
6719
6662
  disabled: zoomLevel <= MIN_ZOOM,
6720
- "aria-label": "Zoom out",
6663
+ "aria-label": labels.zoomOut,
6721
6664
  className: lightboxClasses.toolbarButton,
6722
6665
  size: "small",
6723
6666
  children: /* @__PURE__ */ jsx(ZoomOutIcon, { fontSize: "small" })
@@ -6745,7 +6688,7 @@ function Lightbox({
6745
6688
  {
6746
6689
  onClick: zoomIn,
6747
6690
  disabled: zoomLevel >= MAX_ZOOM,
6748
- "aria-label": "Zoom in",
6691
+ "aria-label": labels.zoomIn,
6749
6692
  className: lightboxClasses.toolbarButton,
6750
6693
  size: "small",
6751
6694
  children: /* @__PURE__ */ jsx(ZoomInIcon, { fontSize: "small" })
@@ -6766,7 +6709,7 @@ function Lightbox({
6766
6709
  GlassButton,
6767
6710
  {
6768
6711
  onClick: handleDownload,
6769
- "aria-label": "Download",
6712
+ "aria-label": labels.download,
6770
6713
  className: lightboxClasses.toolbarButton,
6771
6714
  size: "small",
6772
6715
  children: /* @__PURE__ */ jsx(DownloadIcon, { fontSize: "small" })
@@ -6776,14 +6719,23 @@ function Lightbox({
6776
6719
  GlassButton,
6777
6720
  {
6778
6721
  onClick: handleShare,
6779
- "aria-label": "Share",
6722
+ "aria-label": labels.share,
6780
6723
  className: lightboxClasses.toolbarButton,
6781
6724
  size: "small",
6782
6725
  children: /* @__PURE__ */ jsx(ShareIcon, { fontSize: "small" })
6783
6726
  }
6784
6727
  ),
6785
6728
  toolbar?.buttons,
6786
- /* @__PURE__ */ jsx(GlassButton, { onClick: onClose, "aria-label": "Close", className: lightboxClasses.toolbarButton, size: "small", children: /* @__PURE__ */ jsx(CloseIcon3, { fontSize: "small" }) })
6729
+ /* @__PURE__ */ jsx(
6730
+ GlassButton,
6731
+ {
6732
+ onClick: onClose,
6733
+ "aria-label": labels.close,
6734
+ className: lightboxClasses.toolbarButton,
6735
+ size: "small",
6736
+ children: /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" })
6737
+ }
6738
+ )
6787
6739
  ]
6788
6740
  }
6789
6741
  ),
@@ -6897,7 +6849,7 @@ function Lightbox({
6897
6849
  className: cn(lightboxClasses.navButton, lightboxClasses.navPrev),
6898
6850
  side: "left",
6899
6851
  onClick: prev,
6900
- "aria-label": "Previous",
6852
+ "aria-label": labels.previous,
6901
6853
  sx: slotProps?.navButton,
6902
6854
  children: /* @__PURE__ */ jsx(ChevronLeftIcon, { sx: { fontSize: 28 } })
6903
6855
  }
@@ -6908,7 +6860,7 @@ function Lightbox({
6908
6860
  className: cn(lightboxClasses.navButton, lightboxClasses.navNext),
6909
6861
  side: "right",
6910
6862
  onClick: next,
6911
- "aria-label": "Next",
6863
+ "aria-label": labels.next,
6912
6864
  sx: slotProps?.navButton,
6913
6865
  children: /* @__PURE__ */ jsx(ChevronRightIcon, { sx: { fontSize: 28 } })
6914
6866
  }
@@ -6933,7 +6885,7 @@ function Lightbox({
6933
6885
  }
6934
6886
  ),
6935
6887
  isThumbVideo && /* @__PURE__ */ jsx(
6936
- Box20,
6888
+ Box19,
6937
6889
  {
6938
6890
  sx: {
6939
6891
  position: "absolute",
@@ -6943,7 +6895,7 @@ function Lightbox({
6943
6895
  justifyContent: "center",
6944
6896
  bgcolor: alpha(theme.palette.common.black, 0.35)
6945
6897
  },
6946
- children: /* @__PURE__ */ jsx(PlayArrowIcon, { sx: { fontSize: 18, color: "common.white", opacity: 0.9 } })
6898
+ children: /* @__PURE__ */ jsx(PlayIcon, { sx: { fontSize: 18, color: "common.white", opacity: 0.9 } })
6947
6899
  }
6948
6900
  )
6949
6901
  ]
@@ -6963,8 +6915,8 @@ function Lightbox({
6963
6915
  /* @__PURE__ */ jsx(Typography5, { component: "span", sx: { mx: 0.5, opacity: 0.5 }, children: "/" }),
6964
6916
  totalSlides
6965
6917
  ] }),
6966
- /* @__PURE__ */ jsx(Box20, { sx: { flex: 1 } }),
6967
- /* @__PURE__ */ jsx(GlassButton, { onClick: onClose, "aria-label": "Close", size: "small", children: /* @__PURE__ */ jsx(CloseIcon3, { fontSize: "small" }) })
6918
+ /* @__PURE__ */ jsx(Box19, { sx: { flex: 1 } }),
6919
+ /* @__PURE__ */ jsx(GlassButton, { onClick: onClose, "aria-label": labels.close, size: "small", children: /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" }) })
6968
6920
  ]
6969
6921
  }
6970
6922
  )
@@ -6986,7 +6938,7 @@ var StyledDialog = styled(Dialog)(({ theme }) => ({
6986
6938
  backdropFilter: "blur(8px)"
6987
6939
  }
6988
6940
  }));
6989
- var LightboxContainer = styled(Box20)({
6941
+ var LightboxContainer = styled(Box19)({
6990
6942
  display: "flex",
6991
6943
  flexDirection: "column",
6992
6944
  width: "100vw",
@@ -6995,7 +6947,7 @@ var LightboxContainer = styled(Box20)({
6995
6947
  overflow: "hidden",
6996
6948
  userSelect: "none"
6997
6949
  });
6998
- var GlassToolbar = styled(Box20)(({ theme, placement }) => ({
6950
+ var GlassToolbar = styled(Box19)(({ theme, placement }) => ({
6999
6951
  display: "flex",
7000
6952
  alignItems: "center",
7001
6953
  gap: theme.spacing(0.5),
@@ -7009,7 +6961,7 @@ var GlassToolbar = styled(Box20)(({ theme, placement }) => ({
7009
6961
  background: `linear-gradient(${placement === "top" ? "to bottom" : "to top"}, ${alpha(theme.palette.common.black, 0.55)} 0%, ${alpha(theme.palette.common.black, 0.2)} 60%, transparent 100%)`,
7010
6962
  transition: "opacity 0.3s ease"
7011
6963
  }));
7012
- var GlassButton = styled(IconButton3)(({ theme }) => ({
6964
+ var GlassButton = styled(IconButton4)(({ theme }) => ({
7013
6965
  color: alpha(theme.palette.common.white, 0.85),
7014
6966
  borderRadius: Number(theme.shape.borderRadius) * 1.5,
7015
6967
  padding: 6,
@@ -7042,7 +6994,7 @@ var CounterChip = styled(Typography5)(({ theme }) => ({
7042
6994
  alignItems: "center",
7043
6995
  letterSpacing: "0.02em"
7044
6996
  }));
7045
- var SlideContainer = styled(Box20)({
6997
+ var SlideContainer = styled(Box19)({
7046
6998
  flex: 1,
7047
6999
  display: "flex",
7048
7000
  alignItems: "center",
@@ -7050,7 +7002,7 @@ var SlideContainer = styled(Box20)({
7050
7002
  position: "relative",
7051
7003
  overflow: "hidden"
7052
7004
  });
7053
- var SlideLayer = styled(Box20)({
7005
+ var SlideLayer = styled(Box19)({
7054
7006
  position: "absolute",
7055
7007
  inset: 0,
7056
7008
  display: "flex",
@@ -7058,7 +7010,7 @@ var SlideLayer = styled(Box20)({
7058
7010
  justifyContent: "center",
7059
7011
  willChange: "opacity, transform"
7060
7012
  });
7061
- var LoadingOverlay = styled(Box20)({
7013
+ var LoadingOverlay = styled(Box19)({
7062
7014
  position: "absolute",
7063
7015
  top: "50%",
7064
7016
  left: "50%",
@@ -7072,7 +7024,7 @@ var StyledImage = styled("img")({
7072
7024
  willChange: "transform, opacity",
7073
7025
  borderRadius: 2
7074
7026
  });
7075
- var VideoWrapper = styled(Box20)({
7027
+ var VideoWrapper = styled(Box19)({
7076
7028
  position: "relative",
7077
7029
  display: "flex",
7078
7030
  alignItems: "center",
@@ -7096,7 +7048,7 @@ var StyledVideo = styled("video")(({ theme }) => ({
7096
7048
  fontSize: 12
7097
7049
  }
7098
7050
  }));
7099
- var GlassCaption = styled(Box20)(({ theme }) => ({
7051
+ var GlassCaption = styled(Box19)(({ theme }) => ({
7100
7052
  position: "absolute",
7101
7053
  bottom: theme.spacing(2.5),
7102
7054
  left: "50%",
@@ -7116,7 +7068,7 @@ var GlassCaption = styled(Box20)(({ theme }) => ({
7116
7068
  to: { opacity: 1, transform: "translateX(-50%) translateY(0)" }
7117
7069
  }
7118
7070
  }));
7119
- var NavArrow = styled(IconButton3)(({ theme, side }) => ({
7071
+ var NavArrow = styled(IconButton4)(({ theme, side }) => ({
7120
7072
  position: "absolute",
7121
7073
  top: "50%",
7122
7074
  transform: "translateY(-50%)",
@@ -7143,7 +7095,7 @@ var NavArrow = styled(IconButton3)(({ theme, side }) => ({
7143
7095
  transform: "translateY(-50%) scale(0.95)"
7144
7096
  }
7145
7097
  }));
7146
- var ThumbnailStrip = styled(Box20)(({ theme }) => ({
7098
+ var ThumbnailStrip = styled(Box19)(({ theme }) => ({
7147
7099
  display: "flex",
7148
7100
  gap: theme.spacing(0.75),
7149
7101
  padding: theme.spacing(1, 2),
@@ -7158,7 +7110,7 @@ var ThumbnailStrip = styled(Box20)(({ theme }) => ({
7158
7110
  display: "none"
7159
7111
  }
7160
7112
  }));
7161
- var ThumbItem = styled(Box20)(({ theme, active }) => ({
7113
+ var ThumbItem = styled(Box19)(({ theme, active }) => ({
7162
7114
  flexShrink: 0,
7163
7115
  width: 56,
7164
7116
  height: 56,
@@ -7187,18 +7139,14 @@ var ThumbItem = styled(Box20)(({ theme, active }) => ({
7187
7139
  borderColor: active ? theme.palette.primary.main : alpha(theme.palette.common.white, 0.25)
7188
7140
  }
7189
7141
  }));
7190
- var MIN_ZOOM2 = 1;
7191
- var MAX_ZOOM2 = 4;
7192
- var ZOOM_STEP2 = 0.5;
7193
7142
  function useLightbox(options = {}) {
7194
7143
  const { defaultOpen = false, defaultIndex = 0, totalSlides = 0, loop = false } = options;
7195
7144
  const [open, setOpen] = useState(defaultOpen);
7196
7145
  const [index, setIndex] = useState(defaultIndex);
7197
- const [zoomLevel, setZoomLevel] = useState(MIN_ZOOM2);
7198
7146
  const goTo = useCallback(
7199
7147
  (newIndex) => {
7200
7148
  if (totalSlides === 0) {
7201
- setIndex(newIndex);
7149
+ setIndex(0);
7202
7150
  return;
7203
7151
  }
7204
7152
  if (loop) {
@@ -7206,7 +7154,6 @@ function useLightbox(options = {}) {
7206
7154
  } else {
7207
7155
  setIndex(Math.max(0, Math.min(newIndex, totalSlides - 1)));
7208
7156
  }
7209
- setZoomLevel(MIN_ZOOM2);
7210
7157
  },
7211
7158
  [totalSlides, loop]
7212
7159
  );
@@ -7218,21 +7165,10 @@ function useLightbox(options = {}) {
7218
7165
  }, [index, goTo]);
7219
7166
  const onOpen = useCallback((slideIndex = 0) => {
7220
7167
  setIndex(slideIndex);
7221
- setZoomLevel(MIN_ZOOM2);
7222
7168
  setOpen(true);
7223
7169
  }, []);
7224
7170
  const onClose = useCallback(() => {
7225
7171
  setOpen(false);
7226
- setZoomLevel(MIN_ZOOM2);
7227
- }, []);
7228
- const zoomIn = useCallback(() => {
7229
- setZoomLevel((prevZoom) => Math.min(prevZoom + ZOOM_STEP2, MAX_ZOOM2));
7230
- }, []);
7231
- const zoomOut = useCallback(() => {
7232
- setZoomLevel((prevZoom) => Math.max(prevZoom - ZOOM_STEP2, MIN_ZOOM2));
7233
- }, []);
7234
- const zoomReset = useCallback(() => {
7235
- setZoomLevel(MIN_ZOOM2);
7236
7172
  }, []);
7237
7173
  const onIndexChange = useCallback(
7238
7174
  (newIndex) => {
@@ -7257,10 +7193,6 @@ function useLightbox(options = {}) {
7257
7193
  goTo,
7258
7194
  next,
7259
7195
  prev,
7260
- zoomLevel,
7261
- zoomIn,
7262
- zoomOut,
7263
- zoomReset,
7264
7196
  getLightboxProps
7265
7197
  };
7266
7198
  }
@@ -7579,7 +7511,7 @@ function Carousel({
7579
7511
  isHorizontal,
7580
7512
  direction: "prev",
7581
7513
  sx: slotProps?.arrow,
7582
- children: isHorizontal ? /* @__PURE__ */ jsx(ChevronLeftIcon, {}) : /* @__PURE__ */ jsx(KeyboardArrowUpIcon, {})
7514
+ children: isHorizontal ? /* @__PURE__ */ jsx(ChevronLeftIcon, {}) : /* @__PURE__ */ jsx(ChevronUpIcon, {})
7583
7515
  }
7584
7516
  ),
7585
7517
  /* @__PURE__ */ jsx(
@@ -7594,7 +7526,7 @@ function Carousel({
7594
7526
  isHorizontal,
7595
7527
  direction: "next",
7596
7528
  sx: slotProps?.arrow,
7597
- children: isHorizontal ? /* @__PURE__ */ jsx(ChevronRightIcon, {}) : /* @__PURE__ */ jsx(KeyboardArrowDownIcon, {})
7529
+ children: isHorizontal ? /* @__PURE__ */ jsx(ChevronRightIcon, {}) : /* @__PURE__ */ jsx(ChevronDownIcon, {})
7598
7530
  }
7599
7531
  )
7600
7532
  ] }),
@@ -7628,31 +7560,31 @@ function Carousel({
7628
7560
  }
7629
7561
  );
7630
7562
  }
7631
- var CarouselRoot = styled(Box20)({
7563
+ var CarouselRoot = styled(Box19)({
7632
7564
  position: "relative",
7633
7565
  width: "100%",
7634
7566
  overflow: "hidden",
7635
7567
  outline: "none"
7636
7568
  });
7637
- var CarouselContainer = styled(Box20)({
7569
+ var CarouselContainer = styled(Box19)({
7638
7570
  position: "relative",
7639
7571
  width: "100%",
7640
7572
  overflow: "hidden"
7641
7573
  });
7642
- var CarouselTrack = styled(Box20)({
7574
+ var CarouselTrack = styled(Box19)({
7643
7575
  display: "flex",
7644
7576
  width: "100%",
7645
7577
  willChange: "transform",
7646
7578
  userSelect: "none"
7647
7579
  });
7648
- var CarouselSlide = styled(Box20)({
7580
+ var CarouselSlide = styled(Box19)({
7649
7581
  flexShrink: 0,
7650
7582
  "& > *": {
7651
7583
  width: "100%",
7652
7584
  height: "100%"
7653
7585
  }
7654
7586
  });
7655
- var ArrowButton = styled(IconButton3)(
7587
+ var ArrowButton = styled(IconButton4)(
7656
7588
  ({ theme, isHorizontal, direction }) => ({
7657
7589
  position: "absolute",
7658
7590
  zIndex: 10,
@@ -7675,7 +7607,7 @@ var ArrowButton = styled(IconButton3)(
7675
7607
  }
7676
7608
  })
7677
7609
  );
7678
- var DotsContainer = styled(Box20)(({ theme, dotsPosition }) => ({
7610
+ var DotsContainer = styled(Box19)(({ theme, dotsPosition }) => ({
7679
7611
  display: "flex",
7680
7612
  gap: theme.spacing(1),
7681
7613
  position: "absolute",
@@ -7736,6 +7668,7 @@ function useCarousel(options) {
7736
7668
  const [isPlaying, setIsPlaying] = useState(autoplay);
7737
7669
  const carouselRef = useRef(null);
7738
7670
  const autoplayRef = useRef(null);
7671
+ const currentIndexRef = useRef(currentIndex);
7739
7672
  const maxIndex = Math.max(0, totalSlides - slidesToShow);
7740
7673
  const canPrev = loop || currentIndex > 0;
7741
7674
  const canNext = loop || currentIndex < maxIndex;
@@ -7751,6 +7684,8 @@ function useCarousel(options) {
7751
7684
  } else {
7752
7685
  newIndex = Math.max(0, Math.min(index, maxIndex));
7753
7686
  }
7687
+ if (newIndex === currentIndexRef.current) return;
7688
+ currentIndexRef.current = newIndex;
7754
7689
  setCurrentIndex(newIndex);
7755
7690
  onSlideChange?.(newIndex);
7756
7691
  },
@@ -7779,7 +7714,7 @@ function useCarousel(options) {
7779
7714
  useEffect(() => {
7780
7715
  if (isPlaying && totalSlides > slidesToShow) {
7781
7716
  autoplayRef.current = setInterval(() => {
7782
- goTo(currentIndex + slidesToScroll);
7717
+ goTo(currentIndexRef.current + slidesToScroll);
7783
7718
  }, autoplayInterval);
7784
7719
  return () => {
7785
7720
  if (autoplayRef.current) {
@@ -7789,7 +7724,7 @@ function useCarousel(options) {
7789
7724
  };
7790
7725
  }
7791
7726
  return void 0;
7792
- }, [isPlaying, currentIndex, slidesToScroll, autoplayInterval, totalSlides, slidesToShow, goTo]);
7727
+ }, [isPlaying, slidesToScroll, autoplayInterval, totalSlides, slidesToShow, goTo]);
7793
7728
  useEffect(
7794
7729
  () => () => {
7795
7730
  if (autoplayRef.current) {
@@ -7866,11 +7801,17 @@ var navSectionCssVars = {
7866
7801
  "--nav-icon-active-color": theme.palette.primary.main,
7867
7802
  // Colors - disabled
7868
7803
  "--nav-item-disabled-color": theme.palette.text.disabled,
7869
- // Subheader
7804
+ // Subheader. Asymmetric vertical padding (top < bottom) tightens
7805
+ // the gap to the previous section's last item while preserving
7806
+ // the visual grouping with the items belonging to THIS section.
7807
+ // Pre-fix `8px 8px 8px 12px` summed with the parent `gap: 4px`
7808
+ // and the previous item's `padding-bottom: 4px` to ~16px above
7809
+ // the title, which read as a disconnect rather than a section
7810
+ // boundary.
7870
7811
  "--nav-subheader-font-size": "0.6875rem",
7871
7812
  "--nav-subheader-font-weight": "700",
7872
7813
  "--nav-subheader-color": theme.palette.text.disabled,
7873
- "--nav-subheader-padding": "8px 8px 8px 12px",
7814
+ "--nav-subheader-padding": "4px 8px 8px 12px",
7874
7815
  // Sub-item adjustments
7875
7816
  "--nav-sub-item-padding": "4px 8px 4px 12px",
7876
7817
  "--nav-sub-item-margin-left": "40px",
@@ -7949,9 +7890,9 @@ function getNavCssVars(theme, variant) {
7949
7890
  return navSectionCssVars.vertical(theme);
7950
7891
  }
7951
7892
  }
7952
- var Nav = forwardRef(function Nav2({ className, sx, ...other }, ref) {
7893
+ function Nav({ className, sx, ref, ...other }) {
7953
7894
  return /* @__PURE__ */ jsx(
7954
- Box20,
7895
+ Box19,
7955
7896
  {
7956
7897
  component: "nav",
7957
7898
  ref,
@@ -7967,10 +7908,10 @@ var Nav = forwardRef(function Nav2({ className, sx, ...other }, ref) {
7967
7908
  ...other
7968
7909
  }
7969
7910
  );
7970
- });
7971
- var NavUl = forwardRef(function NavUl2({ className, sx, ...other }, ref) {
7911
+ }
7912
+ function NavUl({ className, sx, ref, ...other }) {
7972
7913
  return /* @__PURE__ */ jsx(
7973
- Box20,
7914
+ Box19,
7974
7915
  {
7975
7916
  component: "ul",
7976
7917
  ref,
@@ -7988,10 +7929,10 @@ var NavUl = forwardRef(function NavUl2({ className, sx, ...other }, ref) {
7988
7929
  ...other
7989
7930
  }
7990
7931
  );
7991
- });
7992
- var NavLi = forwardRef(function NavLi2({ className, ...other }, ref) {
7932
+ }
7933
+ function NavLi({ className, ref, ...other }) {
7993
7934
  return /* @__PURE__ */ jsx(
7994
- Box20,
7935
+ Box19,
7995
7936
  {
7996
7937
  component: "li",
7997
7938
  ref,
@@ -8003,7 +7944,7 @@ var NavLi = forwardRef(function NavLi2({ className, ...other }, ref) {
8003
7944
  ...other
8004
7945
  }
8005
7946
  );
8006
- });
7947
+ }
8007
7948
  var StyledSubheader = styled(ButtonBase)(({ theme }) => ({
8008
7949
  width: "100%",
8009
7950
  cursor: "pointer",
@@ -8043,12 +7984,12 @@ var ArrowIcon = styled("span")(({ open }) => ({
8043
7984
  transform: "rotate(-45deg)"
8044
7985
  }
8045
7986
  }));
8046
- var NavSubheader = forwardRef(function NavSubheader2({ className, open, onClick, children, ...other }, ref) {
7987
+ function NavSubheader({ className, open, onClick, children, ref, ...other }) {
8047
7988
  return /* @__PURE__ */ jsxs(StyledSubheader, { ref, className: cn(navSectionClasses.subheader, className), onClick, ...other, children: [
8048
7989
  children,
8049
7990
  onClick && /* @__PURE__ */ jsx(ArrowIcon, { open })
8050
7991
  ] });
8051
- });
7992
+ }
8052
7993
  var StyledNavItem = styled(ButtonBase, {
8053
7994
  shouldForwardProp: (prop) => !["active", "open", "depth", "hasChild"].includes(prop)
8054
7995
  })(
@@ -8087,7 +8028,7 @@ var StyledNavItem = styled(ButtonBase, {
8087
8028
  }
8088
8029
  })
8089
8030
  );
8090
- var NavItemBase = forwardRef(function NavItemBase2({ className, active, disabled, open, depth, hasChild, ...other }, ref) {
8031
+ function NavItemBase({ className, active, disabled, open, depth, hasChild, ref, ...other }) {
8091
8032
  return /* @__PURE__ */ jsx(
8092
8033
  StyledNavItem,
8093
8034
  {
@@ -8107,8 +8048,8 @@ var NavItemBase = forwardRef(function NavItemBase2({ className, active, disabled
8107
8048
  ...other
8108
8049
  }
8109
8050
  );
8110
- });
8111
- var IconWrapper2 = styled("span")({
8051
+ }
8052
+ var IconWrapper = styled("span")({
8112
8053
  width: "var(--nav-icon-size, 24px)",
8113
8054
  height: "var(--nav-icon-size, 24px)",
8114
8055
  flexShrink: 0,
@@ -8124,7 +8065,7 @@ var IconWrapper2 = styled("span")({
8124
8065
  });
8125
8066
  function NavIcon({ icon, className }) {
8126
8067
  if (!icon) return null;
8127
- return /* @__PURE__ */ jsx(IconWrapper2, { className: cn("nav-icon", navSectionClasses.icon, className), children: icon });
8068
+ return /* @__PURE__ */ jsx(IconWrapper, { className: cn("nav-icon", navSectionClasses.icon, className), children: icon });
8128
8069
  }
8129
8070
  var TextsWrapper = styled("span")({
8130
8071
  flex: "1 1 auto",
@@ -8351,11 +8292,12 @@ function resolveInfo(info, render) {
8351
8292
  if (!info) return void 0;
8352
8293
  if (Array.isArray(info) && render?.navInfo) {
8353
8294
  const infoComponents = info.map((key) => render.navInfo?.(key));
8354
- return /* @__PURE__ */ jsx(Fragment, { children: infoComponents.map((comp, idx) => /* @__PURE__ */ jsx(Box20, { component: "span", children: comp && Object.values(comp)[0] }, idx)) });
8295
+ return /* @__PURE__ */ jsx(Fragment, { children: infoComponents.map((comp, idx) => /* @__PURE__ */ jsx(Box19, { component: "span", children: comp && Object.values(comp)[0] }, idx)) });
8355
8296
  }
8356
8297
  return info;
8357
8298
  }
8358
- var NavItem = forwardRef(function NavItem2(props, ref) {
8299
+ function NavItem(props) {
8300
+ const { ref } = props;
8359
8301
  const {
8360
8302
  // Data props
8361
8303
  path,
@@ -8411,10 +8353,10 @@ var NavItem = forwardRef(function NavItem2(props, ref) {
8411
8353
  }
8412
8354
  );
8413
8355
  if (caption && depth === 1) {
8414
- return /* @__PURE__ */ jsx(Tooltip, { title: caption, placement: "right", arrow: true, children: content });
8356
+ return /* @__PURE__ */ jsx(Tooltip2, { title: caption, placement: "right", arrow: true, children: content });
8415
8357
  }
8416
8358
  return content;
8417
- });
8359
+ }
8418
8360
  var NavContext = createContext(void 0);
8419
8361
  function useNavPathname() {
8420
8362
  const context = useContext(NavContext);
@@ -8875,7 +8817,7 @@ function MiniNavList({
8875
8817
  )
8876
8818
  }
8877
8819
  )
8878
- ] }) : /* @__PURE__ */ jsx(Tooltip, { title: data.title, placement: "right", arrow: true, children: content }) });
8820
+ ] }) : /* @__PURE__ */ jsx(Tooltip2, { title: data.title, placement: "right", arrow: true, children: content }) });
8879
8821
  }
8880
8822
  function MiniDropdown({
8881
8823
  data,
@@ -9033,17 +8975,17 @@ function megaMenuCssVars(theme, variant) {
9033
8975
  return commonVars;
9034
8976
  }
9035
8977
  }
9036
- var Nav3 = styled("nav")({
8978
+ var Nav2 = styled("nav")({
9037
8979
  display: "flex",
9038
8980
  flexShrink: 0
9039
8981
  });
9040
- var NavUl3 = styled("ul")({
8982
+ var NavUl2 = styled("ul")({
9041
8983
  display: "flex",
9042
8984
  listStyle: "none",
9043
8985
  padding: 0,
9044
8986
  margin: 0
9045
8987
  });
9046
- var NavLi3 = styled("li")({
8988
+ var NavLi2 = styled("li")({
9047
8989
  display: "flex"
9048
8990
  });
9049
8991
  var NavButton = styled("button")(({ theme, active, open }) => ({
@@ -9077,7 +9019,7 @@ var NavButton = styled("button")(({ theme, active, open }) => ({
9077
9019
  cursor: "not-allowed"
9078
9020
  }
9079
9021
  }));
9080
- var IconWrapper3 = styled("span")({
9022
+ var IconWrapper2 = styled("span")({
9081
9023
  width: "var(--nav-icon-size)",
9082
9024
  height: "var(--nav-icon-size)",
9083
9025
  marginRight: 8,
@@ -9145,7 +9087,7 @@ var SubItemLink = styled(Link, {
9145
9087
  color: theme.palette.text.primary
9146
9088
  }
9147
9089
  }));
9148
- var TagsContainer = styled(Box20)(({ theme }) => ({
9090
+ var TagsContainer = styled(Box19)(({ theme }) => ({
9149
9091
  display: "flex",
9150
9092
  flexWrap: "wrap",
9151
9093
  gap: 8,
@@ -9209,7 +9151,7 @@ function MegaMenuList({ data, render, slotProps, slots, enabledRootRedirect }) {
9209
9151
  handleClose();
9210
9152
  }, [pathname, handleClose]);
9211
9153
  const icon = typeof data.icon === "string" && render?.navIcon ? render.navIcon[data.icon] : data.icon;
9212
- return /* @__PURE__ */ jsxs(NavLi3, { className: megaMenuClasses.li, children: [
9154
+ return /* @__PURE__ */ jsxs(NavLi2, { className: megaMenuClasses.li, children: [
9213
9155
  /* @__PURE__ */ jsxs(
9214
9156
  NavButton,
9215
9157
  {
@@ -9225,7 +9167,7 @@ function MegaMenuList({ data, render, slotProps, slots, enabledRootRedirect }) {
9225
9167
  onMouseEnter: handleOpen,
9226
9168
  onMouseLeave: handleClose,
9227
9169
  children: [
9228
- icon && /* @__PURE__ */ jsx(IconWrapper3, { className: megaMenuClasses.icon, children: icon }),
9170
+ icon && /* @__PURE__ */ jsx(IconWrapper2, { className: megaMenuClasses.icon, children: icon }),
9229
9171
  /* @__PURE__ */ jsx("span", { className: megaMenuClasses.title, children: data.title }),
9230
9172
  hasChild && /* @__PURE__ */ jsx(ArrowIcon2, { open, className: megaMenuClasses.arrow })
9231
9173
  ]
@@ -9279,9 +9221,9 @@ function MegaMenuList({ data, render, slotProps, slots, enabledRootRedirect }) {
9279
9221
  item.title
9280
9222
  );
9281
9223
  }) }),
9282
- idx === 0 && data.moreLink && /* @__PURE__ */ jsx(Box20, { sx: { mt: 2 }, children: /* @__PURE__ */ jsx(MoreLink, { href: data.moreLink.path, className: megaMenuClasses.moreLink, sx: slotProps?.moreLink, children: data.moreLink.title }) })
9224
+ idx === 0 && data.moreLink && /* @__PURE__ */ jsx(Box19, { sx: { mt: 2 }, children: /* @__PURE__ */ jsx(MoreLink, { href: data.moreLink.path, className: megaMenuClasses.moreLink, sx: slotProps?.moreLink, children: data.moreLink.title }) })
9283
9225
  ] }, section.subheader ?? idx)) }),
9284
- data.tags && data.tags.length > 0 && /* @__PURE__ */ jsx(Box20, { sx: { px: "var(--nav-dropdown-padding)", pb: "var(--nav-dropdown-padding)" }, children: /* @__PURE__ */ jsx(TagsContainer, { className: megaMenuClasses.tags, sx: slotProps?.tags, children: data.tags.map((tag) => /* @__PURE__ */ jsx(Tag, { href: tag.path, children: tag.title }, tag.title)) }) }),
9226
+ data.tags && data.tags.length > 0 && /* @__PURE__ */ jsx(Box19, { sx: { px: "var(--nav-dropdown-padding)", pb: "var(--nav-dropdown-padding)" }, children: /* @__PURE__ */ jsx(TagsContainer, { className: megaMenuClasses.tags, sx: slotProps?.tags, children: data.tags.map((tag) => /* @__PURE__ */ jsx(Tag, { href: tag.path, children: tag.title }, tag.title)) }) }),
9285
9227
  slots?.bottomArea
9286
9228
  ]
9287
9229
  }
@@ -9302,12 +9244,12 @@ function MegaMenuHorizontal({
9302
9244
  const theme = useTheme();
9303
9245
  const cssVars = { ...megaMenuCssVars(theme, "horizontal"), ...overridesVars };
9304
9246
  return /* @__PURE__ */ jsx(
9305
- Nav3,
9247
+ Nav2,
9306
9248
  {
9307
9249
  className: cn(megaMenuClasses.root, megaMenuClasses.horizontal, className),
9308
9250
  sx: [{ ...cssVars }, ...Array.isArray(sx) ? sx : [sx]],
9309
9251
  ...other,
9310
- children: /* @__PURE__ */ jsx(NavUl3, { className: megaMenuClasses.ul, sx: { gap: "var(--nav-item-gap)" }, children: data.map((item) => /* @__PURE__ */ jsx(
9252
+ children: /* @__PURE__ */ jsx(NavUl2, { className: megaMenuClasses.ul, sx: { gap: "var(--nav-item-gap)" }, children: data.map((item) => /* @__PURE__ */ jsx(
9311
9253
  MegaMenuList,
9312
9254
  {
9313
9255
  data: item,
@@ -9321,19 +9263,19 @@ function MegaMenuHorizontal({
9321
9263
  }
9322
9264
  );
9323
9265
  }
9324
- var Nav4 = styled("nav")({
9266
+ var Nav3 = styled("nav")({
9325
9267
  display: "flex",
9326
9268
  flexDirection: "column",
9327
9269
  flexShrink: 0
9328
9270
  });
9329
- var NavUl4 = styled("ul")({
9271
+ var NavUl3 = styled("ul")({
9330
9272
  display: "flex",
9331
9273
  flexDirection: "column",
9332
9274
  listStyle: "none",
9333
9275
  padding: 0,
9334
9276
  margin: 0
9335
9277
  });
9336
- var NavLi4 = styled("li")({
9278
+ var NavLi3 = styled("li")({
9337
9279
  display: "flex",
9338
9280
  flexDirection: "column"
9339
9281
  });
@@ -9369,7 +9311,7 @@ var NavButton2 = styled("button")(({ theme, active, open }) => ({
9369
9311
  cursor: "not-allowed"
9370
9312
  }
9371
9313
  }));
9372
- var IconWrapper4 = styled("span")({
9314
+ var IconWrapper3 = styled("span")({
9373
9315
  width: "var(--nav-icon-size)",
9374
9316
  height: "var(--nav-icon-size)",
9375
9317
  marginRight: 12,
@@ -9415,7 +9357,10 @@ var SectionHeader2 = styled(Typography5)(({ theme }) => ({
9415
9357
  letterSpacing: "0.08em",
9416
9358
  marginBottom: 8,
9417
9359
  marginTop: 16,
9418
- "&:first-of-type": {
9360
+ // `:first-child` — homogeneous list of subheaders; child-position
9361
+ // selector is equivalent to of-type but doesn't tie correctness
9362
+ // to tag-name uniqueness.
9363
+ "&:first-child": {
9419
9364
  marginTop: 0
9420
9365
  }
9421
9366
  }));
@@ -9459,7 +9404,7 @@ function MegaMenuList2({ data, render, slotProps, slots, enabledRootRedirect })
9459
9404
  handleClose();
9460
9405
  }, [pathname, handleClose]);
9461
9406
  const icon = typeof data.icon === "string" && render?.navIcon ? render.navIcon[data.icon] : data.icon;
9462
- return /* @__PURE__ */ jsxs(NavLi4, { className: megaMenuClasses.li, children: [
9407
+ return /* @__PURE__ */ jsxs(NavLi3, { className: megaMenuClasses.li, children: [
9463
9408
  /* @__PURE__ */ jsxs(
9464
9409
  NavButton2,
9465
9410
  {
@@ -9475,7 +9420,7 @@ function MegaMenuList2({ data, render, slotProps, slots, enabledRootRedirect })
9475
9420
  onMouseEnter: handleOpen,
9476
9421
  onMouseLeave: handleClose,
9477
9422
  children: [
9478
- icon && /* @__PURE__ */ jsx(IconWrapper4, { className: megaMenuClasses.icon, children: icon }),
9423
+ icon && /* @__PURE__ */ jsx(IconWrapper3, { className: megaMenuClasses.icon, children: icon }),
9479
9424
  /* @__PURE__ */ jsx("span", { className: megaMenuClasses.title, children: data.title }),
9480
9425
  hasChild && /* @__PURE__ */ jsx(ArrowIcon3, { open, className: megaMenuClasses.arrow })
9481
9426
  ]
@@ -9511,7 +9456,7 @@ function MegaMenuList2({ data, render, slotProps, slots, enabledRootRedirect })
9511
9456
  disableRestoreFocus: true,
9512
9457
  children: [
9513
9458
  slots?.topArea,
9514
- /* @__PURE__ */ jsx(DropdownContent2, { elevation: 0, className: megaMenuClasses.dropdown, children: data.children?.map((section, idx) => /* @__PURE__ */ jsxs(Box20, { children: [
9459
+ /* @__PURE__ */ jsx(DropdownContent2, { elevation: 0, className: megaMenuClasses.dropdown, children: data.children?.map((section, idx) => /* @__PURE__ */ jsxs(Box19, { children: [
9515
9460
  section.subheader && /* @__PURE__ */ jsx(SectionHeader2, { className: megaMenuClasses.subheader, children: section.subheader }),
9516
9461
  /* @__PURE__ */ jsx(Stack, { spacing: 0.5, children: section.items.map((item) => {
9517
9462
  const itemActive = isActiveLink(pathname, item.path);
@@ -9551,12 +9496,12 @@ function MegaMenuVertical({
9551
9496
  const theme = useTheme();
9552
9497
  const cssVars = { ...megaMenuCssVars(theme, "vertical"), ...overridesVars };
9553
9498
  return /* @__PURE__ */ jsx(
9554
- Nav4,
9499
+ Nav3,
9555
9500
  {
9556
9501
  className: cn(megaMenuClasses.root, megaMenuClasses.vertical, className),
9557
9502
  sx: [{ ...cssVars }, ...Array.isArray(sx) ? sx : [sx]],
9558
9503
  ...other,
9559
- children: /* @__PURE__ */ jsx(NavUl4, { className: megaMenuClasses.ul, sx: { gap: "var(--nav-item-gap)" }, children: data.map((item) => /* @__PURE__ */ jsx(
9504
+ children: /* @__PURE__ */ jsx(NavUl3, { className: megaMenuClasses.ul, sx: { gap: "var(--nav-item-gap)" }, children: data.map((item) => /* @__PURE__ */ jsx(
9560
9505
  MegaMenuList2,
9561
9506
  {
9562
9507
  data: item,
@@ -9570,13 +9515,13 @@ function MegaMenuVertical({
9570
9515
  }
9571
9516
  );
9572
9517
  }
9573
- var Nav5 = styled("nav")({
9518
+ var Nav4 = styled("nav")({
9574
9519
  display: "flex",
9575
9520
  flexDirection: "column",
9576
9521
  flexShrink: 0,
9577
9522
  width: "100%"
9578
9523
  });
9579
- var NavUl5 = styled("ul")({
9524
+ var NavUl4 = styled("ul")({
9580
9525
  display: "flex",
9581
9526
  flexDirection: "column",
9582
9527
  listStyle: "none",
@@ -9584,7 +9529,7 @@ var NavUl5 = styled("ul")({
9584
9529
  margin: 0,
9585
9530
  width: "100%"
9586
9531
  });
9587
- var NavLi5 = styled("li")({
9532
+ var NavLi4 = styled("li")({
9588
9533
  display: "flex",
9589
9534
  flexDirection: "column",
9590
9535
  width: "100%"
@@ -9621,7 +9566,7 @@ var NavButton3 = styled("button")(({ theme, active }) => ({
9621
9566
  }
9622
9567
  }));
9623
9568
  var NavLink = styled("a")(({ theme, active }) => navItemStyles(theme, active));
9624
- var IconWrapper5 = styled("span")({
9569
+ var IconWrapper4 = styled("span")({
9625
9570
  width: "var(--nav-icon-size)",
9626
9571
  height: "var(--nav-icon-size)",
9627
9572
  marginRight: 12,
@@ -9653,7 +9598,7 @@ var ArrowIcon4 = styled("span")(({ open }) => ({
9653
9598
  transform: "rotate(-45deg)"
9654
9599
  }
9655
9600
  }));
9656
- var CollapseContent = styled(Box20)(({ theme }) => ({
9601
+ var CollapseContent = styled(Box19)(({ theme }) => ({
9657
9602
  padding: "8px 0",
9658
9603
  paddingLeft: 40,
9659
9604
  backgroundColor: theme.palette.background.neutral
@@ -9701,7 +9646,7 @@ function MegaMenuList3({ data, render, slotProps, enabledRootRedirect }) {
9701
9646
  const icon = typeof data.icon === "string" && render?.navIcon ? render.navIcon[data.icon] : data.icon;
9702
9647
  if (!hasChild) {
9703
9648
  const isExternal = isExternalLink(data.path);
9704
- return /* @__PURE__ */ jsx(NavLi5, { className: megaMenuClasses.li, children: /* @__PURE__ */ jsxs(
9649
+ return /* @__PURE__ */ jsx(NavLi4, { className: megaMenuClasses.li, children: /* @__PURE__ */ jsxs(
9705
9650
  NavLink,
9706
9651
  {
9707
9652
  href: data.path,
@@ -9710,13 +9655,13 @@ function MegaMenuList3({ data, render, slotProps, enabledRootRedirect }) {
9710
9655
  target: isExternal ? "_blank" : void 0,
9711
9656
  rel: isExternal ? "noopener noreferrer" : void 0,
9712
9657
  children: [
9713
- icon && /* @__PURE__ */ jsx(IconWrapper5, { className: megaMenuClasses.icon, children: icon }),
9658
+ icon && /* @__PURE__ */ jsx(IconWrapper4, { className: megaMenuClasses.icon, children: icon }),
9714
9659
  /* @__PURE__ */ jsx("span", { className: megaMenuClasses.title, children: data.title })
9715
9660
  ]
9716
9661
  }
9717
9662
  ) });
9718
9663
  }
9719
- return /* @__PURE__ */ jsxs(NavLi5, { className: megaMenuClasses.li, children: [
9664
+ return /* @__PURE__ */ jsxs(NavLi4, { className: megaMenuClasses.li, children: [
9720
9665
  /* @__PURE__ */ jsxs(
9721
9666
  NavButton3,
9722
9667
  {
@@ -9730,13 +9675,13 @@ function MegaMenuList3({ data, render, slotProps, enabledRootRedirect }) {
9730
9675
  disabled: data.disabled,
9731
9676
  onClick: handleToggle,
9732
9677
  children: [
9733
- icon && /* @__PURE__ */ jsx(IconWrapper5, { className: megaMenuClasses.icon, children: icon }),
9678
+ icon && /* @__PURE__ */ jsx(IconWrapper4, { className: megaMenuClasses.icon, children: icon }),
9734
9679
  /* @__PURE__ */ jsx("span", { className: megaMenuClasses.title, children: data.title }),
9735
9680
  /* @__PURE__ */ jsx(ArrowIcon4, { open, className: megaMenuClasses.arrow })
9736
9681
  ]
9737
9682
  }
9738
9683
  ),
9739
- /* @__PURE__ */ jsx(Collapse, { in: open, unmountOnExit: true, children: /* @__PURE__ */ jsx(CollapseContent, { children: data.children?.map((section, idx) => /* @__PURE__ */ jsxs(Box20, { children: [
9684
+ /* @__PURE__ */ jsx(Collapse, { in: open, unmountOnExit: true, children: /* @__PURE__ */ jsx(CollapseContent, { children: data.children?.map((section, idx) => /* @__PURE__ */ jsxs(Box19, { children: [
9740
9685
  section.subheader && /* @__PURE__ */ jsx(SectionHeader3, { className: megaMenuClasses.subheader, children: section.subheader }),
9741
9686
  /* @__PURE__ */ jsx(Stack, { children: section.items.map((item) => {
9742
9687
  const itemActive = isActiveLink(pathname, item.path);
@@ -9771,12 +9716,12 @@ function MegaMenuMobile({
9771
9716
  const theme = useTheme();
9772
9717
  const cssVars = { ...megaMenuCssVars(theme, "mobile"), ...overridesVars };
9773
9718
  return /* @__PURE__ */ jsx(
9774
- Nav5,
9719
+ Nav4,
9775
9720
  {
9776
9721
  className: cn(megaMenuClasses.root, megaMenuClasses.mobile, className),
9777
9722
  sx: [{ ...cssVars }, ...Array.isArray(sx) ? sx : [sx]],
9778
9723
  ...other,
9779
- children: /* @__PURE__ */ jsx(NavUl5, { className: megaMenuClasses.ul, children: data.map((item) => /* @__PURE__ */ jsx(
9724
+ children: /* @__PURE__ */ jsx(NavUl4, { className: megaMenuClasses.ul, children: data.map((item) => /* @__PURE__ */ jsx(
9780
9725
  MegaMenuList3,
9781
9726
  {
9782
9727
  data: item,
@@ -9789,1101 +9734,6 @@ function MegaMenuMobile({
9789
9734
  }
9790
9735
  );
9791
9736
  }
9792
- var ScrollSpyContext = createContext({
9793
- activeId: null,
9794
- registerSection: () => {
9795
- },
9796
- unregisterSection: () => {
9797
- }
9798
- });
9799
- function useScrollSpy() {
9800
- return useContext(ScrollSpyContext);
9801
- }
9802
- function ScrollSpyProvider({
9803
- children,
9804
- offset = 80,
9805
- root = null,
9806
- headingSelector = "h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]",
9807
- containerRef
9808
- }) {
9809
- const [activeId, setActiveId] = useState(null);
9810
- const sectionsRef = useRef(/* @__PURE__ */ new Map());
9811
- const observerRef = useRef(null);
9812
- const wrapperRef = useRef(null);
9813
- const createObserver = useCallback(() => {
9814
- observerRef.current?.disconnect();
9815
- const observer = new IntersectionObserver(
9816
- (entries) => {
9817
- const visible = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);
9818
- if (visible.length > 0) {
9819
- setActiveId(visible[0].target.id);
9820
- }
9821
- },
9822
- {
9823
- root,
9824
- rootMargin: `-${offset}px 0px -60% 0px`,
9825
- threshold: 0
9826
- }
9827
- );
9828
- sectionsRef.current.forEach((element) => observer.observe(element));
9829
- observerRef.current = observer;
9830
- }, [offset, root]);
9831
- useEffect(() => {
9832
- if (!headingSelector) return void 0;
9833
- const timer = setTimeout(() => {
9834
- const container = containerRef?.current ?? wrapperRef.current;
9835
- if (!container) return;
9836
- const headings = container.querySelectorAll(headingSelector);
9837
- headings.forEach((heading) => {
9838
- if (heading.id) {
9839
- sectionsRef.current.set(heading.id, heading);
9840
- }
9841
- });
9842
- createObserver();
9843
- }, 100);
9844
- return () => {
9845
- clearTimeout(timer);
9846
- observerRef.current?.disconnect();
9847
- };
9848
- }, [headingSelector, containerRef, createObserver]);
9849
- useEffect(() => {
9850
- if (!headingSelector) return void 0;
9851
- const container = containerRef?.current ?? wrapperRef.current;
9852
- if (!container) return void 0;
9853
- const mutationObserver = new MutationObserver(() => {
9854
- const headings = container.querySelectorAll(headingSelector);
9855
- let changed = false;
9856
- headings.forEach((heading) => {
9857
- if (heading.id && !sectionsRef.current.has(heading.id)) {
9858
- sectionsRef.current.set(heading.id, heading);
9859
- changed = true;
9860
- }
9861
- });
9862
- if (changed) {
9863
- createObserver();
9864
- }
9865
- });
9866
- mutationObserver.observe(container, { childList: true, subtree: true });
9867
- return () => mutationObserver.disconnect();
9868
- }, [headingSelector, containerRef, createObserver]);
9869
- const registerSection = useCallback((id, element) => {
9870
- sectionsRef.current.set(id, element);
9871
- observerRef.current?.observe(element);
9872
- }, []);
9873
- const unregisterSection = useCallback((id) => {
9874
- const element = sectionsRef.current.get(id);
9875
- if (element) observerRef.current?.unobserve(element);
9876
- sectionsRef.current.delete(id);
9877
- }, []);
9878
- return /* @__PURE__ */ jsx(ScrollSpyContext.Provider, { value: { activeId, registerSection, unregisterSection }, children: /* @__PURE__ */ jsx("div", { ref: wrapperRef, children }) });
9879
- }
9880
- function ScrollSpySection({ id, children, sx }) {
9881
- const ref = useRef(null);
9882
- const { registerSection, unregisterSection } = useScrollSpy();
9883
- useEffect(() => {
9884
- const element = ref.current;
9885
- if (!element) return void 0;
9886
- registerSection(id, element);
9887
- return () => unregisterSection(id);
9888
- }, [id, registerSection, unregisterSection]);
9889
- return /* @__PURE__ */ jsx(Box20, { ref, id, sx, children });
9890
- }
9891
- function DocLayout({ sidebar, sectionNav, children, sx }) {
9892
- return /* @__PURE__ */ jsxs(
9893
- Box20,
9894
- {
9895
- sx: {
9896
- display: "flex",
9897
- width: "100%",
9898
- ...sx
9899
- },
9900
- children: [
9901
- sidebar && /* @__PURE__ */ jsx(
9902
- Box20,
9903
- {
9904
- component: "nav",
9905
- sx: {
9906
- width: 272,
9907
- flexShrink: 0,
9908
- display: { xs: "none", md: "block" },
9909
- position: "sticky",
9910
- top: 80,
9911
- alignSelf: "flex-start",
9912
- maxHeight: "calc(100vh - 100px)",
9913
- overflowY: "auto",
9914
- pr: 3,
9915
- borderRight: 1,
9916
- borderColor: "divider"
9917
- },
9918
- children: sidebar
9919
- }
9920
- ),
9921
- /* @__PURE__ */ jsx(
9922
- Box20,
9923
- {
9924
- component: "main",
9925
- sx: {
9926
- flex: 1,
9927
- minWidth: 0,
9928
- px: { xs: 2, md: 4 }
9929
- },
9930
- children
9931
- }
9932
- ),
9933
- sectionNav && /* @__PURE__ */ jsx(
9934
- Box20,
9935
- {
9936
- component: "aside",
9937
- sx: {
9938
- width: 240,
9939
- flexShrink: 0,
9940
- display: { xs: "none", lg: "block" },
9941
- position: "sticky",
9942
- top: 80,
9943
- alignSelf: "flex-start",
9944
- maxHeight: "calc(100vh - 100px)",
9945
- overflowY: "auto",
9946
- pl: 3
9947
- },
9948
- children: sectionNav
9949
- }
9950
- )
9951
- ]
9952
- }
9953
- );
9954
- }
9955
- function DocSidebar({ items, activeId, onItemClick, title }) {
9956
- return /* @__PURE__ */ jsxs(Box20, { children: [
9957
- title && /* @__PURE__ */ jsx(
9958
- Typography5,
9959
- {
9960
- variant: "subtitle2",
9961
- sx: {
9962
- px: 1.5,
9963
- pt: 0.5,
9964
- pb: 2,
9965
- fontWeight: 700,
9966
- fontSize: "0.8125rem",
9967
- color: "text.secondary",
9968
- letterSpacing: "0.01em"
9969
- },
9970
- children: title
9971
- }
9972
- ),
9973
- /* @__PURE__ */ jsx(List2, { dense: true, disablePadding: true, children: items.map((item) => /* @__PURE__ */ jsx(SidebarNode, { item, activeId, onItemClick, depth: 0 }, item.id)) })
9974
- ] });
9975
- }
9976
- function SidebarNode({
9977
- item,
9978
- activeId,
9979
- onItemClick,
9980
- depth
9981
- }) {
9982
- const hasChildren = item.children && item.children.length > 0;
9983
- const isActive = activeId === item.id;
9984
- const [open, setOpen] = useState(true);
9985
- const isCategory = hasChildren && !item.href;
9986
- return /* @__PURE__ */ jsxs(Fragment, { children: [
9987
- /* @__PURE__ */ jsx(
9988
- ListItemButton,
9989
- {
9990
- selected: isActive,
9991
- onClick: () => {
9992
- if (hasChildren) setOpen(!open);
9993
- onItemClick?.(item);
9994
- },
9995
- sx: {
9996
- pl: 1.5 + depth * 1.5,
9997
- pr: 1,
9998
- py: isCategory ? 0.75 : 0.5,
9999
- borderRadius: 1,
10000
- mx: 0.5,
10001
- mb: 0.25,
10002
- minHeight: 0,
10003
- ...isCategory && {
10004
- mt: depth === 0 ? 1 : 0.5
10005
- },
10006
- ...isActive && {
10007
- bgcolor: (theme) => alpha(theme.palette.primary.main, 0.08),
10008
- color: "primary.main"
10009
- }
10010
- },
10011
- children: /* @__PURE__ */ jsx(
10012
- ListItemText,
10013
- {
10014
- primary: item.label,
10015
- slotProps: {
10016
- primary: {
10017
- variant: "body2",
10018
- noWrap: true,
10019
- sx: {
10020
- fontWeight: isCategory ? 600 : isActive ? 600 : 400,
10021
- fontSize: "0.8125rem",
10022
- ...isCategory && { color: "text.primary" }
10023
- }
10024
- }
10025
- }
10026
- }
10027
- )
10028
- }
10029
- ),
10030
- hasChildren && /* @__PURE__ */ jsx(Collapse, { in: open, children: /* @__PURE__ */ jsx(List2, { dense: true, disablePadding: true, children: item.children.map((child) => /* @__PURE__ */ jsx(
10031
- SidebarNode,
10032
- {
10033
- item: child,
10034
- activeId,
10035
- onItemClick,
10036
- depth: depth + 1
10037
- },
10038
- child.id
10039
- )) }) })
10040
- ] });
10041
- }
10042
- function DocSectionNav({ headings, title = "On this page" }) {
10043
- const { activeId } = useScrollSpy();
10044
- const handleClick = useCallback((e, id) => {
10045
- e.preventDefault();
10046
- const element = document.getElementById(id);
10047
- if (element) {
10048
- element.scrollIntoView({ behavior: "smooth", block: "start" });
10049
- window.history.replaceState(null, "", `#${id}`);
10050
- }
10051
- }, []);
10052
- if (headings.length === 0) return null;
10053
- return /* @__PURE__ */ jsxs(Box20, { children: [
10054
- /* @__PURE__ */ jsx(
10055
- Typography5,
10056
- {
10057
- variant: "overline",
10058
- sx: {
10059
- display: "block",
10060
- mb: 2,
10061
- color: "text.secondary",
10062
- fontSize: "0.6875rem",
10063
- fontWeight: 700,
10064
- letterSpacing: "0.08em"
10065
- },
10066
- children: title
10067
- }
10068
- ),
10069
- /* @__PURE__ */ jsx(
10070
- Box20,
10071
- {
10072
- component: "nav",
10073
- sx: {
10074
- position: "relative",
10075
- borderLeft: 1,
10076
- borderColor: "divider"
10077
- },
10078
- children: headings.map((heading) => {
10079
- const isActive = activeId === heading.id;
10080
- const indent = (heading.level - 2) * 1.5;
10081
- return /* @__PURE__ */ jsx(
10082
- Box20,
10083
- {
10084
- component: "a",
10085
- href: `#${heading.id}`,
10086
- onClick: (e) => handleClick(e, heading.id),
10087
- sx: {
10088
- display: "block",
10089
- py: 0.75,
10090
- pl: indent + 2,
10091
- pr: 1,
10092
- ml: "-1px",
10093
- fontSize: "0.8125rem",
10094
- lineHeight: 1.5,
10095
- textDecoration: "none",
10096
- color: isActive ? "primary.main" : "text.disabled",
10097
- fontWeight: isActive ? 600 : 400,
10098
- borderLeft: 2,
10099
- borderColor: isActive ? "primary.main" : "transparent",
10100
- transition: "color 0.2s ease, border-color 0.2s ease",
10101
- cursor: "pointer",
10102
- "&:hover": {
10103
- color: isActive ? "primary.main" : "text.primary",
10104
- backgroundColor: (theme) => alpha(theme.palette.action.hover, 0.04),
10105
- borderRadius: "0 6px 6px 0"
10106
- }
10107
- },
10108
- children: heading.text
10109
- },
10110
- heading.id
10111
- );
10112
- })
10113
- }
10114
- )
10115
- ] });
10116
- }
10117
-
10118
- // src/components/content-renderer/classes.ts
10119
- var PREFIX = "prism-content";
10120
- var contentClasses = {
10121
- root: `${PREFIX}__root`,
10122
- compact: `${PREFIX}__compact`,
10123
- tiptap: `${PREFIX}__tiptap`,
10124
- markdown: `${PREFIX}__markdown`,
10125
- image: `${PREFIX}__image`,
10126
- link: `${PREFIX}__link`,
10127
- checkbox: `${PREFIX}__checkbox`,
10128
- codeBlock: `${PREFIX}__code-block`,
10129
- codeBlockTitle: `${PREFIX}__code-block-title`,
10130
- codeBlockCopy: `${PREFIX}__code-block-copy`,
10131
- codeBlockHighlight: `${PREFIX}__code-block-highlight`,
10132
- codeInline: `${PREFIX}__code-inline`,
10133
- spoiler: `${PREFIX}__spoiler`,
10134
- admonition: `${PREFIX}__admonition`,
10135
- admonitionNote: `${PREFIX}__admonition-note`,
10136
- admonitionTip: `${PREFIX}__admonition-tip`,
10137
- admonitionWarning: `${PREFIX}__admonition-warning`,
10138
- admonitionDanger: `${PREFIX}__admonition-danger`,
10139
- admonitionInfo: `${PREFIX}__admonition-info`,
10140
- admonitionCaution: `${PREFIX}__admonition-caution`,
10141
- admonitionTitle: `${PREFIX}__admonition-title`,
10142
- admonitionContent: `${PREFIX}__admonition-content`,
10143
- tabs: `${PREFIX}__tabs`,
10144
- tabsHeader: `${PREFIX}__tabs-header`,
10145
- tabsTab: `${PREFIX}__tabs-tab`,
10146
- tabsTabActive: `${PREFIX}__tabs-tab-active`,
10147
- tabsPanel: `${PREFIX}__tabs-panel`,
10148
- figure: `${PREFIX}__figure`,
10149
- figcaption: `${PREFIX}__figcaption`,
10150
- kbd: `${PREFIX}__kbd`
10151
- };
10152
-
10153
- // src/components/content-renderer/styles.ts
10154
- var MARGIN = "0.75em";
10155
- var CODE_FONT = "'JetBrains Mono', 'Fira Code', 'Cascadia Code', Menlo, Monaco, 'Courier New', monospace";
10156
- var ContentRoot = styled("div")(({ theme }) => ({
10157
- // General spacing between adjacent elements
10158
- "> * + *": {
10159
- marginTop: 0,
10160
- marginBottom: MARGIN
10161
- },
10162
- // ─── Headings ───────────────────────────────────────────────
10163
- "& h1, & h2, & h3, & h4, & h5, & h6": {
10164
- scrollMarginTop: 100
10165
- // Account for sticky header on anchor jump
10166
- },
10167
- // First heading in content should not have excessive top margin
10168
- "& > h1:first-of-type, & > h2:first-of-type, & > h3:first-of-type": {
10169
- marginTop: 0
10170
- },
10171
- h1: { ...theme.typography.h1, marginTop: 40, marginBottom: 12 },
10172
- h2: { ...theme.typography.h2, marginTop: 40, marginBottom: 12 },
10173
- h3: { ...theme.typography.h3, marginTop: 32, marginBottom: 8 },
10174
- h4: { ...theme.typography.h4, marginTop: 24, marginBottom: 8 },
10175
- h5: { ...theme.typography.h5, marginTop: 24, marginBottom: 8 },
10176
- h6: { ...theme.typography.h6, marginTop: 24, marginBottom: 8 },
10177
- // ─── Paragraph ──────────────────────────────────────────────
10178
- p: {
10179
- ...theme.typography.body1,
10180
- marginBottom: "1.25rem",
10181
- lineHeight: 1.8
10182
- },
10183
- // ─── Horizontal rule ───────────────────────────────────────
10184
- hr: {
10185
- flexShrink: 0,
10186
- borderWidth: 0,
10187
- margin: "2em 0",
10188
- borderStyle: "solid",
10189
- borderBottomWidth: "thin",
10190
- borderColor: theme.palette.divider
10191
- },
10192
- // ─── Images ─────────────────────────────────────────────────
10193
- [`& .${contentClasses.image}`]: {
10194
- width: "100%",
10195
- height: "auto",
10196
- maxWidth: "100%",
10197
- margin: "auto auto 1.25em",
10198
- borderRadius: Number(theme.shape.borderRadius) * 2
10199
- },
10200
- // Plain img fallback
10201
- "& img:not([class])": {
10202
- maxWidth: "100%",
10203
- height: "auto",
10204
- borderRadius: Number(theme.shape.borderRadius) * 2,
10205
- marginBottom: "1.25em"
10206
- },
10207
- // ─── Links ──────────────────────────────────────────────────
10208
- "& a": {
10209
- color: theme.palette.primary.main,
10210
- textDecoration: "none",
10211
- "&:hover": {
10212
- textDecoration: "underline"
10213
- }
10214
- },
10215
- // ─── Lists ──────────────────────────────────────────────────
10216
- "& ul": {
10217
- listStyleType: "disc"
10218
- },
10219
- "& ul, & ol": {
10220
- paddingLeft: 24,
10221
- marginBottom: "1.25rem",
10222
- "& > li": {
10223
- lineHeight: 2,
10224
- // Markdown wraps every list-item body in a `<p>`. With
10225
- // `display: inline-block` (the previous setting), Chromium
10226
- // refuses to render the `<li>`'s ::marker at all — the
10227
- // disc/decimal vanishes and the list looks like a series of
10228
- // bullet-less paragraphs. `display: inline` collapses the
10229
- // `<p>` into inline flow so the marker positions normally;
10230
- // `margin: 0` keeps the LI height tight against the marker
10231
- // baseline. Multi-paragraph list items (rare here, but
10232
- // possible) still render — subsequent `<p>` siblings get a
10233
- // line break by the inline-flow rules.
10234
- "& > p": {
10235
- margin: 0,
10236
- display: "inline"
10237
- }
10238
- }
10239
- },
10240
- // Nested lists
10241
- "& ul ul, & ol ol, & ul ol, & ol ul": {
10242
- marginBottom: 0
10243
- },
10244
- // ─── Task list (TipTap taskList / GFM checkboxes) ──────────
10245
- '& ul[data-type="taskList"]': {
10246
- listStyle: "none",
10247
- paddingLeft: 4,
10248
- "& li": {
10249
- display: "flex",
10250
- alignItems: "flex-start",
10251
- gap: 8,
10252
- "& > label": {
10253
- marginTop: 4
10254
- }
10255
- }
10256
- },
10257
- // ─── Blockquote ─────────────────────────────────────────────
10258
- "& blockquote": {
10259
- lineHeight: 1.6,
10260
- fontSize: "1em",
10261
- margin: "24px 0",
10262
- position: "relative",
10263
- padding: theme.spacing(2.5, 3, 2.5, 7),
10264
- color: theme.palette.text.secondary,
10265
- borderLeft: `4px solid ${theme.palette.primary.main}`,
10266
- borderRadius: Number(theme.shape.borderRadius) * 2,
10267
- backgroundColor: alpha(theme.palette.primary.main, 0.04),
10268
- "& p": {
10269
- margin: 0,
10270
- fontSize: "inherit"
10271
- },
10272
- "& p + p": {
10273
- marginTop: 8
10274
- },
10275
- "&::before": {
10276
- left: 16,
10277
- top: 8,
10278
- display: "block",
10279
- fontSize: "2.5em",
10280
- content: '"\\201C"',
10281
- position: "absolute",
10282
- color: alpha(theme.palette.primary.main, 0.3),
10283
- lineHeight: 1
10284
- }
10285
- },
10286
- // ─── Inline code ────────────────────────────────────────────
10287
- [`& .${contentClasses.codeInline}`]: {
10288
- padding: theme.spacing(0.25, 0.75),
10289
- color: theme.palette.text.secondary,
10290
- fontSize: theme.typography.body2.fontSize,
10291
- borderRadius: Number(theme.shape.borderRadius) / 2,
10292
- backgroundColor: alpha(theme.palette.grey[500], 0.2),
10293
- fontFamily: CODE_FONT
10294
- },
10295
- // Fallback for code not inside pre
10296
- "& :not(pre) > code:not([class])": {
10297
- padding: theme.spacing(0.25, 0.75),
10298
- color: theme.palette.text.secondary,
10299
- fontSize: theme.typography.body2.fontSize,
10300
- borderRadius: Number(theme.shape.borderRadius) / 2,
10301
- backgroundColor: alpha(theme.palette.grey[500], 0.2),
10302
- fontFamily: CODE_FONT
10303
- },
10304
- // ─── Code block ─────────────────────────────────────────────
10305
- [`& .${contentClasses.codeBlock}`]: {
10306
- position: "relative",
10307
- marginBottom: "1.25rem",
10308
- "& pre": {
10309
- overflowX: "auto",
10310
- padding: theme.spacing(3),
10311
- color: theme.palette.common.white,
10312
- borderRadius: Number(theme.shape.borderRadius) * 1.5,
10313
- fontFamily: CODE_FONT,
10314
- fontSize: theme.typography.body2.fontSize,
10315
- lineHeight: 1.7,
10316
- backgroundColor: theme.palette.grey[900],
10317
- ...theme.palette.mode === "dark" && {
10318
- backgroundColor: alpha(theme.palette.grey[800], 0.9)
10319
- },
10320
- "& code": {
10321
- fontSize: "inherit",
10322
- fontFamily: "inherit",
10323
- backgroundColor: "transparent",
10324
- padding: 0,
10325
- borderRadius: 0,
10326
- color: "inherit"
10327
- }
10328
- }
10329
- },
10330
- // Fallback for bare pre blocks
10331
- "& pre:not([class])": {
10332
- overflowX: "auto",
10333
- padding: theme.spacing(3),
10334
- color: theme.palette.common.white,
10335
- borderRadius: Number(theme.shape.borderRadius) * 1.5,
10336
- fontFamily: CODE_FONT,
10337
- fontSize: theme.typography.body2.fontSize,
10338
- lineHeight: 1.7,
10339
- backgroundColor: theme.palette.grey[900],
10340
- marginBottom: "1.25rem",
10341
- ...theme.palette.mode === "dark" && {
10342
- backgroundColor: alpha(theme.palette.grey[800], 0.9)
10343
- },
10344
- "& code": {
10345
- fontSize: "inherit",
10346
- fontFamily: "inherit",
10347
- backgroundColor: "transparent",
10348
- padding: 0,
10349
- color: "inherit"
10350
- }
10351
- },
10352
- // ─── Table ──────────────────────────────────────────────────
10353
- "& table": {
10354
- width: "100%",
10355
- borderCollapse: "collapse",
10356
- fontSize: theme.typography.body2.fontSize,
10357
- border: `1px solid ${theme.palette.divider}`,
10358
- marginBottom: "1.25rem",
10359
- "& th, & td": {
10360
- padding: theme.spacing(1, 1.5),
10361
- border: `1px solid ${theme.palette.divider}`,
10362
- verticalAlign: "top"
10363
- },
10364
- "& th": {
10365
- fontWeight: 700,
10366
- backgroundColor: alpha(theme.palette.grey[500], 0.08)
10367
- },
10368
- "& tbody tr:nth-of-type(odd)": {
10369
- backgroundColor: alpha(theme.palette.grey[500], 0.04)
10370
- }
10371
- },
10372
- // ─── Checkbox (GFM task lists) ──────────────────────────────
10373
- [`& .${contentClasses.checkbox}`]: {
10374
- cursor: "pointer",
10375
- position: "relative",
10376
- "&:before": {
10377
- content: '""',
10378
- top: -2,
10379
- left: -2,
10380
- width: 17,
10381
- height: 17,
10382
- borderRadius: 3,
10383
- position: "absolute",
10384
- backgroundColor: theme.palette.grey[300],
10385
- ...theme.palette.mode === "dark" && {
10386
- backgroundColor: theme.palette.grey[700]
10387
- }
10388
- },
10389
- "&:checked": {
10390
- "&:before": {
10391
- backgroundColor: theme.palette.primary.main
10392
- },
10393
- "&:after": {
10394
- top: 1,
10395
- left: 5,
10396
- width: 4,
10397
- height: 9,
10398
- content: '""',
10399
- position: "absolute",
10400
- borderStyle: "solid",
10401
- transform: "rotate(45deg)",
10402
- borderWidth: "0 2px 2px 0",
10403
- borderColor: theme.palette.common.white
10404
- }
10405
- }
10406
- },
10407
- // ─── Details / Summary ──────────────────────────────────────
10408
- "& details": {
10409
- marginBottom: "1rem",
10410
- "& summary": {
10411
- cursor: "pointer",
10412
- fontWeight: 600,
10413
- marginBottom: 8
10414
- }
10415
- },
10416
- // ─── Definition list ────────────────────────────────────────
10417
- "& dl": {
10418
- marginBottom: "1.25rem",
10419
- "& dt": {
10420
- fontWeight: 700,
10421
- marginTop: 12
10422
- },
10423
- "& dd": {
10424
- marginLeft: 24,
10425
- marginBottom: 4
10426
- }
10427
- },
10428
- // ─── Kbd (keyboard shortcut) ────────────────────────────────
10429
- "& kbd": {
10430
- display: "inline-block",
10431
- padding: theme.spacing(0.25, 0.5),
10432
- fontSize: "0.8em",
10433
- fontFamily: CODE_FONT,
10434
- borderRadius: 4,
10435
- border: `1px solid ${theme.palette.divider}`,
10436
- boxShadow: `0 1px 0 ${alpha(theme.palette.grey[500], 0.1)}`,
10437
- backgroundColor: alpha(theme.palette.grey[500], 0.06)
10438
- },
10439
- // ─── Mark (highlight) ──────────────────────────────────────
10440
- "& mark": {
10441
- padding: theme.spacing(0, 0.5),
10442
- borderRadius: 2,
10443
- backgroundColor: alpha(theme.palette.warning.main, 0.3)
10444
- },
10445
- // ─── Sup / Sub ──────────────────────────────────────────────
10446
- "& sup, & sub": {
10447
- fontSize: "0.75em"
10448
- },
10449
- // ─── Spoiler (||hidden text||) ────────────────────────────
10450
- [`& .${contentClasses.spoiler}`]: {
10451
- backgroundColor: theme.palette.text.primary,
10452
- color: theme.palette.text.primary,
10453
- borderRadius: 4,
10454
- padding: theme.spacing(0, 0.5),
10455
- cursor: "pointer",
10456
- transition: "all 0.15s ease",
10457
- userSelect: "none",
10458
- '&:hover, &[data-revealed="true"]': {
10459
- backgroundColor: "transparent",
10460
- color: "inherit",
10461
- userSelect: "auto"
10462
- }
10463
- },
10464
- // ─── Admonition (callout) ─────────────────────────────────
10465
- [`& .${contentClasses.admonition}`]: {
10466
- margin: theme.spacing(2, 0),
10467
- padding: theme.spacing(1.5, 2),
10468
- borderRadius: theme.shape.borderRadius,
10469
- borderLeft: `4px solid ${theme.palette.divider}`,
10470
- backgroundColor: alpha(theme.palette.text.primary, 0.04),
10471
- "& > :last-child": { marginBottom: 0 }
10472
- },
10473
- [`& .${contentClasses.admonitionTitle}`]: {
10474
- fontWeight: 600,
10475
- textTransform: "uppercase",
10476
- fontSize: "0.75rem",
10477
- letterSpacing: "0.05em",
10478
- marginBottom: theme.spacing(0.75),
10479
- opacity: 0.85
10480
- },
10481
- [`& .${contentClasses.admonitionContent}`]: {
10482
- "& p:last-child": { marginBottom: 0 }
10483
- },
10484
- [`& .${contentClasses.admonitionNote}`]: {
10485
- borderLeftColor: theme.palette.text.secondary,
10486
- backgroundColor: alpha(theme.palette.text.primary, 0.04)
10487
- },
10488
- [`& .${contentClasses.admonitionTip}`]: {
10489
- borderLeftColor: theme.palette.success.main,
10490
- backgroundColor: alpha(theme.palette.success.main, 0.08)
10491
- },
10492
- [`& .${contentClasses.admonitionWarning}`]: {
10493
- borderLeftColor: theme.palette.warning.main,
10494
- backgroundColor: alpha(theme.palette.warning.main, 0.08)
10495
- },
10496
- [`& .${contentClasses.admonitionDanger}`]: {
10497
- borderLeftColor: theme.palette.error.main,
10498
- backgroundColor: alpha(theme.palette.error.main, 0.08)
10499
- },
10500
- [`& .${contentClasses.admonitionInfo}`]: {
10501
- borderLeftColor: theme.palette.info.main,
10502
- backgroundColor: alpha(theme.palette.info.main, 0.08)
10503
- },
10504
- [`& .${contentClasses.admonitionCaution}`]: {
10505
- borderLeftColor: theme.palette.warning.dark,
10506
- backgroundColor: alpha(theme.palette.warning.dark, 0.08)
10507
- },
10508
- // ─── Tabs ───────────────────────────────────────────────────
10509
- [`& .${contentClasses.tabs}`]: {
10510
- margin: theme.spacing(2, 0),
10511
- border: `1px solid ${theme.palette.divider}`,
10512
- borderRadius: theme.shape.borderRadius,
10513
- overflow: "hidden"
10514
- },
10515
- [`& .${contentClasses.tabsHeader}`]: {
10516
- display: "flex",
10517
- gap: 0,
10518
- borderBottom: `1px solid ${theme.palette.divider}`,
10519
- backgroundColor: alpha(theme.palette.text.primary, 0.03)
10520
- },
10521
- [`& .${contentClasses.tabsTab}`]: {
10522
- appearance: "none",
10523
- background: "transparent",
10524
- border: "none",
10525
- padding: theme.spacing(1, 2),
10526
- fontFamily: "inherit",
10527
- fontSize: "0.8125rem",
10528
- fontWeight: 500,
10529
- color: theme.palette.text.secondary,
10530
- cursor: "pointer",
10531
- borderBottom: "2px solid transparent",
10532
- transition: "all 0.15s ease",
10533
- "&:hover": { color: theme.palette.text.primary }
10534
- },
10535
- [`& .${contentClasses.tabsTabActive}`]: {
10536
- color: theme.palette.text.primary,
10537
- borderBottomColor: theme.palette.primary.main
10538
- },
10539
- [`& .${contentClasses.tabsPanel}`]: {
10540
- padding: theme.spacing(2),
10541
- "& > :first-of-type": { marginTop: 0 },
10542
- "& > :last-child": { marginBottom: 0 }
10543
- },
10544
- // ─── Code block — title + copy button ───────────────────────
10545
- [`& .${contentClasses.codeBlockTitle}`]: {
10546
- display: "flex",
10547
- alignItems: "center",
10548
- justifyContent: "space-between",
10549
- gap: theme.spacing(1),
10550
- padding: theme.spacing(0.75, 1.5),
10551
- fontSize: "0.75rem",
10552
- fontFamily: 'ui-monospace, "SF Mono", Menlo, Consolas, monospace',
10553
- color: theme.palette.text.secondary,
10554
- backgroundColor: alpha(theme.palette.text.primary, 0.06),
10555
- borderTopLeftRadius: theme.shape.borderRadius,
10556
- borderTopRightRadius: theme.shape.borderRadius
10557
- },
10558
- [`& .${contentClasses.codeBlockCopy}`]: {
10559
- appearance: "none",
10560
- background: "transparent",
10561
- border: "none",
10562
- color: "inherit",
10563
- cursor: "pointer",
10564
- padding: theme.spacing(0.25, 0.75),
10565
- fontSize: "0.875rem",
10566
- borderRadius: theme.shape.borderRadius,
10567
- "&:hover": { backgroundColor: alpha(theme.palette.text.primary, 0.08) }
10568
- },
10569
- // ─── Figure ─────────────────────────────────────────────────
10570
- [`& .${contentClasses.figure}`]: {
10571
- margin: theme.spacing(2, 0),
10572
- textAlign: "center"
10573
- },
10574
- [`& .${contentClasses.figcaption}`]: {
10575
- fontSize: "0.8125rem",
10576
- color: theme.palette.text.secondary,
10577
- marginTop: theme.spacing(0.75)
10578
- },
10579
- // ─── kbd ────────────────────────────────────────────────────
10580
- [`& .${contentClasses.kbd}`]: {
10581
- display: "inline-block",
10582
- padding: theme.spacing(0, 0.5),
10583
- fontFamily: 'ui-monospace, "SF Mono", Menlo, Consolas, monospace',
10584
- fontSize: "0.8em",
10585
- color: theme.palette.text.primary,
10586
- border: `1px solid ${theme.palette.divider}`,
10587
- borderBottomWidth: 2,
10588
- borderRadius: 4,
10589
- backgroundColor: alpha(theme.palette.text.primary, 0.04),
10590
- boxShadow: `0 1px 0 ${alpha(theme.palette.text.primary, 0.15)}`,
10591
- minWidth: "1.5em",
10592
- textAlign: "center"
10593
- },
10594
- // ─── Compact mode (chat messages, comments, etc.) ─────────
10595
- [`&.${contentClasses.compact}`]: {
10596
- "> * + *": { marginTop: 0, marginBottom: 2 },
10597
- "& > :first-of-type:not(p)": { marginTop: 4 },
10598
- "& h1, & h2, & h3, & h4, & h5, & h6": { marginTop: 0, marginBottom: 2 },
10599
- h1: { fontSize: "1.25rem", fontWeight: 600, marginTop: 0, marginBottom: 2 },
10600
- h2: { fontSize: "1.125rem", fontWeight: 600, marginTop: 0, marginBottom: 2 },
10601
- h3: { fontSize: "1rem", fontWeight: 600, marginTop: 0, marginBottom: 2 },
10602
- "h4, h5, h6": { fontSize: "0.875rem", fontWeight: 600, marginTop: 0, marginBottom: 2 },
10603
- p: {
10604
- fontSize: "0.8125rem",
10605
- lineHeight: 1.5,
10606
- marginBottom: 2,
10607
- "&:last-child": { marginBottom: 0 }
10608
- },
10609
- hr: { margin: "4px 0" },
10610
- "& blockquote": {
10611
- margin: "4px 0",
10612
- padding: theme.spacing(0.5, 0, 0.5, 1.5),
10613
- borderRadius: 0,
10614
- backgroundColor: "transparent",
10615
- "&::before": { display: "none" }
10616
- },
10617
- "& ul, & ol": {
10618
- paddingLeft: 20,
10619
- marginBottom: 2,
10620
- "& > li": { lineHeight: 1.5, fontSize: "0.8125rem" }
10621
- },
10622
- "& img:not([class])": { marginBottom: 4 },
10623
- [`& .${contentClasses.codeBlock}`]: { marginBottom: 4 },
10624
- [`& .${contentClasses.codeBlock} pre, & pre:not([class])`]: {
10625
- padding: theme.spacing(1.5),
10626
- fontSize: "0.75rem",
10627
- lineHeight: 1.5,
10628
- marginBottom: 4
10629
- },
10630
- [`& .${contentClasses.codeInline}, & :not(pre) > code:not([class])`]: {
10631
- fontSize: "0.75rem"
10632
- },
10633
- "& table": {
10634
- fontSize: "0.75rem",
10635
- marginBottom: 4
10636
- }
10637
- }
10638
- }));
10639
- var customNodeRegistry = /* @__PURE__ */ new Map();
10640
- function registerTipTapNode(type, component) {
10641
- customNodeRegistry.set(type, component);
10642
- }
10643
- var TipTapContext = createContext({});
10644
- function renderMarks(text, marks = [], ctx) {
10645
- return marks.reduce((acc, mark) => {
10646
- switch (mark.type) {
10647
- case "bold":
10648
- return /* @__PURE__ */ jsx("strong", { children: acc });
10649
- case "italic":
10650
- return /* @__PURE__ */ jsx("em", { children: acc });
10651
- case "code":
10652
- return /* @__PURE__ */ jsx("code", { className: contentClasses.codeInline, children: acc });
10653
- case "underline":
10654
- return /* @__PURE__ */ jsx("u", { children: acc });
10655
- case "strike":
10656
- return /* @__PURE__ */ jsx("s", { children: acc });
10657
- case "link":
10658
- return /* @__PURE__ */ jsx("a", { href: mark.attrs?.href, target: mark.attrs?.target ?? "_blank", rel: "noopener noreferrer", children: acc });
10659
- case "internalLink": {
10660
- const to = String(mark.attrs?.to ?? mark.attrs?.href ?? "#");
10661
- const Link6 = ctx?.linkComponent;
10662
- return Link6 ? /* @__PURE__ */ jsx(Link6, { to, className: contentClasses.link, children: acc }) : /* @__PURE__ */ jsx("a", { href: to, children: acc });
10663
- }
10664
- case "highlight":
10665
- return /* @__PURE__ */ jsx("mark", { style: mark.attrs?.color ? { backgroundColor: mark.attrs.color } : void 0, children: acc });
10666
- case "subscript":
10667
- return /* @__PURE__ */ jsx("sub", { children: acc });
10668
- case "superscript":
10669
- return /* @__PURE__ */ jsx("sup", { children: acc });
10670
- case "textStyle":
10671
- return /* @__PURE__ */ jsx("span", { style: { color: mark.attrs?.color }, children: acc });
10672
- case "kbd":
10673
- return /* @__PURE__ */ jsx("kbd", { className: contentClasses.kbd, children: acc });
10674
- default:
10675
- return acc;
10676
- }
10677
- }, text);
10678
- }
10679
- function slugify(nodes) {
10680
- if (!nodes) return void 0;
10681
- const text = nodes.map((n) => n.text ?? "").join("");
10682
- if (!text) return void 0;
10683
- return text.toLowerCase().replace(/[^a-z0-9а-яё]+/gi, "-").replace(/^-|-$/g, "");
10684
- }
10685
- function CodeBlock({ node }) {
10686
- const language = node.attrs?.language;
10687
- const title = node.attrs?.title;
10688
- const html = node.attrs?.html;
10689
- const code = node.content?.map((n) => n.text ?? "").join("\n") ?? "";
10690
- const [copied, setCopied] = useState(false);
10691
- const onCopy = useCallback(() => {
10692
- navigator.clipboard?.writeText(code).then(
10693
- () => {
10694
- setCopied(true);
10695
- setTimeout(() => setCopied(false), 1500);
10696
- },
10697
- () => {
10698
- }
10699
- );
10700
- }, [code]);
10701
- return /* @__PURE__ */ jsxs("div", { className: contentClasses.codeBlock, "data-language": language ?? void 0, children: [
10702
- (title || language) && /* @__PURE__ */ jsxs("div", { className: contentClasses.codeBlockTitle, children: [
10703
- /* @__PURE__ */ jsx("span", { children: title ?? language }),
10704
- /* @__PURE__ */ jsx("button", { type: "button", onClick: onCopy, className: contentClasses.codeBlockCopy, "aria-label": "Copy code", children: copied ? "\u2713" : "\u29C9" })
10705
- ] }),
10706
- html ? (
10707
- // Shiki-rendered HTML is pre-sanitised at build time and contains only
10708
- // <pre>/<code>/<span> tags with style attributes. Safe to inject.
10709
- /* @__PURE__ */ jsx("div", { dangerouslySetInnerHTML: { __html: html } })
10710
- ) : /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx("code", { className: language ? `language-${language}` : void 0, children: code }) })
10711
- ] });
10712
- }
10713
- var ADMONITION_LABEL = {
10714
- note: "Note",
10715
- tip: "Tip",
10716
- warning: "Warning",
10717
- danger: "Danger",
10718
- info: "Info",
10719
- caution: "Caution"
10720
- };
10721
- var ADMONITION_CLASS = {
10722
- note: contentClasses.admonitionNote,
10723
- tip: contentClasses.admonitionTip,
10724
- warning: contentClasses.admonitionWarning,
10725
- danger: contentClasses.admonitionDanger,
10726
- info: contentClasses.admonitionInfo,
10727
- caution: contentClasses.admonitionCaution
10728
- };
10729
- function Admonition({ node }) {
10730
- const kind = String(node.attrs?.kind ?? "note");
10731
- const title = node.attrs?.title ?? ADMONITION_LABEL[kind] ?? kind;
10732
- const variantClass = ADMONITION_CLASS[kind] ?? contentClasses.admonitionNote;
10733
- return /* @__PURE__ */ jsxs("aside", { className: `${contentClasses.admonition} ${variantClass}`, "data-kind": kind, children: [
10734
- /* @__PURE__ */ jsx("div", { className: contentClasses.admonitionTitle, children: title }),
10735
- /* @__PURE__ */ jsx("div", { className: contentClasses.admonitionContent, children: node.content?.map(renderNode) })
10736
- ] });
10737
- }
10738
- function Tabs2({ node }) {
10739
- const items = (node.content ?? []).filter((c) => c.type === "tabItem");
10740
- const [active, setActive] = useState(0);
10741
- if (items.length === 0) return null;
10742
- const safeActive = Math.min(active, items.length - 1);
10743
- return /* @__PURE__ */ jsxs("div", { className: contentClasses.tabs, children: [
10744
- /* @__PURE__ */ jsx("div", { className: contentClasses.tabsHeader, role: "tablist", children: items.map((item, i) => {
10745
- const label = item.attrs?.label ?? item.attrs?.value ?? `Tab ${i + 1}`;
10746
- const isActive = i === safeActive;
10747
- return /* @__PURE__ */ jsx(
10748
- "button",
10749
- {
10750
- type: "button",
10751
- role: "tab",
10752
- "aria-selected": isActive,
10753
- className: `${contentClasses.tabsTab} ${isActive ? contentClasses.tabsTabActive : ""}`,
10754
- onClick: () => setActive(i),
10755
- children: label
10756
- },
10757
- i
10758
- );
10759
- }) }),
10760
- /* @__PURE__ */ jsx("div", { className: contentClasses.tabsPanel, role: "tabpanel", children: items[safeActive]?.content?.map(renderNode) })
10761
- ] });
10762
- }
10763
- function renderNode(node, index) {
10764
- const CustomRenderer = customNodeRegistry.get(node.type);
10765
- if (CustomRenderer) return /* @__PURE__ */ jsx(CustomRenderer, { node }, index);
10766
- switch (node.type) {
10767
- case "text":
10768
- return /* @__PURE__ */ jsx(TextNode, { node }, index);
10769
- case "paragraph":
10770
- return /* @__PURE__ */ jsx("p", { children: node.content?.map(renderNode) }, index);
10771
- case "heading": {
10772
- const level = Math.min(Math.max(node.attrs?.level ?? 2, 1), 6);
10773
- const Tag2 = `h${level}`;
10774
- const id = node.attrs?.id ?? slugify(node.content);
10775
- return /* @__PURE__ */ jsx(Tag2, { id, children: node.content?.map(renderNode) }, index);
10776
- }
10777
- case "bulletList":
10778
- return /* @__PURE__ */ jsx("ul", { children: node.content?.map(renderNode) }, index);
10779
- case "orderedList":
10780
- return /* @__PURE__ */ jsx("ol", { start: node.attrs?.start ?? 1, children: node.content?.map(renderNode) }, index);
10781
- case "listItem":
10782
- return /* @__PURE__ */ jsx("li", { children: node.content?.map(renderNode) }, index);
10783
- case "taskList":
10784
- return /* @__PURE__ */ jsx("ul", { "data-type": "taskList", children: node.content?.map(renderNode) }, index);
10785
- case "taskItem": {
10786
- const checked = node.attrs?.checked ?? false;
10787
- return /* @__PURE__ */ jsxs("li", { "data-type": "taskItem", "data-checked": checked, children: [
10788
- /* @__PURE__ */ jsx("label", { children: /* @__PURE__ */ jsx("input", { type: "checkbox", checked, readOnly: true, className: contentClasses.checkbox }) }),
10789
- /* @__PURE__ */ jsx("div", { children: node.content?.map(renderNode) })
10790
- ] }, index);
10791
- }
10792
- case "blockquote":
10793
- return /* @__PURE__ */ jsx("blockquote", { children: node.content?.map(renderNode) }, index);
10794
- case "codeBlock":
10795
- return /* @__PURE__ */ jsx(CodeBlock, { node }, index);
10796
- case "horizontalRule":
10797
- return /* @__PURE__ */ jsx("hr", {}, index);
10798
- case "image":
10799
- return /* @__PURE__ */ jsx(
10800
- "img",
10801
- {
10802
- src: node.attrs?.src,
10803
- alt: node.attrs?.alt ?? "",
10804
- title: node.attrs?.title,
10805
- className: contentClasses.image,
10806
- loading: "lazy"
10807
- },
10808
- index
10809
- );
10810
- case "figure":
10811
- return /* @__PURE__ */ jsx("figure", { className: contentClasses.figure, children: node.content?.map(renderNode) }, index);
10812
- case "figcaption":
10813
- return /* @__PURE__ */ jsx("figcaption", { className: contentClasses.figcaption, children: node.content?.map(renderNode) }, index);
10814
- case "hardBreak":
10815
- return /* @__PURE__ */ jsx("br", {}, index);
10816
- // ─── Admonition / Tabs ──────────────────────────────────
10817
- case "admonition":
10818
- return /* @__PURE__ */ jsx(Admonition, { node }, index);
10819
- case "tabs":
10820
- return /* @__PURE__ */ jsx(Tabs2, { node }, index);
10821
- case "tabItem":
10822
- return /* @__PURE__ */ jsx("section", { "data-type": "tabItem", children: node.content?.map(renderNode) }, index);
10823
- // ─── Table ──────────────────────────────────────────────
10824
- case "table":
10825
- return /* @__PURE__ */ jsx("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ jsx("table", { children: node.content?.map(renderNode) }) }, index);
10826
- case "tableRow":
10827
- return /* @__PURE__ */ jsx("tr", { children: node.content?.map(renderNode) }, index);
10828
- case "tableCell":
10829
- return /* @__PURE__ */ jsx("td", { colSpan: node.attrs?.colspan ?? 1, rowSpan: node.attrs?.rowspan ?? 1, children: node.content?.map(renderNode) }, index);
10830
- case "tableHeader":
10831
- return /* @__PURE__ */ jsx("th", { colSpan: node.attrs?.colspan ?? 1, rowSpan: node.attrs?.rowspan ?? 1, children: node.content?.map(renderNode) }, index);
10832
- // ─── Details / Summary (collapsible) ────────────────────
10833
- case "details":
10834
- return /* @__PURE__ */ jsx("details", { open: node.attrs?.open, children: node.content?.map(renderNode) }, index);
10835
- case "detailsSummary":
10836
- return /* @__PURE__ */ jsx("summary", { children: node.content?.map(renderNode) }, index);
10837
- case "detailsContent":
10838
- return /* @__PURE__ */ jsx("div", { children: node.content?.map(renderNode) }, index);
10839
- // ─── YouTube embed ──────────────────────────────────────
10840
- case "youtube": {
10841
- const src = node.attrs?.src;
10842
- if (!src) return null;
10843
- return /* @__PURE__ */ jsx("div", { style: { position: "relative", paddingBottom: "56.25%", height: 0, marginBottom: "1.25rem" }, children: /* @__PURE__ */ jsx(
10844
- "iframe",
10845
- {
10846
- src,
10847
- title: "YouTube video",
10848
- allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
10849
- allowFullScreen: true,
10850
- style: {
10851
- position: "absolute",
10852
- top: 0,
10853
- left: 0,
10854
- width: "100%",
10855
- height: "100%",
10856
- border: "none",
10857
- borderRadius: 8
10858
- }
10859
- }
10860
- ) }, index);
10861
- }
10862
- default:
10863
- if (node.content) {
10864
- return /* @__PURE__ */ jsx(Fragment$1, { children: node.content.map(renderNode) }, index);
10865
- }
10866
- return null;
10867
- }
10868
- }
10869
- function TextNode({ node }) {
10870
- const ctx = useContext(TipTapContext);
10871
- return /* @__PURE__ */ jsx(Fragment$1, { children: renderMarks(node.text ?? "", node.marks, ctx) });
10872
- }
10873
- function TipTapRenderer({ content, className, sx, compact, linkComponent }) {
10874
- if (!content || !("content" in content) || !Array.isArray(content.content)) {
10875
- return null;
10876
- }
10877
- const ctxValue = linkComponent ? { linkComponent } : {};
10878
- return /* @__PURE__ */ jsx(TipTapContext.Provider, { value: ctxValue, children: /* @__PURE__ */ jsx(
10879
- ContentRoot,
10880
- {
10881
- className: [contentClasses.root, contentClasses.tiptap, compact && contentClasses.compact, className].filter(Boolean).join(" "),
10882
- sx,
10883
- children: content.content.map(renderNode)
10884
- }
10885
- ) });
10886
- }
10887
9737
 
10888
9738
  // src/components/content-renderer/html-tags.ts
10889
9739
  var htmlTags = [
@@ -11139,7 +9989,21 @@ function escapeHtml(str) {
11139
9989
  function isExternalLink2(href) {
11140
9990
  return /^https?:\/\//.test(href) || href.startsWith("//");
11141
9991
  }
11142
- var defaultRehypePlugins = [rehypeRaw, rehypeHighlight];
9992
+ var SAFE_CLASS_RE = /^(prism-content__[a-z0-9_-]+|hljs(-[a-z0-9-]+)?|language-[a-z0-9+#-]+)$/i;
9993
+ var spoilerSanitizeSchema = {
9994
+ ...defaultSchema,
9995
+ attributes: {
9996
+ ...defaultSchema.attributes,
9997
+ span: [...defaultSchema.attributes?.["span"] ?? [], ["className", SAFE_CLASS_RE]],
9998
+ code: [...defaultSchema.attributes?.["code"] ?? [], ["className", SAFE_CLASS_RE]],
9999
+ div: [...defaultSchema.attributes?.["div"] ?? [], ["className", SAFE_CLASS_RE]]
10000
+ }
10001
+ };
10002
+ var defaultRehypePlugins = [
10003
+ rehypeRaw,
10004
+ [rehypeSanitize, spoilerSanitizeSchema],
10005
+ rehypeHighlight
10006
+ ];
11143
10007
  var defaultRemarkPlugins = [
11144
10008
  [remarkGfm, { singleTilde: false }],
11145
10009
  remarkSpoiler
@@ -11205,6 +10069,16 @@ function CheckboxInput(props) {
11205
10069
  function isTipTapDoc(value) {
11206
10070
  return typeof value === "object" && value !== null && "type" in value && value.type === "doc" && "content" in value && Array.isArray(value.content);
11207
10071
  }
10072
+ function tryParseTipTapJson(value) {
10073
+ const trimmed = value.trimStart();
10074
+ if (!trimmed.startsWith("{")) return null;
10075
+ try {
10076
+ const parsed = JSON.parse(trimmed);
10077
+ return isTipTapDoc(parsed) ? parsed : null;
10078
+ } catch {
10079
+ return null;
10080
+ }
10081
+ }
11208
10082
  function ContentRenderer({
11209
10083
  content,
11210
10084
  className,
@@ -11222,6 +10096,10 @@ function ContentRenderer({
11222
10096
  }
11223
10097
  if (typeof content === "string") {
11224
10098
  if (!content.trim()) return null;
10099
+ const docFromJson = tryParseTipTapJson(content);
10100
+ if (docFromJson) {
10101
+ return /* @__PURE__ */ jsx(TipTapRenderer, { content: docFromJson, className, sx, compact });
10102
+ }
11225
10103
  return /* @__PURE__ */ jsx(
11226
10104
  Markdown,
11227
10105
  {
@@ -11236,20 +10114,20 @@ function ContentRenderer({
11236
10114
  }
11237
10115
  return null;
11238
10116
  }
11239
- var HOUR = 3600;
11240
- var DAY = 86400;
10117
+ var HOUR2 = 3600;
10118
+ var DAY2 = 86400;
11241
10119
  var WEEK = 604800;
11242
10120
  var PRESETS = [
11243
- { label: "1h", value: HOUR, key: "1h" },
11244
- { label: "6h", value: 6 * HOUR, key: "6h" },
11245
- { label: "1d", value: DAY, key: "1d" },
11246
- { label: "7d", value: 7 * DAY, key: "7d" },
11247
- { label: "30d", value: 30 * DAY, key: "30d" },
10121
+ { label: "1h", value: HOUR2, key: "1h" },
10122
+ { label: "6h", value: 6 * HOUR2, key: "6h" },
10123
+ { label: "1d", value: DAY2, key: "1d" },
10124
+ { label: "7d", value: 7 * DAY2, key: "7d" },
10125
+ { label: "30d", value: 30 * DAY2, key: "30d" },
11248
10126
  { label: "\u221E", value: null, key: "permanent" }
11249
10127
  ];
11250
10128
  var UNIT_SECONDS = {
11251
- hours: HOUR,
11252
- days: DAY,
10129
+ hours: HOUR2,
10130
+ days: DAY2,
11253
10131
  weeks: WEEK
11254
10132
  };
11255
10133
  var CUSTOM_KEY = "custom";
@@ -11259,12 +10137,14 @@ function resolveActiveKey(value) {
11259
10137
  }
11260
10138
  function decomposeSeconds(seconds) {
11261
10139
  if (seconds > 0 && seconds % WEEK === 0) return { amount: seconds / WEEK, unit: "weeks" };
11262
- if (seconds > 0 && seconds % DAY === 0) return { amount: seconds / DAY, unit: "days" };
11263
- return { amount: Math.max(1, Math.round(seconds / HOUR)), unit: "hours" };
10140
+ if (seconds > 0 && seconds % DAY2 === 0) return { amount: seconds / DAY2, unit: "days" };
10141
+ return { amount: Math.max(1, Math.round(seconds / HOUR2)), unit: "hours" };
11264
10142
  }
11265
10143
  function DurationPicker({ value, onChange, size = "small", disabled = false, labels }) {
11266
10144
  const theme = useTheme();
11267
- const activeKey = useMemo(() => resolveActiveKey(value), [value]);
10145
+ const presetKey = useMemo(() => resolveActiveKey(value), [value]);
10146
+ const [customChosen, setCustomChosen] = useState(() => presetKey === CUSTOM_KEY);
10147
+ const activeKey = customChosen || presetKey === CUSTOM_KEY ? CUSTOM_KEY : presetKey;
11268
10148
  const [customAmount, setCustomAmount] = useState(() => {
11269
10149
  if (activeKey === CUSTOM_KEY && value !== null && value > 0) {
11270
10150
  return decomposeSeconds(value).amount;
@@ -11277,28 +10157,38 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11277
10157
  }
11278
10158
  return "hours";
11279
10159
  });
10160
+ const [customText, setCustomText] = useState(() => String(customAmount));
11280
10161
  const isCustom = activeKey === CUSTOM_KEY;
11281
10162
  const handlePresetChange = useCallback(
11282
10163
  (_, newKey) => {
11283
10164
  if (newKey === null) return;
11284
10165
  if (newKey === CUSTOM_KEY) {
10166
+ setCustomChosen(true);
11285
10167
  onChange(customAmount * UNIT_SECONDS[customUnit]);
11286
10168
  return;
11287
10169
  }
11288
10170
  const preset = PRESETS.find((p) => p.key === newKey);
11289
- if (preset) onChange(preset.value);
10171
+ if (preset) {
10172
+ setCustomChosen(false);
10173
+ onChange(preset.value);
10174
+ }
11290
10175
  },
11291
10176
  [onChange, customAmount, customUnit]
11292
10177
  );
11293
10178
  const handleCustomAmountChange = useCallback(
11294
10179
  (e) => {
11295
- const raw = parseInt(e.target.value, 10);
11296
- const clamped = Number.isFinite(raw) && raw > 0 ? raw : 1;
11297
- setCustomAmount(clamped);
11298
- onChange(clamped * UNIT_SECONDS[customUnit]);
10180
+ const text = e.target.value;
10181
+ setCustomText(text);
10182
+ const parsed = parseInt(text, 10);
10183
+ if (!Number.isFinite(parsed) || parsed <= 0) return;
10184
+ setCustomAmount(parsed);
10185
+ onChange(parsed * UNIT_SECONDS[customUnit]);
11299
10186
  },
11300
10187
  [onChange, customUnit]
11301
10188
  );
10189
+ const handleCustomAmountBlur = useCallback(() => {
10190
+ setCustomText(String(customAmount));
10191
+ }, [customAmount]);
11302
10192
  const handleCustomUnitChange = useCallback(
11303
10193
  (e) => {
11304
10194
  const unit = e.target.value;
@@ -11330,7 +10220,7 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11330
10220
  }
11331
10221
  }
11332
10222
  };
11333
- return /* @__PURE__ */ jsxs(Box20, { children: [
10223
+ return /* @__PURE__ */ jsxs(Box19, { children: [
11334
10224
  /* @__PURE__ */ jsx(
11335
10225
  Typography5,
11336
10226
  {
@@ -11348,7 +10238,7 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11348
10238
  ToggleButtonGroup,
11349
10239
  {
11350
10240
  exclusive: true,
11351
- value: isCustom ? CUSTOM_KEY : activeKey,
10241
+ value: activeKey,
11352
10242
  onChange: handlePresetChange,
11353
10243
  size,
11354
10244
  disabled,
@@ -11360,7 +10250,14 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11360
10250
  border: "1px solid",
11361
10251
  borderRadius: "8px !important",
11362
10252
  borderColor: alpha(theme.palette.divider, 0.2),
11363
- "&:not(:first-of-type)": {
10253
+ // Position-class selectors replace the deprecated
10254
+ // `:not(:first-of-type)` sibling pattern (MUI v9 tags
10255
+ // children with firstButton/middleButton/lastButton via
10256
+ // ToggleButtonGroupButtonContext). gap:0.5 above means
10257
+ // we want INDEPENDENT borders on every button (no
10258
+ // overlap/collapse), so restore left border + zero out
10259
+ // MUI's default `margin-left: -1px` on middle/last.
10260
+ "&.MuiToggleButtonGroup-middleButton, &.MuiToggleButtonGroup-lastButton": {
11364
10261
  borderLeft: "1px solid",
11365
10262
  borderColor: alpha(theme.palette.divider, 0.2),
11366
10263
  marginLeft: 0
@@ -11374,7 +10271,7 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11374
10271
  }
11375
10272
  ),
11376
10273
  isCustom && /* @__PURE__ */ jsxs(
11377
- Box20,
10274
+ Box19,
11378
10275
  {
11379
10276
  sx: {
11380
10277
  mt: 1.25,
@@ -11387,8 +10284,9 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11387
10284
  TextField2,
11388
10285
  {
11389
10286
  type: "number",
11390
- value: customAmount,
10287
+ value: customText,
11391
10288
  onChange: handleCustomAmountChange,
10289
+ onBlur: handleCustomAmountBlur,
11392
10290
  disabled,
11393
10291
  size,
11394
10292
  slotProps: {
@@ -11419,7 +10317,7 @@ function DurationPicker({ value, onChange, size = "small", disabled = false, lab
11419
10317
  }
11420
10318
  function ChangelogTimeline({ children, sx }) {
11421
10319
  return /* @__PURE__ */ jsx(
11422
- Box20,
10320
+ Box19,
11423
10321
  {
11424
10322
  sx: {
11425
10323
  position: "relative",
@@ -11439,9 +10337,9 @@ function ChangelogTimeline({ children, sx }) {
11439
10337
  );
11440
10338
  }
11441
10339
  function ChangelogEntry({ version, date, badge, children }) {
11442
- return /* @__PURE__ */ jsxs(Box20, { sx: { position: "relative", pl: { xs: 5, sm: 7 }, pb: 4 }, children: [
10340
+ return /* @__PURE__ */ jsxs(Box19, { sx: { position: "relative", pl: { xs: 5, sm: 7 }, pb: 4 }, children: [
11443
10341
  /* @__PURE__ */ jsx(
11444
- Box20,
10342
+ Box19,
11445
10343
  {
11446
10344
  sx: {
11447
10345
  position: "absolute",
@@ -11457,7 +10355,7 @@ function ChangelogEntry({ version, date, badge, children }) {
11457
10355
  }
11458
10356
  }
11459
10357
  ),
11460
- /* @__PURE__ */ jsxs(MuiCard, { variant: "outlined", sx: { p: 3 }, children: [
10358
+ /* @__PURE__ */ jsxs(Card2, { variant: "outlined", sx: { p: 3 }, children: [
11461
10359
  /* @__PURE__ */ jsxs(
11462
10360
  Stack,
11463
10361
  {
@@ -11491,6 +10389,6 @@ function ChangelogEntry({ version, date, badge, children }) {
11491
10389
  ] });
11492
10390
  }
11493
10391
 
11494
- export { Accordion, AdminDataTable, Alert2 as Alert, AmountCell, AnimateBorder, Avatar, Badge2 as Badge, BooleanLabel, Breadcrumbs, Card, CardGrid, CardSection, CardSkeleton, Carousel, ChangelogEntry, ChangelogTimeline, Chart, ChartLegends, ChartLoading, CircularProgress2 as CircularProgress, CommandPalette, ConfirmDialog, ContentRenderer, ContentRoot, ContextMenu, CountBadge, CountdownRing, CountrySelect, CustomAvatarGroup, DEFAULT_CLASS_PREFIX, DateRangeInput, DateRangePicker, DeleteDialog, DocLayout, DocSectionNav, DocSidebar, Drawer2 as Drawer, DurationPicker, EmptyContent, ErrorBoundary, FilterToolbar, FlagIcon, FormAlert, Image, ImageWithDefault, InlineAlert, Label, Lightbox, LinearProgress3 as LinearProgress, LoadingEmptyContent, LoadingScreen, Markdown, MegaMenuHorizontal, MegaMenuMobile, MegaMenuVertical, Menu, MotionLazy, Nav, NavArrow2 as NavArrow, NavCard, NavCardGrid, NavIcon, NavInfo, NavItem, NavItemBase, NavLi, NavList, NavSectionHorizontal, NavSectionMini, NavSectionVertical, NavSubList, NavSubheader, NavTexts, NavUl, NavigationProgress, PageContent, ProgressBar, ScrollSpyProvider, ScrollSpySection, ScrollToTop, Scrollbar, SearchEmptyContent, SettingsDrawer, SettingsProvider, SimpleAccordion, SimpleSnackbar, Skeleton3 as Skeleton, SnackbarProvider, Spinner, SplashScreen, StatCard, StatusChip, StatusDot, StatusLabel, Stepper, StepperActions, SvgColor, TabPanel, Table, TableSkeleton, Tabs, TagCloud, TipTapRenderer, Tooltip2 as Tooltip, VirtualList, animateBorderClasses, buildUrl, carouselClasses, chartClasses, cn, contentClasses, createClasses, createClassesObject, createComponentClasses, createIconComponent, formatDateString, getClassPrefix, getErrorLocation, getNavCssVars, getQueryParam, hasParams, htmlToMarkdown, isActiveLink, isEqualPath, isExternalLink, isExternalUrl, isMarkdownContent, lightboxClasses, megaMenuClasses, megaMenuCssVars, mergeClasses, navSectionClasses, navSectionCssVars, parseDateString, parseQueryParams, parseStackTrace, registerTipTapNode, removeLastSlash, removeParams, safeReturnUrl, setClassPrefix, useAccordion, useCarousel, useChart, useDateRangePicker, useErrorBoundary, useLightbox, useMenu, useScrollSpy, useSettings, useSettingsDrawer, useSnackbar, useStepper, useTable, useTabs };
11495
- //# sourceMappingURL=chunk-A2Z7NVGL.js.map
11496
- //# sourceMappingURL=chunk-A2Z7NVGL.js.map
10392
+ export { Accordion, AdminDataTable, Alert2 as Alert, AmountCell, AnimateBorder, Avatar, Badge2 as Badge, BooleanLabel, Breadcrumbs, COIN_DISPLAY_DECIMALS, COIN_WIRE_DECIMALS, Card, CardGrid, CardSection, CardSkeleton, Carousel, ChangelogEntry, ChangelogTimeline, Chart, ChartLegends, ChartLoading, CircularProgress2 as CircularProgress, CommandPalette, ConfirmDialog, ContentRenderer, ContextMenu, CountBadge, CountdownRing, CountrySelect, CustomAvatarGroup, DEFAULT_CLASS_PREFIX, DEFAULT_LIGHTBOX_LABELS, DEFAULT_SPONSORED_SLOT_LABELS, DateRangeInput, DateRangePicker, DeadlineChip, DeleteDialog, Drawer2 as Drawer, DurationPicker, FilterToolbar, FlagIcon, FormAlert, Image, ImageWithDefault, InlineAlert, Label, Lightbox, LinearProgress3 as LinearProgress, LoadingScreen, Markdown, MegaMenuHorizontal, MegaMenuMobile, MegaMenuVertical, Menu, MotionLazy, Nav, NavArrow2 as NavArrow, NavCard, NavCardGrid, NavIcon, NavInfo, NavItem, NavItemBase, NavLi, NavList, NavSectionHorizontal, NavSectionMini, NavSectionVertical, NavSubList, NavSubheader, NavTexts, NavUl, NavigationProgress, PageContent, ProgressBar, Rail, ScrollToTop, SettingsDrawer, SettingsProvider, SimpleAccordion, SimpleSnackbar, Skeleton5 as Skeleton, SnackbarProvider, Spinner, SplashScreen, SponsoredSlot, StatCard, StatusChip, StatusDot, StatusLabel, Stepper, StepperActions, SvgColor, TabPanel, Table, TableSkeleton, Tabs, TagCloud, Tooltip3 as Tooltip, VirtualList, animateBorderClasses, buildUrl, carouselClasses, chartClasses, cn, createClasses, createClassesObject, createComponentClasses, createIconComponent, deadlineUrgency, formatCoinAmount, formatCoinAmountList, formatDateString, formatDecimalString, fromScaledInteger, getClassPrefix, getCoinDecimals, getCoinWireDecimals, getNavCssVars, getQueryParam, hasParams, htmlToMarkdown, isActiveLink, isEqualPath, isExternalLink, isExternalUrl, isMarkdownContent, lightboxClasses, megaMenuClasses, megaMenuCssVars, mergeClasses, navSectionClasses, navSectionCssVars, parseDateString, parseQueryParams, relativeTimeLeft, removeLastSlash, removeParams, safeReturnUrl, setClassPrefix, subtractDecimalStrings, sumDecimalStrings, toScaledInteger, useAccordion, useCarousel, useChart, useDateRangePicker, useLightbox, useMenu, useSettings, useSettingsDrawer, useSnackbar, useStepper, useTable, useTabs };
10393
+ //# sourceMappingURL=chunk-LSPFFEJT.js.map
10394
+ //# sourceMappingURL=chunk-LSPFFEJT.js.map