@modern-admin/web 0.4.2 → 0.6.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 (391) hide show
  1. package/dist/config/vite.js +20 -0
  2. package/dist/lib/index.js +6 -5
  3. package/dist/lib/index.js.map +1 -1
  4. package/dist/standalone/assets/action-component-host-8DE4kuUJ.js +2 -0
  5. package/dist/standalone/assets/action-component-host-8DE4kuUJ.js.br +0 -0
  6. package/dist/standalone/assets/action-component-host-8DE4kuUJ.js.gz +0 -0
  7. package/dist/standalone/assets/{action-component-host-P6HcuKj3.js.map → action-component-host-8DE4kuUJ.js.map} +1 -1
  8. package/dist/standalone/assets/action-page-D6BbXzUo.js +2 -0
  9. package/dist/standalone/assets/action-page-D6BbXzUo.js.br +0 -0
  10. package/dist/standalone/assets/action-page-D6BbXzUo.js.gz +0 -0
  11. package/dist/standalone/assets/{action-page-kyqtK3oq.js.map → action-page-D6BbXzUo.js.map} +1 -1
  12. package/dist/standalone/assets/ai-assistant-widget-BORa8_hT.js +2 -0
  13. package/dist/standalone/assets/ai-assistant-widget-BORa8_hT.js.br +0 -0
  14. package/dist/standalone/assets/ai-assistant-widget-BORa8_hT.js.gz +0 -0
  15. package/dist/standalone/assets/{ai-assistant-widget-DGanix6u.js.map → ai-assistant-widget-BORa8_hT.js.map} +1 -1
  16. package/dist/standalone/assets/arrow-left-yVCaEJJu.js +2 -0
  17. package/dist/standalone/assets/{arrow-left-CI9hUPwJ.js.map → arrow-left-yVCaEJJu.js.map} +1 -1
  18. package/dist/standalone/assets/audit-log-page-uHj9GWfi.js +2 -0
  19. package/dist/standalone/assets/audit-log-page-uHj9GWfi.js.br +0 -0
  20. package/dist/standalone/assets/audit-log-page-uHj9GWfi.js.gz +0 -0
  21. package/dist/standalone/assets/{audit-log-page-DozriTiA.js.map → audit-log-page-uHj9GWfi.js.map} +1 -1
  22. package/dist/standalone/assets/badge-CdW_Z0lB.js +2 -0
  23. package/dist/standalone/assets/{badge-lb2Nqx1b.js.map → badge-CdW_Z0lB.js.map} +1 -1
  24. package/dist/standalone/assets/{bot-DFDgGfNj.js → bot-CuDPD_ZU.js} +2 -2
  25. package/dist/standalone/assets/{bot-DFDgGfNj.js.map → bot-CuDPD_ZU.js.map} +1 -1
  26. package/dist/standalone/assets/cache-page-CBKj7WFq.js +2 -0
  27. package/dist/standalone/assets/cache-page-CBKj7WFq.js.br +0 -0
  28. package/dist/standalone/assets/cache-page-CBKj7WFq.js.gz +0 -0
  29. package/dist/standalone/assets/cache-page-CBKj7WFq.js.map +1 -0
  30. package/dist/standalone/assets/calendar-BuLRvNBg.js +2 -0
  31. package/dist/standalone/assets/calendar-BuLRvNBg.js.br +0 -0
  32. package/dist/standalone/assets/calendar-BuLRvNBg.js.gz +0 -0
  33. package/dist/standalone/assets/calendar-BuLRvNBg.js.map +1 -0
  34. package/dist/standalone/assets/card-BYbadRar.js +2 -0
  35. package/dist/standalone/assets/card-BYbadRar.js.br +0 -0
  36. package/dist/standalone/assets/card-BYbadRar.js.gz +0 -0
  37. package/dist/standalone/assets/{card-Dh44j2Nb.js.map → card-BYbadRar.js.map} +1 -1
  38. package/dist/standalone/assets/chart-widget-Bfk_mvm2.js +2 -0
  39. package/dist/standalone/assets/chart-widget-Bfk_mvm2.js.br +0 -0
  40. package/dist/standalone/assets/chart-widget-Bfk_mvm2.js.gz +0 -0
  41. package/dist/standalone/assets/{chart-widget-B819aHsE.js.map → chart-widget-Bfk_mvm2.js.map} +1 -1
  42. package/dist/standalone/assets/chevrons-up-down-y29_Sm-3.js +2 -0
  43. package/dist/standalone/assets/{chevrons-up-down-BHCs46XQ.js.map → chevrons-up-down-y29_Sm-3.js.map} +1 -1
  44. package/dist/standalone/assets/{circle-alert-0EyKeic4.js → circle-alert-D1sKnXtO.js} +2 -2
  45. package/dist/standalone/assets/{circle-alert-0EyKeic4.js.map → circle-alert-D1sKnXtO.js.map} +1 -1
  46. package/dist/standalone/assets/{clock-OCmX6DtA.js → clock-B9qbSr_k.js} +2 -2
  47. package/dist/standalone/assets/{clock-OCmX6DtA.js.map → clock-B9qbSr_k.js.map} +1 -1
  48. package/dist/standalone/assets/command-BAXXxf0P.js +2 -0
  49. package/dist/standalone/assets/command-BAXXxf0P.js.br +0 -0
  50. package/dist/standalone/assets/command-BAXXxf0P.js.gz +0 -0
  51. package/dist/standalone/assets/command-BAXXxf0P.js.map +1 -0
  52. package/dist/standalone/assets/{copy-BexCWf4U.js → copy-5fb4qj-_.js} +2 -2
  53. package/dist/standalone/assets/{copy-BexCWf4U.js.map → copy-5fb4qj-_.js.map} +1 -1
  54. package/dist/standalone/assets/createLucideIcon-QE2kj6ru.js +2 -0
  55. package/dist/standalone/assets/createLucideIcon-QE2kj6ru.js.br +0 -0
  56. package/dist/standalone/assets/createLucideIcon-QE2kj6ru.js.gz +0 -0
  57. package/dist/standalone/assets/createLucideIcon-QE2kj6ru.js.map +1 -0
  58. package/dist/standalone/assets/date-picker-Bxv-yrWf.js +2 -0
  59. package/dist/standalone/assets/date-picker-Bxv-yrWf.js.br +0 -0
  60. package/dist/standalone/assets/date-picker-Bxv-yrWf.js.gz +0 -0
  61. package/dist/standalone/assets/{date-picker-D0dWQEox.js.map → date-picker-Bxv-yrWf.js.map} +1 -1
  62. package/dist/standalone/assets/dist-COXu-_Zv.js +2 -0
  63. package/dist/standalone/assets/dist-COXu-_Zv.js.br +0 -0
  64. package/dist/standalone/assets/dist-COXu-_Zv.js.gz +0 -0
  65. package/dist/standalone/assets/dist-COXu-_Zv.js.map +1 -0
  66. package/dist/standalone/assets/dist-CiXwD0ML.js +2 -0
  67. package/dist/standalone/assets/dist-CiXwD0ML.js.br +0 -0
  68. package/dist/standalone/assets/dist-CiXwD0ML.js.gz +0 -0
  69. package/dist/standalone/assets/dist-CiXwD0ML.js.map +1 -0
  70. package/dist/standalone/assets/dist-DPxQeZn3.js +2 -0
  71. package/dist/standalone/assets/dist-DPxQeZn3.js.br +0 -0
  72. package/dist/standalone/assets/dist-DPxQeZn3.js.gz +0 -0
  73. package/dist/standalone/assets/dist-DPxQeZn3.js.map +1 -0
  74. package/dist/standalone/assets/edit-page-Dm638D2J.js +2 -0
  75. package/dist/standalone/assets/edit-page-Dm638D2J.js.br +0 -0
  76. package/dist/standalone/assets/edit-page-Dm638D2J.js.gz +0 -0
  77. package/dist/standalone/assets/{edit-page-CFPwq1_5.js.map → edit-page-Dm638D2J.js.map} +1 -1
  78. package/dist/standalone/assets/{ellipsis-lEjcTxo0.js → ellipsis-BRmOlhsy.js} +2 -2
  79. package/dist/standalone/assets/{ellipsis-lEjcTxo0.js.map → ellipsis-BRmOlhsy.js.map} +1 -1
  80. package/dist/standalone/assets/empty-DMs98grx.js +2 -0
  81. package/dist/standalone/assets/empty-DMs98grx.js.br +0 -0
  82. package/dist/standalone/assets/empty-DMs98grx.js.gz +0 -0
  83. package/dist/standalone/assets/empty-DMs98grx.js.map +1 -0
  84. package/dist/standalone/assets/{file-text-CcLZq8HA.js → file-text-MQF--yeB.js} +2 -2
  85. package/dist/standalone/assets/{file-text-CcLZq8HA.js.map → file-text-MQF--yeB.js.map} +1 -1
  86. package/dist/standalone/assets/floating-layer-BcTp2AMB.js +2 -0
  87. package/dist/standalone/assets/floating-layer-BcTp2AMB.js.br +0 -0
  88. package/dist/standalone/assets/floating-layer-BcTp2AMB.js.gz +0 -0
  89. package/dist/standalone/assets/floating-layer-BcTp2AMB.js.map +1 -0
  90. package/dist/standalone/assets/global-search-dialog-DxwxFDO5.js +2 -0
  91. package/dist/standalone/assets/global-search-dialog-DxwxFDO5.js.br +0 -0
  92. package/dist/standalone/assets/global-search-dialog-DxwxFDO5.js.gz +0 -0
  93. package/dist/standalone/assets/{global-search-dialog-AfQmJSE7.js.map → global-search-dialog-DxwxFDO5.js.map} +1 -1
  94. package/dist/standalone/assets/heavy-fields-LnhreUPp.js +174 -0
  95. package/dist/standalone/assets/heavy-fields-LnhreUPp.js.br +0 -0
  96. package/dist/standalone/assets/heavy-fields-LnhreUPp.js.gz +0 -0
  97. package/dist/standalone/assets/heavy-fields-LnhreUPp.js.map +1 -0
  98. package/dist/standalone/assets/home-page-DiDOzuic.js +61 -0
  99. package/dist/standalone/assets/home-page-DiDOzuic.js.br +0 -0
  100. package/dist/standalone/assets/home-page-DiDOzuic.js.gz +0 -0
  101. package/dist/standalone/assets/home-page-DiDOzuic.js.map +1 -0
  102. package/dist/standalone/assets/hooks-BiOfAnEq.js +186 -0
  103. package/dist/standalone/assets/hooks-BiOfAnEq.js.br +0 -0
  104. package/dist/standalone/assets/hooks-BiOfAnEq.js.gz +0 -0
  105. package/dist/standalone/assets/hooks-BiOfAnEq.js.map +1 -0
  106. package/dist/standalone/assets/icon-registry-s31CNk7M.js +2 -0
  107. package/dist/standalone/assets/icon-registry-s31CNk7M.js.br +0 -0
  108. package/dist/standalone/assets/icon-registry-s31CNk7M.js.gz +0 -0
  109. package/dist/standalone/assets/icon-registry-s31CNk7M.js.map +1 -0
  110. package/dist/standalone/assets/index-CASCzvYu.js +15 -0
  111. package/dist/standalone/assets/index-CASCzvYu.js.br +0 -0
  112. package/dist/standalone/assets/index-CASCzvYu.js.gz +0 -0
  113. package/dist/standalone/assets/index-CASCzvYu.js.map +1 -0
  114. package/dist/standalone/assets/index-Cz5ntgJ_.css +2 -0
  115. package/dist/standalone/assets/index-Cz5ntgJ_.css.br +0 -0
  116. package/dist/standalone/assets/index-Cz5ntgJ_.css.gz +0 -0
  117. package/dist/standalone/assets/{info-CGVdWTj1.js → info-ChwYoM77.js} +2 -2
  118. package/dist/standalone/assets/{info-CGVdWTj1.js.map → info-ChwYoM77.js.map} +1 -1
  119. package/dist/standalone/assets/json-editor-BD0UhGOT.js +2 -0
  120. package/dist/standalone/assets/json-editor-BD0UhGOT.js.br +0 -0
  121. package/dist/standalone/assets/json-editor-BD0UhGOT.js.gz +0 -0
  122. package/dist/standalone/assets/json-editor-BD0UhGOT.js.map +1 -0
  123. package/dist/standalone/assets/key-BzJFbNbz.js +2 -0
  124. package/dist/standalone/assets/key-BzJFbNbz.js.map +1 -0
  125. package/dist/standalone/assets/{key-round-CQLp1Ua9.js → key-round-oSqmVdkQ.js} +2 -2
  126. package/dist/standalone/assets/{key-round-CQLp1Ua9.js.map → key-round-oSqmVdkQ.js.map} +1 -1
  127. package/dist/standalone/assets/{minimize-2-Bx2cH_WS.js → minimize-2-iWv98HjE.js} +2 -2
  128. package/dist/standalone/assets/{minimize-2-Bx2cH_WS.js.map → minimize-2-iWv98HjE.js.map} +1 -1
  129. package/dist/standalone/assets/{palette-DVP_4RAn.js → palette-jgTV28yN.js} +2 -2
  130. package/dist/standalone/assets/{palette-DVP_4RAn.js.map → palette-jgTV28yN.js.map} +1 -1
  131. package/dist/standalone/assets/{pencil-BO-k3yTG.js → pencil-kFOObGrY.js} +2 -2
  132. package/dist/standalone/assets/{pencil-BO-k3yTG.js.map → pencil-kFOObGrY.js.map} +1 -1
  133. package/dist/standalone/assets/{pipette-CqHYfQnn.js → pipette-roLBCmPv.js} +2 -2
  134. package/dist/standalone/assets/pipette-roLBCmPv.js.br +0 -0
  135. package/dist/standalone/assets/pipette-roLBCmPv.js.gz +0 -0
  136. package/dist/standalone/assets/{pipette-CqHYfQnn.js.map → pipette-roLBCmPv.js.map} +1 -1
  137. package/dist/standalone/assets/plus-D7PHzena.js +2 -0
  138. package/dist/standalone/assets/{plus-Dk-FzitW.js.map → plus-D7PHzena.js.map} +1 -1
  139. package/dist/standalone/assets/property-renderer-ClrVnSny.js +4 -0
  140. package/dist/standalone/assets/property-renderer-ClrVnSny.js.br +0 -0
  141. package/dist/standalone/assets/property-renderer-ClrVnSny.js.gz +0 -0
  142. package/dist/standalone/assets/property-renderer-ClrVnSny.js.map +1 -0
  143. package/dist/standalone/assets/reference-BMbhUBHD.js +2 -0
  144. package/dist/standalone/assets/reference-BMbhUBHD.js.br +0 -0
  145. package/dist/standalone/assets/reference-BMbhUBHD.js.gz +0 -0
  146. package/dist/standalone/assets/{reference-DWJEoGIf.js.map → reference-BMbhUBHD.js.map} +1 -1
  147. package/dist/standalone/assets/refresh-cw-Cm9YiHGV.js +2 -0
  148. package/dist/standalone/assets/refresh-cw-Cm9YiHGV.js.map +1 -0
  149. package/dist/standalone/assets/revisions-button-Csueldv_.js +2 -0
  150. package/dist/standalone/assets/revisions-button-Csueldv_.js.br +0 -0
  151. package/dist/standalone/assets/revisions-button-Csueldv_.js.gz +0 -0
  152. package/dist/standalone/assets/{revisions-button-DR0oW2wX.js.map → revisions-button-Csueldv_.js.map} +1 -1
  153. package/dist/standalone/assets/richtext-render-DaiNQPjZ.js +68 -0
  154. package/dist/standalone/assets/richtext-render-DaiNQPjZ.js.br +0 -0
  155. package/dist/standalone/assets/richtext-render-DaiNQPjZ.js.gz +0 -0
  156. package/dist/standalone/assets/richtext-render-DaiNQPjZ.js.map +1 -0
  157. package/dist/standalone/assets/{rotate-ccw-BLr0QLAg.js → rotate-ccw-AB1VcvbK.js} +2 -2
  158. package/dist/standalone/assets/{rotate-ccw-BLr0QLAg.js.map → rotate-ccw-AB1VcvbK.js.map} +1 -1
  159. package/dist/standalone/assets/{save-Cd3oR3Sj.js → save-BkkrgP5Q.js} +2 -2
  160. package/dist/standalone/assets/{save-Cd3oR3Sj.js.map → save-BkkrgP5Q.js.map} +1 -1
  161. package/dist/standalone/assets/schemas-ByMQmMCS.js +65 -0
  162. package/dist/standalone/assets/schemas-ByMQmMCS.js.br +0 -0
  163. package/dist/standalone/assets/schemas-ByMQmMCS.js.gz +0 -0
  164. package/dist/standalone/assets/schemas-ByMQmMCS.js.map +1 -0
  165. package/dist/standalone/assets/select-BOe2daO9.js +2 -0
  166. package/dist/standalone/assets/select-BOe2daO9.js.br +0 -0
  167. package/dist/standalone/assets/select-BOe2daO9.js.gz +0 -0
  168. package/dist/standalone/assets/select-BOe2daO9.js.map +1 -0
  169. package/dist/standalone/assets/{send-D4KHQGYj.js → send-Bzb_4uMT.js} +2 -2
  170. package/dist/standalone/assets/{send-D4KHQGYj.js.map → send-Bzb_4uMT.js.map} +1 -1
  171. package/dist/standalone/assets/settings-page-BmphreWj.js +2 -0
  172. package/dist/standalone/assets/settings-page-BmphreWj.js.br +0 -0
  173. package/dist/standalone/assets/settings-page-BmphreWj.js.gz +0 -0
  174. package/dist/standalone/assets/{settings-page-DSWp2N6T.js.map → settings-page-BmphreWj.js.map} +1 -1
  175. package/dist/standalone/assets/show-page-CDgUXhsx.js +2 -0
  176. package/dist/standalone/assets/show-page-CDgUXhsx.js.br +0 -0
  177. package/dist/standalone/assets/show-page-CDgUXhsx.js.gz +0 -0
  178. package/dist/standalone/assets/{show-page-CGzUAZoO.js.map → show-page-CDgUXhsx.js.map} +1 -1
  179. package/dist/standalone/assets/{sparkles-CqF0zjrF.js → sparkles-1tT0H4n4.js} +2 -2
  180. package/dist/standalone/assets/{sparkles-CqF0zjrF.js.map → sparkles-1tT0H4n4.js.map} +1 -1
  181. package/dist/standalone/assets/{square-pen-DGT7ekeJ.js → square-pen-ZvVEwkzw.js} +2 -2
  182. package/dist/standalone/assets/{square-pen-DGT7ekeJ.js.map → square-pen-ZvVEwkzw.js.map} +1 -1
  183. package/dist/standalone/assets/table-RI-lM4fw.js +2 -0
  184. package/dist/standalone/assets/table-RI-lM4fw.js.br +1 -0
  185. package/dist/standalone/assets/table-RI-lM4fw.js.gz +0 -0
  186. package/dist/standalone/assets/table-RI-lM4fw.js.map +1 -0
  187. package/dist/standalone/assets/tabs-Bj4gQaH2.js +2 -0
  188. package/dist/standalone/assets/tabs-Bj4gQaH2.js.br +0 -0
  189. package/dist/standalone/assets/tabs-Bj4gQaH2.js.gz +0 -0
  190. package/dist/standalone/assets/tabs-Bj4gQaH2.js.map +1 -0
  191. package/dist/standalone/assets/textarea-C2w7TG3h.js +2 -0
  192. package/dist/standalone/assets/{textarea-DBVf3GGt.js.map → textarea-C2w7TG3h.js.map} +1 -1
  193. package/dist/standalone/assets/{trash-2-DhyKQCKv.js → trash-2-BIJVpWxv.js} +2 -2
  194. package/dist/standalone/assets/{trash-2-DhyKQCKv.js.map → trash-2-BIJVpWxv.js.map} +1 -1
  195. package/dist/standalone/assets/{triangle-alert-CyaaNWN8.js → triangle-alert-yljVpQCM.js} +2 -2
  196. package/dist/standalone/assets/{triangle-alert-CyaaNWN8.js.map → triangle-alert-yljVpQCM.js.map} +1 -1
  197. package/dist/standalone/assets/{undo-2-DlSB-5DM.js → undo-2-CnH3ScKE.js} +2 -2
  198. package/dist/standalone/assets/undo-2-CnH3ScKE.js.br +0 -0
  199. package/dist/standalone/assets/undo-2-CnH3ScKE.js.gz +0 -0
  200. package/dist/standalone/assets/{undo-2-DlSB-5DM.js.map → undo-2-CnH3ScKE.js.map} +1 -1
  201. package/dist/standalone/assets/{upload-BVhXhZgn.js → upload-DrfB-4bU.js} +2 -2
  202. package/dist/standalone/assets/upload-DrfB-4bU.js.br +0 -0
  203. package/dist/standalone/assets/upload-DrfB-4bU.js.gz +0 -0
  204. package/dist/standalone/assets/{upload-BVhXhZgn.js.map → upload-DrfB-4bU.js.map} +1 -1
  205. package/dist/standalone/assets/use-dashboard-charts-D7-ctwCE.js +2 -0
  206. package/dist/standalone/assets/use-dashboard-charts-D7-ctwCE.js.br +0 -0
  207. package/dist/standalone/assets/use-dashboard-charts-D7-ctwCE.js.gz +0 -0
  208. package/dist/standalone/assets/{use-dashboard-charts-Cr3OUSL5.js.map → use-dashboard-charts-D7-ctwCE.js.map} +1 -1
  209. package/dist/standalone/assets/useQueries-DNUnShBb.js +2 -0
  210. package/dist/standalone/assets/useQueries-DNUnShBb.js.br +0 -0
  211. package/dist/standalone/assets/useQueries-DNUnShBb.js.gz +0 -0
  212. package/dist/standalone/assets/useQueries-DNUnShBb.js.map +1 -0
  213. package/dist/standalone/assets/{user-directory-Df5X8VOe.js → user-directory-BvmDzxsG.js} +2 -2
  214. package/dist/standalone/assets/user-directory-BvmDzxsG.js.br +0 -0
  215. package/dist/standalone/assets/user-directory-BvmDzxsG.js.gz +0 -0
  216. package/dist/standalone/assets/{user-directory-Df5X8VOe.js.map → user-directory-BvmDzxsG.js.map} +1 -1
  217. package/dist/standalone/assets/{wand-sparkles-DWaFQeYS.js → wand-sparkles-DwseTI5T.js} +2 -2
  218. package/dist/standalone/assets/{wand-sparkles-DWaFQeYS.js.map → wand-sparkles-DwseTI5T.js.map} +1 -1
  219. package/dist/standalone/assets/wizard-create-page-D4a8FnmI.js +2 -0
  220. package/dist/standalone/assets/wizard-create-page-D4a8FnmI.js.br +0 -0
  221. package/dist/standalone/assets/wizard-create-page-D4a8FnmI.js.gz +0 -0
  222. package/dist/standalone/assets/{wizard-create-page-B8IcszRF.js.map → wizard-create-page-D4a8FnmI.js.map} +1 -1
  223. package/dist/standalone/assets/x-c-gfVPJa.js +2 -0
  224. package/dist/standalone/assets/{x-C3kLunD6.js.map → x-c-gfVPJa.js.map} +1 -1
  225. package/dist/standalone/assets/zap-BxPAEPtJ.js +2 -0
  226. package/dist/standalone/assets/zap-BxPAEPtJ.js.map +1 -0
  227. package/dist/standalone/assets/zod-2-ubQvxh.js +2 -0
  228. package/dist/standalone/assets/zod-2-ubQvxh.js.br +0 -0
  229. package/dist/standalone/assets/zod-2-ubQvxh.js.gz +0 -0
  230. package/dist/standalone/assets/zod-2-ubQvxh.js.map +1 -0
  231. package/dist/standalone/index.html +12 -12
  232. package/dist/standalone/index.html.br +0 -0
  233. package/dist/standalone/index.html.gz +0 -0
  234. package/package.json +21 -21
  235. package/src/vite.ts +21 -0
  236. package/dist/standalone/assets/action-component-host-P6HcuKj3.js +0 -2
  237. package/dist/standalone/assets/action-component-host-P6HcuKj3.js.br +0 -0
  238. package/dist/standalone/assets/action-component-host-P6HcuKj3.js.gz +0 -0
  239. package/dist/standalone/assets/action-page-kyqtK3oq.js +0 -2
  240. package/dist/standalone/assets/action-page-kyqtK3oq.js.br +0 -0
  241. package/dist/standalone/assets/action-page-kyqtK3oq.js.gz +0 -0
  242. package/dist/standalone/assets/ai-assistant-widget-DGanix6u.js +0 -2
  243. package/dist/standalone/assets/ai-assistant-widget-DGanix6u.js.br +0 -0
  244. package/dist/standalone/assets/ai-assistant-widget-DGanix6u.js.gz +0 -0
  245. package/dist/standalone/assets/arrow-left-CI9hUPwJ.js +0 -2
  246. package/dist/standalone/assets/audit-log-page-DozriTiA.js +0 -2
  247. package/dist/standalone/assets/audit-log-page-DozriTiA.js.br +0 -0
  248. package/dist/standalone/assets/audit-log-page-DozriTiA.js.gz +0 -0
  249. package/dist/standalone/assets/badge-lb2Nqx1b.js +0 -2
  250. package/dist/standalone/assets/calendar-crtd4PEn.js +0 -2
  251. package/dist/standalone/assets/calendar-crtd4PEn.js.br +0 -0
  252. package/dist/standalone/assets/calendar-crtd4PEn.js.gz +0 -0
  253. package/dist/standalone/assets/calendar-crtd4PEn.js.map +0 -1
  254. package/dist/standalone/assets/card-Dh44j2Nb.js +0 -2
  255. package/dist/standalone/assets/card-Dh44j2Nb.js.br +0 -0
  256. package/dist/standalone/assets/card-Dh44j2Nb.js.gz +0 -0
  257. package/dist/standalone/assets/chart-widget-B819aHsE.js +0 -2
  258. package/dist/standalone/assets/chart-widget-B819aHsE.js.br +0 -0
  259. package/dist/standalone/assets/chart-widget-B819aHsE.js.gz +0 -0
  260. package/dist/standalone/assets/chevrons-up-down-BHCs46XQ.js +0 -2
  261. package/dist/standalone/assets/command-xJ-6Grpv.js +0 -2
  262. package/dist/standalone/assets/command-xJ-6Grpv.js.br +0 -0
  263. package/dist/standalone/assets/command-xJ-6Grpv.js.gz +0 -0
  264. package/dist/standalone/assets/command-xJ-6Grpv.js.map +0 -1
  265. package/dist/standalone/assets/createLucideIcon-CUopU_LC.js +0 -2
  266. package/dist/standalone/assets/createLucideIcon-CUopU_LC.js.br +0 -0
  267. package/dist/standalone/assets/createLucideIcon-CUopU_LC.js.gz +0 -0
  268. package/dist/standalone/assets/createLucideIcon-CUopU_LC.js.map +0 -1
  269. package/dist/standalone/assets/date-picker-D0dWQEox.js +0 -2
  270. package/dist/standalone/assets/date-picker-D0dWQEox.js.br +0 -0
  271. package/dist/standalone/assets/date-picker-D0dWQEox.js.gz +0 -0
  272. package/dist/standalone/assets/dist-CWGgVQiS.js +0 -2
  273. package/dist/standalone/assets/dist-CWGgVQiS.js.br +0 -0
  274. package/dist/standalone/assets/dist-CWGgVQiS.js.gz +0 -0
  275. package/dist/standalone/assets/dist-CWGgVQiS.js.map +0 -1
  276. package/dist/standalone/assets/dist-UsTgBPww.js +0 -2
  277. package/dist/standalone/assets/dist-UsTgBPww.js.br +0 -0
  278. package/dist/standalone/assets/dist-UsTgBPww.js.gz +0 -0
  279. package/dist/standalone/assets/dist-UsTgBPww.js.map +0 -1
  280. package/dist/standalone/assets/dist-qlnAsTo_.js +0 -2
  281. package/dist/standalone/assets/dist-qlnAsTo_.js.br +0 -0
  282. package/dist/standalone/assets/dist-qlnAsTo_.js.gz +0 -0
  283. package/dist/standalone/assets/dist-qlnAsTo_.js.map +0 -1
  284. package/dist/standalone/assets/edit-page-CFPwq1_5.js +0 -2
  285. package/dist/standalone/assets/edit-page-CFPwq1_5.js.br +0 -0
  286. package/dist/standalone/assets/edit-page-CFPwq1_5.js.gz +0 -0
  287. package/dist/standalone/assets/empty-D9sUunOr.js +0 -2
  288. package/dist/standalone/assets/empty-D9sUunOr.js.br +0 -0
  289. package/dist/standalone/assets/empty-D9sUunOr.js.gz +0 -0
  290. package/dist/standalone/assets/empty-D9sUunOr.js.map +0 -1
  291. package/dist/standalone/assets/global-search-dialog-AfQmJSE7.js +0 -2
  292. package/dist/standalone/assets/global-search-dialog-AfQmJSE7.js.br +0 -0
  293. package/dist/standalone/assets/global-search-dialog-AfQmJSE7.js.gz +0 -0
  294. package/dist/standalone/assets/heavy-fields-_zVIBnm1.js +0 -181
  295. package/dist/standalone/assets/heavy-fields-_zVIBnm1.js.br +0 -0
  296. package/dist/standalone/assets/heavy-fields-_zVIBnm1.js.gz +0 -0
  297. package/dist/standalone/assets/heavy-fields-_zVIBnm1.js.map +0 -1
  298. package/dist/standalone/assets/home-page-BdTrAXqk.js +0 -3
  299. package/dist/standalone/assets/home-page-BdTrAXqk.js.br +0 -0
  300. package/dist/standalone/assets/home-page-BdTrAXqk.js.gz +0 -0
  301. package/dist/standalone/assets/home-page-BdTrAXqk.js.map +0 -1
  302. package/dist/standalone/assets/icon-registry-CcMm2Zh3.js +0 -2
  303. package/dist/standalone/assets/icon-registry-CcMm2Zh3.js.br +0 -0
  304. package/dist/standalone/assets/icon-registry-CcMm2Zh3.js.gz +0 -0
  305. package/dist/standalone/assets/icon-registry-CcMm2Zh3.js.map +0 -1
  306. package/dist/standalone/assets/index-DHZwffoP.css +0 -2
  307. package/dist/standalone/assets/index-DHZwffoP.css.br +0 -0
  308. package/dist/standalone/assets/index-DHZwffoP.css.gz +0 -0
  309. package/dist/standalone/assets/index-uYpCUVT4.js +0 -15
  310. package/dist/standalone/assets/index-uYpCUVT4.js.br +0 -0
  311. package/dist/standalone/assets/index-uYpCUVT4.js.gz +0 -0
  312. package/dist/standalone/assets/index-uYpCUVT4.js.map +0 -1
  313. package/dist/standalone/assets/json-editor-yfO4TUB_.js +0 -2
  314. package/dist/standalone/assets/json-editor-yfO4TUB_.js.br +0 -0
  315. package/dist/standalone/assets/json-editor-yfO4TUB_.js.gz +0 -0
  316. package/dist/standalone/assets/json-editor-yfO4TUB_.js.map +0 -1
  317. package/dist/standalone/assets/key-lbuX0yk_.js +0 -2
  318. package/dist/standalone/assets/key-lbuX0yk_.js.map +0 -1
  319. package/dist/standalone/assets/pipette-CqHYfQnn.js.br +0 -0
  320. package/dist/standalone/assets/pipette-CqHYfQnn.js.gz +0 -0
  321. package/dist/standalone/assets/plus-Dk-FzitW.js +0 -2
  322. package/dist/standalone/assets/property-renderer-CDKsa2KQ.js +0 -7
  323. package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.br +0 -0
  324. package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.gz +0 -0
  325. package/dist/standalone/assets/property-renderer-CDKsa2KQ.js.map +0 -1
  326. package/dist/standalone/assets/reference-DWJEoGIf.js +0 -2
  327. package/dist/standalone/assets/reference-DWJEoGIf.js.br +0 -0
  328. package/dist/standalone/assets/reference-DWJEoGIf.js.gz +0 -0
  329. package/dist/standalone/assets/refresh-cw-DHvUQTMb.js +0 -2
  330. package/dist/standalone/assets/refresh-cw-DHvUQTMb.js.map +0 -1
  331. package/dist/standalone/assets/revisions-button-DR0oW2wX.js +0 -2
  332. package/dist/standalone/assets/revisions-button-DR0oW2wX.js.br +0 -0
  333. package/dist/standalone/assets/revisions-button-DR0oW2wX.js.gz +0 -0
  334. package/dist/standalone/assets/richtext-render-VFCKGulc.js +0 -67
  335. package/dist/standalone/assets/richtext-render-VFCKGulc.js.br +0 -0
  336. package/dist/standalone/assets/richtext-render-VFCKGulc.js.gz +0 -0
  337. package/dist/standalone/assets/richtext-render-VFCKGulc.js.map +0 -1
  338. package/dist/standalone/assets/router-BcZgB5cZ.js +0 -186
  339. package/dist/standalone/assets/router-BcZgB5cZ.js.br +0 -0
  340. package/dist/standalone/assets/router-BcZgB5cZ.js.gz +0 -0
  341. package/dist/standalone/assets/router-BcZgB5cZ.js.map +0 -1
  342. package/dist/standalone/assets/schemas-twnCb1uT.js +0 -65
  343. package/dist/standalone/assets/schemas-twnCb1uT.js.br +0 -0
  344. package/dist/standalone/assets/schemas-twnCb1uT.js.gz +0 -0
  345. package/dist/standalone/assets/schemas-twnCb1uT.js.map +0 -1
  346. package/dist/standalone/assets/select-BiV9bunJ.js +0 -2
  347. package/dist/standalone/assets/select-BiV9bunJ.js.br +0 -0
  348. package/dist/standalone/assets/select-BiV9bunJ.js.gz +0 -0
  349. package/dist/standalone/assets/select-BiV9bunJ.js.map +0 -1
  350. package/dist/standalone/assets/settings-page-DSWp2N6T.js +0 -2
  351. package/dist/standalone/assets/settings-page-DSWp2N6T.js.br +0 -0
  352. package/dist/standalone/assets/settings-page-DSWp2N6T.js.gz +0 -0
  353. package/dist/standalone/assets/show-page-CGzUAZoO.js +0 -2
  354. package/dist/standalone/assets/show-page-CGzUAZoO.js.br +0 -0
  355. package/dist/standalone/assets/show-page-CGzUAZoO.js.gz +0 -0
  356. package/dist/standalone/assets/tabs-smdw70rV.js +0 -2
  357. package/dist/standalone/assets/tabs-smdw70rV.js.br +0 -0
  358. package/dist/standalone/assets/tabs-smdw70rV.js.gz +0 -0
  359. package/dist/standalone/assets/tabs-smdw70rV.js.map +0 -1
  360. package/dist/standalone/assets/textarea-DBVf3GGt.js +0 -2
  361. package/dist/standalone/assets/undo-2-DlSB-5DM.js.br +0 -0
  362. package/dist/standalone/assets/undo-2-DlSB-5DM.js.gz +0 -0
  363. package/dist/standalone/assets/upload-BVhXhZgn.js.br +0 -0
  364. package/dist/standalone/assets/upload-BVhXhZgn.js.gz +0 -0
  365. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js +0 -2
  366. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js.br +0 -0
  367. package/dist/standalone/assets/use-dashboard-charts-Cr3OUSL5.js.gz +0 -0
  368. package/dist/standalone/assets/useQueries-Ba2PuYhZ.js +0 -2
  369. package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.br +0 -0
  370. package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.gz +0 -0
  371. package/dist/standalone/assets/useQueries-Ba2PuYhZ.js.map +0 -1
  372. package/dist/standalone/assets/user-directory-Df5X8VOe.js.br +0 -0
  373. package/dist/standalone/assets/user-directory-Df5X8VOe.js.gz +0 -0
  374. package/dist/standalone/assets/value-format-BUeGtfH4.js +0 -60
  375. package/dist/standalone/assets/value-format-BUeGtfH4.js.br +0 -0
  376. package/dist/standalone/assets/value-format-BUeGtfH4.js.gz +0 -0
  377. package/dist/standalone/assets/value-format-BUeGtfH4.js.map +0 -1
  378. package/dist/standalone/assets/with-selector-id7qGzTH.js +0 -2
  379. package/dist/standalone/assets/with-selector-id7qGzTH.js.br +0 -0
  380. package/dist/standalone/assets/with-selector-id7qGzTH.js.gz +0 -0
  381. package/dist/standalone/assets/with-selector-id7qGzTH.js.map +0 -1
  382. package/dist/standalone/assets/wizard-create-page-B8IcszRF.js +0 -2
  383. package/dist/standalone/assets/wizard-create-page-B8IcszRF.js.br +0 -0
  384. package/dist/standalone/assets/wizard-create-page-B8IcszRF.js.gz +0 -0
  385. package/dist/standalone/assets/x-C3kLunD6.js +0 -2
  386. package/dist/standalone/assets/zap-b3saQVKc.js +0 -2
  387. package/dist/standalone/assets/zap-b3saQVKc.js.map +0 -1
  388. package/dist/standalone/assets/zod-mi61gVha.js +0 -2
  389. package/dist/standalone/assets/zod-mi61gVha.js.br +0 -0
  390. package/dist/standalone/assets/zod-mi61gVha.js.gz +0 -0
  391. package/dist/standalone/assets/zod-mi61gVha.js.map +0 -1
@@ -0,0 +1,186 @@
1
+ import{a as e,n as t}from"./createLucideIcon-QE2kj6ru.js";import{C as n,c as r,p as i,x as a}from"./floating-layer-BcTp2AMB.js";var o=e(t(),1),s=Object.defineProperty,c=(e,t)=>s(e,`name`,{value:t,configurable:!0}),l=0,u=null;function d(e){return f(),e.children}c(d,`FocusGuards`);function f(){o.useEffect(()=>{u||={start:p(),end:p()};let{start:e,end:t}=u;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement(`afterbegin`,e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement(`beforeend`,t),l++,()=>{l===1&&(u?.start.remove(),u?.end.remove(),u=null),l=Math.max(0,l-1)}},[])}c(f,`useFocusGuards`);function p(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}c(p,`createFocusGuard`);var m=n(),h=Object.defineProperty,g=(e,t)=>h(e,`name`,{value:t,configurable:!0}),_=`focusScope.autoFocusOnMount`,v=`focusScope.autoFocusOnUnmount`,y={bubbles:!1,cancelable:!0},b=o.forwardRef(g(function(e,t){let{loop:n=!1,trapped:s=!1,onMountAutoFocus:c,onUnmountAutoFocus:l,...u}=e,[d,f]=o.useState(null),p=r(c),h=r(l),b=o.useRef(null),C=a(t,f),w=o.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;o.useEffect(()=>{if(s){let e=function(e){if(w.paused||!d)return;let t=e.target;d.contains(t)?b.current=t:T(b.current,{select:!0})},t=function(e){if(w.paused||!d)return;let t=e.relatedTarget;t!==null&&(d.contains(t)||T(b.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&T(d)};g(e,`handleFocusIn`),g(t,`handleFocusOut`),g(n,`handleMutations`),document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return d&&r.observe(d,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[s,d,w.paused]),o.useEffect(()=>{if(d){ne.add(w);let e=document.activeElement;if(!d.contains(e)){let t=new CustomEvent(_,y);d.addEventListener(_,p),d.dispatchEvent(t),t.defaultPrevented||(x(ae(S(d)),{select:!0}),document.activeElement===e&&T(d))}return()=>{d.removeEventListener(_,p),setTimeout(()=>{let t=new CustomEvent(v,y);d.addEventListener(v,h),d.dispatchEvent(t),t.defaultPrevented||T(e??document.body,{select:!0}),d.removeEventListener(v,h),ne.remove(w)},0)}}},[d,p,h,w]);let te=o.useCallback(e=>{if(!n&&!s||w.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,r=document.activeElement;if(t&&r){let t=e.currentTarget,[i,a]=ee(t);i&&a?!e.shiftKey&&r===a?(e.preventDefault(),n&&T(i,{select:!0})):e.shiftKey&&r===i&&(e.preventDefault(),n&&T(a,{select:!0})):r===t&&e.preventDefault()}},[n,s,w.paused]);return(0,m.jsx)(i.div,{tabIndex:-1,...u,ref:C,onKeyDown:te})},`FocusScope`));function x(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(T(r,{select:t}),document.activeElement!==n)return}g(x,`focusFirst`);function ee(e){let t=S(e);return[C(t,e),C(t.reverse(),e)]}g(ee,`getTabbableEdges`);function S(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:g(e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},`acceptNode`)});for(;n.nextNode();)t.push(n.currentNode);return t}g(S,`getTabbableCandidates`);function C(e,t){let n=typeof t.checkVisibility==`function`&&t.checkVisibility({checkVisibilityCSS:!0});for(let r of e)if(!(n?!r.checkVisibility({checkVisibilityCSS:!0}):w(r,{upTo:t})))return r}g(C,`findVisible`);function w(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}g(w,`isHidden`);function te(e){return e instanceof HTMLInputElement&&`select`in e}g(te,`isSelectableInput`);function T(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&te(e)&&t&&e.select()}}g(T,`focus`);var ne=re();function re(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=ie(e,t),e.unshift(t)},remove(t){e=ie(e,t),e[0]?.resume()}}}g(re,`createFocusScopesStack`);function ie(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}g(ie,`arrayRemove`);function ae(e){return e.filter(e=>e.tagName!==`A`)}g(ae,`removeLinks`);var oe=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},E=new WeakMap,se=new WeakMap,ce={},le=0,ue=function(e){return e&&(e.host||ue(e.parentNode))},de=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=ue(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},fe=function(e,t,n,r){var i=de(t,Array.isArray(e)?e:[e]);ce[n]||(ce[n]=new WeakMap);var a=ce[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(E.get(e)||0)+1,l=(a.get(e)||0)+1;E.set(e,c),a.set(e,l),o.push(e),c===1&&i&&se.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),le++,function(){o.forEach(function(e){var t=E.get(e)-1,i=a.get(e)-1;E.set(e,t),a.set(e,i),t||(se.has(e)||e.removeAttribute(r),se.delete(e)),i||e.removeAttribute(n)}),le--,le||(E=new WeakMap,E=new WeakMap,se=new WeakMap,ce={})}},pe=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||oe(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),fe(r,i,n,`aria-hidden`)):function(){return null}},D=function(){return D=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},D.apply(this,arguments)};function me(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function he(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var O=`right-scroll-bar-position`,ge=`width-before-scroll-bar`,_e=`with-scroll-bars-hidden`,ve=`--removed-body-scroll-bar-size`;function ye(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function be(e,t){var n=(0,o.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var xe=typeof window<`u`?o.useLayoutEffect:o.useEffect,Se=new WeakMap;function Ce(e,t){var n=be(t||null,function(t){return e.forEach(function(e){return ye(e,t)})});return xe(function(){var t=Se.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||ye(e,null)}),i.forEach(function(e){r.has(e)||ye(e,a)})}Se.set(n,e)},[e]),n}function we(e){return e}function Te(e,t){t===void 0&&(t=we);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Ee(e){e===void 0&&(e={});var t=Te(null);return t.options=D({async:!0,ssr:!1},e),t}var De=function(e){var t=e.sideCar,n=me(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return o.createElement(r,D({},n))};De.isSideCarExport=!0;function Oe(e,t){return e.useMedium(t),De}var ke=Ee(),Ae=function(){},k=o.forwardRef(function(e,t){var n=o.useRef(null),r=o.useState({onScrollCapture:Ae,onWheelCapture:Ae,onTouchMoveCapture:Ae}),i=r[0],a=r[1],s=e.forwardProps,c=e.children,l=e.className,u=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=me(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),ee=p,S=Ce([n,t]),C=D(D({},x),i);return o.createElement(o.Fragment,null,d&&o.createElement(ee,{sideCar:ke,removeScrollBar:u,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),s?o.cloneElement(o.Children.only(c),D(D({},C),{ref:S})):o.createElement(y,D({},C,{className:l,ref:S}),c))});k.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},k.classNames={fullWidth:ge,zeroRight:O};var je,Me=function(){if(je)return je;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function Ne(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=Me();return t&&e.setAttribute(`nonce`,t),e}function Pe(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Fe(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var Ie=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Ne())&&(Pe(t,n),Fe(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Le=function(){var e=Ie();return function(t,n){o.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Re=function(){var e=Le();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},ze={left:0,top:0,right:0,gap:0},Be=function(e){return parseInt(e||``,10)||0},Ve=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[Be(n),Be(r),Be(i)]},He=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return ze;var t=Ve(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Ue=Re(),A=`data-scroll-locked`,We=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
2
+ .${_e} {
3
+ overflow: hidden ${r};
4
+ padding-right: ${s}px ${r};
5
+ }
6
+ body[${A}] {
7
+ overflow: hidden ${r};
8
+ overscroll-behavior: contain;
9
+ ${[t&&`position: relative ${r};`,n===`margin`&&`
10
+ padding-left: ${i}px;
11
+ padding-top: ${a}px;
12
+ padding-right: ${o}px;
13
+ margin-left:0;
14
+ margin-top:0;
15
+ margin-right: ${s}px ${r};
16
+ `,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
17
+ }
18
+
19
+ .${O} {
20
+ right: ${s}px ${r};
21
+ }
22
+
23
+ .${ge} {
24
+ margin-right: ${s}px ${r};
25
+ }
26
+
27
+ .${O} .${O} {
28
+ right: 0 ${r};
29
+ }
30
+
31
+ .${ge} .${ge} {
32
+ margin-right: 0 ${r};
33
+ }
34
+
35
+ body[${A}] {
36
+ ${ve}: ${s}px;
37
+ }
38
+ `},Ge=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Ke=function(){o.useEffect(function(){return document.body.setAttribute(A,(Ge()+1).toString()),function(){var e=Ge()-1;e<=0?document.body.removeAttribute(A):document.body.setAttribute(A,e.toString())}},[])},qe=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Ke();var a=o.useMemo(function(){return He(i)},[i]);return o.createElement(Ue,{styles:We(a,!t,i,n?``:`!important`)})},Je=!1;if(typeof window<`u`)try{var j=Object.defineProperty({},"passive",{get:function(){return Je=!0,!0}});window.addEventListener(`test`,j,j),window.removeEventListener(`test`,j,j)}catch{Je=!1}var M=Je?{passive:!1}:!1,Ye=function(e){return e.tagName===`TEXTAREA`},Xe=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Ye(e)&&n[t]===`visible`)},Ze=function(e){return Xe(e,`overflowY`)},Qe=function(e){return Xe(e,`overflowX`)},$e=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),nt(e,r)){var i=rt(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},et=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},tt=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},nt=function(e,t){return e===`v`?Ze(t):Qe(t)},rt=function(e,t){return e===`v`?et(t):tt(t)},it=function(e,t){return e===`h`&&t===`rtl`?-1:1},at=function(e,t,n,r,i){var a=it(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=rt(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&nt(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},N=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},ot=function(e){return[e.deltaX,e.deltaY]},st=function(e){return e&&`current`in e?e.current:e},ct=function(e,t){return e[0]===t[0]&&e[1]===t[1]},lt=function(e){return`
39
+ .block-interactivity-${e} {pointer-events: none;}
40
+ .allow-interactivity-${e} {pointer-events: all;}
41
+ `},ut=0,P=[];function dt(e){var t=o.useRef([]),n=o.useRef([0,0]),r=o.useRef(),i=o.useState(ut++)[0],a=o.useState(Re)[0],s=o.useRef(e);o.useEffect(function(){s.current=e},[e]),o.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=he([e.lockRef.current],(e.shards||[]).map(st),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var c=o.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!s.current.allowPinchZoom;var i=N(e),a=n.current,o=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(o)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=$e(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=$e(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(o||c)&&(r.current=l),!l)return!0;var h=r.current||l;return at(h,t,e,h===`h`?o:c,!0)},[]),l=o.useCallback(function(e){var n=e;if(!(!P.length||P[P.length-1]!==a)){var r=`deltaY`in n?ot(n):N(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&ct(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var o=(s.current.shards||[]).map(st).filter(Boolean).filter(function(e){return e.contains(n.target)});(o.length>0?c(n,o[0]):!s.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),u=o.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:ft(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),d=o.useCallback(function(e){n.current=N(e),r.current=void 0},[]),f=o.useCallback(function(t){u(t.type,ot(t),t.target,c(t,e.lockRef.current))},[]),p=o.useCallback(function(t){u(t.type,N(t),t.target,c(t,e.lockRef.current))},[]);o.useEffect(function(){return P.push(a),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:p}),document.addEventListener(`wheel`,l,M),document.addEventListener(`touchmove`,l,M),document.addEventListener(`touchstart`,d,M),function(){P=P.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,l,M),document.removeEventListener(`touchmove`,l,M),document.removeEventListener(`touchstart`,d,M)}},[]);var m=e.removeScrollBar,h=e.inert;return o.createElement(o.Fragment,null,h?o.createElement(a,{styles:lt(i)}):null,m?o.createElement(qe,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function ft(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var pt=Oe(ke,dt),mt=o.forwardRef(function(e,t){return o.createElement(k,D({},e,{ref:t,sideCar:pt}))});mt.classNames=k.classNames;var ht=`modern-admin:demo-session:v1`,gt=`/admin/api/auth`,_t=e=>{if(!e)return``;let t=new URLSearchParams;if(e.page!=null&&t.set(`page`,String(e.page)),e.perPage!=null&&t.set(`perPage`,String(e.perPage)),e.sortBy&&t.set(`sortBy`,e.sortBy),e.direction&&t.set(`direction`,e.direction),e.filters)for(let[n,r]of Object.entries(e.filters))r!==``&&r!=null&&t.set(`filters[${n}]`,r);let n=t.toString();return n?`?${n}`:``},vt=class{baseUrl;credentials;headers;demoSessionStorageKey;authBasePath;signInPath;signOutPath;constructor(e={}){this.baseUrl=e.baseUrl?.replace(/\/$/,``)??``,this.credentials=e.credentials??`include`,this.headers=e.headers??{},this.demoSessionStorageKey=e.persistDemoSession?e.demoSessionStorageKey??ht:null,this.authBasePath=(e.authBasePath??gt).replace(/\/$/,``),this.signInPath=`${this.authBasePath}/sign-in/email`,this.signOutPath=`${this.authBasePath}/sign-out`}get apiBaseUrl(){return this.baseUrl}async requestOnce(e,t={}){let n=await fetch(`${this.baseUrl}${e}`,{credentials:this.credentials,...t,headers:{"Content-Type":`application/json`,...this.headers,...t.headers}});if(!n.ok){let e=await n.text().catch(()=>``);throw new I(n.status,e||n.statusText)}if(n.status!==204)return await n.json()}async request(e,t={},n=!0){try{return await this.requestOnce(e,t)}catch(r){if(!(n&&r instanceof I&&r.status===401&&e!==this.signInPath&&e!==this.signOutPath)||!await this.restoreDemoSession())throw r;return this.requestOnce(e,t)}}readDemoSession(){if(!this.demoSessionStorageKey||typeof window>`u`)return null;try{let e=window.localStorage.getItem(this.demoSessionStorageKey);if(!e)return null;let t=JSON.parse(e);return typeof t.email!=`string`||typeof t.password!=`string`?null:{email:t.email,password:t.password}}catch{return null}}writeDemoSession(e){if(!(!this.demoSessionStorageKey||typeof window>`u`))try{window.localStorage.setItem(this.demoSessionStorageKey,JSON.stringify(e))}catch{return}}clearDemoSession(){if(!(!this.demoSessionStorageKey||typeof window>`u`))try{window.localStorage.removeItem(this.demoSessionStorageKey)}catch{return}}async restoreDemoSession(){let e=this.readDemoSession();if(!e)return!1;try{return await this.request(this.signInPath,{method:`POST`,body:JSON.stringify(e)}),!0}catch{return this.clearDemoSession(),!1}}config(){return this.request(`/admin/api/config`)}me(){return this.request(`/admin/api/auth/me`)}async login(e,t){await this.request(this.signInPath,{method:`POST`,body:JSON.stringify({email:e,password:t})}),this.writeDemoSession({email:e,password:t})}getAuthUiProps(){return this.requestOnce(`/admin/api/auth/ui-props`)}async loginSocial(e,t){let n=t??(typeof window<`u`?window.location.href:`/`),r=await this.requestOnce(`${this.authBasePath}/sign-in/social`,{method:`POST`,body:JSON.stringify({provider:e,callbackURL:n})});r.url&&typeof window<`u`&&(window.location.href=r.url)}async logout(){try{await this.request(this.signOutPath,{method:`POST`,body:`{}`})}finally{this.clearDemoSession()}}list(e,t,n){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/list${_t(t)}`,n?.refresh?{cache:`no-store`,headers:{"Cache-Control":`no-cache`}}:{})}show(e,t){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/actions/show`)}create(e,t){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/new`,{method:`POST`,body:JSON.stringify(t)})}update(e,t,n){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/actions/edit`,{method:`PATCH`,body:JSON.stringify(n)})}delete(e,t){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/actions/delete`,{method:`DELETE`})}bulkDelete(e,t){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/bulkDelete`,{method:`POST`,body:JSON.stringify({recordIds:t})})}distinctValues(e,t,n){let r=new URLSearchParams({field:t});return n?.search&&r.set(`search`,n.search),n?.limit!=null&&r.set(`limit`,String(n.limit)),this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/values?${r.toString()}`)}search(e,t){let n=t?`?q=${encodeURIComponent(t)}`:``;return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/search${n}`)}globalSearch(e,t,n={}){let r=new URLSearchParams({q:e});return t!=null&&r.set(`perResourceLimit`,String(t)),this.request(`/admin/api/global-search?${r.toString()}`,n.signal?{signal:n.signal}:{})}fetchRecordAction(e,t,n,r={}){let i=new URLSearchParams(r).toString();return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/actions/${encodeURIComponent(n)}${i?`?${i}`:``}`)}fetchResourceAction(e,t,n={}){let r=new URLSearchParams(n).toString();return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/${encodeURIComponent(t)}${r?`?${r}`:``}`)}invokeRecordAction(e,t,n,r={}){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/actions/${encodeURIComponent(n)}`,{method:`POST`,body:JSON.stringify(r)})}invokeBulkAction(e,t,n,r={}){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/${encodeURIComponent(t)}`,{method:`POST`,body:JSON.stringify({...r,recordIds:Array.from(n)})})}invokeResourceAction(e,t,n={}){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/actions/${encodeURIComponent(t)}`,{method:`POST`,body:JSON.stringify(n)})}timeseries(e){let t={resource:e.resource,dateField:e.dateField,step:e.step,metric:e.metric,from:F(e.from,`start`),to:F(e.to,`end`)};return e.field&&(t.field=e.field),e.groupBy&&(t.groupBy=e.groupBy),e.topN!=null&&(t.topN=e.topN),e.filters&&Object.keys(e.filters).length&&(t.filters=e.filters),e.comparePrevious&&(t.comparePrevious=!0),e.groupByLabelResource&&(t.groupByLabelResource=e.groupByLabelResource),this.request(`/admin/api/timeseries`,{method:`POST`,body:JSON.stringify(t)})}listHistory(e,t,n={}){let r=new URLSearchParams;n.limit!=null&&r.set(`limit`,String(n.limit)),n.offset!=null&&r.set(`offset`,String(n.offset));let i=r.toString()?`?${r.toString()}`:``;return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/history${i}`)}getHistoryRevision(e,t,n){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/history/${encodeURIComponent(n)}`)}revertHistoryRevision(e,t,n,r={}){return this.request(`/admin/api/resources/${encodeURIComponent(e)}/records/${encodeURIComponent(t)}/history/${encodeURIComponent(n)}/revert`,{method:`POST`,body:JSON.stringify(r)})}listAuditLog(e={}){let t=new URLSearchParams;e.resourceId&&t.set(`resourceId`,e.resourceId),e.recordId&&t.set(`recordId`,e.recordId),e.userId&&t.set(`userId`,e.userId),e.actions?.length&&t.set(`actions`,e.actions.join(`,`)),e.from&&t.set(`from`,F(e.from,`start`)),e.to&&t.set(`to`,F(e.to,`end`)),e.limit!=null&&t.set(`limit`,String(e.limit)),e.offset!=null&&t.set(`offset`,String(e.offset)),e.before!=null&&t.set(`before`,String(e.before));let n=t.toString()?`?${t.toString()}`:``;return this.request(`/admin/api/audit-log${n}`)}uploadFile(e,t,n,r={}){let i=`${this.baseUrl}/admin/api/resources/${encodeURIComponent(e)}/actions/upload?field=${encodeURIComponent(t)}`,a=new FormData;return a.append(`files`,n),new Promise((e,t)=>{let o=new XMLHttpRequest;o.open(`POST`,i,!0),o.withCredentials=this.credentials!==`omit`;for(let[e,t]of Object.entries(this.headers))o.setRequestHeader(e,t);if(o.responseType=`text`,o.upload.onprogress=e=>{if(!r.onProgress)return;let t=e.lengthComputable?e.total:n.size,i=e.loaded;r.onProgress({loaded:i,total:t,percent:t>0?Math.min(100,Math.round(i/t*100)):0})},o.onload=()=>{if(o.status>=200&&o.status<300)try{let i=JSON.parse(o.responseText)[0];if(!i){t(new I(500,`Server returned no upload result`));return}r.onProgress?.({loaded:n.size,total:n.size,percent:100}),e(i)}catch(e){t(new I(500,e instanceof Error?e.message:`Invalid upload response`))}else t(new I(o.status,o.responseText||o.statusText))},o.onerror=()=>t(new I(0,`Network error during upload`)),o.onabort=()=>t(new I(0,`Upload aborted`)),r.signal){if(r.signal.aborted){o.abort();return}r.signal.addEventListener(`abort`,()=>o.abort(),{once:!0})}o.send(a)})}async uploadFiles(e,t,n,r={}){if(n.length===0)return[];let i=Math.max(1,r.concurrency??3),a=Array(n.length).fill(null),o=0,s=async()=>{for(;;){let i=o++;if(i>=n.length)return;let s=n[i];r.onItemStart?.(i,s);try{let n=await this.uploadFile(e,t,s,{signal:r.signal,onProgress:e=>r.onItemProgress?.(i,s,e)});a[i]=n,r.onItemComplete?.(i,s,n)}catch(e){let t=e instanceof Error?e:Error(String(e));r.onItemError?.(i,s,t)}}},c=Array.from({length:Math.min(i,n.length)},()=>s());return await Promise.all(c),a.filter(e=>e!=null)}loadDashboard(){return this.request(`/admin/api/dashboard`)}saveDashboard(e){return this.request(`/admin/api/dashboard`,{method:`PUT`,body:JSON.stringify(e)})}cacheStats(){return this.request(`/admin/api/cache/stats`)}resetCacheStats(){return this.request(`/admin/api/cache/stats/reset`,{method:`POST`})}invalidateResourceCache(e){return this.request(`/admin/api/cache/invalidate`,{method:`POST`,body:JSON.stringify({resourceId:e})})}listApiKeys(){return this.request(`/admin/api/api-keys`)}createApiKey(e){return this.request(`/admin/api/api-keys`,{method:`POST`,body:JSON.stringify(e)})}updateApiKey(e,t){return this.request(`/admin/api/api-keys/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)})}deleteApiKey(e){return this.request(`/admin/api/api-keys/${encodeURIComponent(e)}`,{method:`DELETE`})}listWebhooks(){return this.request(`/admin/api/webhooks`)}createWebhook(e){return this.request(`/admin/api/webhooks`,{method:`POST`,body:JSON.stringify(e)})}updateWebhook(e,t){return this.request(`/admin/api/webhooks/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)})}deleteWebhook(e){return this.request(`/admin/api/webhooks/${encodeURIComponent(e)}`,{method:`DELETE`})}listWebhookDeliveries(e,t=50){return this.request(`/admin/api/webhooks/${encodeURIComponent(e)}/deliveries?limit=${encodeURIComponent(String(t))}`)}testWebhook(e){return this.request(`/admin/api/webhooks/${encodeURIComponent(e)}/test`,{method:`POST`,body:`{}`})}async cancelUpload(e,t,n){let r=`?field=${encodeURIComponent(t)}&key=${encodeURIComponent(n)}`,i=await fetch(`${this.baseUrl}/admin/api/resources/${encodeURIComponent(e)}/actions/upload${r}`,{method:`DELETE`,credentials:this.credentials,headers:this.headers});if(!i.ok&&i.status!==404){let e=await i.text().catch(()=>``);throw new I(i.status,e||i.statusText)}}async aiFillFromImage(e,t,n={}){let r=`${this.baseUrl}/admin/api/resources/${encodeURIComponent(e)}/ai-fill`,i=async()=>{let e=new FormData;e.append(`image`,t);let i=await fetch(r,{method:`POST`,credentials:this.credentials,headers:this.headers,body:e,signal:n.signal});if(!i.ok){let e=await i.text().catch(()=>``);throw new I(i.status,e||i.statusText)}return await i.json()};try{return await i()}catch(e){if(!(e instanceof I&&e.status===401&&!n.signal?.aborted)||!await this.restoreDemoSession())throw e;return i()}}getAiAssistantSettings(){return this.request(`/admin/api/ai-assistant/settings`)}async updateAiAssistantSettings(e){return this.request(`/admin/api/ai-assistant/settings`,{method:`PUT`,body:JSON.stringify(e)})}async sendAiAssistantChat(e,t,n,r,i){return this.request(`/admin/api/ai-assistant/chat`,{method:`POST`,body:JSON.stringify({messages:e,...t?{requestId:t}:{},...n?{locale:n}:{},...r?{conversationId:r}:{},...i?{clientContext:i}:{}})})}async listAiAssistantChats(){return this.request(`/admin/api/ai-assistant/chats`)}async getAiAssistantTask(e){return this.request(`/admin/api/ai-assistant/tasks/${encodeURIComponent(e)}`)}},yt=/^\d{4}-\d{2}-\d{2}$/,F=(e,t)=>{if(yt.test(e))return`${e}T${t===`start`?`00:00:00.000`:`23:59:59.999`}Z`;let n=new Date(e);return Number.isNaN(n.getTime())?e:n.toISOString()},I=class extends Error{status;constructor(e,t){super(t),this.status=e,this.name=`AdminApiError`}};function bt(e){if(e instanceof I)try{let t=JSON.parse(e.message);return{status:e.status,message:t.message??e.message}}catch{return{status:e.status,message:e.message}}return{message:e instanceof Error?e.message:String(e)}}var L=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},xt=new class extends L{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},St={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},R=new class{#e=St;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function Ct(e){setTimeout(e,0)}var wt=typeof window>`u`||`Deno`in globalThis;function z(){}function Tt(e,t){return typeof e==`function`?e(t):e}function Et(e){return typeof e==`number`&&e>=0&&e!==1/0}function Dt(e,t){return Math.max(e+(t||0)-Date.now(),0)}function B(e,t){return typeof e==`function`?e(t):e}function V(e,t){return typeof e==`function`?e(t):e}function Ot(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==At(o,t.options))return!1}else if(!U(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function kt(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(H(t.options.mutationKey)!==H(a))return!1}else if(!U(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function At(e,t){return(t?.queryKeyHashFn||H)(e)}function H(e){return JSON.stringify(e,(e,t)=>Pt(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function U(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){for(let n=0;n<t.length;n++)if(!U(e[n],t[n]))return!1;return!0}let n=Object.keys(t);for(let r of n)if(!U(e[r],t[r]))return!1;return!0}return!1}var jt=Object.prototype.hasOwnProperty;function Mt(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=Nt(e)&&Nt(t);if(!r&&!(Pt(e)&&Pt(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l<o;l++){let o=r?l:a[l],u=e[o],d=t[o];if(u===d){s[o]=u,(r?l<i:jt.call(e,o))&&c++;continue}if(u===null||d===null||typeof u!=`object`||typeof d!=`object`){s[o]=d;continue}let f=Mt(u,d,n+1);s[o]=f,f===u&&c++}return i===o&&c===i?e:s}function W(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function Nt(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Pt(e){if(!Ft(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!Ft(n)||!n.hasOwnProperty(`isPrototypeOf`)||Object.getPrototypeOf(e)!==Object.prototype)}function Ft(e){return Object.prototype.toString.call(e)===`[object Object]`}function It(e){return new Promise(t=>{R.setTimeout(t,e)})}function Lt(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:Mt(e,t)}function Rt(e){return e}function zt(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function Bt(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var Vt=Symbol();function Ht(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===Vt?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Ut(e,t){return typeof e==`function`?e(...t):!!e}function Wt(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var G=(()=>{let e=()=>wt;return{isServer(){return e()},setIsServer(t){e=t}}})();function Gt(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var Kt=Ct;function qt(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Kt,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var K=qt(),Jt=new class extends L{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Yt(e){return Math.min(1e3*2**e,3e4)}function Xt(e){return(e??`online`)!==`online`||Jt.isOnline()}var Zt=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Qt(e){let t=!1,n=0,r,i=Gt(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Zt(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>xt.isFocused()&&(e.networkMode===`always`||Jt.isOnline())&&e.canRun(),u=()=>Xt(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(G.isServer()?0:3),o=e.retryDelay??Yt,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&n<i||typeof i==`function`&&i(n,r);if(t||!c){f(r);return}n++,e.onFail?.(n,r),It(s).then(()=>l()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var $t=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Et(this.gcTime)&&(this.#e=R.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(G.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(R.clearTimeout(this.#e),this.#e=void 0)}};function en(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{Wt(e,()=>t.signal,()=>n=!0)},u=Ht(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?Bt:zt;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?nn:tn,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:tn(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.fetchFn=t.options.persister?()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function tn(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function nn(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}function rn(e,t){return t?tn(e,t)!=null:!1}function an(e,t){return!t||!e.getPreviousPageParam?!1:nn(e,t)!=null}var on=class extends $t{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=ln(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=ln(this.options);e.data!==void 0&&(this.setState(cn(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=Lt(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(z).catch(z):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>V(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Vt||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>B(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!Dt(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=Ht(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?en(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=Qt({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Zt&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Zt){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...sn(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...cn(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),K.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function sn(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Xt(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function cn(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function ln(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var un=class extends L{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=Gt(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),fn(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return pn(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return pn(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof V(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!W(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&mn(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||V(this.options.enabled,this.#t)!==V(t.enabled,this.#t)||B(this.options.staleTime,this.#t)!==B(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||V(this.options.enabled,this.#t)!==V(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return gn(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(z)),t}#g(){this.#b();let e=B(this.options.staleTime,this.#t);if(G.isServer()||this.#r.isStale||!Et(e))return;let t=Dt(this.#r.dataUpdatedAt,e)+1;this.#d=R.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(G.isServer()||V(this.options.enabled,this.#t)===!1||!Et(this.#p)||this.#p===0)&&(this.#f=R.setInterval(()=>{(this.options.refetchIntervalInBackground||xt.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d!==void 0&&(R.clearTimeout(this.#d),this.#d=void 0)}#x(){this.#f!==void 0&&(R.clearInterval(this.#f),this.#f=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&fn(e,t),o=i&&mn(e,n,t,r);(a||o)&&(l={...l,...sn(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=Lt(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h){if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=Lt(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:hn(e,t),refetch:this.refetch,promise:this.#o,isEnabled:V(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{let e=this.#o=x.promise=Gt();i(e)},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a()}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!W(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){K.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function dn(e,t){return V(t.enabled,e)!==!1&&e.state.data===void 0&&(e.state.status!==`error`||V(t.retryOnMount,e)!==!1)}function fn(e,t){return dn(e,t)||e.state.data!==void 0&&pn(e,t,t.refetchOnMount)}function pn(e,t,n){if(V(t.enabled,e)!==!1&&B(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&hn(e,t)}return!1}function mn(e,t,n,r){return(e!==t||V(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&hn(e,n)}function hn(e,t){return V(t.enabled,e)!==!1&&e.isStaleByTime(B(t.staleTime,e))}function gn(e,t){return!W(e.getCurrentResult(),t)}var _n=class extends un{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){e._type=`infinite`,super.setOptions(e)}getOptimisticResult(e){return e._type=`infinite`,super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:rn(t,n.data),hasPreviousPage:an(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}},vn=class extends $t{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||yn(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Qt({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),K.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function yn(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var bn=class extends L{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new vn({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=xn(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=xn(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=xn(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=xn(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){K.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>kt(t,e))}findAll(e={}){return this.getAll().filter(t=>kt(e,t))}notify(e){K.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return K.batch(()=>Promise.all(e.map(e=>e.continue().catch(z))))}};function xn(e){return e.options.scope?.id}var Sn=class extends L{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),W(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&H(t.mutationKey)!==H(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??yn();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){K.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},Cn=class extends L{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??At(r,t),a=this.get(i);return a||(a=new on({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){K.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>Ot(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>Ot(e,t)):t}notify(e){K.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){K.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){K.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},wn=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Cn,this.#t=e.mutationCache||new bn,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=xt.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Jt.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(B(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=Tt(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return K.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;K.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return K.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=K.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(z).catch(z)}invalidateQueries(e,t={}){return K.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=K.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(z)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(z)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(B(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(z).catch(z)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(z).catch(z)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return Jt.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(H(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{U(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(H(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{U(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=At(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===Vt&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Tn=o.createContext(void 0),q=e=>{let t=o.useContext(Tn);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},En=({client:e,children:t})=>(o.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,m.jsx)(Tn.Provider,{value:e,children:t})),Dn=o.createContext(!1),On=()=>o.useContext(Dn);Dn.Provider;function kn(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var An=o.createContext(kn()),jn=()=>o.useContext(An),Mn=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?Ut(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},Nn=e=>{o.useEffect(()=>{e.clearReset()},[e])},Pn=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||Ut(n,[e.error,r])),Fn=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},In=(e,t)=>e.isLoading&&e.isFetching&&!t,Ln=(e,t)=>e?.suspense&&t.isPending,Rn=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function zn(e,t,n){let r=On(),i=jn(),a=q(n),s=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(s);let c=a.getQueryCache().get(s.queryHash),l=e.subscribed!==!1;s._optimisticResults=r?`isRestoring`:l?`optimistic`:void 0,Fn(s),Mn(s,i,c),Nn(i);let u=!a.getQueryCache().get(s.queryHash),[d]=o.useState(()=>new t(a,s)),f=d.getOptimisticResult(s),p=!r&&l;if(o.useSyncExternalStore(o.useCallback(e=>{let t=p?d.subscribe(K.batchCalls(e)):z;return d.updateResult(),t},[d,p]),()=>d.getCurrentResult(),()=>d.getCurrentResult()),o.useEffect(()=>{d.setOptions(s)},[s,d]),Ln(s,f))throw Rn(s,d,i);if(Pn({result:f,errorResetBoundary:i,throwOnError:s.throwOnError,query:c,suspense:s.suspense}))throw f.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(s,f),s.experimental_prefetchInRender&&!G.isServer()&&In(f,r)&&(u?Rn(s,d,i):c?.promise)?.catch(z).finally(()=>{d.updateResult()}),s.notifyOnChangeProps?f:d.trackResult(f)}function J(e,t){return zn(e,un,t)}function Y(e,t){let n=q(t),[r]=o.useState(()=>new Sn(n,e));o.useEffect(()=>{r.setOptions(e)},[r,e]);let i=o.useSyncExternalStore(o.useCallback(e=>r.subscribe(K.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=o.useCallback((e,t)=>{r.mutate(e,t).catch(z)},[r]);if(i.error&&Ut(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}function Bn(e,t){return zn(e,_n,t)}var Vn=o.createContext(null),Hn=()=>new wn({defaultOptions:{queries:{staleTime:5e3,refetchOnWindowFocus:!1,retry:1}}});function Un({client:e,clientOptions:t,queryClient:n,components:r,children:i}){let a=o.useMemo(()=>e??new vt(t),[e,t]),s=o.useMemo(()=>n??Hn(),[n]),c=o.useMemo(()=>({client:a,components:r??null}),[a,r]);return(0,m.jsx)(En,{client:s,children:(0,m.jsx)(Vn.Provider,{value:c,children:i})})}var Wn=()=>{let e=o.useContext(Vn);if(!e)throw Error(`useAdminContext must be used inside <ModernAdminProvider />`);return e},X=()=>Wn().client,Gn={auditLog:!1,history:!1,webhooks:!1,apiKeys:!1,aiAssistant:!1,realtime:!1,cache:!1},Kn=e=>({...Gn,...e??{}}),qn=(e,t)=>t?e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)}):e,Jn=class{constructor(e){if(this.dicts=new Map,this.names=new Map,e.locales.length===0)throw Error(`I18n requires at least one locale`);for(let t of e.locales)this.dicts.set(t.code,{...t.dict}),this.names.set(t.code,t.name);this.current=e.defaultLocale??e.locales[0].code,this.fallback=e.fallbackLocale??e.locales[0].code,this.dicts.has(this.current)||(this.current=e.locales[0].code)}get locale(){return this.current}setLocale(e){this.dicts.has(e)&&(this.current=e)}availableLocales(){return Array.from(this.names.entries()).map(([e,t])=>({code:e,name:t}))}t(e,t){let n=this.dicts.get(this.current),r=this.dicts.get(this.fallback);return qn(n?.[e]??r?.[e]??e,t)}extend(e,t){let n=this.dicts.get(e)??{};this.dicts.set(e,{...n,...t})}},Yn=[{code:`en`,name:`English`,dict:{"common:appName":`Modern Admin`,"common:home":`Home`,"common:search":`Search`,"common:loading":`Loading…`,"common:save":`Save`,"common:cancel":`Cancel`,"common:delete":`Delete`,"common:create":`Create`,"common:edit":`Edit`,"common:show":`Show`,"common:back":`Back`,"common:noRecords":`No records found.`,"common:noRecordsHint":`Get started by creating a new {resource}.`,"common:noMatchingRecords":`No records match your filters.`,"common:clearFilters":`Clear filters`,"common:confirmDelete":`Delete this record?`,"common:confirmAction":`Confirm action`,"common:confirm":`Confirm`,"common:perPage":`Per page`,"common:page":`Page`,"common:of":`of`,"common:total":`Total`,"auth:login":`Sign in`,"auth:logout":`Sign out`,"auth:email":`Email`,"auth:password":`Password`,"auth:loginFailed":`Invalid credentials.`,"errors:notFound":`Not found.`,"errors:forbidden":`You do not have access to this resource.`,"errors:server":`Something went wrong. Please retry.`,"common:resources":`Resources`,"common:actions":`Actions`,"action:notFound":`Action "{action}" is not available on this resource.`,"action:componentMissing":`No component named "{component}" is registered.`,"action:componentMissingHint":`Register it on the ComponentLoader passed to <ModernAdminProvider components={…}>.`,"action:loadFailed":`Failed to load the action.`,"common:new":`New`,"common:rowsPerPage":`Rows per page`,"common:filter":`Filter {label}…`,"validation:required":`{label} is required`,"validation:invalidNumber":`{label} must be a valid number`,"validation:invalidInteger":`{label} must be an integer`,"validation:invalidEmail":`{label} must be a valid email`,"validation:invalidUrl":`{label} must be a valid URL`,"validation:invalidDate":`{label} must be a valid date`,"validation:invalidUuid":`{label} must be a valid UUID`,"validation:tooShort":`{label} must be at least {min} characters`,"validation:tooLong":`{label} must be at most {max} characters`,"validation:notInList":`{label} has an invalid value`,"validation:emptySelection":`Select at least one {label}`,"toast:created":`Created successfully`,"toast:saved":`Saved successfully`,"toast:deleted":`Deleted successfully`,"toast:createFailed":`Failed to create`,"toast:saveFailed":`Failed to save`,"toast:deleteFailed":`Failed to delete`,"toast:loadFailed":`Failed to load`,"toast:validationFailed":`Please fix the errors and try again`,"common:close":`Close`,"common:export":`Export`,"export:title":`Export records`,"export:description":`Download all matching records of {resource} as a single file.`,"export:csvHint":`Comma-separated values`,"export:jsonHint":`Structured JSON array`,"export:downloading":`Preparing download…`,"export:progress":`Loaded {loaded} of {total}…`,"export:exported":`Exported {count} records`,"export:exportFailed":`Failed to export records`,"common:apply":`Apply`,"common:clear":`Clear`,"common:filters":`Filters`,"common:columns":`Columns`,"common:toggleColumns":`Toggle columns`,"common:openMenu":`Open menu`,"common:refresh":`Refresh`,"common:copy":`Copy`,"common:copied":`Copied!`,"common:applyFilters":`Apply filters`,"common:clearAll":`Clear all`,"common:any":`Any`,"common:yes":`Yes`,"common:no":`No`,"common:filterPlaceholder":`Filter…`,"common:loadFailed":`Failed to load: {error}`,"common:theme":`Theme`,"common:language":`Language`,"common:toggleTheme":`Toggle theme`,"common:clearSelection":`Clear selection`,"common:searchPlaceholder":`Search…`,"home:searchResources":`Search resources…`,"home:noMatchingResources":`No matching resources found.`,"globalSearch:title":`Global search`,"globalSearch:description":`Search across all resources and records.`,"globalSearch:trigger":`Search…`,"globalSearch:placeholder":`Search across all resources…`,"globalSearch:hint":`Start typing to search across all resources.`,"globalSearch:noResults":`No matching records found.`,"globalSearch:error":`Search failed. Please try again.`,"globalSearch:hotkey":`Open global search`,"globalSearch:matchedIn":`in {field}`,"globalSearch:recent":`Recent searches`,"globalSearch:clearRecent":`Clear`,"globalSearch:showAllIn":`Show all in {resource}`,"common:pageOf":`Page {page} of {total}`,"common:firstPage":`First page`,"common:previousPage":`Previous page`,"common:nextPage":`Next page`,"common:lastPage":`Last page`,"common:recordsCount":`{count} records`,"common:selectedCount":`{count} selected`,"common:selectRow":`Select row`,"common:selectAll":`Select all`,"common:deleteSelected":`Delete selected`,"common:bulkDeleteConfirm":`Delete {count} selected records?`,"toast:bulkDeleted":`Deleted {count} records`,"toast:bulkDeleteFailed":`Failed to delete records`,"common:from":`From`,"common:to":`To`,"common:sortBy":`Sort by`,"common:next":`Next`,"common:previous":`Previous`,"common:relatedRecords":`Related records`,"common:viewAll":`View all`,"common:noRelatedRecords":`No related records.`,"common:shortcutsHelp":`Keyboard shortcuts`,"common:shortcutsEmpty":`No shortcuts available on this screen.`,"common:preview":`Preview`,"common:download":`Download`,"common:openInNewTab":`Open in new tab`,"common:format":`Format`,"common:invalidJson":`Invalid JSON`,"common:showPassword":`Show password`,"common:hidePassword":`Hide password`,"auth:title":`Sign in`,"auth:subtitle":`Enter your email and password to sign in`,"auth:tagline":`The modern admin panel for any stack.`,"auth:orContinueWith":`Or continue with`,"auth:continueWith":`Continue with {provider}`,"common:chooseFile":`Choose file`,"common:chooseFiles":`Choose files`,"common:dragAndDrop":`Drag and drop or`,"common:chooseAFile":`choose a file`,"common:addMoreFiles":`add more files`,"common:uploading":`Uploading…`,"common:uploadingFile":`Uploading {name}…`,"common:removeFile":`Remove file`,"common:uploadFailed":`Upload failed`,"common:dismiss":`Dismiss`,"common:openCalendar":`Open calendar`,"common:time":`Time`,"common:downloadFailed":`Download failed`,"richtext:bold":`Bold`,"richtext:italic":`Italic`,"richtext:strikethrough":`Strikethrough`,"richtext:inlineCode":`Inline code`,"richtext:heading":`Heading {level}`,"richtext:bulletList":`Bullet list`,"richtext:numberedList":`Numbered list`,"richtext:blockquote":`Blockquote`,"richtext:horizontalRule":`Horizontal rule`,"richtext:insertLink":`Insert link`,"richtext:undo":`Undo`,"richtext:redo":`Redo`,"richtext:source":`Source ({format})`,"richtext:splitView":`Split view`,"richtext:visualEditor":`Visual editor`,"richtext:fullscreen":`Fullscreen`,"richtext:exitFullscreen":`Exit fullscreen`,"richtext:urlPrompt":`URL`,"common:saving":`Saving…`,"common:done":`Done`,"settings:menuItem":`Settings`,"settings:noSectionsConfigured":`No settings sections are available for this deployment.`,"settings:apiKeys.title":`API keys`,"settings:apiKeys.description":`Programmatic access tokens for the admin API. Each key carries a permission set that limits which resources and actions it can invoke.`,"settings:apiKeys.actions.create":`New API key`,"settings:apiKeys.actions.edit":`Edit`,"settings:apiKeys.actions.revoke":`Revoke`,"settings:apiKeys.empty.title":`No API keys yet`,"settings:apiKeys.empty.description":`Create your first key to grant programmatic access.`,"settings:apiKeys.columns.name":`Name`,"settings:apiKeys.columns.start":`Prefix`,"settings:apiKeys.columns.permissions":`Permissions`,"settings:apiKeys.columns.expiresAt":`Expires`,"settings:apiKeys.columns.enabled":`Enabled`,"settings:apiKeys.columns.actions":`Actions`,"settings:apiKeys.lastUsed":`Last used {date}`,"settings:apiKeys.expiresNever":`Never`,"settings:apiKeys.permissions.resource":`Resource`,"settings:apiKeys.permissions.actions":`Actions`,"settings:apiKeys.permissions.selectAll":`Select all`,"settings:apiKeys.permissions.clearAll":`Clear all`,"settings:apiKeys.permissions.none":`No permissions`,"settings:apiKeys.permissions.summary":`{resources} resources · {actions} actions`,"settings:apiKeys.permissions.noResources":`No resources are registered.`,"settings:apiKeys.permissions.selectAllResources":`Select all resources & actions`,"settings:apiKeys.permissions.clearAllResources":`Clear all resources & actions`,"settings:apiKeys.editor.titleCreate":`New API key`,"settings:apiKeys.editor.titleEdit":`Edit API key`,"settings:apiKeys.editor.description":`Pick a descriptive name and grant only the resources and actions this key needs.`,"settings:apiKeys.editor.name":`Name`,"settings:apiKeys.editor.namePlaceholder":`e.g. CI deploy bot`,"settings:apiKeys.editor.expiresInDays":`Expires in (days)`,"settings:apiKeys.editor.expiresPlaceholder":`never`,"settings:apiKeys.editor.expiresHint":`Leave blank for no expiry. Maximum 3650 days.`,"settings:apiKeys.editor.permissions":`Permissions`,"settings:apiKeys.editor.selectedActions":`{count} selected`,"settings:apiKeys.created.title":`API key created`,"settings:apiKeys.created.description":`Copy the key now — it will not be shown again.`,"settings:apiKeys.created.warning":`This is the only time you will see the full key. Store it somewhere safe.`,"settings:apiKeys.created.reveal":`Reveal key`,"settings:apiKeys.created.hide":`Hide key`,"settings:apiKeys.created.copy":`Copy`,"settings:apiKeys.created.copied":`Copied`,"settings:apiKeys.notice.revoked":`API key revoked`,"settings:apiKeys.notice.updated":`API key updated`,"settings:apiKeys.notice.copied":`Copied to clipboard`,"settings:apiKeys.notice.copyFailed":`Could not copy to clipboard`,"settings:apiKeys.confirmRevoke.title":`Revoke API key`,"settings:apiKeys.confirmRevoke.description":`Revoke "{name}"? Any service using this key will stop working immediately.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
42
+
43
+ Example:
44
+ {
45
+ "Authorization": "Bearer <token>",
46
+ "X-Source": "modern-admin"
47
+ }
48
+
49
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
50
+
51
+ Example:
52
+ {
53
+ "status": "published",
54
+ "role": "admin"
55
+ }
56
+
57
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"chart:dashboard":`Dashboard`,"chart:addChart":`Add chart`,"chart:newChart":`New chart`,"chart:editChart":`Edit chart`,"chart:deleteChart":`Remove chart`,"chart:noCharts":`No charts yet`,"chart:noChartsHint":`Add a chart to start monitoring your data.`,"chart:addGroup":`Add group`,"chart:newGroup":`New group`,"chart:editGroup":`Edit group`,"chart:deleteGroup":`Remove group`,"chart:saveGroup":`Save group`,"chart:groupName":`Group name`,"chart:groupNamePlaceholder":`e.g. Sales metrics`,"chart:groupNameRequired":`Group name is required`,"chart:groupOrder":`Group order`,"chart:order":`Order`,"chart:orderHint":`Lower numbers come first.`,"chart:moveToGroup":`Move to group`,"chart:moveChart":`Move chart`,"chart:moveGroup":`Group`,"chart:moveNoGroups":`No groups yet.`,"chart:moveNoGroupsHint":`Create a group first to organize your charts.`,"chart:deleteChartConfirm":`Remove this chart?`,"chart:deleteChartConfirmHint":`This action cannot be undone.`,"chart:deleteGroupConfirm":`Remove this group?`,"chart:deleteGroupConfirmHint":`This will permanently delete the group and {count} chart(s) inside it.`,"chart:title":`Title`,"chart:titlePlaceholder":`e.g. New users per day`,"chart:untitled":`Untitled chart`,"chart:chartType":`Chart type`,"chart:resource":`Resource`,"chart:groupBy":`Group by`,"chart:step":`Step`,"chart:metric":`Metric`,"chart:aggregateField":`Aggregate field`,"chart:selectField":`Select field…`,"chart:saveChart":`Save chart`,"chart:typeLine":`Line`,"chart:typeArea":`Area`,"chart:typeBar":`Bar`,"chart:typePie":`Pie`,"chart:stepDay":`Day`,"chart:stepWeek":`Week`,"chart:stepMonth":`Month`,"chart:stepYear":`Year`,"chart:metricCount":`Count`,"chart:metricSum":`Sum`,"chart:metricAvg":`Average`,"chart:noData":`No data for selected period`,"chart:loadError":`Failed to load chart data`,"chart:value":`Value`,"dashboard:vis":`Visualisation`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Line`,"dashboard:visArea":`Area`,"dashboard:visBar":`Bar`,"dashboard:visPie":`Pie`,"dashboard:metricCount":`Count`,"dashboard:metricSum":`Sum`,"dashboard:metricAvg":`Average`,"dashboard:metricMin":`Min`,"dashboard:metricMax":`Max`,"dashboard:builder.range":`Time range`,"dashboard:builder.filters":`Filters`,"dashboard:builder.filtersHint":`Narrow the dataset before aggregating. Tick a filter to expose it as a quick toggle above the chart.`,"dashboard:builder.quickFilterHint":`Expose this filter above the chart on the dashboard.`,"dashboard:builder.quickFilterToggle":`Expose {field} as a quick filter`,"dashboard:range.7d":`7d`,"dashboard:range.30d":`30d`,"dashboard:range.90d":`90d`,"dashboard:range.1y":`1y`,"dashboard:range.all":`All`,"dashboard:range.custom":`Custom`,"dashboard:widget.previousPeriod":`vs. previous period`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Shrink to half width`,"dashboard:widget.expand":`Expand to full row`,"dashboard:widget.toggleSql":`Toggle SQL`,"dashboard:widget.unsupported":`Charts are not supported for your database yet.`,"dashboard:widget.truncatedWarning":`Showing partial data — too many rows to aggregate the full range.`,"dashboard:widget.showAll":`Show all`,"dashboard:widget.hideAll":`Hide all`,"dashboard:seriesTotal":`Total`,"dashboard:seriesOther":`Other`,"dashboard:seriesNull":`Empty`,"dashboard:builder.dateField":`Date field`,"dashboard:builder.dateFieldHint":`X-axis bucketing uses this date column.`,"dashboard:builder.secondaryGroupBy":`Breakdown`,"dashboard:builder.noBreakdown":`Single series`,"dashboard:builder.topN":`Max series`,"dashboard:builder.width":`Width`,"dashboard:width.half":`Half`,"dashboard:width.full":`Full row`,"dashboard:builder.comparePrevious":`Compare to previous period`,"dashboard:builder.comparePreviousHint":`Overlay the equal-length preceding period as a dashed line and show the change next to the title.`,"dashboard:builder.comparePreviousDisabled":`Not available with a breakdown.`,"dashboard:builder.transform":`Value transform`,"dashboard:builder.transformHint":`Applied to values before display — e.g. divide by 100 to show cents as dollars.`,"dashboard:builder.transformAdd":`Add step`,"dashboard:builder.transformRemove":`Remove step`,"dashboard:builder.opDivide":`Divide by`,"dashboard:builder.opMultiply":`Multiply by`,"dashboard:builder.opAdd":`Add`,"dashboard:builder.opSubtract":`Subtract`,"dashboard:builder.format":`Value format`,"dashboard:builder.formatStyle":`Style`,"dashboard:builder.formatNumber":`Number`,"dashboard:builder.formatCurrency":`Currency`,"dashboard:builder.formatPercent":`Percent`,"dashboard:builder.formatCurrencyCode":`Currency code`,"dashboard:builder.formatDecimals":`Decimals`,"dashboard:builder.formatCompact":`Compact numbers (12.5k)`,"dashboard:builder.formatPrefix":`Prefix`,"dashboard:builder.formatSuffix":`Suffix`,"dashboard:builder.color":`Series color`,"dashboard:widget.previousSeries":`{label} (previous)`,"dashboard:widget.editColors":`Edit colors`,"dashboard:widget.colorsTitle":`Series colors`,"dashboard:widget.colorCustom":`Custom`,"dashboard:widget.colorAuto":`Auto`,"dashboard:widget.colorPick":`Pick a color`,"dashboard:builder.tabData":`Data`,"dashboard:builder.tabDisplay":`Display`,"dashboard:builder.tabFilters":`Filters`,"dashboard:builder.filtersEmpty":`This resource has no filterable fields.`,"history:revisions":`Revisions`,"history:noRevisions":`No revisions yet`,"history:loadError":`Failed to load revision history`,"history:revert":`Revert`,"history:confirmRevert":`Revert to this revision?`,"history:revertSuccess":`Revision restored`,"history:revertFailed":`Failed to restore revision`,"history:unknownUser":`Unknown user`,"history:changes":`changes`,"history:compareTo":`Compare to`,"history:storedDiff":`Change diff`,"history:op.create":`Created`,"history:op.update":`Updated`,"history:op.delete":`Deleted`,"diff:added":`Added`,"diff:changed":`Changed`,"diff:removed":`Removed`,"diff:before":`Before`,"diff:after":`After`,"diff:noChanges":`No field changes recorded`,"audit:title":`Activity`,"audit:resource":`Resource`,"audit:action":`Action`,"audit:recordId":`Record ID`,"audit:userId":`User ID`,"audit:allResources":`All resources`,"audit:allActions":`All actions`,"audit:noEvents":`No activity yet`,"audit:records":`records`,"audit:loadError":`Failed to load activity`,"audit:by":`by {user}`,"audit:viewRecord":`View record`,"audit:viewChanges":`View changes`,"audit:hideChanges":`Hide changes`,"audit:noDiff":`Change details unavailable`,"audit:loadDiffError":`Failed to load changes`,"audit:action.new":`Record created`,"audit:action.edit":`Record updated`,"audit:action.delete":`Record deleted`,"audit:action.bulkDelete":`Records deleted`,"audit:action.login":`Signed in`,"audit:action.apiKeyCreate":`API key created`,"audit:action.apiKeyUpdate":`API key updated`,"audit:action.apiKeyDelete":`API key deleted`,"audit:virtualResource.auth":`Authentication`,"audit:virtualResource.apiKeys":`API Keys`,"audit:prevPage":`Previous`,"audit:nextPage":`Next`,"audit:dateRangePlaceholder":`Select date range`,"keyValue:noMatches":`No matches — press Enter to keep "{value}".`,"aiAssistant:queue.cancel":`Remove from queue`,"aiAssistant:title":`AI Assistant`,"aiAssistant:fab.label":`Open AI assistant`,"aiAssistant:fab.short":`AI`,"aiAssistant:description":`Ask questions about records, relationships, reports, and data trends.`,"aiAssistant:notConfigured.title":`Assistant is not configured`,"aiAssistant:notConfigured.description":`Add the OpenRouter API key in settings to enable the read-only AI assistant.`,"aiAssistant:notConfigured.openSettings":`Open settings`,"aiAssistant:tryAsking":`Try asking:`,"aiAssistant:tryAsking.example1":`Which customers have the most posts?`,"aiAssistant:tryAsking.example2":`Show recently created records for a resource.`,"aiAssistant:tryAsking.example3":`Explain relationships between specific records.`,"aiAssistant:thinking":`Thinking`,"aiAssistant:thinkingProgress":`Thinking ({progress}%)`,"aiAssistant:input.placeholder":`Ask about your data…`,"aiAssistant:input.hint":`Enter to send · Shift+Enter for a new line`,"aiAssistant:send":`Send message`,"aiAssistant:newChat":`New chat`,"aiAssistant:history":`Chat history`,"aiAssistant:history.empty":`No previous chats`,"aiAssistant:noText":`Here are the related records I found:`,"aiAssistant:fallback.noToolResult":`I ran the request, but the model did not return a text answer. Try refining the question or enable debug logs to inspect the tool result.`,"aiAssistant:fallback.noRows":`No records were found for this request.`,"aiAssistant:fallback.rowsFound":`Rows found: {count}.`,"aiAssistant:taskFailed":`AI assistant task failed`,"aiAssistant:settings.title":`AI Assistant`,"aiAssistant:settings.description":`Configure the floating AI chat widget, model, and server-side assistant behavior.`,"aiAssistant:settings.enabled":`Enabled`,"aiAssistant:settings.disabled":`Disabled`,"aiAssistant:settings.configured":`Configured`,"aiAssistant:settings.apiKeyRequired":`API key required`,"aiAssistant:settings.readOnly":`Read only`,"aiAssistant:settings.provider":`Provider: {provider}`,"aiAssistant:settings.enableLabel":`Enable assistant`,"aiAssistant:settings.enableHint":`Controls the visibility of the floating widget and chat endpoint.`,"aiAssistant:settings.modelLabel":`OpenRouter model`,"aiAssistant:settings.apiKeyLabel":`OpenRouter API key`,"aiAssistant:settings.apiKeyHint":`Leave empty to keep the existing saved key on the server.`,"aiAssistant:settings.systemPromptLabel":`System prompt override`,"aiAssistant:settings.systemPromptPlaceholder":`Optional project-specific instructions for the assistant`,"aiAssistant:settings.accessTitle":`Access model`,"aiAssistant:settings.accessDescription":`The current assistant is limited to read-only record inspection through admin resource actions.`,"aiAssistant:settings.futureToolsReady":`Future tools ready`,"aiAssistant:settings.save":`Save settings`,"aiAssistant:settings.saving":`Saving…`,"aiAssistant:settings.saved":`AI assistant settings saved`,"aiAssistant:settings.empty":`No settings available.`,"filter:op.co":`Contains`,"filter:op.nco":`Does not contain`,"filter:op.sw":`Starts with`,"filter:op.ew":`Ends with`,"filter:op.eq":`Equals`,"filter:op.neq":`Does not equal`,"filter:op.empty":`Is empty`,"filter:op.nempty":`Is not empty`,"filter:op.in":`Is one of`,"filter:op.gt":`Greater than`,"filter:op.lt":`Less than`,"filter:op.between":`Between`,"filter:searchValues":`Search in list…`,"filter:selectAll":`Select all`,"filter:noValues":`No values found`,"common:newRecord":`New {name}`,"common:editRecord":`Edit {name} #{id}`,"common:themeLight":`Light`,"common:themeDark":`Dark`,"common:themeSystem":`System`,"common:ok":`OK`,"common:select":`Select…`,"common:removeItem":`Remove {title}`,"common:nSelectedAddMore":`{count} selected — add more`,"common:pickRecords":`Pick records`,"common:managePickRecords":`Manage selection ({count})`,"common:pickRecordsFrom":`Pick from {name}`,"common:draftRestored":`Restored unsaved draft`,"common:undoDraftRestore":`Undo`,"aiFill:button":`AI Fill`,"aiFill:dialogTitle":`Fill form from photo`,"aiFill:dialogDescription":`Upload an image — AI will extract values and fill the form.`,"aiFill:fillButton":`Recognize`,"aiFill:processing":`Recognizing image…`,"aiFill:success":`Filled {count} field(s)`,"aiFill:errorNoFields":`This resource has no AI-fillable fields.`,"aiFill:errorGeneric":`AI fill failed: {message}`,"aiFill:noValues":`AI could not extract any values from this image.`,"aiFill:applied":`AI filled {count} field(s). You can undo below.`,"wizard:stepOf":`Step {current} of {total}`,"wizard:products.step1":`Basic info`,"wizard:products.step2":`Pricing`,"wizard:products.step3":`Media & tags`,"common:invalidValue":`Invalid value`,"common:collapseSidebar":`Collapse sidebar`,"common:expandSidebar":`Expand sidebar`,"common:toggleSidebar":`Toggle sidebar`,"common:sidebarTitle":`Sidebar`,"common:sidebarNavigation":`Navigation menu`,"cache:title":`Cache`,"cache:description":`Runtime cache health and per-resource performance for this replica.`,"cache:load.error":`Failed to load cache metrics`,"cache:load.retry":`Try again`,"cache:reset.action":`Reset metrics`,"cache:reset.loading":`Resetting cache metrics…`,"cache:reset.success":`Cache metrics reset`,"cache:reset.error":`Failed to reset cache metrics`,"cache:metric.hitRate":`Hit rate`,"cache:metric.requests":`Cache reads`,"cache:metric.avgCompute":`Average compute`,"cache:metric.errors":`Errors`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Quarantined tags`,"cache:quarantine.description":`These tags bypass cache reads until invalidation succeeds.`,"cache:invalidate.title":`Invalidate resource cache`,"cache:invalidate.description":`Drop list and record entries for a resource across configured replicas.`,"cache:invalidate.resource":`Resource`,"cache:invalidate.action":`Invalidate cache`,"cache:invalidate.loading":`Invalidating cache…`,"cache:invalidate.success":`Resource cache invalidated`,"cache:invalidate.error":`Failed to invalidate resource cache`,"cache:table.title":`Metrics by namespace`,"cache:table.empty":`No cache activity recorded yet.`,"cache:instance":`Replica {id}`,"cache:table.namespace":`Namespace`,"cache:table.resource":`Resource`,"cache:table.hits":`Hits`,"cache:table.misses":`Misses`,"cache:table.computes":`Computes`,"cache:table.coalesced":`Coalesced`,"cache:table.errors":`Errors`}},{code:`ru`,name:`Русский`,dict:{"common:appName":`Modern Admin`,"common:home":`Главная`,"common:search":`Поиск`,"common:loading":`Загрузка…`,"common:save":`Сохранить`,"common:cancel":`Отмена`,"common:delete":`Удалить`,"common:create":`Создать`,"common:edit":`Редактировать`,"common:show":`Просмотр`,"common:back":`Назад`,"common:noRecords":`Записей не найдено.`,"common:noRecordsHint":`Создайте новую запись «{resource}», чтобы начать.`,"common:noMatchingRecords":`Нет записей, соответствующих фильтрам.`,"common:clearFilters":`Сбросить фильтры`,"common:confirmDelete":`Удалить запись?`,"common:confirmAction":`Подтвердите действие`,"common:confirm":`Подтвердить`,"common:perPage":`На странице`,"common:page":`Страница`,"common:of":`из`,"common:total":`Всего`,"auth:login":`Войти`,"auth:logout":`Выйти`,"auth:email":`Email`,"auth:password":`Пароль`,"auth:loginFailed":`Неверные данные.`,"errors:notFound":`Не найдено.`,"errors:forbidden":`Нет доступа к этому ресурсу.`,"errors:server":`Что-то пошло не так. Повторите попытку.`,"common:resources":`Ресурсы`,"common:actions":`Действия`,"action:notFound":`Действие «{action}» недоступно для этого ресурса.`,"action:componentMissing":`Компонент «{component}» не зарегистрирован.`,"action:componentMissingHint":`Зарегистрируйте его в ComponentLoader, передаваемом в <ModernAdminProvider components={…}>.`,"action:loadFailed":`Не удалось загрузить действие.`,"common:new":`Создать`,"common:rowsPerPage":`Строк на странице`,"common:filter":`Фильтр {label}…`,"validation:required":`Поле «{label}» обязательно`,"validation:invalidNumber":`Поле «{label}» должно быть числом`,"validation:invalidInteger":`Поле «{label}» должно быть целым числом`,"validation:invalidEmail":`Поле «{label}» должно быть корректным email`,"validation:invalidUrl":`Поле «{label}» должно быть корректной ссылкой`,"validation:invalidDate":`Поле «{label}» должно быть корректной датой`,"validation:invalidUuid":`Поле «{label}» должно быть корректным UUID`,"validation:tooShort":`Поле «{label}» должно содержать не менее {min} символов`,"validation:tooLong":`Поле «{label}» должно содержать не более {max} символов`,"validation:notInList":`Поле «{label}» содержит недопустимое значение`,"validation:emptySelection":`Выберите хотя бы одно значение для «{label}»`,"toast:created":`Запись успешно создана`,"toast:saved":`Изменения сохранены`,"toast:deleted":`Запись удалена`,"toast:createFailed":`Не удалось создать запись`,"toast:saveFailed":`Не удалось сохранить изменения`,"toast:deleteFailed":`Не удалось удалить запись`,"toast:loadFailed":`Не удалось загрузить данные`,"toast:validationFailed":`Исправьте ошибки и попробуйте снова`,"common:close":`Закрыть`,"common:export":`Экспорт`,"export:title":`Экспорт записей`,"export:description":`Скачать все подходящие записи ресурса «{resource}» одним файлом.`,"export:csvHint":`Значения через запятую`,"export:jsonHint":`Структурированный JSON-массив`,"export:downloading":`Готовим файл…`,"export:progress":`Загружено {loaded} из {total}…`,"export:exported":`Экспортировано записей: {count}`,"export:exportFailed":`Не удалось экспортировать записи`,"common:apply":`Применить`,"common:clear":`Очистить`,"common:filters":`Фильтры`,"common:columns":`Колонки`,"common:toggleColumns":`Видимые колонки`,"common:openMenu":`Открыть меню`,"common:refresh":`Обновить`,"common:copy":`Копировать`,"common:copied":`Скопировано!`,"common:applyFilters":`Применить фильтры`,"common:clearAll":`Сбросить все`,"common:any":`Любое`,"common:yes":`Да`,"common:no":`Нет`,"common:filterPlaceholder":`Фильтр…`,"common:loadFailed":`Не удалось загрузить: {error}`,"common:theme":`Тема`,"common:language":`Язык`,"common:toggleTheme":`Переключить тему`,"common:clearSelection":`Очистить выбор`,"common:searchPlaceholder":`Поиск…`,"home:searchResources":`Поиск ресурсов…`,"home:noMatchingResources":`Подходящие ресурсы не найдены.`,"globalSearch:title":`Глобальный поиск`,"globalSearch:description":`Поиск по всем ресурсам и записям.`,"globalSearch:trigger":`Поиск…`,"globalSearch:placeholder":`Поиск по всем ресурсам…`,"globalSearch:hint":`Начните вводить, чтобы искать по всем ресурсам.`,"globalSearch:noResults":`Ничего не найдено.`,"globalSearch:error":`Не удалось выполнить поиск. Попробуйте ещё раз.`,"globalSearch:hotkey":`Открыть глобальный поиск`,"globalSearch:matchedIn":`в {field}`,"globalSearch:recent":`Недавние запросы`,"globalSearch:clearRecent":`Очистить`,"globalSearch:showAllIn":`Показать все в {resource}`,"common:pageOf":`Страница {page} из {total}`,"common:firstPage":`Первая страница`,"common:previousPage":`Предыдущая страница`,"common:nextPage":`Следующая страница`,"common:lastPage":`Последняя страница`,"common:recordsCount":`Всего записей: {count}`,"common:selectedCount":`Выбрано: {count}`,"common:selectRow":`Выбрать строку`,"common:selectAll":`Выбрать все`,"common:deleteSelected":`Удалить выбранные`,"common:bulkDeleteConfirm":`Удалить выбранные записи ({count})?`,"toast:bulkDeleted":`Удалено записей: {count}`,"toast:bulkDeleteFailed":`Не удалось удалить записи`,"common:from":`От`,"common:to":`До`,"common:sortBy":`Сортировка`,"common:next":`Вперёд`,"common:previous":`Назад`,"common:relatedRecords":`Связанные записи`,"common:viewAll":`Все записи`,"common:noRelatedRecords":`Связанных записей нет.`,"common:shortcutsHelp":`Сочетания клавиш`,"common:shortcutsEmpty":`На этом экране нет доступных сочетаний.`,"common:preview":`Просмотр`,"common:download":`Скачать`,"common:openInNewTab":`Открыть в новой вкладке`,"common:format":`Форматировать`,"common:invalidJson":`Некорректный JSON`,"common:showPassword":`Показать пароль`,"common:hidePassword":`Скрыть пароль`,"auth:title":`Вход`,"auth:subtitle":`Введите email и пароль для входа`,"auth:tagline":`Современная админ-панель для любого стека.`,"auth:orContinueWith":`Или войти через`,"auth:continueWith":`Войти через {provider}`,"common:chooseFile":`Выбрать файл`,"common:chooseFiles":`Выбрать файлы`,"common:dragAndDrop":`Перетащите или`,"common:chooseAFile":`выберите файл`,"common:addMoreFiles":`добавить файлы`,"common:uploading":`Загрузка…`,"common:uploadingFile":`Загрузка {name}…`,"common:removeFile":`Удалить файл`,"common:uploadFailed":`Ошибка загрузки`,"common:dismiss":`Закрыть`,"common:openCalendar":`Открыть календарь`,"common:time":`Время`,"common:downloadFailed":`Ошибка скачивания`,"richtext:bold":`Жирный`,"richtext:italic":`Курсив`,"richtext:strikethrough":`Зачёркнутый`,"richtext:inlineCode":`Код`,"richtext:heading":`Заголовок {level}`,"richtext:bulletList":`Маркированный список`,"richtext:numberedList":`Нумерованный список`,"richtext:blockquote":`Цитата`,"richtext:horizontalRule":`Горизонтальная линия`,"richtext:insertLink":`Вставить ссылку`,"richtext:undo":`Отменить`,"richtext:redo":`Повторить`,"richtext:source":`Исходник ({format})`,"richtext:splitView":`Разделённый вид`,"richtext:visualEditor":`Визуальный редактор`,"richtext:fullscreen":`Полный экран`,"richtext:exitFullscreen":`Выйти из полного экрана`,"richtext:urlPrompt":`URL`,"common:saving":`Сохранение…`,"common:done":`Готово`,"settings:menuItem":`Настройки`,"settings:noSectionsConfigured":`В этом развёртывании нет доступных разделов настроек.`,"settings:apiKeys.title":`API-ключи`,"settings:apiKeys.description":`Программные токены доступа к API админ-панели. Каждый ключ имеет набор прав, ограничивающий доступные ресурсы и действия.`,"settings:apiKeys.actions.create":`Создать ключ`,"settings:apiKeys.actions.edit":`Редактировать`,"settings:apiKeys.actions.revoke":`Отозвать`,"settings:apiKeys.empty.title":`Ключей ещё нет`,"settings:apiKeys.empty.description":`Создайте первый ключ, чтобы предоставить программный доступ.`,"settings:apiKeys.columns.name":`Название`,"settings:apiKeys.columns.start":`Префикс`,"settings:apiKeys.columns.permissions":`Права`,"settings:apiKeys.columns.expiresAt":`Истекает`,"settings:apiKeys.columns.enabled":`Активен`,"settings:apiKeys.columns.actions":`Действия`,"settings:apiKeys.lastUsed":`Использован {date}`,"settings:apiKeys.expiresNever":`Никогда`,"settings:apiKeys.permissions.resource":`Ресурс`,"settings:apiKeys.permissions.actions":`Действия`,"settings:apiKeys.permissions.selectAll":`Выбрать все`,"settings:apiKeys.permissions.clearAll":`Снять все`,"settings:apiKeys.permissions.none":`Нет прав`,"settings:apiKeys.permissions.summary":`Ресурсов: {resources} · действий: {actions}`,"settings:apiKeys.permissions.noResources":`Нет зарегистрированных ресурсов.`,"settings:apiKeys.permissions.selectAllResources":`Выбрать все ресурсы и действия`,"settings:apiKeys.permissions.clearAllResources":`Снять все ресурсы и действия`,"settings:apiKeys.editor.titleCreate":`Новый API-ключ`,"settings:apiKeys.editor.titleEdit":`Изменить API-ключ`,"settings:apiKeys.editor.description":`Дайте ключу понятное название и выдайте только те ресурсы и действия, которые ему действительно нужны.`,"settings:apiKeys.editor.name":`Название`,"settings:apiKeys.editor.namePlaceholder":`напр. CI-бот деплоя`,"settings:apiKeys.editor.expiresInDays":`Срок действия (дней)`,"settings:apiKeys.editor.expiresPlaceholder":`без срока`,"settings:apiKeys.editor.expiresHint":`Оставьте пустым, чтобы ключ не истекал. Максимум 3650 дней.`,"settings:apiKeys.editor.permissions":`Права`,"settings:apiKeys.editor.selectedActions":`Выбрано: {count}`,"settings:apiKeys.created.title":`API-ключ создан`,"settings:apiKeys.created.description":`Скопируйте ключ сейчас — он больше не будет показан.`,"settings:apiKeys.created.warning":`Это единственный раз, когда виден полный ключ. Сохраните его в надёжном месте.`,"settings:apiKeys.created.reveal":`Показать ключ`,"settings:apiKeys.created.hide":`Скрыть ключ`,"settings:apiKeys.created.copy":`Копировать`,"settings:apiKeys.created.copied":`Скопировано`,"settings:apiKeys.notice.revoked":`API-ключ отозван`,"settings:apiKeys.notice.updated":`API-ключ обновлён`,"settings:apiKeys.notice.copied":`Скопировано в буфер обмена`,"settings:apiKeys.notice.copyFailed":`Не удалось скопировать в буфер обмена`,"settings:apiKeys.confirmRevoke.title":`Отозвать API-ключ`,"settings:apiKeys.confirmRevoke.description":`Отозвать «{name}»? Все сервисы, использующие этот ключ, сразу перестанут работать.`,"settings:webhooks.title":`Вебхуки`,"settings:webhooks.description":`Отправляйте подписанные HTTP-уведомления при создании, изменении или удалении записей.`,"settings:webhooks.actions.create":`Новый вебхук`,"settings:webhooks.actions.test":`Тест`,"settings:webhooks.notice.saved":`Вебхук сохранён`,"settings:webhooks.notice.deleted":`Вебхук удалён`,"settings:webhooks.notice.testQueued":`Тестовое уведомление поставлено в очередь`,"settings:webhooks.confirmDelete.title":`Удалить вебхук`,"settings:webhooks.confirmDelete.description":`Удалить «{name}»? История доставок этого вебхука тоже будет удалена.`,"settings:webhooks.empty.title":`Вебхуков пока нет`,"settings:webhooks.empty.description":`Создайте вебхук, чтобы уведомлять внешние системы об изменениях в админке.`,"settings:webhooks.columns.name":`Название`,"settings:webhooks.columns.resource":`Ресурс`,"settings:webhooks.columns.events":`События`,"settings:webhooks.columns.enabled":`Включён`,"settings:webhooks.columns.actions":`Действия`,"settings:webhooks.deliveries.title":`Последние доставки`,"settings:webhooks.deliveries.status":`Статус`,"settings:webhooks.deliveries.event":`Событие`,"settings:webhooks.deliveries.attempt":`Попытка`,"settings:webhooks.deliveries.response":`Ответ`,"settings:webhooks.deliveries.createdAt":`Создано`,"settings:webhooks.editor.titleCreate":`Новый вебхук`,"settings:webhooks.editor.titleEdit":`Редактировать вебхук`,"settings:webhooks.editor.description":`Выберите URL, события, фильтры и поля payload.`,"settings:webhooks.editor.name":`Название`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Ресурс`,"settings:webhooks.editor.allResources":`Все ресурсы`,"settings:webhooks.editor.secret":`Секрет подписи`,"settings:webhooks.editor.enabled":`Включён`,"settings:webhooks.editor.events":`События`,"settings:webhooks.editor.payloadFields":`Поля payload`,"settings:webhooks.editor.payloadFieldsHint":`Ограничьте payload конкретными полями. Оставьте все не выбранными, чтобы включить полную запись. Удобно для скрытия чувствительных данных.`,"settings:webhooks.editor.headers":`Заголовки`,"settings:webhooks.editor.headersHint":`HTTP-заголовки, отправляемые с каждым запросом.
58
+
59
+ Пример:
60
+ {
61
+ "Authorization": "Bearer <token>",
62
+ "X-Source": "modern-admin"
63
+ }
64
+
65
+ Подходит для токенов авторизации и подписей.`,"settings:webhooks.editor.filters":`Фильтры`,"settings:webhooks.editor.filtersHint":`Доставлять только когда запись соответствует всем условиям (AND). Оставьте пустым для доставки по всем событиям.
66
+
67
+ Пример:
68
+ {
69
+ "status": "published",
70
+ "role": "admin"
71
+ }
72
+
73
+ Примечание: события удаления игнорируют фильтры, т.к. записи уже нет.`,"settings:webhooks.editor.secretHint":`Случайная строка для подписи доставок через HMAC-SHA256. Проверяйте заголовок X-Webhook-Signature на сервере.`,"chart:dashboard":`Дашборд`,"chart:addChart":`Добавить график`,"chart:newChart":`Новый график`,"chart:editChart":`Редактировать график`,"chart:deleteChart":`Удалить график`,"chart:noCharts":`Нет графиков`,"chart:noChartsHint":`Добавьте график для мониторинга данных.`,"chart:addGroup":`Добавить группу`,"chart:newGroup":`Новая группа`,"chart:editGroup":`Редактировать группу`,"chart:deleteGroup":`Удалить группу`,"chart:saveGroup":`Сохранить группу`,"chart:groupName":`Название группы`,"chart:groupNamePlaceholder":`напр. Метрики продаж`,"chart:groupNameRequired":`Укажите название группы`,"chart:groupOrder":`Порядок группы`,"chart:order":`Порядок`,"chart:orderHint":`Меньшие значения отображаются первыми.`,"chart:moveToGroup":`Переместить в группу`,"chart:moveChart":`Переместить график`,"chart:moveGroup":`Группа`,"chart:moveNoGroups":`Групп ещё нет.`,"chart:moveNoGroupsHint":`Сначала создайте группу для организации графиков.`,"chart:deleteChartConfirm":`Удалить этот график?`,"chart:deleteChartConfirmHint":`Это действие нельзя отменить.`,"chart:deleteGroupConfirm":`Удалить эту группу?`,"chart:deleteGroupConfirmHint":`Группа и все графики в ней ({count}) будут удалены безвозвратно.`,"chart:title":`Название`,"chart:titlePlaceholder":`напр. Новые пользователи в день`,"chart:untitled":`Без названия`,"chart:chartType":`Тип графика`,"chart:resource":`Ресурс`,"chart:groupBy":`Группировать по`,"chart:step":`Шаг`,"chart:metric":`Метрика`,"chart:aggregateField":`Поле для агрегации`,"chart:selectField":`Выберите поле…`,"chart:saveChart":`Сохранить график`,"chart:typeLine":`Линейный`,"chart:typeArea":`Площадной`,"chart:typeBar":`Столбчатый`,"chart:typePie":`Круговой`,"chart:stepDay":`День`,"chart:stepWeek":`Неделя`,"chart:stepMonth":`Месяц`,"chart:stepYear":`Год`,"chart:metricCount":`Количество`,"chart:metricSum":`Сумма`,"chart:metricAvg":`Среднее`,"chart:noData":`Нет данных за выбранный период`,"chart:loadError":`Не удалось загрузить данные графика`,"chart:value":`Значение`,"dashboard:vis":`Визуализация`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Линейный`,"dashboard:visArea":`Площадной`,"dashboard:visBar":`Столбчатый`,"dashboard:visPie":`Круговой`,"dashboard:metricCount":`Количество`,"dashboard:metricSum":`Сумма`,"dashboard:metricAvg":`Среднее`,"dashboard:metricMin":`Минимум`,"dashboard:metricMax":`Максимум`,"dashboard:builder.range":`Период`,"dashboard:builder.filters":`Фильтры`,"dashboard:builder.filtersHint":`Сузить выборку перед агрегацией. Отметьте фильтр, чтобы вывести его над графиком как быстрый фильтр.`,"dashboard:builder.quickFilterHint":`Показывать этот фильтр над графиком на дашборде.`,"dashboard:builder.quickFilterToggle":`Вывести {field} как быстрый фильтр`,"dashboard:range.7d":`7 дн.`,"dashboard:range.30d":`30 дн.`,"dashboard:range.90d":`90 дн.`,"dashboard:range.1y":`1 год`,"dashboard:range.all":`Всё время`,"dashboard:range.custom":`Свой`,"dashboard:widget.previousPeriod":`к предыдущему периоду`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Уменьшить до половины`,"dashboard:widget.expand":`Растянуть на всю ширину`,"dashboard:widget.toggleSql":`Показать SQL`,"dashboard:widget.unsupported":`Графики для вашей базы данных пока не поддерживаются.`,"dashboard:widget.truncatedWarning":`Показаны неполные данные — слишком много строк для агрегации всего диапазона.`,"dashboard:widget.showAll":`Показать все`,"dashboard:widget.hideAll":`Скрыть все`,"dashboard:seriesTotal":`Всего`,"dashboard:seriesOther":`Прочее`,"dashboard:seriesNull":`Пусто`,"dashboard:builder.dateField":`Поле даты`,"dashboard:builder.dateFieldHint":`Бакетирование по оси X использует это поле даты.`,"dashboard:builder.secondaryGroupBy":`Разбивка`,"dashboard:builder.noBreakdown":`Один ряд`,"dashboard:builder.topN":`Макс. рядов`,"dashboard:builder.width":`Ширина`,"dashboard:width.half":`Половина`,"dashboard:width.full":`Полная`,"dashboard:builder.comparePrevious":`Сравнить с предыдущим периодом`,"dashboard:builder.comparePreviousHint":`Накладывает предыдущий период той же длины пунктирной линией и показывает изменение рядом с заголовком.`,"dashboard:builder.comparePreviousDisabled":`Недоступно при разбивке.`,"dashboard:builder.transform":`Преобразование значений`,"dashboard:builder.transformHint":`Применяется к значениям перед отображением — например, разделить на 100, чтобы показать центы как доллары.`,"dashboard:builder.transformAdd":`Добавить шаг`,"dashboard:builder.transformRemove":`Удалить шаг`,"dashboard:builder.opDivide":`Разделить на`,"dashboard:builder.opMultiply":`Умножить на`,"dashboard:builder.opAdd":`Прибавить`,"dashboard:builder.opSubtract":`Вычесть`,"dashboard:builder.format":`Формат значений`,"dashboard:builder.formatStyle":`Стиль`,"dashboard:builder.formatNumber":`Число`,"dashboard:builder.formatCurrency":`Валюта`,"dashboard:builder.formatPercent":`Проценты`,"dashboard:builder.formatCurrencyCode":`Код валюты`,"dashboard:builder.formatDecimals":`Знаков после запятой`,"dashboard:builder.formatCompact":`Компактные числа (12,5 тыс.)`,"dashboard:builder.formatPrefix":`Префикс`,"dashboard:builder.formatSuffix":`Суффикс`,"dashboard:builder.color":`Цвет серии`,"dashboard:widget.previousSeries":`{label} (пред. период)`,"dashboard:widget.editColors":`Изменить цвета`,"dashboard:widget.colorsTitle":`Цвета серий`,"dashboard:widget.colorCustom":`Свой`,"dashboard:widget.colorAuto":`Авто`,"dashboard:widget.colorPick":`Выбрать цвет`,"dashboard:builder.tabData":`Данные`,"dashboard:builder.tabDisplay":`Отображение`,"dashboard:builder.tabFilters":`Фильтры`,"dashboard:builder.filtersEmpty":`У этого ресурса нет полей для фильтрации.`,"history:revisions":`Версии`,"history:noRevisions":`Версий пока нет`,"history:loadError":`Не удалось загрузить историю изменений`,"history:revert":`Откатить`,"history:confirmRevert":`Откатить запись к этой версии?`,"history:revertSuccess":`Версия восстановлена`,"history:revertFailed":`Не удалось восстановить версию`,"history:unknownUser":`Неизвестный пользователь`,"history:changes":`изменений`,"history:compareTo":`Сравнить с`,"history:storedDiff":`Изменения версии`,"history:op.create":`Создано`,"history:op.update":`Обновлено`,"history:op.delete":`Удалено`,"diff:added":`Добавлено`,"diff:changed":`Изменено`,"diff:removed":`Удалено`,"diff:before":`До`,"diff:after":`После`,"diff:noChanges":`Изменения полей не записаны`,"audit:title":`Активность`,"audit:resource":`Ресурс`,"audit:action":`Действие`,"audit:recordId":`ID записи`,"audit:userId":`ID пользователя`,"audit:allResources":`Все ресурсы`,"audit:allActions":`Все действия`,"audit:noEvents":`Активности пока нет`,"audit:records":`записей`,"audit:loadError":`Не удалось загрузить активность`,"audit:by":`автор: {user}`,"audit:viewRecord":`Открыть запись`,"audit:viewChanges":`Показать изменения`,"audit:hideChanges":`Скрыть изменения`,"audit:noDiff":`Детали изменений недоступны`,"audit:loadDiffError":`Не удалось загрузить изменения`,"audit:action.new":`Запись создана`,"audit:action.edit":`Запись обновлена`,"audit:action.delete":`Запись удалена`,"audit:action.bulkDelete":`Записи удалены`,"audit:action.login":`Вход выполнен`,"audit:action.apiKeyCreate":`API-ключ создан`,"audit:action.apiKeyUpdate":`API-ключ обновлён`,"audit:action.apiKeyDelete":`API-ключ удалён`,"audit:virtualResource.auth":`Аутентификация`,"audit:virtualResource.apiKeys":`API-ключи`,"audit:prevPage":`Назад`,"audit:nextPage":`Вперёд`,"audit:dateRangePlaceholder":`Выберите период`,"keyValue:noMatches":`Совпадений нет — нажмите Enter, чтобы оставить «{value}».`,"aiAssistant:queue.cancel":`Убрать из очереди`,"aiAssistant:title":`AI Помощник`,"aiAssistant:fab.label":`Открыть AI помощника`,"aiAssistant:fab.short":`AI`,"aiAssistant:description":`Задайте вопросы о записях, связях, отчётах и трендах данных.`,"aiAssistant:notConfigured.title":`Помощник не настроен`,"aiAssistant:notConfigured.description":`Добавьте ключ API OpenRouter в настройках, чтобы включить помощника (только чтение).`,"aiAssistant:notConfigured.openSettings":`Открыть настройки`,"aiAssistant:tryAsking":`Попробуйте спросить:`,"aiAssistant:tryAsking.example1":`У каких клиентов больше всего постов?`,"aiAssistant:tryAsking.example2":`Покажи недавно созданные записи ресурса.`,"aiAssistant:tryAsking.example3":`Объясни связи между конкретными записями.`,"aiAssistant:thinking":`Думаю`,"aiAssistant:thinkingProgress":`Думаю ({progress}%)`,"aiAssistant:input.placeholder":`Спросите о ваших данных…`,"aiAssistant:input.hint":`Enter — отправить · Shift+Enter — новая строка`,"aiAssistant:send":`Отправить сообщение`,"aiAssistant:newChat":`Новый чат`,"aiAssistant:history":`История чатов`,"aiAssistant:history.empty":`Предыдущих чатов нет`,"aiAssistant:noText":`Вот найденные связанные записи:`,"aiAssistant:fallback.noToolResult":`Запрос выполнен, но модель не вернула текстовый ответ. Уточните вопрос или включите debug-логи, чтобы проверить результат инструмента.`,"aiAssistant:fallback.noRows":`По этому запросу записи не найдены.`,"aiAssistant:fallback.rowsFound":`Найдено строк: {count}.`,"aiAssistant:taskFailed":`Задача AI помощника не выполнена`,"aiAssistant:settings.title":`AI Помощник`,"aiAssistant:settings.description":`Настройте плавающий чат-виджет, модель и серверное поведение помощника.`,"aiAssistant:settings.enabled":`Включён`,"aiAssistant:settings.disabled":`Выключен`,"aiAssistant:settings.configured":`Настроен`,"aiAssistant:settings.apiKeyRequired":`Требуется ключ API`,"aiAssistant:settings.readOnly":`Только чтение`,"aiAssistant:settings.provider":`Провайдер: {provider}`,"aiAssistant:settings.enableLabel":`Включить помощника`,"aiAssistant:settings.enableHint":`Управляет видимостью плавающего виджета и эндпоинта чата.`,"aiAssistant:settings.modelLabel":`Модель OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Ключ API OpenRouter`,"aiAssistant:settings.apiKeyHint":`Оставьте пустым, чтобы сохранить уже сохранённый на сервере ключ.`,"aiAssistant:settings.systemPromptLabel":`Переопределение системного промпта`,"aiAssistant:settings.systemPromptPlaceholder":`Дополнительные инструкции под ваш проект (необязательно)`,"aiAssistant:settings.accessTitle":`Модель доступа`,"aiAssistant:settings.accessDescription":`Сейчас помощник ограничен инспекцией записей в режиме только чтения через действия ресурсов.`,"aiAssistant:settings.futureToolsReady":`Готов к будущим инструментам`,"aiAssistant:settings.save":`Сохранить настройки`,"aiAssistant:settings.saving":`Сохраняем…`,"aiAssistant:settings.saved":`Настройки AI помощника сохранены`,"aiAssistant:settings.empty":`Настройки недоступны.`,"filter:op.co":`Содержит`,"filter:op.nco":`Не содержит`,"filter:op.sw":`Начинается с`,"filter:op.ew":`Заканчивается на`,"filter:op.eq":`Равно`,"filter:op.neq":`Не равно`,"filter:op.empty":`Пусто`,"filter:op.nempty":`Не пусто`,"filter:op.in":`Одно из`,"filter:op.gt":`Больше`,"filter:op.lt":`Меньше`,"filter:op.between":`Между`,"filter:searchValues":`Поиск в списке…`,"filter:selectAll":`Выбрать всё`,"filter:noValues":`Значения не найдены`,"common:newRecord":`Новый {name}`,"common:editRecord":`Редактирование {name} #{id}`,"common:themeLight":`Светлая`,"common:themeDark":`Тёмная`,"common:themeSystem":`Системная`,"common:ok":`OK`,"common:select":`Выбрать…`,"common:removeItem":`Удалить {title}`,"common:nSelectedAddMore":`Выбрано {count} — добавить ещё`,"common:pickRecords":`Выбрать записи`,"common:managePickRecords":`Управлять выбором ({count})`,"common:pickRecordsFrom":`Выбрать из {name}`,"common:draftRestored":`Восстановлен несохранённый черновик`,"common:undoDraftRestore":`Отменить`,"aiFill:button":`ИИ-заполнение`,"aiFill:dialogTitle":`Заполнить форму по фото`,"aiFill:dialogDescription":`Загрузите изображение — ИИ извлечёт значения и заполнит форму.`,"aiFill:fillButton":`Распознать`,"aiFill:processing":`Распознавание изображения…`,"aiFill:success":`Заполнено полей: {count}`,"aiFill:errorNoFields":`У этого ресурса нет полей для ИИ-заполнения.`,"aiFill:errorGeneric":`Ошибка ИИ-заполнения: {message}`,"aiFill:noValues":`ИИ не смог извлечь ни одного значения с этого изображения.`,"aiFill:applied":`ИИ заполнил {count} поле(й). Можно отменить ниже.`,"wizard:stepOf":`Шаг {current} из {total}`,"wizard:products.step1":`Основные данные`,"wizard:products.step2":`Цены`,"wizard:products.step3":`Медиа и теги`,"common:invalidValue":`Недопустимое значение`,"common:collapseSidebar":`Свернуть боковую панель`,"common:expandSidebar":`Развернуть боковую панель`,"common:toggleSidebar":`Переключить боковую панель`,"common:sidebarTitle":`Боковая панель`,"common:sidebarNavigation":`Меню навигации`,"cache:title":`Кэш`,"cache:description":`Состояние кэша и производительность ресурсов на этой реплике.`,"cache:load.error":`Не удалось загрузить метрики кэша`,"cache:load.retry":`Повторить`,"cache:reset.action":`Сбросить метрики`,"cache:reset.loading":`Сброс метрик кэша…`,"cache:reset.success":`Метрики кэша сброшены`,"cache:reset.error":`Не удалось сбросить метрики кэша`,"cache:metric.hitRate":`Доля попаданий`,"cache:metric.requests":`Чтения кэша`,"cache:metric.avgCompute":`Среднее вычисление`,"cache:metric.errors":`Ошибки`,"cache:unit.ms":`{value} мс`,"cache:quarantine.title":`Теги в карантине`,"cache:quarantine.description":`Для этих тегов кэш обходится, пока инвалидация не завершится успешно.`,"cache:invalidate.title":`Инвалидация кэша ресурса`,"cache:invalidate.description":`Удаляет списки и записи ресурса на всех настроенных репликах.`,"cache:invalidate.resource":`Ресурс`,"cache:invalidate.action":`Инвалидировать кэш`,"cache:invalidate.loading":`Инвалидация кэша…`,"cache:invalidate.success":`Кэш ресурса инвалидирован`,"cache:invalidate.error":`Не удалось инвалидировать кэш ресурса`,"cache:table.title":`Метрики по пространствам имён`,"cache:table.empty":`Активность кэша пока не зафиксирована.`,"cache:instance":`Реплика {id}`,"cache:table.namespace":`Пространство имён`,"cache:table.resource":`Ресурс`,"cache:table.hits":`Попадания`,"cache:table.misses":`Промахи`,"cache:table.computes":`Вычисления`,"cache:table.coalesced":`Объединено`,"cache:table.errors":`Ошибки`}},{code:`de`,name:`Deutsch`,dict:{"common:appName":`Modern Admin`,"common:home":`Startseite`,"common:search":`Suche`,"common:loading":`Lädt…`,"common:save":`Speichern`,"common:cancel":`Abbrechen`,"common:delete":`Löschen`,"common:create":`Erstellen`,"common:edit":`Bearbeiten`,"common:show":`Anzeigen`,"common:back":`Zurück`,"common:noRecords":`Keine Einträge gefunden.`,"common:noRecordsHint":`Erstellen Sie einen neuen Eintrag „{resource}", um zu beginnen.`,"common:noMatchingRecords":`Keine Einträge entsprechen Ihren Filtern.`,"common:clearFilters":`Filter zurücksetzen`,"common:confirmDelete":`Diesen Eintrag löschen?`,"common:confirmAction":`Aktion bestätigen`,"common:confirm":`Bestätigen`,"common:perPage":`Pro Seite`,"common:page":`Seite`,"common:of":`von`,"common:total":`Gesamt`,"auth:login":`Anmelden`,"auth:logout":`Abmelden`,"auth:email":`E-Mail`,"auth:password":`Passwort`,"auth:loginFailed":`Ungültige Zugangsdaten.`,"errors:notFound":`Nicht gefunden.`,"errors:forbidden":`Kein Zugriff auf diese Ressource.`,"errors:server":`Etwas ist schiefgelaufen. Bitte erneut versuchen.`,"common:resources":`Ressourcen`,"common:actions":`Aktionen`,"action:notFound":`Aktion „{action}“ ist für diese Ressource nicht verfügbar.`,"action:componentMissing":`Es ist keine Komponente namens „{component}“ registriert.`,"action:componentMissingHint":`Registriere sie im ComponentLoader, der an <ModernAdminProvider components={…}> übergeben wird.`,"action:loadFailed":`Die Aktion konnte nicht geladen werden.`,"common:new":`Neu`,"common:rowsPerPage":`Zeilen pro Seite`,"common:filter":`Filter {label}…`,"validation:required":`{label} ist erforderlich`,"validation:invalidNumber":`{label} muss eine gültige Zahl sein`,"validation:invalidInteger":`{label} muss eine ganze Zahl sein`,"validation:invalidEmail":`{label} muss eine gültige E-Mail sein`,"validation:invalidUrl":`{label} muss eine gültige URL sein`,"validation:invalidDate":`{label} muss ein gültiges Datum sein`,"validation:invalidUuid":`{label} muss eine gültige UUID sein`,"validation:tooShort":`{label} muss mindestens {min} Zeichen lang sein`,"validation:tooLong":`{label} darf höchstens {max} Zeichen lang sein`,"validation:notInList":`{label} hat einen ungültigen Wert`,"validation:emptySelection":`Bitte mindestens einen Wert für {label} wählen`,"toast:created":`Erfolgreich erstellt`,"toast:saved":`Erfolgreich gespeichert`,"toast:deleted":`Erfolgreich gelöscht`,"toast:createFailed":`Erstellen fehlgeschlagen`,"toast:saveFailed":`Speichern fehlgeschlagen`,"toast:deleteFailed":`Löschen fehlgeschlagen`,"toast:loadFailed":`Laden fehlgeschlagen`,"toast:validationFailed":`Bitte Fehler beheben und erneut versuchen`,"common:close":`Schließen`,"common:export":`Export`,"export:title":`Datensätze exportieren`,"export:description":`Alle passenden Datensätze von {resource} als Datei herunterladen.`,"export:csvHint":`Kommagetrennte Werte`,"export:jsonHint":`Strukturiertes JSON-Array`,"export:downloading":`Download wird vorbereitet…`,"export:progress":`{loaded} von {total} geladen…`,"export:exported":`{count} Datensätze exportiert`,"export:exportFailed":`Export fehlgeschlagen`,"common:apply":`Anwenden`,"common:clear":`Zurücksetzen`,"common:filters":`Filter`,"common:columns":`Spalten`,"common:toggleColumns":`Spalten anzeigen`,"common:openMenu":`Menü öffnen`,"common:refresh":`Aktualisieren`,"common:copy":`Kopieren`,"common:copied":`Kopiert!`,"common:applyFilters":`Filter anwenden`,"common:clearAll":`Alle löschen`,"common:any":`Beliebig`,"common:yes":`Ja`,"common:no":`Nein`,"common:filterPlaceholder":`Filter…`,"common:loadFailed":`Laden fehlgeschlagen: {error}`,"common:theme":`Design`,"common:language":`Sprache`,"common:toggleTheme":`Design umschalten`,"common:clearSelection":`Auswahl löschen`,"common:searchPlaceholder":`Suchen…`,"home:searchResources":`Ressourcen suchen…`,"home:noMatchingResources":`Keine passenden Ressourcen gefunden.`,"globalSearch:title":`Globale Suche`,"globalSearch:description":`Über alle Ressourcen und Datensätze hinweg suchen.`,"globalSearch:trigger":`Suchen…`,"globalSearch:placeholder":`Über alle Ressourcen suchen…`,"globalSearch:hint":`Tippen, um in allen Ressourcen zu suchen.`,"globalSearch:noResults":`Keine passenden Datensätze gefunden.`,"globalSearch:error":`Suche fehlgeschlagen. Bitte erneut versuchen.`,"globalSearch:hotkey":`Globale Suche öffnen`,"globalSearch:matchedIn":`in {field}`,"globalSearch:recent":`Letzte Suchen`,"globalSearch:clearRecent":`Löschen`,"globalSearch:showAllIn":`Alle in {resource} anzeigen`,"common:pageOf":`Seite {page} von {total}`,"common:firstPage":`Erste Seite`,"common:previousPage":`Vorherige Seite`,"common:nextPage":`Nächste Seite`,"common:lastPage":`Letzte Seite`,"common:recordsCount":`{count} Einträge`,"common:selectedCount":`{count} ausgewählt`,"common:selectRow":`Zeile auswählen`,"common:selectAll":`Alle auswählen`,"common:deleteSelected":`Ausgewählte löschen`,"common:bulkDeleteConfirm":`{count} ausgewählte Datensätze löschen?`,"toast:bulkDeleted":`{count} Datensätze gelöscht`,"toast:bulkDeleteFailed":`Datensätze konnten nicht gelöscht werden`,"common:from":`Von`,"common:to":`Bis`,"common:sortBy":`Sortieren nach`,"common:next":`Weiter`,"common:previous":`Zurück`,"common:relatedRecords":`Verknüpfte Datensätze`,"common:viewAll":`Alle anzeigen`,"common:noRelatedRecords":`Keine verknüpften Datensätze.`,"common:preview":`Vorschau`,"common:download":`Herunterladen`,"common:openInNewTab":`In neuem Tab öffnen`,"common:format":`Formatieren`,"common:invalidJson":`Ungültiges JSON`,"common:showPassword":`Passwort anzeigen`,"common:hidePassword":`Passwort verbergen`,"common:shortcutsHelp":`Tastenkürzel`,"common:shortcutsEmpty":`Auf diesem Bildschirm sind keine Kürzel verfügbar.`,"auth:title":`Anmelden`,"auth:subtitle":`Geben Sie Ihre E-Mail und Ihr Passwort ein`,"auth:tagline":`Das moderne Admin-Panel für jeden Stack.`,"auth:orContinueWith":`Oder weiter mit`,"auth:continueWith":`Weiter mit {provider}`,"common:chooseFile":`Datei auswählen`,"common:chooseFiles":`Dateien auswählen`,"common:dragAndDrop":`Ziehen und ablegen oder`,"common:chooseAFile":`Datei auswählen`,"common:addMoreFiles":`weitere Dateien hinzufügen`,"common:uploading":`Wird hochgeladen…`,"common:uploadingFile":`„{name}" wird hochgeladen…`,"common:removeFile":`Datei entfernen`,"common:uploadFailed":`Upload fehlgeschlagen`,"common:dismiss":`Schließen`,"common:openCalendar":`Kalender öffnen`,"common:time":`Uhrzeit`,"common:downloadFailed":`Download fehlgeschlagen`,"richtext:bold":`Fett`,"richtext:italic":`Kursiv`,"richtext:strikethrough":`Durchgestrichen`,"richtext:inlineCode":`Inline-Code`,"richtext:heading":`Überschrift {level}`,"richtext:bulletList":`Aufzählungsliste`,"richtext:numberedList":`Nummerierte Liste`,"richtext:blockquote":`Blockzitat`,"richtext:horizontalRule":`Horizontale Linie`,"richtext:insertLink":`Link einfügen`,"richtext:undo":`Rückgängig`,"richtext:redo":`Wiederholen`,"richtext:source":`Quelltext ({format})`,"richtext:splitView":`Geteilte Ansicht`,"richtext:visualEditor":`Visueller Editor`,"richtext:fullscreen":`Vollbild`,"richtext:exitFullscreen":`Vollbild beenden`,"richtext:urlPrompt":`URL`,"common:saving":`Speichern…`,"common:done":`Fertig`,"settings:menuItem":`Einstellungen`,"settings:noSectionsConfigured":`Für diese Installation sind keine Einstellungsbereiche verfügbar.`,"settings:apiKeys.title":`API-Schlüssel`,"settings:apiKeys.description":`Programmatische Zugriffstoken für die Admin-API. Jeder Schlüssel hat eine Berechtigungsmenge, die einschränkt, welche Ressourcen und Aktionen er ausführen darf.`,"settings:apiKeys.actions.create":`Neuer Schlüssel`,"settings:apiKeys.actions.edit":`Bearbeiten`,"settings:apiKeys.actions.revoke":`Widerrufen`,"settings:apiKeys.empty.title":`Noch keine API-Schlüssel`,"settings:apiKeys.empty.description":`Erstelle deinen ersten Schlüssel für programmatischen Zugriff.`,"settings:apiKeys.columns.name":`Name`,"settings:apiKeys.columns.start":`Präfix`,"settings:apiKeys.columns.permissions":`Berechtigungen`,"settings:apiKeys.columns.expiresAt":`Läuft ab`,"settings:apiKeys.columns.enabled":`Aktiviert`,"settings:apiKeys.columns.actions":`Aktionen`,"settings:apiKeys.lastUsed":`Zuletzt verwendet {date}`,"settings:apiKeys.expiresNever":`Nie`,"settings:apiKeys.permissions.resource":`Ressource`,"settings:apiKeys.permissions.actions":`Aktionen`,"settings:apiKeys.permissions.selectAll":`Alle auswählen`,"settings:apiKeys.permissions.clearAll":`Alle entfernen`,"settings:apiKeys.permissions.none":`Keine Berechtigungen`,"settings:apiKeys.permissions.summary":`{resources} Ressourcen · {actions} Aktionen`,"settings:apiKeys.permissions.noResources":`Es sind keine Ressourcen registriert.`,"settings:apiKeys.permissions.selectAllResources":`Alle Ressourcen und Aktionen auswählen`,"settings:apiKeys.permissions.clearAllResources":`Alle Ressourcen und Aktionen entfernen`,"settings:apiKeys.editor.titleCreate":`Neuer API-Schlüssel`,"settings:apiKeys.editor.titleEdit":`API-Schlüssel bearbeiten`,"settings:apiKeys.editor.description":`Wähle einen aussagekräftigen Namen und gewähre nur die Ressourcen und Aktionen, die der Schlüssel wirklich braucht.`,"settings:apiKeys.editor.name":`Name`,"settings:apiKeys.editor.namePlaceholder":`z. B. CI-Deploy-Bot`,"settings:apiKeys.editor.expiresInDays":`Läuft ab in (Tagen)`,"settings:apiKeys.editor.expiresPlaceholder":`nie`,"settings:apiKeys.editor.expiresHint":`Leer lassen, damit der Schlüssel nicht abläuft. Maximal 3650 Tage.`,"settings:apiKeys.editor.permissions":`Berechtigungen`,"settings:apiKeys.editor.selectedActions":`{count} ausgewählt`,"settings:apiKeys.created.title":`API-Schlüssel erstellt`,"settings:apiKeys.created.description":`Kopiere den Schlüssel jetzt — er wird nicht erneut angezeigt.`,"settings:apiKeys.created.warning":`Dies ist die einzige Gelegenheit, den vollständigen Schlüssel zu sehen. Bewahre ihn sicher auf.`,"settings:apiKeys.created.reveal":`Schlüssel anzeigen`,"settings:apiKeys.created.hide":`Schlüssel ausblenden`,"settings:apiKeys.created.copy":`Kopieren`,"settings:apiKeys.created.copied":`Kopiert`,"settings:apiKeys.notice.revoked":`API-Schlüssel widerrufen`,"settings:apiKeys.notice.updated":`API-Schlüssel aktualisiert`,"settings:apiKeys.notice.copied":`In die Zwischenablage kopiert`,"settings:apiKeys.notice.copyFailed":`Kopieren in die Zwischenablage fehlgeschlagen`,"settings:apiKeys.confirmRevoke.title":`API-Schlüssel widerrufen`,"settings:apiKeys.confirmRevoke.description":`„{name}" widerrufen? Alle Dienste, die diesen Schlüssel verwenden, funktionieren sofort nicht mehr.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
74
+
75
+ Example:
76
+ {
77
+ "Authorization": "Bearer <token>",
78
+ "X-Source": "modern-admin"
79
+ }
80
+
81
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
82
+
83
+ Example:
84
+ {
85
+ "status": "published",
86
+ "role": "admin"
87
+ }
88
+
89
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Dashboard`,"chart:addChart":`Diagramm hinzufügen`,"chart:newChart":`Neues Diagramm`,"chart:editChart":`Diagramm bearbeiten`,"chart:deleteChart":`Diagramm entfernen`,"chart:noCharts":`Keine Diagramme vorhanden`,"chart:noChartsHint":`Fügen Sie ein Diagramm hinzu, um Ihre Daten zu überwachen.`,"chart:addGroup":`Gruppe hinzufügen`,"chart:newGroup":`Neue Gruppe`,"chart:editGroup":`Gruppe bearbeiten`,"chart:deleteGroup":`Gruppe entfernen`,"chart:saveGroup":`Gruppe speichern`,"chart:groupName":`Gruppenname`,"chart:groupNamePlaceholder":`z. B. Verkaufsmetriken`,"chart:groupNameRequired":`Gruppenname ist erforderlich`,"chart:groupOrder":`Reihenfolge der Gruppe`,"chart:order":`Reihenfolge`,"chart:orderHint":`Niedrigere Zahlen erscheinen zuerst.`,"chart:moveToGroup":`In Gruppe verschieben`,"chart:moveChart":`Diagramm verschieben`,"chart:moveGroup":`Gruppe`,"chart:moveNoGroups":`Noch keine Gruppen.`,"chart:moveNoGroupsHint":`Erstellen Sie zuerst eine Gruppe, um Diagramme zu organisieren.`,"chart:deleteChartConfirm":`Diagramm entfernen?`,"chart:deleteChartConfirmHint":`Diese Aktion kann nicht rückgängig gemacht werden.`,"chart:deleteGroupConfirm":`Diese Gruppe entfernen?`,"chart:deleteGroupConfirmHint":`Die Gruppe und alle darin enthaltenen Diagramme ({count}) werden dauerhaft gelöscht.`,"chart:title":`Titel`,"chart:titlePlaceholder":`z.B. Neue Nutzer pro Tag`,"chart:untitled":`Ohne Titel`,"chart:chartType":`Diagrammtyp`,"chart:resource":`Ressource`,"chart:groupBy":`Gruppieren nach`,"chart:step":`Schritt`,"chart:metric":`Metrik`,"chart:aggregateField":`Aggregationsfeld`,"chart:selectField":`Feld auswählen…`,"chart:saveChart":`Diagramm speichern`,"chart:typeLine":`Linie`,"chart:typeArea":`Fläche`,"chart:typeBar":`Balken`,"chart:typePie":`Kreis`,"chart:stepDay":`Tag`,"chart:stepWeek":`Woche`,"chart:stepMonth":`Monat`,"chart:stepYear":`Jahr`,"chart:metricCount":`Anzahl`,"chart:metricSum":`Summe`,"chart:metricAvg":`Durchschnitt`,"chart:noData":`Keine Daten für den ausgewählten Zeitraum`,"chart:loadError":`Diagrammdaten konnten nicht geladen werden`,"chart:value":`Wert`,"dashboard:vis":`Visualisierung`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Linie`,"dashboard:visArea":`Fläche`,"dashboard:visBar":`Balken`,"dashboard:visPie":`Kreis`,"dashboard:metricCount":`Anzahl`,"dashboard:metricSum":`Summe`,"dashboard:metricAvg":`Durchschnitt`,"dashboard:metricMin":`Min`,"dashboard:metricMax":`Max`,"dashboard:builder.range":`Zeitraum`,"dashboard:builder.filters":`Filter`,"dashboard:builder.filtersHint":`Datensatz vor der Aggregation eingrenzen. Aktiviere ein Häkchen, um den Filter über dem Diagramm einzublenden.`,"dashboard:builder.quickFilterHint":`Diesen Filter über dem Diagramm im Dashboard anzeigen.`,"dashboard:builder.quickFilterToggle":`{field} als Schnellfilter einblenden`,"dashboard:range.7d":`7T`,"dashboard:range.30d":`30T`,"dashboard:range.90d":`90T`,"dashboard:range.1y":`1J`,"dashboard:range.all":`Alle`,"dashboard:range.custom":`Benutzerdefiniert`,"dashboard:widget.previousPeriod":`ggü. Vorperiode`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Auf halbe Breite verkleinern`,"dashboard:widget.expand":`Auf volle Zeile erweitern`,"dashboard:widget.toggleSql":`SQL anzeigen`,"dashboard:widget.unsupported":`Diagramme werden für Ihre Datenbank noch nicht unterstützt.`,"dashboard:widget.truncatedWarning":`Teildaten werden angezeigt – zu viele Zeilen, um den gesamten Bereich zu aggregieren.`,"dashboard:widget.showAll":`Alle anzeigen`,"dashboard:widget.hideAll":`Alle ausblenden`,"dashboard:seriesTotal":`Gesamt`,"dashboard:seriesOther":`Sonstige`,"dashboard:seriesNull":`Leer`,"dashboard:builder.dateField":`Datumsfeld`,"dashboard:builder.dateFieldHint":`Die X-Achse wird nach diesem Datumsfeld gruppiert.`,"dashboard:builder.secondaryGroupBy":`Aufschlüsselung`,"dashboard:builder.noBreakdown":`Einzelne Reihe`,"dashboard:builder.topN":`Max. Reihen`,"dashboard:builder.width":`Breite`,"dashboard:width.half":`Halb`,"dashboard:width.full":`Volle Zeile`,"dashboard:builder.comparePrevious":`Mit vorherigem Zeitraum vergleichen`,"dashboard:builder.comparePreviousHint":`Blendet den gleich langen vorherigen Zeitraum als gestrichelte Linie ein und zeigt die Veränderung neben dem Titel an.`,"dashboard:builder.comparePreviousDisabled":`Bei einer Aufschlüsselung nicht verfügbar.`,"dashboard:builder.transform":`Wertetransformation`,"dashboard:builder.transformHint":`Wird vor der Anzeige auf die Werte angewendet — z. B. durch 100 teilen, um Cent als Euro anzuzeigen.`,"dashboard:builder.transformAdd":`Schritt hinzufügen`,"dashboard:builder.transformRemove":`Schritt entfernen`,"dashboard:builder.opDivide":`Dividieren durch`,"dashboard:builder.opMultiply":`Multiplizieren mit`,"dashboard:builder.opAdd":`Addieren`,"dashboard:builder.opSubtract":`Subtrahieren`,"dashboard:builder.format":`Werteformat`,"dashboard:builder.formatStyle":`Stil`,"dashboard:builder.formatNumber":`Zahl`,"dashboard:builder.formatCurrency":`Währung`,"dashboard:builder.formatPercent":`Prozent`,"dashboard:builder.formatCurrencyCode":`Währungscode`,"dashboard:builder.formatDecimals":`Dezimalstellen`,"dashboard:builder.formatCompact":`Kompakte Zahlen (12,5 Tsd.)`,"dashboard:builder.formatPrefix":`Präfix`,"dashboard:builder.formatSuffix":`Suffix`,"dashboard:builder.color":`Reihenfarbe`,"dashboard:widget.previousSeries":`{label} (Vorperiode)`,"dashboard:widget.editColors":`Farben bearbeiten`,"dashboard:widget.colorsTitle":`Reihenfarben`,"dashboard:widget.colorCustom":`Benutzerdefiniert`,"dashboard:widget.colorAuto":`Automatisch`,"dashboard:widget.colorPick":`Farbe wählen`,"dashboard:builder.tabData":`Daten`,"dashboard:builder.tabDisplay":`Darstellung`,"dashboard:builder.tabFilters":`Filter`,"dashboard:builder.filtersEmpty":`Diese Ressource hat keine filterbaren Felder.`,"history:revisions":`Revisionen`,"history:noRevisions":`Noch keine Revisionen`,"history:loadError":`Revisionsverlauf konnte nicht geladen werden`,"history:revert":`Zurücksetzen`,"history:confirmRevert":`Zu dieser Revision zurücksetzen?`,"history:revertSuccess":`Revision wiederhergestellt`,"history:revertFailed":`Revision konnte nicht wiederhergestellt werden`,"history:unknownUser":`Unbekannter Benutzer`,"history:changes":`Änderungen`,"history:compareTo":`Vergleichen mit`,"history:storedDiff":`Änderungsdiff`,"history:op.create":`Erstellt`,"history:op.update":`Aktualisiert`,"history:op.delete":`Gelöscht`,"diff:added":`Hinzugefügt`,"diff:changed":`Geändert`,"diff:removed":`Entfernt`,"diff:before":`Vorher`,"diff:after":`Nachher`,"diff:noChanges":`Keine Feldänderungen aufgezeichnet`,"audit:title":`Aktivität`,"audit:resource":`Ressource`,"audit:action":`Aktion`,"audit:recordId":`Datensatz-ID`,"audit:userId":`Benutzer-ID`,"audit:allResources":`Alle Ressourcen`,"audit:allActions":`Alle Aktionen`,"audit:noEvents":`Noch keine Aktivität`,"audit:records":`Datensätze`,"audit:loadError":`Aktivität konnte nicht geladen werden`,"audit:by":`von {user}`,"audit:viewRecord":`Datensatz öffnen`,"audit:viewChanges":`Änderungen anzeigen`,"audit:hideChanges":`Änderungen ausblenden`,"audit:noDiff":`Details zu den Änderungen sind nicht verfügbar`,"audit:loadDiffError":`Änderungen konnten nicht geladen werden`,"audit:action.new":`Datensatz erstellt`,"audit:action.edit":`Datensatz aktualisiert`,"audit:action.delete":`Datensatz gelöscht`,"audit:action.bulkDelete":`Datensätze gelöscht`,"audit:action.login":`Angemeldet`,"audit:action.apiKeyCreate":`API-Schlüssel erstellt`,"audit:action.apiKeyUpdate":`API-Schlüssel aktualisiert`,"audit:action.apiKeyDelete":`API-Schlüssel gelöscht`,"audit:virtualResource.auth":`Authentifizierung`,"audit:virtualResource.apiKeys":`API-Schlüssel`,"audit:prevPage":`Zurück`,"audit:nextPage":`Weiter`,"audit:dateRangePlaceholder":`Datumsbereich auswählen`,"keyValue:noMatches":`Keine Treffer – Enter drücken, um „{value}" zu übernehmen.`,"aiAssistant:queue.cancel":`Aus Warteschlange entfernen`,"aiAssistant:title":`KI-Assistent`,"aiAssistant:fab.label":`KI-Assistenten öffnen`,"aiAssistant:fab.short":`KI`,"aiAssistant:description":`Stellen Sie Fragen zu Datensätzen, Beziehungen, Berichten und Datentrends.`,"aiAssistant:notConfigured.title":`Assistent ist nicht konfiguriert`,"aiAssistant:notConfigured.description":`Fügen Sie den OpenRouter-API-Schlüssel in den Einstellungen hinzu, um den schreibgeschützten KI-Assistenten zu aktivieren.`,"aiAssistant:notConfigured.openSettings":`Einstellungen öffnen`,"aiAssistant:tryAsking":`Versuchen Sie zu fragen:`,"aiAssistant:tryAsking.example1":`Welche Kunden haben die meisten Beiträge?`,"aiAssistant:tryAsking.example2":`Zeige kürzlich erstellte Datensätze einer Ressource.`,"aiAssistant:tryAsking.example3":`Erkläre Beziehungen zwischen bestimmten Datensätzen.`,"aiAssistant:thinking":`Denke nach`,"aiAssistant:thinkingProgress":`Denke nach ({progress}%)`,"aiAssistant:input.placeholder":`Fragen Sie zu Ihren Daten…`,"aiAssistant:input.hint":`Enter zum Senden · Shift+Enter für eine neue Zeile`,"aiAssistant:send":`Nachricht senden`,"aiAssistant:newChat":`Neuer Chat`,"aiAssistant:history":`Chatverlauf`,"aiAssistant:history.empty":`Keine früheren Chats`,"aiAssistant:noText":`Hier sind die gefundenen zugehörigen Datensätze:`,"aiAssistant:fallback.noToolResult":`Die Anfrage wurde ausgeführt, aber das Modell hat keine Textantwort zurückgegeben. Präzisieren Sie die Frage oder aktivieren Sie Debug-Logs, um das Tool-Ergebnis zu prüfen.`,"aiAssistant:fallback.noRows":`Für diese Anfrage wurden keine Datensätze gefunden.`,"aiAssistant:fallback.rowsFound":`Gefundene Zeilen: {count}.`,"aiAssistant:taskFailed":`KI-Assistent-Aufgabe fehlgeschlagen`,"aiAssistant:settings.title":`KI-Assistent`,"aiAssistant:settings.description":`Konfigurieren Sie das schwebende Chat-Widget, das Modell und das serverseitige Assistentenverhalten.`,"aiAssistant:settings.enabled":`Aktiviert`,"aiAssistant:settings.disabled":`Deaktiviert`,"aiAssistant:settings.configured":`Konfiguriert`,"aiAssistant:settings.apiKeyRequired":`API-Schlüssel erforderlich`,"aiAssistant:settings.readOnly":`Nur lesen`,"aiAssistant:settings.provider":`Anbieter: {provider}`,"aiAssistant:settings.enableLabel":`Assistenten aktivieren`,"aiAssistant:settings.enableHint":`Steuert die Sichtbarkeit des schwebenden Widgets und des Chat-Endpunkts.`,"aiAssistant:settings.modelLabel":`OpenRouter-Modell`,"aiAssistant:settings.apiKeyLabel":`OpenRouter-API-Schlüssel`,"aiAssistant:settings.apiKeyHint":`Leer lassen, um den auf dem Server gespeicherten Schlüssel beizubehalten.`,"aiAssistant:settings.systemPromptLabel":`System-Prompt überschreiben`,"aiAssistant:settings.systemPromptPlaceholder":`Optionale projektspezifische Anweisungen für den Assistenten`,"aiAssistant:settings.accessTitle":`Zugriffsmodell`,"aiAssistant:settings.accessDescription":`Der aktuelle Assistent ist auf schreibgeschützte Datensatzprüfung über Admin-Ressourcenaktionen beschränkt.`,"aiAssistant:settings.futureToolsReady":`Bereit für zukünftige Tools`,"aiAssistant:settings.save":`Einstellungen speichern`,"aiAssistant:settings.saving":`Speichere…`,"aiAssistant:settings.saved":`KI-Assistent-Einstellungen gespeichert`,"aiAssistant:settings.empty":`Keine Einstellungen verfügbar.`,"filter:op.co":`Enthält`,"filter:op.nco":`Enthält nicht`,"filter:op.sw":`Beginnt mit`,"filter:op.ew":`Endet mit`,"filter:op.eq":`Ist gleich`,"filter:op.neq":`Ist nicht gleich`,"filter:op.empty":`Ist leer`,"filter:op.nempty":`Ist nicht leer`,"filter:op.in":`Ist einer von`,"filter:op.gt":`Größer als`,"filter:op.lt":`Kleiner als`,"filter:op.between":`Zwischen`,"filter:searchValues":`In Liste suchen…`,"filter:selectAll":`Alle auswählen`,"filter:noValues":`Keine Werte gefunden`,"common:newRecord":`Neu: {name}`,"common:editRecord":`{name} #{id} bearbeiten`,"common:themeLight":`Hell`,"common:themeDark":`Dunkel`,"common:themeSystem":`System`,"common:ok":`OK`,"common:select":`Auswählen…`,"common:removeItem":`{title} entfernen`,"common:nSelectedAddMore":`{count} ausgewählt — weitere hinzufügen`,"common:pickRecords":`Datensätze auswählen`,"common:managePickRecords":`Auswahl verwalten ({count})`,"common:pickRecordsFrom":`Aus {name} auswählen`,"common:draftRestored":`Nicht gespeicherter Entwurf wiederhergestellt`,"common:undoDraftRestore":`Rückgängig`,"aiFill:button":`KI-Ausfüllen`,"aiFill:dialogTitle":`Formular aus Foto ausfüllen`,"aiFill:dialogDescription":`Bild hochladen — die KI extrahiert die Werte und füllt das Formular aus.`,"aiFill:fillButton":`Erkennen`,"aiFill:processing":`Bild wird erkannt…`,"aiFill:success":`{count} Feld(er) ausgefüllt`,"aiFill:errorNoFields":`Diese Ressource hat keine KI-ausfüllbaren Felder.`,"aiFill:errorGeneric":`KI-Ausfüllen fehlgeschlagen: {message}`,"aiFill:noValues":`Die KI konnte aus diesem Bild keine Werte extrahieren.`,"aiFill:applied":`KI hat {count} Feld(er) ausgefüllt. Unten rückgängig machen.`,"wizard:stepOf":`Schritt {current} von {total}`,"wizard:products.step1":`Grundinfo`,"wizard:products.step2":`Preisgestaltung`,"wizard:products.step3":`Medien & Tags`,"common:invalidValue":`Ungültiger Wert`,"common:collapseSidebar":`Seitenleiste einklappen`,"common:expandSidebar":`Seitenleiste ausklappen`,"common:toggleSidebar":`Seitenleiste umschalten`,"common:sidebarTitle":`Seitenleiste`,"common:sidebarNavigation":`Navigationsmenü`,"cache:title":`Cache`,"cache:description":`Cache-Zustand und Ressourcenleistung auf dieser Replik.`,"cache:load.error":`Cache-Metriken konnten nicht geladen werden`,"cache:load.retry":`Erneut versuchen`,"cache:reset.action":`Metriken zurücksetzen`,"cache:reset.loading":`Cache-Metriken werden zurückgesetzt…`,"cache:reset.success":`Cache-Metriken zurückgesetzt`,"cache:reset.error":`Cache-Metriken konnten nicht zurückgesetzt werden`,"cache:metric.hitRate":`Trefferquote`,"cache:metric.requests":`Cache-Lesevorgänge`,"cache:metric.avgCompute":`Mittlere Berechnung`,"cache:metric.errors":`Fehler`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Quarantänisierte Tags`,"cache:quarantine.description":`Diese Tags umgehen den Cache, bis die Invalidierung erfolgreich ist.`,"cache:invalidate.title":`Ressourcen-Cache invalidieren`,"cache:invalidate.description":`Listen- und Datensatzeinträge einer Ressource auf allen Repliken löschen.`,"cache:invalidate.resource":`Ressource`,"cache:invalidate.action":`Cache invalidieren`,"cache:invalidate.loading":`Cache wird invalidiert…`,"cache:invalidate.success":`Ressourcen-Cache invalidiert`,"cache:invalidate.error":`Ressourcen-Cache konnte nicht invalidiert werden`,"cache:table.title":`Metriken nach Namensraum`,"cache:table.empty":`Noch keine Cache-Aktivität erfasst.`,"cache:instance":`Replik {id}`,"cache:table.namespace":`Namensraum`,"cache:table.resource":`Ressource`,"cache:table.hits":`Treffer`,"cache:table.misses":`Fehltreffer`,"cache:table.computes":`Berechnungen`,"cache:table.coalesced":`Gebündelt`,"cache:table.errors":`Fehler`}},{code:`fr`,name:`Français`,dict:{"common:appName":`Modern Admin`,"common:home":`Accueil`,"common:search":`Recherche`,"common:loading":`Chargement…`,"common:save":`Enregistrer`,"common:cancel":`Annuler`,"common:delete":`Supprimer`,"common:create":`Créer`,"common:edit":`Modifier`,"common:show":`Afficher`,"common:back":`Retour`,"common:noRecords":`Aucun enregistrement.`,"common:noRecordsHint":`Commencez par créer un nouveau {resource}.`,"common:noMatchingRecords":`Aucun enregistrement ne correspond à vos filtres.`,"common:clearFilters":`Effacer les filtres`,"common:confirmDelete":`Supprimer cet enregistrement ?`,"common:confirmAction":`Confirmer l’action`,"common:confirm":`Confirmer`,"common:perPage":`Par page`,"common:page":`Page`,"common:of":`sur`,"common:total":`Total`,"auth:login":`Connexion`,"auth:logout":`Déconnexion`,"auth:email":`E-mail`,"auth:password":`Mot de passe`,"auth:loginFailed":`Identifiants invalides.`,"errors:notFound":`Introuvable.`,"errors:forbidden":`Accès refusé à cette ressource.`,"errors:server":`Une erreur est survenue. Veuillez réessayer.`,"common:resources":`Ressources`,"common:actions":`Actions`,"action:notFound":`L'action « {action} » n'est pas disponible sur cette ressource.`,"action:componentMissing":`Aucun composant nommé « {component} » n’est enregistré.`,"action:componentMissingHint":`Enregistrez-le dans le ComponentLoader transmis à <ModernAdminProvider components={…}>.`,"action:loadFailed":`Échec du chargement de l'action.`,"common:new":`Nouveau`,"common:rowsPerPage":`Lignes par page`,"common:filter":`Filtrer {label}…`,"validation:required":`{label} est requis`,"validation:invalidNumber":`{label} doit être un nombre valide`,"validation:invalidInteger":`{label} doit être un entier`,"validation:invalidEmail":`{label} doit être un e-mail valide`,"validation:invalidUrl":`{label} doit être une URL valide`,"validation:invalidDate":`{label} doit être une date valide`,"validation:invalidUuid":`{label} doit être un UUID valide`,"validation:tooShort":`{label} doit contenir au moins {min} caractères`,"validation:tooLong":`{label} doit contenir au plus {max} caractères`,"validation:notInList":`{label} a une valeur invalide`,"validation:emptySelection":`Sélectionnez au moins une valeur pour {label}`,"toast:created":`Créé avec succès`,"toast:saved":`Enregistré avec succès`,"toast:deleted":`Supprimé avec succès`,"toast:createFailed":`Échec de la création`,"toast:saveFailed":`Échec de l’enregistrement`,"toast:deleteFailed":`Échec de la suppression`,"toast:loadFailed":`Échec du chargement`,"toast:validationFailed":`Veuillez corriger les erreurs et réessayer`,"common:close":`Fermer`,"common:export":`Exporter`,"export:title":`Exporter les enregistrements`,"export:description":`Télécharger tous les enregistrements correspondants de {resource} dans un seul fichier.`,"export:csvHint":`Valeurs séparées par des virgules`,"export:jsonHint":`Tableau JSON structuré`,"export:downloading":`Préparation du téléchargement…`,"export:progress":`{loaded} sur {total} chargés…`,"export:exported":`{count} enregistrements exportés`,"export:exportFailed":`Échec de l’export`,"common:apply":`Appliquer`,"common:clear":`Effacer`,"common:filters":`Filtres`,"common:columns":`Colonnes`,"common:toggleColumns":`Afficher les colonnes`,"common:openMenu":`Ouvrir le menu`,"common:refresh":`Actualiser`,"common:copy":`Copier`,"common:copied":`Copié !`,"common:applyFilters":`Appliquer les filtres`,"common:clearAll":`Tout effacer`,"common:any":`Aucun`,"common:yes":`Oui`,"common:no":`Non`,"common:filterPlaceholder":`Filtrer…`,"common:loadFailed":`Échec du chargement : {error}`,"common:theme":`Thème`,"common:language":`Langue`,"common:toggleTheme":`Changer de thème`,"common:clearSelection":`Effacer la sélection`,"common:searchPlaceholder":`Rechercher…`,"home:searchResources":`Rechercher des ressources…`,"home:noMatchingResources":`Aucune ressource correspondante.`,"globalSearch:title":`Recherche globale`,"globalSearch:description":`Rechercher dans toutes les ressources et tous les enregistrements.`,"globalSearch:trigger":`Rechercher…`,"globalSearch:placeholder":`Rechercher dans toutes les ressources…`,"globalSearch:hint":`Commencez à taper pour rechercher dans toutes les ressources.`,"globalSearch:noResults":`Aucun enregistrement correspondant.`,"globalSearch:error":`Échec de la recherche. Veuillez réessayer.`,"globalSearch:hotkey":`Ouvrir la recherche globale`,"globalSearch:matchedIn":`dans {field}`,"globalSearch:recent":`Recherches récentes`,"globalSearch:clearRecent":`Effacer`,"globalSearch:showAllIn":`Tout afficher dans {resource}`,"common:pageOf":`Page {page} sur {total}`,"common:firstPage":`Première page`,"common:previousPage":`Page précédente`,"common:nextPage":`Page suivante`,"common:lastPage":`Dernière page`,"common:recordsCount":`{count} enregistrements`,"common:selectedCount":`{count} sélectionné(s)`,"common:selectRow":`Sélectionner la ligne`,"common:selectAll":`Tout sélectionner`,"common:deleteSelected":`Supprimer la sélection`,"common:bulkDeleteConfirm":`Supprimer les {count} enregistrements sélectionnés ?`,"toast:bulkDeleted":`{count} enregistrements supprimés`,"toast:bulkDeleteFailed":`Échec de la suppression des enregistrements`,"common:from":`De`,"common:to":`À`,"common:sortBy":`Trier par`,"common:next":`Suivant`,"common:previous":`Précédent`,"common:relatedRecords":`Enregistrements liés`,"common:viewAll":`Tout afficher`,"common:noRelatedRecords":`Aucun enregistrement lié.`,"common:preview":`Aperçu`,"common:download":`Télécharger`,"common:openInNewTab":`Ouvrir dans un nouvel onglet`,"common:format":`Formater`,"common:invalidJson":`JSON invalide`,"common:showPassword":`Afficher le mot de passe`,"common:hidePassword":`Masquer le mot de passe`,"common:shortcutsHelp":`Raccourcis clavier`,"common:shortcutsEmpty":`Aucun raccourci disponible sur cet écran.`,"auth:title":`Connexion`,"auth:subtitle":`Saisissez votre e-mail et votre mot de passe`,"auth:tagline":`Le panneau d'administration moderne pour toute stack.`,"auth:orContinueWith":`Ou continuer avec`,"auth:continueWith":`Continuer avec {provider}`,"common:chooseFile":`Choisir un fichier`,"common:chooseFiles":`Choisir des fichiers`,"common:dragAndDrop":`Glisser-déposer ou`,"common:chooseAFile":`choisir un fichier`,"common:addMoreFiles":`ajouter d'autres fichiers`,"common:uploading":`Téléversement…`,"common:uploadingFile":`Téléversement de {name}…`,"common:removeFile":`Supprimer le fichier`,"common:uploadFailed":`Échec du téléversement`,"common:dismiss":`Fermer`,"common:openCalendar":`Ouvrir le calendrier`,"common:time":`Heure`,"common:downloadFailed":`Échec du téléchargement`,"richtext:bold":`Gras`,"richtext:italic":`Italique`,"richtext:strikethrough":`Barré`,"richtext:inlineCode":`Code en ligne`,"richtext:heading":`Titre {level}`,"richtext:bulletList":`Liste à puces`,"richtext:numberedList":`Liste numérotée`,"richtext:blockquote":`Citation`,"richtext:horizontalRule":`Ligne horizontale`,"richtext:insertLink":`Insérer un lien`,"richtext:undo":`Annuler`,"richtext:redo":`Refaire`,"richtext:source":`Source ({format})`,"richtext:splitView":`Vue partagée`,"richtext:visualEditor":`Éditeur visuel`,"richtext:fullscreen":`Plein écran`,"richtext:exitFullscreen":`Quitter le plein écran`,"richtext:urlPrompt":`URL`,"common:saving":`Enregistrement…`,"common:done":`Terminé`,"settings:menuItem":`Paramètres`,"settings:noSectionsConfigured":`Aucune section de paramètres n’est disponible pour ce déploiement.`,"settings:apiKeys.title":`Clés API`,"settings:apiKeys.description":`Jetons d'accès programmatique à l'API d'administration. Chaque clé porte un ensemble de permissions qui limite les ressources et actions qu'elle peut invoquer.`,"settings:apiKeys.actions.create":`Nouvelle clé`,"settings:apiKeys.actions.edit":`Modifier`,"settings:apiKeys.actions.revoke":`Révoquer`,"settings:apiKeys.empty.title":`Aucune clé API`,"settings:apiKeys.empty.description":`Créez votre première clé pour accorder un accès programmatique.`,"settings:apiKeys.columns.name":`Nom`,"settings:apiKeys.columns.start":`Préfixe`,"settings:apiKeys.columns.permissions":`Permissions`,"settings:apiKeys.columns.expiresAt":`Expire`,"settings:apiKeys.columns.enabled":`Activée`,"settings:apiKeys.columns.actions":`Actions`,"settings:apiKeys.lastUsed":`Dernière utilisation {date}`,"settings:apiKeys.expiresNever":`Jamais`,"settings:apiKeys.permissions.resource":`Ressource`,"settings:apiKeys.permissions.actions":`Actions`,"settings:apiKeys.permissions.selectAll":`Tout sélectionner`,"settings:apiKeys.permissions.clearAll":`Tout effacer`,"settings:apiKeys.permissions.none":`Aucune permission`,"settings:apiKeys.permissions.summary":`{resources} ressources · {actions} actions`,"settings:apiKeys.permissions.noResources":`Aucune ressource enregistrée.`,"settings:apiKeys.permissions.selectAllResources":`Sélectionner toutes les ressources et actions`,"settings:apiKeys.permissions.clearAllResources":`Effacer toutes les ressources et actions`,"settings:apiKeys.editor.titleCreate":`Nouvelle clé API`,"settings:apiKeys.editor.titleEdit":`Modifier la clé API`,"settings:apiKeys.editor.description":`Choisissez un nom explicite et n'accordez que les ressources et actions dont cette clé a réellement besoin.`,"settings:apiKeys.editor.name":`Nom`,"settings:apiKeys.editor.namePlaceholder":`ex. bot de déploiement CI`,"settings:apiKeys.editor.expiresInDays":`Expire dans (jours)`,"settings:apiKeys.editor.expiresPlaceholder":`jamais`,"settings:apiKeys.editor.expiresHint":`Laissez vide pour ne jamais expirer. Maximum 3650 jours.`,"settings:apiKeys.editor.permissions":`Permissions`,"settings:apiKeys.editor.selectedActions":`{count} sélectionnées`,"settings:apiKeys.created.title":`Clé API créée`,"settings:apiKeys.created.description":`Copiez la clé maintenant — elle ne sera plus affichée.`,"settings:apiKeys.created.warning":`C'est la seule fois où vous verrez la clé complète. Conservez-la en lieu sûr.`,"settings:apiKeys.created.reveal":`Afficher la clé`,"settings:apiKeys.created.hide":`Masquer la clé`,"settings:apiKeys.created.copy":`Copier`,"settings:apiKeys.created.copied":`Copiée`,"settings:apiKeys.notice.revoked":`Clé API révoquée`,"settings:apiKeys.notice.updated":`Clé API mise à jour`,"settings:apiKeys.notice.copied":`Copiée dans le presse-papiers`,"settings:apiKeys.notice.copyFailed":`Impossible de copier dans le presse-papiers`,"settings:apiKeys.confirmRevoke.title":`Révoquer la clé API`,"settings:apiKeys.confirmRevoke.description":`Révoquer « {name} » ? Tout service utilisant cette clé cessera immédiatement de fonctionner.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
90
+
91
+ Example:
92
+ {
93
+ "Authorization": "Bearer <token>",
94
+ "X-Source": "modern-admin"
95
+ }
96
+
97
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
98
+
99
+ Example:
100
+ {
101
+ "status": "published",
102
+ "role": "admin"
103
+ }
104
+
105
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Tableau de bord`,"chart:addChart":`Ajouter un graphique`,"chart:newChart":`Nouveau graphique`,"chart:editChart":`Modifier le graphique`,"chart:deleteChart":`Supprimer le graphique`,"chart:noCharts":`Aucun graphique`,"chart:noChartsHint":`Ajoutez un graphique pour commencer à surveiller vos données.`,"chart:addGroup":`Ajouter un groupe`,"chart:newGroup":`Nouveau groupe`,"chart:editGroup":`Modifier le groupe`,"chart:deleteGroup":`Supprimer le groupe`,"chart:saveGroup":`Enregistrer le groupe`,"chart:groupName":`Nom du groupe`,"chart:groupNamePlaceholder":`p. ex. Indicateurs commerciaux`,"chart:groupNameRequired":`Le nom du groupe est requis`,"chart:groupOrder":`Ordre du groupe`,"chart:order":`Ordre`,"chart:orderHint":`Les plus petites valeurs apparaissent en premier.`,"chart:moveToGroup":`Déplacer vers le groupe`,"chart:moveChart":`Déplacer le graphique`,"chart:moveGroup":`Groupe`,"chart:moveNoGroups":`Aucun groupe pour l'instant.`,"chart:moveNoGroupsHint":`Créez d'abord un groupe pour organiser vos graphiques.`,"chart:deleteChartConfirm":`Supprimer ce graphique ?`,"chart:deleteChartConfirmHint":`Cette action est irréversible.`,"chart:deleteGroupConfirm":`Supprimer ce groupe ?`,"chart:deleteGroupConfirmHint":`Le groupe et ses {count} graphique(s) seront définitivement supprimés.`,"chart:title":`Titre`,"chart:titlePlaceholder":`ex. Nouveaux utilisateurs par jour`,"chart:untitled":`Sans titre`,"chart:chartType":`Type de graphique`,"chart:resource":`Ressource`,"chart:groupBy":`Regrouper par`,"chart:step":`Pas`,"chart:metric":`Métrique`,"chart:aggregateField":`Champ d'agrégation`,"chart:selectField":`Sélectionner un champ…`,"chart:saveChart":`Enregistrer le graphique`,"chart:typeLine":`Ligne`,"chart:typeArea":`Aire`,"chart:typeBar":`Barres`,"chart:typePie":`Camembert`,"chart:stepDay":`Jour`,"chart:stepWeek":`Semaine`,"chart:stepMonth":`Mois`,"chart:stepYear":`Année`,"chart:metricCount":`Nombre`,"chart:metricSum":`Somme`,"chart:metricAvg":`Moyenne`,"chart:noData":`Aucune donnée pour la période sélectionnée`,"chart:loadError":`Impossible de charger les données du graphique`,"chart:value":`Valeur`,"dashboard:vis":`Visualisation`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Ligne`,"dashboard:visArea":`Aire`,"dashboard:visBar":`Barres`,"dashboard:visPie":`Camembert`,"dashboard:metricCount":`Nombre`,"dashboard:metricSum":`Somme`,"dashboard:metricAvg":`Moyenne`,"dashboard:metricMin":`Min`,"dashboard:metricMax":`Max`,"dashboard:builder.range":`Période`,"dashboard:builder.filters":`Filtres`,"dashboard:builder.filtersHint":`Restreindre le jeu de données avant l'agrégation. Cochez un filtre pour l'afficher au-dessus du graphique.`,"dashboard:builder.quickFilterHint":`Afficher ce filtre au-dessus du graphique sur le tableau de bord.`,"dashboard:builder.quickFilterToggle":`Exposer {field} comme filtre rapide`,"dashboard:range.7d":`7j`,"dashboard:range.30d":`30j`,"dashboard:range.90d":`90j`,"dashboard:range.1y":`1an`,"dashboard:range.all":`Tout`,"dashboard:range.custom":`Personnalisé`,"dashboard:widget.previousPeriod":`vs. période précédente`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Réduire à la moitié`,"dashboard:widget.expand":`Étendre sur toute la ligne`,"dashboard:widget.toggleSql":`Afficher le SQL`,"dashboard:widget.unsupported":`Les graphiques ne sont pas encore pris en charge pour votre base de données.`,"dashboard:widget.truncatedWarning":`Affichage de données partielles — trop de lignes pour agréger toute la plage.`,"dashboard:widget.showAll":`Tout afficher`,"dashboard:widget.hideAll":`Tout masquer`,"dashboard:seriesTotal":`Total`,"dashboard:seriesOther":`Autres`,"dashboard:seriesNull":`Vide`,"dashboard:builder.dateField":`Champ de date`,"dashboard:builder.dateFieldHint":`L'axe X est groupé par cette colonne de date.`,"dashboard:builder.secondaryGroupBy":`Répartition`,"dashboard:builder.noBreakdown":`Série unique`,"dashboard:builder.topN":`Max. séries`,"dashboard:builder.width":`Largeur`,"dashboard:width.half":`Moitié`,"dashboard:width.full":`Pleine largeur`,"dashboard:builder.comparePrevious":`Comparer à la période précédente`,"dashboard:builder.comparePreviousHint":`Superpose la période précédente de même durée en ligne pointillée et affiche la variation à côté du titre.`,"dashboard:builder.comparePreviousDisabled":`Indisponible avec une répartition.`,"dashboard:builder.transform":`Transformation des valeurs`,"dashboard:builder.transformHint":`Appliquée aux valeurs avant affichage — p. ex. diviser par 100 pour afficher les centimes en euros.`,"dashboard:builder.transformAdd":`Ajouter une étape`,"dashboard:builder.transformRemove":`Supprimer l'étape`,"dashboard:builder.opDivide":`Diviser par`,"dashboard:builder.opMultiply":`Multiplier par`,"dashboard:builder.opAdd":`Ajouter`,"dashboard:builder.opSubtract":`Soustraire`,"dashboard:builder.format":`Format des valeurs`,"dashboard:builder.formatStyle":`Style`,"dashboard:builder.formatNumber":`Nombre`,"dashboard:builder.formatCurrency":`Devise`,"dashboard:builder.formatPercent":`Pourcentage`,"dashboard:builder.formatCurrencyCode":`Code de devise`,"dashboard:builder.formatDecimals":`Décimales`,"dashboard:builder.formatCompact":`Nombres compacts (12,5 k)`,"dashboard:builder.formatPrefix":`Préfixe`,"dashboard:builder.formatSuffix":`Suffixe`,"dashboard:builder.color":`Couleur de la série`,"dashboard:widget.previousSeries":`{label} (période précédente)`,"dashboard:widget.editColors":`Modifier les couleurs`,"dashboard:widget.colorsTitle":`Couleurs des séries`,"dashboard:widget.colorCustom":`Personnalisé`,"dashboard:widget.colorAuto":`Automatique`,"dashboard:widget.colorPick":`Choisir une couleur`,"dashboard:builder.tabData":`Données`,"dashboard:builder.tabDisplay":`Affichage`,"dashboard:builder.tabFilters":`Filtres`,"dashboard:builder.filtersEmpty":`Cette ressource n’a aucun champ filtrable.`,"history:revisions":`Révisions`,"history:noRevisions":`Aucune révision pour le moment`,"history:loadError":`Impossible de charger l’historique des modifications`,"history:revert":`Restaurer`,"history:confirmRevert":`Restaurer cette révision ?`,"history:revertSuccess":`Révision restaurée`,"history:revertFailed":`Impossible de restaurer la révision`,"history:unknownUser":`Utilisateur inconnu`,"history:changes":`modifications`,"history:compareTo":`Comparer à`,"history:storedDiff":`Diff des changements`,"history:op.create":`Créé`,"history:op.update":`Mis à jour`,"history:op.delete":`Supprimé`,"diff:added":`Ajouté`,"diff:changed":`Modifié`,"diff:removed":`Supprimé`,"diff:before":`Avant`,"diff:after":`Après`,"diff:noChanges":`Aucune modification de champ enregistrée`,"audit:title":`Activité`,"audit:resource":`Ressource`,"audit:action":`Action`,"audit:recordId":`ID enregistrement`,"audit:userId":`ID utilisateur`,"audit:allResources":`Toutes les ressources`,"audit:allActions":`Toutes les actions`,"audit:noEvents":`Aucune activité pour le moment`,"audit:records":`enregistrements`,"audit:loadError":`Impossible de charger l’activité`,"audit:by":`par {user}`,"audit:viewRecord":`Voir l’enregistrement`,"audit:viewChanges":`Voir les modifications`,"audit:hideChanges":`Masquer les modifications`,"audit:noDiff":`Détails des modifications indisponibles`,"audit:loadDiffError":`Échec du chargement des modifications`,"audit:action.new":`Enregistrement créé`,"audit:action.edit":`Enregistrement mis à jour`,"audit:action.delete":`Enregistrement supprimé`,"audit:action.bulkDelete":`Enregistrements supprimés`,"audit:action.login":`Connexion`,"audit:action.apiKeyCreate":`Clé API créée`,"audit:action.apiKeyUpdate":`Clé API mise à jour`,"audit:action.apiKeyDelete":`Clé API supprimée`,"audit:virtualResource.auth":`Authentification`,"audit:virtualResource.apiKeys":`Clés API`,"audit:prevPage":`Précédent`,"audit:nextPage":`Suivant`,"audit:dateRangePlaceholder":`Sélectionner une plage de dates`,"keyValue:noMatches":`Aucune correspondance — appuyez sur Entrée pour conserver « {value} ».`,"aiAssistant:queue.cancel":`Retirer de la file`,"aiAssistant:title":`Assistant IA`,"aiAssistant:fab.label":`Ouvrir l’assistant IA`,"aiAssistant:fab.short":`IA`,"aiAssistant:description":`Posez des questions sur les enregistrements, relations, rapports et tendances de données.`,"aiAssistant:notConfigured.title":`L’assistant n’est pas configuré`,"aiAssistant:notConfigured.description":`Ajoutez la clé API OpenRouter dans les paramètres pour activer l’assistant IA en lecture seule.`,"aiAssistant:notConfigured.openSettings":`Ouvrir les paramètres`,"aiAssistant:tryAsking":`Essayez de demander :`,"aiAssistant:tryAsking.example1":`Quels clients ont le plus de publications ?`,"aiAssistant:tryAsking.example2":`Affiche les enregistrements récemment créés d’une ressource.`,"aiAssistant:tryAsking.example3":`Explique les relations entre des enregistrements précis.`,"aiAssistant:thinking":`Réflexion`,"aiAssistant:thinkingProgress":`Réflexion ({progress}%)`,"aiAssistant:input.placeholder":`Posez une question sur vos données…`,"aiAssistant:input.hint":`Entrée pour envoyer · Maj+Entrée pour une nouvelle ligne`,"aiAssistant:send":`Envoyer le message`,"aiAssistant:newChat":`Nouveau chat`,"aiAssistant:history":`Historique des chats`,"aiAssistant:history.empty":`Aucun chat précédent`,"aiAssistant:noText":`Voici les enregistrements liés trouvés00a0:`,"aiAssistant:fallback.noToolResult":`La requête a été exécutée, mais le modèle n’a pas renvoyé de réponse textuelle. Précisez la question ou activez les journaux de débogage pour inspecter le résultat de l’outil.`,"aiAssistant:fallback.noRows":`Aucun enregistrement trouvé pour cette requête.`,"aiAssistant:fallback.rowsFound":`Lignes trouvées00a0: {count}.`,"aiAssistant:taskFailed":`Échec de la tâche de l’assistant IA`,"aiAssistant:settings.title":`Assistant IA`,"aiAssistant:settings.description":`Configurez le widget de chat flottant, le modèle et le comportement côté serveur.`,"aiAssistant:settings.enabled":`Activé`,"aiAssistant:settings.disabled":`Désactivé`,"aiAssistant:settings.configured":`Configuré`,"aiAssistant:settings.apiKeyRequired":`Clé API requise`,"aiAssistant:settings.readOnly":`Lecture seule`,"aiAssistant:settings.provider":`Fournisseur : {provider}`,"aiAssistant:settings.enableLabel":`Activer l’assistant`,"aiAssistant:settings.enableHint":`Contrôle la visibilité du widget flottant et du point de terminaison de chat.`,"aiAssistant:settings.modelLabel":`Modèle OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Clé API OpenRouter`,"aiAssistant:settings.apiKeyHint":`Laissez vide pour conserver la clé enregistrée côté serveur.`,"aiAssistant:settings.systemPromptLabel":`Surcharge du prompt système`,"aiAssistant:settings.systemPromptPlaceholder":`Instructions optionnelles spécifiques au projet`,"aiAssistant:settings.accessTitle":`Modèle d’accès`,"aiAssistant:settings.accessDescription":`L’assistant actuel est limité à l’inspection en lecture seule via les actions de ressource.`,"aiAssistant:settings.futureToolsReady":`Prêt pour de futurs outils`,"aiAssistant:settings.save":`Enregistrer les paramètres`,"aiAssistant:settings.saving":`Enregistrement…`,"aiAssistant:settings.saved":`Paramètres de l’assistant IA enregistrés`,"aiAssistant:settings.empty":`Aucun paramètre disponible.`,"filter:op.co":`Contient`,"filter:op.nco":`Ne contient pas`,"filter:op.sw":`Commence par`,"filter:op.ew":`Se termine par`,"filter:op.eq":`Est égal à`,"filter:op.neq":`N'est pas égal à`,"filter:op.empty":`Est vide`,"filter:op.nempty":`N'est pas vide`,"filter:op.in":`Est l'un de`,"filter:op.gt":`Supérieur à`,"filter:op.lt":`Inférieur à`,"filter:op.between":`Entre`,"filter:searchValues":`Rechercher dans la liste…`,"filter:selectAll":`Tout sélectionner`,"filter:noValues":`Aucune valeur trouvée`,"common:newRecord":`Nouveau {name}`,"common:editRecord":`Modifier {name} #{id}`,"common:themeLight":`Clair`,"common:themeDark":`Sombre`,"common:themeSystem":`Système`,"common:ok":`OK`,"common:select":`Sélectionner…`,"common:removeItem":`Supprimer {title}`,"common:nSelectedAddMore":`{count} sélectionné(s) — en ajouter`,"common:pickRecords":`Choisir des enregistrements`,"common:managePickRecords":`Gérer la sélection ({count})`,"common:pickRecordsFrom":`Choisir dans {name}`,"common:draftRestored":`Brouillon non enregistré restauré`,"common:undoDraftRestore":`Annuler`,"aiFill:button":`Remplir avec l’IA`,"aiFill:dialogTitle":`Remplir le formulaire depuis une photo`,"aiFill:dialogDescription":`Téléversez une image — l’IA extraira les valeurs et remplira le formulaire.`,"aiFill:fillButton":`Reconnaître`,"aiFill:processing":`Reconnaissance de l’image…`,"aiFill:success":`{count} champ(s) rempli(s)`,"aiFill:errorNoFields":`Cette ressource n’a aucun champ remplissable par l’IA.`,"aiFill:errorGeneric":`Échec du remplissage par l’IA : {message}`,"aiFill:noValues":`L’IA n’a pu extraire aucune valeur de cette image.`,"aiFill:applied":`L'IA a rempli {count} champ(s). Annulable ci-dessous.`,"wizard:stepOf":`Étape {current} sur {total}`,"wizard:products.step1":`Informations de base`,"wizard:products.step2":`Tarification`,"wizard:products.step3":`Médias et tags`,"common:invalidValue":`Valeur invalide`,"common:collapseSidebar":`Réduire la barre latérale`,"common:expandSidebar":`Développer la barre latérale`,"common:toggleSidebar":`Basculer la barre latérale`,"common:sidebarTitle":`Barre latérale`,"common:sidebarNavigation":`Menu de navigation`,"cache:title":`Cache`,"cache:description":`État du cache et performances par ressource sur cette réplique.`,"cache:load.error":`Impossible de charger les métriques du cache`,"cache:load.retry":`Réessayer`,"cache:reset.action":`Réinitialiser les métriques`,"cache:reset.loading":`Réinitialisation des métriques du cache…`,"cache:reset.success":`Métriques du cache réinitialisées`,"cache:reset.error":`Échec de la réinitialisation des métriques`,"cache:metric.hitRate":`Taux de succès`,"cache:metric.requests":`Lectures du cache`,"cache:metric.avgCompute":`Calcul moyen`,"cache:metric.errors":`Erreurs`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Tags en quarantaine`,"cache:quarantine.description":`Ces tags contournent le cache jusqu'à la réussite de l'invalidation.`,"cache:invalidate.title":`Invalider le cache de la ressource`,"cache:invalidate.description":`Supprime les listes et enregistrements de la ressource sur les répliques configurées.`,"cache:invalidate.resource":`Ressource`,"cache:invalidate.action":`Invalider le cache`,"cache:invalidate.loading":`Invalidation du cache…`,"cache:invalidate.success":`Cache de la ressource invalidé`,"cache:invalidate.error":`Échec de l'invalidation du cache de la ressource`,"cache:table.title":`Métriques par espace de noms`,"cache:table.empty":`Aucune activité du cache enregistrée.`,"cache:instance":`Réplique {id}`,"cache:table.namespace":`Espace de noms`,"cache:table.resource":`Ressource`,"cache:table.hits":`Succès`,"cache:table.misses":`Échecs`,"cache:table.computes":`Calculs`,"cache:table.coalesced":`Regroupés`,"cache:table.errors":`Erreurs`}},{code:`es`,name:`Español`,dict:{"common:appName":`Modern Admin`,"common:home":`Inicio`,"common:search":`Buscar`,"common:loading":`Cargando…`,"common:save":`Guardar`,"common:cancel":`Cancelar`,"common:delete":`Eliminar`,"common:create":`Crear`,"common:edit":`Editar`,"common:show":`Ver`,"common:back":`Atrás`,"common:noRecords":`No hay registros.`,"common:noRecordsHint":`Comience creando un nuevo {resource}.`,"common:noMatchingRecords":`Ningún registro coincide con tus filtros.`,"common:clearFilters":`Borrar filtros`,"common:confirmDelete":`¿Eliminar este registro?`,"common:confirmAction":`Confirmar acción`,"common:confirm":`Confirmar`,"common:perPage":`Por página`,"common:page":`Página`,"common:of":`de`,"common:total":`Total`,"auth:login":`Iniciar sesión`,"auth:logout":`Cerrar sesión`,"auth:email":`Correo`,"auth:password":`Contraseña`,"auth:loginFailed":`Credenciales no válidas.`,"errors:notFound":`No encontrado.`,"errors:forbidden":`No tienes acceso a este recurso.`,"errors:server":`Algo salió mal. Inténtalo de nuevo.`,"common:resources":`Recursos`,"common:actions":`Acciones`,"action:notFound":`La acción «{action}» no está disponible en este recurso.`,"action:componentMissing":`No hay ningún componente llamado «{component}» registrado.`,"action:componentMissingHint":`Regístralo en el ComponentLoader que pasas a <ModernAdminProvider components={…}>.`,"action:loadFailed":`No se pudo cargar la acción.`,"common:new":`Nuevo`,"common:rowsPerPage":`Filas por página`,"common:filter":`Filtrar {label}…`,"validation:required":`{label} es obligatorio`,"validation:invalidNumber":`{label} debe ser un número válido`,"validation:invalidInteger":`{label} debe ser un entero`,"validation:invalidEmail":`{label} debe ser un correo válido`,"validation:invalidUrl":`{label} debe ser una URL válida`,"validation:invalidDate":`{label} debe ser una fecha válida`,"validation:invalidUuid":`{label} debe ser un UUID válido`,"validation:tooShort":`{label} debe tener al menos {min} caracteres`,"validation:tooLong":`{label} debe tener como máximo {max} caracteres`,"validation:notInList":`{label} tiene un valor no válido`,"validation:emptySelection":`Selecciona al menos un valor para {label}`,"toast:created":`Creado correctamente`,"toast:saved":`Guardado correctamente`,"toast:deleted":`Eliminado correctamente`,"toast:createFailed":`Error al crear`,"toast:saveFailed":`Error al guardar`,"toast:deleteFailed":`Error al eliminar`,"toast:loadFailed":`Error al cargar`,"toast:validationFailed":`Corrige los errores e inténtalo de nuevo`,"common:close":`Cerrar`,"common:export":`Exportar`,"export:title":`Exportar registros`,"export:description":`Descargar todos los registros coincidentes de {resource} en un único archivo.`,"export:csvHint":`Valores separados por comas`,"export:jsonHint":`Array JSON estructurado`,"export:downloading":`Preparando descarga…`,"export:progress":`Cargados {loaded} de {total}…`,"export:exported":`{count} registros exportados`,"export:exportFailed":`Error al exportar registros`,"common:apply":`Aplicar`,"common:clear":`Limpiar`,"common:filters":`Filtros`,"common:columns":`Columnas`,"common:toggleColumns":`Mostrar columnas`,"common:openMenu":`Abrir menú`,"common:refresh":`Actualizar`,"common:copy":`Copiar`,"common:copied":`¡Copiado!`,"common:applyFilters":`Aplicar filtros`,"common:clearAll":`Limpiar todo`,"common:any":`Cualquiera`,"common:yes":`Sí`,"common:no":`No`,"common:filterPlaceholder":`Filtrar…`,"common:loadFailed":`Error al cargar: {error}`,"common:theme":`Tema`,"common:language":`Idioma`,"common:toggleTheme":`Cambiar tema`,"common:clearSelection":`Borrar selección`,"common:searchPlaceholder":`Buscar…`,"home:searchResources":`Buscar recursos…`,"home:noMatchingResources":`No se encontraron recursos coincidentes.`,"globalSearch:title":`Búsqueda global`,"globalSearch:description":`Buscar en todos los recursos y registros.`,"globalSearch:trigger":`Buscar…`,"globalSearch:placeholder":`Buscar en todos los recursos…`,"globalSearch:hint":`Empieza a escribir para buscar en todos los recursos.`,"globalSearch:noResults":`No se encontraron registros coincidentes.`,"globalSearch:error":`Error en la búsqueda. Inténtalo de nuevo.`,"globalSearch:hotkey":`Abrir búsqueda global`,"globalSearch:matchedIn":`en {field}`,"globalSearch:recent":`Búsquedas recientes`,"globalSearch:clearRecent":`Borrar`,"globalSearch:showAllIn":`Ver todo en {resource}`,"common:pageOf":`Página {page} de {total}`,"common:firstPage":`Primera página`,"common:previousPage":`Página anterior`,"common:nextPage":`Página siguiente`,"common:lastPage":`Última página`,"common:recordsCount":`{count} registros`,"common:selectedCount":`{count} seleccionados`,"common:selectRow":`Seleccionar fila`,"common:selectAll":`Seleccionar todo`,"common:deleteSelected":`Eliminar seleccionados`,"common:bulkDeleteConfirm":`¿Eliminar {count} registros seleccionados?`,"toast:bulkDeleted":`{count} registros eliminados`,"toast:bulkDeleteFailed":`Error al eliminar los registros`,"common:from":`Desde`,"common:to":`Hasta`,"common:sortBy":`Ordenar por`,"common:next":`Siguiente`,"common:previous":`Anterior`,"common:relatedRecords":`Registros relacionados`,"common:viewAll":`Ver todos`,"common:noRelatedRecords":`Sin registros relacionados.`,"common:preview":`Vista previa`,"common:download":`Descargar`,"common:openInNewTab":`Abrir en una pestaña nueva`,"common:format":`Formatear`,"common:invalidJson":`JSON inválido`,"common:showPassword":`Mostrar contraseña`,"common:hidePassword":`Ocultar contraseña`,"common:shortcutsHelp":`Atajos de teclado`,"common:shortcutsEmpty":`No hay atajos disponibles en esta pantalla.`,"auth:title":`Iniciar sesión`,"auth:subtitle":`Ingrese su correo y contraseña para iniciar sesión`,"auth:tagline":`El panel de administración moderno para cualquier stack.`,"auth:orContinueWith":`O continuar con`,"auth:continueWith":`Continuar con {provider}`,"common:chooseFile":`Elegir archivo`,"common:chooseFiles":`Elegir archivos`,"common:dragAndDrop":`Arrastra y suelta o`,"common:chooseAFile":`elegir un archivo`,"common:addMoreFiles":`agregar más archivos`,"common:uploading":`Subiendo…`,"common:uploadingFile":`Subiendo {name}…`,"common:removeFile":`Quitar archivo`,"common:uploadFailed":`Error al subir`,"common:dismiss":`Cerrar`,"common:openCalendar":`Abrir calendario`,"common:time":`Hora`,"common:downloadFailed":`Error al descargar`,"richtext:bold":`Negrita`,"richtext:italic":`Cursiva`,"richtext:strikethrough":`Tachado`,"richtext:inlineCode":`Código en línea`,"richtext:heading":`Encabezado {level}`,"richtext:bulletList":`Lista con viñetas`,"richtext:numberedList":`Lista numerada`,"richtext:blockquote":`Cita en bloque`,"richtext:horizontalRule":`Línea horizontal`,"richtext:insertLink":`Insertar enlace`,"richtext:undo":`Deshacer`,"richtext:redo":`Rehacer`,"richtext:source":`Fuente ({format})`,"richtext:splitView":`Vista dividida`,"richtext:visualEditor":`Editor visual`,"richtext:fullscreen":`Pantalla completa`,"richtext:exitFullscreen":`Salir de pantalla completa`,"richtext:urlPrompt":`URL`,"common:saving":`Guardando…`,"common:done":`Listo`,"settings:menuItem":`Ajustes`,"settings:noSectionsConfigured":`No hay secciones de ajustes disponibles en esta instalación.`,"settings:apiKeys.title":`Claves de API`,"settings:apiKeys.description":`Tokens de acceso programático a la API de administración. Cada clave incluye un conjunto de permisos que limita los recursos y acciones que puede invocar.`,"settings:apiKeys.actions.create":`Nueva clave`,"settings:apiKeys.actions.edit":`Editar`,"settings:apiKeys.actions.revoke":`Revocar`,"settings:apiKeys.empty.title":`Aún no hay claves`,"settings:apiKeys.empty.description":`Crea tu primera clave para conceder acceso programático.`,"settings:apiKeys.columns.name":`Nombre`,"settings:apiKeys.columns.start":`Prefijo`,"settings:apiKeys.columns.permissions":`Permisos`,"settings:apiKeys.columns.expiresAt":`Expira`,"settings:apiKeys.columns.enabled":`Activa`,"settings:apiKeys.columns.actions":`Acciones`,"settings:apiKeys.lastUsed":`Último uso {date}`,"settings:apiKeys.expiresNever":`Nunca`,"settings:apiKeys.permissions.resource":`Recurso`,"settings:apiKeys.permissions.actions":`Acciones`,"settings:apiKeys.permissions.selectAll":`Seleccionar todo`,"settings:apiKeys.permissions.clearAll":`Limpiar todo`,"settings:apiKeys.permissions.none":`Sin permisos`,"settings:apiKeys.permissions.summary":`{resources} recursos · {actions} acciones`,"settings:apiKeys.permissions.noResources":`No hay recursos registrados.`,"settings:apiKeys.permissions.selectAllResources":`Seleccionar todos los recursos y acciones`,"settings:apiKeys.permissions.clearAllResources":`Borrar todos los recursos y acciones`,"settings:apiKeys.editor.titleCreate":`Nueva clave de API`,"settings:apiKeys.editor.titleEdit":`Editar clave de API`,"settings:apiKeys.editor.description":`Elige un nombre descriptivo y concede solo los recursos y acciones que esta clave necesita.`,"settings:apiKeys.editor.name":`Nombre`,"settings:apiKeys.editor.namePlaceholder":`p. ej. bot de despliegue CI`,"settings:apiKeys.editor.expiresInDays":`Expira en (días)`,"settings:apiKeys.editor.expiresPlaceholder":`nunca`,"settings:apiKeys.editor.expiresHint":`Déjalo en blanco para que no caduque. Máximo 3650 días.`,"settings:apiKeys.editor.permissions":`Permisos`,"settings:apiKeys.editor.selectedActions":`{count} seleccionadas`,"settings:apiKeys.created.title":`Clave de API creada`,"settings:apiKeys.created.description":`Copia la clave ahora — no se mostrará de nuevo.`,"settings:apiKeys.created.warning":`Esta es la única vez que verás la clave completa. Guárdala en un lugar seguro.`,"settings:apiKeys.created.reveal":`Mostrar clave`,"settings:apiKeys.created.hide":`Ocultar clave`,"settings:apiKeys.created.copy":`Copiar`,"settings:apiKeys.created.copied":`Copiada`,"settings:apiKeys.notice.revoked":`Clave de API revocada`,"settings:apiKeys.notice.updated":`Clave de API actualizada`,"settings:apiKeys.notice.copied":`Copiada al portapapeles`,"settings:apiKeys.notice.copyFailed":`No se pudo copiar al portapapeles`,"settings:apiKeys.confirmRevoke.title":`Revocar clave de API`,"settings:apiKeys.confirmRevoke.description":`¿Revocar «{name}»? Cualquier servicio que use esta clave dejará de funcionar inmediatamente.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
106
+
107
+ Example:
108
+ {
109
+ "Authorization": "Bearer <token>",
110
+ "X-Source": "modern-admin"
111
+ }
112
+
113
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
114
+
115
+ Example:
116
+ {
117
+ "status": "published",
118
+ "role": "admin"
119
+ }
120
+
121
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Panel de control`,"chart:addChart":`Añadir gráfico`,"chart:newChart":`Nuevo gráfico`,"chart:editChart":`Editar gráfico`,"chart:deleteChart":`Eliminar gráfico`,"chart:noCharts":`Sin gráficos todavía`,"chart:noChartsHint":`Añada un gráfico para empezar a monitorear sus datos.`,"chart:addGroup":`Añadir grupo`,"chart:newGroup":`Nuevo grupo`,"chart:editGroup":`Editar grupo`,"chart:deleteGroup":`Eliminar grupo`,"chart:saveGroup":`Guardar grupo`,"chart:groupName":`Nombre del grupo`,"chart:groupNamePlaceholder":`p. ej. Métricas de ventas`,"chart:groupNameRequired":`El nombre del grupo es obligatorio`,"chart:groupOrder":`Orden del grupo`,"chart:order":`Orden`,"chart:orderHint":`Los valores menores aparecen primero.`,"chart:moveToGroup":`Mover al grupo`,"chart:moveChart":`Mover gráfico`,"chart:moveGroup":`Grupo`,"chart:moveNoGroups":`Aún no hay grupos.`,"chart:moveNoGroupsHint":`Crea un grupo primero para organizar tus gráficos.`,"chart:deleteChartConfirm":`¿Eliminar este gráfico?`,"chart:deleteChartConfirmHint":`Esta acción no se puede deshacer.`,"chart:deleteGroupConfirm":`¿Eliminar este grupo?`,"chart:deleteGroupConfirmHint":`Esto eliminará permanentemente el grupo y los {count} gráfico(s) que contiene.`,"chart:title":`Título`,"chart:titlePlaceholder":`p. ej. Nuevos usuarios por día`,"chart:untitled":`Sin título`,"chart:chartType":`Tipo de gráfico`,"chart:resource":`Recurso`,"chart:groupBy":`Agrupar por`,"chart:step":`Paso`,"chart:metric":`Métrica`,"chart:aggregateField":`Campo de agregación`,"chart:selectField":`Seleccionar campo…`,"chart:saveChart":`Guardar gráfico`,"chart:typeLine":`Líneas`,"chart:typeArea":`Área`,"chart:typeBar":`Barras`,"chart:typePie":`Circular`,"chart:stepDay":`Día`,"chart:stepWeek":`Semana`,"chart:stepMonth":`Mes`,"chart:stepYear":`Año`,"chart:metricCount":`Recuento`,"chart:metricSum":`Suma`,"chart:metricAvg":`Promedio`,"chart:noData":`Sin datos para el período seleccionado`,"chart:loadError":`Error al cargar los datos del gráfico`,"chart:value":`Valor`,"dashboard:vis":`Visualización`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Líneas`,"dashboard:visArea":`Área`,"dashboard:visBar":`Barras`,"dashboard:visPie":`Circular`,"dashboard:metricCount":`Cantidad`,"dashboard:metricSum":`Suma`,"dashboard:metricAvg":`Promedio`,"dashboard:metricMin":`Mínimo`,"dashboard:metricMax":`Máximo`,"dashboard:builder.range":`Rango temporal`,"dashboard:builder.filters":`Filtros`,"dashboard:builder.filtersHint":`Acotar el conjunto antes de agregar. Marca un filtro para exponerlo encima del gráfico.`,"dashboard:builder.quickFilterHint":`Mostrar este filtro encima del gráfico en el panel.`,"dashboard:builder.quickFilterToggle":`Exponer {field} como filtro rápido`,"dashboard:range.7d":`7d`,"dashboard:range.30d":`30d`,"dashboard:range.90d":`90d`,"dashboard:range.1y":`1a`,"dashboard:range.all":`Todo`,"dashboard:range.custom":`Personalizado`,"dashboard:widget.previousPeriod":`vs. período anterior`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Reducir a la mitad`,"dashboard:widget.expand":`Expandir a fila completa`,"dashboard:widget.toggleSql":`Mostrar SQL`,"dashboard:widget.unsupported":`Los gráficos aún no son compatibles con tu base de datos.`,"dashboard:widget.truncatedWarning":`Mostrando datos parciales: demasiadas filas para agregar todo el rango.`,"dashboard:widget.showAll":`Mostrar todo`,"dashboard:widget.hideAll":`Ocultar todo`,"dashboard:seriesTotal":`Total`,"dashboard:seriesOther":`Otros`,"dashboard:seriesNull":`Vacío`,"dashboard:builder.dateField":`Campo de fecha`,"dashboard:builder.dateFieldHint":`El eje X se agrupa por esta columna de fecha.`,"dashboard:builder.secondaryGroupBy":`Desglose`,"dashboard:builder.noBreakdown":`Serie única`,"dashboard:builder.topN":`Máx. series`,"dashboard:builder.width":`Ancho`,"dashboard:width.half":`Mitad`,"dashboard:width.full":`Completo`,"dashboard:builder.comparePrevious":`Comparar con el período anterior`,"dashboard:builder.comparePreviousHint":`Superpone el período anterior de igual duración como línea discontinua y muestra el cambio junto al título.`,"dashboard:builder.comparePreviousDisabled":`No disponible con un desglose.`,"dashboard:builder.transform":`Transformación de valores`,"dashboard:builder.transformHint":`Se aplica a los valores antes de mostrarlos — p. ej., dividir por 100 para mostrar centavos como dólares.`,"dashboard:builder.transformAdd":`Añadir paso`,"dashboard:builder.transformRemove":`Eliminar paso`,"dashboard:builder.opDivide":`Dividir por`,"dashboard:builder.opMultiply":`Multiplicar por`,"dashboard:builder.opAdd":`Sumar`,"dashboard:builder.opSubtract":`Restar`,"dashboard:builder.format":`Formato de valores`,"dashboard:builder.formatStyle":`Estilo`,"dashboard:builder.formatNumber":`Número`,"dashboard:builder.formatCurrency":`Moneda`,"dashboard:builder.formatPercent":`Porcentaje`,"dashboard:builder.formatCurrencyCode":`Código de moneda`,"dashboard:builder.formatDecimals":`Decimales`,"dashboard:builder.formatCompact":`Números compactos (12,5 mil)`,"dashboard:builder.formatPrefix":`Prefijo`,"dashboard:builder.formatSuffix":`Sufijo`,"dashboard:builder.color":`Color de la serie`,"dashboard:widget.previousSeries":`{label} (período anterior)`,"dashboard:widget.editColors":`Editar colores`,"dashboard:widget.colorsTitle":`Colores de las series`,"dashboard:widget.colorCustom":`Personalizado`,"dashboard:widget.colorAuto":`Automático`,"dashboard:widget.colorPick":`Elegir un color`,"dashboard:builder.tabData":`Datos`,"dashboard:builder.tabDisplay":`Visualización`,"dashboard:builder.tabFilters":`Filtros`,"dashboard:builder.filtersEmpty":`Este recurso no tiene campos filtrables.`,"history:revisions":`Revisiones`,"history:noRevisions":`Aún no hay revisiones`,"history:loadError":`No se pudo cargar el historial de cambios`,"history:revert":`Revertir`,"history:confirmRevert":`¿Revertir a esta revisión?`,"history:revertSuccess":`Revisión restaurada`,"history:revertFailed":`No se pudo restaurar la revisión`,"history:unknownUser":`Usuario desconocido`,"history:changes":`cambios`,"history:compareTo":`Comparar con`,"history:storedDiff":`Diff del cambio`,"history:op.create":`Creado`,"history:op.update":`Actualizado`,"history:op.delete":`Eliminado`,"diff:added":`Añadido`,"diff:changed":`Cambiado`,"diff:removed":`Eliminado`,"diff:before":`Antes`,"diff:after":`Después`,"diff:noChanges":`No se registraron cambios de campos`,"audit:title":`Actividad`,"audit:resource":`Recurso`,"audit:action":`Acción`,"audit:recordId":`ID de registro`,"audit:userId":`ID de usuario`,"audit:allResources":`Todos los recursos`,"audit:allActions":`Todas las acciones`,"audit:noEvents":`Aún no hay actividad`,"audit:records":`registros`,"audit:loadError":`No se pudo cargar la actividad`,"audit:by":`por {user}`,"audit:viewRecord":`Ver registro`,"audit:viewChanges":`Ver cambios`,"audit:hideChanges":`Ocultar cambios`,"audit:noDiff":`Detalles de los cambios no disponibles`,"audit:loadDiffError":`No se pudieron cargar los cambios`,"audit:action.new":`Registro creado`,"audit:action.edit":`Registro actualizado`,"audit:action.delete":`Registro eliminado`,"audit:action.bulkDelete":`Registros eliminados`,"audit:action.login":`Sesión iniciada`,"audit:action.apiKeyCreate":`Clave API creada`,"audit:action.apiKeyUpdate":`Clave API actualizada`,"audit:action.apiKeyDelete":`Clave API eliminada`,"audit:virtualResource.auth":`Autenticación`,"audit:virtualResource.apiKeys":`Claves API`,"audit:prevPage":`Anterior`,"audit:nextPage":`Siguiente`,"audit:dateRangePlaceholder":`Seleccionar rango de fechas`,"keyValue:noMatches":`Sin coincidencias — pulsa Enter para conservar "{value}".`,"aiAssistant:queue.cancel":`Quitar de la cola`,"aiAssistant:title":`Asistente IA`,"aiAssistant:fab.label":`Abrir asistente IA`,"aiAssistant:fab.short":`IA`,"aiAssistant:description":`Haz preguntas sobre registros, relaciones, informes y tendencias de datos.`,"aiAssistant:notConfigured.title":`El asistente no está configurado`,"aiAssistant:notConfigured.description":`Añade la clave API de OpenRouter en los ajustes para activar el asistente IA de solo lectura.`,"aiAssistant:notConfigured.openSettings":`Abrir ajustes`,"aiAssistant:tryAsking":`Pruebe a preguntar:`,"aiAssistant:tryAsking.example1":`¿Qué clientes tienen más publicaciones?`,"aiAssistant:tryAsking.example2":`Muestra registros creados recientemente para un recurso.`,"aiAssistant:tryAsking.example3":`Explica relaciones entre registros concretos.`,"aiAssistant:thinking":`Pensando`,"aiAssistant:thinkingProgress":`Pensando ({progress}%)`,"aiAssistant:input.placeholder":`Pregunta sobre tus datos…`,"aiAssistant:input.hint":`Enter para enviar · Shift+Enter para una nueva línea`,"aiAssistant:send":`Enviar mensaje`,"aiAssistant:newChat":`Nuevo chat`,"aiAssistant:history":`Historial de chats`,"aiAssistant:history.empty":`No hay chats anteriores`,"aiAssistant:noText":`Aquí están los registros relacionados que encontré:`,"aiAssistant:fallback.noToolResult":`Ejecuté la solicitud, pero el modelo no devolvió una respuesta de texto. Prueba a precisar la pregunta o activa los logs de depuración para revisar el resultado de la herramienta.`,"aiAssistant:fallback.noRows":`No se encontraron registros para esta solicitud.`,"aiAssistant:fallback.rowsFound":`Filas encontradas: {count}.`,"aiAssistant:taskFailed":`Tarea del asistente IA fallida`,"aiAssistant:settings.title":`Asistente IA`,"aiAssistant:settings.description":`Configura el widget de chat flotante, el modelo y el comportamiento del asistente en el servidor.`,"aiAssistant:settings.enabled":`Activado`,"aiAssistant:settings.disabled":`Desactivado`,"aiAssistant:settings.configured":`Configurado`,"aiAssistant:settings.apiKeyRequired":`Se requiere clave API`,"aiAssistant:settings.readOnly":`Solo lectura`,"aiAssistant:settings.provider":`Proveedor: {provider}`,"aiAssistant:settings.enableLabel":`Activar asistente`,"aiAssistant:settings.enableHint":`Controla la visibilidad del widget flotante y el endpoint de chat.`,"aiAssistant:settings.modelLabel":`Modelo de OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Clave API de OpenRouter`,"aiAssistant:settings.apiKeyHint":`Déjalo vacío para conservar la clave guardada en el servidor.`,"aiAssistant:settings.systemPromptLabel":`Sobrescribir prompt del sistema`,"aiAssistant:settings.systemPromptPlaceholder":`Instrucciones específicas del proyecto para el asistente (opcional)`,"aiAssistant:settings.accessTitle":`Modelo de acceso`,"aiAssistant:settings.accessDescription":`El asistente actual se limita a inspección de registros en modo solo lectura a través de acciones de recurso.`,"aiAssistant:settings.futureToolsReady":`Listo para futuras herramientas`,"aiAssistant:settings.save":`Guardar ajustes`,"aiAssistant:settings.saving":`Guardando…`,"aiAssistant:settings.saved":`Ajustes del asistente IA guardados`,"aiAssistant:settings.empty":`No hay ajustes disponibles.`,"filter:op.co":`Contiene`,"filter:op.nco":`No contiene`,"filter:op.sw":`Comienza con`,"filter:op.ew":`Termina con`,"filter:op.eq":`Es igual a`,"filter:op.neq":`No es igual a`,"filter:op.empty":`Está vacío`,"filter:op.nempty":`No está vacío`,"filter:op.in":`Es uno de`,"filter:op.gt":`Mayor que`,"filter:op.lt":`Menor que`,"filter:op.between":`Entre`,"filter:searchValues":`Buscar en lista…`,"filter:selectAll":`Seleccionar todo`,"filter:noValues":`No se encontraron valores`,"common:newRecord":`Nuevo {name}`,"common:editRecord":`Editar {name} #{id}`,"common:themeLight":`Claro`,"common:themeDark":`Oscuro`,"common:themeSystem":`Sistema`,"common:ok":`OK`,"common:select":`Seleccionar…`,"common:removeItem":`Eliminar {title}`,"common:nSelectedAddMore":`{count} seleccionado(s) — agregar más`,"common:pickRecords":`Elegir registros`,"common:managePickRecords":`Gestionar selección ({count})`,"common:pickRecordsFrom":`Elegir de {name}`,"common:draftRestored":`Borrador no guardado restaurado`,"common:undoDraftRestore":`Deshacer`,"aiFill:button":`Rellenar con IA`,"aiFill:dialogTitle":`Rellenar formulario desde foto`,"aiFill:dialogDescription":`Sube una imagen — la IA extraerá los valores y rellenará el formulario.`,"aiFill:fillButton":`Reconocer`,"aiFill:processing":`Reconociendo imagen…`,"aiFill:success":`{count} campo(s) rellenado(s)`,"aiFill:errorNoFields":`Este recurso no tiene campos rellenables por IA.`,"aiFill:errorGeneric":`Error al rellenar con IA: {message}`,"aiFill:noValues":`La IA no pudo extraer ningún valor de esta imagen.`,"aiFill:applied":`La IA rellenó {count} campo(s). Puedes deshacer abajo.`,"wizard:stepOf":`Paso {current} de {total}`,"wizard:products.step1":`Información básica`,"wizard:products.step2":`Precios`,"wizard:products.step3":`Medios y etiquetas`,"common:invalidValue":`Valor no válido`,"common:collapseSidebar":`Contraer barra lateral`,"common:expandSidebar":`Expandir barra lateral`,"common:toggleSidebar":`Alternar barra lateral`,"common:sidebarTitle":`Barra lateral`,"common:sidebarNavigation":`Menú de navegación`,"cache:title":`Caché`,"cache:description":`Estado de la caché y rendimiento por recurso en esta réplica.`,"cache:load.error":`No se pudieron cargar las métricas de caché`,"cache:load.retry":`Reintentar`,"cache:reset.action":`Restablecer métricas`,"cache:reset.loading":`Restableciendo métricas de caché…`,"cache:reset.success":`Métricas de caché restablecidas`,"cache:reset.error":`No se pudieron restablecer las métricas`,"cache:metric.hitRate":`Tasa de aciertos`,"cache:metric.requests":`Lecturas de caché`,"cache:metric.avgCompute":`Cálculo medio`,"cache:metric.errors":`Errores`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Etiquetas en cuarentena`,"cache:quarantine.description":`Estas etiquetas omiten la caché hasta que la invalidación se complete.`,"cache:invalidate.title":`Invalidar caché del recurso`,"cache:invalidate.description":`Elimina listas y registros del recurso en todas las réplicas configuradas.`,"cache:invalidate.resource":`Recurso`,"cache:invalidate.action":`Invalidar caché`,"cache:invalidate.loading":`Invalidando caché…`,"cache:invalidate.success":`Caché del recurso invalidada`,"cache:invalidate.error":`No se pudo invalidar la caché del recurso`,"cache:table.title":`Métricas por espacio de nombres`,"cache:table.empty":`Aún no se registró actividad de caché.`,"cache:instance":`Réplica {id}`,"cache:table.namespace":`Espacio de nombres`,"cache:table.resource":`Recurso`,"cache:table.hits":`Aciertos`,"cache:table.misses":`Fallos`,"cache:table.computes":`Cálculos`,"cache:table.coalesced":`Agrupados`,"cache:table.errors":`Errores`}},{code:`it`,name:`Italiano`,dict:{"common:appName":`Modern Admin`,"common:home":`Home`,"common:search":`Cerca`,"common:loading":`Caricamento…`,"common:save":`Salva`,"common:cancel":`Annulla`,"common:delete":`Elimina`,"common:create":`Crea`,"common:edit":`Modifica`,"common:show":`Visualizza`,"common:back":`Indietro`,"common:noRecords":`Nessun record trovato.`,"common:noRecordsHint":`Inizia creando un nuovo {resource}.`,"common:noMatchingRecords":`Nessun record corrisponde ai filtri.`,"common:clearFilters":`Cancella filtri`,"common:confirmDelete":`Eliminare questo record?`,"common:confirmAction":`Conferma azione`,"common:confirm":`Conferma`,"common:perPage":`Per pagina`,"common:page":`Pagina`,"common:of":`di`,"common:total":`Totale`,"auth:login":`Accedi`,"auth:logout":`Esci`,"auth:email":`Email`,"auth:password":`Password`,"auth:loginFailed":`Credenziali non valide.`,"errors:notFound":`Non trovato.`,"errors:forbidden":`Non hai accesso a questa risorsa.`,"errors:server":`Qualcosa è andato storto. Riprova.`,"common:resources":`Risorse`,"common:actions":`Azioni`,"action:notFound":`L’azione «{action}» non è disponibile per questa risorsa.`,"action:componentMissing":`Nessun componente denominato «{component}» risulta registrato.`,"action:componentMissingHint":`Registralo nel ComponentLoader passato a <ModernAdminProvider components={…}>.`,"action:loadFailed":`Impossibile caricare l’azione.`,"common:new":`Nuovo`,"common:rowsPerPage":`Righe per pagina`,"common:filter":`Filtra {label}…`,"validation:required":`{label} è obbligatorio`,"validation:invalidNumber":`{label} deve essere un numero valido`,"validation:invalidInteger":`{label} deve essere un intero`,"validation:invalidEmail":`{label} deve essere un’email valida`,"validation:invalidUrl":`{label} deve essere un URL valido`,"validation:invalidDate":`{label} deve essere una data valida`,"validation:invalidUuid":`{label} deve essere un UUID valido`,"validation:tooShort":`{label} deve contenere almeno {min} caratteri`,"validation:tooLong":`{label} deve contenere al massimo {max} caratteri`,"validation:notInList":`{label} ha un valore non valido`,"validation:emptySelection":`Seleziona almeno un valore per {label}`,"toast:created":`Creato con successo`,"toast:saved":`Salvato con successo`,"toast:deleted":`Eliminato con successo`,"toast:createFailed":`Creazione non riuscita`,"toast:saveFailed":`Salvataggio non riuscito`,"toast:deleteFailed":`Eliminazione non riuscita`,"toast:loadFailed":`Caricamento non riuscito`,"toast:validationFailed":`Correggi gli errori e riprova`,"common:close":`Chiudi`,"common:export":`Esporta`,"export:title":`Esporta record`,"export:description":`Scarica tutti i record corrispondenti di {resource} in un unico file.`,"export:csvHint":`Valori separati da virgola`,"export:jsonHint":`Array JSON strutturato`,"export:downloading":`Preparazione del download…`,"export:progress":`Caricati {loaded} di {total}…`,"export:exported":`{count} record esportati`,"export:exportFailed":`Esportazione non riuscita`,"common:apply":`Applica`,"common:clear":`Cancella`,"common:filters":`Filtri`,"common:columns":`Colonne`,"common:toggleColumns":`Mostra colonne`,"common:openMenu":`Apri menu`,"common:refresh":`Aggiorna`,"common:copy":`Copia`,"common:copied":`Copiato!`,"common:applyFilters":`Applica filtri`,"common:clearAll":`Cancella tutto`,"common:any":`Qualsiasi`,"common:yes":`Sì`,"common:no":`No`,"common:filterPlaceholder":`Filtra…`,"common:loadFailed":`Caricamento non riuscito: {error}`,"common:theme":`Tema`,"common:language":`Lingua`,"common:toggleTheme":`Cambia tema`,"common:clearSelection":`Cancella selezione`,"common:searchPlaceholder":`Cerca…`,"home:searchResources":`Cerca risorse…`,"home:noMatchingResources":`Nessuna risorsa corrispondente trovata.`,"globalSearch:title":`Ricerca globale`,"globalSearch:description":`Cerca tra tutte le risorse e i record.`,"globalSearch:trigger":`Cerca…`,"globalSearch:placeholder":`Cerca in tutte le risorse…`,"globalSearch:hint":`Inizia a digitare per cercare in tutte le risorse.`,"globalSearch:noResults":`Nessun record corrispondente.`,"globalSearch:error":`Ricerca non riuscita. Riprova.`,"globalSearch:hotkey":`Apri ricerca globale`,"globalSearch:matchedIn":`in {field}`,"globalSearch:recent":`Ricerche recenti`,"globalSearch:clearRecent":`Cancella`,"globalSearch:showAllIn":`Mostra tutto in {resource}`,"common:pageOf":`Pagina {page} di {total}`,"common:firstPage":`Prima pagina`,"common:previousPage":`Pagina precedente`,"common:nextPage":`Pagina successiva`,"common:lastPage":`Ultima pagina`,"common:recordsCount":`{count} record`,"common:selectedCount":`{count} selezionati`,"common:selectRow":`Seleziona riga`,"common:selectAll":`Seleziona tutto`,"common:deleteSelected":`Elimina selezionati`,"common:bulkDeleteConfirm":`Eliminare {count} record selezionati?`,"toast:bulkDeleted":`{count} record eliminati`,"toast:bulkDeleteFailed":`Impossibile eliminare i record`,"common:from":`Da`,"common:to":`A`,"common:sortBy":`Ordina per`,"common:next":`Avanti`,"common:previous":`Indietro`,"common:relatedRecords":`Record correlati`,"common:viewAll":`Vedi tutti`,"common:noRelatedRecords":`Nessun record correlato.`,"common:preview":`Anteprima`,"common:download":`Scarica`,"common:openInNewTab":`Apri in una nuova scheda`,"common:format":`Formatta`,"common:invalidJson":`JSON non valido`,"common:showPassword":`Mostra password`,"common:hidePassword":`Nascondi password`,"common:shortcutsHelp":`Scorciatoie da tastiera`,"common:shortcutsEmpty":`Nessuna scorciatoia disponibile in questa schermata.`,"auth:title":`Accedi`,"auth:subtitle":`Inserisci email e password per accedere`,"auth:tagline":`Il pannello di amministrazione moderno per qualsiasi stack.`,"auth:orContinueWith":`O continua con`,"auth:continueWith":`Continua con {provider}`,"common:chooseFile":`Scegli file`,"common:chooseFiles":`Scegli file`,"common:dragAndDrop":`Trascina o`,"common:chooseAFile":`scegli un file`,"common:addMoreFiles":`aggiungi altri file`,"common:uploading":`Caricamento…`,"common:uploadingFile":`Caricamento di {name}…`,"common:removeFile":`Rimuovi file`,"common:uploadFailed":`Caricamento fallito`,"common:dismiss":`Chiudi`,"common:openCalendar":`Apri calendario`,"common:time":`Orario`,"common:downloadFailed":`Download fallito`,"richtext:bold":`Grassetto`,"richtext:italic":`Corsivo`,"richtext:strikethrough":`Barrato`,"richtext:inlineCode":`Codice inline`,"richtext:heading":`Intestazione {level}`,"richtext:bulletList":`Elenco puntato`,"richtext:numberedList":`Elenco numerato`,"richtext:blockquote":`Blocco citazione`,"richtext:horizontalRule":`Linea orizzontale`,"richtext:insertLink":`Inserisci collegamento`,"richtext:undo":`Annulla`,"richtext:redo":`Ripeti`,"richtext:source":`Sorgente ({format})`,"richtext:splitView":`Vista divisa`,"richtext:visualEditor":`Editor visivo`,"richtext:fullscreen":`Schermo intero`,"richtext:exitFullscreen":`Esci dallo schermo intero`,"richtext:urlPrompt":`URL`,"common:saving":`Salvataggio…`,"common:done":`Fatto`,"settings:menuItem":`Impostazioni`,"settings:noSectionsConfigured":`Per questa installazione non sono disponibili sezioni delle impostazioni.`,"settings:apiKeys.title":`Chiavi API`,"settings:apiKeys.description":`Token di accesso programmatico all'API admin. Ogni chiave porta con sé un set di permessi che limita le risorse e le azioni che può invocare.`,"settings:apiKeys.actions.create":`Nuova chiave`,"settings:apiKeys.actions.edit":`Modifica`,"settings:apiKeys.actions.revoke":`Revoca`,"settings:apiKeys.empty.title":`Nessuna chiave API`,"settings:apiKeys.empty.description":`Crea la prima chiave per concedere accesso programmatico.`,"settings:apiKeys.columns.name":`Nome`,"settings:apiKeys.columns.start":`Prefisso`,"settings:apiKeys.columns.permissions":`Permessi`,"settings:apiKeys.columns.expiresAt":`Scade`,"settings:apiKeys.columns.enabled":`Attiva`,"settings:apiKeys.columns.actions":`Azioni`,"settings:apiKeys.lastUsed":`Ultimo utilizzo {date}`,"settings:apiKeys.expiresNever":`Mai`,"settings:apiKeys.permissions.resource":`Risorsa`,"settings:apiKeys.permissions.actions":`Azioni`,"settings:apiKeys.permissions.selectAll":`Seleziona tutto`,"settings:apiKeys.permissions.clearAll":`Pulisci tutto`,"settings:apiKeys.permissions.none":`Nessun permesso`,"settings:apiKeys.permissions.summary":`{resources} risorse · {actions} azioni`,"settings:apiKeys.permissions.noResources":`Nessuna risorsa registrata.`,"settings:apiKeys.permissions.selectAllResources":`Seleziona tutte le risorse e le azioni`,"settings:apiKeys.permissions.clearAllResources":`Cancella tutte le risorse e le azioni`,"settings:apiKeys.editor.titleCreate":`Nuova chiave API`,"settings:apiKeys.editor.titleEdit":`Modifica chiave API`,"settings:apiKeys.editor.description":`Scegli un nome descrittivo e concedi solo le risorse e azioni di cui questa chiave ha realmente bisogno.`,"settings:apiKeys.editor.name":`Nome`,"settings:apiKeys.editor.namePlaceholder":`es. bot di deploy CI`,"settings:apiKeys.editor.expiresInDays":`Scade in (giorni)`,"settings:apiKeys.editor.expiresPlaceholder":`mai`,"settings:apiKeys.editor.expiresHint":`Lascia vuoto per non scadere mai. Massimo 3650 giorni.`,"settings:apiKeys.editor.permissions":`Permessi`,"settings:apiKeys.editor.selectedActions":`{count} selezionate`,"settings:apiKeys.created.title":`Chiave API creata`,"settings:apiKeys.created.description":`Copia la chiave ora — non sarà più mostrata.`,"settings:apiKeys.created.warning":`Questa è l'unica volta in cui vedrai la chiave completa. Conservala in un luogo sicuro.`,"settings:apiKeys.created.reveal":`Mostra chiave`,"settings:apiKeys.created.hide":`Nascondi chiave`,"settings:apiKeys.created.copy":`Copia`,"settings:apiKeys.created.copied":`Copiata`,"settings:apiKeys.notice.revoked":`Chiave API revocata`,"settings:apiKeys.notice.updated":`Chiave API aggiornata`,"settings:apiKeys.notice.copied":`Copiata negli appunti`,"settings:apiKeys.notice.copyFailed":`Impossibile copiare negli appunti`,"settings:apiKeys.confirmRevoke.title":`Revoca chiave API`,"settings:apiKeys.confirmRevoke.description":`Revocare «{name}»? Qualsiasi servizio che utilizza questa chiave smetterà di funzionare immediatamente.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
122
+
123
+ Example:
124
+ {
125
+ "Authorization": "Bearer <token>",
126
+ "X-Source": "modern-admin"
127
+ }
128
+
129
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
130
+
131
+ Example:
132
+ {
133
+ "status": "published",
134
+ "role": "admin"
135
+ }
136
+
137
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Dashboard`,"chart:addChart":`Aggiungi grafico`,"chart:newChart":`Nuovo grafico`,"chart:editChart":`Modifica grafico`,"chart:deleteChart":`Rimuovi grafico`,"chart:noCharts":`Nessun grafico`,"chart:noChartsHint":`Aggiungi un grafico per iniziare a monitorare i dati.`,"chart:addGroup":`Aggiungi gruppo`,"chart:newGroup":`Nuovo gruppo`,"chart:editGroup":`Modifica gruppo`,"chart:deleteGroup":`Rimuovi gruppo`,"chart:saveGroup":`Salva gruppo`,"chart:groupName":`Nome del gruppo`,"chart:groupNamePlaceholder":`es. Metriche vendite`,"chart:groupNameRequired":`Il nome del gruppo è obbligatorio`,"chart:groupOrder":`Ordine del gruppo`,"chart:order":`Ordine`,"chart:orderHint":`I valori più bassi vengono visualizzati per primi.`,"chart:moveToGroup":`Sposta nel gruppo`,"chart:moveChart":`Sposta grafico`,"chart:moveGroup":`Gruppo`,"chart:moveNoGroups":`Nessun gruppo ancora.`,"chart:moveNoGroupsHint":`Crea prima un gruppo per organizzare i grafici.`,"chart:deleteChartConfirm":`Rimuovere questo grafico?`,"chart:deleteChartConfirmHint":`Questa azione non può essere annullata.`,"chart:deleteGroupConfirm":`Rimuovere questo gruppo?`,"chart:deleteGroupConfirmHint":`Il gruppo e i {count} grafici al suo interno verranno eliminati definitivamente.`,"chart:title":`Titolo`,"chart:titlePlaceholder":`es. Nuovi utenti al giorno`,"chart:untitled":`Senza titolo`,"chart:chartType":`Tipo di grafico`,"chart:resource":`Risorsa`,"chart:groupBy":`Raggruppa per`,"chart:step":`Passo`,"chart:metric":`Metrica`,"chart:aggregateField":`Campo di aggregazione`,"chart:selectField":`Seleziona campo…`,"chart:saveChart":`Salva grafico`,"chart:typeLine":`Linea`,"chart:typeArea":`Area`,"chart:typeBar":`Barre`,"chart:typePie":`Torta`,"chart:stepDay":`Giorno`,"chart:stepWeek":`Settimana`,"chart:stepMonth":`Mese`,"chart:stepYear":`Anno`,"chart:metricCount":`Conteggio`,"chart:metricSum":`Somma`,"chart:metricAvg":`Media`,"chart:noData":`Nessun dato per il periodo selezionato`,"chart:loadError":`Impossibile caricare i dati del grafico`,"chart:value":`Valore`,"dashboard:vis":`Visualizzazione`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Linea`,"dashboard:visArea":`Area`,"dashboard:visBar":`Barre`,"dashboard:visPie":`Torta`,"dashboard:metricCount":`Conteggio`,"dashboard:metricSum":`Somma`,"dashboard:metricAvg":`Media`,"dashboard:metricMin":`Min`,"dashboard:metricMax":`Max`,"dashboard:builder.range":`Periodo`,"dashboard:builder.filters":`Filtri`,"dashboard:builder.filtersHint":`Limita il dataset prima dell'aggregazione. Spunta un filtro per mostrarlo sopra al grafico.`,"dashboard:builder.quickFilterHint":`Mostra questo filtro sopra al grafico nella dashboard.`,"dashboard:builder.quickFilterToggle":`Esporre {field} come filtro rapido`,"dashboard:range.7d":`7g`,"dashboard:range.30d":`30g`,"dashboard:range.90d":`90g`,"dashboard:range.1y":`1a`,"dashboard:range.all":`Tutto`,"dashboard:range.custom":`Personalizzato`,"dashboard:widget.previousPeriod":`vs. periodo precedente`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Riduci a metà larghezza`,"dashboard:widget.expand":`Espandi a tutta la riga`,"dashboard:widget.toggleSql":`Mostra SQL`,"dashboard:widget.unsupported":`I grafici non sono ancora supportati per il tuo database.`,"dashboard:widget.truncatedWarning":`Visualizzazione di dati parziali — troppe righe per aggregare l’intero intervallo.`,"dashboard:widget.showAll":`Mostra tutto`,"dashboard:widget.hideAll":`Nascondi tutto`,"dashboard:seriesTotal":`Totale`,"dashboard:seriesOther":`Altro`,"dashboard:seriesNull":`Vuoto`,"dashboard:builder.dateField":`Campo data`,"dashboard:builder.dateFieldHint":`L'asse X è raggruppato per questa colonna data.`,"dashboard:builder.secondaryGroupBy":`Suddivisione`,"dashboard:builder.noBreakdown":`Serie singola`,"dashboard:builder.topN":`Max. serie`,"dashboard:builder.width":`Larghezza`,"dashboard:width.half":`Metà`,"dashboard:width.full":`Riga intera`,"dashboard:builder.comparePrevious":`Confronta con il periodo precedente`,"dashboard:builder.comparePreviousHint":`Sovrappone il periodo precedente di pari durata come linea tratteggiata e mostra la variazione accanto al titolo.`,"dashboard:builder.comparePreviousDisabled":`Non disponibile con una suddivisione.`,"dashboard:builder.transform":`Trasformazione dei valori`,"dashboard:builder.transformHint":`Applicata ai valori prima della visualizzazione — ad es. dividere per 100 per mostrare i centesimi come euro.`,"dashboard:builder.transformAdd":`Aggiungi passaggio`,"dashboard:builder.transformRemove":`Rimuovi passaggio`,"dashboard:builder.opDivide":`Dividi per`,"dashboard:builder.opMultiply":`Moltiplica per`,"dashboard:builder.opAdd":`Aggiungi`,"dashboard:builder.opSubtract":`Sottrai`,"dashboard:builder.format":`Formato dei valori`,"dashboard:builder.formatStyle":`Stile`,"dashboard:builder.formatNumber":`Numero`,"dashboard:builder.formatCurrency":`Valuta`,"dashboard:builder.formatPercent":`Percentuale`,"dashboard:builder.formatCurrencyCode":`Codice valuta`,"dashboard:builder.formatDecimals":`Decimali`,"dashboard:builder.formatCompact":`Numeri compatti (12,5 mila)`,"dashboard:builder.formatPrefix":`Prefisso`,"dashboard:builder.formatSuffix":`Suffisso`,"dashboard:builder.color":`Colore della serie`,"dashboard:widget.previousSeries":`{label} (periodo precedente)`,"dashboard:widget.editColors":`Modifica colori`,"dashboard:widget.colorsTitle":`Colori delle serie`,"dashboard:widget.colorCustom":`Personalizzato`,"dashboard:widget.colorAuto":`Automatico`,"dashboard:widget.colorPick":`Scegli un colore`,"dashboard:builder.tabData":`Dati`,"dashboard:builder.tabDisplay":`Visualizzazione`,"dashboard:builder.tabFilters":`Filtri`,"dashboard:builder.filtersEmpty":`Questa risorsa non ha campi filtrabili.`,"history:revisions":`Revisioni`,"history:noRevisions":`Nessuna revisione ancora`,"history:loadError":`Impossibile caricare la cronologia modifiche`,"history:revert":`Ripristina`,"history:confirmRevert":`Ripristinare questa revisione?`,"history:revertSuccess":`Revisione ripristinata`,"history:revertFailed":`Impossibile ripristinare la revisione`,"history:unknownUser":`Utente sconosciuto`,"history:changes":`modifiche`,"history:compareTo":`Confronta con`,"history:storedDiff":`Diff modifica`,"history:op.create":`Creato`,"history:op.update":`Aggiornato`,"history:op.delete":`Eliminato`,"diff:added":`Aggiunto`,"diff:changed":`Modificato`,"diff:removed":`Rimosso`,"diff:before":`Prima`,"diff:after":`Dopo`,"diff:noChanges":`Nessuna modifica ai campi registrata`,"audit:title":`Attività`,"audit:resource":`Risorsa`,"audit:action":`Azione`,"audit:recordId":`ID record`,"audit:userId":`ID utente`,"audit:allResources":`Tutte le risorse`,"audit:allActions":`Tutte le azioni`,"audit:noEvents":`Nessuna attività ancora`,"audit:records":`record`,"audit:loadError":`Impossibile caricare l’attività`,"audit:by":`da {user}`,"audit:viewRecord":`Apri record`,"audit:viewChanges":`Mostra modifiche`,"audit:hideChanges":`Nascondi modifiche`,"audit:noDiff":`Dettagli delle modifiche non disponibili`,"audit:loadDiffError":`Impossibile caricare le modifiche`,"audit:action.new":`Record creato`,"audit:action.edit":`Record aggiornato`,"audit:action.delete":`Record eliminato`,"audit:action.bulkDelete":`Record eliminati`,"audit:action.login":`Accesso effettuato`,"audit:action.apiKeyCreate":`Chiave API creata`,"audit:action.apiKeyUpdate":`Chiave API aggiornata`,"audit:action.apiKeyDelete":`Chiave API eliminata`,"audit:virtualResource.auth":`Autenticazione`,"audit:virtualResource.apiKeys":`Chiavi API`,"audit:prevPage":`Precedente`,"audit:nextPage":`Successivo`,"audit:dateRangePlaceholder":`Seleziona intervallo di date`,"keyValue:noMatches":`Nessuna corrispondenza — premi Invio per mantenere "{value}".`,"aiAssistant:queue.cancel":`Rimuovi dalla coda`,"aiAssistant:title":`Assistente IA`,"aiAssistant:fab.label":`Apri assistente IA`,"aiAssistant:fab.short":`IA`,"aiAssistant:description":`Fai domande su record, relazioni, report e tendenze dei dati.`,"aiAssistant:notConfigured.title":`Assistente non configurato`,"aiAssistant:notConfigured.description":`Aggiungi la chiave API OpenRouter nelle impostazioni per abilitare l’assistente IA in sola lettura.`,"aiAssistant:notConfigured.openSettings":`Apri impostazioni`,"aiAssistant:tryAsking":`Prova a chiedere:`,"aiAssistant:tryAsking.example1":`Quali clienti hanno il maggior numero di post?`,"aiAssistant:tryAsking.example2":`Mostra i record creati di recente per una risorsa.`,"aiAssistant:tryAsking.example3":`Spiega le relazioni tra record specifici.`,"aiAssistant:thinking":`In elaborazione`,"aiAssistant:thinkingProgress":`In elaborazione ({progress}%)`,"aiAssistant:input.placeholder":`Chiedi informazioni sui tuoi dati…`,"aiAssistant:input.hint":`Invio per inviare · Maiusc+Invio per una nuova riga`,"aiAssistant:send":`Invia messaggio`,"aiAssistant:newChat":`Nuova chat`,"aiAssistant:history":`Cronologia chat`,"aiAssistant:history.empty":`Nessuna chat precedente`,"aiAssistant:noText":`Ecco i record correlati trovati:`,"aiAssistant:fallback.noToolResult":`La richiesta è stata eseguita, ma il modello non ha restituito una risposta testuale. Prova a precisare la domanda o abilita i log di debug per controllare il risultato dello strumento.`,"aiAssistant:fallback.noRows":`Nessun record trovato per questa richiesta.`,"aiAssistant:fallback.rowsFound":`Righe trovate: {count}.`,"aiAssistant:taskFailed":`Operazione dell’assistente IA non riuscita`,"aiAssistant:settings.title":`Assistente IA`,"aiAssistant:settings.description":`Configura il widget di chat IA flottante, il modello e il comportamento dell’assistente lato server.`,"aiAssistant:settings.enabled":`Attivato`,"aiAssistant:settings.disabled":`Disattivato`,"aiAssistant:settings.configured":`Configurato`,"aiAssistant:settings.apiKeyRequired":`Chiave API richiesta`,"aiAssistant:settings.readOnly":`Sola lettura`,"aiAssistant:settings.provider":`Provider: {provider}`,"aiAssistant:settings.enableLabel":`Abilita assistente`,"aiAssistant:settings.enableHint":`Controlla la visibilità del widget flottante e dell’endpoint di chat.`,"aiAssistant:settings.modelLabel":`Modello OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Chiave API OpenRouter`,"aiAssistant:settings.apiKeyHint":`Lascia vuoto per mantenere la chiave già salvata sul server.`,"aiAssistant:settings.systemPromptLabel":`Override del prompt di sistema`,"aiAssistant:settings.systemPromptPlaceholder":`Istruzioni opzionali specifiche del progetto per l’assistente`,"aiAssistant:settings.accessTitle":`Modello di accesso`,"aiAssistant:settings.accessDescription":`L’assistente attuale è limitato all’ispezione in sola lettura dei record tramite le azioni delle risorse di amministrazione.`,"aiAssistant:settings.futureToolsReady":`Strumenti futuri pronti`,"aiAssistant:settings.save":`Salva impostazioni`,"aiAssistant:settings.saving":`Salvataggio…`,"aiAssistant:settings.saved":`Impostazioni dell’assistente IA salvate`,"aiAssistant:settings.empty":`Nessuna impostazione disponibile.`,"aiFill:button":`Compila con IA`,"aiFill:dialogTitle":`Compila il modulo da una foto`,"aiFill:dialogDescription":`Carica un’immagine — l’IA estrarrà i valori e compilerà il modulo.`,"aiFill:fillButton":`Riconosci`,"aiFill:processing":`Riconoscimento dell’immagine…`,"aiFill:success":`{count} campo/i compilato/i`,"aiFill:errorNoFields":`Questa risorsa non ha campi compilabili dall’IA.`,"aiFill:errorGeneric":`Compilazione tramite IA non riuscita: {message}`,"aiFill:noValues":`L’IA non è riuscita a estrarre alcun valore da questa immagine.`,"aiFill:applied":`L'IA ha compilato {count} campo/i. Puoi annullare in basso.`,"filter:op.co":`Contiene`,"filter:op.nco":`Non contiene`,"filter:op.sw":`Inizia con`,"filter:op.ew":`Finisce con`,"filter:op.eq":`È uguale a`,"filter:op.neq":`Non è uguale a`,"filter:op.empty":`È vuoto`,"filter:op.nempty":`Non è vuoto`,"filter:op.in":`È uno di`,"filter:op.gt":`Maggiore di`,"filter:op.lt":`Minore di`,"filter:op.between":`Tra`,"filter:searchValues":`Cerca nella lista…`,"filter:selectAll":`Seleziona tutto`,"filter:noValues":`Nessun valore trovato`,"common:newRecord":`Nuovo {name}`,"common:editRecord":`Modifica {name} #{id}`,"common:themeLight":`Chiaro`,"common:themeDark":`Scuro`,"common:themeSystem":`Sistema`,"common:ok":`OK`,"common:select":`Seleziona…`,"common:removeItem":`Rimuovi {title}`,"common:nSelectedAddMore":`{count} selezionato/i — aggiungi altri`,"common:pickRecords":`Scegli record`,"common:managePickRecords":`Gestisci selezione ({count})`,"common:pickRecordsFrom":`Scegli da {name}`,"common:draftRestored":`Bozza non salvata ripristinata`,"common:undoDraftRestore":`Annulla`,"wizard:stepOf":`Passo {current} di {total}`,"wizard:products.step1":`Informazioni di base`,"wizard:products.step2":`Prezzi`,"wizard:products.step3":`Media e tag`,"common:invalidValue":`Valore non valido`,"common:collapseSidebar":`Comprimi barra laterale`,"common:expandSidebar":`Espandi barra laterale`,"common:toggleSidebar":`Attiva/disattiva barra laterale`,"common:sidebarTitle":`Barra laterale`,"common:sidebarNavigation":`Menu di navigazione`,"cache:title":`Cache`,"cache:description":`Stato della cache e prestazioni per risorsa su questa replica.`,"cache:load.error":`Impossibile caricare le metriche della cache`,"cache:load.retry":`Riprova`,"cache:reset.action":`Reimposta metriche`,"cache:reset.loading":`Reimpostazione metriche cache…`,"cache:reset.success":`Metriche cache reimpostate`,"cache:reset.error":`Impossibile reimpostare le metriche cache`,"cache:metric.hitRate":`Tasso di successo`,"cache:metric.requests":`Letture cache`,"cache:metric.avgCompute":`Calcolo medio`,"cache:metric.errors":`Errori`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Tag in quarantena`,"cache:quarantine.description":`Questi tag ignorano la cache finché l'invalidazione non riesce.`,"cache:invalidate.title":`Invalida cache della risorsa`,"cache:invalidate.description":`Elimina elenchi e record della risorsa su tutte le repliche configurate.`,"cache:invalidate.resource":`Risorsa`,"cache:invalidate.action":`Invalida cache`,"cache:invalidate.loading":`Invalidazione cache…`,"cache:invalidate.success":`Cache della risorsa invalidata`,"cache:invalidate.error":`Impossibile invalidare la cache della risorsa`,"cache:table.title":`Metriche per namespace`,"cache:table.empty":`Nessuna attività della cache ancora registrata.`,"cache:instance":`Replica {id}`,"cache:table.namespace":`Namespace`,"cache:table.resource":`Risorsa`,"cache:table.hits":`Successi`,"cache:table.misses":`Mancati`,"cache:table.computes":`Calcoli`,"cache:table.coalesced":`Raggruppati`,"cache:table.errors":`Errori`}},{code:`ja`,name:`日本語`,dict:{"common:appName":`Modern Admin`,"common:home":`ホーム`,"common:search":`検索`,"common:loading":`読み込み中…`,"common:save":`保存`,"common:cancel":`キャンセル`,"common:delete":`削除`,"common:create":`作成`,"common:edit":`編集`,"common:show":`表示`,"common:back":`戻る`,"common:noRecords":`レコードが見つかりません。`,"common:noRecordsHint":`新しい{resource}を作成して始めましょう。`,"common:noMatchingRecords":`フィルターに一致するレコードがありません。`,"common:clearFilters":`フィルターをクリア`,"common:confirmDelete":`このレコードを削除しますか?`,"common:confirmAction":`操作を確認しますか?`,"common:confirm":`確認`,"common:perPage":`1ページあたり`,"common:page":`ページ`,"common:of":`/`,"common:total":`合計`,"auth:login":`ログイン`,"auth:logout":`ログアウト`,"auth:email":`メールアドレス`,"auth:password":`パスワード`,"auth:loginFailed":`認証情報が無効です。`,"errors:notFound":`見つかりません。`,"errors:forbidden":`このリソースへのアクセス権がありません。`,"errors:server":`エラーが発生しました。再試行してください。`,"common:resources":`リソース`,"common:actions":`アクション`,"action:notFound":`アクション「{action}」はこのリソースでは利用できません。`,"action:componentMissing":`「{component}」という名前のコンポーネントが登録されていません。`,"action:componentMissingHint":`<ModernAdminProvider components={…}> に渡す ComponentLoader に登録してください。`,"action:loadFailed":`アクションの読み込みに失敗しました。`,"common:new":`新規`,"common:rowsPerPage":`1ページの行数`,"common:filter":`{label}でフィルター…`,"validation:required":`{label}は必須です`,"validation:invalidNumber":`{label}は有効な数値である必要があります`,"validation:invalidInteger":`{label}は整数である必要があります`,"validation:invalidEmail":`{label}は有効なメールアドレスである必要があります`,"validation:invalidUrl":`{label}は有効なURLである必要があります`,"validation:invalidDate":`{label}は有効な日付である必要があります`,"validation:invalidUuid":`{label}は有効なUUIDである必要があります`,"validation:tooShort":`{label}は{min}文字以上で入力してください`,"validation:tooLong":`{label}は{max}文字以内で入力してください`,"validation:notInList":`{label}の値が無効です`,"validation:emptySelection":`{label}を1つ以上選択してください`,"toast:created":`作成しました`,"toast:saved":`保存しました`,"toast:deleted":`削除しました`,"toast:createFailed":`作成に失敗しました`,"toast:saveFailed":`保存に失敗しました`,"toast:deleteFailed":`削除に失敗しました`,"toast:loadFailed":`読み込みに失敗しました`,"toast:validationFailed":`エラーを修正してから再度お試しください`,"common:close":`閉じる`,"common:export":`エクスポート`,"export:title":`レコードをエクスポート`,"export:description":`{resource} の該当レコードをすべて 1 つのファイルにダウンロードします。`,"export:csvHint":`カンマ区切り値`,"export:jsonHint":`構造化された JSON 配列`,"export:downloading":`ダウンロードを準備しています…`,"export:progress":`{loaded} / {total} 件読み込み済み…`,"export:exported":`{count} 件のレコードをエクスポートしました`,"export:exportFailed":`エクスポートに失敗しました`,"common:apply":`適用`,"common:clear":`クリア`,"common:filters":`フィルター`,"common:columns":`列`,"common:toggleColumns":`列の表示切替`,"common:openMenu":`メニューを開く`,"common:refresh":`更新`,"common:copy":`コピー`,"common:copied":`コピーしました!`,"common:applyFilters":`フィルターを適用`,"common:clearAll":`すべてクリア`,"common:any":`任意`,"common:yes":`はい`,"common:no":`いいえ`,"common:filterPlaceholder":`絞り込み…`,"common:loadFailed":`読み込みに失敗しました: {error}`,"common:theme":`テーマ`,"common:language":`言語`,"common:toggleTheme":`テーマ切替`,"common:clearSelection":`選択を解除`,"common:searchPlaceholder":`検索…`,"home:searchResources":`リソースを検索…`,"home:noMatchingResources":`一致するリソースが見つかりません。`,"globalSearch:title":`グローバル検索`,"globalSearch:description":`すべてのリソースとレコードを検索します。`,"globalSearch:trigger":`検索…`,"globalSearch:placeholder":`すべてのリソースを検索…`,"globalSearch:hint":`入力してすべてのリソースを検索します。`,"globalSearch:noResults":`一致するレコードが見つかりません。`,"globalSearch:error":`検索に失敗しました。もう一度お試しください。`,"globalSearch:hotkey":`グローバル検索を開く`,"globalSearch:matchedIn":`{field}内`,"globalSearch:recent":`最近の検索`,"globalSearch:clearRecent":`クリア`,"globalSearch:showAllIn":`{resource}内をすべて表示`,"common:pageOf":`{total} ページ中 {page} ページ`,"common:firstPage":`最初のページ`,"common:previousPage":`前のページ`,"common:nextPage":`次のページ`,"common:lastPage":`最後のページ`,"common:recordsCount":`{count} 件`,"common:selectedCount":`{count} 件選択中`,"common:selectRow":`行を選択`,"common:selectAll":`すべて選択`,"common:deleteSelected":`選択を削除`,"common:bulkDeleteConfirm":`選択した {count} 件のレコードを削除しますか?`,"toast:bulkDeleted":`{count} 件を削除しました`,"toast:bulkDeleteFailed":`レコードの削除に失敗しました`,"common:from":`から`,"common:to":`まで`,"common:sortBy":`並び順`,"common:next":`次へ`,"common:previous":`前へ`,"common:relatedRecords":`関連レコード`,"common:viewAll":`すべて表示`,"common:noRelatedRecords":`関連レコードはありません。`,"common:preview":`プレビュー`,"common:download":`ダウンロード`,"common:openInNewTab":`新しいタブで開く`,"common:format":`整形`,"common:invalidJson":`無効な JSON です`,"common:showPassword":`パスワードを表示`,"common:hidePassword":`パスワードを非表示`,"common:shortcutsHelp":`キーボードショートカット`,"common:shortcutsEmpty":`この画面でのショートカットはありません。`,"auth:title":`サインイン`,"auth:subtitle":`メールアドレスとパスワードを入力してください`,"auth:tagline":`あらゆるスタックに対応したモダンな管理パネル。`,"auth:orContinueWith":`または連携してログイン`,"auth:continueWith":`{provider}でログイン`,"common:chooseFile":`ファイルを選択`,"common:chooseFiles":`ファイルを選択`,"common:dragAndDrop":`ドラッグ&ドロップまたは`,"common:chooseAFile":`ファイルを選択`,"common:addMoreFiles":`ファイルを追加`,"common:uploading":`アップロード中…`,"common:uploadingFile":`{name} をアップロード中…`,"common:removeFile":`ファイルを削除`,"common:uploadFailed":`アップロード失敗`,"common:dismiss":`閉じる`,"common:openCalendar":`カレンダーを開く`,"common:time":`時刻`,"common:downloadFailed":`ダウンロード失敗`,"richtext:bold":`太字`,"richtext:italic":`斜体`,"richtext:strikethrough":`取り消し線`,"richtext:inlineCode":`インラインコード`,"richtext:heading":`見出し {level}`,"richtext:bulletList":`箇条書き`,"richtext:numberedList":`番号付きリスト`,"richtext:blockquote":`引用`,"richtext:horizontalRule":`水平線`,"richtext:insertLink":`リンクを挿入`,"richtext:undo":`元に戻す`,"richtext:redo":`やり直し`,"richtext:source":`ソース ({format})`,"richtext:splitView":`分割表示`,"richtext:visualEditor":`ビジュアルエディタ`,"richtext:fullscreen":`フルスクリーン`,"richtext:exitFullscreen":`フルスクリーンを終了`,"richtext:urlPrompt":`URL`,"common:saving":`保存中…`,"common:done":`完了`,"settings:menuItem":`設定`,"settings:noSectionsConfigured":`このデプロイメントで利用できる設定セクションはありません。`,"settings:apiKeys.title":`APIキー`,"settings:apiKeys.description":`管理APIへのプログラムアクセス用トークン。各キーには、呼び出せるリソースとアクションを制限する権限セットが含まれます。`,"settings:apiKeys.actions.create":`新しいキー`,"settings:apiKeys.actions.edit":`編集`,"settings:apiKeys.actions.revoke":`無効化`,"settings:apiKeys.empty.title":`APIキーがまだありません`,"settings:apiKeys.empty.description":`最初のキーを作成してプログラムアクセスを許可しましょう。`,"settings:apiKeys.columns.name":`名前`,"settings:apiKeys.columns.start":`プレフィックス`,"settings:apiKeys.columns.permissions":`権限`,"settings:apiKeys.columns.expiresAt":`有効期限`,"settings:apiKeys.columns.enabled":`有効`,"settings:apiKeys.columns.actions":`操作`,"settings:apiKeys.lastUsed":`最終使用 {date}`,"settings:apiKeys.expiresNever":`無期限`,"settings:apiKeys.permissions.resource":`リソース`,"settings:apiKeys.permissions.actions":`アクション`,"settings:apiKeys.permissions.selectAll":`すべて選択`,"settings:apiKeys.permissions.clearAll":`すべて解除`,"settings:apiKeys.permissions.none":`権限なし`,"settings:apiKeys.permissions.summary":`{resources}件のリソース · {actions}件のアクション`,"settings:apiKeys.permissions.noResources":`登録されているリソースがありません。`,"settings:apiKeys.permissions.selectAllResources":`すべてのリソースとアクションを選択`,"settings:apiKeys.permissions.clearAllResources":`すべてのリソースとアクションを解除`,"settings:apiKeys.editor.titleCreate":`新しいAPIキー`,"settings:apiKeys.editor.titleEdit":`APIキーを編集`,"settings:apiKeys.editor.description":`分かりやすい名前を付け、このキーが本当に必要とするリソースとアクションだけを許可してください。`,"settings:apiKeys.editor.name":`名前`,"settings:apiKeys.editor.namePlaceholder":`例: CIデプロイボット`,"settings:apiKeys.editor.expiresInDays":`有効期限(日数)`,"settings:apiKeys.editor.expiresPlaceholder":`無期限`,"settings:apiKeys.editor.expiresHint":`無期限にする場合は空欄のままにします。最大3650日。`,"settings:apiKeys.editor.permissions":`権限`,"settings:apiKeys.editor.selectedActions":`{count}件選択`,"settings:apiKeys.created.title":`APIキーを作成しました`,"settings:apiKeys.created.description":`今すぐキーをコピーしてください — 再表示されません。`,"settings:apiKeys.created.warning":`完全なキーが表示されるのは今回だけです。安全な場所に保管してください。`,"settings:apiKeys.created.reveal":`キーを表示`,"settings:apiKeys.created.hide":`キーを隠す`,"settings:apiKeys.created.copy":`コピー`,"settings:apiKeys.created.copied":`コピー済み`,"settings:apiKeys.notice.revoked":`APIキーを無効化しました`,"settings:apiKeys.notice.updated":`APIキーを更新しました`,"settings:apiKeys.notice.copied":`クリップボードにコピーしました`,"settings:apiKeys.notice.copyFailed":`クリップボードへのコピーに失敗しました`,"settings:apiKeys.confirmRevoke.title":`APIキーを無効化`,"settings:apiKeys.confirmRevoke.description":`「{name}」を無効化しますか?このキーを使用しているすべてのサービスは即座に動作しなくなります。`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
138
+
139
+ Example:
140
+ {
141
+ "Authorization": "Bearer <token>",
142
+ "X-Source": "modern-admin"
143
+ }
144
+
145
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
146
+
147
+ Example:
148
+ {
149
+ "status": "published",
150
+ "role": "admin"
151
+ }
152
+
153
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`ダッシュボード`,"chart:addChart":`グラフを追加`,"chart:newChart":`新しいグラフ`,"chart:editChart":`グラフを編集`,"chart:deleteChart":`グラフを削除`,"chart:noCharts":`グラフがありません`,"chart:noChartsHint":`グラフを追加してデータの監視を始めましょう。`,"chart:addGroup":`グループを追加`,"chart:newGroup":`新規グループ`,"chart:editGroup":`グループを編集`,"chart:deleteGroup":`グループを削除`,"chart:saveGroup":`グループを保存`,"chart:groupName":`グループ名`,"chart:groupNamePlaceholder":`例: 売上指標`,"chart:groupNameRequired":`グループ名は必須です`,"chart:groupOrder":`グループの順序`,"chart:order":`順序`,"chart:orderHint":`値が小さいほど先に表示されます。`,"chart:moveToGroup":`グループに移動`,"chart:moveChart":`グラフを移動`,"chart:moveGroup":`グループ`,"chart:moveNoGroups":`まだグループがありません。`,"chart:moveNoGroupsHint":`グラフを整理するには、まずグループを作成してください。`,"chart:deleteChartConfirm":`このグラフを削除しますか?`,"chart:deleteChartConfirmHint":`この操作は取り消せません。`,"chart:deleteGroupConfirm":`このグループを削除しますか?`,"chart:deleteGroupConfirmHint":`グループと内部の {count} 件のグラフが完全に削除されます。`,"chart:title":`タイトル`,"chart:titlePlaceholder":`例:1日あたりの新規ユーザー数`,"chart:untitled":`タイトルなし`,"chart:chartType":`グラフの種類`,"chart:resource":`リソース`,"chart:groupBy":`グループ化`,"chart:step":`ステップ`,"chart:metric":`指標`,"chart:aggregateField":`集計フィールド`,"chart:selectField":`フィールドを選択…`,"chart:saveChart":`グラフを保存`,"chart:typeLine":`折れ線`,"chart:typeArea":`エリア`,"chart:typeBar":`棒`,"chart:typePie":`円`,"chart:stepDay":`日`,"chart:stepWeek":`週`,"chart:stepMonth":`月`,"chart:stepYear":`年`,"chart:metricCount":`件数`,"chart:metricSum":`合計`,"chart:metricAvg":`平均`,"chart:noData":`選択期間のデータがありません`,"chart:loadError":`グラフデータの読み込みに失敗しました`,"chart:value":`値`,"dashboard:vis":`表示形式`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`折れ線`,"dashboard:visArea":`エリア`,"dashboard:visBar":`棒`,"dashboard:visPie":`円`,"dashboard:metricCount":`件数`,"dashboard:metricSum":`合計`,"dashboard:metricAvg":`平均`,"dashboard:metricMin":`最小`,"dashboard:metricMax":`最大`,"dashboard:builder.range":`期間`,"dashboard:builder.filters":`フィルター`,"dashboard:builder.filtersHint":`集計前にデータを絞り込みます。チェックを付けると、グラフの上にクイックフィルターとして表示されます。`,"dashboard:builder.quickFilterHint":`このフィルターをダッシュボードのグラフ上部に表示します。`,"dashboard:builder.quickFilterToggle":`{field} をクイックフィルターとして表示`,"dashboard:range.7d":`7日`,"dashboard:range.30d":`30日`,"dashboard:range.90d":`90日`,"dashboard:range.1y":`1年`,"dashboard:range.all":`全期間`,"dashboard:range.custom":`カスタム`,"dashboard:widget.previousPeriod":`前期比`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`半分の幅に縮小`,"dashboard:widget.expand":`全幅に拡大`,"dashboard:widget.toggleSql":`SQLを表示`,"dashboard:widget.unsupported":`お使いのデータベースではグラフをまだサポートしていません。`,"dashboard:widget.truncatedWarning":`部分的なデータを表示しています。行数が多すぎて全期間を集計できません。`,"dashboard:widget.showAll":`すべて表示`,"dashboard:widget.hideAll":`すべて非表示`,"dashboard:seriesTotal":`合計`,"dashboard:seriesOther":`その他`,"dashboard:seriesNull":`空`,"dashboard:builder.dateField":`日付フィールド`,"dashboard:builder.dateFieldHint":`X軸はこの日付列でバケット化されます。`,"dashboard:builder.secondaryGroupBy":`内訳`,"dashboard:builder.noBreakdown":`単一系列`,"dashboard:builder.topN":`最大系列数`,"dashboard:builder.width":`幅`,"dashboard:width.half":`半分`,"dashboard:width.full":`全幅`,"dashboard:builder.comparePrevious":`前の期間と比較`,"dashboard:builder.comparePreviousHint":`同じ長さの直前の期間を破線で重ねて表示し、タイトルの横に変化を表示します。`,"dashboard:builder.comparePreviousDisabled":`内訳を使用している場合は利用できません。`,"dashboard:builder.transform":`値の変換`,"dashboard:builder.transformHint":`表示前に値へ適用されます — 例:100で割ってセントをドルとして表示。`,"dashboard:builder.transformAdd":`ステップを追加`,"dashboard:builder.transformRemove":`ステップを削除`,"dashboard:builder.opDivide":`割る`,"dashboard:builder.opMultiply":`掛ける`,"dashboard:builder.opAdd":`足す`,"dashboard:builder.opSubtract":`引く`,"dashboard:builder.format":`値の形式`,"dashboard:builder.formatStyle":`スタイル`,"dashboard:builder.formatNumber":`数値`,"dashboard:builder.formatCurrency":`通貨`,"dashboard:builder.formatPercent":`パーセント`,"dashboard:builder.formatCurrencyCode":`通貨コード`,"dashboard:builder.formatDecimals":`小数点以下の桁数`,"dashboard:builder.formatCompact":`コンパクト表記(1.2万)`,"dashboard:builder.formatPrefix":`接頭辞`,"dashboard:builder.formatSuffix":`接尾辞`,"dashboard:builder.color":`系列の色`,"dashboard:widget.previousSeries":`{label}(前の期間)`,"dashboard:widget.editColors":`色を編集`,"dashboard:widget.colorsTitle":`系列の色`,"dashboard:widget.colorCustom":`カスタム`,"dashboard:widget.colorAuto":`自動`,"dashboard:widget.colorPick":`色を選択`,"dashboard:builder.tabData":`データ`,"dashboard:builder.tabDisplay":`表示`,"dashboard:builder.tabFilters":`フィルター`,"dashboard:builder.filtersEmpty":`このリソースにはフィルター可能なフィールドがありません。`,"history:revisions":`リビジョン`,"history:noRevisions":`リビジョンはまだありません`,"history:loadError":`変更履歴を読み込めませんでした`,"history:revert":`元に戻す`,"history:confirmRevert":`このリビジョンに戻しますか?`,"history:revertSuccess":`リビジョンを復元しました`,"history:revertFailed":`リビジョンを復元できませんでした`,"history:unknownUser":`不明なユーザー`,"history:changes":`件の変更`,"history:compareTo":`比較先`,"history:storedDiff":`変更差分`,"history:op.create":`作成`,"history:op.update":`更新`,"history:op.delete":`削除`,"diff:added":`追加`,"diff:changed":`変更`,"diff:removed":`削除`,"diff:before":`変更前`,"diff:after":`変更後`,"diff:noChanges":`フィールド変更は記録されていません`,"audit:title":`アクティビティ`,"audit:resource":`リソース`,"audit:action":`アクション`,"audit:recordId":`レコードID`,"audit:userId":`ユーザーID`,"audit:allResources":`すべてのリソース`,"audit:allActions":`すべてのアクション`,"audit:noEvents":`アクティビティはまだありません`,"audit:records":`レコード`,"audit:loadError":`アクティビティを読み込めませんでした`,"audit:by":`実行者: {user}`,"audit:viewRecord":`レコードを表示`,"audit:viewChanges":`変更を表示`,"audit:hideChanges":`変更を非表示`,"audit:noDiff":`変更の詳細は利用できません`,"audit:loadDiffError":`変更を読み込めませんでした`,"audit:action.new":`レコードを作成しました`,"audit:action.edit":`レコードを更新しました`,"audit:action.delete":`レコードを削除しました`,"audit:action.bulkDelete":`レコードを一括削除しました`,"audit:action.login":`サインイン`,"audit:action.apiKeyCreate":`APIキーを作成しました`,"audit:action.apiKeyUpdate":`APIキーを更新しました`,"audit:action.apiKeyDelete":`APIキーを削除しました`,"audit:virtualResource.auth":`認証`,"audit:virtualResource.apiKeys":`APIキー`,"audit:prevPage":`前へ`,"audit:nextPage":`次へ`,"audit:dateRangePlaceholder":`日付範囲を選択`,"keyValue:noMatches":`一致なし — Enter キーで「{value}」をそのまま使用します。`,"aiAssistant:queue.cancel":`キューから削除`,"aiAssistant:title":`AI アシスタント`,"aiAssistant:fab.label":`AI アシスタントを開く`,"aiAssistant:fab.short":`AI`,"aiAssistant:description":`レコード、関連性、レポート、データ傾向について質問できます。`,"aiAssistant:notConfigured.title":`アシスタントが構成されていません`,"aiAssistant:notConfigured.description":`読み取り専用 AI アシスタントを有効にするには、設定で OpenRouter API キーを追加してください。`,"aiAssistant:notConfigured.openSettings":`設定を開く`,"aiAssistant:tryAsking":`質問例:`,"aiAssistant:tryAsking.example1":`投稿数が最も多い顧客は誰ですか?`,"aiAssistant:tryAsking.example2":`リソースの最近作成されたレコードを表示してください。`,"aiAssistant:tryAsking.example3":`特定のレコード間の関連性を説明してください。`,"aiAssistant:thinking":`考え中`,"aiAssistant:thinkingProgress":`考え中 ({progress}%)`,"aiAssistant:input.placeholder":`データについて質問してください…`,"aiAssistant:input.hint":`Enterで送信 · Shift+Enterで改行`,"aiAssistant:send":`メッセージを送信`,"aiAssistant:newChat":`新しいチャット`,"aiAssistant:history":`チャット履歴`,"aiAssistant:history.empty":`以前のチャットはありません`,"aiAssistant:noText":`関連するレコードが見つかりました:`,"aiAssistant:fallback.noToolResult":`リクエストは実行されましたが、モデルがテキスト回答を返しませんでした。質問を具体化するか、デバッグログを有効にしてツール結果を確認してください。`,"aiAssistant:fallback.noRows":`このリクエストに一致するレコードは見つかりませんでした。`,"aiAssistant:fallback.rowsFound":`見つかった行数: {count}。`,"aiAssistant:taskFailed":`AI アシスタントのタスクが失敗しました`,"aiAssistant:settings.title":`AI アシスタント`,"aiAssistant:settings.description":`フローティング AI チャットウィジェット、モデル、サーバー側アシスタントの動作を構成します。`,"aiAssistant:settings.enabled":`有効`,"aiAssistant:settings.disabled":`無効`,"aiAssistant:settings.configured":`構成済み`,"aiAssistant:settings.apiKeyRequired":`API キーが必要です`,"aiAssistant:settings.readOnly":`読み取り専用`,"aiAssistant:settings.provider":`プロバイダー: {provider}`,"aiAssistant:settings.enableLabel":`アシスタントを有効化`,"aiAssistant:settings.enableHint":`フローティングウィジェットとチャットエンドポイントの表示を制御します。`,"aiAssistant:settings.modelLabel":`OpenRouter モデル`,"aiAssistant:settings.apiKeyLabel":`OpenRouter API キー`,"aiAssistant:settings.apiKeyHint":`サーバーに保存済みの既存キーを保持するには空のままにしてください。`,"aiAssistant:settings.systemPromptLabel":`システムプロンプトの上書き`,"aiAssistant:settings.systemPromptPlaceholder":`アシスタント向けのプロジェクト固有の指示(任意)`,"aiAssistant:settings.accessTitle":`アクセスモデル`,"aiAssistant:settings.accessDescription":`現在のアシスタントは、管理リソースアクションを通じたレコードの読み取り専用検査に制限されています。`,"aiAssistant:settings.futureToolsReady":`将来のツール対応`,"aiAssistant:settings.save":`設定を保存`,"aiAssistant:settings.saving":`保存中…`,"aiAssistant:settings.saved":`AI アシスタント設定を保存しました`,"aiAssistant:settings.empty":`利用可能な設定はありません。`,"aiFill:button":`AI で入力`,"aiFill:dialogTitle":`写真からフォームを入力`,"aiFill:dialogDescription":`画像をアップロードしてください — AI が値を抽出してフォームに入力します。`,"aiFill:fillButton":`認識する`,"aiFill:processing":`画像を認識中…`,"aiFill:success":`{count} 個のフィールドが入力されました`,"aiFill:errorNoFields":`このリソースには AI で入力可能なフィールドがありません。`,"aiFill:errorGeneric":`AI による入力に失敗しました: {message}`,"aiFill:noValues":`AI はこの画像から値を抽出できませんでした。`,"aiFill:applied":`AI が {count} 件のフィールドを入力しました。以下で取り消せます。`,"filter:op.co":`含む`,"filter:op.nco":`含まない`,"filter:op.sw":`で始まる`,"filter:op.ew":`で終わる`,"filter:op.eq":`等しい`,"filter:op.neq":`等しくない`,"filter:op.empty":`空`,"filter:op.nempty":`空でない`,"filter:op.in":`いずれか`,"filter:op.gt":`より大きい`,"filter:op.lt":`より小さい`,"filter:op.between":`範囲内`,"filter:searchValues":`リスト内を検索…`,"filter:selectAll":`すべて選択`,"filter:noValues":`値が見つかりません`,"common:newRecord":`新規 {name}`,"common:editRecord":`{name} #{id} を編集`,"common:themeLight":`ライト`,"common:themeDark":`ダーク`,"common:themeSystem":`システム`,"common:ok":`OK`,"common:select":`選択…`,"common:removeItem":`{title} を削除`,"common:nSelectedAddMore":`{count} 件選択中 — さらに追加`,"common:pickRecords":`レコードを選択`,"common:managePickRecords":`選択を管理 ({count})`,"common:pickRecordsFrom":`{name} から選択`,"common:draftRestored":`未保存の下書きを復元しました`,"common:undoDraftRestore":`元に戻す`,"wizard:stepOf":`ステップ {current} / {total}`,"wizard:products.step1":`基本情報`,"wizard:products.step2":`価格設定`,"wizard:products.step3":`メディア & タグ`,"common:invalidValue":`無効な値です`,"common:collapseSidebar":`サイドバーを折りたたむ`,"common:expandSidebar":`サイドバーを展開する`,"common:toggleSidebar":`サイドバーの切り替え`,"common:sidebarTitle":`サイドバー`,"common:sidebarNavigation":`ナビゲーションメニュー`,"cache:title":`キャッシュ`,"cache:description":`このレプリカのキャッシュ状態とリソース別パフォーマンスです。`,"cache:load.error":`キャッシュメトリクスを読み込めませんでした`,"cache:load.retry":`再試行`,"cache:reset.action":`メトリクスをリセット`,"cache:reset.loading":`キャッシュメトリクスをリセット中…`,"cache:reset.success":`キャッシュメトリクスをリセットしました`,"cache:reset.error":`キャッシュメトリクスをリセットできませんでした`,"cache:metric.hitRate":`ヒット率`,"cache:metric.requests":`キャッシュ読み取り`,"cache:metric.avgCompute":`平均計算時間`,"cache:metric.errors":`エラー`,"cache:unit.ms":`{value} ミリ秒`,"cache:quarantine.title":`隔離中のタグ`,"cache:quarantine.description":`無効化が成功するまで、これらのタグはキャッシュを迂回します。`,"cache:invalidate.title":`リソースキャッシュを無効化`,"cache:invalidate.description":`設定済みレプリカからリソースの一覧とレコードを削除します。`,"cache:invalidate.resource":`リソース`,"cache:invalidate.action":`キャッシュを無効化`,"cache:invalidate.loading":`キャッシュを無効化中…`,"cache:invalidate.success":`リソースキャッシュを無効化しました`,"cache:invalidate.error":`リソースキャッシュを無効化できませんでした`,"cache:table.title":`名前空間別メトリクス`,"cache:table.empty":`キャッシュアクティビティはまだ記録されていません。`,"cache:instance":`レプリカ {id}`,"cache:table.namespace":`名前空間`,"cache:table.resource":`リソース`,"cache:table.hits":`ヒット`,"cache:table.misses":`ミス`,"cache:table.computes":`計算`,"cache:table.coalesced":`統合`,"cache:table.errors":`エラー`}},{code:`pl`,name:`Polski`,dict:{"common:appName":`Modern Admin`,"common:home":`Strona główna`,"common:search":`Szukaj`,"common:loading":`Ładowanie…`,"common:save":`Zapisz`,"common:cancel":`Anuluj`,"common:delete":`Usuń`,"common:create":`Utwórz`,"common:edit":`Edytuj`,"common:show":`Pokaż`,"common:back":`Wstecz`,"common:noRecords":`Nie znaleziono rekordów.`,"common:noRecordsHint":`Zacznij od utworzenia nowego rekordu „{resource}".`,"common:noMatchingRecords":`Żaden rekord nie pasuje do filtrów.`,"common:clearFilters":`Wyczyść filtry`,"common:confirmDelete":`Usunąć ten rekord?`,"common:confirmAction":`Potwierdź akcję`,"common:confirm":`Potwierdź`,"common:perPage":`Na stronę`,"common:page":`Strona`,"common:of":`z`,"common:total":`Razem`,"auth:login":`Zaloguj się`,"auth:logout":`Wyloguj się`,"auth:email":`Email`,"auth:password":`Hasło`,"auth:loginFailed":`Nieprawidłowe dane logowania.`,"errors:notFound":`Nie znaleziono.`,"errors:forbidden":`Brak dostępu do tego zasobu.`,"errors:server":`Coś poszło nie tak. Spróbuj ponownie.`,"common:resources":`Zasoby`,"common:actions":`Akcje`,"action:notFound":`Akcja „{action}” jest niedostępna dla tego zasobu.`,"action:componentMissing":`Nie zarejestrowano komponentu o nazwie „{component}”.`,"action:componentMissingHint":`Zarejestruj go w ComponentLoaderze przekazywanym do <ModernAdminProvider components={…}>.`,"action:loadFailed":`Nie udało się wczytać akcji.`,"common:new":`Nowy`,"common:rowsPerPage":`Wierszy na stronę`,"common:filter":`Filtruj {label}…`,"validation:required":`Pole {label} jest wymagane`,"validation:invalidNumber":`Pole {label} musi być prawidłową liczbą`,"validation:invalidInteger":`Pole {label} musi być liczbą całkowitą`,"validation:invalidEmail":`Pole {label} musi być prawidłowym e-mailem`,"validation:invalidUrl":`Pole {label} musi być prawidłowym URL-em`,"validation:invalidDate":`Pole {label} musi być prawidłową datą`,"validation:invalidUuid":`Pole {label} musi być prawidłowym UUID`,"validation:tooShort":`Pole {label} musi mieć co najmniej {min} znaków`,"validation:tooLong":`Pole {label} może mieć co najwyżej {max} znaków`,"validation:notInList":`Pole {label} ma nieprawidłową wartość`,"validation:emptySelection":`Wybierz co najmniej jedną wartość dla {label}`,"toast:created":`Pomyślnie utworzono`,"toast:saved":`Pomyślnie zapisano`,"toast:deleted":`Pomyślnie usunięto`,"toast:createFailed":`Tworzenie nie powiodło się`,"toast:saveFailed":`Zapis nie powiódł się`,"toast:deleteFailed":`Usuwanie nie powiodło się`,"toast:loadFailed":`Wczytywanie nie powiodło się`,"toast:validationFailed":`Popraw błędy i spróbuj ponownie`,"common:close":`Zamknij`,"common:export":`Eksport`,"export:title":`Eksport rekordów`,"export:description":`Pobierz wszystkie pasujące rekordy zasobu {resource} w jednym pliku.`,"export:csvHint":`Wartości oddzielone przecinkami`,"export:jsonHint":`Strukturalna tablica JSON`,"export:downloading":`Przygotowywanie pobierania…`,"export:progress":`Wczytano {loaded} z {total}…`,"export:exported":`Wyeksportowano rekordów: {count}`,"export:exportFailed":`Nie udało się wyeksportować rekordów`,"common:apply":`Zastosuj`,"common:clear":`Wyczyść`,"common:filters":`Filtry`,"common:columns":`Kolumny`,"common:toggleColumns":`Pokaż kolumny`,"common:openMenu":`Otwórz menu`,"common:refresh":`Odśwież`,"common:copy":`Kopiuj`,"common:copied":`Skopiowano!`,"common:applyFilters":`Zastosuj filtry`,"common:clearAll":`Wyczyść wszystko`,"common:any":`Dowolne`,"common:yes":`Tak`,"common:no":`Nie`,"common:filterPlaceholder":`Filtruj…`,"common:loadFailed":`Błąd ładowania: {error}`,"common:theme":`Motyw`,"common:language":`Język`,"common:toggleTheme":`Zmień motyw`,"common:clearSelection":`Wyczyść wybór`,"common:searchPlaceholder":`Szukaj…`,"home:searchResources":`Szukaj zasobów…`,"home:noMatchingResources":`Nie znaleziono pasujących zasobów.`,"globalSearch:title":`Wyszukiwanie globalne`,"globalSearch:description":`Wyszukaj we wszystkich zasobach i rekordach.`,"globalSearch:trigger":`Szukaj…`,"globalSearch:placeholder":`Szukaj we wszystkich zasobach…`,"globalSearch:hint":`Zacznij pisać, aby przeszukać wszystkie zasoby.`,"globalSearch:noResults":`Nie znaleziono pasujących rekordów.`,"globalSearch:error":`Wyszukiwanie nie powiodło się. Spróbuj ponownie.`,"globalSearch:hotkey":`Otwórz wyszukiwanie globalne`,"globalSearch:matchedIn":`w {field}`,"globalSearch:recent":`Ostatnie wyszukiwania`,"globalSearch:clearRecent":`Wyczyść`,"globalSearch:showAllIn":`Pokaż wszystko w {resource}`,"common:pageOf":`Strona {page} z {total}`,"common:firstPage":`Pierwsza strona`,"common:previousPage":`Poprzednia strona`,"common:nextPage":`Następna strona`,"common:lastPage":`Ostatnia strona`,"common:recordsCount":`Rekordów: {count}`,"common:selectedCount":`Wybrano: {count}`,"common:selectRow":`Zaznacz wiersz`,"common:selectAll":`Zaznacz wszystkie`,"common:deleteSelected":`Usuń zaznaczone`,"common:bulkDeleteConfirm":`Usunąć {count} zaznaczonych rekordów?`,"toast:bulkDeleted":`Usunięto rekordów: {count}`,"toast:bulkDeleteFailed":`Nie udało się usunąć rekordów`,"common:from":`Od`,"common:to":`Do`,"common:sortBy":`Sortuj według`,"common:next":`Dalej`,"common:previous":`Wstecz`,"common:relatedRecords":`Powiązane rekordy`,"common:viewAll":`Zobacz wszystkie`,"common:noRelatedRecords":`Brak powiązanych rekordów.`,"common:preview":`Podgląd`,"common:download":`Pobierz`,"common:openInNewTab":`Otwórz w nowej karcie`,"common:format":`Sformatuj`,"common:invalidJson":`Nieprawidłowy JSON`,"common:showPassword":`Pokaż hasło`,"common:hidePassword":`Ukryj hasło`,"common:shortcutsHelp":`Skróty klawiszowe`,"common:shortcutsEmpty":`Brak skrótów dostępnych na tym ekranie.`,"auth:title":`Zaloguj się`,"auth:subtitle":`Podaj email i hasło, aby się zalogować`,"auth:tagline":`Nowoczesny panel administracyjny dla każdego stosu.`,"auth:orContinueWith":`Lub kontynuuj przez`,"auth:continueWith":`Kontynuuj przez {provider}`,"common:chooseFile":`Wybierz plik`,"common:chooseFiles":`Wybierz pliki`,"common:dragAndDrop":`Przeciągnij i upuść lub`,"common:chooseAFile":`wybierz plik`,"common:addMoreFiles":`dodaj kolejne pliki`,"common:uploading":`Przesyłanie…`,"common:uploadingFile":`Przesyłanie {name}…`,"common:removeFile":`Usuń plik`,"common:uploadFailed":`Przesyłanie nie powiodło się`,"common:dismiss":`Zamknij`,"common:openCalendar":`Otwórz kalendarz`,"common:time":`Godzina`,"common:downloadFailed":`Pobieranie nie powiodło się`,"richtext:bold":`Pogrubienie`,"richtext:italic":`Kursywa`,"richtext:strikethrough":`Przekreślenie`,"richtext:inlineCode":`Kod wbudowany`,"richtext:heading":`Nagłówek {level}`,"richtext:bulletList":`Lista punktowana`,"richtext:numberedList":`Lista numerowana`,"richtext:blockquote":`Cytat blokowy`,"richtext:horizontalRule":`Linia pozioma`,"richtext:insertLink":`Wstaw link`,"richtext:undo":`Cofnij`,"richtext:redo":`Ponów`,"richtext:source":`Źródło ({format})`,"richtext:splitView":`Widok podzielony`,"richtext:visualEditor":`Edytor wizualny`,"richtext:fullscreen":`Pełny ekran`,"richtext:exitFullscreen":`Wyjdź z pełnego ekranu`,"richtext:urlPrompt":`URL`,"common:saving":`Zapisywanie…`,"common:done":`Gotowe`,"settings:menuItem":`Ustawienia`,"settings:noSectionsConfigured":`Dla tego wdrożenia nie są dostępne żadne sekcje ustawień.`,"settings:apiKeys.title":`Klucze API`,"settings:apiKeys.description":`Tokeny programowego dostępu do API administracyjnego. Każdy klucz ma zestaw uprawnień ograniczający, jakie zasoby i akcje może wywołać.`,"settings:apiKeys.actions.create":`Nowy klucz`,"settings:apiKeys.actions.edit":`Edytuj`,"settings:apiKeys.actions.revoke":`Odwołaj`,"settings:apiKeys.empty.title":`Brak kluczy API`,"settings:apiKeys.empty.description":`Utwórz pierwszy klucz, aby przyznać dostęp programowy.`,"settings:apiKeys.columns.name":`Nazwa`,"settings:apiKeys.columns.start":`Prefiks`,"settings:apiKeys.columns.permissions":`Uprawnienia`,"settings:apiKeys.columns.expiresAt":`Wygasa`,"settings:apiKeys.columns.enabled":`Aktywny`,"settings:apiKeys.columns.actions":`Akcje`,"settings:apiKeys.lastUsed":`Ostatnio użyty {date}`,"settings:apiKeys.expiresNever":`Nigdy`,"settings:apiKeys.permissions.resource":`Zasób`,"settings:apiKeys.permissions.actions":`Akcje`,"settings:apiKeys.permissions.selectAll":`Zaznacz wszystkie`,"settings:apiKeys.permissions.clearAll":`Wyczyść wszystkie`,"settings:apiKeys.permissions.none":`Brak uprawnień`,"settings:apiKeys.permissions.summary":`{resources} zasobów · {actions} akcji`,"settings:apiKeys.permissions.noResources":`Brak zarejestrowanych zasobów.`,"settings:apiKeys.permissions.selectAllResources":`Zaznacz wszystkie zasoby i akcje`,"settings:apiKeys.permissions.clearAllResources":`Wyczyść wszystkie zasoby i akcje`,"settings:apiKeys.editor.titleCreate":`Nowy klucz API`,"settings:apiKeys.editor.titleEdit":`Edytuj klucz API`,"settings:apiKeys.editor.description":`Wybierz opisową nazwę i nadaj tylko te zasoby i akcje, których ten klucz naprawdę potrzebuje.`,"settings:apiKeys.editor.name":`Nazwa`,"settings:apiKeys.editor.namePlaceholder":`np. bot wdrożeniowy CI`,"settings:apiKeys.editor.expiresInDays":`Wygasa za (dni)`,"settings:apiKeys.editor.expiresPlaceholder":`nigdy`,"settings:apiKeys.editor.expiresHint":`Pozostaw puste, aby klucz nie wygasał. Maksymalnie 3650 dni.`,"settings:apiKeys.editor.permissions":`Uprawnienia`,"settings:apiKeys.editor.selectedActions":`Zaznaczonych: {count}`,"settings:apiKeys.created.title":`Klucz API utworzony`,"settings:apiKeys.created.description":`Skopiuj klucz teraz — nie zostanie pokazany ponownie.`,"settings:apiKeys.created.warning":`To jedyny raz, kiedy zobaczysz pełny klucz. Przechowuj go w bezpiecznym miejscu.`,"settings:apiKeys.created.reveal":`Pokaż klucz`,"settings:apiKeys.created.hide":`Ukryj klucz`,"settings:apiKeys.created.copy":`Kopiuj`,"settings:apiKeys.created.copied":`Skopiowano`,"settings:apiKeys.notice.revoked":`Klucz API odwołany`,"settings:apiKeys.notice.updated":`Klucz API zaktualizowany`,"settings:apiKeys.notice.copied":`Skopiowano do schowka`,"settings:apiKeys.notice.copyFailed":`Nie udało się skopiować do schowka`,"settings:apiKeys.confirmRevoke.title":`Odwołaj klucz API`,"settings:apiKeys.confirmRevoke.description":`Odwołać „{name}"? Każda usługa korzystająca z tego klucza natychmiast przestanie działać.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
154
+
155
+ Example:
156
+ {
157
+ "Authorization": "Bearer <token>",
158
+ "X-Source": "modern-admin"
159
+ }
160
+
161
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
162
+
163
+ Example:
164
+ {
165
+ "status": "published",
166
+ "role": "admin"
167
+ }
168
+
169
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Panel`,"chart:addChart":`Dodaj wykres`,"chart:newChart":`Nowy wykres`,"chart:editChart":`Edytuj wykres`,"chart:deleteChart":`Usuń wykres`,"chart:noCharts":`Brak wykresów`,"chart:noChartsHint":`Dodaj wykres, aby zacząć monitorować dane.`,"chart:addGroup":`Dodaj grupę`,"chart:newGroup":`Nowa grupa`,"chart:editGroup":`Edytuj grupę`,"chart:deleteGroup":`Usuń grupę`,"chart:saveGroup":`Zapisz grupę`,"chart:groupName":`Nazwa grupy`,"chart:groupNamePlaceholder":`np. Metryki sprzedaży`,"chart:groupNameRequired":`Nazwa grupy jest wymagana`,"chart:groupOrder":`Kolejność grupy`,"chart:order":`Kolejność`,"chart:orderHint":`Niższe wartości są wyświetlane jako pierwsze.`,"chart:moveToGroup":`Przenieś do grupy`,"chart:moveChart":`Przenieś wykres`,"chart:moveGroup":`Grupa`,"chart:moveNoGroups":`Brak grup.`,"chart:moveNoGroupsHint":`Najpierw utwórz grupę, aby zorganizować wykresy.`,"chart:deleteChartConfirm":`Usunąć ten wykres?`,"chart:deleteChartConfirmHint":`Tej operacji nie można cofnąć.`,"chart:deleteGroupConfirm":`Usunąć tę grupę?`,"chart:deleteGroupConfirmHint":`Grupa oraz {count} wykres(ów) w niej zostaną trwale usunięte.`,"chart:title":`Tytuł`,"chart:titlePlaceholder":`np. Nowi użytkownicy dziennie`,"chart:untitled":`Bez tytułu`,"chart:chartType":`Typ wykresu`,"chart:resource":`Zasób`,"chart:groupBy":`Grupuj według`,"chart:step":`Krok`,"chart:metric":`Metryka`,"chart:aggregateField":`Pole agregacji`,"chart:selectField":`Wybierz pole…`,"chart:saveChart":`Zapisz wykres`,"chart:typeLine":`Liniowy`,"chart:typeArea":`Obszarowy`,"chart:typeBar":`Słupkowy`,"chart:typePie":`Kołowy`,"chart:stepDay":`Dzień`,"chart:stepWeek":`Tydzień`,"chart:stepMonth":`Miesiąc`,"chart:stepYear":`Rok`,"chart:metricCount":`Liczba`,"chart:metricSum":`Suma`,"chart:metricAvg":`Średnia`,"chart:noData":`Brak danych dla wybranego okresu`,"chart:loadError":`Nie udało się załadować danych wykresu`,"chart:value":`Wartość`,"dashboard:vis":`Wizualizacja`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Liniowy`,"dashboard:visArea":`Obszarowy`,"dashboard:visBar":`Słupkowy`,"dashboard:visPie":`Kołowy`,"dashboard:metricCount":`Liczba`,"dashboard:metricSum":`Suma`,"dashboard:metricAvg":`Średnia`,"dashboard:metricMin":`Min`,"dashboard:metricMax":`Maks`,"dashboard:builder.range":`Zakres czasu`,"dashboard:builder.filters":`Filtry`,"dashboard:builder.filtersHint":`Zawęź zbiór danych przed agregacją. Zaznacz filtr, aby pokazać go nad wykresem.`,"dashboard:builder.quickFilterHint":`Pokaż ten filtr nad wykresem na pulpicie.`,"dashboard:builder.quickFilterToggle":`Pokaż {field} jako szybki filtr`,"dashboard:range.7d":`7d`,"dashboard:range.30d":`30d`,"dashboard:range.90d":`90d`,"dashboard:range.1y":`1r`,"dashboard:range.all":`Wszystko`,"dashboard:range.custom":`Niestandardowy`,"dashboard:widget.previousPeriod":`vs. poprzedni okres`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Zmniejsz do połowy szerokości`,"dashboard:widget.expand":`Rozwiń na cały wiersz`,"dashboard:widget.toggleSql":`Pokaż SQL`,"dashboard:widget.unsupported":`Wykresy nie są jeszcze obsługiwane dla Twojej bazy danych.`,"dashboard:widget.truncatedWarning":`Wyświetlanie częściowych danych — zbyt wiele wierszy, aby zagregować cały zakres.`,"dashboard:widget.showAll":`Pokaż wszystko`,"dashboard:widget.hideAll":`Ukryj wszystko`,"dashboard:seriesTotal":`Łącznie`,"dashboard:seriesOther":`Inne`,"dashboard:seriesNull":`Puste`,"dashboard:builder.dateField":`Pole daty`,"dashboard:builder.dateFieldHint":`Oś X grupowana jest po tym polu daty.`,"dashboard:builder.secondaryGroupBy":`Podział`,"dashboard:builder.noBreakdown":`Pojedyncza seria`,"dashboard:builder.topN":`Maks. serii`,"dashboard:builder.width":`Szerokość`,"dashboard:width.half":`Połowa`,"dashboard:width.full":`Cały wiersz`,"dashboard:builder.comparePrevious":`Porównaj z poprzednim okresem`,"dashboard:builder.comparePreviousHint":`Nakłada poprzedni okres o tej samej długości jako linię przerywaną i pokazuje zmianę obok tytułu.`,"dashboard:builder.comparePreviousDisabled":`Niedostępne przy podziale.`,"dashboard:builder.transform":`Przekształcenie wartości`,"dashboard:builder.transformHint":`Stosowane do wartości przed wyświetleniem — np. podziel przez 100, aby pokazać centy jako dolary.`,"dashboard:builder.transformAdd":`Dodaj krok`,"dashboard:builder.transformRemove":`Usuń krok`,"dashboard:builder.opDivide":`Podziel przez`,"dashboard:builder.opMultiply":`Pomnóż przez`,"dashboard:builder.opAdd":`Dodaj`,"dashboard:builder.opSubtract":`Odejmij`,"dashboard:builder.format":`Format wartości`,"dashboard:builder.formatStyle":`Styl`,"dashboard:builder.formatNumber":`Liczba`,"dashboard:builder.formatCurrency":`Waluta`,"dashboard:builder.formatPercent":`Procent`,"dashboard:builder.formatCurrencyCode":`Kod waluty`,"dashboard:builder.formatDecimals":`Miejsca dziesiętne`,"dashboard:builder.formatCompact":`Liczby kompaktowe (12,5 tys.)`,"dashboard:builder.formatPrefix":`Prefiks`,"dashboard:builder.formatSuffix":`Sufiks`,"dashboard:builder.color":`Kolor serii`,"dashboard:widget.previousSeries":`{label} (poprzedni okres)`,"dashboard:widget.editColors":`Edytuj kolory`,"dashboard:widget.colorsTitle":`Kolory serii`,"dashboard:widget.colorCustom":`Niestandardowy`,"dashboard:widget.colorAuto":`Automatyczny`,"dashboard:widget.colorPick":`Wybierz kolor`,"dashboard:builder.tabData":`Dane`,"dashboard:builder.tabDisplay":`Wyświetlanie`,"dashboard:builder.tabFilters":`Filtry`,"dashboard:builder.filtersEmpty":`Ten zasób nie ma pól do filtrowania.`,"history:revisions":`Rewizje`,"history:noRevisions":`Brak rewizji`,"history:loadError":`Nie udało się wczytać historii zmian`,"history:revert":`Przywróć`,"history:confirmRevert":`Przywrócić tę rewizję?`,"history:revertSuccess":`Rewizja przywrócona`,"history:revertFailed":`Nie udało się przywrócić rewizji`,"history:unknownUser":`Nieznany użytkownik`,"history:changes":`zmian`,"history:compareTo":`Porównaj z`,"history:storedDiff":`Diff zmiany`,"history:op.create":`Utworzono`,"history:op.update":`Zaktualizowano`,"history:op.delete":`Usunięto`,"diff:added":`Dodano`,"diff:changed":`Zmieniono`,"diff:removed":`Usunięto`,"diff:before":`Przed`,"diff:after":`Po`,"diff:noChanges":`Nie zapisano zmian pól`,"audit:title":`Aktywność`,"audit:resource":`Zasób`,"audit:action":`Akcja`,"audit:recordId":`ID rekordu`,"audit:userId":`ID użytkownika`,"audit:allResources":`Wszystkie zasoby`,"audit:allActions":`Wszystkie akcje`,"audit:noEvents":`Brak aktywności`,"audit:records":`rekordów`,"audit:loadError":`Nie udało się wczytać aktywności`,"audit:by":`autor: {user}`,"audit:viewRecord":`Otwórz rekord`,"audit:viewChanges":`Pokaż zmiany`,"audit:hideChanges":`Ukryj zmiany`,"audit:noDiff":`Szczegóły zmian niedostępne`,"audit:loadDiffError":`Nie udało się wczytać zmian`,"audit:action.new":`Rekord utworzony`,"audit:action.edit":`Rekord zaktualizowany`,"audit:action.delete":`Rekord usunięty`,"audit:action.bulkDelete":`Rekordy usunięte`,"audit:action.login":`Zalogowano`,"audit:action.apiKeyCreate":`Klucz API utworzony`,"audit:action.apiKeyUpdate":`Klucz API zaktualizowany`,"audit:action.apiKeyDelete":`Klucz API usunięty`,"audit:virtualResource.auth":`Uwierzytelnianie`,"audit:virtualResource.apiKeys":`Klucze API`,"audit:prevPage":`Poprzednia`,"audit:nextPage":`Następna`,"audit:dateRangePlaceholder":`Wybierz zakres dat`,"keyValue:noMatches":`Brak dopasowań — naciśnij Enter, aby zachować „{value}".`,"aiAssistant:queue.cancel":`Usuń z kolejki`,"aiAssistant:title":`Asystent AI`,"aiAssistant:fab.label":`Otwórz asystenta AI`,"aiAssistant:fab.short":`AI`,"aiAssistant:description":`Zadawaj pytania o rekordy, relacje, raporty i trendy w danych.`,"aiAssistant:notConfigured.title":`Asystent nie jest skonfigurowany`,"aiAssistant:notConfigured.description":`Dodaj klucz API OpenRouter w ustawieniach, aby włączyć asystenta AI w trybie tylko do odczytu.`,"aiAssistant:notConfigured.openSettings":`Otwórz ustawienia`,"aiAssistant:tryAsking":`Spróbuj zapytać:`,"aiAssistant:tryAsking.example1":`Którzy klienci mają najwięcej postów?`,"aiAssistant:tryAsking.example2":`Pokaż ostatnio utworzone rekordy dla zasobu.`,"aiAssistant:tryAsking.example3":`Wyjaśnij relacje między konkretnymi rekordami.`,"aiAssistant:thinking":`Myślę`,"aiAssistant:thinkingProgress":`Myślę ({progress}%)`,"aiAssistant:input.placeholder":`Zapytaj o swoje dane…`,"aiAssistant:input.hint":`Enter wysyła · Shift+Enter dodaje nowy wiersz`,"aiAssistant:send":`Wyślij wiadomość`,"aiAssistant:newChat":`Nowy czat`,"aiAssistant:history":`Historia czatów`,"aiAssistant:history.empty":`Brak wcześniejszych czatów`,"aiAssistant:noText":`Oto znalezione powiązane rekordy:`,"aiAssistant:fallback.noToolResult":`Żądanie zostało wykonane, ale model nie zwrócił odpowiedzi tekstowej. Doprecyzuj pytanie albo włącz logi debugowania, aby sprawdzić wynik narzędzia.`,"aiAssistant:fallback.noRows":`Nie znaleziono rekordów dla tego żądania.`,"aiAssistant:fallback.rowsFound":`Znalezione wiersze: {count}.`,"aiAssistant:taskFailed":`Zadanie asystenta AI nie powiodło się`,"aiAssistant:settings.title":`Asystent AI`,"aiAssistant:settings.description":`Skonfiguruj pływający widżet czatu AI, model i zachowanie asystenta po stronie serwera.`,"aiAssistant:settings.enabled":`Włączony`,"aiAssistant:settings.disabled":`Wyłączony`,"aiAssistant:settings.configured":`Skonfigurowano`,"aiAssistant:settings.apiKeyRequired":`Wymagany klucz API`,"aiAssistant:settings.readOnly":`Tylko do odczytu`,"aiAssistant:settings.provider":`Dostawca: {provider}`,"aiAssistant:settings.enableLabel":`Włącz asystenta`,"aiAssistant:settings.enableHint":`Kontroluje widoczność pływającego widżetu i punktu końcowego czatu.`,"aiAssistant:settings.modelLabel":`Model OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Klucz API OpenRouter`,"aiAssistant:settings.apiKeyHint":`Pozostaw puste, aby zachować istniejący klucz zapisany na serwerze.`,"aiAssistant:settings.systemPromptLabel":`Nadpisanie promptu systemowego`,"aiAssistant:settings.systemPromptPlaceholder":`Opcjonalne instrukcje dla asystenta specyficzne dla projektu`,"aiAssistant:settings.accessTitle":`Model dostępu`,"aiAssistant:settings.accessDescription":`Obecny asystent jest ograniczony do inspekcji rekordów tylko do odczytu poprzez akcje zasobów administracyjnych.`,"aiAssistant:settings.futureToolsReady":`Przyszłe narzędzia gotowe`,"aiAssistant:settings.save":`Zapisz ustawienia`,"aiAssistant:settings.saving":`Zapisywanie…`,"aiAssistant:settings.saved":`Ustawienia asystenta AI zapisane`,"aiAssistant:settings.empty":`Brak dostępnych ustawień.`,"aiFill:button":`Wypełnij AI`,"aiFill:dialogTitle":`Wypełnij formularz ze zdjęcia`,"aiFill:dialogDescription":`Prześlij obraz — AI wyodrębni wartości i wypełni formularz.`,"aiFill:fillButton":`Rozpoznaj`,"aiFill:processing":`Rozpoznawanie obrazu…`,"aiFill:success":`Wypełniono {count} pole/pól`,"aiFill:errorNoFields":`Ten zasób nie ma pól możliwych do wypełnienia przez AI.`,"aiFill:errorGeneric":`Wypełnianie przez AI nie powiodło się: {message}`,"aiFill:noValues":`AI nie mogła wyodrębnić żadnych wartości z tego obrazu.`,"aiFill:applied":`AI wypełniło {count} pole(i). Możesz cofnąć poniżej.`,"filter:op.co":`Zawiera`,"filter:op.nco":`Nie zawiera`,"filter:op.sw":`Zaczyna się od`,"filter:op.ew":`Kończy się na`,"filter:op.eq":`Jest równe`,"filter:op.neq":`Nie jest równe`,"filter:op.empty":`Jest puste`,"filter:op.nempty":`Nie jest puste`,"filter:op.in":`Jest jednym z`,"filter:op.gt":`Większe niż`,"filter:op.lt":`Mniejsze niż`,"filter:op.between":`Między`,"filter:searchValues":`Szukaj na liście…`,"filter:selectAll":`Zaznacz wszystko`,"filter:noValues":`Nie znaleziono wartości`,"common:newRecord":`Nowy {name}`,"common:editRecord":`Edytuj {name} #{id}`,"common:themeLight":`Jasny`,"common:themeDark":`Ciemny`,"common:themeSystem":`System`,"common:ok":`OK`,"common:select":`Wybierz…`,"common:removeItem":`Usuń {title}`,"common:nSelectedAddMore":`{count} zaznaczonych — dodaj więcej`,"common:pickRecords":`Wybierz rekordy`,"common:managePickRecords":`Zarządzaj wyborem ({count})`,"common:pickRecordsFrom":`Wybierz z {name}`,"common:draftRestored":`Przywrócono niezapisany szkic`,"common:undoDraftRestore":`Cofnij`,"wizard:stepOf":`Krok {current} z {total}`,"wizard:products.step1":`Podstawowe informacje`,"wizard:products.step2":`Ceny`,"wizard:products.step3":`Media i tagi`,"common:invalidValue":`Nieprawidłowa wartość`,"common:collapseSidebar":`Zwiń pasek boczny`,"common:expandSidebar":`Rozwiń pasek boczny`,"common:toggleSidebar":`Przełącz pasek boczny`,"common:sidebarTitle":`Pasek boczny`,"common:sidebarNavigation":`Menu nawigacyjne`,"cache:title":`Pamięć podręczna`,"cache:description":`Stan pamięci podręcznej i wydajność zasobów na tej replice.`,"cache:load.error":`Nie udało się wczytać metryk pamięci podręcznej`,"cache:load.retry":`Spróbuj ponownie`,"cache:reset.action":`Wyzeruj metryki`,"cache:reset.loading":`Zerowanie metryk pamięci podręcznej…`,"cache:reset.success":`Metryki pamięci podręcznej wyzerowane`,"cache:reset.error":`Nie udało się wyzerować metryk`,"cache:metric.hitRate":`Współczynnik trafień`,"cache:metric.requests":`Odczyty pamięci`,"cache:metric.avgCompute":`Średni czas obliczeń`,"cache:metric.errors":`Błędy`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Tagi w kwarantannie`,"cache:quarantine.description":`Te tagi omijają pamięć podręczną do pomyślnego unieważnienia.`,"cache:invalidate.title":`Unieważnij pamięć zasobu`,"cache:invalidate.description":`Usuwa listy i rekordy zasobu ze wszystkich skonfigurowanych replik.`,"cache:invalidate.resource":`Zasób`,"cache:invalidate.action":`Unieważnij pamięć`,"cache:invalidate.loading":`Unieważnianie pamięci…`,"cache:invalidate.success":`Pamięć zasobu unieważniona`,"cache:invalidate.error":`Nie udało się unieważnić pamięci zasobu`,"cache:table.title":`Metryki według przestrzeni nazw`,"cache:table.empty":`Nie zarejestrowano jeszcze aktywności pamięci podręcznej.`,"cache:instance":`Replika {id}`,"cache:table.namespace":`Przestrzeń nazw`,"cache:table.resource":`Zasób`,"cache:table.hits":`Trafienia`,"cache:table.misses":`Pudła`,"cache:table.computes":`Obliczenia`,"cache:table.coalesced":`Połączone`,"cache:table.errors":`Błędy`}},{code:`pt-BR`,name:`Português (Brasil)`,dict:{"common:appName":`Modern Admin`,"common:home":`Início`,"common:search":`Pesquisar`,"common:loading":`Carregando…`,"common:save":`Salvar`,"common:cancel":`Cancelar`,"common:delete":`Excluir`,"common:create":`Criar`,"common:edit":`Editar`,"common:show":`Visualizar`,"common:back":`Voltar`,"common:noRecords":`Nenhum registro encontrado.`,"common:noRecordsHint":`Comece criando um novo {resource}.`,"common:noMatchingRecords":`Nenhum registro corresponde aos seus filtros.`,"common:clearFilters":`Limpar filtros`,"common:confirmDelete":`Excluir este registro?`,"common:confirmAction":`Confirmar ação`,"common:confirm":`Confirmar`,"common:perPage":`Por página`,"common:page":`Página`,"common:of":`de`,"common:total":`Total`,"auth:login":`Entrar`,"auth:logout":`Sair`,"auth:email":`Email`,"auth:password":`Senha`,"auth:loginFailed":`Credenciais inválidas.`,"errors:notFound":`Não encontrado.`,"errors:forbidden":`Você não tem acesso a este recurso.`,"errors:server":`Algo deu errado. Tente novamente.`,"common:resources":`Recursos`,"common:actions":`Ações`,"action:notFound":`A ação "{action}" não está disponível neste recurso.`,"action:componentMissing":`Nenhum componente chamado "{component}" está registrado.`,"action:componentMissingHint":`Registre-o no ComponentLoader passado para <ModernAdminProvider components={…}>.`,"action:loadFailed":`Falha ao carregar a ação.`,"common:new":`Novo`,"common:rowsPerPage":`Linhas por página`,"common:filter":`Filtrar {label}…`,"validation:required":`{label} é obrigatório`,"validation:invalidNumber":`{label} deve ser um número válido`,"validation:invalidInteger":`{label} deve ser um inteiro`,"validation:invalidEmail":`{label} deve ser um e-mail válido`,"validation:invalidUrl":`{label} deve ser uma URL válida`,"validation:invalidDate":`{label} deve ser uma data válida`,"validation:invalidUuid":`{label} deve ser um UUID válido`,"validation:tooShort":`{label} deve ter pelo menos {min} caracteres`,"validation:tooLong":`{label} deve ter no máximo {max} caracteres`,"validation:notInList":`{label} tem um valor inválido`,"validation:emptySelection":`Selecione pelo menos um valor para {label}`,"toast:created":`Criado com sucesso`,"toast:saved":`Salvo com sucesso`,"toast:deleted":`Excluído com sucesso`,"toast:createFailed":`Falha ao criar`,"toast:saveFailed":`Falha ao salvar`,"toast:deleteFailed":`Falha ao excluir`,"toast:loadFailed":`Falha ao carregar`,"toast:validationFailed":`Corrija os erros e tente novamente`,"common:close":`Fechar`,"common:export":`Exportar`,"export:title":`Exportar registros`,"export:description":`Baixar todos os registros correspondentes de {resource} em um único arquivo.`,"export:csvHint":`Valores separados por vírgula`,"export:jsonHint":`Array JSON estruturado`,"export:downloading":`Preparando download…`,"export:progress":`{loaded} de {total} carregados…`,"export:exported":`{count} registros exportados`,"export:exportFailed":`Falha ao exportar registros`,"common:apply":`Aplicar`,"common:clear":`Limpar`,"common:filters":`Filtros`,"common:columns":`Colunas`,"common:toggleColumns":`Mostrar colunas`,"common:openMenu":`Abrir menu`,"common:refresh":`Atualizar`,"common:copy":`Copiar`,"common:copied":`Copiado!`,"common:applyFilters":`Aplicar filtros`,"common:clearAll":`Limpar tudo`,"common:any":`Qualquer`,"common:yes":`Sim`,"common:no":`Não`,"common:filterPlaceholder":`Filtrar…`,"common:loadFailed":`Falha ao carregar: {error}`,"common:theme":`Tema`,"common:language":`Idioma`,"common:toggleTheme":`Alternar tema`,"common:clearSelection":`Limpar seleção`,"common:searchPlaceholder":`Buscar…`,"home:searchResources":`Buscar recursos…`,"home:noMatchingResources":`Nenhum recurso correspondente encontrado.`,"globalSearch:title":`Busca global`,"globalSearch:description":`Buscar em todos os recursos e registros.`,"globalSearch:trigger":`Buscar…`,"globalSearch:placeholder":`Buscar em todos os recursos…`,"globalSearch:hint":`Comece a digitar para buscar em todos os recursos.`,"globalSearch:noResults":`Nenhum registro correspondente encontrado.`,"globalSearch:error":`Falha na busca. Tente novamente.`,"globalSearch:hotkey":`Abrir busca global`,"globalSearch:matchedIn":`em {field}`,"globalSearch:recent":`Buscas recentes`,"globalSearch:clearRecent":`Limpar`,"globalSearch:showAllIn":`Mostrar tudo em {resource}`,"common:pageOf":`Página {page} de {total}`,"common:firstPage":`Primeira página`,"common:previousPage":`Página anterior`,"common:nextPage":`Próxima página`,"common:lastPage":`Última página`,"common:recordsCount":`{count} registros`,"common:selectedCount":`{count} selecionados`,"common:selectRow":`Selecionar linha`,"common:selectAll":`Selecionar tudo`,"common:deleteSelected":`Excluir selecionados`,"common:bulkDeleteConfirm":`Excluir {count} registros selecionados?`,"toast:bulkDeleted":`{count} registros excluídos`,"toast:bulkDeleteFailed":`Falha ao excluir registros`,"common:from":`De`,"common:to":`Até`,"common:sortBy":`Ordenar por`,"common:next":`Próximo`,"common:previous":`Anterior`,"common:relatedRecords":`Registros relacionados`,"common:viewAll":`Ver todos`,"common:noRelatedRecords":`Sem registros relacionados.`,"common:preview":`Pré-visualizar`,"common:download":`Baixar`,"common:openInNewTab":`Abrir em nova aba`,"common:format":`Formatar`,"common:invalidJson":`JSON inválido`,"common:showPassword":`Mostrar senha`,"common:hidePassword":`Ocultar senha`,"common:shortcutsHelp":`Atalhos de teclado`,"common:shortcutsEmpty":`Não há atalhos disponíveis nesta tela.`,"auth:title":`Entrar`,"auth:subtitle":`Insira seu e-mail e senha para entrar`,"auth:tagline":`O painel de administração moderno para qualquer stack.`,"auth:orContinueWith":`Ou continuar com`,"auth:continueWith":`Continuar com {provider}`,"common:chooseFile":`Escolher arquivo`,"common:chooseFiles":`Escolher arquivos`,"common:dragAndDrop":`Arraste e solte ou`,"common:chooseAFile":`escolher um arquivo`,"common:addMoreFiles":`adicionar mais arquivos`,"common:uploading":`Enviando…`,"common:uploadingFile":`Enviando {name}…`,"common:removeFile":`Remover arquivo`,"common:uploadFailed":`Falha ao enviar`,"common:dismiss":`Fechar`,"common:openCalendar":`Abrir calendário`,"common:time":`Hora`,"common:downloadFailed":`Falha ao baixar`,"richtext:bold":`Negrito`,"richtext:italic":`Itálico`,"richtext:strikethrough":`Tachado`,"richtext:inlineCode":`Código inline`,"richtext:heading":`Título {level}`,"richtext:bulletList":`Lista com marcadores`,"richtext:numberedList":`Lista numerada`,"richtext:blockquote":`Citação em bloco`,"richtext:horizontalRule":`Linha horizontal`,"richtext:insertLink":`Inserir link`,"richtext:undo":`Desfazer`,"richtext:redo":`Refazer`,"richtext:source":`Fonte ({format})`,"richtext:splitView":`Visão dividida`,"richtext:visualEditor":`Editor visual`,"richtext:fullscreen":`Tela cheia`,"richtext:exitFullscreen":`Sair da tela cheia`,"richtext:urlPrompt":`URL`,"common:saving":`Salvando…`,"common:done":`Concluído`,"settings:menuItem":`Configurações`,"settings:noSectionsConfigured":`Nenhuma seção de configurações está disponível para esta instalação.`,"settings:apiKeys.title":`Chaves de API`,"settings:apiKeys.description":`Tokens de acesso programático à API de administração. Cada chave traz um conjunto de permissões que limita os recursos e ações que ela pode invocar.`,"settings:apiKeys.actions.create":`Nova chave`,"settings:apiKeys.actions.edit":`Editar`,"settings:apiKeys.actions.revoke":`Revogar`,"settings:apiKeys.empty.title":`Ainda não há chaves de API`,"settings:apiKeys.empty.description":`Crie a primeira chave para conceder acesso programático.`,"settings:apiKeys.columns.name":`Nome`,"settings:apiKeys.columns.start":`Prefixo`,"settings:apiKeys.columns.permissions":`Permissões`,"settings:apiKeys.columns.expiresAt":`Expira`,"settings:apiKeys.columns.enabled":`Ativa`,"settings:apiKeys.columns.actions":`Ações`,"settings:apiKeys.lastUsed":`Último uso {date}`,"settings:apiKeys.expiresNever":`Nunca`,"settings:apiKeys.permissions.resource":`Recurso`,"settings:apiKeys.permissions.actions":`Ações`,"settings:apiKeys.permissions.selectAll":`Selecionar tudo`,"settings:apiKeys.permissions.clearAll":`Limpar tudo`,"settings:apiKeys.permissions.none":`Sem permissões`,"settings:apiKeys.permissions.summary":`{resources} recursos · {actions} ações`,"settings:apiKeys.permissions.noResources":`Nenhum recurso registrado.`,"settings:apiKeys.permissions.selectAllResources":`Selecionar todos os recursos e ações`,"settings:apiKeys.permissions.clearAllResources":`Limpar todos os recursos e ações`,"settings:apiKeys.editor.titleCreate":`Nova chave de API`,"settings:apiKeys.editor.titleEdit":`Editar chave de API`,"settings:apiKeys.editor.description":`Escolha um nome descritivo e conceda apenas os recursos e ações de que esta chave realmente precisa.`,"settings:apiKeys.editor.name":`Nome`,"settings:apiKeys.editor.namePlaceholder":`ex.: bot de deploy do CI`,"settings:apiKeys.editor.expiresInDays":`Expira em (dias)`,"settings:apiKeys.editor.expiresPlaceholder":`nunca`,"settings:apiKeys.editor.expiresHint":`Deixe em branco para não expirar. Máximo de 3650 dias.`,"settings:apiKeys.editor.permissions":`Permissões`,"settings:apiKeys.editor.selectedActions":`{count} selecionadas`,"settings:apiKeys.created.title":`Chave de API criada`,"settings:apiKeys.created.description":`Copie a chave agora — ela não será exibida novamente.`,"settings:apiKeys.created.warning":`Esta é a única vez que você verá a chave completa. Guarde-a em local seguro.`,"settings:apiKeys.created.reveal":`Mostrar chave`,"settings:apiKeys.created.hide":`Ocultar chave`,"settings:apiKeys.created.copy":`Copiar`,"settings:apiKeys.created.copied":`Copiada`,"settings:apiKeys.notice.revoked":`Chave de API revogada`,"settings:apiKeys.notice.updated":`Chave de API atualizada`,"settings:apiKeys.notice.copied":`Copiada para a área de transferência`,"settings:apiKeys.notice.copyFailed":`Não foi possível copiar para a área de transferência`,"settings:apiKeys.confirmRevoke.title":`Revogar chave de API`,"settings:apiKeys.confirmRevoke.description":`Revogar "{name}"? Qualquer serviço que use esta chave deixará de funcionar imediatamente.`,"settings:webhooks.title":`Webhooks`,"settings:webhooks.description":`Send signed HTTP notifications when records are created, updated, or deleted.`,"settings:webhooks.actions.create":`New webhook`,"settings:webhooks.actions.test":`Test`,"settings:webhooks.notice.saved":`Webhook saved`,"settings:webhooks.notice.deleted":`Webhook deleted`,"settings:webhooks.notice.testQueued":`Test notification queued`,"settings:webhooks.confirmDelete.title":`Delete webhook`,"settings:webhooks.confirmDelete.description":`Delete "{name}"? Delivery history for this webhook will also be removed.`,"settings:webhooks.empty.title":`No webhooks yet`,"settings:webhooks.empty.description":`Create a webhook to notify external systems about admin changes.`,"settings:webhooks.columns.name":`Name`,"settings:webhooks.columns.resource":`Resource`,"settings:webhooks.columns.events":`Events`,"settings:webhooks.columns.enabled":`Enabled`,"settings:webhooks.columns.actions":`Actions`,"settings:webhooks.deliveries.title":`Recent deliveries`,"settings:webhooks.deliveries.status":`Status`,"settings:webhooks.deliveries.event":`Event`,"settings:webhooks.deliveries.attempt":`Attempt`,"settings:webhooks.deliveries.response":`Response`,"settings:webhooks.deliveries.createdAt":`Created`,"settings:webhooks.editor.titleCreate":`New webhook`,"settings:webhooks.editor.titleEdit":`Edit webhook`,"settings:webhooks.editor.description":`Choose target URL, events, filters, and optional payload projection.`,"settings:webhooks.editor.name":`Name`,"settings:webhooks.editor.url":`URL`,"settings:webhooks.editor.resource":`Resource`,"settings:webhooks.editor.allResources":`All resources`,"settings:webhooks.editor.secret":`Signing secret`,"settings:webhooks.editor.enabled":`Enabled`,"settings:webhooks.editor.events":`Events`,"settings:webhooks.editor.payloadFields":`Payload fields`,"settings:webhooks.editor.payloadFieldsHint":`Restrict the payload to specific fields. Leave all unchecked to include the full record. Useful to avoid sending sensitive columns.`,"settings:webhooks.editor.headers":`Headers`,"settings:webhooks.editor.headersHint":`Custom HTTP headers sent with every delivery.
170
+
171
+ Example:
172
+ {
173
+ "Authorization": "Bearer <token>",
174
+ "X-Source": "modern-admin"
175
+ }
176
+
177
+ Useful for auth tokens, Slack incoming webhook URLs stored as a header, or endpoint-specific signatures.`,"settings:webhooks.editor.filters":`Filters`,"settings:webhooks.editor.filtersHint":`Deliver only when the record matches all conditions (AND semantics). Leave empty to deliver for every matching event.
178
+
179
+ Example:
180
+ {
181
+ "status": "published",
182
+ "role": "admin"
183
+ }
184
+
185
+ Note: delete events bypass field filters because the record no longer exists.`,"settings:webhooks.editor.secretHint":`Random string used to sign each delivery with HMAC-SHA256. Verify the X-Webhook-Signature header on your server to ensure the request is genuine.`,"chart:dashboard":`Painel`,"chart:addChart":`Adicionar gráfico`,"chart:newChart":`Novo gráfico`,"chart:editChart":`Editar gráfico`,"chart:deleteChart":`Remover gráfico`,"chart:noCharts":`Nenhum gráfico ainda`,"chart:noChartsHint":`Adicione um gráfico para começar a monitorar seus dados.`,"chart:addGroup":`Adicionar grupo`,"chart:newGroup":`Novo grupo`,"chart:editGroup":`Editar grupo`,"chart:deleteGroup":`Remover grupo`,"chart:saveGroup":`Salvar grupo`,"chart:groupName":`Nome do grupo`,"chart:groupNamePlaceholder":`ex. Métricas de vendas`,"chart:groupNameRequired":`O nome do grupo é obrigatório`,"chart:groupOrder":`Ordem do grupo`,"chart:order":`Ordem`,"chart:orderHint":`Valores menores aparecem primeiro.`,"chart:moveToGroup":`Mover para grupo`,"chart:moveChart":`Mover gráfico`,"chart:moveGroup":`Grupo`,"chart:moveNoGroups":`Nenhum grupo ainda.`,"chart:moveNoGroupsHint":`Crie um grupo primeiro para organizar seus gráficos.`,"chart:deleteChartConfirm":`Remover este gráfico?`,"chart:deleteChartConfirmHint":`Esta ação não pode ser desfeita.`,"chart:deleteGroupConfirm":`Remover este grupo?`,"chart:deleteGroupConfirmHint":`O grupo e os {count} gráfico(s) que ele contém serão excluídos permanentemente.`,"chart:title":`Título`,"chart:titlePlaceholder":`ex. Novos usuários por dia`,"chart:untitled":`Sem título`,"chart:chartType":`Tipo de gráfico`,"chart:resource":`Recurso`,"chart:groupBy":`Agrupar por`,"chart:step":`Passo`,"chart:metric":`Métrica`,"chart:aggregateField":`Campo de agregação`,"chart:selectField":`Selecionar campo…`,"chart:saveChart":`Salvar gráfico`,"chart:typeLine":`Linha`,"chart:typeArea":`Área`,"chart:typeBar":`Barras`,"chart:typePie":`Pizza`,"chart:stepDay":`Dia`,"chart:stepWeek":`Semana`,"chart:stepMonth":`Mês`,"chart:stepYear":`Ano`,"chart:metricCount":`Contagem`,"chart:metricSum":`Soma`,"chart:metricAvg":`Média`,"chart:noData":`Sem dados para o período selecionado`,"chart:loadError":`Falha ao carregar dados do gráfico`,"chart:value":`Valor`,"dashboard:vis":`Visualização`,"dashboard:visKpi":`KPI`,"dashboard:visLine":`Linha`,"dashboard:visArea":`Área`,"dashboard:visBar":`Barras`,"dashboard:visPie":`Pizza`,"dashboard:metricCount":`Contagem`,"dashboard:metricSum":`Soma`,"dashboard:metricAvg":`Média`,"dashboard:metricMin":`Mín`,"dashboard:metricMax":`Máx`,"dashboard:builder.range":`Período`,"dashboard:builder.filters":`Filtros`,"dashboard:builder.filtersHint":`Restringe o conjunto de dados antes da agregação. Marque um filtro para exibi-lo acima do gráfico.`,"dashboard:builder.quickFilterHint":`Exibir este filtro acima do gráfico no painel.`,"dashboard:builder.quickFilterToggle":`Expor {field} como filtro rápido`,"dashboard:range.7d":`7d`,"dashboard:range.30d":`30d`,"dashboard:range.90d":`90d`,"dashboard:range.1y":`1a`,"dashboard:range.all":`Tudo`,"dashboard:range.custom":`Personalizado`,"dashboard:widget.previousPeriod":`vs. período anterior`,"dashboard:widget.deltaUp":`+{value} ({percent}%)`,"dashboard:widget.deltaDown":`−{value} ({percent}%)`,"dashboard:widget.deltaFlat":`{value} ({percent}%)`,"dashboard:widget.shrink":`Reduzir para metade da largura`,"dashboard:widget.expand":`Expandir para linha inteira`,"dashboard:widget.toggleSql":`Mostrar SQL`,"dashboard:widget.unsupported":`Gráficos ainda não são suportados para o seu banco de dados.`,"dashboard:widget.truncatedWarning":`Exibindo dados parciais — muitas linhas para agregar todo o intervalo.`,"dashboard:widget.showAll":`Mostrar tudo`,"dashboard:widget.hideAll":`Ocultar tudo`,"dashboard:seriesTotal":`Total`,"dashboard:seriesOther":`Outros`,"dashboard:seriesNull":`Vazio`,"dashboard:builder.dateField":`Campo de data`,"dashboard:builder.dateFieldHint":`O eixo X é agrupado por esta coluna de data.`,"dashboard:builder.secondaryGroupBy":`Detalhamento`,"dashboard:builder.noBreakdown":`Série única`,"dashboard:builder.topN":`Máx. séries`,"dashboard:builder.width":`Largura`,"dashboard:width.half":`Metade`,"dashboard:width.full":`Linha inteira`,"dashboard:builder.comparePrevious":`Comparar com o período anterior`,"dashboard:builder.comparePreviousHint":`Sobrepõe o período anterior de mesma duração como linha tracejada e mostra a variação ao lado do título.`,"dashboard:builder.comparePreviousDisabled":`Indisponível com um detalhamento.`,"dashboard:builder.transform":`Transformação de valores`,"dashboard:builder.transformHint":`Aplicada aos valores antes da exibição — p. ex., dividir por 100 para mostrar centavos como reais.`,"dashboard:builder.transformAdd":`Adicionar etapa`,"dashboard:builder.transformRemove":`Remover etapa`,"dashboard:builder.opDivide":`Dividir por`,"dashboard:builder.opMultiply":`Multiplicar por`,"dashboard:builder.opAdd":`Somar`,"dashboard:builder.opSubtract":`Subtrair`,"dashboard:builder.format":`Formato de valores`,"dashboard:builder.formatStyle":`Estilo`,"dashboard:builder.formatNumber":`Número`,"dashboard:builder.formatCurrency":`Moeda`,"dashboard:builder.formatPercent":`Porcentagem`,"dashboard:builder.formatCurrencyCode":`Código da moeda`,"dashboard:builder.formatDecimals":`Casas decimais`,"dashboard:builder.formatCompact":`Números compactos (12,5 mil)`,"dashboard:builder.formatPrefix":`Prefixo`,"dashboard:builder.formatSuffix":`Sufixo`,"dashboard:builder.color":`Cor da série`,"dashboard:widget.previousSeries":`{label} (período anterior)`,"dashboard:widget.editColors":`Editar cores`,"dashboard:widget.colorsTitle":`Cores das séries`,"dashboard:widget.colorCustom":`Personalizado`,"dashboard:widget.colorAuto":`Automático`,"dashboard:widget.colorPick":`Escolher uma cor`,"dashboard:builder.tabData":`Dados`,"dashboard:builder.tabDisplay":`Exibição`,"dashboard:builder.tabFilters":`Filtros`,"dashboard:builder.filtersEmpty":`Este recurso não tem campos filtráveis.`,"history:revisions":`Revisões`,"history:noRevisions":`Ainda não há revisões`,"history:loadError":`Não foi possível carregar o histórico de alterações`,"history:revert":`Reverter`,"history:confirmRevert":`Reverter para esta revisão?`,"history:revertSuccess":`Revisão restaurada`,"history:revertFailed":`Não foi possível restaurar a revisão`,"history:unknownUser":`Usuário desconhecido`,"history:changes":`alterações`,"history:compareTo":`Comparar com`,"history:storedDiff":`Diff da alteração`,"history:op.create":`Criado`,"history:op.update":`Atualizado`,"history:op.delete":`Removido`,"diff:added":`Adicionado`,"diff:changed":`Alterado`,"diff:removed":`Removido`,"diff:before":`Antes`,"diff:after":`Depois`,"diff:noChanges":`Nenhuma alteração de campo registrada`,"audit:title":`Atividade`,"audit:resource":`Recurso`,"audit:action":`Ação`,"audit:recordId":`ID do registro`,"audit:userId":`ID do usuário`,"audit:allResources":`Todos os recursos`,"audit:allActions":`Todas as ações`,"audit:noEvents":`Ainda não há atividade`,"audit:records":`registros`,"audit:loadError":`Não foi possível carregar a atividade`,"audit:by":`por {user}`,"audit:viewRecord":`Ver registro`,"audit:viewChanges":`Ver alterações`,"audit:hideChanges":`Ocultar alterações`,"audit:noDiff":`Detalhes das alterações indisponíveis`,"audit:loadDiffError":`Falha ao carregar alterações`,"audit:action.new":`Registro criado`,"audit:action.edit":`Registro atualizado`,"audit:action.delete":`Registro removido`,"audit:action.bulkDelete":`Registros removidos`,"audit:action.login":`Login realizado`,"audit:action.apiKeyCreate":`Chave de API criada`,"audit:action.apiKeyUpdate":`Chave de API atualizada`,"audit:action.apiKeyDelete":`Chave de API excluída`,"audit:virtualResource.auth":`Autenticação`,"audit:virtualResource.apiKeys":`Chaves de API`,"audit:prevPage":`Anterior`,"audit:nextPage":`Próxima`,"audit:dateRangePlaceholder":`Selecionar período`,"keyValue:noMatches":`Sem correspondências — pressione Enter para manter "{value}".`,"aiAssistant:queue.cancel":`Remover da fila`,"aiAssistant:title":`Assistente IA`,"aiAssistant:fab.label":`Abrir assistente IA`,"aiAssistant:fab.short":`IA`,"aiAssistant:description":`Faça perguntas sobre registros, relacionamentos, relatórios e tendências de dados.`,"aiAssistant:notConfigured.title":`Assistente não configurado`,"aiAssistant:notConfigured.description":`Adicione a chave de API do OpenRouter nas configurações para ativar o assistente IA somente leitura.`,"aiAssistant:notConfigured.openSettings":`Abrir configurações`,"aiAssistant:tryAsking":`Experimente perguntar:`,"aiAssistant:tryAsking.example1":`Quais clientes têm mais publicações?`,"aiAssistant:tryAsking.example2":`Mostrar registros criados recentemente para um recurso.`,"aiAssistant:tryAsking.example3":`Explique relacionamentos entre registros específicos.`,"aiAssistant:thinking":`Pensando`,"aiAssistant:thinkingProgress":`Pensando ({progress}%)`,"aiAssistant:input.placeholder":`Pergunte sobre seus dados…`,"aiAssistant:input.hint":`Enter para enviar · Shift+Enter para nova linha`,"aiAssistant:send":`Enviar mensagem`,"aiAssistant:newChat":`Novo chat`,"aiAssistant:history":`Histórico de chats`,"aiAssistant:history.empty":`Nenhum chat anterior`,"aiAssistant:noText":`Aqui estão os registros relacionados encontrados:`,"aiAssistant:fallback.noToolResult":`A solicitação foi executada, mas o modelo não retornou uma resposta em texto. Tente refinar a pergunta ou habilite os logs de debug para inspecionar o resultado da ferramenta.`,"aiAssistant:fallback.noRows":`Nenhum registro foi encontrado para esta solicitação.`,"aiAssistant:fallback.rowsFound":`Linhas encontradas: {count}.`,"aiAssistant:taskFailed":`A tarefa do assistente IA falhou`,"aiAssistant:settings.title":`Assistente IA`,"aiAssistant:settings.description":`Configure o widget flutuante de chat IA, o modelo e o comportamento do assistente no servidor.`,"aiAssistant:settings.enabled":`Ativado`,"aiAssistant:settings.disabled":`Desativado`,"aiAssistant:settings.configured":`Configurado`,"aiAssistant:settings.apiKeyRequired":`Chave de API necessária`,"aiAssistant:settings.readOnly":`Somente leitura`,"aiAssistant:settings.provider":`Provedor: {provider}`,"aiAssistant:settings.enableLabel":`Ativar assistente`,"aiAssistant:settings.enableHint":`Controla a visibilidade do widget flutuante e do endpoint de chat.`,"aiAssistant:settings.modelLabel":`Modelo OpenRouter`,"aiAssistant:settings.apiKeyLabel":`Chave de API OpenRouter`,"aiAssistant:settings.apiKeyHint":`Deixe em branco para manter a chave existente salva no servidor.`,"aiAssistant:settings.systemPromptLabel":`Substituição do prompt do sistema`,"aiAssistant:settings.systemPromptPlaceholder":`Instruções opcionais específicas do projeto para o assistente`,"aiAssistant:settings.accessTitle":`Modelo de acesso`,"aiAssistant:settings.accessDescription":`O assistente atual está limitado à inspeção somente leitura de registros por meio das ações de recursos de administração.`,"aiAssistant:settings.futureToolsReady":`Ferramentas futuras prontas`,"aiAssistant:settings.save":`Salvar configurações`,"aiAssistant:settings.saving":`Salvando…`,"aiAssistant:settings.saved":`Configurações do assistente IA salvas`,"aiAssistant:settings.empty":`Nenhuma configuração disponível.`,"aiFill:button":`Preencher com IA`,"aiFill:dialogTitle":`Preencher formulário a partir de uma foto`,"aiFill:dialogDescription":`Envie uma imagem — a IA extrairá os valores e preencherá o formulário.`,"aiFill:fillButton":`Reconhecer`,"aiFill:processing":`Reconhecendo imagem…`,"aiFill:success":`{count} campo(s) preenchido(s)`,"aiFill:errorNoFields":`Este recurso não tem campos preenchíveis pela IA.`,"aiFill:errorGeneric":`Falha no preenchimento pela IA: {message}`,"aiFill:noValues":`A IA não conseguiu extrair valores desta imagem.`,"aiFill:applied":`A IA preencheu {count} campo(s). Você pode desfazer abaixo.`,"filter:op.co":`Contém`,"filter:op.nco":`Não contém`,"filter:op.sw":`Começa com`,"filter:op.ew":`Termina com`,"filter:op.eq":`É igual a`,"filter:op.neq":`Não é igual a`,"filter:op.empty":`Está vazio`,"filter:op.nempty":`Não está vazio`,"filter:op.in":`É um de`,"filter:op.gt":`Maior que`,"filter:op.lt":`Menor que`,"filter:op.between":`Entre`,"filter:searchValues":`Buscar na lista…`,"filter:selectAll":`Selecionar tudo`,"filter:noValues":`Nenhum valor encontrado`,"common:newRecord":`Novo {name}`,"common:editRecord":`Editar {name} #{id}`,"common:themeLight":`Claro`,"common:themeDark":`Escuro`,"common:themeSystem":`Sistema`,"common:ok":`OK`,"common:select":`Selecionar…`,"common:removeItem":`Remover {title}`,"common:nSelectedAddMore":`{count} selecionado(s) — adicionar mais`,"common:pickRecords":`Escolher registros`,"common:managePickRecords":`Gerenciar seleção ({count})`,"common:pickRecordsFrom":`Escolher de {name}`,"common:draftRestored":`Rascunho não salvo restaurado`,"common:undoDraftRestore":`Desfazer`,"wizard:stepOf":`Passo {current} de {total}`,"wizard:products.step1":`Informações básicas`,"wizard:products.step2":`Preços`,"wizard:products.step3":`Mídia e tags`,"common:invalidValue":`Valor inválido`,"common:collapseSidebar":`Recolher barra lateral`,"common:expandSidebar":`Expandir barra lateral`,"common:toggleSidebar":`Alternar barra lateral`,"common:sidebarTitle":`Barra lateral`,"common:sidebarNavigation":`Menu de navegação`,"cache:title":`Cache`,"cache:description":`Integridade do cache e desempenho por recurso nesta réplica.`,"cache:load.error":`Falha ao carregar métricas de cache`,"cache:load.retry":`Tentar novamente`,"cache:reset.action":`Redefinir métricas`,"cache:reset.loading":`Redefinindo métricas do cache…`,"cache:reset.success":`Métricas do cache redefinidas`,"cache:reset.error":`Não foi possível redefinir as métricas`,"cache:metric.hitRate":`Taxa de acertos`,"cache:metric.requests":`Leituras do cache`,"cache:metric.avgCompute":`Cálculo médio`,"cache:metric.errors":`Erros`,"cache:unit.ms":`{value} ms`,"cache:quarantine.title":`Tags em quarentena`,"cache:quarantine.description":`Estas tags ignoram o cache até a invalidação ser concluída.`,"cache:invalidate.title":`Invalidar cache do recurso`,"cache:invalidate.description":`Remove listas e registros do recurso em todas as réplicas configuradas.`,"cache:invalidate.resource":`Recurso`,"cache:invalidate.action":`Invalidar cache`,"cache:invalidate.loading":`Invalidando cache…`,"cache:invalidate.success":`Cache do recurso invalidado`,"cache:invalidate.error":`Não foi possível invalidar o cache do recurso`,"cache:table.title":`Métricas por namespace`,"cache:table.empty":`Ainda não há atividade de cache registrada.`,"cache:instance":`Réplica {id}`,"cache:table.namespace":`Namespace`,"cache:table.resource":`Recurso`,"cache:table.hits":`Acertos`,"cache:table.misses":`Erros`,"cache:table.computes":`Cálculos`,"cache:table.coalesced":`Agrupados`,"cache:table.errors":`Erros`}}],Xn=`modern-admin:locale`,Zn=e=>e!==void 0,Z=(...e)=>e.find(Zn),Qn=(e,...t)=>e&&e.map(e=>({...e,label:Z(...t.map(t=>t?.[e.value]),e.label)??e.label})),$n=(e,...t)=>({...e,label:Z(...t.map(e=>e?.label),e.label),description:Z(...t.map(e=>e?.description),e.description),placeholder:Z(...t.map(e=>e?.placeholder),e.placeholder),availableValues:e.availableValues?.map(e=>typeof e==`string`?{value:e,label:Z(...t.map(t=>t?.availableValues?.[e]),e)??e}:{...e,label:Z(...t.map(t=>t?.availableValues?.[e.value]),e.label)??e.label})}),er=(e,...t)=>e&&e.map(e=>{let n=Z(...t.map(t=>t?.[e.resourceId]));return n===void 0?e:{...e,label:n}}),tr=(e,...t)=>({...e,label:Z(...t.map(e=>e?.label),e.label)??e.label,description:Z(...t.map(e=>e?.description),e.description),availableValues:Qn(e.availableValues,...t.map(e=>e?.availableValues)),keyValueFields:e.keyValueFields?.map(e=>$n(e,...t.map(t=>t?.keyValueFields?.[e.key])))}),nr=o.createContext(null);function rr({children:e,locales:t=Yn,defaultLocale:n,fallbackLocale:r=`en`,metadataTranslations:i}){let a=o.useMemo(()=>new Jn({locales:t,defaultLocale:(typeof localStorage<`u`&&localStorage.getItem(Xn)||n||t[0]?.code)??void 0,fallbackLocale:r}),[t,n,r]),[s,c]=o.useState(()=>a.locale),l=o.useCallback(e=>{let t=i?.[s],n=i?.[r],a=t?.resources?.[e.id],o=n?.resources?.[e.id],c=Z(a?.label,a?.name,o?.label,o?.name,e.name)??e.name,l=e.navigation?.group;return{...e,name:c,navigation:e.navigation===null?null:e.navigation?{...e.navigation,name:Z(a?.navigation?.name,o?.navigation?.name,e.navigation.name),group:Z(a?.navigation?.group,o?.navigation?.group,l?t?.navigation?.groups?.[l]:void 0,l?n?.navigation?.groups?.[l]:void 0,e.navigation.group)}:e.navigation,properties:e.properties.map(e=>tr(e,a?.properties?.[e.path],t?.properties?.[e.path],o?.properties?.[e.path],n?.properties?.[e.path])),actions:e.actions.map(e=>{let t=Z(a?.actions?.[e.name]?.label,o?.actions?.[e.name]?.label);return t===void 0?e:{...e,custom:{...e.custom??{},label:t}}}),relatedResources:er(e.relatedResources,a?.relatedResources,o?.relatedResources)}},[r,s,i]),u=o.useCallback(e=>{a.setLocale(e),typeof localStorage<`u`&&localStorage.setItem(Xn,e),c(a.locale)},[a]),d=o.useMemo(()=>({locale:s,setLocale:u,t:(e,t)=>a.t(e,t),availableLocales:()=>a.availableLocales(),localizeResource:l}),[s,u,a,l]);return(0,m.jsx)(nr.Provider,{value:d,children:e})}function ir(){return o.useContext(nr)||{locale:`en`,setLocale:()=>{},t:e=>e,availableLocales:()=>[{code:`en`,name:`English`}],localizeResource:e=>e}}var ar=[`modern-admin`,`config`],or=(e,t)=>[`modern-admin`,e,`list`,t??null],sr=(e,t)=>[`modern-admin`,e,`show`,t],cr=(e,t)=>[`modern-admin`,e,`history`,t],lr=(e,t,n,r)=>[`modern-admin`,e,`action`,t,n??null,r?.length?r.join(`,`):null],ur=(e,t)=>{let n=new Set;for(let r of e?.resources??[])if(r.id===t)for(let e of r.properties)e.reference&&n.add(e.reference);else r.properties.some(e=>e.reference===t)&&n.add(r.id);return n.delete(t),n},Q=(e,t)=>{e.invalidateQueries({queryKey:[`modern-admin`,t]});let n=e.getQueryData(ar);for(let r of ur(n,t))e.invalidateQueries({queryKey:[`modern-admin`,r]});e.invalidateQueries({queryKey:[`modern-admin`,`fieldSuggestions`,t]}),e.invalidateQueries({queryKey:[`modern-admin`,`user-dir`,t]}),e.invalidateQueries({queryKey:[`modern-admin`,`global-search`]}),e.invalidateQueries({queryKey:[`modern-admin`,`timeseries`]}),e.invalidateQueries({queryKey:[`modern-admin`,`audit-log`]}),e.invalidateQueries({queryKey:[`modern-admin`,`audit-log-infinite`]})},dr=()=>{let e=X();return J({queryKey:ar,queryFn:()=>e.config(),staleTime:6e4})},fr=e=>{let{data:t}=dr(),{localizeResource:n}=ir();return o.useMemo(()=>{let r=t?.resources.find(t=>t.id===e);return r?n(r):void 0},[t?.resources,n,e])},pr=()=>{let{data:e}=dr();return o.useMemo(()=>Kn(e?.features),[e?.features])},mr=()=>{let{data:e}=dr(),{localizeResource:t}=ir();return o.useMemo(()=>(e?.resources??[]).map(e=>t(e)),[e?.resources,t])},hr=(e,t,n)=>{let r=X();return J({queryKey:[`modern-admin`,e,`values`,t,n?.search??``,n?.limit??100],queryFn:()=>r.distinctValues(e,t,{search:n?.search,limit:n?.limit}),staleTime:3e5,enabled:n?.enabled!==!1})},gr=new Set,_r=(e,t)=>{let n=X(),r=or(e,t);return J({queryKey:r,queryFn:()=>{let i=gr.delete(H(r));return n.list(e,t,i?{refresh:!0}:void 0)},placeholderData:Rt})},vr=(e,t)=>{let n=q();return o.useCallback(async()=>{let r=or(e,t),i=H(r);gr.add(i);try{await n.refetchQueries({queryKey:r,exact:!0})}finally{gr.delete(i)}},[n,e,t])},yr=(e,t)=>{let n=X();return J({queryKey:sr(e,t??``),queryFn:()=>n.show(e,t),enabled:!!t})},br=e=>{let t=X(),n=q();return Y({mutationFn:n=>t.create(e,n),onSuccess:()=>{Q(n,e)}})},xr=e=>{let t=X(),n=q();return Y({mutationFn:({id:n,payload:r})=>t.update(e,n,r),onSuccess:()=>{Q(n,e)}})},Sr=e=>{let t=X(),n=q();return Y({mutationFn:n=>t.delete(e,n),onSuccess:()=>{Q(n,e)}})},Cr=e=>{let t=X(),n=q();return Y({mutationFn:n=>t.bulkDelete(e,n),onSuccess:()=>{Q(n,e)}})},wr=(e,t)=>[`modern-admin`,e,`search`,t],Tr=[`modern-admin`,`auth`,`me`],Er=[`modern-admin`,`auth`,`ui-props`],Dr=()=>{let e=X(),t=J({queryKey:Tr,queryFn:async()=>{try{return await e.me()}catch(e){if(e instanceof I&&e.status===401)return null;throw e}},staleTime:3e4,retry:(e,t)=>t instanceof I&&t.status===401?!1:e<1});return{user:t.data?.user??null,isLoading:t.isLoading,isAuthenticated:!!t.data?.user,error:t.error}},Or=()=>{let e=X();return J({queryKey:Er,queryFn:()=>e.getAuthUiProps(),staleTime:1/0})},kr=()=>{let e=X();return Y({mutationFn:t=>e.loginSocial(t)})},Ar=()=>{let e=X(),t=q();return Y({mutationFn:({email:t,password:n})=>e.login(t,n),onSuccess:()=>{t.invalidateQueries({queryKey:Tr}),t.invalidateQueries({queryKey:ar})}})},jr=()=>{let e=X(),t=q();return Y({mutationFn:()=>e.logout(),onSuccess:async()=>{await t.cancelQueries({queryKey:Tr}),t.setQueryData(Tr,null),t.removeQueries({predicate:e=>{let t=e.queryKey;return t[0]!==`modern-admin`||t[1]!==`auth`||t[2]!==`me`}})}})},Mr=e=>{let t=X(),n=q();return Y({mutationFn:({recordId:n,actionName:r,payload:i})=>t.invokeRecordAction(e,n,r,i),onSuccess:()=>{Q(n,e)}})},Nr=(e,t,n={})=>{let r=X(),{recordId:i,recordIds:a,enabled:o=!0}=n;return J({queryKey:lr(e,t,i,a),queryFn:()=>i?r.fetchRecordAction(e,i,t):r.fetchResourceAction(e,t,a?.length?{recordIds:a.join(`,`)}:{}),enabled:o&&!!e&&!!t,staleTime:1/0,refetchOnWindowFocus:!1,retry:!1})},Pr=e=>{let t=X(),n=q();return Y({mutationFn:({actionName:n,ids:r,payload:i})=>t.invokeBulkAction(e,n,r,i),onSuccess:()=>{Q(n,e)}})},Fr=e=>{let t=X(),n=q();return Y({mutationFn:({actionName:n,payload:r})=>t.invokeResourceAction(e,n,r),onSuccess:()=>{Q(n,e)}})},Ir=(e,t=!0)=>{let n=X();return J({queryKey:[`modern-admin`,`global-search`,e],queryFn:({signal:t})=>n.globalSearch(e,void 0,{signal:t}),enabled:t&&e.trim().length>0,staleTime:3e4})},Lr=(e,t,n=!0)=>{let r=X();return J({queryKey:wr(e??``,t),queryFn:()=>r.search(e,t),enabled:!!e&&n,staleTime:3e4})},Rr=e=>{let t=X();return J({queryKey:[`modern-admin`,`timeseries`,e],queryFn:()=>t.timeseries(e),enabled:e!==null&&!!e.resource&&!!e.dateField,staleTime:6e4})},zr=(e,t,n={})=>{let r=X();return J({queryKey:[...cr(e,t??``),n],queryFn:()=>r.listHistory(e,t,n),enabled:!!e&&!!t,staleTime:3e4})},Br=(e,t)=>{let n=X(),r=q();return Y({mutationFn:({revisionId:r,reason:i})=>n.revertHistoryRevision(e,t,r,{reason:i}),onSuccess:()=>{Q(r,e)}})},Vr=(e,t)=>{let n=X();return Bn({queryKey:[`modern-admin`,`audit-log-infinite`,e],queryFn:({pageParam:r})=>n.listAuditLog({...e,limit:t+1,before:r}),initialPageParam:void 0,getNextPageParam:e=>{let n=e.events;if(!(n.length<=t))return n[t-1].at},staleTime:3e4})},$=[`modern-admin`,`cache-stats`],Hr=e=>({...e,entries:[]}),Ur=()=>{let e=X();return J({queryKey:$,queryFn:()=>e.cacheStats(),refetchInterval:1e4})},Wr=()=>{let e=X(),t=q();return Y({mutationFn:t=>e.invalidateResourceCache(t),onSuccess:()=>{t.invalidateQueries({queryKey:$})}})},Gr=()=>{let e=X(),t=q();return Y({mutationFn:()=>e.resetCacheStats(),onMutate:async()=>{await t.cancelQueries({queryKey:$});let e=t.getQueryData($);return e&&t.setQueryData($,Hr(e)),{previous:e}},onSuccess:e=>{t.setQueryData($,Hr(e))},onError:(e,n,r)=>{r?.previous&&t.setQueryData($,r.previous)}})};export{W as $,Rr as A,Fn as B,vr as C,Br as D,mr as E,Un as F,Nn as G,Ln as H,X as I,q as J,jn as K,Wn as L,rr as M,ir as N,Lr as O,Yn as P,Mt as Q,Y as R,_r as S,fr as T,Mn as U,Rn as V,Pn as W,K as X,un as Y,z as Z,Fr as _,Cr as a,b as at,yr as b,Dr as c,pr as d,L as et,Ir as f,Mr as g,Pr as h,Or as i,pe as it,xr as j,kr as k,Sr as l,Wr as m,Nr as n,bt as nt,Ur as o,f as ot,Vr as p,On as q,dr as r,mt as rt,br as s,Q as t,I as tt,hr as u,Ar as v,Gr as w,zr as x,jr as y,J as z};
186
+ //# sourceMappingURL=hooks-BiOfAnEq.js.map