adminizer 4.6.0 → 4.7.0-build.221

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 (335) hide show
  1. package/Readme.md +12 -0
  2. package/assets/RelationDialogStack-CnHFOYyR.css +1 -0
  3. package/assets/RelationDialogStack-DI2bZxQX.js +20 -0
  4. package/assets/add-4213XScp.js +1 -0
  5. package/assets/add-group--F1XxfJ1.js +1 -0
  6. package/assets/add-group-form-DKRXC2n-.js +1 -0
  7. package/assets/add-user-b9HfMq7z.js +1 -0
  8. package/assets/add-user-form-UXAToWQd.js +1 -0
  9. package/assets/app-Clx8f5hd.css +1 -0
  10. package/assets/app-layout-C02ja4OI.js +1 -0
  11. package/assets/app-shell-D8wtkECO.js +1 -0
  12. package/assets/app-sidebar-BR5_zwxj.js +1 -0
  13. package/assets/app-sidebar-header-BZbIBQjq.js +1 -0
  14. package/assets/app.js +59 -7990
  15. package/assets/breadcrumbs-CODaqVkB.js +1 -0
  16. package/assets/catalog-6ZZjWdFs.js +6 -0
  17. package/assets/dashboard-CftAdKiH.js +3 -0
  18. package/assets/date-picker-DSOkNiNo.js +1 -0
  19. package/assets/del-modal-Cd4M7af8.js +1 -0
  20. package/assets/dynamic-controls-BsrJhPDY.js +1 -0
  21. package/assets/geo-json-CzR5JBXL.js +1 -0
  22. package/assets/handsontable-BI98OF5R.js +336 -0
  23. package/assets/history-DLHSU7Ak.js +1 -0
  24. package/assets/home-NcQ7nnU0.js +2 -0
  25. package/assets/icon-C2JNaLxH.js +1 -0
  26. package/assets/init-user-D2HSyXup.js +1 -0
  27. package/assets/input-error-CH2caTtO.js +1 -0
  28. package/assets/jsoneditor-DVNQmA6G.js +3869 -0
  29. package/assets/list-CFU0-TgN.js +4 -0
  30. package/assets/login-DFSLEO17.js +1 -0
  31. package/assets/manifest.json +246 -273
  32. package/assets/material-icon-Bx9pGQiQ.js +1 -0
  33. package/assets/media-manager-WcKe1EvD.js +6 -0
  34. package/assets/module-CT7PC6pc.js +1 -0
  35. package/assets/monaco-Bl4zdWCn.js +11 -0
  36. package/assets/nav-footer-BiSQkPt4.js +1 -0
  37. package/assets/nav-main-rTH0PfDw.js +1 -0
  38. package/assets/nav-user-Bj6cWs0a.js +1 -0
  39. package/assets/notification-Bi-PX87D.js +20 -0
  40. package/assets/pagination-render-AKJvTIRA.js +1 -0
  41. package/assets/register-BTP4uxsK.js +1 -0
  42. package/assets/ru-eW0WKkga.js +1 -0
  43. package/assets/theme-switcher-Dm8EOGzx.js +1 -0
  44. package/assets/toast-editor-DOg_gvSp.js +668 -0
  45. package/assets/user-filters-list-YUfR4XMI.js +1 -0
  46. package/assets/user-info-BgSbT02v.js +1 -0
  47. package/assets/user-menu-content-TQTXHIv6.js +1 -0
  48. package/assets/{vanilla-picker-l5rcX3cq.js → vanilla-picker-B3LgXoKV.js} +1 -7
  49. package/assets/welcome-vLwTu1R6.js +1 -0
  50. package/controllers/add.d.ts +1 -1
  51. package/controllers/add.js +20 -26
  52. package/controllers/addGroup.d.ts +1 -1
  53. package/controllers/addGroup.js +7 -15
  54. package/controllers/addUser.d.ts +1 -1
  55. package/controllers/addUser.js +10 -16
  56. package/controllers/catalog/Catalog.d.ts +1 -1
  57. package/controllers/catalog/Catalog.js +1 -10
  58. package/controllers/catalog/FrontendCatalogAdapter.d.ts +3 -3
  59. package/controllers/catalog/FrontendCatalogAdapter.js +0 -6
  60. package/controllers/catalog/FrontentCatalogAdapter.d.ts +3 -3
  61. package/controllers/catalog/FrontentCatalogAdapter.js +0 -4
  62. package/controllers/ckeditorUpload.js +2 -18
  63. package/controllers/dashboard.d.ts +1 -1
  64. package/controllers/dashboard.js +2 -5
  65. package/controllers/edit.js +24 -37
  66. package/controllers/editGroup.d.ts +1 -1
  67. package/controllers/editGroup.js +10 -21
  68. package/controllers/editUser.d.ts +1 -1
  69. package/controllers/editUser.js +11 -23
  70. package/controllers/exportData.d.ts +6 -0
  71. package/controllers/exportData.js +315 -0
  72. package/controllers/feed.d.ts +6 -0
  73. package/controllers/feed.js +73 -0
  74. package/controllers/feedback/feedbackController.d.ts +1 -1
  75. package/controllers/feedback/feedbackController.js +5 -7
  76. package/controllers/filter-fields/columns.d.ts +11 -0
  77. package/controllers/filter-fields/columns.js +106 -0
  78. package/controllers/filter-fields/filterFields.d.ts +10 -0
  79. package/controllers/filter-fields/filterFields.js +141 -0
  80. package/controllers/filter-fields/getAllUserFilters.d.ts +6 -0
  81. package/controllers/filter-fields/getAllUserFilters.js +115 -0
  82. package/controllers/filter-fields/groups.d.ts +5 -0
  83. package/controllers/filter-fields/groups.js +26 -0
  84. package/controllers/filter-fields/savedFilters.d.ts +25 -0
  85. package/controllers/filter-fields/savedFilters.js +317 -0
  86. package/controllers/getAllWidgets.d.ts +1 -1
  87. package/controllers/getAllWidgets.js +1 -9
  88. package/controllers/history-actions/HistoryController.js +6 -31
  89. package/controllers/initUser.js +6 -5
  90. package/controllers/inlineUpdate.d.ts +7 -0
  91. package/controllers/inlineUpdate.js +148 -0
  92. package/controllers/list.d.ts +1 -1
  93. package/controllers/list.js +383 -70
  94. package/controllers/listUserFilters.d.ts +5 -0
  95. package/controllers/listUserFilters.js +26 -0
  96. package/controllers/login.js +2 -2
  97. package/controllers/media-manager/mediaManagerApi.js +0 -9
  98. package/controllers/navigation/edit.js +3 -9
  99. package/controllers/notifications/NotificationController.d.ts +1 -1
  100. package/controllers/notifications/NotificationController.js +12 -36
  101. package/controllers/register.js +10 -9
  102. package/controllers/remove.js +10 -19
  103. package/controllers/timezones.d.ts +1 -1
  104. package/controllers/timezones.js +0 -6
  105. package/controllers/userApiKey.d.ts +7 -0
  106. package/controllers/userApiKey.js +36 -0
  107. package/controllers/view.js +14 -26
  108. package/controllers/welcome.d.ts +1 -1
  109. package/controllers/welcome.js +0 -4
  110. package/controllers/widgets/Action.d.ts +1 -1
  111. package/controllers/widgets/Action.js +1 -9
  112. package/controllers/widgets/Custom.d.ts +1 -1
  113. package/controllers/widgets/Custom.js +1 -9
  114. package/controllers/widgets/Info.d.ts +1 -1
  115. package/controllers/widgets/Info.js +1 -9
  116. package/controllers/widgets/filterInfo.d.ts +1 -0
  117. package/controllers/widgets/filterInfo.js +44 -0
  118. package/controllers/widgets/switch.d.ts +1 -1
  119. package/controllers/widgets/switch.js +1 -9
  120. package/controllers/widgetsDB.d.ts +1 -1
  121. package/controllers/widgetsDB.js +2 -8
  122. package/helpers/accessRightsHelper.d.ts +1 -1
  123. package/helpers/accessRightsHelper.js +5 -4
  124. package/helpers/apiKeyHelper.d.ts +5 -0
  125. package/helpers/apiKeyHelper.js +8 -0
  126. package/helpers/configHelper.js +12 -15
  127. package/helpers/controllerHelper.d.ts +14 -21
  128. package/helpers/controllerHelper.js +50 -83
  129. package/helpers/fieldsHelper.js +3 -3
  130. package/helpers/filterDatetimeHelper.d.ts +5 -0
  131. package/helpers/filterDatetimeHelper.js +84 -0
  132. package/helpers/inertiaActionsHelper.d.ts +2 -2
  133. package/helpers/inertiaActionsHelper.js +5 -4
  134. package/helpers/inertiaAddHelper.d.ts +3 -414
  135. package/helpers/inertiaAddHelper.js +39 -15
  136. package/helpers/inertiaGroupHelper.d.ts +2 -2
  137. package/helpers/inertiaGroupHelper.js +3 -3
  138. package/helpers/inertiaListHelper.d.ts +7 -3
  139. package/helpers/inertiaListHelper.js +26 -12
  140. package/helpers/inertiaMenuHelper.d.ts +1 -0
  141. package/helpers/inertiaMenuHelper.js +15 -3
  142. package/helpers/inertiaUserHelper.d.ts +3 -2
  143. package/helpers/inertiaUserHelper.js +7 -3
  144. package/helpers/menuHelper.d.ts +5 -2
  145. package/helpers/menuHelper.js +64 -12
  146. package/helpers/viteHelper.js +1 -2
  147. package/index.d.ts +6 -2
  148. package/index.js +6 -2
  149. package/interfaces/adminpanelConfig.d.ts +126 -39
  150. package/interfaces/internalModelAccess.d.ts +37 -0
  151. package/interfaces/internalModelAccess.js +1 -0
  152. package/interfaces/listQueryBuilder.d.ts +22 -0
  153. package/interfaces/listQueryBuilder.js +1 -0
  154. package/interfaces/queryCriteria.d.ts +54 -0
  155. package/interfaces/queryCriteria.js +1 -0
  156. package/interfaces/types.d.ts +1 -13
  157. package/lib/Adminizer.d.ts +4 -2
  158. package/lib/Adminizer.js +29 -10
  159. package/lib/DataAccessor.d.ts +8 -5
  160. package/lib/DataAccessor.js +89 -42
  161. package/lib/I18n.d.ts +5 -1
  162. package/lib/I18n.js +45 -19
  163. package/lib/MiddlewareManager.d.ts +8 -0
  164. package/lib/MiddlewareManager.js +53 -0
  165. package/lib/ai-assistant/OpenAiModelService.d.ts +3 -3
  166. package/lib/ai-assistant/OpenAiModelService.js +23 -24
  167. package/lib/catalog/Navigation.d.ts +1 -0
  168. package/lib/catalog/Navigation.js +12 -11
  169. package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -2
  170. package/lib/controls/markdown/ToastUiEditor.d.ts +1 -2
  171. package/lib/feedback/FeedbackHandler.js +2 -2
  172. package/lib/filters/ConditionValidator.d.ts +107 -0
  173. package/lib/filters/ConditionValidator.js +483 -0
  174. package/lib/filters/CustomFilterHandler.d.ts +122 -0
  175. package/lib/filters/CustomFilterHandler.js +131 -0
  176. package/lib/filters/FilterCustomFieldHandler.d.ts +2 -0
  177. package/lib/filters/FilterCustomFieldHandler.js +2 -0
  178. package/lib/filters/FilterService.d.ts +82 -0
  179. package/lib/filters/FilterService.js +323 -0
  180. package/lib/filters/index.d.ts +6 -0
  181. package/lib/filters/index.js +4 -0
  182. package/lib/history-actions/AbstractHistoryAdapter.d.ts +5 -4
  183. package/lib/history-actions/AbstractHistoryAdapter.js +45 -30
  184. package/lib/history-actions/DefaultHistoryAdapter.d.ts +2 -0
  185. package/lib/history-actions/DefaultHistoryAdapter.js +12 -6
  186. package/lib/history-actions/HistoryHandler.js +1 -1
  187. package/lib/list-query-builder/ListQueryBuilder.d.ts +117 -0
  188. package/lib/list-query-builder/ListQueryBuilder.js +707 -0
  189. package/lib/media-manager/AbstractMediaManager.d.ts +9 -8
  190. package/lib/media-manager/DefaultMediaManager.d.ts +2 -0
  191. package/lib/media-manager/DefaultMediaManager.js +27 -15
  192. package/lib/media-manager/Items.d.ts +4 -1
  193. package/lib/media-manager/Items.js +62 -59
  194. package/lib/media-manager/MediaManagerHandler.js +1 -1
  195. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -1
  196. package/lib/media-manager/helpers/MediaManagerHelper.js +38 -4
  197. package/lib/model/AbstractModel.d.ts +33 -25
  198. package/lib/model/AbstractModel.js +54 -2
  199. package/lib/model/InternalModelAccessFactory.d.ts +18 -0
  200. package/lib/model/InternalModelAccessFactory.js +82 -0
  201. package/lib/model/ModelHandler.d.ts +6 -0
  202. package/lib/model/ModelHandler.js +14 -0
  203. package/lib/model/adapter/sequelize.d.ts +32 -10
  204. package/lib/model/adapter/sequelize.js +409 -62
  205. package/lib/model/adapter/typeorm.d.ts +62 -0
  206. package/lib/model/adapter/typeorm.js +777 -0
  207. package/lib/model/internalModelAccessToken.d.ts +1 -0
  208. package/lib/model/internalModelAccessToken.js +1 -0
  209. package/lib/model/internalModelRepository.d.ts +3 -0
  210. package/lib/model/internalModelRepository.js +4 -0
  211. package/lib/notifications/AbstractNotificationService.d.ts +3 -0
  212. package/lib/notifications/AbstractNotificationService.js +42 -36
  213. package/lib/notifications/GeneralNotificationService.js +37 -40
  214. package/lib/notifications/SystemNotificationService.js +33 -36
  215. package/lib/requestProcessor.js +0 -3
  216. package/lib/ui-i18n/getUiTranslations.d.ts +1 -0
  217. package/lib/ui-i18n/getUiTranslations.js +3 -0
  218. package/lib/ui-i18n/uiTranslationKeys.d.ts +6 -0
  219. package/lib/ui-i18n/uiTranslationKeys.js +268 -0
  220. package/lib/widgets/widgetHandler.d.ts +7 -2
  221. package/lib/widgets/widgetHandler.js +98 -18
  222. package/models/FilterAP.d.ts +116 -0
  223. package/models/FilterAP.js +68 -0
  224. package/models/FilterColumnAP.d.ts +32 -0
  225. package/models/FilterColumnAP.js +21 -0
  226. package/models/GroupAP.d.ts +1 -1
  227. package/models/HistoryActionsAP.d.ts +3 -3
  228. package/models/MediaManagerMetaAP.d.ts +1 -1
  229. package/models/NavigationAP.d.ts +1 -1
  230. package/models/UserAP.d.ts +6 -1
  231. package/models/UserAP.js +4 -0
  232. package/package.json +39 -32
  233. package/policies/authPolicies.d.ts +12 -0
  234. package/policies/authPolicies.js +104 -0
  235. package/policies/permissionResolvers.d.ts +12 -0
  236. package/policies/permissionResolvers.js +52 -0
  237. package/services/FeedService.d.ts +70 -0
  238. package/services/FeedService.js +334 -0
  239. package/system/Router.d.ts +1 -0
  240. package/system/Router.js +136 -59
  241. package/system/bindAccessRights.js +11 -30
  242. package/system/bindAuthorization.js +18 -18
  243. package/system/bindCors.js +16 -1
  244. package/system/bindCustomFilterHandlers.d.ts +2 -0
  245. package/system/bindCustomFilterHandlers.js +4 -0
  246. package/system/bindInertia.js +18 -61
  247. package/system/bindReqFunctions.js +10 -2
  248. package/system/bindTranslations.js +7 -3
  249. package/system/buildInternalModelAccess.d.ts +4 -0
  250. package/system/buildInternalModelAccess.js +59 -0
  251. package/system/defaults.js +18 -14
  252. package/system/routePolicies.d.ts +2 -0
  253. package/system/routePolicies.js +29 -0
  254. package/translations/en.json +151 -39
  255. package/translations/ru.json +211 -64
  256. package/ui/components/handsontable.js +13 -27
  257. package/ui/components/ui/dialog-stack.js +1 -3
  258. package/ui/components/ui/popover.js +1 -1
  259. package/ui/components/ui/sidebar.js +1 -1
  260. package/assets/RelationDialogStack-D9UVEF9s.js +0 -407
  261. package/assets/RelationDialogStack-DV8OITPR.css +0 -4
  262. package/assets/add-BlvzWQKF.js +0 -1
  263. package/assets/add-group-1Uoq9NWe.js +0 -1
  264. package/assets/add-group-form-B01gwDGu.js +0 -1
  265. package/assets/add-user-BQCAsaRy.js +0 -1
  266. package/assets/add-user-form-Cgwc9JkI.js +0 -1
  267. package/assets/app-DaOMy1nl.css +0 -72
  268. package/assets/app-layout-CAm60qoE.js +0 -1
  269. package/assets/app-shell-QWCtn9ye.js +0 -1
  270. package/assets/app-sidebar-CfaYbnSy.js +0 -1
  271. package/assets/app-sidebar-header-BsPFDhZ8.js +0 -1
  272. package/assets/breadcrumbs-CZZirDj8.js +0 -1
  273. package/assets/catalog-k5myk7fk.js +0 -6
  274. package/assets/dashboard-BkL9ybBw.js +0 -3
  275. package/assets/date-picker-B5AZ_7Q9.js +0 -1
  276. package/assets/del-modal-BoyXZloG.js +0 -1
  277. package/assets/dynamic-controls-k61T9W2P.js +0 -1
  278. package/assets/form-1WGY0YgG.js +0 -1
  279. package/assets/form-DJapG3qF.js +0 -1
  280. package/assets/geo-json-DsMUHo0l.js +0 -4
  281. package/assets/handsontable-PxYdjN8c.js +0 -298
  282. package/assets/history-CluyR-yJ.js +0 -1
  283. package/assets/home-Dug9zBzM.js +0 -2
  284. package/assets/icon-DfDLMG5f.js +0 -1
  285. package/assets/init-user-CF80MEnT.js +0 -1
  286. package/assets/input-error-DuuqFgZa.js +0 -1
  287. package/assets/jsoneditor-De1FvcYu.js +0 -3882
  288. package/assets/list-CuexshNt.js +0 -1
  289. package/assets/list-table-BsEWjTKY.js +0 -22
  290. package/assets/login-eDemYzN-.js +0 -1
  291. package/assets/material-icon-DMT8KdmE.js +0 -1
  292. package/assets/media-manager-DfYa_mT_.js +0 -14
  293. package/assets/module-Cd4Tm6uq.js +0 -1
  294. package/assets/monaco-BhBYtg3d.js +0 -11
  295. package/assets/nav-footer-D3olYxtz.js +0 -1
  296. package/assets/nav-main-BctqyzeV.js +0 -1
  297. package/assets/nav-user-Bn1Lt-BZ.js +0 -1
  298. package/assets/notification-D64qvni-.js +0 -27
  299. package/assets/pagination-render-DxD78ahJ.js +0 -1
  300. package/assets/register-349PwYbe.js +0 -1
  301. package/assets/theme-switcher-DfExsHW2.js +0 -1
  302. package/assets/toast-editor-ESK5iWPx.js +0 -845
  303. package/assets/user-info-DtBK5Kh8.js +0 -1
  304. package/assets/user-menu-content-0XYOCMaA.js +0 -1
  305. package/assets/welcome-PDp-gUei.js +0 -1
  306. package/controllers/form.d.ts +0 -1
  307. package/controllers/form.js +0 -86
  308. package/helpers/formHelper.d.ts +0 -6
  309. package/helpers/formHelper.js +0 -38
  310. package/helpers/inertiaFromHelper.d.ts +0 -11
  311. package/helpers/inertiaFromHelper.js +0 -98
  312. package/helpers/runtimeMode.d.ts +0 -1
  313. package/helpers/runtimeMode.js +0 -3
  314. package/lib/PolicyManager.d.ts +0 -8
  315. package/lib/PolicyManager.js +0 -53
  316. package/lib/datatable/NodeTable.d.ts +0 -49
  317. package/lib/datatable/NodeTable.js +0 -207
  318. package/lib/model/adapter/waterline.d.ts +0 -32
  319. package/lib/model/adapter/waterline.js +0 -180
  320. package/migrations/index.d.ts +0 -3
  321. package/migrations/index.js +0 -4
  322. package/migrations/knex/20250106000001_adminizer_init.d.ts +0 -8
  323. package/migrations/knex/20250106000001_adminizer_init.js +0 -164
  324. package/migrations/umzug/0001.d.ts +0 -7
  325. package/migrations/umzug/0001.js +0 -121
  326. package/migrations/umzugExports.d.ts +0 -2
  327. package/migrations/umzugExports.js +0 -9
  328. package/system/bindForms.d.ts +0 -2
  329. package/system/bindForms.js +0 -20
  330. /package/{policies → middlewares}/addMessages.d.ts +0 -0
  331. /package/{policies → middlewares}/addMessages.js +0 -0
  332. /package/{policies → middlewares}/checkAuth.d.ts +0 -0
  333. /package/{policies → middlewares}/checkAuth.js +0 -0
  334. /package/{policies → middlewares}/setLocale.d.ts +0 -0
  335. /package/{policies → middlewares}/setLocale.js +0 -0
