@modern-admin/web 0.4.1 → 0.5.0

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 (285) hide show
  1. package/dist/standalone/assets/action-component-host-QVowRL_F.js +2 -0
  2. package/dist/standalone/assets/action-component-host-QVowRL_F.js.br +0 -0
  3. package/dist/standalone/assets/action-component-host-QVowRL_F.js.gz +0 -0
  4. package/dist/standalone/assets/{action-component-host-BrEZDHZt.js.map → action-component-host-QVowRL_F.js.map} +1 -1
  5. package/dist/standalone/assets/action-page-CET1s1MA.js +2 -0
  6. package/dist/standalone/assets/action-page-CET1s1MA.js.br +0 -0
  7. package/dist/standalone/assets/action-page-CET1s1MA.js.gz +0 -0
  8. package/dist/standalone/assets/{action-page-Bx7kzeK7.js.map → action-page-CET1s1MA.js.map} +1 -1
  9. package/dist/standalone/assets/ai-assistant-widget-pJHSP1PB.js +2 -0
  10. package/dist/standalone/assets/ai-assistant-widget-pJHSP1PB.js.br +0 -0
  11. package/dist/standalone/assets/ai-assistant-widget-pJHSP1PB.js.gz +0 -0
  12. package/dist/standalone/assets/{ai-assistant-widget-BbIXVrSu.js.map → ai-assistant-widget-pJHSP1PB.js.map} +1 -1
  13. package/dist/standalone/assets/audit-log-page-DoZPtbGo.js +2 -0
  14. package/dist/standalone/assets/audit-log-page-DoZPtbGo.js.br +0 -0
  15. package/dist/standalone/assets/audit-log-page-DoZPtbGo.js.gz +0 -0
  16. package/dist/standalone/assets/{audit-log-page-BoZh23oQ.js.map → audit-log-page-DoZPtbGo.js.map} +1 -1
  17. package/dist/standalone/assets/badge-8oeWEs3P.js +2 -0
  18. package/dist/standalone/assets/{badge-6nyM5Jft.js.map → badge-8oeWEs3P.js.map} +1 -1
  19. package/dist/standalone/assets/cache-page-CoKusfv-.js +2 -0
  20. package/dist/standalone/assets/cache-page-CoKusfv-.js.br +0 -0
  21. package/dist/standalone/assets/cache-page-CoKusfv-.js.gz +0 -0
  22. package/dist/standalone/assets/cache-page-CoKusfv-.js.map +1 -0
  23. package/dist/standalone/assets/calendar-DDv0Qalf.js +2 -0
  24. package/dist/standalone/assets/calendar-DDv0Qalf.js.br +0 -0
  25. package/dist/standalone/assets/calendar-DDv0Qalf.js.gz +0 -0
  26. package/dist/standalone/assets/{calendar-nvD_z7KQ.js.map → calendar-DDv0Qalf.js.map} +1 -1
  27. package/dist/standalone/assets/card-MNH_XK0V.js +2 -0
  28. package/dist/standalone/assets/card-MNH_XK0V.js.br +0 -0
  29. package/dist/standalone/assets/card-MNH_XK0V.js.gz +0 -0
  30. package/dist/standalone/assets/{card-4cS4uWCP.js.map → card-MNH_XK0V.js.map} +1 -1
  31. package/dist/standalone/assets/chart-widget-R2NG5T1y.js +2 -0
  32. package/dist/standalone/assets/chart-widget-R2NG5T1y.js.br +0 -0
  33. package/dist/standalone/assets/chart-widget-R2NG5T1y.js.gz +0 -0
  34. package/dist/standalone/assets/chart-widget-R2NG5T1y.js.map +1 -0
  35. package/dist/standalone/assets/command-Cw-hTtpk.js +2 -0
  36. package/dist/standalone/assets/command-Cw-hTtpk.js.br +0 -0
  37. package/dist/standalone/assets/command-Cw-hTtpk.js.gz +0 -0
  38. package/dist/standalone/assets/command-Cw-hTtpk.js.map +1 -0
  39. package/dist/standalone/assets/date-picker-DQ4XOgO6.js +2 -0
  40. package/dist/standalone/assets/date-picker-DQ4XOgO6.js.br +0 -0
  41. package/dist/standalone/assets/date-picker-DQ4XOgO6.js.gz +0 -0
  42. package/dist/standalone/assets/{date-picker-C4HcgidQ.js.map → date-picker-DQ4XOgO6.js.map} +1 -1
  43. package/dist/standalone/assets/dist-CmyV2PEd.js +2 -0
  44. package/dist/standalone/assets/dist-CmyV2PEd.js.br +0 -0
  45. package/dist/standalone/assets/dist-CmyV2PEd.js.gz +0 -0
  46. package/dist/standalone/assets/{dist-Dpg8xy_r.js.map → dist-CmyV2PEd.js.map} +1 -1
  47. package/dist/standalone/assets/dist-DI9XNddW.js +2 -0
  48. package/dist/standalone/assets/dist-DI9XNddW.js.br +0 -0
  49. package/dist/standalone/assets/dist-DI9XNddW.js.gz +0 -0
  50. package/dist/standalone/assets/{dist-BSbFjTlr.js.map → dist-DI9XNddW.js.map} +1 -1
  51. package/dist/standalone/assets/dist-jC1pK2zN.js +2 -0
  52. package/dist/standalone/assets/dist-jC1pK2zN.js.br +0 -0
  53. package/dist/standalone/assets/dist-jC1pK2zN.js.gz +0 -0
  54. package/dist/standalone/assets/{dist-BcL2U6dT.js.map → dist-jC1pK2zN.js.map} +1 -1
  55. package/dist/standalone/assets/edit-page-CVjik6T5.js +2 -0
  56. package/dist/standalone/assets/edit-page-CVjik6T5.js.br +0 -0
  57. package/dist/standalone/assets/edit-page-CVjik6T5.js.gz +0 -0
  58. package/dist/standalone/assets/{edit-page-CW7-FAPC.js.map → edit-page-CVjik6T5.js.map} +1 -1
  59. package/dist/standalone/assets/empty-DcETRWsu.js +2 -0
  60. package/dist/standalone/assets/empty-DcETRWsu.js.br +0 -0
  61. package/dist/standalone/assets/empty-DcETRWsu.js.gz +0 -0
  62. package/dist/standalone/assets/{empty-Cposcczv.js.map → empty-DcETRWsu.js.map} +1 -1
  63. package/dist/standalone/assets/floating-layer-DJGCYMex.js +2 -0
  64. package/dist/standalone/assets/floating-layer-DJGCYMex.js.br +0 -0
  65. package/dist/standalone/assets/floating-layer-DJGCYMex.js.gz +0 -0
  66. package/dist/standalone/assets/floating-layer-DJGCYMex.js.map +1 -0
  67. package/dist/standalone/assets/global-search-dialog-CT30gcRv.js +2 -0
  68. package/dist/standalone/assets/global-search-dialog-CT30gcRv.js.br +0 -0
  69. package/dist/standalone/assets/global-search-dialog-CT30gcRv.js.gz +0 -0
  70. package/dist/standalone/assets/{global-search-dialog-DLv_nIvM.js.map → global-search-dialog-CT30gcRv.js.map} +1 -1
  71. package/dist/standalone/assets/heavy-fields-ByzRCqe0.js +181 -0
  72. package/dist/standalone/assets/heavy-fields-ByzRCqe0.js.br +0 -0
  73. package/dist/standalone/assets/heavy-fields-ByzRCqe0.js.gz +0 -0
  74. package/dist/standalone/assets/{heavy-fields-BiCEgD2L.js.map → heavy-fields-ByzRCqe0.js.map} +1 -1
  75. package/dist/standalone/assets/home-page-B3WVGerG.js +3 -0
  76. package/dist/standalone/assets/home-page-B3WVGerG.js.br +0 -0
  77. package/dist/standalone/assets/home-page-B3WVGerG.js.gz +0 -0
  78. package/dist/standalone/assets/home-page-B3WVGerG.js.map +1 -0
  79. package/dist/standalone/assets/hooks-DHDUQgzs.js +186 -0
  80. package/dist/standalone/assets/hooks-DHDUQgzs.js.br +0 -0
  81. package/dist/standalone/assets/hooks-DHDUQgzs.js.gz +0 -0
  82. package/dist/standalone/assets/hooks-DHDUQgzs.js.map +1 -0
  83. package/dist/standalone/assets/icon-registry-O7MDzgTi.js +2 -0
  84. package/dist/standalone/assets/icon-registry-O7MDzgTi.js.br +0 -0
  85. package/dist/standalone/assets/icon-registry-O7MDzgTi.js.gz +0 -0
  86. package/dist/standalone/assets/icon-registry-O7MDzgTi.js.map +1 -0
  87. package/dist/standalone/assets/index-BvESJd1R.js +15 -0
  88. package/dist/standalone/assets/index-BvESJd1R.js.br +0 -0
  89. package/dist/standalone/assets/index-BvESJd1R.js.gz +0 -0
  90. package/dist/standalone/assets/index-BvESJd1R.js.map +1 -0
  91. package/dist/standalone/assets/index-DSYyF4Ah.css +2 -0
  92. package/dist/standalone/assets/index-DSYyF4Ah.css.br +0 -0
  93. package/dist/standalone/assets/index-DSYyF4Ah.css.gz +0 -0
  94. package/dist/standalone/assets/json-editor-DJ-yNmlx.js +2 -0
  95. package/dist/standalone/assets/json-editor-DJ-yNmlx.js.br +0 -0
  96. package/dist/standalone/assets/json-editor-DJ-yNmlx.js.gz +0 -0
  97. package/dist/standalone/assets/json-editor-DJ-yNmlx.js.map +1 -0
  98. package/dist/standalone/assets/property-renderer-DeykD9hp.js +7 -0
  99. package/dist/standalone/assets/property-renderer-DeykD9hp.js.br +0 -0
  100. package/dist/standalone/assets/property-renderer-DeykD9hp.js.gz +0 -0
  101. package/dist/standalone/assets/property-renderer-DeykD9hp.js.map +1 -0
  102. package/dist/standalone/assets/reference-BDP1QYCg.js +2 -0
  103. package/dist/standalone/assets/reference-BDP1QYCg.js.br +0 -0
  104. package/dist/standalone/assets/reference-BDP1QYCg.js.gz +0 -0
  105. package/dist/standalone/assets/reference-BDP1QYCg.js.map +1 -0
  106. package/dist/standalone/assets/revisions-button-CI74_D14.js +2 -0
  107. package/dist/standalone/assets/revisions-button-CI74_D14.js.br +0 -0
  108. package/dist/standalone/assets/revisions-button-CI74_D14.js.gz +0 -0
  109. package/dist/standalone/assets/{revisions-button-0WtL6bsZ.js.map → revisions-button-CI74_D14.js.map} +1 -1
  110. package/dist/standalone/assets/{richtext-render-DnVcQ34I.js → richtext-render-BHGG3eKV.js} +3 -3
  111. package/dist/standalone/assets/richtext-render-BHGG3eKV.js.br +0 -0
  112. package/dist/standalone/assets/richtext-render-BHGG3eKV.js.gz +0 -0
  113. package/dist/standalone/assets/{richtext-render-DnVcQ34I.js.map → richtext-render-BHGG3eKV.js.map} +1 -1
  114. package/dist/standalone/assets/select-BR1RMqsn.js +2 -0
  115. package/dist/standalone/assets/select-BR1RMqsn.js.br +0 -0
  116. package/dist/standalone/assets/select-BR1RMqsn.js.gz +0 -0
  117. package/dist/standalone/assets/select-BR1RMqsn.js.map +1 -0
  118. package/dist/standalone/assets/settings-page-CdIWVeh0.js +2 -0
  119. package/dist/standalone/assets/settings-page-CdIWVeh0.js.br +0 -0
  120. package/dist/standalone/assets/settings-page-CdIWVeh0.js.gz +0 -0
  121. package/dist/standalone/assets/{settings-page-DtguXLAP.js.map → settings-page-CdIWVeh0.js.map} +1 -1
  122. package/dist/standalone/assets/show-page-Dgw-9Pmn.js +2 -0
  123. package/dist/standalone/assets/show-page-Dgw-9Pmn.js.br +0 -0
  124. package/dist/standalone/assets/show-page-Dgw-9Pmn.js.gz +0 -0
  125. package/dist/standalone/assets/{show-page-Dnox2NwO.js.map → show-page-Dgw-9Pmn.js.map} +1 -1
  126. package/dist/standalone/assets/table-DzBSPeVH.js +2 -0
  127. package/dist/standalone/assets/table-DzBSPeVH.js.br +0 -0
  128. package/dist/standalone/assets/table-DzBSPeVH.js.gz +0 -0
  129. package/dist/standalone/assets/table-DzBSPeVH.js.map +1 -0
  130. package/dist/standalone/assets/tabs-Dr7UA219.js +2 -0
  131. package/dist/standalone/assets/tabs-Dr7UA219.js.br +0 -0
  132. package/dist/standalone/assets/tabs-Dr7UA219.js.gz +0 -0
  133. package/dist/standalone/assets/{tabs-DUS8e6dR.js.map → tabs-Dr7UA219.js.map} +1 -1
  134. package/dist/standalone/assets/textarea-T25SXcrC.js +2 -0
  135. package/dist/standalone/assets/{textarea-CX_0QVSz.js.map → textarea-T25SXcrC.js.map} +1 -1
  136. package/dist/standalone/assets/use-dashboard-charts-aymvhXUB.js +2 -0
  137. package/dist/standalone/assets/use-dashboard-charts-aymvhXUB.js.br +0 -0
  138. package/dist/standalone/assets/use-dashboard-charts-aymvhXUB.js.gz +0 -0
  139. package/dist/standalone/assets/{use-dashboard-charts-Cr3OUSL5.js.map → use-dashboard-charts-aymvhXUB.js.map} +1 -1
  140. package/dist/standalone/assets/useQueries-Dch5Ggjr.js +2 -0
  141. package/dist/standalone/assets/useQueries-Dch5Ggjr.js.br +0 -0
  142. package/dist/standalone/assets/useQueries-Dch5Ggjr.js.gz +0 -0
  143. package/dist/standalone/assets/useQueries-Dch5Ggjr.js.map +1 -0
  144. package/dist/standalone/assets/{user-directory-9COoW6AO.js → user-directory-C33bGZdb.js} +3 -3
  145. package/dist/standalone/assets/user-directory-C33bGZdb.js.br +0 -0
  146. package/dist/standalone/assets/user-directory-C33bGZdb.js.gz +0 -0
  147. package/dist/standalone/assets/{user-directory-9COoW6AO.js.map → user-directory-C33bGZdb.js.map} +1 -1
  148. package/dist/standalone/assets/{value-format-Cgau0meh.js → value-format-CLzWct9Y.js} +3 -3
  149. package/dist/standalone/assets/value-format-CLzWct9Y.js.br +0 -0
  150. package/dist/standalone/assets/value-format-CLzWct9Y.js.gz +0 -0
  151. package/dist/standalone/assets/{value-format-Cgau0meh.js.map → value-format-CLzWct9Y.js.map} +1 -1
  152. package/dist/standalone/assets/wizard-create-page-BtfveXmP.js +2 -0
  153. package/dist/standalone/assets/wizard-create-page-BtfveXmP.js.br +0 -0
  154. package/dist/standalone/assets/wizard-create-page-BtfveXmP.js.gz +0 -0
  155. package/dist/standalone/assets/{wizard-create-page-v2-Aw8Oj.js.map → wizard-create-page-BtfveXmP.js.map} +1 -1
  156. package/dist/standalone/assets/zod-N7mHo7BX.js +2 -0
  157. package/dist/standalone/assets/zod-N7mHo7BX.js.br +0 -0
  158. package/dist/standalone/assets/zod-N7mHo7BX.js.gz +0 -0
  159. package/dist/standalone/assets/{zod-BrelKLfy.js.map → zod-N7mHo7BX.js.map} +1 -1
  160. package/dist/standalone/index.html +10 -10
  161. package/dist/standalone/index.html.br +0 -0
  162. package/dist/standalone/index.html.gz +0 -0
  163. package/package.json +5 -5
  164. package/dist/standalone/assets/action-component-host-BrEZDHZt.js +0 -2
  165. package/dist/standalone/assets/action-component-host-BrEZDHZt.js.br +0 -0
  166. package/dist/standalone/assets/action-component-host-BrEZDHZt.js.gz +0 -0
  167. package/dist/standalone/assets/action-page-Bx7kzeK7.js +0 -2
  168. package/dist/standalone/assets/action-page-Bx7kzeK7.js.br +0 -0
  169. package/dist/standalone/assets/action-page-Bx7kzeK7.js.gz +0 -0
  170. package/dist/standalone/assets/ai-assistant-widget-BbIXVrSu.js +0 -2
  171. package/dist/standalone/assets/ai-assistant-widget-BbIXVrSu.js.br +0 -0
  172. package/dist/standalone/assets/ai-assistant-widget-BbIXVrSu.js.gz +0 -0
  173. package/dist/standalone/assets/audit-log-page-BoZh23oQ.js +0 -2
  174. package/dist/standalone/assets/audit-log-page-BoZh23oQ.js.br +0 -0
  175. package/dist/standalone/assets/audit-log-page-BoZh23oQ.js.gz +0 -0
  176. package/dist/standalone/assets/badge-6nyM5Jft.js +0 -2
  177. package/dist/standalone/assets/calendar-nvD_z7KQ.js +0 -2
  178. package/dist/standalone/assets/calendar-nvD_z7KQ.js.br +0 -0
  179. package/dist/standalone/assets/calendar-nvD_z7KQ.js.gz +0 -0
  180. package/dist/standalone/assets/card-4cS4uWCP.js +0 -2
  181. package/dist/standalone/assets/card-4cS4uWCP.js.br +0 -0
  182. package/dist/standalone/assets/card-4cS4uWCP.js.gz +0 -0
  183. package/dist/standalone/assets/chart-widget-YeCL7jdB.js +0 -2
  184. package/dist/standalone/assets/chart-widget-YeCL7jdB.js.br +0 -0
  185. package/dist/standalone/assets/chart-widget-YeCL7jdB.js.gz +0 -0
  186. package/dist/standalone/assets/chart-widget-YeCL7jdB.js.map +0 -1
  187. package/dist/standalone/assets/command-Sb0xL-se.js +0 -2
  188. package/dist/standalone/assets/command-Sb0xL-se.js.br +0 -0
  189. package/dist/standalone/assets/command-Sb0xL-se.js.gz +0 -0
  190. package/dist/standalone/assets/command-Sb0xL-se.js.map +0 -1
  191. package/dist/standalone/assets/date-picker-C4HcgidQ.js +0 -2
  192. package/dist/standalone/assets/date-picker-C4HcgidQ.js.br +0 -0
  193. package/dist/standalone/assets/date-picker-C4HcgidQ.js.gz +0 -0
  194. package/dist/standalone/assets/dist-BSbFjTlr.js +0 -2
  195. package/dist/standalone/assets/dist-BSbFjTlr.js.br +0 -0
  196. package/dist/standalone/assets/dist-BSbFjTlr.js.gz +0 -0
  197. package/dist/standalone/assets/dist-BcL2U6dT.js +0 -2
  198. package/dist/standalone/assets/dist-BcL2U6dT.js.br +0 -0
  199. package/dist/standalone/assets/dist-BcL2U6dT.js.gz +0 -0
  200. package/dist/standalone/assets/dist-Dpg8xy_r.js +0 -2
  201. package/dist/standalone/assets/dist-Dpg8xy_r.js.br +0 -0
  202. package/dist/standalone/assets/dist-Dpg8xy_r.js.gz +0 -0
  203. package/dist/standalone/assets/edit-page-CW7-FAPC.js +0 -2
  204. package/dist/standalone/assets/edit-page-CW7-FAPC.js.br +0 -0
  205. package/dist/standalone/assets/edit-page-CW7-FAPC.js.gz +0 -0
  206. package/dist/standalone/assets/empty-Cposcczv.js +0 -2
  207. package/dist/standalone/assets/empty-Cposcczv.js.br +0 -0
  208. package/dist/standalone/assets/empty-Cposcczv.js.gz +0 -0
  209. package/dist/standalone/assets/global-search-dialog-DLv_nIvM.js +0 -2
  210. package/dist/standalone/assets/global-search-dialog-DLv_nIvM.js.br +0 -0
  211. package/dist/standalone/assets/global-search-dialog-DLv_nIvM.js.gz +0 -0
  212. package/dist/standalone/assets/heavy-fields-BiCEgD2L.js +0 -181
  213. package/dist/standalone/assets/heavy-fields-BiCEgD2L.js.br +0 -0
  214. package/dist/standalone/assets/heavy-fields-BiCEgD2L.js.gz +0 -0
  215. package/dist/standalone/assets/home-page-BSz1wGk0.js +0 -3
  216. package/dist/standalone/assets/home-page-BSz1wGk0.js.br +0 -0
  217. package/dist/standalone/assets/home-page-BSz1wGk0.js.gz +0 -0
  218. package/dist/standalone/assets/home-page-BSz1wGk0.js.map +0 -1
  219. package/dist/standalone/assets/icon-registry-BQU4fIc4.js +0 -2
  220. package/dist/standalone/assets/icon-registry-BQU4fIc4.js.br +0 -0
  221. package/dist/standalone/assets/icon-registry-BQU4fIc4.js.gz +0 -0
  222. package/dist/standalone/assets/icon-registry-BQU4fIc4.js.map +0 -1
  223. package/dist/standalone/assets/index-95cwJ2RY.css +0 -2
  224. package/dist/standalone/assets/index-95cwJ2RY.css.br +0 -0
  225. package/dist/standalone/assets/index-95cwJ2RY.css.gz +0 -0
  226. package/dist/standalone/assets/index-BL8keDxQ.js +0 -15
  227. package/dist/standalone/assets/index-BL8keDxQ.js.br +0 -0
  228. package/dist/standalone/assets/index-BL8keDxQ.js.gz +0 -0
  229. package/dist/standalone/assets/index-BL8keDxQ.js.map +0 -1
  230. package/dist/standalone/assets/json-editor-CAIgxYb3.js +0 -2
  231. package/dist/standalone/assets/json-editor-CAIgxYb3.js.br +0 -0
  232. package/dist/standalone/assets/json-editor-CAIgxYb3.js.gz +0 -0
  233. package/dist/standalone/assets/json-editor-CAIgxYb3.js.map +0 -1
  234. package/dist/standalone/assets/property-renderer-B8Md-EqW.js +0 -7
  235. package/dist/standalone/assets/property-renderer-B8Md-EqW.js.br +0 -0
  236. package/dist/standalone/assets/property-renderer-B8Md-EqW.js.gz +0 -0
  237. package/dist/standalone/assets/property-renderer-B8Md-EqW.js.map +0 -1
  238. package/dist/standalone/assets/reference-WPaf6IdD.js +0 -2
  239. package/dist/standalone/assets/reference-WPaf6IdD.js.br +0 -0
  240. package/dist/standalone/assets/reference-WPaf6IdD.js.gz +0 -0
  241. package/dist/standalone/assets/reference-WPaf6IdD.js.map +0 -1
  242. package/dist/standalone/assets/revisions-button-0WtL6bsZ.js +0 -2
  243. package/dist/standalone/assets/revisions-button-0WtL6bsZ.js.br +0 -0
  244. package/dist/standalone/assets/revisions-button-0WtL6bsZ.js.gz +0 -0
  245. package/dist/standalone/assets/richtext-render-DnVcQ34I.js.br +0 -0
  246. package/dist/standalone/assets/richtext-render-DnVcQ34I.js.gz +0 -0
  247. package/dist/standalone/assets/router-wFvtgo77.js +0 -186
  248. package/dist/standalone/assets/router-wFvtgo77.js.br +0 -0
  249. package/dist/standalone/assets/router-wFvtgo77.js.gz +0 -0
  250. package/dist/standalone/assets/router-wFvtgo77.js.map +0 -1
  251. package/dist/standalone/assets/select-CR4acjX0.js +0 -2
  252. package/dist/standalone/assets/select-CR4acjX0.js.br +0 -0
  253. package/dist/standalone/assets/select-CR4acjX0.js.gz +0 -0
  254. package/dist/standalone/assets/select-CR4acjX0.js.map +0 -1
  255. package/dist/standalone/assets/settings-page-DtguXLAP.js +0 -2
  256. package/dist/standalone/assets/settings-page-DtguXLAP.js.br +0 -0
  257. package/dist/standalone/assets/settings-page-DtguXLAP.js.gz +0 -0
  258. package/dist/standalone/assets/show-page-Dnox2NwO.js +0 -2
  259. package/dist/standalone/assets/show-page-Dnox2NwO.js.br +0 -0
  260. package/dist/standalone/assets/show-page-Dnox2NwO.js.gz +0 -0
  261. package/dist/standalone/assets/tabs-DUS8e6dR.js +0 -2
  262. package/dist/standalone/assets/tabs-DUS8e6dR.js.br +0 -0
  263. package/dist/standalone/assets/tabs-DUS8e6dR.js.gz +0 -0
  264. package/dist/standalone/assets/textarea-CX_0QVSz.js +0 -2
  265. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js +0 -2
  266. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js.br +0 -0
  267. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js.gz +0 -0
  268. package/dist/standalone/assets/useQueries-BCUhWYX4.js +0 -2
  269. package/dist/standalone/assets/useQueries-BCUhWYX4.js.br +0 -0
  270. package/dist/standalone/assets/useQueries-BCUhWYX4.js.gz +0 -0
  271. package/dist/standalone/assets/useQueries-BCUhWYX4.js.map +0 -1
  272. package/dist/standalone/assets/user-directory-9COoW6AO.js.br +0 -0
  273. package/dist/standalone/assets/user-directory-9COoW6AO.js.gz +0 -0
  274. package/dist/standalone/assets/value-format-Cgau0meh.js.br +0 -0
  275. package/dist/standalone/assets/value-format-Cgau0meh.js.gz +0 -0
  276. package/dist/standalone/assets/with-selector-NDLhu4dT.js +0 -2
  277. package/dist/standalone/assets/with-selector-NDLhu4dT.js.br +0 -0
  278. package/dist/standalone/assets/with-selector-NDLhu4dT.js.gz +0 -0
  279. package/dist/standalone/assets/with-selector-NDLhu4dT.js.map +0 -1
  280. package/dist/standalone/assets/wizard-create-page-v2-Aw8Oj.js +0 -2
  281. package/dist/standalone/assets/wizard-create-page-v2-Aw8Oj.js.br +0 -0
  282. package/dist/standalone/assets/wizard-create-page-v2-Aw8Oj.js.gz +0 -0
  283. package/dist/standalone/assets/zod-BrelKLfy.js +0 -2
  284. package/dist/standalone/assets/zod-BrelKLfy.js.br +0 -0
  285. package/dist/standalone/assets/zod-BrelKLfy.js.gz +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as e,n as t}from"./createLucideIcon-CUopU_LC.js";import{w as n}from"./floating-layer-DJGCYMex.js";import{n as r,t as i}from"./clock-OCmX6DtA.js";import{t as a}from"./triangle-alert-CyaaNWN8.js";import{t as o}from"./x-C3kLunD6.js";import{N as s,f as c}from"./hooks-DHDUQgzs.js";import{a as l,c as u,i as d,n as f,o as p,r as m,s as h}from"./command-Cw-hTtpk.js";import{G as g,H as _,o as v,pt as y}from"./index-BvESJd1R.js";var b=e(t(),1),x=n(),S=300,C=`modern-admin:global-search:recent:v1`,w=6,T=()=>{if(typeof window>`u`)return[];try{let e=window.localStorage.getItem(C);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`).slice(0,w):[]}catch{return[]}},E=e=>{if(!(typeof window>`u`))try{window.localStorage.setItem(C,JSON.stringify(e.slice(0,w)))}catch{}},D=(e,t)=>{if(!t)return e;let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0,o=0;for(;a<e.length;){let t=n.indexOf(r,a);if(t===-1){i.push(e.slice(a));break}t>a&&i.push(e.slice(a,t)),i.push((0,x.jsx)(`mark`,{className:`rounded-sm bg-primary/20 px-0.5 text-foreground`,children:e.slice(t,t+r.length)},o++)),a=t+r.length}return i};function O({open:e,onOpenChange:t}){let{t:n}=s(),C=v(),[O,k]=b.useState(``),[A,j]=b.useState(``),[M,N]=b.useState(()=>T());b.useEffect(()=>{e&&(k(``),j(``),N(T()))},[e]),b.useEffect(()=>{let e=window.setTimeout(()=>j(O.trim()),S);return()=>window.clearTimeout(e)},[O]);let{data:P,isFetching:F,isError:I}=c(A,e),L=b.useCallback(e=>{e&&N(t=>{let n=[e,...t.filter(t=>t!==e)].slice(0,w);return E(n),n})},[]),R=P?.groups??[],z=A.length>0,B=z&&!F&&!I&&R.length===0,V=b.useCallback((e,n)=>{L(A),t(!1),C({name:`show`,resourceId:e,recordId:n})},[A,C,t,L]),H=b.useCallback(e=>{L(A),t(!1),C({name:`list`,resourceId:e})},[A,C,t,L]),U=b.useCallback(e=>{k(e),j(e)},[]),W=b.useCallback(()=>{N([]),E([])},[]);return(0,x.jsxs)(f,{open:e,onOpenChange:t,children:[(0,x.jsx)(g,{className:`sr-only`,children:n(`globalSearch:title`)}),(0,x.jsx)(_,{className:`sr-only`,children:n(`globalSearch:description`)}),(0,x.jsx)(l,{placeholder:n(`globalSearch:placeholder`),value:O,onValueChange:k}),(0,x.jsxs)(h,{children:[!z&&M.length===0&&(0,x.jsx)(`div`,{className:`py-6 text-center text-sm text-muted-foreground`,children:n(`globalSearch:hint`)}),!z&&M.length>0&&(0,x.jsx)(d,{heading:(0,x.jsxs)(`span`,{className:`flex items-center justify-between gap-2`,children:[(0,x.jsx)(`span`,{children:n(`globalSearch:recent`)}),(0,x.jsxs)(`button`,{type:`button`,className:`text-xs text-muted-foreground hover:text-foreground`,onClick:W,children:[(0,x.jsx)(o,{className:`mr-1 inline size-3`,"aria-hidden":`true`}),n(`globalSearch:clearRecent`)]})]}),children:M.map(e=>(0,x.jsxs)(p,{value:`recent:${e}`,onSelect:()=>U(e),children:[(0,x.jsx)(i,{className:`mr-2 size-4 text-muted-foreground`,"aria-hidden":`true`}),(0,x.jsx)(`span`,{className:`flex-1 truncate`,children:e})]},`recent:${e}`))}),z&&I&&(0,x.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-sm text-destructive`,role:`alert`,children:[(0,x.jsx)(a,{className:`size-4`,"aria-hidden":`true`}),(0,x.jsx)(`span`,{children:n(`globalSearch:error`)})]}),B&&(0,x.jsx)(m,{children:n(`globalSearch:noResults`)}),z&&!I&&F&&R.length===0&&(0,x.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground`,role:`status`,"aria-live":`polite`,children:[(0,x.jsx)(y,{className:`size-4 animate-spin`,"aria-hidden":`true`}),(0,x.jsx)(`span`,{children:n(`common:loading`)})]}),R.map((e,t)=>(0,x.jsxs)(b.Fragment,{children:[t>0&&(0,x.jsx)(u,{}),(0,x.jsxs)(d,{heading:e.resourceName,children:[e.records.map(e=>(0,x.jsxs)(p,{value:`${e.resourceId}:${e.recordId} ${e.title} ${e.snippet??``}`,onSelect:()=>V(e.resourceId,e.recordId),className:`flex-col items-start gap-0.5`,children:[(0,x.jsxs)(`div`,{className:`flex w-full items-baseline gap-2`,children:[(0,x.jsx)(`span`,{className:`flex-1 truncate font-medium`,children:D(e.title,A)}),e.matchedField&&(0,x.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:n(`globalSearch:matchedIn`).replace(`{field}`,e.matchedField)})]}),e.snippet&&(0,x.jsx)(`div`,{className:`line-clamp-1 text-xs text-muted-foreground`,children:D(e.snippet,A)})]},`${e.resourceId}:${e.recordId}`)),(0,x.jsxs)(p,{value:`${e.resourceId}:show-all`,forceMount:!0,onSelect:()=>H(e.resourceId),className:`text-xs text-muted-foreground`,children:[(0,x.jsx)(r,{className:`mr-2 size-3.5`,"aria-hidden":`true`}),n(`globalSearch:showAllIn`).replace(`{resource}`,e.resourceName)]},`${e.resourceId}:show-all`)]})]},e.resourceId))]})]})}export{O as GlobalSearchDialog};
2
+ //# sourceMappingURL=global-search-dialog-CT30gcRv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-search-dialog-DLv_nIvM.js","names":[],"sources":["../../../../react/src/components/global-search-dialog.tsx"],"sourcesContent":["// Cross-resource command palette. Backed by `useGlobalSearch`, which fans\n// the query out to every registered resource's `search` action server-side.\n// Results are grouped by resource; selecting an entry navigates to the\n// record's show page and closes the palette.\n//\n// Designed as a controlled component — the parent (typically the header)\n// holds the `open` state so it can pair the trigger button with the\n// `mod+k` hotkey.\n\nimport * as React from 'react'\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n DialogDescription,\n DialogTitle,\n} from '@modern-admin/ui'\nimport { AlertTriangle, ArrowRight, Clock, Loader2, X } from 'lucide-react'\nimport { useGlobalSearch } from '../hooks.js'\nimport { useI18n } from '../i18n.js'\nimport { useNavigate } from '../router.js'\n\nconst DEBOUNCE_MS = 300\nconst RECENT_STORAGE_KEY = 'modern-admin:global-search:recent:v1'\nconst RECENT_MAX = 6\n\nexport interface GlobalSearchDialogProps {\n open: boolean\n\n onOpenChange(open: boolean): void\n}\n\nconst readRecent = (): string[] => {\n if (typeof window === 'undefined') return []\n try {\n const raw = window.localStorage.getItem(RECENT_STORAGE_KEY)\n if (!raw) return []\n const parsed = JSON.parse(raw) as unknown\n if (!Array.isArray(parsed)) return []\n return parsed.filter((v): v is string => typeof v === 'string').slice(0, RECENT_MAX)\n } catch {\n return []\n }\n}\n\nconst writeRecent = (entries: string[]): void => {\n if (typeof window === 'undefined') return\n try {\n window.localStorage.setItem(RECENT_STORAGE_KEY, JSON.stringify(entries.slice(0, RECENT_MAX)))\n } catch {\n /* quota exceeded — recent list is best-effort */\n }\n}\n\n/**\n * Highlight every case-insensitive occurrence of `needle` in `text` with\n * `<mark>`. Returns an array of React nodes ready to render inside any\n * inline container. Empty `needle` falls back to the raw string.\n */\nconst highlightMatch = (text: string, needle: string): React.ReactNode => {\n if (!needle) return text\n const lower = text.toLowerCase()\n const target = needle.toLowerCase()\n const nodes: React.ReactNode[] = []\n let cursor = 0\n let key = 0\n while (cursor < text.length) {\n const idx = lower.indexOf(target, cursor)\n if (idx === -1) {\n nodes.push(text.slice(cursor))\n break\n }\n if (idx > cursor) nodes.push(text.slice(cursor, idx))\n nodes.push(\n <mark\n key={key++}\n className=\"rounded-sm bg-primary/20 px-0.5 text-foreground\"\n >\n {text.slice(idx, idx + target.length)}\n </mark>,\n )\n cursor = idx + target.length\n }\n return nodes\n}\n\nexport function GlobalSearchDialog({\n open,\n onOpenChange,\n}: GlobalSearchDialogProps): React.ReactElement {\n const { t } = useI18n()\n const navigate = useNavigate()\n const [query, setQuery] = React.useState('')\n const [debounced, setDebounced] = React.useState('')\n const [recent, setRecent] = React.useState<string[]>(() => readRecent())\n\n // Reset query each time the dialog opens so it starts empty, and rehydrate\n // the recent list (other tabs may have appended entries while we were idle).\n React.useEffect(() => {\n if (open) {\n setQuery('')\n setDebounced('')\n setRecent(readRecent())\n }\n }, [open])\n\n React.useEffect(() => {\n const timer = window.setTimeout(() => setDebounced(query.trim()), DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n }, [query])\n\n const { data, isFetching, isError } = useGlobalSearch(debounced, open)\n\n // Capture the most recent successful query so it's available for the\n // \"recent\" list. We only persist on user-driven navigation (not every\n // keystroke) to keep the list signal-to-noise high.\n const persistRecent = React.useCallback((value: string): void => {\n if (!value) return\n setRecent((prev) => {\n const next = [value, ...prev.filter((q) => q !== value)].slice(0, RECENT_MAX)\n writeRecent(next)\n return next\n })\n }, [])\n\n const groups = data?.groups ?? []\n const hasQuery = debounced.length > 0\n const showEmpty = hasQuery && !isFetching && !isError && groups.length === 0\n\n const handleSelect = React.useCallback(\n (resourceId: string, recordId: string): void => {\n persistRecent(debounced)\n onOpenChange(false)\n navigate({ name: 'show', resourceId, recordId })\n },\n [debounced, navigate, onOpenChange, persistRecent],\n )\n\n const handleShowAll = React.useCallback(\n (resourceId: string): void => {\n persistRecent(debounced)\n onOpenChange(false)\n navigate({ name: 'list', resourceId })\n },\n [debounced, navigate, onOpenChange, persistRecent],\n )\n\n const handlePickRecent = React.useCallback((value: string): void => {\n setQuery(value)\n setDebounced(value)\n }, [])\n\n const handleClearRecent = React.useCallback((): void => {\n setRecent([])\n writeRecent([])\n }, [])\n\n return (\n <CommandDialog open={open} onOpenChange={onOpenChange}>\n {/* Visually-hidden title + description keep Radix Dialog accessibility\n warnings quiet and provide a label for screen readers. */}\n <DialogTitle className=\"sr-only\">{t('globalSearch:title')}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n {t('globalSearch:description')}\n </DialogDescription>\n <CommandInput\n placeholder={t('globalSearch:placeholder')}\n value={query}\n onValueChange={setQuery}\n />\n {/* cmdk dedupes by item value — prefix each value with `resourceId:recordId`\n so identical record ids across resources keep distinct entries.\n shouldFilter is left on (default) so cmdk re-orders by relevance against\n the typed query — server already narrowed the set down. */}\n <CommandList>\n {!hasQuery && recent.length === 0 && (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {t('globalSearch:hint')}\n </div>\n )}\n {!hasQuery && recent.length > 0 && (\n <CommandGroup\n heading={\n <span className=\"flex items-center justify-between gap-2\">\n <span>{t('globalSearch:recent')}</span>\n <button\n type=\"button\"\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n onClick={handleClearRecent}\n >\n <X className=\"mr-1 inline size-3\" aria-hidden=\"true\" />\n {t('globalSearch:clearRecent')}\n </button>\n </span>\n }\n >\n {recent.map((entry) => (\n <CommandItem\n key={`recent:${entry}`}\n value={`recent:${entry}`}\n onSelect={() => handlePickRecent(entry)}\n >\n <Clock className=\"mr-2 size-4 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"flex-1 truncate\">{entry}</span>\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n {hasQuery && isError && (\n <div\n className=\"flex items-center justify-center gap-2 py-6 text-sm text-destructive\"\n role=\"alert\"\n >\n <AlertTriangle className=\"size-4\" aria-hidden=\"true\" />\n <span>{t('globalSearch:error')}</span>\n </div>\n )}\n {showEmpty && <CommandEmpty>{t('globalSearch:noResults')}</CommandEmpty>}\n {hasQuery && !isError && isFetching && groups.length === 0 && (\n <div\n className=\"flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Loader2 className=\"size-4 animate-spin\" aria-hidden=\"true\"/>\n <span>{t('common:loading')}</span>\n </div>\n )}\n {groups.map((group, idx) => (\n <React.Fragment key={group.resourceId}>\n {idx > 0 && <CommandSeparator/>}\n <CommandGroup heading={group.resourceName}>\n {group.records.map((hit) => (\n <CommandItem\n key={`${hit.resourceId}:${hit.recordId}`}\n value={`${hit.resourceId}:${hit.recordId} ${hit.title} ${hit.snippet ?? ''}`}\n onSelect={() => handleSelect(hit.resourceId, hit.recordId)}\n className=\"flex-col items-start gap-0.5\"\n >\n <div className=\"flex w-full items-baseline gap-2\">\n <span className=\"flex-1 truncate font-medium\">\n {highlightMatch(hit.title, debounced)}\n </span>\n {hit.matchedField && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {t('globalSearch:matchedIn').replace('{field}', hit.matchedField)}\n </span>\n )}\n </div>\n {hit.snippet && (\n <div className=\"line-clamp-1 text-xs text-muted-foreground\">\n {highlightMatch(hit.snippet, debounced)}\n </div>\n )}\n </CommandItem>\n ))}\n {/* `forceMount` keeps this row visible regardless of the current\n query — cmdk's default fuzzy filter would otherwise drop it\n because the value `${id}:show-all` rarely contains the typed\n needle. */}\n <CommandItem\n key={`${group.resourceId}:show-all`}\n value={`${group.resourceId}:show-all`}\n forceMount\n onSelect={() => handleShowAll(group.resourceId)}\n className=\"text-xs text-muted-foreground\"\n >\n <ArrowRight className=\"mr-2 size-3.5\" aria-hidden=\"true\" />\n {t('globalSearch:showAllIn').replace('{resource}', group.resourceName)}\n </CommandItem>\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"global-search-dialog-CT30gcRv.js","names":[],"sources":["../../../../react/src/components/global-search-dialog.tsx"],"sourcesContent":["// Cross-resource command palette. Backed by `useGlobalSearch`, which fans\n// the query out to every registered resource's `search` action server-side.\n// Results are grouped by resource; selecting an entry navigates to the\n// record's show page and closes the palette.\n//\n// Designed as a controlled component — the parent (typically the header)\n// holds the `open` state so it can pair the trigger button with the\n// `mod+k` hotkey.\n\nimport * as React from 'react'\nimport {\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n DialogDescription,\n DialogTitle,\n} from '@modern-admin/ui'\nimport { AlertTriangle, ArrowRight, Clock, Loader2, X } from 'lucide-react'\nimport { useGlobalSearch } from '../hooks.js'\nimport { useI18n } from '../i18n.js'\nimport { useNavigate } from '../router.js'\n\nconst DEBOUNCE_MS = 300\nconst RECENT_STORAGE_KEY = 'modern-admin:global-search:recent:v1'\nconst RECENT_MAX = 6\n\nexport interface GlobalSearchDialogProps {\n open: boolean\n\n onOpenChange(open: boolean): void\n}\n\nconst readRecent = (): string[] => {\n if (typeof window === 'undefined') return []\n try {\n const raw = window.localStorage.getItem(RECENT_STORAGE_KEY)\n if (!raw) return []\n const parsed = JSON.parse(raw) as unknown\n if (!Array.isArray(parsed)) return []\n return parsed.filter((v): v is string => typeof v === 'string').slice(0, RECENT_MAX)\n } catch {\n return []\n }\n}\n\nconst writeRecent = (entries: string[]): void => {\n if (typeof window === 'undefined') return\n try {\n window.localStorage.setItem(RECENT_STORAGE_KEY, JSON.stringify(entries.slice(0, RECENT_MAX)))\n } catch {\n /* quota exceeded — recent list is best-effort */\n }\n}\n\n/**\n * Highlight every case-insensitive occurrence of `needle` in `text` with\n * `<mark>`. Returns an array of React nodes ready to render inside any\n * inline container. Empty `needle` falls back to the raw string.\n */\nconst highlightMatch = (text: string, needle: string): React.ReactNode => {\n if (!needle) return text\n const lower = text.toLowerCase()\n const target = needle.toLowerCase()\n const nodes: React.ReactNode[] = []\n let cursor = 0\n let key = 0\n while (cursor < text.length) {\n const idx = lower.indexOf(target, cursor)\n if (idx === -1) {\n nodes.push(text.slice(cursor))\n break\n }\n if (idx > cursor) nodes.push(text.slice(cursor, idx))\n nodes.push(\n <mark\n key={key++}\n className=\"rounded-sm bg-primary/20 px-0.5 text-foreground\"\n >\n {text.slice(idx, idx + target.length)}\n </mark>,\n )\n cursor = idx + target.length\n }\n return nodes\n}\n\nexport function GlobalSearchDialog({\n open,\n onOpenChange,\n}: GlobalSearchDialogProps): React.ReactElement {\n const { t } = useI18n()\n const navigate = useNavigate()\n const [query, setQuery] = React.useState('')\n const [debounced, setDebounced] = React.useState('')\n const [recent, setRecent] = React.useState<string[]>(() => readRecent())\n\n // Reset query each time the dialog opens so it starts empty, and rehydrate\n // the recent list (other tabs may have appended entries while we were idle).\n React.useEffect(() => {\n if (open) {\n setQuery('')\n setDebounced('')\n setRecent(readRecent())\n }\n }, [open])\n\n React.useEffect(() => {\n const timer = window.setTimeout(() => setDebounced(query.trim()), DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n }, [query])\n\n const { data, isFetching, isError } = useGlobalSearch(debounced, open)\n\n // Capture the most recent successful query so it's available for the\n // \"recent\" list. We only persist on user-driven navigation (not every\n // keystroke) to keep the list signal-to-noise high.\n const persistRecent = React.useCallback((value: string): void => {\n if (!value) return\n setRecent((prev) => {\n const next = [value, ...prev.filter((q) => q !== value)].slice(0, RECENT_MAX)\n writeRecent(next)\n return next\n })\n }, [])\n\n const groups = data?.groups ?? []\n const hasQuery = debounced.length > 0\n const showEmpty = hasQuery && !isFetching && !isError && groups.length === 0\n\n const handleSelect = React.useCallback(\n (resourceId: string, recordId: string): void => {\n persistRecent(debounced)\n onOpenChange(false)\n navigate({ name: 'show', resourceId, recordId })\n },\n [debounced, navigate, onOpenChange, persistRecent],\n )\n\n const handleShowAll = React.useCallback(\n (resourceId: string): void => {\n persistRecent(debounced)\n onOpenChange(false)\n navigate({ name: 'list', resourceId })\n },\n [debounced, navigate, onOpenChange, persistRecent],\n )\n\n const handlePickRecent = React.useCallback((value: string): void => {\n setQuery(value)\n setDebounced(value)\n }, [])\n\n const handleClearRecent = React.useCallback((): void => {\n setRecent([])\n writeRecent([])\n }, [])\n\n return (\n <CommandDialog open={open} onOpenChange={onOpenChange}>\n {/* Visually-hidden title + description keep Radix Dialog accessibility\n warnings quiet and provide a label for screen readers. */}\n <DialogTitle className=\"sr-only\">{t('globalSearch:title')}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n {t('globalSearch:description')}\n </DialogDescription>\n <CommandInput\n placeholder={t('globalSearch:placeholder')}\n value={query}\n onValueChange={setQuery}\n />\n {/* cmdk dedupes by item value — prefix each value with `resourceId:recordId`\n so identical record ids across resources keep distinct entries.\n shouldFilter is left on (default) so cmdk re-orders by relevance against\n the typed query — server already narrowed the set down. */}\n <CommandList>\n {!hasQuery && recent.length === 0 && (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {t('globalSearch:hint')}\n </div>\n )}\n {!hasQuery && recent.length > 0 && (\n <CommandGroup\n heading={\n <span className=\"flex items-center justify-between gap-2\">\n <span>{t('globalSearch:recent')}</span>\n <button\n type=\"button\"\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n onClick={handleClearRecent}\n >\n <X className=\"mr-1 inline size-3\" aria-hidden=\"true\" />\n {t('globalSearch:clearRecent')}\n </button>\n </span>\n }\n >\n {recent.map((entry) => (\n <CommandItem\n key={`recent:${entry}`}\n value={`recent:${entry}`}\n onSelect={() => handlePickRecent(entry)}\n >\n <Clock className=\"mr-2 size-4 text-muted-foreground\" aria-hidden=\"true\" />\n <span className=\"flex-1 truncate\">{entry}</span>\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n {hasQuery && isError && (\n <div\n className=\"flex items-center justify-center gap-2 py-6 text-sm text-destructive\"\n role=\"alert\"\n >\n <AlertTriangle className=\"size-4\" aria-hidden=\"true\" />\n <span>{t('globalSearch:error')}</span>\n </div>\n )}\n {showEmpty && <CommandEmpty>{t('globalSearch:noResults')}</CommandEmpty>}\n {hasQuery && !isError && isFetching && groups.length === 0 && (\n <div\n className=\"flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Loader2 className=\"size-4 animate-spin\" aria-hidden=\"true\"/>\n <span>{t('common:loading')}</span>\n </div>\n )}\n {groups.map((group, idx) => (\n <React.Fragment key={group.resourceId}>\n {idx > 0 && <CommandSeparator/>}\n <CommandGroup heading={group.resourceName}>\n {group.records.map((hit) => (\n <CommandItem\n key={`${hit.resourceId}:${hit.recordId}`}\n value={`${hit.resourceId}:${hit.recordId} ${hit.title} ${hit.snippet ?? ''}`}\n onSelect={() => handleSelect(hit.resourceId, hit.recordId)}\n className=\"flex-col items-start gap-0.5\"\n >\n <div className=\"flex w-full items-baseline gap-2\">\n <span className=\"flex-1 truncate font-medium\">\n {highlightMatch(hit.title, debounced)}\n </span>\n {hit.matchedField && (\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {t('globalSearch:matchedIn').replace('{field}', hit.matchedField)}\n </span>\n )}\n </div>\n {hit.snippet && (\n <div className=\"line-clamp-1 text-xs text-muted-foreground\">\n {highlightMatch(hit.snippet, debounced)}\n </div>\n )}\n </CommandItem>\n ))}\n {/* `forceMount` keeps this row visible regardless of the current\n query — cmdk's default fuzzy filter would otherwise drop it\n because the value `${id}:show-all` rarely contains the typed\n needle. */}\n <CommandItem\n key={`${group.resourceId}:show-all`}\n value={`${group.resourceId}:show-all`}\n forceMount\n onSelect={() => handleShowAll(group.resourceId)}\n className=\"text-xs text-muted-foreground\"\n >\n <ArrowRight className=\"mr-2 size-3.5\" aria-hidden=\"true\" />\n {t('globalSearch:showAllIn').replace('{resource}', group.resourceName)}\n </CommandItem>\n </CommandGroup>\n </React.Fragment>\n ))}\n </CommandList>\n </CommandDialog>\n )\n}\n"],"mappings":"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"}