@omnitron-dev/prism 0.3.1 → 0.3.2

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 (305) hide show
  1. package/README.md +68 -2
  2. package/THIRD-PARTY-NOTICES.txt +26 -0
  3. package/dist/accessibility/index.js +2 -0
  4. package/dist/accessibility/index.js.map +1 -1
  5. package/dist/auth/index.d.ts +4 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +4 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/blocks/auth-block/guards.d.ts +3 -2
  10. package/dist/blocks/auth-block/guards.d.ts.map +1 -1
  11. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
  12. package/dist/blocks/dashboard-block/types.d.ts +4 -2
  13. package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
  14. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
  15. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
  16. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
  17. package/dist/blocks/data-grid-block/types.d.ts +3 -0
  18. package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
  19. package/dist/blocks/index.js +80 -255
  20. package/dist/blocks/index.js.map +1 -1
  21. package/dist/chunk-2AB7VGPW.js +447 -0
  22. package/dist/chunk-2AB7VGPW.js.map +1 -0
  23. package/dist/{chunk-LOY2NPCO.js → chunk-2E67PQ4T.js} +3 -3
  24. package/dist/{chunk-LOY2NPCO.js.map → chunk-2E67PQ4T.js.map} +1 -1
  25. package/dist/chunk-2KG2NI73.js +84 -0
  26. package/dist/chunk-2KG2NI73.js.map +1 -0
  27. package/dist/chunk-2UYRW6X3.js +44 -0
  28. package/dist/chunk-2UYRW6X3.js.map +1 -0
  29. package/dist/chunk-36C5H56C.js +208 -0
  30. package/dist/chunk-36C5H56C.js.map +1 -0
  31. package/dist/chunk-36FOXX25.js +73 -0
  32. package/dist/chunk-36FOXX25.js.map +1 -0
  33. package/dist/{chunk-52PQL67Q.js → chunk-3VSM7NZG.js} +18 -15
  34. package/dist/chunk-3VSM7NZG.js.map +1 -0
  35. package/dist/{chunk-GUGTDURV.js → chunk-4B2LTPK2.js} +2 -2
  36. package/dist/{chunk-GUGTDURV.js.map → chunk-4B2LTPK2.js.map} +1 -1
  37. package/dist/chunk-4HUGZJKU.js +108 -0
  38. package/dist/chunk-4HUGZJKU.js.map +1 -0
  39. package/dist/{chunk-PXXPLHIY.js → chunk-4Q5L7LDG.js} +3 -3
  40. package/dist/{chunk-PXXPLHIY.js.map → chunk-4Q5L7LDG.js.map} +1 -1
  41. package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
  42. package/dist/chunk-4R7EZ7GQ.js.map +1 -0
  43. package/dist/chunk-6IANOSMD.js +185 -0
  44. package/dist/chunk-6IANOSMD.js.map +1 -0
  45. package/dist/{chunk-YHE7HXSG.js → chunk-7ATBURW2.js} +3 -3
  46. package/dist/{chunk-YHE7HXSG.js.map → chunk-7ATBURW2.js.map} +1 -1
  47. package/dist/{chunk-7G5D5PTC.js → chunk-AATAOOSF.js} +4 -4
  48. package/dist/{chunk-7G5D5PTC.js.map → chunk-AATAOOSF.js.map} +1 -1
  49. package/dist/chunk-AKLRKCYH.js +128 -0
  50. package/dist/chunk-AKLRKCYH.js.map +1 -0
  51. package/dist/chunk-CT46KJOR.js +133 -0
  52. package/dist/chunk-CT46KJOR.js.map +1 -0
  53. package/dist/{chunk-LSPFFEJT.js → chunk-D4GFAJAZ.js} +298 -3900
  54. package/dist/chunk-D4GFAJAZ.js.map +1 -0
  55. package/dist/{chunk-BJE2AKD4.js → chunk-D5J3KW6Q.js} +3 -2
  56. package/dist/chunk-D5J3KW6Q.js.map +1 -0
  57. package/dist/chunk-DEPJRTVT.js +3 -0
  58. package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
  59. package/dist/{chunk-472SOF76.js → chunk-DHTYHUYI.js} +85 -107
  60. package/dist/chunk-DHTYHUYI.js.map +1 -0
  61. package/dist/{chunk-FF5RF32O.js → chunk-E7WM2RXA.js} +3 -2
  62. package/dist/chunk-E7WM2RXA.js.map +1 -0
  63. package/dist/chunk-F6RZ7LW6.js +1271 -0
  64. package/dist/chunk-F6RZ7LW6.js.map +1 -0
  65. package/dist/chunk-FOGY3HA4.js +217 -0
  66. package/dist/chunk-FOGY3HA4.js.map +1 -0
  67. package/dist/chunk-G2GANYMW.js +139 -0
  68. package/dist/chunk-G2GANYMW.js.map +1 -0
  69. package/dist/chunk-I6DILPFE.js +293 -0
  70. package/dist/chunk-I6DILPFE.js.map +1 -0
  71. package/dist/{chunk-HOXFSQUV.js → chunk-IRYU3NTG.js} +2 -2
  72. package/dist/{chunk-HOXFSQUV.js.map → chunk-IRYU3NTG.js.map} +1 -1
  73. package/dist/chunk-JTIUGPW5.js +284 -0
  74. package/dist/chunk-JTIUGPW5.js.map +1 -0
  75. package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
  76. package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
  77. package/dist/{chunk-PFT2BNYO.js → chunk-KPY7TA4D.js} +5 -5
  78. package/dist/{chunk-PFT2BNYO.js.map → chunk-KPY7TA4D.js.map} +1 -1
  79. package/dist/{chunk-GMIE6III.js → chunk-LFWKGNCX.js} +50 -623
  80. package/dist/chunk-LFWKGNCX.js.map +1 -0
  81. package/dist/chunk-LH4ZZZYB.js +37 -0
  82. package/dist/chunk-LH4ZZZYB.js.map +1 -0
  83. package/dist/chunk-NFJ7CPG3.js +13 -0
  84. package/dist/chunk-NFJ7CPG3.js.map +1 -0
  85. package/dist/chunk-NFPOIHD4.js +3 -0
  86. package/dist/{chunk-JSQTYDPG.js.map → chunk-NFPOIHD4.js.map} +1 -1
  87. package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
  88. package/dist/chunk-NJM5AVBM.js.map +1 -0
  89. package/dist/{chunk-4Z5DE5GK.js → chunk-NSNM53WI.js} +133 -115
  90. package/dist/chunk-NSNM53WI.js.map +1 -0
  91. package/dist/chunk-NTREGTG7.js +31 -0
  92. package/dist/chunk-NTREGTG7.js.map +1 -0
  93. package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
  94. package/dist/chunk-OKJA6SJM.js.map +1 -0
  95. package/dist/{chunk-SU3LVQ7N.js → chunk-Q6JDNFSG.js} +11 -226
  96. package/dist/chunk-Q6JDNFSG.js.map +1 -0
  97. package/dist/chunk-RPOGINR5.js +115 -0
  98. package/dist/chunk-RPOGINR5.js.map +1 -0
  99. package/dist/{chunk-KQ67XB6T.js → chunk-RSWVYIXK.js} +151 -114
  100. package/dist/chunk-RSWVYIXK.js.map +1 -0
  101. package/dist/chunk-SSEHL5VP.js +110 -0
  102. package/dist/chunk-SSEHL5VP.js.map +1 -0
  103. package/dist/chunk-TEIGUOWN.js +523 -0
  104. package/dist/chunk-TEIGUOWN.js.map +1 -0
  105. package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
  106. package/dist/{chunk-AYYFMTMI.js.map → chunk-TJ7DHXUX.js.map} +1 -1
  107. package/dist/{chunk-75FQ5IW3.js → chunk-TZHWYT34.js} +3 -3
  108. package/dist/{chunk-75FQ5IW3.js.map → chunk-TZHWYT34.js.map} +1 -1
  109. package/dist/chunk-TZWHELY4.js +45 -0
  110. package/dist/chunk-TZWHELY4.js.map +1 -0
  111. package/dist/{chunk-OKTLA23Q.js → chunk-UEINJFLS.js} +6 -6
  112. package/dist/chunk-UEINJFLS.js.map +1 -0
  113. package/dist/chunk-URFQX3I6.js +129 -0
  114. package/dist/chunk-URFQX3I6.js.map +1 -0
  115. package/dist/chunk-VG6FOMOH.js +187 -0
  116. package/dist/chunk-VG6FOMOH.js.map +1 -0
  117. package/dist/{chunk-PGHEP4JD.js → chunk-VQVVHMPG.js} +3 -3
  118. package/dist/{chunk-PGHEP4JD.js.map → chunk-VQVVHMPG.js.map} +1 -1
  119. package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
  120. package/dist/chunk-VUKOT432.js.map +1 -0
  121. package/dist/chunk-WD4N72DL.js +315 -0
  122. package/dist/chunk-WD4N72DL.js.map +1 -0
  123. package/dist/chunk-XBYMG4QK.js +119 -0
  124. package/dist/chunk-XBYMG4QK.js.map +1 -0
  125. package/dist/chunk-YHM6GIHV.js +3 -0
  126. package/dist/chunk-YHM6GIHV.js.map +1 -0
  127. package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
  128. package/dist/chunk-Z2AN43YU.js.map +1 -0
  129. package/dist/chunk-ZNWHMQRM.js +171 -0
  130. package/dist/chunk-ZNWHMQRM.js.map +1 -0
  131. package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
  132. package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
  133. package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
  134. package/dist/chunk-ZYI3MHLE.js.map +1 -0
  135. package/dist/cli/index.js +59 -421
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
  138. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  139. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  140. package/dist/components/admin-filters/index.js +8 -0
  141. package/dist/components/admin-filters/index.js.map +1 -0
  142. package/dist/components/alert/alert.d.ts.map +1 -1
  143. package/dist/components/alert/index.js +5 -0
  144. package/dist/components/alert/index.js.map +1 -0
  145. package/dist/components/animate/index.js +5 -0
  146. package/dist/components/animate/index.js.map +1 -0
  147. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  148. package/dist/components/breadcrumbs/index.js +4 -0
  149. package/dist/components/breadcrumbs/index.js.map +1 -0
  150. package/dist/components/card/index.js +4 -0
  151. package/dist/components/card/index.js.map +1 -0
  152. package/dist/components/chart/chart.d.ts.map +1 -1
  153. package/dist/components/chart/index.css +52 -0
  154. package/dist/components/chart/index.css.map +1 -0
  155. package/dist/components/chart/index.js +5 -0
  156. package/dist/components/chart/index.js.map +1 -0
  157. package/dist/components/chart/types.d.ts +3 -1
  158. package/dist/components/chart/types.d.ts.map +1 -1
  159. package/dist/components/chart/use-chart.d.ts.map +1 -1
  160. package/dist/components/command-palette/command-palette.d.ts +3 -1
  161. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  162. package/dist/components/command-palette/index.js +4 -0
  163. package/dist/components/command-palette/index.js.map +1 -0
  164. package/dist/components/confirm-dialog/index.js +4 -0
  165. package/dist/components/confirm-dialog/index.js.map +1 -0
  166. package/dist/components/date-input/date-input.d.ts +1 -0
  167. package/dist/components/date-input/date-input.d.ts.map +1 -1
  168. package/dist/components/date-input/index.d.ts +0 -1
  169. package/dist/components/date-input/index.d.ts.map +1 -1
  170. package/dist/components/doc-layout/index.js +5 -4
  171. package/dist/components/doc-layout/index.js.map +1 -1
  172. package/dist/components/editor/index.js +4 -3
  173. package/dist/components/editor/index.js.map +1 -1
  174. package/dist/components/emoji-picker/index.js +2 -1
  175. package/dist/components/emoji-picker/index.js.map +1 -1
  176. package/dist/components/empty-content/empty-content.d.ts.map +1 -1
  177. package/dist/components/empty-content/index.js +4 -0
  178. package/dist/components/empty-content/index.js.map +1 -0
  179. package/dist/components/error-boundary/index.js +6 -0
  180. package/dist/components/error-boundary/index.js.map +1 -0
  181. package/dist/components/index.css +13 -10
  182. package/dist/components/index.css.map +1 -1
  183. package/dist/components/index.d.ts +1 -0
  184. package/dist/components/index.d.ts.map +1 -1
  185. package/dist/components/index.js +47 -21
  186. package/dist/components/index.js.map +1 -1
  187. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -1
  188. package/dist/components/knowledge-graph/index.js +18 -16
  189. package/dist/components/knowledge-graph/index.js.map +1 -1
  190. package/dist/components/label/index.js +5 -0
  191. package/dist/components/label/index.js.map +1 -0
  192. package/dist/components/label/label.d.ts.map +1 -1
  193. package/dist/components/loading-screen/index.js +4 -0
  194. package/dist/components/loading-screen/index.js.map +1 -0
  195. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  196. package/dist/components/map/index.js +2 -1
  197. package/dist/components/map/index.js.map +1 -1
  198. package/dist/components/navigation-progress/index.js +4 -0
  199. package/dist/components/navigation-progress/index.js.map +1 -0
  200. package/dist/components/page-content/index.js +4 -0
  201. package/dist/components/page-content/index.js.map +1 -0
  202. package/dist/components/popover/index.js +4 -0
  203. package/dist/components/popover/index.js.map +1 -0
  204. package/dist/components/research/diagram.d.ts.map +1 -1
  205. package/dist/components/research/index.js +6 -4
  206. package/dist/components/research/index.js.map +1 -1
  207. package/dist/components/research-editor/extensions.d.ts +1 -1
  208. package/dist/components/research-editor/index.js +11 -10
  209. package/dist/components/research-editor/index.js.map +1 -1
  210. package/dist/components/research-editor/math-navigation.d.ts +2 -2
  211. package/dist/components/research-editor/math-navigation.d.ts.map +1 -1
  212. package/dist/components/scroll-to-top/index.js +4 -0
  213. package/dist/components/scroll-to-top/index.js.map +1 -0
  214. package/dist/components/search-input/index.js +7 -0
  215. package/dist/components/search-input/index.js.map +1 -0
  216. package/dist/components/search-input/search-input.d.ts +3 -1
  217. package/dist/components/search-input/search-input.d.ts.map +1 -1
  218. package/dist/components/skeleton/index.js +4 -0
  219. package/dist/components/skeleton/index.js.map +1 -0
  220. package/dist/components/snackbar/index.js +6 -0
  221. package/dist/components/snackbar/index.js.map +1 -0
  222. package/dist/components/stepper/index.js +4 -0
  223. package/dist/components/stepper/index.js.map +1 -0
  224. package/dist/components/table/index.d.ts +1 -0
  225. package/dist/components/table/index.d.ts.map +1 -1
  226. package/dist/components/table/index.js +5 -0
  227. package/dist/components/table/index.js.map +1 -0
  228. package/dist/components/table/table-viewport.d.ts +13 -0
  229. package/dist/components/table/table-viewport.d.ts.map +1 -0
  230. package/dist/components/table/table.d.ts +3 -1
  231. package/dist/components/table/table.d.ts.map +1 -1
  232. package/dist/components/tabs/index.js +6 -0
  233. package/dist/components/tabs/index.js.map +1 -0
  234. package/dist/components/tabs/tabs.d.ts +12 -1
  235. package/dist/components/tabs/tabs.d.ts.map +1 -1
  236. package/dist/core/index.js +12 -10
  237. package/dist/core/index.js.map +1 -1
  238. package/dist/forms/index.js +2 -0
  239. package/dist/forms/index.js.map +1 -1
  240. package/dist/hooks/index.js +14 -12
  241. package/dist/hooks/index.js.map +1 -1
  242. package/dist/hooks/use-config-from-query.d.ts +2 -0
  243. package/dist/hooks/use-config-from-query.d.ts.map +1 -1
  244. package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
  245. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
  246. package/dist/hooks/use-scroll-position.d.ts.map +1 -1
  247. package/dist/hooks/use-window-size.d.ts.map +1 -1
  248. package/dist/icons/context.d.ts.map +1 -1
  249. package/dist/icons/index.js +3 -2
  250. package/dist/icons/index.js.map +1 -1
  251. package/dist/index.css +13 -10
  252. package/dist/index.css.map +1 -1
  253. package/dist/index.js +57 -31
  254. package/dist/index.js.map +1 -1
  255. package/dist/internal/research-parser.js +3 -0
  256. package/dist/internal/research-parser.js.map +1 -0
  257. package/dist/layouts/core/header-section.d.ts +1 -0
  258. package/dist/layouts/core/header-section.d.ts.map +1 -1
  259. package/dist/layouts/dashboard/layout.d.ts +3 -1
  260. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  261. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  262. package/dist/layouts/index.js +9 -8
  263. package/dist/layouts/index.js.map +1 -1
  264. package/dist/netron/index.js +2 -1
  265. package/dist/netron/index.js.map +1 -1
  266. package/dist/registry/index.js +1 -1
  267. package/dist/state/create-store.d.ts.map +1 -1
  268. package/dist/state/index.js +3 -2
  269. package/dist/state/index.js.map +1 -1
  270. package/dist/state/settings-version.d.ts.map +1 -1
  271. package/dist/theme/components/Chip.d.ts.map +1 -1
  272. package/dist/theme/components/Dialog.d.ts.map +1 -1
  273. package/dist/theme/components/TextField.d.ts.map +1 -1
  274. package/dist/theme/components/index.d.ts.map +1 -1
  275. package/dist/theme/components/theme-utils.d.ts +2 -2
  276. package/dist/theme/components/theme-utils.d.ts.map +1 -1
  277. package/dist/theme/index.js +8 -6
  278. package/dist/theme/index.js.map +1 -1
  279. package/dist/theme/palette/overrides.d.ts +1 -0
  280. package/dist/theme/palette/overrides.d.ts.map +1 -1
  281. package/dist/theme/semantic-surface.d.ts +8 -0
  282. package/dist/theme/semantic-surface.d.ts.map +1 -0
  283. package/dist/types/index.js +2 -2
  284. package/dist/ui/index.js +6 -5
  285. package/dist/ui/index.js.map +1 -1
  286. package/dist/utils/async-lock.d.ts.map +1 -1
  287. package/package.json +143 -37
  288. package/dist/chunk-472SOF76.js.map +0 -1
  289. package/dist/chunk-4Z5DE5GK.js.map +0 -1
  290. package/dist/chunk-52PQL67Q.js.map +0 -1
  291. package/dist/chunk-AD4W7HYC.js.map +0 -1
  292. package/dist/chunk-ADG4HZEP.js.map +0 -1
  293. package/dist/chunk-BJE2AKD4.js.map +0 -1
  294. package/dist/chunk-BRDWQVRT.js.map +0 -1
  295. package/dist/chunk-DRFNMZLG.js.map +0 -1
  296. package/dist/chunk-FF5RF32O.js.map +0 -1
  297. package/dist/chunk-FU52GL2E.js +0 -3
  298. package/dist/chunk-GMIE6III.js.map +0 -1
  299. package/dist/chunk-JSQTYDPG.js +0 -3
  300. package/dist/chunk-KQ67XB6T.js.map +0 -1
  301. package/dist/chunk-LSPFFEJT.js.map +0 -1
  302. package/dist/chunk-OKTLA23Q.js.map +0 -1
  303. package/dist/chunk-SNZK5X6F.js.map +0 -1
  304. package/dist/chunk-SU3LVQ7N.js.map +0 -1
  305. package/dist/chunk-XIXSSI3B.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/breadcrumbs/breadcrumbs.tsx"],"names":[],"mappings":"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","file":"chunk-VG6FOMOH.js","sourcesContent":["'use client';\n\n/**\n * Custom Breadcrumbs Component\n *\n * Full-featured navigation breadcrumbs with heading, back link, action slot,\n * and more links section. Adapted from minimal-vite-ts patterns.\n *\n * @module components/breadcrumbs\n */\n\nimport type { ReactNode, ElementType } from 'react';\nimport { styled } from '@mui/material/styles';\nimport MuiBreadcrumbs from '@mui/material/Breadcrumbs';\nimport Link from '@mui/material/Link';\nimport SvgIcon from '@mui/material/SvgIcon';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material/Breadcrumbs';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/** Individual breadcrumb link definition. */\nexport interface BreadcrumbLinkProps {\n /** Link label */\n name?: string;\n /** Link href */\n href?: string;\n /** Link icon */\n icon?: ReactNode;\n /** Whether the link is disabled */\n disabled?: boolean;\n}\n\n/** Props for the MoreLinks sub-component. */\nexport interface MoreLinksProps extends React.ComponentProps<'ul'> {\n /** Array of external link URLs */\n links?: string[];\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n}\n\n/** Slot props for customizing sub-components. */\nexport interface BreadcrumbsSlotProps {\n breadcrumbs?: Partial<MuiBreadcrumbsProps>;\n heading?: React.ComponentProps<'h6'>;\n content?: React.ComponentProps<'div'>;\n container?: React.ComponentProps<'div'>;\n moreLinks?: Omit<MoreLinksProps, 'links'>;\n}\n\n/** Custom slot overrides. */\nexport interface BreadcrumbsSlots {\n /** Override the entire breadcrumbs section */\n breadcrumbs?: ReactNode;\n}\n\n/** Props for the Breadcrumbs component. */\nexport interface BreadcrumbsProps extends React.ComponentProps<'div'> {\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Page heading displayed above breadcrumbs */\n heading?: string;\n /** Keep the last breadcrumb link active (clickable) */\n activeLast?: boolean;\n /** Back navigation href — displays arrow icon before heading */\n backHref?: string;\n /** Action element rendered on the right side */\n action?: ReactNode;\n /** Breadcrumb link items */\n links?: BreadcrumbLinkProps[];\n /** External reference links displayed below breadcrumbs */\n moreLinks?: string[];\n /**\n * Custom link component for client-side routing (e.g. react-router's Link).\n * The component receives `to` (from href) and `children` props.\n * When provided, breadcrumb links use this instead of native `<a>` tags.\n */\n linkComponent?: ElementType;\n /** Slot overrides */\n slots?: BreadcrumbsSlots;\n /** Slot prop overrides */\n slotProps?: Partial<BreadcrumbsSlotProps>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst BreadcrumbsRoot = styled('div')(({ theme }) => ({\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nconst BreadcrumbsHeading = styled('h6')(({ theme }) => ({\n ...theme.typography.h4,\n margin: 0,\n padding: 0,\n display: 'inline-flex',\n}));\n\nconst BreadcrumbsContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(2),\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n}));\n\nconst BreadcrumbsContent = styled('div')(({ theme }) => ({\n minWidth: 0,\n display: 'flex',\n flex: '1 1 auto',\n gap: theme.spacing(2),\n flexDirection: 'column',\n}));\n\nconst BreadcrumbsSeparator = styled('span')(({ theme }) => ({\n width: 4,\n height: 4,\n borderRadius: '50%',\n backgroundColor: theme.palette.text.disabled,\n}));\n\n/**\n * Breadcrumb item base. Three visual states:\n *\n * - `clickable` (default — link with `href`) → `text.secondary`\n * so the user can distinguish \"I can navigate here\" from\n * \"you are here\" at rest, not just on hover. Pre-fix every\n * item rendered in `text.primary` and the only differentiator\n * was the link underline, which appears only on hover.\n *\n * - `disabled` (terminal / current page — the last link by\n * default) → `text.primary` and `fontWeight: 600`. The current\n * location should be the MOST prominent crumb in the trail;\n * the prior styling greyed it out, which read as \"this item is\n * unavailable\" instead of \"this is where you are\".\n */\nconst ItemRoot = styled('div', {\n shouldForwardProp: (prop: string) => prop !== 'disabled',\n})<{ disabled?: boolean }>(({ disabled, theme }) => ({\n ...theme.typography.body2,\n minWidth: 0,\n maxWidth: '100%',\n overflowWrap: 'anywhere',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n display: 'inline-flex',\n color: theme.palette.text.secondary,\n ...(disabled && {\n cursor: 'default',\n pointerEvents: 'none',\n color: theme.palette.text.primary,\n fontWeight: 600,\n }),\n}));\n\nconst ItemIcon = styled('span')({\n display: 'inherit',\n // Constrain the icon (first real child) to 20×20. The previous\n // selector chain `:first-of-type:not(style):not(:first-of-type ~ *)`\n // was an obscure way to say \"the first child that isn't a <style>\n // tag\" — replaced with the modern `:first-child:not(style)` for\n // both readability and v9 lint compliance.\n '& > :first-child:not(style)': {\n width: 20,\n height: 20,\n },\n});\n\nconst MoreLinksRoot = styled('ul')({\n display: 'flex',\n flexDirection: 'column',\n '& > li': { display: 'flex' },\n});\n\n// =============================================================================\n// ARROW BACK ICON\n// =============================================================================\n\nfunction ArrowBackIcon() {\n return (\n <SvgIcon sx={{ fontSize: 18 }}>\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </SvgIcon>\n );\n}\n\n// =============================================================================\n// SUB-COMPONENTS\n// =============================================================================\n\n/** Back link with arrow icon for navigation. */\nfunction BackLink({\n href,\n label,\n sx,\n linkComponent,\n}: {\n href: string;\n label?: string;\n sx?: SxProps<Theme>;\n linkComponent?: ElementType;\n}) {\n const linkProps = linkComponent ? { component: linkComponent, to: href } : { href };\n\n return (\n <Link\n color=\"inherit\"\n underline=\"none\"\n sx={[\n (theme) => ({\n verticalAlign: 'middle',\n display: 'inline-flex',\n alignItems: 'center',\n '& .PrismBackLinkIcon': {\n verticalAlign: 'inherit',\n transform: 'translateY(-1px)',\n ml: { xs: '-14px', md: '-18px' },\n transition: theme.transitions.create('opacity', {\n duration: theme.transitions.duration.shorter,\n }),\n },\n '&:hover .PrismBackLinkIcon': { opacity: 0.48 },\n }),\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...linkProps}\n >\n <span className=\"PrismBackLinkIcon\">\n <ArrowBackIcon />\n </span>\n {label}\n </Link>\n );\n}\n\n/** Individual breadcrumb link with optional icon. */\nfunction BreadcrumbLink({\n href,\n icon,\n name,\n disabled,\n current,\n linkComponent,\n}: BreadcrumbLinkProps & { current?: boolean; linkComponent?: ElementType }) {\n const content = (\n <ItemRoot disabled={disabled} aria-current={current ? 'page' : undefined}>\n {icon && <ItemIcon>{icon}</ItemIcon>}\n {name}\n </ItemRoot>\n );\n\n if (href && !disabled) {\n const linkProps = linkComponent ? { component: linkComponent, to: href } : { href };\n\n return (\n <Link color=\"inherit\" sx={{ display: 'inline-flex' }} {...linkProps}>\n {content}\n </Link>\n );\n }\n\n return content;\n}\n\n/**\n * Schemes an external reference link may use.\n *\n * `moreLinks` takes raw strings and renders them as anchors. If any consumer\n * ever feeds it a value that originated server-side, `javascript:` and\n * `data:` URLs become script execution on click. The component cannot know\n * where its strings came from, so it refuses the dangerous ones outright —\n * a library should be safe by default, not safe when used carefully.\n */\nconst SAFE_LINK_SCHEMES = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\nfunction isSafeExternalLink(href: string): boolean {\n const trimmed = href.trim();\n // Relative and protocol-relative URLs carry no scheme of their own.\n if (trimmed.startsWith('/') || trimmed.startsWith('#')) return true;\n try {\n return SAFE_LINK_SCHEMES.has(new URL(trimmed, 'https://placeholder.invalid').protocol);\n } catch {\n return false;\n }\n}\n\n/** List of external reference links. */\nfunction MoreLinks({ links, sx, ...other }: MoreLinksProps) {\n return (\n <MoreLinksRoot sx={sx} {...other}>\n {links?.filter(isSafeExternalLink).map((href) => (\n <li key={href}>\n <Link href={href} variant=\"body2\" target=\"_blank\" rel=\"noopener noreferrer\">\n {href}\n </Link>\n </li>\n ))}\n </MoreLinksRoot>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Breadcrumbs - Full-featured navigation breadcrumbs with heading, back link,\n * action slot, and more links section.\n *\n * @example\n * ```tsx\n * // Simple usage\n * <Breadcrumbs\n * heading=\"Product List\"\n * links={[\n * { name: 'Home', href: '/' },\n * { name: 'Products', href: '/products' },\n * { name: 'Electronics' },\n * ]}\n * />\n *\n * // With back link and action\n * <Breadcrumbs\n * heading=\"Edit Product\"\n * backHref=\"/products\"\n * action={<Button variant=\"contained\">Save</Button>}\n * links={[\n * { name: 'Home', href: '/' },\n * { name: 'Products', href: '/products' },\n * { name: 'Edit' },\n * ]}\n * />\n * ```\n */\nexport function Breadcrumbs({\n sx,\n action,\n backHref,\n heading,\n slots = {},\n links = [],\n moreLinks = [],\n slotProps = {},\n activeLast = false,\n linkComponent,\n ...other\n}: BreadcrumbsProps): ReactNode {\n const renderHeading = () => (\n <BreadcrumbsHeading {...slotProps?.heading}>\n {backHref ? <BackLink href={backHref} label={heading} linkComponent={linkComponent} /> : heading}\n </BreadcrumbsHeading>\n );\n\n const renderLinks = () =>\n slots?.breadcrumbs ?? (\n <MuiBreadcrumbs separator={<BreadcrumbsSeparator />} {...slotProps?.breadcrumbs}>\n {links.map((link, index) => (\n <BreadcrumbLink\n key={`${link.href ?? link.name ?? ''}-${index}`}\n icon={link.icon}\n href={link.href}\n name={link.name}\n disabled={link.disabled || (index === links.length - 1 && !activeLast)}\n current={index === links.length - 1}\n linkComponent={linkComponent}\n />\n ))}\n </MuiBreadcrumbs>\n );\n\n const renderMoreLinks = () => <MoreLinks links={moreLinks} {...slotProps?.moreLinks} />;\n\n return (\n <BreadcrumbsRoot sx={sx} {...other}>\n <BreadcrumbsContainer {...slotProps?.container}>\n <BreadcrumbsContent {...slotProps?.content}>\n {(heading || backHref) && renderHeading()}\n {(!!links.length || slots?.breadcrumbs) && renderLinks()}\n </BreadcrumbsContent>\n {action}\n </BreadcrumbsContainer>\n\n {!!moreLinks?.length && renderMoreLinks()}\n </BreadcrumbsRoot>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { createPrismIcon } from './chunk-BJE2AKD4.js';
1
+ import { createPrismIcon } from './chunk-D5J3KW6Q.js';
2
2
  import DefaultSearchIcon from '@mui/icons-material/Search';
3
3
  import DefaultCloseIcon from '@mui/icons-material/Close';
4
4
  import DefaultChevronDownIcon from '@mui/icons-material/ExpandMore';
@@ -102,5 +102,5 @@ var FirstPageIcon = createPrismIcon("firstPage", DefaultFirstPageIcon);
102
102
  var LastPageIcon = createPrismIcon("lastPage", DefaultLastPageIcon);
103
103
 
104
104
  export { AddIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, ArrowUpRightIcon, CalendarIcon, CheckIcon, CheckboxCheckedIcon, CheckboxIcon, CheckboxMixedIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, CopyIcon, DownloadIcon, DragIcon, EmptyIcon, ErrorIcon, EyeIcon, EyeOffIcon, FilterIcon, FirstPageIcon, FitViewIcon, FullscreenExitIcon, FullscreenIcon, InfoIcon, KeyboardIcon, LastPageIcon, LockIcon, MenuIcon, MoreIcon, PanelCollapseIcon, PanelExpandIcon, PlayIcon, RadioCheckedIcon, RadioIcon, RemoveIcon, SearchIcon, ShareIcon, StarEmptyIcon, StarIcon, SuccessIcon, UnlockIcon, UploadIcon, WarningIcon, ZoomInIcon, ZoomOutIcon };
105
- //# sourceMappingURL=chunk-PGHEP4JD.js.map
106
- //# sourceMappingURL=chunk-PGHEP4JD.js.map
105
+ //# sourceMappingURL=chunk-VQVVHMPG.js.map
106
+ //# sourceMappingURL=chunk-VQVVHMPG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icons/controls.tsx"],"names":[],"mappings":"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","file":"chunk-PGHEP4JD.js","sourcesContent":["import { createPrismIcon } from './context.js';\nimport DefaultSearchIcon from '@mui/icons-material/Search';\nexport const SearchIcon = createPrismIcon('search', DefaultSearchIcon);\nimport DefaultCloseIcon from '@mui/icons-material/Close';\nexport const CloseIcon = createPrismIcon('close', DefaultCloseIcon);\nimport DefaultChevronDownIcon from '@mui/icons-material/ExpandMore';\nexport const ChevronDownIcon = createPrismIcon('chevronDown', DefaultChevronDownIcon);\nimport DefaultChevronUpIcon from '@mui/icons-material/ExpandLess';\nexport const ChevronUpIcon = createPrismIcon('chevronUp', DefaultChevronUpIcon);\nimport DefaultChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nexport const ChevronLeftIcon = createPrismIcon('chevronLeft', DefaultChevronLeftIcon);\nimport DefaultChevronRightIcon from '@mui/icons-material/ChevronRight';\nexport const ChevronRightIcon = createPrismIcon('chevronRight', DefaultChevronRightIcon);\nimport DefaultArrowUpIcon from '@mui/icons-material/ArrowUpward';\nexport const ArrowUpIcon = createPrismIcon('arrowUp', DefaultArrowUpIcon);\nimport DefaultArrowDownIcon from '@mui/icons-material/ArrowDownward';\nexport const ArrowDownIcon = createPrismIcon('arrowDown', DefaultArrowDownIcon);\nimport DefaultArrowLeftIcon from '@mui/icons-material/ArrowBack';\nexport const ArrowLeftIcon = createPrismIcon('arrowLeft', DefaultArrowLeftIcon);\nimport DefaultArrowRightIcon from '@mui/icons-material/ArrowForward';\nexport const ArrowRightIcon = createPrismIcon('arrowRight', DefaultArrowRightIcon);\nimport DefaultArrowUpRightIcon from '@mui/icons-material/NorthEast';\nexport const ArrowUpRightIcon = createPrismIcon('arrowUpRight', DefaultArrowUpRightIcon);\nimport DefaultPanelCollapseIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\nexport const PanelCollapseIcon = createPrismIcon('panelCollapse', DefaultPanelCollapseIcon);\nimport DefaultPanelExpandIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nexport const PanelExpandIcon = createPrismIcon('panelExpand', DefaultPanelExpandIcon);\nimport DefaultMenuIcon from '@mui/icons-material/Menu';\nexport const MenuIcon = createPrismIcon('menu', DefaultMenuIcon);\nimport DefaultAddIcon from '@mui/icons-material/Add';\nexport const AddIcon = createPrismIcon('add', DefaultAddIcon);\nimport DefaultRemoveIcon from '@mui/icons-material/Remove';\nexport const RemoveIcon = createPrismIcon('remove', DefaultRemoveIcon);\nimport DefaultDragIcon from '@mui/icons-material/DragIndicator';\nexport const DragIcon = createPrismIcon('drag', DefaultDragIcon);\nimport DefaultCheckIcon from '@mui/icons-material/Check';\nexport const CheckIcon = createPrismIcon('check', DefaultCheckIcon);\nimport DefaultInfoIcon from '@mui/icons-material/InfoOutlined';\nexport const InfoIcon = createPrismIcon('info', DefaultInfoIcon);\nimport DefaultWarningIcon from '@mui/icons-material/WarningAmber';\nexport const WarningIcon = createPrismIcon('warning', DefaultWarningIcon);\nimport DefaultErrorIcon from '@mui/icons-material/ErrorOutlined';\nexport const ErrorIcon = createPrismIcon('error', DefaultErrorIcon);\nimport DefaultSuccessIcon from '@mui/icons-material/CheckCircleOutlined';\nexport const SuccessIcon = createPrismIcon('success', DefaultSuccessIcon);\nimport DefaultCheckboxIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nexport const CheckboxIcon = createPrismIcon('checkbox', DefaultCheckboxIcon);\nimport DefaultCheckboxCheckedIcon from '@mui/icons-material/CheckBox';\nexport const CheckboxCheckedIcon = createPrismIcon('checkboxChecked', DefaultCheckboxCheckedIcon);\nimport DefaultCheckboxMixedIcon from '@mui/icons-material/IndeterminateCheckBox';\nexport const CheckboxMixedIcon = createPrismIcon('checkboxMixed', DefaultCheckboxMixedIcon);\nimport DefaultRadioIcon from '@mui/icons-material/RadioButtonUnchecked';\nexport const RadioIcon = createPrismIcon('radio', DefaultRadioIcon);\nimport DefaultRadioCheckedIcon from '@mui/icons-material/RadioButtonChecked';\nexport const RadioCheckedIcon = createPrismIcon('radioChecked', DefaultRadioCheckedIcon);\nimport DefaultMoreIcon from '@mui/icons-material/MoreHoriz';\nexport const MoreIcon = createPrismIcon('more', DefaultMoreIcon);\nimport DefaultFilterIcon from '@mui/icons-material/FilterList';\nexport const FilterIcon = createPrismIcon('filter', DefaultFilterIcon);\nimport DefaultEmptyIcon from '@mui/icons-material/InboxOutlined';\nexport const EmptyIcon = createPrismIcon('empty', DefaultEmptyIcon);\nimport DefaultCopyIcon from '@mui/icons-material/ContentCopy';\nexport const CopyIcon = createPrismIcon('copy', DefaultCopyIcon);\nimport DefaultCalendarIcon from '@mui/icons-material/CalendarMonth';\nexport const CalendarIcon = createPrismIcon('calendar', DefaultCalendarIcon);\nimport DefaultDownloadIcon from '@mui/icons-material/Download';\nexport const DownloadIcon = createPrismIcon('download', DefaultDownloadIcon);\nimport DefaultUploadIcon from '@mui/icons-material/Upload';\nexport const UploadIcon = createPrismIcon('upload', DefaultUploadIcon);\nimport DefaultZoomInIcon from '@mui/icons-material/ZoomIn';\nexport const ZoomInIcon = createPrismIcon('zoomIn', DefaultZoomInIcon);\nimport DefaultZoomOutIcon from '@mui/icons-material/ZoomOut';\nexport const ZoomOutIcon = createPrismIcon('zoomOut', DefaultZoomOutIcon);\nimport DefaultFitViewIcon from '@mui/icons-material/FitScreen';\nexport const FitViewIcon = createPrismIcon('fitView', DefaultFitViewIcon);\nimport DefaultFullscreenIcon from '@mui/icons-material/Fullscreen';\nexport const FullscreenIcon = createPrismIcon('fullscreen', DefaultFullscreenIcon);\nimport DefaultFullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nexport const FullscreenExitIcon = createPrismIcon('fullscreenExit', DefaultFullscreenExitIcon);\nimport DefaultShareIcon from '@mui/icons-material/Share';\nexport const ShareIcon = createPrismIcon('share', DefaultShareIcon);\nimport DefaultPlayIcon from '@mui/icons-material/PlayArrow';\nexport const PlayIcon = createPrismIcon('play', DefaultPlayIcon);\nimport DefaultEyeIcon from '@mui/icons-material/Visibility';\nexport const EyeIcon = createPrismIcon('eye', DefaultEyeIcon);\nimport DefaultEyeOffIcon from '@mui/icons-material/VisibilityOff';\nexport const EyeOffIcon = createPrismIcon('eyeOff', DefaultEyeOffIcon);\nimport DefaultKeyboardIcon from '@mui/icons-material/KeyboardOutlined';\nexport const KeyboardIcon = createPrismIcon('keyboard', DefaultKeyboardIcon);\nimport DefaultLockIcon from '@mui/icons-material/LockOutlined';\nexport const LockIcon = createPrismIcon('lock', DefaultLockIcon);\nimport DefaultUnlockIcon from '@mui/icons-material/LockOpenOutlined';\nexport const UnlockIcon = createPrismIcon('unlock', DefaultUnlockIcon);\nimport DefaultStarIcon from '@mui/icons-material/Star';\nexport const StarIcon = createPrismIcon('star', DefaultStarIcon);\nimport DefaultStarEmptyIcon from '@mui/icons-material/StarBorder';\nexport const StarEmptyIcon = createPrismIcon('starEmpty', DefaultStarEmptyIcon);\nimport DefaultFirstPageIcon from '@mui/icons-material/FirstPage';\nexport const FirstPageIcon = createPrismIcon('firstPage', DefaultFirstPageIcon);\nimport DefaultLastPageIcon from '@mui/icons-material/LastPage';\nexport const LastPageIcon = createPrismIcon('lastPage', DefaultLastPageIcon);\n"]}
1
+ {"version":3,"sources":["../src/icons/controls.tsx"],"names":[],"mappings":"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","file":"chunk-VQVVHMPG.js","sourcesContent":["import { createPrismIcon } from './context.js';\nimport DefaultSearchIcon from '@mui/icons-material/Search';\nexport const SearchIcon = createPrismIcon('search', DefaultSearchIcon);\nimport DefaultCloseIcon from '@mui/icons-material/Close';\nexport const CloseIcon = createPrismIcon('close', DefaultCloseIcon);\nimport DefaultChevronDownIcon from '@mui/icons-material/ExpandMore';\nexport const ChevronDownIcon = createPrismIcon('chevronDown', DefaultChevronDownIcon);\nimport DefaultChevronUpIcon from '@mui/icons-material/ExpandLess';\nexport const ChevronUpIcon = createPrismIcon('chevronUp', DefaultChevronUpIcon);\nimport DefaultChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nexport const ChevronLeftIcon = createPrismIcon('chevronLeft', DefaultChevronLeftIcon);\nimport DefaultChevronRightIcon from '@mui/icons-material/ChevronRight';\nexport const ChevronRightIcon = createPrismIcon('chevronRight', DefaultChevronRightIcon);\nimport DefaultArrowUpIcon from '@mui/icons-material/ArrowUpward';\nexport const ArrowUpIcon = createPrismIcon('arrowUp', DefaultArrowUpIcon);\nimport DefaultArrowDownIcon from '@mui/icons-material/ArrowDownward';\nexport const ArrowDownIcon = createPrismIcon('arrowDown', DefaultArrowDownIcon);\nimport DefaultArrowLeftIcon from '@mui/icons-material/ArrowBack';\nexport const ArrowLeftIcon = createPrismIcon('arrowLeft', DefaultArrowLeftIcon);\nimport DefaultArrowRightIcon from '@mui/icons-material/ArrowForward';\nexport const ArrowRightIcon = createPrismIcon('arrowRight', DefaultArrowRightIcon);\nimport DefaultArrowUpRightIcon from '@mui/icons-material/NorthEast';\nexport const ArrowUpRightIcon = createPrismIcon('arrowUpRight', DefaultArrowUpRightIcon);\nimport DefaultPanelCollapseIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\nexport const PanelCollapseIcon = createPrismIcon('panelCollapse', DefaultPanelCollapseIcon);\nimport DefaultPanelExpandIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nexport const PanelExpandIcon = createPrismIcon('panelExpand', DefaultPanelExpandIcon);\nimport DefaultMenuIcon from '@mui/icons-material/Menu';\nexport const MenuIcon = createPrismIcon('menu', DefaultMenuIcon);\nimport DefaultAddIcon from '@mui/icons-material/Add';\nexport const AddIcon = createPrismIcon('add', DefaultAddIcon);\nimport DefaultRemoveIcon from '@mui/icons-material/Remove';\nexport const RemoveIcon = createPrismIcon('remove', DefaultRemoveIcon);\nimport DefaultDragIcon from '@mui/icons-material/DragIndicator';\nexport const DragIcon = createPrismIcon('drag', DefaultDragIcon);\nimport DefaultCheckIcon from '@mui/icons-material/Check';\nexport const CheckIcon = createPrismIcon('check', DefaultCheckIcon);\nimport DefaultInfoIcon from '@mui/icons-material/InfoOutlined';\nexport const InfoIcon = createPrismIcon('info', DefaultInfoIcon);\nimport DefaultWarningIcon from '@mui/icons-material/WarningAmber';\nexport const WarningIcon = createPrismIcon('warning', DefaultWarningIcon);\nimport DefaultErrorIcon from '@mui/icons-material/ErrorOutlined';\nexport const ErrorIcon = createPrismIcon('error', DefaultErrorIcon);\nimport DefaultSuccessIcon from '@mui/icons-material/CheckCircleOutlined';\nexport const SuccessIcon = createPrismIcon('success', DefaultSuccessIcon);\nimport DefaultCheckboxIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nexport const CheckboxIcon = createPrismIcon('checkbox', DefaultCheckboxIcon);\nimport DefaultCheckboxCheckedIcon from '@mui/icons-material/CheckBox';\nexport const CheckboxCheckedIcon = createPrismIcon('checkboxChecked', DefaultCheckboxCheckedIcon);\nimport DefaultCheckboxMixedIcon from '@mui/icons-material/IndeterminateCheckBox';\nexport const CheckboxMixedIcon = createPrismIcon('checkboxMixed', DefaultCheckboxMixedIcon);\nimport DefaultRadioIcon from '@mui/icons-material/RadioButtonUnchecked';\nexport const RadioIcon = createPrismIcon('radio', DefaultRadioIcon);\nimport DefaultRadioCheckedIcon from '@mui/icons-material/RadioButtonChecked';\nexport const RadioCheckedIcon = createPrismIcon('radioChecked', DefaultRadioCheckedIcon);\nimport DefaultMoreIcon from '@mui/icons-material/MoreHoriz';\nexport const MoreIcon = createPrismIcon('more', DefaultMoreIcon);\nimport DefaultFilterIcon from '@mui/icons-material/FilterList';\nexport const FilterIcon = createPrismIcon('filter', DefaultFilterIcon);\nimport DefaultEmptyIcon from '@mui/icons-material/InboxOutlined';\nexport const EmptyIcon = createPrismIcon('empty', DefaultEmptyIcon);\nimport DefaultCopyIcon from '@mui/icons-material/ContentCopy';\nexport const CopyIcon = createPrismIcon('copy', DefaultCopyIcon);\nimport DefaultCalendarIcon from '@mui/icons-material/CalendarMonth';\nexport const CalendarIcon = createPrismIcon('calendar', DefaultCalendarIcon);\nimport DefaultDownloadIcon from '@mui/icons-material/Download';\nexport const DownloadIcon = createPrismIcon('download', DefaultDownloadIcon);\nimport DefaultUploadIcon from '@mui/icons-material/Upload';\nexport const UploadIcon = createPrismIcon('upload', DefaultUploadIcon);\nimport DefaultZoomInIcon from '@mui/icons-material/ZoomIn';\nexport const ZoomInIcon = createPrismIcon('zoomIn', DefaultZoomInIcon);\nimport DefaultZoomOutIcon from '@mui/icons-material/ZoomOut';\nexport const ZoomOutIcon = createPrismIcon('zoomOut', DefaultZoomOutIcon);\nimport DefaultFitViewIcon from '@mui/icons-material/FitScreen';\nexport const FitViewIcon = createPrismIcon('fitView', DefaultFitViewIcon);\nimport DefaultFullscreenIcon from '@mui/icons-material/Fullscreen';\nexport const FullscreenIcon = createPrismIcon('fullscreen', DefaultFullscreenIcon);\nimport DefaultFullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nexport const FullscreenExitIcon = createPrismIcon('fullscreenExit', DefaultFullscreenExitIcon);\nimport DefaultShareIcon from '@mui/icons-material/Share';\nexport const ShareIcon = createPrismIcon('share', DefaultShareIcon);\nimport DefaultPlayIcon from '@mui/icons-material/PlayArrow';\nexport const PlayIcon = createPrismIcon('play', DefaultPlayIcon);\nimport DefaultEyeIcon from '@mui/icons-material/Visibility';\nexport const EyeIcon = createPrismIcon('eye', DefaultEyeIcon);\nimport DefaultEyeOffIcon from '@mui/icons-material/VisibilityOff';\nexport const EyeOffIcon = createPrismIcon('eyeOff', DefaultEyeOffIcon);\nimport DefaultKeyboardIcon from '@mui/icons-material/KeyboardOutlined';\nexport const KeyboardIcon = createPrismIcon('keyboard', DefaultKeyboardIcon);\nimport DefaultLockIcon from '@mui/icons-material/LockOutlined';\nexport const LockIcon = createPrismIcon('lock', DefaultLockIcon);\nimport DefaultUnlockIcon from '@mui/icons-material/LockOpenOutlined';\nexport const UnlockIcon = createPrismIcon('unlock', DefaultUnlockIcon);\nimport DefaultStarIcon from '@mui/icons-material/Star';\nexport const StarIcon = createPrismIcon('star', DefaultStarIcon);\nimport DefaultStarEmptyIcon from '@mui/icons-material/StarBorder';\nexport const StarEmptyIcon = createPrismIcon('starEmpty', DefaultStarEmptyIcon);\nimport DefaultFirstPageIcon from '@mui/icons-material/FirstPage';\nexport const FirstPageIcon = createPrismIcon('firstPage', DefaultFirstPageIcon);\nimport DefaultLastPageIcon from '@mui/icons-material/LastPage';\nexport const LastPageIcon = createPrismIcon('lastPage', DefaultLastPageIcon);\n"]}
@@ -5,6 +5,7 @@ import { listClasses } from '@mui/material/List';
5
5
  import { menuItemClasses } from '@mui/material/MenuItem';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
8
+ // src/components/popover/popover.tsx
8
9
  var POPOVER_DISTANCE = 0.75;
9
10
  function calculateAnchorOrigin(arrow = "top-right") {
10
11
  const configs = {
@@ -188,5 +189,5 @@ function usePopover() {
188
189
  }
189
190
 
190
191
  export { CustomPopover, usePopover };
191
- //# sourceMappingURL=chunk-DRFNMZLG.js.map
192
- //# sourceMappingURL=chunk-DRFNMZLG.js.map
192
+ //# sourceMappingURL=chunk-VUKOT432.js.map
193
+ //# sourceMappingURL=chunk-VUKOT432.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/popover/popover.tsx"],"names":[],"mappings":"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","file":"chunk-VUKOT432.js","sourcesContent":["'use client';\n\n/**\n * Popover Component\n *\n * Enhanced popover component with arrow support and useful hook.\n *\n * @module components/popover\n */\n\nimport type { ReactNode, MouseEvent, Dispatch, SetStateAction } from 'react';\nimport { useState, useCallback } from 'react';\nimport Popover from '@mui/material/Popover';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { PopoverProps, PopoverOrigin } from '@mui/material/Popover';\nimport type { SxProps, Theme, CSSObject } from '@mui/material/styles';\nimport { listClasses } from '@mui/material/List';\nimport { menuItemClasses } from '@mui/material/MenuItem';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ArrowPlacement =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom';\n\nexport interface PopoverArrowProps {\n /** Hide the arrow */\n hide?: boolean;\n /** Arrow size in pixels */\n size?: number;\n /** Offset from edge */\n offset?: number;\n /** Arrow placement */\n placement?: ArrowPlacement;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\nexport interface CustomPopoverProps extends Omit<PopoverProps, 'open'> {\n /** Whether the popover is open */\n open: boolean | Element | null;\n /** Close handler */\n onClose: () => void;\n /** Arrow configuration */\n arrow?: PopoverArrowProps;\n /** Minimum width of the popover */\n minWidth?: number | string;\n}\n\n// =============================================================================\n// UTILS\n// =============================================================================\n\nconst POPOVER_DISTANCE = 0.75;\n\ninterface AnchorOriginConfig {\n paperStyles?: CSSObject;\n anchorOrigin: PopoverOrigin;\n transformOrigin: PopoverOrigin;\n}\n\nfunction calculateAnchorOrigin(arrow: ArrowPlacement = 'top-right'): AnchorOriginConfig {\n const configs: Record<ArrowPlacement, AnchorOriginConfig> = {\n 'top-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'top-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'bottom', horizontal: 'center' },\n transformOrigin: { vertical: 'top', horizontal: 'center' },\n },\n 'top-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'bottom-left': {\n paperStyles: { ml: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'bottom-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n transformOrigin: { vertical: 'bottom', horizontal: 'center' },\n },\n 'bottom-right': {\n paperStyles: { ml: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n 'left-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'left' },\n },\n 'left-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'right' },\n transformOrigin: { vertical: 'center', horizontal: 'left' },\n },\n 'left-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'bottom', horizontal: 'left' },\n },\n 'right-top': {\n paperStyles: { mt: -POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'top', horizontal: 'left' },\n transformOrigin: { vertical: 'top', horizontal: 'right' },\n },\n 'right-center': {\n paperStyles: undefined,\n anchorOrigin: { vertical: 'center', horizontal: 'left' },\n transformOrigin: { vertical: 'center', horizontal: 'right' },\n },\n 'right-bottom': {\n paperStyles: { mt: POPOVER_DISTANCE },\n anchorOrigin: { vertical: 'bottom', horizontal: 'left' },\n transformOrigin: { vertical: 'bottom', horizontal: 'right' },\n },\n };\n\n return configs[arrow] || configs['top-right'];\n}\n\n// =============================================================================\n// ARROW COMPONENT\n// =============================================================================\n\ninterface ArrowStyledProps {\n ownerState: {\n size: number;\n offset: number;\n placement: ArrowPlacement;\n };\n}\n\nconst Arrow = styled('span', {\n shouldForwardProp: (prop) => prop !== 'ownerState',\n})<ArrowStyledProps>(({ theme, ownerState }) => {\n const { size, offset, placement } = ownerState;\n\n const directions: Record<string, CSSObject> = {\n top: { top: 0, rotate: '135deg', translate: '0 -50%' },\n bottom: { bottom: 0, rotate: '-45deg', translate: '0 50%' },\n left: { left: 0, rotate: '45deg', translate: '-50% 0' },\n right: { right: 0, rotate: '-135deg', translate: '50% 0' },\n };\n\n const getDirection = () => {\n if (placement.startsWith('top-')) return directions.top;\n if (placement.startsWith('bottom-')) return directions.bottom;\n if (placement.startsWith('left-')) return directions.left;\n if (placement.startsWith('right-')) return directions.right;\n return {};\n };\n\n const getPosition = () => {\n if (placement.endsWith('-left')) return { left: offset };\n if (placement.endsWith('-right')) return { right: offset };\n if (placement.endsWith('-top')) return { top: offset };\n if (placement.endsWith('-bottom')) return { bottom: offset };\n if (placement.endsWith('-center')) {\n if (placement.startsWith('top-') || placement.startsWith('bottom-')) {\n return { left: 0, right: 0, margin: 'auto' };\n }\n return { top: 0, bottom: 0, margin: 'auto' };\n }\n return {};\n };\n\n return {\n width: size,\n height: size,\n position: 'absolute',\n borderBottomLeftRadius: size / 4,\n clipPath: 'polygon(0% 0%, 100% 100%, 0% 100%)',\n backgroundColor: theme.palette.background.paper,\n border: `solid 1px ${alpha(theme.palette.grey[500], 0.12)}`,\n ...getDirection(),\n ...getPosition(),\n };\n});\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * CustomPopover - Enhanced popover with arrow support.\n *\n * @example\n * ```tsx\n * const popover = usePopover();\n *\n * <Button onClick={popover.onOpen}>Open Menu</Button>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * arrow={{ placement: 'top-right' }}\n * >\n * <MenuItem>Option 1</MenuItem>\n * <MenuItem>Option 2</MenuItem>\n * </CustomPopover>\n * ```\n */\nexport function CustomPopover({\n open,\n onClose,\n children,\n anchorEl,\n arrow,\n minWidth = 140,\n slotProps,\n ...other\n}: CustomPopoverProps): ReactNode {\n const arrowSize = arrow?.size ?? 14;\n const arrowOffset = arrow?.offset ?? 17;\n const arrowPlacement = arrow?.placement ?? 'top-right';\n const hideArrow = arrow?.hide ?? false;\n\n const { paperStyles, anchorOrigin, transformOrigin } = calculateAnchorOrigin(arrowPlacement);\n\n const isOpen = Boolean(open);\n\n return (\n <Popover\n open={isOpen}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{\n ...slotProps,\n paper: {\n ...(typeof slotProps?.paper === 'object' ? slotProps.paper : {}),\n sx: [\n paperStyles as SxProps<Theme>,\n {\n overflow: 'inherit',\n [`& .${listClasses.root}`]: { minWidth },\n [`& .${menuItemClasses.root}`]: { gap: 2 },\n },\n ...(typeof slotProps?.paper === 'object' && slotProps.paper && 'sx' in slotProps.paper\n ? Array.isArray(slotProps.paper.sx)\n ? slotProps.paper.sx\n : [slotProps.paper.sx]\n : []),\n ],\n },\n }}\n {...other}\n >\n {!hideArrow && (\n <Arrow\n ownerState={{\n size: arrowSize,\n offset: arrowOffset,\n placement: arrowPlacement,\n }}\n sx={arrow?.sx}\n />\n )}\n {children}\n </Popover>\n );\n}\n\n// =============================================================================\n// HOOK\n// =============================================================================\n\n/**\n * Return type for usePopover hook with generic element type.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n */\nexport interface UsePopoverReturn<T extends HTMLElement = HTMLElement> {\n /** Whether the popover is open */\n open: boolean;\n /** The anchor element (typed to T) */\n anchorEl: T | null;\n /** Open the popover - accepts MouseEvent with typed currentTarget */\n onOpen: (event: MouseEvent<T>) => void;\n /** Close the popover */\n onClose: () => void;\n /** Set the anchor element directly (typed to T | null) */\n setAnchorEl: Dispatch<SetStateAction<T | null>>;\n}\n\n/**\n * usePopover - Generic hook for managing popover state.\n *\n * Type-safe hook that accepts a generic type parameter for the anchor element.\n * This ensures type safety when accessing `event.currentTarget` and `anchorEl`.\n *\n * @typeParam T - The HTML element type (default: HTMLElement)\n * @returns Popover state and controls with typed elements\n *\n * @example\n * ```tsx\n * // Basic usage with default HTMLElement\n * function MenuButton() {\n * const popover = usePopover();\n *\n * return (\n * <>\n * <IconButton onClick={popover.onOpen}>\n * <MoreVertIcon />\n * </IconButton>\n *\n * <CustomPopover\n * open={popover.open}\n * onClose={popover.onClose}\n * anchorEl={popover.anchorEl}\n * >\n * <MenuItem onClick={popover.onClose}>Edit</MenuItem>\n * <MenuItem onClick={popover.onClose}>Delete</MenuItem>\n * </CustomPopover>\n * </>\n * );\n * }\n *\n * // Type-safe usage with specific element type\n * function TypedButton() {\n * const popover = usePopover<HTMLButtonElement>();\n *\n * // TypeScript knows anchorEl is HTMLButtonElement | null\n * // and onOpen accepts MouseEvent<HTMLButtonElement>\n *\n * return (\n * <>\n * <button onClick={popover.onOpen}>Click me</button>\n * <Popover open={popover.open} anchorEl={popover.anchorEl} onClose={popover.onClose}>\n * Content here\n * </Popover>\n * </>\n * );\n * }\n * ```\n */\nexport function usePopover<T extends HTMLElement = HTMLElement>(): UsePopoverReturn<T> {\n const [anchorEl, setAnchorEl] = useState<T | null>(null);\n\n const onOpen = useCallback((event: MouseEvent<T>) => {\n setAnchorEl(event.currentTarget as T);\n }, []);\n\n const onClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n return {\n open: Boolean(anchorEl),\n anchorEl,\n onOpen,\n onClose,\n setAnchorEl,\n };\n}\n"]}
@@ -0,0 +1,315 @@
1
+ import { useState, useCallback, useRef, useId, useEffect, useMemo } from 'react';
2
+ import Dialog from '@mui/material/Dialog';
3
+ import DialogContent from '@mui/material/DialogContent';
4
+ import TextField from '@mui/material/TextField';
5
+ import InputAdornment from '@mui/material/InputAdornment';
6
+ import Box from '@mui/material/Box';
7
+ import Stack from '@mui/material/Stack';
8
+ import Typography from '@mui/material/Typography';
9
+ import Divider from '@mui/material/Divider';
10
+ import Chip from '@mui/material/Chip';
11
+ import { alpha } from '@mui/material/styles';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+
14
+ // src/components/command-palette/command-palette.tsx
15
+ function CommandPalette({
16
+ actions,
17
+ open: controlledOpen,
18
+ onOpenChange,
19
+ onClosed,
20
+ triggerKey = "k",
21
+ disableShortcut = false,
22
+ placeholder = "Type a command or search\u2026",
23
+ emptyMessage = "No matching commands"
24
+ }) {
25
+ const [internalOpen, setInternalOpen] = useState(false);
26
+ const open = controlledOpen ?? internalOpen;
27
+ const setOpen = useCallback(
28
+ (next) => {
29
+ if (controlledOpen === void 0) setInternalOpen(next);
30
+ onOpenChange?.(next);
31
+ },
32
+ [controlledOpen, onOpenChange]
33
+ );
34
+ const [query, setQuery] = useState("");
35
+ const [highlight, setHighlight] = useState(0);
36
+ const inputRef = useRef(null);
37
+ const listId = useId();
38
+ useEffect(() => {
39
+ if (disableShortcut) return void 0;
40
+ const onKey = (e) => {
41
+ if (e.defaultPrevented || e.isComposing || e.repeat) return;
42
+ const meta = e.metaKey || e.ctrlKey;
43
+ if (meta && e.key.toLowerCase() === triggerKey.toLowerCase() && !e.altKey && !e.shiftKey) {
44
+ e.preventDefault();
45
+ setOpen(!open);
46
+ }
47
+ };
48
+ window.addEventListener("keydown", onKey);
49
+ return () => window.removeEventListener("keydown", onKey);
50
+ }, [triggerKey, disableShortcut, open, setOpen]);
51
+ useEffect(() => {
52
+ if (open) {
53
+ setQuery("");
54
+ setHighlight(0);
55
+ const id = requestAnimationFrame(() => inputRef.current?.focus());
56
+ return () => cancelAnimationFrame(id);
57
+ }
58
+ return void 0;
59
+ }, [open]);
60
+ const filtered = useMemo(
61
+ () => groupActions(filterActions(actions, query)).flatMap((group) => group.items.map((item) => item.action)),
62
+ [actions, query]
63
+ );
64
+ useEffect(() => {
65
+ if (highlight >= filtered.length) setHighlight(0);
66
+ }, [filtered.length, highlight]);
67
+ const runAction = useCallback(
68
+ async (action) => {
69
+ if (action.disabled) return;
70
+ setOpen(false);
71
+ try {
72
+ await action.onSelect();
73
+ } catch {
74
+ }
75
+ },
76
+ [setOpen]
77
+ );
78
+ const onKeyDown = useCallback(
79
+ (e) => {
80
+ if (e.nativeEvent.isComposing) return;
81
+ if (e.key === "ArrowDown") {
82
+ e.preventDefault();
83
+ setHighlight((h) => filtered.length === 0 ? 0 : (h + 1) % filtered.length);
84
+ } else if (e.key === "ArrowUp") {
85
+ e.preventDefault();
86
+ setHighlight((h) => filtered.length === 0 ? 0 : (h - 1 + filtered.length) % filtered.length);
87
+ } else if (e.key === "Enter") {
88
+ e.preventDefault();
89
+ const target = filtered[highlight];
90
+ if (target) void runAction(target);
91
+ } else if (e.key === "Escape") {
92
+ e.preventDefault();
93
+ setOpen(false);
94
+ }
95
+ },
96
+ [filtered, highlight, runAction, setOpen]
97
+ );
98
+ const grouped = useMemo(() => groupActions(filtered), [filtered]);
99
+ return /* @__PURE__ */ jsx(
100
+ Dialog,
101
+ {
102
+ "aria-label": "Command palette",
103
+ open,
104
+ onClose: () => setOpen(false),
105
+ fullWidth: true,
106
+ maxWidth: "sm",
107
+ slotProps: {
108
+ transition: { onExited: onClosed },
109
+ paper: {
110
+ sx: { borderRadius: 2, mt: "10vh", alignSelf: "flex-start" }
111
+ }
112
+ },
113
+ children: /* @__PURE__ */ jsxs(DialogContent, { sx: { p: 0 }, children: [
114
+ /* @__PURE__ */ jsx(Box, { sx: { p: 2, pb: 1 }, children: /* @__PURE__ */ jsx(
115
+ TextField,
116
+ {
117
+ inputRef,
118
+ fullWidth: true,
119
+ variant: "standard",
120
+ value: query,
121
+ onChange: (e) => {
122
+ setQuery(e.target.value);
123
+ setHighlight(0);
124
+ },
125
+ onKeyDown,
126
+ placeholder,
127
+ slotProps: {
128
+ input: {
129
+ disableUnderline: true,
130
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", sx: { ml: 0.5, mr: 1 }, children: /* @__PURE__ */ jsx(Box, { component: "span", sx: { fontSize: 18, opacity: 0.6 }, children: "\u2318" }) })
131
+ },
132
+ htmlInput: {
133
+ role: "combobox",
134
+ "aria-label": placeholder,
135
+ "aria-autocomplete": "list",
136
+ "aria-expanded": open,
137
+ "aria-controls": listId,
138
+ "aria-activedescendant": filtered[highlight] ? `${listId}-${filtered[highlight].id}` : void 0
139
+ }
140
+ }
141
+ }
142
+ ) }),
143
+ /* @__PURE__ */ jsx(Divider, {}),
144
+ /* @__PURE__ */ jsx(
145
+ Box,
146
+ {
147
+ id: listId,
148
+ role: "listbox",
149
+ "aria-label": "Commands",
150
+ sx: {
151
+ maxHeight: 360,
152
+ overflowY: "auto",
153
+ py: 0.5
154
+ },
155
+ children: filtered.length === 0 ? /* @__PURE__ */ jsx(Box, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx(
156
+ Typography,
157
+ {
158
+ variant: "body2",
159
+ sx: {
160
+ color: "text.secondary"
161
+ },
162
+ children: emptyMessage
163
+ }
164
+ ) }) : grouped.map((g) => /* @__PURE__ */ jsxs(Box, { children: [
165
+ g.label ? /* @__PURE__ */ jsx(
166
+ Typography,
167
+ {
168
+ variant: "caption",
169
+ sx: {
170
+ color: "text.secondary",
171
+ px: 2,
172
+ py: 0.75,
173
+ display: "block",
174
+ textTransform: "uppercase",
175
+ letterSpacing: 0.5
176
+ },
177
+ children: g.label
178
+ }
179
+ ) : null,
180
+ g.items.map((entry) => /* @__PURE__ */ jsx(
181
+ Row,
182
+ {
183
+ id: `${listId}-${entry.action.id}`,
184
+ action: entry.action,
185
+ selected: entry.flatIndex === highlight,
186
+ onSelect: () => void runAction(entry.action),
187
+ onHover: () => setHighlight(entry.flatIndex)
188
+ },
189
+ entry.action.id
190
+ ))
191
+ ] }, g.label ?? "__none__"))
192
+ }
193
+ )
194
+ ] })
195
+ }
196
+ );
197
+ }
198
+ function Row({
199
+ id,
200
+ action,
201
+ selected,
202
+ onSelect,
203
+ onHover
204
+ }) {
205
+ const ref = useRef(null);
206
+ useEffect(() => {
207
+ if (selected && ref.current) {
208
+ ref.current.scrollIntoView({ block: "nearest" });
209
+ }
210
+ }, [selected]);
211
+ return /* @__PURE__ */ jsxs(
212
+ Box,
213
+ {
214
+ id,
215
+ role: "option",
216
+ "aria-selected": selected,
217
+ "aria-disabled": action.disabled || void 0,
218
+ ref,
219
+ onMouseEnter: onHover,
220
+ onClick: onSelect,
221
+ sx: (theme) => ({
222
+ px: 2,
223
+ py: 1.25,
224
+ display: "flex",
225
+ alignItems: "center",
226
+ gap: 1.5,
227
+ cursor: action.disabled ? "not-allowed" : "pointer",
228
+ opacity: action.disabled ? 0.5 : 1,
229
+ bgcolor: selected ? alpha(theme.palette.primary.main, 0.12) : "transparent",
230
+ "&:hover": {
231
+ bgcolor: selected ? alpha(theme.palette.primary.main, 0.16) : alpha(theme.palette.action.hover, 1)
232
+ }
233
+ }),
234
+ children: [
235
+ action.icon ? /* @__PURE__ */ jsx(Box, { sx: { display: "flex", alignItems: "center", width: 20, opacity: 0.8 }, children: action.icon }) : null,
236
+ /* @__PURE__ */ jsx(Box, { sx: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsxs(
237
+ Stack,
238
+ {
239
+ direction: "row",
240
+ spacing: 1,
241
+ sx: {
242
+ alignItems: "baseline"
243
+ },
244
+ children: [
245
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", sx: { fontWeight: 500 }, noWrap: true, children: action.title }),
246
+ action.subtitle ? /* @__PURE__ */ jsx(
247
+ Typography,
248
+ {
249
+ variant: "caption",
250
+ noWrap: true,
251
+ sx: {
252
+ color: "text.secondary"
253
+ },
254
+ children: action.subtitle
255
+ }
256
+ ) : null
257
+ ]
258
+ }
259
+ ) }),
260
+ action.shortcut?.length ? /* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 0.5, children: action.shortcut.map((k, i) => /* @__PURE__ */ jsx(
261
+ Chip,
262
+ {
263
+ size: "small",
264
+ label: k,
265
+ variant: "outlined",
266
+ sx: { height: 20, fontSize: 10, fontFamily: "monospace" }
267
+ },
268
+ i
269
+ )) }) : null
270
+ ]
271
+ }
272
+ );
273
+ }
274
+ function filterActions(actions, query) {
275
+ const q = query.trim().toLowerCase();
276
+ if (!q) return actions;
277
+ const scored = [];
278
+ for (const action of actions) {
279
+ const haystacks = [action.title.toLowerCase()];
280
+ if (action.subtitle) haystacks.push(action.subtitle.toLowerCase());
281
+ if (action.keywords?.length) {
282
+ for (const k of action.keywords) haystacks.push(k.toLowerCase());
283
+ }
284
+ let bestScore = -1;
285
+ for (const h of haystacks) {
286
+ const idx = h.indexOf(q);
287
+ if (idx === -1) continue;
288
+ const score = idx === 0 ? 1e3 - h.length : 100 - idx;
289
+ if (score > bestScore) bestScore = score;
290
+ }
291
+ if (bestScore >= 0) scored.push({ action, score: bestScore });
292
+ }
293
+ scored.sort((a, b) => b.score - a.score);
294
+ return scored.map((s) => s.action);
295
+ }
296
+ function groupActions(actions) {
297
+ const out = /* @__PURE__ */ new Map();
298
+ let flatIndex = 0;
299
+ for (const action of actions) {
300
+ const label = action.group;
301
+ const key = label ?? "__none__";
302
+ let bucket = out.get(key);
303
+ if (!bucket) {
304
+ bucket = { label, items: [] };
305
+ out.set(key, bucket);
306
+ }
307
+ bucket.items.push({ action, flatIndex });
308
+ flatIndex += 1;
309
+ }
310
+ return [...out.values()];
311
+ }
312
+
313
+ export { CommandPalette };
314
+ //# sourceMappingURL=chunk-WD4N72DL.js.map
315
+ //# sourceMappingURL=chunk-WD4N72DL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/command-palette/command-palette.tsx"],"names":[],"mappings":"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","file":"chunk-WD4N72DL.js","sourcesContent":["/**\n * CommandPalette — keyboard-driven action launcher.\n *\n * A modal palette opened by a global shortcut (default Cmd/Ctrl+K)\n * that lets the user search and trigger any `CommandAction` in the\n * registered set. Actions can be grouped (`group`) for visual\n * separation and filtered with case-insensitive matching against\n * `title`, `subtitle`, and any `keywords`. Arrow keys move the\n * highlight, Enter selects, Escape closes.\n *\n * Use cases: app-wide navigation jumps, frequently used admin\n * actions, contextual menus that need a quick-search affordance.\n *\n * @example\n * ```tsx\n * <CommandPalette\n * actions={[\n * {\n * id: 'go-users',\n * title: 'Go to Users',\n * group: 'Navigation',\n * keywords: ['admin', 'list'],\n * onSelect: () => navigate('/admin/users'),\n * },\n * ]}\n * />\n * ```\n */\nimport { type ReactNode, useCallback, useEffect, useMemo, useId, useRef, useState } from 'react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport Chip from '@mui/material/Chip';\nimport { alpha } from '@mui/material/styles';\n\nexport interface CommandAction {\n /** Stable action identifier — used as React key. */\n id: string;\n /** Primary text shown in the row. */\n title: string;\n /** Optional secondary text shown beside the title. */\n subtitle?: string;\n /** Group label — actions sharing a group are visually clustered. */\n group?: string;\n /** Extra search terms (synonyms, aliases). */\n keywords?: readonly string[];\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Optional shortcut hint (e.g. ['⌘', 'P']) shown right-aligned. */\n shortcut?: readonly string[];\n /** Disable the action without removing it from the list. */\n disabled?: boolean;\n /** Action handler. The palette closes after `onSelect` resolves. */\n onSelect: () => void | Promise<void>;\n}\n\nexport interface CommandPaletteProps {\n /** Registered actions. Re-render to update; use a memoized array. */\n actions: readonly CommandAction[];\n /**\n * Controlled open state. If omitted, the palette opens itself when\n * `triggerKey` is pressed and closes on Escape/select.\n */\n open?: boolean;\n /** Open-state setter for the controlled mode. */\n onOpenChange?: (open: boolean) => void;\n /** Runs after the modal releases focus; useful for commands that focus another control. */\n onClosed?: () => void;\n /**\n * Global keyboard shortcut to open. Default `'k'` (paired with the\n * platform meta key — ⌘ on macOS, Ctrl elsewhere).\n */\n triggerKey?: string;\n /** Disable the global shortcut (useful in nested palettes). */\n disableShortcut?: boolean;\n /** Placeholder for the search field. */\n placeholder?: string;\n /** Empty-state copy shown when no actions match. */\n emptyMessage?: string;\n}\n\nexport function CommandPalette({\n actions,\n open: controlledOpen,\n onOpenChange,\n onClosed,\n triggerKey = 'k',\n disableShortcut = false,\n placeholder = 'Type a command or search…',\n emptyMessage = 'No matching commands',\n}: CommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n const setOpen = useCallback(\n (next: boolean) => {\n if (controlledOpen === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [controlledOpen, onOpenChange]\n );\n\n const [query, setQuery] = useState('');\n const [highlight, setHighlight] = useState(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listId = useId();\n\n // Bubble after the focused control. An editor can reserve its own shortcut.\n useEffect(() => {\n if (disableShortcut) return undefined;\n const onKey = (e: KeyboardEvent) => {\n if (e.defaultPrevented || e.isComposing || e.repeat) return;\n const meta = e.metaKey || e.ctrlKey;\n if (meta && e.key.toLowerCase() === triggerKey.toLowerCase() && !e.altKey && !e.shiftKey) {\n e.preventDefault();\n setOpen(!open);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [triggerKey, disableShortcut, open, setOpen]);\n\n // Reset query + highlight every time the palette opens.\n useEffect(() => {\n if (open) {\n setQuery('');\n setHighlight(0);\n // Defer focus to the next frame so the dialog's transition has\n // mounted the input.\n const id = requestAnimationFrame(() => inputRef.current?.focus());\n return () => cancelAnimationFrame(id);\n }\n return undefined;\n }, [open]);\n\n const filtered = useMemo(\n () => groupActions(filterActions(actions, query)).flatMap((group) => group.items.map((item) => item.action)),\n [actions, query]\n );\n\n // Re-clamp the highlight when filtering changes.\n useEffect(() => {\n if (highlight >= filtered.length) setHighlight(0);\n }, [filtered.length, highlight]);\n\n const runAction = useCallback(\n async (action: CommandAction) => {\n if (action.disabled) return;\n setOpen(false);\n try {\n await action.onSelect();\n } catch {\n // Swallow — the caller's onSelect is responsible for surfacing\n // its own errors. We just don't want a rejected promise to\n // crash the palette host.\n }\n },\n [setOpen]\n );\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.nativeEvent.isComposing) return;\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setHighlight((h) => (filtered.length === 0 ? 0 : (h + 1) % filtered.length));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setHighlight((h) => (filtered.length === 0 ? 0 : (h - 1 + filtered.length) % filtered.length));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n const target = filtered[highlight];\n if (target) void runAction(target);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n }\n },\n [filtered, highlight, runAction, setOpen]\n );\n\n // Group rows for rendering. Within each group we record the absolute\n // index so the highlight cursor can address rows by their position\n // in the flat filtered list.\n const grouped = useMemo(() => groupActions(filtered), [filtered]);\n\n return (\n <Dialog\n aria-label=\"Command palette\"\n open={open}\n onClose={() => setOpen(false)}\n fullWidth\n maxWidth=\"sm\"\n slotProps={{\n transition: { onExited: onClosed },\n paper: {\n sx: { borderRadius: 2, mt: '10vh', alignSelf: 'flex-start' },\n },\n }}\n >\n <DialogContent sx={{ p: 0 }}>\n <Box sx={{ p: 2, pb: 1 }}>\n <TextField\n inputRef={inputRef}\n fullWidth\n variant=\"standard\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setHighlight(0);\n }}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n slotProps={{\n input: {\n disableUnderline: true,\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: 0.5, mr: 1 }}>\n <Box component=\"span\" sx={{ fontSize: 18, opacity: 0.6 }}>\n ⌘\n </Box>\n </InputAdornment>\n ),\n },\n htmlInput: {\n role: 'combobox',\n 'aria-label': placeholder,\n 'aria-autocomplete': 'list',\n 'aria-expanded': open,\n 'aria-controls': listId,\n 'aria-activedescendant': filtered[highlight] ? `${listId}-${filtered[highlight]!.id}` : undefined,\n },\n }}\n />\n </Box>\n <Divider />\n <Box\n id={listId}\n role=\"listbox\"\n aria-label=\"Commands\"\n sx={{\n maxHeight: 360,\n overflowY: 'auto',\n py: 0.5,\n }}\n >\n {filtered.length === 0 ? (\n <Box sx={{ p: 3, textAlign: 'center' }}>\n <Typography\n variant=\"body2\"\n sx={{\n color: 'text.secondary',\n }}\n >\n {emptyMessage}\n </Typography>\n </Box>\n ) : (\n grouped.map((g) => (\n <Box key={g.label ?? '__none__'}>\n {g.label ? (\n <Typography\n variant=\"caption\"\n sx={{\n color: 'text.secondary',\n px: 2,\n py: 0.75,\n display: 'block',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n }}\n >\n {g.label}\n </Typography>\n ) : null}\n {g.items.map((entry) => (\n <Row\n key={entry.action.id}\n id={`${listId}-${entry.action.id}`}\n action={entry.action}\n selected={entry.flatIndex === highlight}\n onSelect={() => void runAction(entry.action)}\n onHover={() => setHighlight(entry.flatIndex)}\n />\n ))}\n </Box>\n ))\n )}\n </Box>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction Row({\n id,\n action,\n selected,\n onSelect,\n onHover,\n}: {\n id: string;\n action: CommandAction;\n selected: boolean;\n onSelect: () => void;\n onHover: () => void;\n}) {\n const ref = useRef<HTMLDivElement | null>(null);\n\n // Keep the highlighted row in view as the user navigates.\n useEffect(() => {\n if (selected && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest' });\n }\n }, [selected]);\n\n return (\n <Box\n id={id}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={action.disabled || undefined}\n ref={ref}\n onMouseEnter={onHover}\n onClick={onSelect}\n sx={(theme) => ({\n px: 2,\n py: 1.25,\n display: 'flex',\n alignItems: 'center',\n gap: 1.5,\n cursor: action.disabled ? 'not-allowed' : 'pointer',\n opacity: action.disabled ? 0.5 : 1,\n bgcolor: selected ? alpha(theme.palette.primary.main, 0.12) : 'transparent',\n '&:hover': {\n bgcolor: selected ? alpha(theme.palette.primary.main, 0.16) : alpha(theme.palette.action.hover, 1),\n },\n })}\n >\n {action.icon ? (\n <Box sx={{ display: 'flex', alignItems: 'center', width: 20, opacity: 0.8 }}>{action.icon}</Box>\n ) : null}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{\n alignItems: 'baseline',\n }}\n >\n <Typography variant=\"body2\" sx={{ fontWeight: 500 }} noWrap>\n {action.title}\n </Typography>\n {action.subtitle ? (\n <Typography\n variant=\"caption\"\n noWrap\n sx={{\n color: 'text.secondary',\n }}\n >\n {action.subtitle}\n </Typography>\n ) : null}\n </Stack>\n </Box>\n {action.shortcut?.length ? (\n <Stack direction=\"row\" spacing={0.5}>\n {action.shortcut.map((k, i) => (\n <Chip\n key={i}\n size=\"small\"\n label={k}\n variant=\"outlined\"\n sx={{ height: 20, fontSize: 10, fontFamily: 'monospace' }}\n />\n ))}\n </Stack>\n ) : null}\n </Box>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Filtering — case-insensitive substring match across title, subtitle,\n// and any explicit keywords. We intentionally avoid full fuzzy matching\n// at this size; a substring score keeps the most-recently-typed prefix\n// at the top, which matches user mental models for command palettes.\n// ---------------------------------------------------------------------------\n\nfunction filterActions(actions: readonly CommandAction[], query: string): readonly CommandAction[] {\n const q = query.trim().toLowerCase();\n if (!q) return actions;\n\n type Scored = { action: CommandAction; score: number };\n const scored: Scored[] = [];\n\n for (const action of actions) {\n const haystacks: string[] = [action.title.toLowerCase()];\n if (action.subtitle) haystacks.push(action.subtitle.toLowerCase());\n if (action.keywords?.length) {\n for (const k of action.keywords) haystacks.push(k.toLowerCase());\n }\n\n let bestScore = -1;\n for (const h of haystacks) {\n const idx = h.indexOf(q);\n if (idx === -1) continue;\n // Prefix matches outrank mid-string matches.\n const score = idx === 0 ? 1000 - h.length : 100 - idx;\n if (score > bestScore) bestScore = score;\n }\n if (bestScore >= 0) scored.push({ action, score: bestScore });\n }\n\n scored.sort((a, b) => b.score - a.score);\n return scored.map((s) => s.action);\n}\n\ninterface GroupedRow {\n label: string | undefined;\n items: { action: CommandAction; flatIndex: number }[];\n}\n\nfunction groupActions(actions: readonly CommandAction[]): GroupedRow[] {\n const out = new Map<string, GroupedRow>();\n let flatIndex = 0;\n for (const action of actions) {\n const label = action.group;\n const key = label ?? '__none__';\n let bucket = out.get(key);\n if (!bucket) {\n bucket = { label, items: [] };\n out.set(key, bucket);\n }\n bucket.items.push({ action, flatIndex });\n flatIndex += 1;\n }\n return [...out.values()];\n}\n"]}