@@ -0,0 +1 @@
1
+ import{ck as E,c8 as e,as as I,bk as P,bv as L,r as y,bW as R,b7 as T,ba as z,bb as C,b8 as k,b9 as D,c0 as b,bL as M,aA as O}from"./app.js";import K from"./app-shell-D8wtkECO.js";import{AppSidebar as V}from"./app-sidebar-BR5_zwxj.js";import{a as _,u as N,N as B,A as F}from"./app-sidebar-header-BZbIBQjq.js";import{aZ as l}from"./handsontable-BI98OF5R.js";import{R as H}from"./RelationDialogStack-DI2bZxQX.js";const $=l.memo(({children:o,breadcrumbs:a=[],className:i})=>{const r=E();return e.jsxs(K,{variant:"sidebar",children:[e.jsx(I,{title:r.props.title}),e.jsx(V,{}),e.jsxs(P,{className:i,children:[e.jsx(_,{breadcrumbs:a}),e.jsx("div",{className:"relative flex min-h-0 flex-1 overflow-auto",children:e.jsx("div",{className:"flex h-full min-h-0 w-full flex-col",children:o})})]})]})});function q({width:o="min(25vw, 420px)"}){const{isEnabled:a,isOpen:i,closeChat:r,models:s,activeModel:n,setActiveModel:d,messages:c,loading:m,sending:x,error:j,sendMessage:v}=N(),[f,h]=l.useState(""),g=l.useRef(null);l.useEffect(()=>{i||h("")},[i]),l.useEffect(()=>{g.current&&g.current.scrollIntoView({behavior:"smooth"})},[c]);const u=s.length>0,A=async t=>{t.preventDefault();const p=f.trim();p&&(await v(p),h(""))},S=t=>{if((t.ctrlKey||t.metaKey)&&t.key==="Enter"){t.preventDefault();const p=f.trim();p&&!x&&(v(p),h(""))}};return a?e.jsxs("aside",{id:"ai-assistant-panel","aria-label":"AI assistant chat","aria-hidden":!i,className:b("bg-card text-card-foreground fixed bottom-0 right-0 top-0 z-[60] flex h-full flex-col border-l shadow-xl transition-all duration-300 ease-in-out","md:w-auto w-full",i?"translate-x-0 opacity-100":"translate-x-full opacity-0 pointer-events-none"),style:{width:"var(--ai-assistant-panel-actual-width, "+o+")"},children:[e.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(L,{className:"size-5 text-primary"}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-semibold leading-tight",children:"AI assistant"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"Chat with your selected model."})]})]}),e.jsx(y,{variant:"ghost",size:"icon",onClick:r,"aria-label":"Close AI assistant",children:e.jsx(R,{className:"size-4"})})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-hidden px-4 py-4",children:[!u&&!m&&e.jsx("div",{className:"flex flex-1 items-center justify-center rounded-md border border-dashed p-6 text-sm text-muted-foreground",children:"No AI models are available for your account."}),u&&e.jsxs(e.Fragment,{children:[e.jsxs(T,{value:n,onValueChange:d,children:[e.jsx(z,{className:"w-full",children:e.jsx(C,{placeholder:"Select a model"})}),e.jsx(k,{className:"z-[70]",children:s.map(t=>e.jsx(D,{value:t.id,children:e.jsxs("div",{className:"flex flex-col text-left",children:[e.jsx("span",{className:"font-medium",children:t.name}),t.description&&e.jsx("span",{className:"text-xs text-muted-foreground",children:t.description})]})},t.id))})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-3 overflow-hidden rounded-md border bg-background p-4",children:[e.jsxs("div",{className:"flex-1 space-y-3 overflow-y-auto pr-2","data-ai-assistant-messages":!0,children:[m&&e.jsx("div",{className:"flex justify-center py-6 text-sm text-muted-foreground",children:"Loading conversation..."}),!m&&c.length===0&&e.jsx("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:"Start a conversation to see responses here."}),c.map(t=>e.jsxs("div",{className:b("flex flex-col gap-1 rounded-md border p-3 text-sm shadow-xs",t.role==="assistant"?"border-primary/30 bg-primary/5":"border-border bg-background"),children:[e.jsx("span",{className:"font-semibold",children:t.role==="assistant"?"Assistant":"You"}),e.jsx("p",{className:"whitespace-pre-wrap leading-relaxed",children:t.content}),e.jsx("span",{className:"text-xs text-muted-foreground",children:new Date(t.timestamp).toLocaleTimeString()})]},t.id)),e.jsx("div",{ref:g})]}),e.jsxs("form",{className:"space-y-2",onSubmit:A,children:[e.jsx(M,{placeholder:u?"Type your question... (Ctrl+Enter to send)":"No models available",value:f,onChange:t=>h(t.target.value),onKeyDown:S,disabled:!u||x,rows:3}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[j&&e.jsx("span",{className:"text-xs text-destructive",children:j}),e.jsx(y,{type:"submit",disabled:!u||x||!f.trim(),children:x?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(O,{className:"size-4 animate-spin"}),"Sending…"]}):"Send"})]})]})]})]})]})]}):null}const G="min(25vw, 420px)",w="margin-right 300ms ease-in-out";function U({children:o,panelWidth:a=G}){const{isEnabled:i,isOpen:r}=N();return l.useEffect(()=>{const s=document.getElementById("app");if(!s)return;const n=s.style.transition,d=n?.includes("margin-right");return d||(s.style.transition=n?`${n}, ${w}`:w),s.classList.add("ai-assistant-host"),s.style.setProperty("--ai-assistant-panel-width",a),()=>{s.classList.remove("ai-assistant-host"),s.style.removeProperty("--ai-assistant-panel-width"),s.style.removeProperty("--ai-assistant-panel-actual-width"),s.style.removeProperty("margin-right"),delete s.dataset.aiAssistantOpen,d||(s.style.transition=n)}},[a]),l.useEffect(()=>{const s=document.getElementById("app");if(!s)return;const n=window.innerWidth<768,d=n?"100vw":a;s.style.setProperty("--ai-assistant-panel-actual-width",d),i&&r?(s.style.marginRight=n?"0":a,s.dataset.aiAssistantOpen="true"):(s.style.removeProperty("margin-right"),s.dataset.aiAssistantOpen="false");const c=()=>{const m=window.innerWidth<768,x=m?"100vw":a;s.style.setProperty("--ai-assistant-panel-actual-width",x),i&&r&&(s.style.marginRight=m?"0":a)};return window.addEventListener("resize",c),()=>window.removeEventListener("resize",c)},[i,r,a]),e.jsxs(e.Fragment,{children:[o,e.jsx(q,{width:a})]})}const ee=l.memo(({children:o,className:a,breadcrumbs:i,...r})=>e.jsx(B,{children:e.jsx(F,{children:e.jsxs(H,{children:[e.jsx($,{breadcrumbs:i,className:a,...r,children:o}),e.jsx(U,{})]})})}));export{ee as A};
@@ -0,0 +1 @@
1
+ import{c8 as a,br as d}from"./app.js";import{aZ as o}from"./handsontable-BI98OF5R.js";import"./jsoneditor-DVNQmA6G.js";import"./monaco-Bl4zdWCn.js";const u=o.memo(({children:e,variant:s="header"})=>{const[t,n]=o.useState(()=>typeof window<"u"?localStorage.getItem("sidebar")!=="false":!0),i=r=>{n(r),typeof window<"u"&&localStorage.setItem("sidebar",String(r))};return s==="header"?a.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e}):a.jsx(d,{defaultOpen:t,open:t,onOpenChange:i,children:e})});export{u as default};
@@ -0,0 +1 @@
1
+ import{ck as B,ci as q,c8 as e,a2 as G,aa as Z,aM as J,a8 as U,a3 as V,a4 as W,H as Y,a7 as Q,a9 as I,ay as y,aw as ee,bL as se,r as w,aX as ae,bW as re,a6 as te,aA as ne,bX as le,bd as ie,bj as ce,bl as C,bn as M,aE as oe,aH as de,aL as xe,bm as F,G as pe,aF as he,aI as me,aK as ue,aJ as je,aG as _,az as N,bg as be,I as T,M as E,E as z,K as L,bo as P,bq as A,bp as O,be as fe,bf as ge}from"./app.js";import{NavMain as Ne}from"./nav-main-rTH0PfDw.js";import{aZ as i,aY as ve}from"./handsontable-BI98OF5R.js";import c from"./material-icon-Bx9pGQiQ.js";import"./jsoneditor-DVNQmA6G.js";import"./monaco-Bl4zdWCn.js";const ke=5*1024*1024,ye=(t,s)=>{const a=t?.response?.data;if(!a)return s;if(typeof a=="string")try{const r=JSON.parse(a);return r.error??r.message??s}catch{return a||s}if(typeof a=="object"){const r=a;return r.error??r.message??s}return s},R=i.memo(({routePrefix:t,triggerLabel:s,placeholder:a,t:r,onClose:p})=>{const[x,b]=i.useState(""),[f,v]=i.useState(""),[j,g]=i.useState([]),[d,u]=i.useState({}),[h,S]=i.useState(!1),[k,$]=i.useState(!1),D=i.useRef(null),H=n=>{if(!n)return;const l={},m=[];Array.from(n).forEach(o=>{o.size>ke?l[o.name]=r("File size exceeds the 5 MB limit"):m.push(o)}),g(o=>[...o,...m]),Object.keys(l).length&&u(o=>({...o,...l}))},K=n=>g(l=>l.filter((m,o)=>o!==n)),X=async n=>{if(n.preventDefault(),!x.trim()){u({title:r("Title is required")});return}S(!0),u({});const l=new FormData;l.append("title",x.trim()),l.append("description",f.trim()),j.forEach(m=>l.append("files",m));try{await le.post(`${t}/api/feedback`,l),$(!0)}catch(m){const o=ye(m,r("Internal server error"));u({_global:o}),S(!1)}};return i.useEffect(()=>{if(!k)return;const n=setTimeout(p,2e3);return()=>clearTimeout(n)},[k,p]),k?e.jsxs("div",{className:"flex flex-col items-center justify-center gap-4 py-24 text-center",children:[e.jsx(Y,{size:48,className:"text-green-500 dark:text-green-400"}),e.jsx("p",{className:"text-base font-medium",children:r("Feedback sent successfully")})]}):e.jsxs(e.Fragment,{children:[e.jsxs(Q,{className:"mb-4",children:[e.jsx(I,{children:s??r("Feedback")}),a&&e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:a})]}),e.jsxs("form",{onSubmit:X,className:"space-y-5",noValidate:!0,children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(y,{htmlFor:"fb-title",children:r("Title")}),e.jsx(ee,{id:"fb-title",value:x,onChange:n=>b(n.target.value),disabled:h,placeholder:r("Title"),className:d.title?"border-destructive":""}),d.title&&e.jsx("p",{className:"text-xs text-destructive",children:d.title})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(y,{htmlFor:"fb-desc",children:r("Description")}),e.jsx(se,{id:"fb-desc",value:f,onChange:n=>v(n.target.value),disabled:h,placeholder:r("Description"),rows:5,className:"resize-none"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(y,{children:r("Attach files")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(w,{type:"button",variant:"outline",size:"sm",onClick:()=>D.current?.click(),disabled:h,children:[e.jsx(ae,{size:14,className:"mr-1"}),r("Attach files")]}),e.jsx("span",{className:"text-xs text-muted-foreground",children:r("Max 5 MB per file")})]}),e.jsx("input",{ref:D,type:"file",multiple:!0,className:"hidden",onChange:n=>H(n.target.files),disabled:h}),j.length>0&&e.jsx("ul",{className:"mt-2 space-y-1",children:j.map((n,l)=>e.jsxs("li",{className:"flex items-center justify-between rounded-md border bg-muted/40 px-3 py-1.5 text-xs",children:[e.jsx("span",{className:"truncate max-w-[340px]",children:n.name}),e.jsx("button",{type:"button",onClick:()=>K(l),className:"ml-2 text-muted-foreground hover:text-destructive transition-colors","aria-label":r("Remove file"),disabled:h,children:e.jsx(re,{size:13})})]},l))}),Object.entries(d).filter(([n])=>n!=="title"&&n!=="_global").map(([n,l])=>e.jsx("p",{className:"text-xs text-destructive",children:l},n))]}),d._global&&e.jsx("p",{className:"text-xs text-destructive",children:d._global}),e.jsx(te,{children:e.jsx(w,{type:"submit",disabled:h,children:h?e.jsxs(e.Fragment,{children:[e.jsx(ne,{size:14,className:"mr-1.5 animate-spin"}),r("Sending...")]}):r("Send")})})]})]})});R.displayName="FeedbackForm";function Ce(){const t=B(),{t:s}=q(),a=t.props.routePrefix??window.routePrefix??"",r=t.props.feedbackTriggerLabel??null,p=t.props.feedbackPlaceholder??null,[x,b]=i.useState(!1),[f,v]=i.useState(0),j=i.useCallback(()=>b(!1),[]),g=i.useCallback(d=>{b(d),d||v(u=>u+1)},[]);return e.jsxs(G,{open:x,onOpenChange:g,children:[e.jsx(Z,{asChild:!0,children:e.jsxs("button",{className:"flex items-center gap-1.5 text-xs opacity-60 hover:opacity-100 transition-opacity cursor-pointer mt-1 mx-auto","aria-label":r??s("Send feedback"),children:[e.jsx(J,{size:13}),r??s("Send feedback")]})}),ve.createPortal(e.jsx(U,{}),document.body),e.jsx(V,{children:e.jsx(W,{children:e.jsx(R,{routePrefix:a,triggerLabel:r,placeholder:p,t:s,onClose:j},f)})})]})}function Te(){const t=B();return e.jsxs(ie,{collapsible:"icon",variant:"inset",children:[e.jsx(ce,{children:e.jsx(C,{children:e.jsxs(M,{children:[e.jsx(oe,{className:"p-0 shadow-none border-none bg-transparent hidden md:block",children:e.jsxs(de,{children:[e.jsx(xe,{asChild:!0,className:"text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground rounded-md",children:e.jsx(F,{asChild:!0,children:e.jsx(w,{variant:"ghost",asChild:!0,className:`w-full ${t.props.section?"":"pointer-events-none"}`,children:e.jsxs("div",{children:[e.jsx(c,{name:"rocket_launch",className:"!text-[18px]"}),e.jsx("span",{className:"group-data-[state=collapsed]:hidden",children:t.props.brand}),t.props.section&&e.jsx(pe,{className:"ml-auto group-data-[state=collapsed]:hidden"})]})})})}),t.props.section&&e.jsx(he,{side:"right",className:"z-[1003]",children:t.props.section.map(s=>e.jsx("div",{children:s.subItems?e.jsxs(me,{children:[e.jsxs(ue,{className:"flex gap-2 items-center cursor-pointer",children:[e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:s.title})]}),e.jsx(je,{children:s.subItems.map(a=>e.jsx(_,{children:a.type==="blank"?e.jsxs("a",{href:a.link,target:"_blank",className:"flex gap-2 items-center",children:[a.icon&&e.jsx(c,{name:a.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:a.title})]},a.id):e.jsxs(N,{href:a.link,className:"flex gap-2 items-center",children:[a.icon&&e.jsx(c,{name:a.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:a.title})]},a.id)},a.id))})]}):e.jsx(_,{children:s.type==="blank"?e.jsxs("a",{href:s.link,target:"_blank",className:"flex gap-2 items-center",children:[s.icon&&e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:s.title})]}):e.jsxs(N,{href:s.link,className:"flex gap-2 items-center",children:[s.icon&&e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:s.title})]})})},s.id))})]})}),e.jsx(be,{className:"px-2 py-0 block md:hidden",children:e.jsx(C,{children:e.jsx(T,{asChild:!0,className:"group/collapsible",children:e.jsxs(M,{children:[e.jsx(E,{asChild:!0,children:e.jsxs(F,{children:[e.jsx(c,{name:"rocket_launch",className:"!text-[18px]"}),e.jsx("span",{className:"overflow-hidden text-ellipsis whitespace-nowrap",children:t.props.brand}),t.props.section&&e.jsx(z,{className:"ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90"})]})}),t.props.section&&e.jsx(L,{children:e.jsx(P,{children:t.props.section&&t.props.section.map(s=>s.subItems?e.jsx(C,{children:e.jsx(T,{asChild:!0,className:"group/collapsible-sub",children:e.jsxs(M,{children:[e.jsx(E,{asChild:!0,children:e.jsxs(F,{children:[e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"overflow-hidden text-ellipsis whitespace-nowrap",children:s.title}),e.jsx(z,{className:"ml-auto transition-transform duration-200 group-data-[state=open]/collapsible-sub:rotate-90"})]})}),e.jsx(L,{children:e.jsx(P,{children:s.subItems.map(a=>e.jsx(A,{children:e.jsx(O,{asChild:!0,children:a.type==="blank"?e.jsxs("a",{href:a.link,target:"_blank",className:"flex gap-2 items-center",children:[a.icon&&e.jsx(c,{name:a.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:a.title})]}):e.jsxs(N,{href:a.link,className:"flex gap-2 items-center",children:[a.icon&&e.jsx(c,{name:a.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:a.title})]})})},a.id))})})]})})},s.id):e.jsx(A,{children:e.jsx(O,{asChild:!0,children:s.type==="blank"?e.jsxs("a",{href:s.link,target:"_blank",className:"flex gap-2 items-center",children:[s.icon&&e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:s.title})]}):e.jsxs(N,{href:s.link,className:"flex gap-2 items-center",children:[s.icon&&e.jsx(c,{name:s.icon,className:"!text-[18px]"}),e.jsx("span",{className:"hover:underline",children:s.title})]})})},s.id))})})]})})})})]},t.props.brand)})}),e.jsx(fe,{children:e.jsx(Ne,{items:t.props.menu})}),e.jsx(ge,{children:e.jsxs("div",{className:"flex flex-col items-center",children:[t.props.version&&(()=>{const s=t.props.version,a=s.text||"4.7.0",r=new Date("2026-05-22T02:43:58.763Z").toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}),p=s.text?`v.${a}`:`v.${a} · ${r}`,x="text-center opacity-70 hover:opacity-100 transition-opacity text-xs";return s.link?e.jsx("a",{href:s.link,target:"_blank",rel:"noreferrer",title:s.hint??void 0,className:x,children:p}):e.jsx("span",{title:s.hint??void 0,className:x,children:p})})(),t.props.showFeedback&&e.jsx(Ce,{})]})})]})}export{Te as AppSidebar};
@@ -0,0 +1 @@
1
+ import{ck as z,ci as V,c8 as e,bX as y,af as X,am as q,r as P,i as G,ah as Q,ai as Y,aj as Z,bN as J,bQ as R,an as K,bO as L,cc as W,al as ee,az as B,aA as O,bv as te,c0 as se,bs as ae,au as ie}from"./app.js";import{Breadcrumbs as ne}from"./breadcrumbs-CODaqVkB.js";import{NavUser as re}from"./nav-user-Bj6cWs0a.js";import{ThemeSwitcher as oe}from"./theme-switcher-Dm8EOGzx.js";import{aZ as a,aX as ce}from"./handsontable-BI98OF5R.js";import le from"./material-icon-Bx9pGQiQ.js";const F=a.createContext(void 0),ve=({children:d})=>{const[g,f]=a.useState([]),[b,u]=a.useState([]),[h,m]=a.useState([]),[k,c]=a.useState(!1),[r,p]=a.useState(null),[w,C]=a.useState(""),j=z(),{t:n}=V(),v=ce.useMemo(()=>({"Make read":n("Make read"),"View All":n("View All"),Search:n("Search"),"Make all read":n("Make all read"),Title:n("Title"),Message:n("Message"),Date:n("Date"),Diff:n("Diff"),"No notifications":n("No notifications"),"No notifications found":n("No notifications found"),"The end of the list has been reached":n("The end of the list has been reached")}),[n]),N=[...b,...h],x=async()=>{try{const t=await y.getJson(`${window.routePrefix}/notifications/api`,{params:{unreadOnly:!0,limit:4}});f(t.data)}catch(t){console.error("Error fetching bell notifications:",t)}},l=async()=>{await x()},A=async()=>{try{const t=await y.getJson(`${window.routePrefix}/notifications/api/get-classes`);t.data&&(p(t.data.activeServices),C(t.data.initTab))}catch(t){console.error("Error fetching tabs:",t)}},M=async(t,o)=>{try{if(!t){await E(o);return}const s=await y.postJson(`${window.routePrefix}/notifications/api/search`,{s:t,notificationClass:o});m(s.data)}catch(s){console.error("Error searching notifications:",s)}},E=async t=>{c(!0);try{const o=`${window.routePrefix}/notifications/api/${t}`,s=await y.getJson(o,{params:{limit:20,skip:0,unreadOnly:!1}});return u([]),m(s.data),s.data}catch(o){return console.error("Error fetching all notifications:",o),[]}finally{c(!1)}},$=async(t,o)=>{try{const s=`${window.routePrefix}/notifications/api/${t}`,i=await y.getJson(s,{params:{limit:20,skip:o,unreadOnly:!1}});return m(_=>[..._,...i.data]),i.data}catch(s){return console.error("Error paginating notifications:",s),[]}};a.useEffect(()=>{if(!j.props.notifications)return;x();const t=new EventSource(`${window.routePrefix}/notifications/api/stream`);return t.addEventListener("connected",o=>{A()}),t.addEventListener("notification",o=>{const s=JSON.parse(o.data);u(i=>[s,...i]),f(i=>[s,...i].slice(0,4))}),t.onerror=()=>{console.error("SSE connection error")},()=>t.close()},[]);const I=async(t,o)=>{try{await y.putJson(`${window.routePrefix}/notifications/api/${t}/${o}/read`,{}),u(s=>s.map(i=>i.id===o?{...i,read:!0}:i)),m(s=>s.map(i=>i.id===o?{...i,read:!0}:i)),f([])}catch(s){console.error("Error marking as read:",s)}},T=async()=>{try{await y.putJson(`${window.routePrefix}/notifications/api/read-all`,{}),u(t=>t.map(o=>({...o,read:!0}))),m(t=>t.map(o=>({...o,read:!0}))),await x()}catch(t){console.error("Error marking all as read:",t)}},D=g.filter(t=>!t.read).length;return e.jsx(F.Provider,{value:{bellNotifications:g,allNotifications:N,unreadCount:D,getTabs:A,tabs:r,initTab:w,search:M,markAsRead:I,markAllAsRead:T,messages:v,fetchAllNotifications:E,paginateNotifications:$,loading:k,refreshBellNotifications:l},children:d})},H=()=>{const d=a.useContext(F);if(d===void 0)throw new Error("useNotifications must be used within a NotificationProvider");return d};function de(){const{bellNotifications:d,markAsRead:g,unreadCount:f,refreshBellNotifications:b,messages:u}=H(),[h,m]=a.useState(!1),k=async(r,p)=>{m(!0);try{await g(r,p),await b()}catch(w){console.error("Error marking as read:",w)}finally{m(!1)}},c=r=>{const p=new Date,w=new Date(r),C=p.getTime()-w.getTime(),j=Math.floor(C/1e3),n=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(j<60)return n.format(-j,"second");const v=Math.floor(j/60);if(v<60)return n.format(-v,"minute");const N=Math.floor(v/60);if(N<24)return n.format(-N,"hour");const x=Math.floor(N/24);if(x<30)return n.format(-x,"day");const l=Math.floor(x/30);if(l<12)return n.format(-l,"month");const A=Math.floor(l/12);return n.format(-A,"year")};return e.jsxs(X,{children:[e.jsx(q,{asChild:!0,className:"cursor-pointer data-[state=open]:bg-sidebar-accent",children:e.jsxs(P,{variant:"ghost",className:"relative",children:[e.jsx(G,{}),f>0&&e.jsx("div",{className:"absolute top-1.5 right-1.5 size-1.5 rounded-full bg-destructive"})]})}),e.jsxs(Q,{className:"z-[1002] p-2",align:"end",onCloseAutoFocus:r=>r.preventDefault(),children:[e.jsx(Y,{className:`${h?"opacity-50 pointer-events-none":""}`,children:d.length===0?e.jsx("div",{className:"p-4 text-center text-muted-foreground",children:u["No notifications"]}):d.map(r=>e.jsxs("div",{children:[e.jsx(Z,{asChild:!0,className:"cursor-pointer",onSelect:p=>{p.preventDefault(),W.visit(`${window.routePrefix}/notifications?type=${r.notificationClass}`)},children:e.jsxs("div",{className:"grid grid-cols-[32px_250px] grid-rows-[auto_1fr] items-start gap-x-4 gap-y-2",children:[r.icon?e.jsx(le,{name:r.icon.icon,style:{color:r.icon.iconColor},className:"!text-[32px]"}):e.jsx("div",{}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{className:"font-medium",children:r.title}),e.jsx("span",{className:"truncate",children:r.message})]}),e.jsxs("div",{className:"col-start-2 flex justify-between flex-nowrap items-center",children:[e.jsx("div",{className:"flex flex-nowrap gap-2 items-center",children:e.jsx("div",{children:c(r.createdAt)})}),e.jsxs(J,{children:[e.jsx(R,{asChild:!0,children:e.jsx(P,{variant:"ghost",size:"icon",className:"size-4",onClick:p=>{p.stopPropagation(),k(r.notificationClass,r.id)},children:e.jsx(K,{className:"text-primary"})})}),e.jsx(L,{side:"left",className:"z-[1003]",children:e.jsx("p",{children:u["Make read"]})})]})]})]})}),e.jsx(ee,{})]},r.id))}),e.jsx(P,{variant:"secondary",asChild:!0,children:e.jsxs(B,{href:`${window.routePrefix}/notifications`,className:`w-full ${h?"opacity-50 pointer-events-none":""}`,children:[u["View All"],h&&e.jsx(O,{className:"h-4 w-4 animate-spin"})]})})]})]})}const fe=()=>{if(!(typeof window>"u"))return window.__adminizerAiAssistantState__??void 0},ue=d=>{typeof window>"u"||(window.__adminizerAiAssistantState__=d)},U=a.createContext(void 0),Ne=({children:d})=>{const f=z().props.aiAssistant,b=a.useMemo(()=>fe(),[]),[u,h]=a.useState(()=>b?.isOpen??!1),[m,k]=a.useState([]),[c,r]=a.useState(()=>b?.activeModel??f?.defaultModel??void 0),[p,w]=a.useState([]),[C,j]=a.useState(!1),[n,v]=a.useState(!1),[N,x]=a.useState(null),l=f?.enabled??!1,A=a.useCallback(async()=>{if(l)try{j(!0);const{data:s}=await y.getJson(`${window.routePrefix}/api/ai-assistant/models`);k(s),r(i=>i||(f?.defaultModel&&s.some(S=>S.id===f.defaultModel)?f.defaultModel:s[0]?.id))}catch(s){console.error("Failed to load AI assistant models",s),x("Unable to load AI assistant models")}finally{j(!1)}},[f?.defaultModel,l]),M=a.useCallback(async s=>{if(!(!l||!s))try{j(!0);const{data:i}=await y.getJson(`${window.routePrefix}/api/ai-assistant/history/${s}`);w(i.history??[])}catch(i){console.error("Failed to load AI assistant history",i),x("Unable to load AI assistant history")}finally{j(!1)}},[l]);a.useEffect(()=>{if(!l){w([]);return}A()},[A,l]),a.useEffect(()=>{!l||!c||M(c)},[c,M,l]);const E=a.useCallback(s=>{r(s)},[]),$=a.useCallback(()=>h(!0),[]),I=a.useCallback(()=>h(!1),[]),T=a.useCallback(()=>h(s=>!s),[]),D=a.useCallback(async s=>{if(!l||!c)return;const i=s.trim();if(!i)return;const _={id:`tmp-${Date.now()}`,role:"user",content:i,timestamp:new Date().toISOString(),modelId:c};w(S=>[...S,_]),v(!0),x(null);try{const{data:S}=await y.postJson(`${window.routePrefix}/api/ai-assistant/query`,{modelId:c,message:i});w(S.history??[])}catch(S){console.error("Failed to send AI assistant message",S),x("Unable to reach AI assistant"),await M(c)}finally{v(!1)}},[c,M,l]),t=a.useCallback(async()=>{c&&await M(c)},[c,M]);a.useEffect(()=>{l||h(!1)},[l]),a.useEffect(()=>{ue({isOpen:u,activeModel:c})},[c,u]);const o=a.useMemo(()=>({isEnabled:l,isOpen:u,openChat:$,closeChat:I,toggleChat:T,models:m,activeModel:c,setActiveModel:E,messages:p,loading:C,sending:n,error:N,sendMessage:D,refreshHistory:t}),[c,I,N,l,u,C,p,m,$,t,D,n,E,T]);return e.jsx(U.Provider,{value:o,children:d})},me=()=>{const d=a.useContext(U);if(!d)throw new Error("useAiAssistant must be used within an AiAssistantProvider");return d};function he(){const{isEnabled:d,isOpen:g,toggleChat:f,models:b,sending:u,loading:h}=me();if(!d)return null;const m=b.length>0;return e.jsx(e.Fragment,{children:e.jsxs(J,{children:[e.jsx(R,{asChild:!0,children:e.jsx(P,{variant:"ghost",className:se("relative",{"text-primary":g}),onClick:f,"aria-expanded":g,"aria-haspopup":"true","aria-controls":"ai-assistant-panel",disabled:!m&&h,children:u?e.jsx(O,{className:"size-4 animate-spin"}):e.jsx(te,{className:"size-4"})})}),e.jsx(L,{side:"bottom",className:"z-[1002]",children:e.jsx("span",{children:"AI assistant"})})]})})}function pe({breadcrumbs:d=[]}){const{tabs:g}=H(),f=z();return e.jsx("header",{className:"border-sidebar-border/50 flex h-16 shrink-0 items-center gap-2 border-b px-6 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12 md:px-4",children:e.jsxs("div",{className:"flex justify-between w-full",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ae,{className:"-ml-1"}),e.jsx(ne,{breadcrumbs:d})]}),e.jsxs("div",{className:"flex gap-4 items-center",children:[e.jsx(he,{}),f.props.history&&e.jsx(B,{href:`${window.routePrefix}/history/view-all`,children:e.jsx(P,{variant:"ghost",size:"icon",className:"shrink-0",children:e.jsx(ie,{})})}),e.jsx(oe,{}),f.props.notifications&&(g===null?e.jsx("div",{className:"w-[40px] flex-none flex justify-center",children:e.jsx(O,{className:"size-4 animate-spin"})}):g.length?e.jsx(de,{}):null),e.jsx(re,{})]})]})})}const Me=Object.freeze(Object.defineProperty({__proto__:null,AppSidebarHeader:pe},Symbol.toStringTag,{value:"Module"}));export{Ne as A,ve as N,pe as a,Me as b,H as c,me as u};