@inventreedb/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/.babelrc +8 -0
  2. package/.linguirc +55 -0
  3. package/README.md +17 -0
  4. package/index.html +15 -0
  5. package/lib/enums/ApiEndpoints.tsx +233 -0
  6. package/lib/enums/ModelType.tsx +38 -0
  7. package/lib/enums/Roles.tsx +25 -0
  8. package/lib/functions/Api.tsx +42 -0
  9. package/lib/functions/Plugins.tsx +27 -0
  10. package/lib/index.ts +11 -0
  11. package/lib/types/Auth.tsx +51 -0
  12. package/lib/types/Core.tsx +13 -0
  13. package/lib/types/Filters.tsx +69 -0
  14. package/lib/types/Forms.tsx +185 -0
  15. package/lib/types/Modals.tsx +17 -0
  16. package/lib/types/Plugins.tsx +68 -0
  17. package/lib/types/Server.tsx +8 -0
  18. package/lib/types/Settings.tsx +55 -0
  19. package/lib/types/Tables.tsx +69 -0
  20. package/lib/types/User.tsx +62 -0
  21. package/netlify.toml +22 -0
  22. package/package.json +125 -0
  23. package/playwright/global-setup.ts +45 -0
  24. package/playwright.config.ts +99 -0
  25. package/public/inventree.svg +291 -0
  26. package/src/App.tsx +35 -0
  27. package/src/assets/inventree.svg +1 -0
  28. package/src/components/Boundary.tsx +43 -0
  29. package/src/components/SplashScreen.tsx +35 -0
  30. package/src/components/barcodes/BarcodeCameraInput.tsx +207 -0
  31. package/src/components/barcodes/BarcodeInput.tsx +127 -0
  32. package/src/components/barcodes/BarcodeKeyboardInput.tsx +50 -0
  33. package/src/components/barcodes/BarcodeScanDialog.tsx +101 -0
  34. package/src/components/barcodes/BarcodeScanItem.tsx +23 -0
  35. package/src/components/barcodes/QRCode.tsx +211 -0
  36. package/src/components/buttons/ActionButton.tsx +61 -0
  37. package/src/components/buttons/AddItemButton.tsx +10 -0
  38. package/src/components/buttons/AdminButton.tsx +91 -0
  39. package/src/components/buttons/ButtonMenu.tsx +33 -0
  40. package/src/components/buttons/CopyButton.tsx +52 -0
  41. package/src/components/buttons/PrimaryActionButton.tsx +40 -0
  42. package/src/components/buttons/PrintingActions.tsx +191 -0
  43. package/src/components/buttons/RemoveRowButton.tsx +22 -0
  44. package/src/components/buttons/SSOButton.tsx +53 -0
  45. package/src/components/buttons/ScanButton.tsx +27 -0
  46. package/src/components/buttons/SegmentedIconControl.tsx +51 -0
  47. package/src/components/buttons/SplitButton.css.ts +19 -0
  48. package/src/components/buttons/SplitButton.tsx +111 -0
  49. package/src/components/buttons/SpotlightButton.tsx +22 -0
  50. package/src/components/buttons/StarredToggleButton.tsx +62 -0
  51. package/src/components/buttons/YesNoButton.tsx +42 -0
  52. package/src/components/calendar/Calendar.tsx +193 -0
  53. package/src/components/calendar/OrderCalendar.tsx +209 -0
  54. package/src/components/charts/colors.tsx +12 -0
  55. package/src/components/charts/tooltipFormatter.tsx +12 -0
  56. package/src/components/dashboard/DashboardLayout.tsx +327 -0
  57. package/src/components/dashboard/DashboardMenu.tsx +136 -0
  58. package/src/components/dashboard/DashboardWidget.tsx +82 -0
  59. package/src/components/dashboard/DashboardWidgetDrawer.tsx +130 -0
  60. package/src/components/dashboard/DashboardWidgetLibrary.tsx +189 -0
  61. package/src/components/dashboard/widgets/ColorToggleWidget.tsx +28 -0
  62. package/src/components/dashboard/widgets/GetStartedWidget.tsx +19 -0
  63. package/src/components/dashboard/widgets/LanguageSelectWidget.tsx +28 -0
  64. package/src/components/dashboard/widgets/NewsWidget.tsx +143 -0
  65. package/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx +134 -0
  66. package/src/components/details/Details.tsx +514 -0
  67. package/src/components/details/DetailsBadge.tsx +20 -0
  68. package/src/components/details/DetailsImage.tsx +462 -0
  69. package/src/components/details/ItemDetails.tsx +17 -0
  70. package/src/components/editors/NotesEditor.tsx +232 -0
  71. package/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx +158 -0
  72. package/src/components/editors/TemplateEditor/CodeEditor/index.tsx +12 -0
  73. package/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +90 -0
  74. package/src/components/editors/TemplateEditor/PdfPreview/index.tsx +12 -0
  75. package/src/components/editors/TemplateEditor/TemplateEditor.tsx +425 -0
  76. package/src/components/editors/TemplateEditor/index.tsx +3 -0
  77. package/src/components/errors/ClientError.tsx +28 -0
  78. package/src/components/errors/GenericErrorPage.tsx +73 -0
  79. package/src/components/errors/NotAuthenticated.tsx +12 -0
  80. package/src/components/errors/NotFound.tsx +12 -0
  81. package/src/components/errors/PermissionDenied.tsx +12 -0
  82. package/src/components/errors/ServerError.tsx +13 -0
  83. package/src/components/forms/ApiForm.tsx +718 -0
  84. package/src/components/forms/AuthFormOptions.tsx +39 -0
  85. package/src/components/forms/AuthenticationForm.tsx +332 -0
  86. package/src/components/forms/HostOptionsForm.tsx +96 -0
  87. package/src/components/forms/InstanceOptions.tsx +178 -0
  88. package/src/components/forms/StandaloneField.tsx +55 -0
  89. package/src/components/forms/fields/ApiFormField.tsx +281 -0
  90. package/src/components/forms/fields/ChoiceField.tsx +86 -0
  91. package/src/components/forms/fields/DateField.tsx +79 -0
  92. package/src/components/forms/fields/DependentField.tsx +91 -0
  93. package/src/components/forms/fields/IconField.tsx +353 -0
  94. package/src/components/forms/fields/NestedObjectField.tsx +45 -0
  95. package/src/components/forms/fields/RelatedModelField.tsx +339 -0
  96. package/src/components/forms/fields/TableField.tsx +275 -0
  97. package/src/components/forms/fields/TextField.tsx +81 -0
  98. package/src/components/images/ApiImage.tsx +35 -0
  99. package/src/components/images/Thumbnail.tsx +52 -0
  100. package/src/components/importer/ImportDataSelector.tsx +433 -0
  101. package/src/components/importer/ImporterColumnSelector.tsx +244 -0
  102. package/src/components/importer/ImporterDrawer.tsx +173 -0
  103. package/src/components/importer/ImporterImportProgress.tsx +45 -0
  104. package/src/components/items/ActionDropdown.tsx +290 -0
  105. package/src/components/items/ApiIcon.css.ts +13 -0
  106. package/src/components/items/ApiIcon.tsx +32 -0
  107. package/src/components/items/AttachmentLink.tsx +79 -0
  108. package/src/components/items/ColorToggle.tsx +34 -0
  109. package/src/components/items/DashboardItem.tsx +33 -0
  110. package/src/components/items/DocInfo.tsx +20 -0
  111. package/src/components/items/DocTooltip.tsx +98 -0
  112. package/src/components/items/ErrorItem.tsx +17 -0
  113. package/src/components/items/Expand.tsx +14 -0
  114. package/src/components/items/GettingStartedCarousel.css.ts +30 -0
  115. package/src/components/items/GettingStartedCarousel.tsx +49 -0
  116. package/src/components/items/InfoItem.tsx +64 -0
  117. package/src/components/items/InvenTreeLogo.tsx +24 -0
  118. package/src/components/items/LanguageSelect.tsx +43 -0
  119. package/src/components/items/LanguageToggle.tsx +37 -0
  120. package/src/components/items/MenuLinks.tsx +113 -0
  121. package/src/components/items/OnlyStaff.tsx +10 -0
  122. package/src/components/items/ProgressBar.tsx +45 -0
  123. package/src/components/items/StylishText.tsx +59 -0
  124. package/src/components/items/TitleWithDoc.tsx +26 -0
  125. package/src/components/items/UnavailableIndicator.tsx +5 -0
  126. package/src/components/items/inventree.svg +1 -0
  127. package/src/components/modals/AboutInvenTreeModal.tsx +203 -0
  128. package/src/components/modals/LicenseModal.tsx +116 -0
  129. package/src/components/modals/QrModal.tsx +21 -0
  130. package/src/components/modals/ServerInfoModal.tsx +136 -0
  131. package/src/components/nav/Alerts.tsx +130 -0
  132. package/src/components/nav/BreadcrumbList.tsx +84 -0
  133. package/src/components/nav/DetailDrawer.css.ts +6 -0
  134. package/src/components/nav/DetailDrawer.tsx +105 -0
  135. package/src/components/nav/Footer.tsx +11 -0
  136. package/src/components/nav/Header.tsx +226 -0
  137. package/src/components/nav/InstanceDetail.tsx +46 -0
  138. package/src/components/nav/Layout.tsx +85 -0
  139. package/src/components/nav/MainMenu.tsx +101 -0
  140. package/src/components/nav/NavHoverMenu.tsx +15 -0
  141. package/src/components/nav/NavigationDrawer.tsx +230 -0
  142. package/src/components/nav/NavigationTree.tsx +210 -0
  143. package/src/components/nav/NotificationDrawer.tsx +231 -0
  144. package/src/components/nav/PageDetail.tsx +171 -0
  145. package/src/components/nav/PageTitle.tsx +53 -0
  146. package/src/components/nav/SearchDrawer.tsx +598 -0
  147. package/src/components/nav/SettingsHeader.tsx +50 -0
  148. package/src/components/panels/AttachmentPanel.tsx +27 -0
  149. package/src/components/panels/NotesPanel.tsx +36 -0
  150. package/src/components/panels/Panel.tsx +15 -0
  151. package/src/components/panels/PanelGroup.css.ts +10 -0
  152. package/src/components/panels/PanelGroup.tsx +292 -0
  153. package/src/components/plugins/LocateItemButton.tsx +94 -0
  154. package/src/components/plugins/PluginContext.tsx +67 -0
  155. package/src/components/plugins/PluginDrawer.tsx +156 -0
  156. package/src/components/plugins/PluginInterface.tsx +34 -0
  157. package/src/components/plugins/PluginPanel.tsx +37 -0
  158. package/src/components/plugins/PluginSettingsPanel.tsx +34 -0
  159. package/src/components/plugins/PluginSource.tsx +48 -0
  160. package/src/components/plugins/PluginUIFeature.tsx +174 -0
  161. package/src/components/plugins/PluginUIFeatureTypes.ts +78 -0
  162. package/src/components/plugins/RemoteComponent.tsx +137 -0
  163. package/src/components/render/Build.tsx +54 -0
  164. package/src/components/render/Company.tsx +114 -0
  165. package/src/components/render/Generic.tsx +49 -0
  166. package/src/components/render/Instance.tsx +240 -0
  167. package/src/components/render/InstanceFromUrl.tsx +33 -0
  168. package/src/components/render/ModelType.tsx +293 -0
  169. package/src/components/render/Order.tsx +124 -0
  170. package/src/components/render/Part.tsx +109 -0
  171. package/src/components/render/Plugin.tsx +21 -0
  172. package/src/components/render/Report.tsx +29 -0
  173. package/src/components/render/StatusRenderer.tsx +178 -0
  174. package/src/components/render/Stock.tsx +84 -0
  175. package/src/components/render/User.tsx +42 -0
  176. package/src/components/settings/FactCollection.tsx +31 -0
  177. package/src/components/settings/FactItem.tsx +17 -0
  178. package/src/components/settings/SettingItem.tsx +176 -0
  179. package/src/components/settings/SettingList.tsx +217 -0
  180. package/src/components/wizards/OrderPartsWizard.tsx +473 -0
  181. package/src/components/wizards/WizardDrawer.tsx +188 -0
  182. package/src/contexts/ApiContext.tsx +31 -0
  183. package/src/contexts/LanguageContext.tsx +155 -0
  184. package/src/contexts/ThemeContext.tsx +58 -0
  185. package/src/contexts/colorSchema.tsx +67 -0
  186. package/src/defaults/actions.tsx +87 -0
  187. package/src/defaults/backendMappings.tsx +32 -0
  188. package/src/defaults/defaultHostList.tsx +4 -0
  189. package/src/defaults/defaults.tsx +38 -0
  190. package/src/defaults/formatters.tsx +176 -0
  191. package/src/defaults/links.tsx +193 -0
  192. package/src/defaults/templates.tsx +53 -0
  193. package/src/forms/BomForms.tsx +26 -0
  194. package/src/forms/BuildForms.tsx +615 -0
  195. package/src/forms/CommonForms.tsx +89 -0
  196. package/src/forms/CompanyForms.tsx +133 -0
  197. package/src/forms/ImporterForms.tsx +20 -0
  198. package/src/forms/PartForms.tsx +281 -0
  199. package/src/forms/PurchaseOrderForms.tsx +779 -0
  200. package/src/forms/ReturnOrderForms.tsx +263 -0
  201. package/src/forms/SalesOrderForms.tsx +408 -0
  202. package/src/forms/StockForms.tsx +1296 -0
  203. package/src/forms/selectionListFields.tsx +120 -0
  204. package/src/functions/api.tsx +61 -0
  205. package/src/functions/auth.tsx +574 -0
  206. package/src/functions/conversion.tsx +42 -0
  207. package/src/functions/events.tsx +6 -0
  208. package/src/functions/forms.tsx +173 -0
  209. package/src/functions/icons.tsx +294 -0
  210. package/src/functions/loading.tsx +29 -0
  211. package/src/functions/navigation.tsx +20 -0
  212. package/src/functions/notifications.tsx +101 -0
  213. package/src/functions/tables.tsx +26 -0
  214. package/src/functions/uid.tsx +15 -0
  215. package/src/functions/urls.tsx +58 -0
  216. package/src/hooks/UseCalendar.tsx +178 -0
  217. package/src/hooks/UseDashboardItems.tsx +118 -0
  218. package/src/hooks/UseDataExport.tsx +125 -0
  219. package/src/hooks/UseDataOutput.tsx +109 -0
  220. package/src/hooks/UseFilter.tsx +67 -0
  221. package/src/hooks/UseFilterSet.tsx +24 -0
  222. package/src/hooks/UseForm.tsx +161 -0
  223. package/src/hooks/UseGenerator.tsx +92 -0
  224. package/src/hooks/UseImportSession.tsx +139 -0
  225. package/src/hooks/UseInstance.tsx +137 -0
  226. package/src/hooks/UseInstanceName.tsx +14 -0
  227. package/src/hooks/UseModal.tsx +38 -0
  228. package/src/hooks/UsePlaceholder.tsx +66 -0
  229. package/src/hooks/UsePluginPanels.tsx +123 -0
  230. package/src/hooks/UsePluginUIFeature.tsx +95 -0
  231. package/src/hooks/UsePlugins.tsx +45 -0
  232. package/src/hooks/UseSelectedRows.tsx +37 -0
  233. package/src/hooks/UseStatusCodes.tsx +50 -0
  234. package/src/hooks/UseTable.tsx +145 -0
  235. package/src/hooks/UseWizard.tsx +133 -0
  236. package/src/locales/ar/messages.d.ts +4 -0
  237. package/src/locales/ar/messages.po +10695 -0
  238. package/src/locales/ar/messages.ts +1 -0
  239. package/src/locales/bg/messages.d.ts +4 -0
  240. package/src/locales/bg/messages.po +10695 -0
  241. package/src/locales/bg/messages.ts +1 -0
  242. package/src/locales/cs/messages.d.ts +4 -0
  243. package/src/locales/cs/messages.po +10695 -0
  244. package/src/locales/cs/messages.ts +1 -0
  245. package/src/locales/da/messages.d.ts +4 -0
  246. package/src/locales/da/messages.po +10695 -0
  247. package/src/locales/da/messages.ts +1 -0
  248. package/src/locales/de/messages.d.ts +4 -0
  249. package/src/locales/de/messages.po +10695 -0
  250. package/src/locales/de/messages.ts +1 -0
  251. package/src/locales/el/messages.d.ts +4 -0
  252. package/src/locales/el/messages.po +10695 -0
  253. package/src/locales/el/messages.ts +1 -0
  254. package/src/locales/en/messages.d.ts +4 -0
  255. package/src/locales/en/messages.po +10689 -0
  256. package/src/locales/en/messages.ts +1 -0
  257. package/src/locales/es/messages.d.ts +4 -0
  258. package/src/locales/es/messages.po +10695 -0
  259. package/src/locales/es/messages.ts +1 -0
  260. package/src/locales/es_MX/messages.d.ts +4 -0
  261. package/src/locales/es_MX/messages.po +10695 -0
  262. package/src/locales/es_MX/messages.ts +1 -0
  263. package/src/locales/et/messages.d.ts +4 -0
  264. package/src/locales/et/messages.po +10695 -0
  265. package/src/locales/et/messages.ts +1 -0
  266. package/src/locales/fa/messages.d.ts +4 -0
  267. package/src/locales/fa/messages.po +10695 -0
  268. package/src/locales/fa/messages.ts +1 -0
  269. package/src/locales/fi/messages.d.ts +4 -0
  270. package/src/locales/fi/messages.po +10695 -0
  271. package/src/locales/fi/messages.ts +1 -0
  272. package/src/locales/fr/messages.d.ts +4 -0
  273. package/src/locales/fr/messages.po +10695 -0
  274. package/src/locales/fr/messages.ts +1 -0
  275. package/src/locales/he/messages.d.ts +4 -0
  276. package/src/locales/he/messages.po +10695 -0
  277. package/src/locales/he/messages.ts +1 -0
  278. package/src/locales/hi/messages.d.ts +4 -0
  279. package/src/locales/hi/messages.po +10695 -0
  280. package/src/locales/hi/messages.ts +1 -0
  281. package/src/locales/hu/messages.d.ts +4 -0
  282. package/src/locales/hu/messages.po +10695 -0
  283. package/src/locales/hu/messages.ts +1 -0
  284. package/src/locales/id/messages.po +10695 -0
  285. package/src/locales/it/messages.d.ts +4 -0
  286. package/src/locales/it/messages.po +10695 -0
  287. package/src/locales/it/messages.ts +1 -0
  288. package/src/locales/ja/messages.d.ts +4 -0
  289. package/src/locales/ja/messages.po +10695 -0
  290. package/src/locales/ja/messages.ts +1 -0
  291. package/src/locales/ko/messages.d.ts +4 -0
  292. package/src/locales/ko/messages.po +10695 -0
  293. package/src/locales/ko/messages.ts +1 -0
  294. package/src/locales/lt/messages.d.ts +4 -0
  295. package/src/locales/lt/messages.po +10695 -0
  296. package/src/locales/lt/messages.ts +1 -0
  297. package/src/locales/lv/messages.d.ts +4 -0
  298. package/src/locales/lv/messages.po +10695 -0
  299. package/src/locales/lv/messages.ts +1 -0
  300. package/src/locales/nl/messages.d.ts +4 -0
  301. package/src/locales/nl/messages.po +10695 -0
  302. package/src/locales/nl/messages.ts +1 -0
  303. package/src/locales/no/messages.d.ts +4 -0
  304. package/src/locales/no/messages.po +10695 -0
  305. package/src/locales/no/messages.ts +1 -0
  306. package/src/locales/pl/messages.d.ts +4 -0
  307. package/src/locales/pl/messages.po +10695 -0
  308. package/src/locales/pl/messages.ts +1 -0
  309. package/src/locales/pseudo-LOCALE/messages.d.ts +4 -0
  310. package/src/locales/pseudo-LOCALE/messages.po +8003 -0
  311. package/src/locales/pseudo-LOCALE/messages.ts +1 -0
  312. package/src/locales/pt/messages.d.ts +4 -0
  313. package/src/locales/pt/messages.po +10696 -0
  314. package/src/locales/pt/messages.ts +1 -0
  315. package/src/locales/pt_BR/messages.d.ts +4 -0
  316. package/src/locales/pt_BR/messages.po +10695 -0
  317. package/src/locales/pt_BR/messages.ts +1 -0
  318. package/src/locales/ro/messages.po +10695 -0
  319. package/src/locales/ro/messages.ts +1 -0
  320. package/src/locales/ru/messages.d.ts +4 -0
  321. package/src/locales/ru/messages.po +10695 -0
  322. package/src/locales/ru/messages.ts +1 -0
  323. package/src/locales/sk/messages.d.ts +4 -0
  324. package/src/locales/sk/messages.po +10695 -0
  325. package/src/locales/sk/messages.ts +1 -0
  326. package/src/locales/sl/messages.d.ts +4 -0
  327. package/src/locales/sl/messages.po +10695 -0
  328. package/src/locales/sl/messages.ts +1 -0
  329. package/src/locales/sr/messages.d.ts +4 -0
  330. package/src/locales/sr/messages.po +10695 -0
  331. package/src/locales/sr/messages.ts +1 -0
  332. package/src/locales/sv/messages.d.ts +4 -0
  333. package/src/locales/sv/messages.po +10695 -0
  334. package/src/locales/sv/messages.ts +1 -0
  335. package/src/locales/th/messages.d.ts +4 -0
  336. package/src/locales/th/messages.po +10695 -0
  337. package/src/locales/th/messages.ts +1 -0
  338. package/src/locales/tr/messages.d.ts +4 -0
  339. package/src/locales/tr/messages.po +10695 -0
  340. package/src/locales/tr/messages.ts +1 -0
  341. package/src/locales/uk/messages.d.ts +3 -0
  342. package/src/locales/uk/messages.po +10695 -0
  343. package/src/locales/uk/messages.ts +1 -0
  344. package/src/locales/vi/messages.d.ts +4 -0
  345. package/src/locales/vi/messages.po +10695 -0
  346. package/src/locales/vi/messages.ts +1 -0
  347. package/src/locales/zh_Hans/messages.d.ts +4 -0
  348. package/src/locales/zh_Hans/messages.po +10695 -0
  349. package/src/locales/zh_Hans/messages.ts +1 -0
  350. package/src/locales/zh_Hant/messages.d.ts +4 -0
  351. package/src/locales/zh_Hant/messages.po +10695 -0
  352. package/src/locales/zh_Hant/messages.ts +1 -0
  353. package/src/main.css.ts +148 -0
  354. package/src/main.tsx +123 -0
  355. package/src/pages/Auth/ChangePassword.tsx +84 -0
  356. package/src/pages/Auth/Layout.tsx +74 -0
  357. package/src/pages/Auth/LoggedIn.tsx +21 -0
  358. package/src/pages/Auth/Login.tsx +133 -0
  359. package/src/pages/Auth/Logout.tsx +16 -0
  360. package/src/pages/Auth/MFA.tsx +36 -0
  361. package/src/pages/Auth/MFASetup.tsx +38 -0
  362. package/src/pages/Auth/Register.tsx +28 -0
  363. package/src/pages/Auth/Reset.tsx +30 -0
  364. package/src/pages/Auth/ResetPassword.tsx +48 -0
  365. package/src/pages/Auth/VerifyEmail.tsx +34 -0
  366. package/src/pages/ErrorPage.tsx +26 -0
  367. package/src/pages/Index/Home.tsx +12 -0
  368. package/src/pages/Index/Scan.tsx +258 -0
  369. package/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx +162 -0
  370. package/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx +38 -0
  371. package/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx +713 -0
  372. package/src/pages/Index/Settings/AccountSettings/UserPanel.tsx +24 -0
  373. package/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx +207 -0
  374. package/src/pages/Index/Settings/AccountSettings/useConfirm.tsx +117 -0
  375. package/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx +111 -0
  376. package/src/pages/Index/Settings/AdminCenter/Index.tsx +251 -0
  377. package/src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx +23 -0
  378. package/src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx +110 -0
  379. package/src/pages/Index/Settings/AdminCenter/PartParameterPanel.tsx +29 -0
  380. package/src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx +84 -0
  381. package/src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx +38 -0
  382. package/src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx +31 -0
  383. package/src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx +73 -0
  384. package/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx +74 -0
  385. package/src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx +49 -0
  386. package/src/pages/Index/Settings/SystemSettings.tsx +339 -0
  387. package/src/pages/Index/Settings/UserSettings.tsx +143 -0
  388. package/src/pages/Notifications.tsx +134 -0
  389. package/src/pages/build/BuildDetail.tsx +579 -0
  390. package/src/pages/build/BuildIndex.tsx +100 -0
  391. package/src/pages/company/CompanyDetail.tsx +352 -0
  392. package/src/pages/company/CustomerDetail.tsx +13 -0
  393. package/src/pages/company/ManufacturerDetail.tsx +13 -0
  394. package/src/pages/company/ManufacturerPartDetail.tsx +307 -0
  395. package/src/pages/company/SupplierDetail.tsx +13 -0
  396. package/src/pages/company/SupplierPartDetail.tsx +433 -0
  397. package/src/pages/core/CoreIndex.tsx +50 -0
  398. package/src/pages/core/GroupDetail.tsx +97 -0
  399. package/src/pages/core/UserDetail.tsx +193 -0
  400. package/src/pages/part/CategoryDetail.tsx +369 -0
  401. package/src/pages/part/PartAllocationPanel.tsx +40 -0
  402. package/src/pages/part/PartDetail.tsx +1071 -0
  403. package/src/pages/part/PartPricingPanel.tsx +155 -0
  404. package/src/pages/part/PartSchedulingDetail.tsx +315 -0
  405. package/src/pages/part/PartStocktakeDetail.tsx +285 -0
  406. package/src/pages/part/PartSupplierDetail.tsx +31 -0
  407. package/src/pages/part/pricing/BomPricingPanel.tsx +269 -0
  408. package/src/pages/part/pricing/PriceBreakPanel.tsx +182 -0
  409. package/src/pages/part/pricing/PricingOverviewPanel.tsx +338 -0
  410. package/src/pages/part/pricing/PricingPanel.tsx +82 -0
  411. package/src/pages/part/pricing/PurchaseHistoryPanel.tsx +134 -0
  412. package/src/pages/part/pricing/SaleHistoryPanel.tsx +95 -0
  413. package/src/pages/part/pricing/SupplierPricingPanel.tsx +80 -0
  414. package/src/pages/part/pricing/VariantPricingPanel.tsx +112 -0
  415. package/src/pages/purchasing/PurchaseOrderDetail.tsx +547 -0
  416. package/src/pages/purchasing/PurchasingIndex.tsx +131 -0
  417. package/src/pages/sales/ReturnOrderDetail.tsx +529 -0
  418. package/src/pages/sales/SalesIndex.tsx +148 -0
  419. package/src/pages/sales/SalesOrderDetail.tsx +593 -0
  420. package/src/pages/sales/SalesOrderShipmentDetail.tsx +385 -0
  421. package/src/pages/stock/LocationDetail.tsx +413 -0
  422. package/src/pages/stock/StockDetail.tsx +951 -0
  423. package/src/router.tsx +213 -0
  424. package/src/states/ApiState.tsx +85 -0
  425. package/src/states/IconState.tsx +94 -0
  426. package/src/states/LocalState.tsx +181 -0
  427. package/src/states/SettingsState.tsx +206 -0
  428. package/src/states/StatusState.tsx +55 -0
  429. package/src/states/UserState.tsx +202 -0
  430. package/src/states/states.tsx +69 -0
  431. package/src/tables/Column.tsx +29 -0
  432. package/src/tables/ColumnRenderers.tsx +320 -0
  433. package/src/tables/ColumnSelect.tsx +39 -0
  434. package/src/tables/Filter.tsx +297 -0
  435. package/src/tables/FilterSelectDrawer.tsx +358 -0
  436. package/src/tables/InvenTreeTable.tsx +750 -0
  437. package/src/tables/InvenTreeTableHeader.tsx +257 -0
  438. package/src/tables/RowActions.tsx +176 -0
  439. package/src/tables/RowExpansionIcon.tsx +16 -0
  440. package/src/tables/Search.tsx +42 -0
  441. package/src/tables/TableHoverCard.tsx +91 -0
  442. package/src/tables/bom/BomTable.tsx +590 -0
  443. package/src/tables/bom/UsedInTable.tsx +114 -0
  444. package/src/tables/build/BuildAllocatedStockTable.tsx +233 -0
  445. package/src/tables/build/BuildLineTable.tsx +800 -0
  446. package/src/tables/build/BuildOrderTable.tsx +226 -0
  447. package/src/tables/build/BuildOrderTestTable.tsx +265 -0
  448. package/src/tables/build/BuildOutputTable.tsx +599 -0
  449. package/src/tables/company/AddressTable.tsx +211 -0
  450. package/src/tables/company/CompanyTable.tsx +176 -0
  451. package/src/tables/company/ContactTable.tsx +182 -0
  452. package/src/tables/core/UserTable.tsx +88 -0
  453. package/src/tables/general/AttachmentTable.tsx +404 -0
  454. package/src/tables/general/BarcodeScanTable.tsx +124 -0
  455. package/src/tables/general/ExtraLineItemTable.tsx +174 -0
  456. package/src/tables/machine/MachineListTable.tsx +634 -0
  457. package/src/tables/machine/MachineTypeTable.tsx +395 -0
  458. package/src/tables/notifications/NotificationTable.tsx +60 -0
  459. package/src/tables/part/ParametricPartTable.tsx +297 -0
  460. package/src/tables/part/PartBuildAllocationsTable.tsx +128 -0
  461. package/src/tables/part/PartCategoryTable.tsx +208 -0
  462. package/src/tables/part/PartCategoryTemplateTable.tsx +157 -0
  463. package/src/tables/part/PartParameterTable.tsx +226 -0
  464. package/src/tables/part/PartParameterTemplateTable.tsx +168 -0
  465. package/src/tables/part/PartPurchaseOrdersTable.tsx +163 -0
  466. package/src/tables/part/PartSalesAllocationsTable.tsx +130 -0
  467. package/src/tables/part/PartTable.tsx +423 -0
  468. package/src/tables/part/PartTestTemplateTable.tsx +290 -0
  469. package/src/tables/part/PartThumbTable.tsx +230 -0
  470. package/src/tables/part/PartVariantTable.tsx +52 -0
  471. package/src/tables/part/RelatedPartTable.tsx +182 -0
  472. package/src/tables/part/SelectionListTable.tsx +134 -0
  473. package/src/tables/plugin/PluginErrorTable.tsx +58 -0
  474. package/src/tables/plugin/PluginListTable.tsx +440 -0
  475. package/src/tables/purchasing/ManufacturerPartParameterTable.tsx +136 -0
  476. package/src/tables/purchasing/ManufacturerPartTable.tsx +158 -0
  477. package/src/tables/purchasing/PurchaseOrderLineItemTable.tsx +424 -0
  478. package/src/tables/purchasing/PurchaseOrderTable.tsx +193 -0
  479. package/src/tables/purchasing/SupplierPartTable.tsx +281 -0
  480. package/src/tables/purchasing/SupplierPriceBreakTable.tsx +222 -0
  481. package/src/tables/sales/ReturnOrderLineItemTable.tsx +271 -0
  482. package/src/tables/sales/ReturnOrderTable.tsx +201 -0
  483. package/src/tables/sales/SalesOrderAllocationTable.tsx +330 -0
  484. package/src/tables/sales/SalesOrderLineItemTable.tsx +508 -0
  485. package/src/tables/sales/SalesOrderShipmentTable.tsx +225 -0
  486. package/src/tables/sales/SalesOrderTable.tsx +212 -0
  487. package/src/tables/settings/ApiTokenTable.tsx +203 -0
  488. package/src/tables/settings/BarcodeScanHistoryTable.tsx +281 -0
  489. package/src/tables/settings/CustomStateTable.tsx +226 -0
  490. package/src/tables/settings/CustomUnitsTable.tsx +125 -0
  491. package/src/tables/settings/ErrorTable.tsx +170 -0
  492. package/src/tables/settings/ExportSessionTable.tsx +60 -0
  493. package/src/tables/settings/FailedTasksTable.tsx +103 -0
  494. package/src/tables/settings/GroupTable.tsx +240 -0
  495. package/src/tables/settings/ImportSessionTable.tsx +175 -0
  496. package/src/tables/settings/PendingTasksTable.tsx +63 -0
  497. package/src/tables/settings/ProjectCodeTable.tsx +115 -0
  498. package/src/tables/settings/ScheduledTasksTable.tsx +62 -0
  499. package/src/tables/settings/StocktakeReportTable.tsx +111 -0
  500. package/src/tables/settings/TemplateTable.tsx +404 -0
  501. package/src/tables/settings/UserTable.tsx +329 -0
  502. package/src/tables/stock/InstalledItemsTable.tsx +146 -0
  503. package/src/tables/stock/LocationTypesTable.tsx +132 -0
  504. package/src/tables/stock/StockItemTable.tsx +707 -0
  505. package/src/tables/stock/StockItemTestResultTable.tsx +487 -0
  506. package/src/tables/stock/StockLocationTable.tsx +208 -0
  507. package/src/tables/stock/StockTrackingTable.tsx +244 -0
  508. package/src/theme.ts +5 -0
  509. package/src/views/DesktopAppView.tsx +28 -0
  510. package/src/views/MainView.tsx +38 -0
  511. package/src/views/MobileAppView.tsx +43 -0
  512. package/tests/baseFixtures.ts +93 -0
  513. package/tests/defaults.ts +18 -0
  514. package/tests/helpers.ts +122 -0
  515. package/tests/login.ts +97 -0
  516. package/tests/pages/pui_build.spec.ts +373 -0
  517. package/tests/pages/pui_company.spec.ts +40 -0
  518. package/tests/pages/pui_core.spec.ts +26 -0
  519. package/tests/pages/pui_dashboard.spec.ts +64 -0
  520. package/tests/pages/pui_part.spec.ts +413 -0
  521. package/tests/pages/pui_purchase_order.spec.ts +388 -0
  522. package/tests/pages/pui_sales_order.spec.ts +224 -0
  523. package/tests/pages/pui_scan.spec.ts +114 -0
  524. package/tests/pages/pui_stock.spec.ts +259 -0
  525. package/tests/pui_exporting.spec.ts +124 -0
  526. package/tests/pui_forms.spec.ts +131 -0
  527. package/tests/pui_general.spec.ts +60 -0
  528. package/tests/pui_login.spec.ts +74 -0
  529. package/tests/pui_modals.spec.ts +144 -0
  530. package/tests/pui_plugins.spec.ts +216 -0
  531. package/tests/pui_printing.spec.ts +149 -0
  532. package/tests/pui_settings.spec.ts +285 -0
  533. package/tests/pui_tables.spec.ts +65 -0
  534. package/tests/settings/selectionList.spec.ts +103 -0
  535. package/tests/settings.ts +54 -0
  536. package/tsconfig.json +25 -0
  537. package/tsconfig.lib.json +13 -0
  538. package/tsconfig.node.json +11 -0
  539. package/vite-env.d.ts +11 -0
  540. package/vite.config.ts +98 -0
  541. package/vite.lib.config.ts +50 -0
@@ -0,0 +1,185 @@
1
+ import type { DefaultMantineColor, MantineStyleProp } from '@mantine/core';
2
+ import type { UseFormReturnType } from '@mantine/form';
3
+ import type { ReactNode } from 'react';
4
+ import type { FieldValues } from 'react-hook-form';
5
+ import type { ApiEndpoints } from '../enums/ApiEndpoints';
6
+ import type { ModelType } from '../enums/ModelType';
7
+ import type { PathParams, UiSizeType } from './Core';
8
+ import type { TableState } from './Tables';
9
+
10
+ export interface ApiFormAction {
11
+ text: string;
12
+ variant?: 'outline';
13
+ color?: DefaultMantineColor;
14
+ onClick: () => void;
15
+ }
16
+
17
+ export type ApiFormData = UseFormReturnType<Record<string, unknown>>;
18
+
19
+ export type ApiFormAdjustFilterType = {
20
+ filters: any;
21
+ data: FieldValues;
22
+ };
23
+
24
+ export type ApiFormFieldChoice = {
25
+ value: any;
26
+ display_name: string;
27
+ };
28
+
29
+ // Define individual headers in a table field
30
+ export type ApiFormFieldHeader = {
31
+ title: string;
32
+ style?: MantineStyleProp;
33
+ };
34
+
35
+ /** Definition of the ApiForm field component.
36
+ * - The 'name' attribute *must* be provided
37
+ * - All other attributes are optional, and may be provided by the API
38
+ * - However, they can be overridden by the user
39
+ *
40
+ * @param name : The name of the field
41
+ * @param label : The label to display for the field
42
+ * @param value : The value of the field
43
+ * @param default : The default value of the field
44
+ * @param icon : An icon to display next to the field
45
+ * @param field_type : The type of field to render
46
+ * @param api_url : The API endpoint to fetch data from (for related fields)
47
+ * @param pk_field : The primary key field for the related field (default = "pk")
48
+ * @param model : The model to use for related fields
49
+ * @param filters : Optional API filters to apply to related fields
50
+ * @param required : Whether the field is required
51
+ * @param hidden : Whether the field is hidden
52
+ * @param disabled : Whether the field is disabled
53
+ * @param error : Optional error message to display
54
+ * @param exclude : Whether to exclude the field from the submitted data
55
+ * @param placeholder : The placeholder text to display
56
+ * @param description : The description to display for the field
57
+ * @param preFieldContent : Content to render before the field
58
+ * @param postFieldContent : Content to render after the field
59
+ * @param onValueChange : Callback function to call when the field value changes
60
+ * @param adjustFilters : Callback function to adjust the filters for a related field before a query is made
61
+ * @param adjustValue : Callback function to adjust the value of the field before it is sent to the API
62
+ * @param addRow : Callback function to add a new row to a table field
63
+ * @param onKeyDown : Callback function to get which key was pressed in the form to handle submission on enter
64
+ */
65
+ export type ApiFormFieldType = {
66
+ label?: string;
67
+ value?: any;
68
+ default?: any;
69
+ icon?: ReactNode;
70
+ field_type?:
71
+ | 'related field'
72
+ | 'email'
73
+ | 'url'
74
+ | 'string'
75
+ | 'icon'
76
+ | 'boolean'
77
+ | 'date'
78
+ | 'datetime'
79
+ | 'integer'
80
+ | 'decimal'
81
+ | 'float'
82
+ | 'number'
83
+ | 'choice'
84
+ | 'file upload'
85
+ | 'nested object'
86
+ | 'dependent field'
87
+ | 'table';
88
+ api_url?: string;
89
+ pk_field?: string;
90
+ model?: ModelType;
91
+ modelRenderer?: (instance: any) => ReactNode;
92
+ filters?: any;
93
+ child?: ApiFormFieldType;
94
+ children?: { [key: string]: ApiFormFieldType };
95
+ required?: boolean;
96
+ error?: string;
97
+ choices?: ApiFormFieldChoice[];
98
+ hidden?: boolean;
99
+ disabled?: boolean;
100
+ exclude?: boolean;
101
+ read_only?: boolean;
102
+ placeholder?: string;
103
+ description?: string;
104
+ preFieldContent?: JSX.Element;
105
+ postFieldContent?: JSX.Element;
106
+ adjustValue?: (value: any) => any;
107
+ onValueChange?: (value: any, record?: any) => void;
108
+ adjustFilters?: (value: ApiFormAdjustFilterType) => any;
109
+ addRow?: () => any;
110
+ headers?: ApiFormFieldHeader[];
111
+ depends_on?: string[];
112
+ };
113
+
114
+ export type ApiFormFieldSet = Record<string, ApiFormFieldType>;
115
+
116
+ /**
117
+ * Properties for the ApiForm component
118
+ * @param url : The API endpoint to fetch the form data from
119
+ * @param pk : Optional primary-key value when editing an existing object
120
+ * @param pk_field : Optional primary-key field name (default: pk)
121
+ * @param pathParams : Optional path params for the url
122
+ * @param method : Optional HTTP method to use when submitting the form (default: GET)
123
+ * @param fields : The fields to render in the form
124
+ * @param submitText : Optional custom text to display on the submit button (default: Submit)4
125
+ * @param submitColor : Optional custom color for the submit button (default: green)
126
+ * @param fetchInitialData : Optional flag to fetch initial data from the server (default: true)
127
+ * @param preFormContent : Optional content to render before the form fields
128
+ * @param postFormContent : Optional content to render after the form fields
129
+ * @param successMessage : Optional message to display on successful form submission
130
+ * @param onFormSuccess : A callback function to call when the form is submitted successfully.
131
+ * @param onFormError : A callback function to call when the form is submitted with errors.
132
+ * @param processFormData : A callback function to process the form data before submission
133
+ * @param modelType : Define a model type for this form
134
+ * @param follow : Boolean, follow the result of the form (if possible)
135
+ * @param table : Table to update on success (if provided)
136
+ */
137
+ export interface ApiFormProps {
138
+ url: ApiEndpoints | string;
139
+ pk?: number | string;
140
+ pk_field?: string;
141
+ pathParams?: PathParams;
142
+ queryParams?: URLSearchParams;
143
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
144
+ fields?: ApiFormFieldSet;
145
+ focus?: string;
146
+ initialData?: FieldValues;
147
+ submitText?: string;
148
+ submitColor?: string;
149
+ fetchInitialData?: boolean;
150
+ ignorePermissionCheck?: boolean;
151
+ preFormContent?: JSX.Element;
152
+ preFormWarning?: string;
153
+ preFormSuccess?: string;
154
+ postFormContent?: JSX.Element;
155
+ successMessage?: string | null;
156
+ onFormSuccess?: (data: any) => void;
157
+ onFormError?: (response: any) => void;
158
+ processFormData?: (data: any) => any;
159
+ table?: TableState;
160
+ modelType?: ModelType;
161
+ follow?: boolean;
162
+ actions?: ApiFormAction[];
163
+ timeout?: number;
164
+ }
165
+
166
+ /**
167
+ * @param title : The title to display in the modal header
168
+ * @param cancelText : Optional custom text to display on the cancel button (default: Cancel)
169
+ * @param cancelColor : Optional custom color for the cancel button (default: blue)
170
+ * @param onClose : A callback function to call when the modal is closed.
171
+ * @param onOpen : A callback function to call when the modal is opened.
172
+ */
173
+ export interface ApiFormModalProps extends ApiFormProps {
174
+ title: string;
175
+ cancelText?: string;
176
+ cancelColor?: string;
177
+ onClose?: () => void;
178
+ onOpen?: () => void;
179
+ closeOnClickOutside?: boolean;
180
+ size?: UiSizeType;
181
+ }
182
+
183
+ export interface BulkEditApiFormModalProps extends ApiFormModalProps {
184
+ items: number[];
185
+ }
@@ -0,0 +1,17 @@
1
+ import type { UiSizeType } from './Core';
2
+
3
+ export interface UseModalProps {
4
+ title: string;
5
+ children: React.ReactElement;
6
+ size?: UiSizeType;
7
+ onOpen?: () => void;
8
+ onClose?: () => void;
9
+ closeOnClickOutside?: boolean;
10
+ }
11
+
12
+ export interface UseModalReturn {
13
+ open: () => void;
14
+ close: () => void;
15
+ toggle: () => void;
16
+ modal: React.ReactElement;
17
+ }
@@ -0,0 +1,68 @@
1
+ import type { MantineColorScheme, MantineTheme } from '@mantine/core';
2
+ import type { QueryClient } from '@tanstack/react-query';
3
+ import type { AxiosInstance } from 'axios';
4
+ import type { NavigateFunction } from 'react-router-dom';
5
+ import type { ModelType } from '../enums/ModelType';
6
+ import type { ApiFormModalProps, BulkEditApiFormModalProps } from './Forms';
7
+ import type { UseModalReturn } from './Modals';
8
+ import type { SettingsStateProps } from './Settings';
9
+ import type { UserStateProps } from './User';
10
+
11
+ export interface PluginProps {
12
+ name: string;
13
+ slug: string;
14
+ version: null | string;
15
+ }
16
+
17
+ export type InvenTreeFormsContext = {
18
+ bulkEdit: (props: BulkEditApiFormModalProps) => UseModalReturn;
19
+ create: (props: ApiFormModalProps) => UseModalReturn;
20
+ delete: (props: ApiFormModalProps) => UseModalReturn;
21
+ edit: (props: ApiFormModalProps) => UseModalReturn;
22
+ };
23
+
24
+ /**
25
+ * A set of properties which are passed to a plugin,
26
+ * for rendering an element in the user interface.
27
+ *
28
+ * @param version - The version of the running InvenTree software stack
29
+ * @param api - The Axios API instance (see ../states/ApiState.tsx)
30
+ * @param user - The current user instance (see ../states/UserState.tsx)
31
+ * @param userSettings - The current user settings (see ../states/SettingsState.tsx)
32
+ * @param globalSettings - The global settings (see ../states/SettingsState.tsx)
33
+ * @param navigate - The navigation function (see react-router-dom)
34
+ * @param theme - The current Mantine theme
35
+ * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark')
36
+ * @param host - The current host URL
37
+ * @param locale - The current locale string (e.g. 'en' / 'de')
38
+ * @param model - The model type associated with the rendered component (if applicable)
39
+ * @param id - The ID (primary key) of the model instance for the plugin (if applicable)
40
+ * @param instance - The model instance data (if available)
41
+ * @param context - Any additional context data which may be passed to the plugin
42
+ */
43
+ export type InvenTreePluginContext = {
44
+ version: string;
45
+ api: AxiosInstance;
46
+ queryClient: QueryClient;
47
+ user: UserStateProps;
48
+ userSettings: SettingsStateProps;
49
+ globalSettings: SettingsStateProps;
50
+ host: string;
51
+ locale: string;
52
+ navigate: NavigateFunction;
53
+ theme: MantineTheme;
54
+ forms: InvenTreeFormsContext;
55
+ colorScheme: MantineColorScheme;
56
+ model?: ModelType | string;
57
+ id?: string | number | null;
58
+ instance?: any;
59
+ context?: any;
60
+ };
61
+
62
+ /*
63
+ * The version of the InvenTree plugin context interface.
64
+ * This number should be incremented if the interface changes.
65
+ */
66
+
67
+ // @ts-ignore
68
+ export const INVENTREE_PLUGIN_VERSION: string = __INVENTREE_LIB_VERSION__;
@@ -0,0 +1,8 @@
1
+ export interface Host {
2
+ host: string;
3
+ name: string;
4
+ }
5
+
6
+ export interface HostList {
7
+ [key: string]: Host;
8
+ }
@@ -0,0 +1,55 @@
1
+ import type { ApiEndpoints } from '../enums/ApiEndpoints';
2
+ import type { PathParams } from './Core';
3
+
4
+ export enum SettingTyp {
5
+ InvenTree = 'inventree',
6
+ Plugin = 'plugin',
7
+ User = 'user',
8
+ Notification = 'notification'
9
+ }
10
+
11
+ export enum SettingType {
12
+ Boolean = 'boolean',
13
+ Integer = 'integer',
14
+ String = 'string',
15
+ Choice = 'choice',
16
+ Model = 'related field'
17
+ }
18
+
19
+ // Type interface defining a single 'setting' object
20
+ export interface Setting {
21
+ pk: number;
22
+ key: string;
23
+ value: string;
24
+ name: string;
25
+ description: string;
26
+ type: SettingType;
27
+ units: string;
28
+ choices: SettingChoice[];
29
+ model_name: string | null;
30
+ model_filters: Record<string, any> | null;
31
+ api_url: string | null;
32
+ typ: SettingTyp;
33
+ plugin?: string;
34
+ method?: string;
35
+ required?: boolean;
36
+ }
37
+
38
+ export interface SettingChoice {
39
+ value: string;
40
+ display_name: string;
41
+ }
42
+
43
+ export type SettingsLookup = {
44
+ [key: string]: string;
45
+ };
46
+
47
+ export interface SettingsStateProps {
48
+ settings: Setting[];
49
+ lookup: SettingsLookup;
50
+ fetchSettings: () => Promise<boolean>;
51
+ endpoint: ApiEndpoints;
52
+ pathParams?: PathParams;
53
+ getSetting: (key: string, default_value?: string) => string; // Return a raw setting value
54
+ isSet: (key: string, default_value?: boolean) => boolean; // Check a "boolean" setting
55
+ }
@@ -0,0 +1,69 @@
1
+ import type { SetURLSearchParams } from 'react-router-dom';
2
+ import type { FilterSetState } from './Filters';
3
+
4
+ /*
5
+ * Type definition for representing the state of a table:
6
+ *
7
+ * tableKey: A unique key for the table. When this key changes, the table will be refreshed.
8
+ * refreshTable: A callback function to externally refresh the table.
9
+ * isLoading: A boolean flag to indicate if the table is currently loading data
10
+ * setIsLoading: A function to set the isLoading flag
11
+ * filterSet: A group of active filters
12
+ * queryFilters: A map of query filters (e.g. ?active=true&overdue=false) passed in the URL
13
+ * setQueryFilters: A function to set the query filters
14
+ * clearQueryFilters: A function to clear all query filters
15
+ * expandedRecords: An array of expanded records (rows) in the table
16
+ * setExpandedRecords: A function to set the expanded records
17
+ * isRowExpanded: A function to determine if a record is expanded
18
+ * selectedRecords: An array of selected records (rows) in the table
19
+ * selectedIds: An array of primary key values for selected records
20
+ * hasSelectedRecords: A boolean flag to indicate if any records are selected
21
+ * setSelectedRecords: A function to set the selected records
22
+ * clearSelectedRecords: A function to clear all selected records
23
+ * hiddenColumns: An array of hidden column names
24
+ * setHiddenColumns: A function to set the hidden columns
25
+ * searchTerm: The current search term for the table
26
+ * setSearchTerm: A function to set the search term
27
+ * recordCount: The total number of records in the table
28
+ * setRecordCount: A function to set the record count
29
+ * page: The current page number
30
+ * setPage: A function to set the current page number
31
+ * pageSize: The number of records per page
32
+ * setPageSize: A function to set the number of records per page
33
+ * records: An array of records (rows) in the table
34
+ * setRecords: A function to set the records
35
+ * updateRecord: A function to update a single record in the table
36
+ * idAccessor: The name of the primary key field in the records (default = 'pk')
37
+ */
38
+ export type TableState = {
39
+ tableKey: string;
40
+ refreshTable: () => void;
41
+ isLoading: boolean;
42
+ setIsLoading: (value: boolean) => void;
43
+ filterSet: FilterSetState;
44
+ queryFilters: URLSearchParams;
45
+ setQueryFilters: SetURLSearchParams;
46
+ clearQueryFilters: () => void;
47
+ expandedRecords: any[];
48
+ setExpandedRecords: (records: any[]) => void;
49
+ isRowExpanded: (pk: number) => boolean;
50
+ selectedRecords: any[];
51
+ selectedIds: any[];
52
+ hasSelectedRecords: boolean;
53
+ setSelectedRecords: (records: any[]) => void;
54
+ clearSelectedRecords: () => void;
55
+ hiddenColumns: string[];
56
+ setHiddenColumns: (columns: string[]) => void;
57
+ searchTerm: string;
58
+ setSearchTerm: (term: string) => void;
59
+ recordCount: number;
60
+ setRecordCount: (count: number) => void;
61
+ page: number;
62
+ setPage: (page: number) => void;
63
+ pageSize: number;
64
+ setPageSize: (pageSize: number) => void;
65
+ records: any[];
66
+ setRecords: (records: any[]) => void;
67
+ updateRecord: (record: any) => void;
68
+ idAccessor?: string;
69
+ };
@@ -0,0 +1,62 @@
1
+ import type { ModelType } from '../enums/ModelType';
2
+ import type { UserPermissions, UserRoles } from '../enums/Roles';
3
+
4
+ export interface UserProfile {
5
+ language: string;
6
+ theme: any;
7
+ widgets: any;
8
+ displayname: string | null;
9
+ position: string | null;
10
+ status: string | null;
11
+ location: string | null;
12
+ active: boolean;
13
+ contact: string | null;
14
+ type: string;
15
+ organisation: string | null;
16
+ primary_group: number | null;
17
+ }
18
+
19
+ // Type interface fully defining the current user
20
+ export interface UserProps {
21
+ pk: number;
22
+ username: string;
23
+ first_name: string;
24
+ last_name: string;
25
+ email: string;
26
+ is_staff?: boolean;
27
+ is_superuser?: boolean;
28
+ roles?: Record<string, string[]>;
29
+ permissions?: Record<string, string[]>;
30
+ groups: any[] | null;
31
+ profile: UserProfile;
32
+ }
33
+
34
+ export interface UserStateProps {
35
+ user: UserProps | undefined;
36
+ is_authed: boolean;
37
+ userId: () => number | undefined;
38
+ username: () => string;
39
+ setAuthenticated: (authed?: boolean) => void;
40
+ fetchUserToken: () => Promise<void>;
41
+ setUser: (newUser: UserProps | undefined) => void;
42
+ getUser: () => UserProps | undefined;
43
+ fetchUserState: () => Promise<void>;
44
+ clearUserState: () => void;
45
+ checkUserRole: (role: UserRoles, permission: UserPermissions) => boolean;
46
+ hasDeleteRole: (role: UserRoles) => boolean;
47
+ hasChangeRole: (role: UserRoles) => boolean;
48
+ hasAddRole: (role: UserRoles) => boolean;
49
+ hasViewRole: (role: UserRoles) => boolean;
50
+ checkUserPermission: (
51
+ model: ModelType,
52
+ permission: UserPermissions
53
+ ) => boolean;
54
+ hasDeletePermission: (model: ModelType) => boolean;
55
+ hasChangePermission: (model: ModelType) => boolean;
56
+ hasAddPermission: (model: ModelType) => boolean;
57
+ hasViewPermission: (model: ModelType) => boolean;
58
+ isAuthed: () => boolean;
59
+ isLoggedIn: () => boolean;
60
+ isStaff: () => boolean;
61
+ isSuperuser: () => boolean;
62
+ }
package/netlify.toml ADDED
@@ -0,0 +1,22 @@
1
+ # Netlify configuration file
2
+ # https://www.netlify.com/docs/netlify-toml-reference/
3
+
4
+ [build]
5
+ command = "yarn run extract && yarn run compile && yarn run build --outDir dist"
6
+ publish = "dist"
7
+
8
+ [build.environment]
9
+ VITE_DEMO = "true"
10
+
11
+ # Send requests to subpath
12
+
13
+ [[redirects]]
14
+ from = "/*"
15
+ to = "/index.html"
16
+ status = 200
17
+
18
+ [[plugins]]
19
+ package = "@netlify/plugin-lighthouse"
20
+
21
+ [plugins.inputs.settings]
22
+ preset = "desktop" # Optionally run Lighthouse using a desktop configuration
package/package.json ADDED
@@ -0,0 +1,125 @@
1
+ {
2
+ "name": "@inventreedb/ui",
3
+ "description": "UI components for the InvenTree project",
4
+ "version": "0.0.1",
5
+ "private": false,
6
+ "type": "module",
7
+ "license": "MIT",
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": "./dist/index.js"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/inventree/inventree"
16
+ },
17
+ "author": {
18
+ "name": "InvenTree Developers",
19
+ "email": "support@inventree.org",
20
+ "url": "https://inventree.org",
21
+ "org": "InvenTree"
22
+ },
23
+ "scripts": {
24
+ "dev": "vite",
25
+ "build": "tsc && vite build --emptyOutDir",
26
+ "lib": "tsc --p ./tsconfig.lib.json && vite --config vite.lib.config.ts build",
27
+ "preview": "vite preview",
28
+ "extract": "lingui extract",
29
+ "compile": "lingui compile --typescript"
30
+ },
31
+ "dependencies": {
32
+ "@codemirror/autocomplete": "6.18.4",
33
+ "@codemirror/lang-liquid": "6.2.2",
34
+ "@codemirror/language": "6.10.8",
35
+ "@codemirror/lint": "6.8.4",
36
+ "@codemirror/search": "6.5.8",
37
+ "@codemirror/state": "6.5.1",
38
+ "@codemirror/theme-one-dark": "6.1.2",
39
+ "@codemirror/view": "6.36.2",
40
+ "@emotion/react": "^11.13.3",
41
+ "@fortawesome/fontawesome-svg-core": "^6.6.0",
42
+ "@fortawesome/free-regular-svg-icons": "^6.6.0",
43
+ "@fortawesome/free-solid-svg-icons": "^6.6.0",
44
+ "@fortawesome/react-fontawesome": "^0.2.2",
45
+ "@fullcalendar/core": "^6.1.15",
46
+ "@fullcalendar/daygrid": "^6.1.15",
47
+ "@fullcalendar/interaction": "^6.1.15",
48
+ "@fullcalendar/react": "^6.1.15",
49
+ "@lingui/core": "^5.3.0",
50
+ "@lingui/react": "^5.3.0",
51
+ "@mantine/carousel": "^7.16.0",
52
+ "@mantine/charts": "^7.16.0",
53
+ "@mantine/core": "^7.16.0",
54
+ "@mantine/dates": "^7.16.0",
55
+ "@mantine/dropzone": "^7.16.0",
56
+ "@mantine/form": "^7.16.0",
57
+ "@mantine/hooks": "^7.16.0",
58
+ "@mantine/modals": "^7.16.0",
59
+ "@mantine/notifications": "^7.16.0",
60
+ "@mantine/spotlight": "^7.16.0",
61
+ "@mantine/vanilla-extract": "^7.16.0",
62
+ "@messageformat/date-skeleton": "^1.1.0",
63
+ "@sentry/react": "^8.43.0",
64
+ "@tabler/icons-react": "^3.17.0",
65
+ "@tanstack/react-query": "^5.56.2",
66
+ "@uiw/codemirror-theme-vscode": "4.23.7",
67
+ "@uiw/react-codemirror": "4.23.7",
68
+ "@uiw/react-split": "^5.9.3",
69
+ "@vanilla-extract/css": "^1.17.1",
70
+ "axios": "^1.8.4",
71
+ "clsx": "^2.1.1",
72
+ "codemirror": "6.0.1",
73
+ "dayjs": "^1.11.13",
74
+ "dompurify": "^3.2.4",
75
+ "easymde": "^2.18.0",
76
+ "embla-carousel-react": "^8.5.2",
77
+ "fuse.js": "^7.0.0",
78
+ "html5-qrcode": "^2.3.8",
79
+ "mantine-contextmenu": "^7.15.3",
80
+ "mantine-datatable": "^7.15.1",
81
+ "qrcode": "^1.5.4",
82
+ "react": "^18.3.1",
83
+ "react-dom": "^18.3.1",
84
+ "react-grid-layout": "1.4.4",
85
+ "react-hook-form": "^7.54.2",
86
+ "react-is": "^18.3.1",
87
+ "react-router-dom": "^6.26.2",
88
+ "react-select": "^5.9.0",
89
+ "react-simplemde-editor": "^5.2.0",
90
+ "react-window": "1.8.10",
91
+ "recharts": "^2.15.0",
92
+ "styled-components": "^6.1.14",
93
+ "zustand": "^4.5.5"
94
+ },
95
+ "devDependencies": {
96
+ "@babel/core": "^7.26.10",
97
+ "@babel/preset-react": "^7.26.3",
98
+ "@babel/preset-typescript": "^7.27.0",
99
+ "@babel/runtime": "^7.27.0",
100
+ "@codecov/vite-plugin": "^1.9.0",
101
+ "@lingui/babel-plugin-lingui-macro": "^5.3.0",
102
+ "@lingui/cli": "^5.3.0",
103
+ "@lingui/macro": "^5.3.0",
104
+ "@playwright/test": "^1.49.1",
105
+ "@types/node": "^22.13.14",
106
+ "@types/qrcode": "^1.5.5",
107
+ "@types/react": "^18.3.8",
108
+ "@types/react-dom": "^18.3.0",
109
+ "@types/react-grid-layout": "^1.3.5",
110
+ "@types/react-router-dom": "^5.3.3",
111
+ "@types/react-window": "^1.8.8",
112
+ "@vanilla-extract/vite-plugin": "^5.0.1",
113
+ "@vitejs/plugin-react": "^4.3.4",
114
+ "babel-plugin-macros": "^3.1.0",
115
+ "nyc": "^17.1.0",
116
+ "path": "^0.12.7",
117
+ "rollup": "^4.0.0",
118
+ "rollup-plugin-license": "^3.5.3",
119
+ "typescript": "^5.8.2",
120
+ "vite": "^6.2.4",
121
+ "vite-plugin-babel-macros": "^1.0.6",
122
+ "vite-plugin-dts": "^4.5.3",
123
+ "vite-plugin-istanbul": "^6.0.2"
124
+ }
125
+ }
@@ -0,0 +1,45 @@
1
+ import { type FullConfig, chromium } from '@playwright/test';
2
+
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { doCachedLogin } from '../tests/login';
6
+
7
+ async function globalSetup(config: FullConfig) {
8
+ const authDir = path.resolve('./playwright/auth');
9
+
10
+ if (fs.existsSync(authDir)) {
11
+ // Clear out the cached authentication states
12
+ fs.rm(path.resolve('./playwright/auth'), { recursive: true }, (err) => {
13
+ if (err) {
14
+ console.error('Failed to clear out cached authentication states:', err);
15
+ } else {
16
+ console.log('Removed cached authentication states');
17
+ }
18
+ });
19
+ }
20
+
21
+ // Perform login for each user
22
+ const browser = await chromium.launch();
23
+
24
+ await doCachedLogin(browser, {
25
+ username: 'admin',
26
+ password: 'inventree'
27
+ });
28
+
29
+ await doCachedLogin(browser, {
30
+ username: 'allaccess',
31
+ password: 'nolimits'
32
+ });
33
+
34
+ await doCachedLogin(browser, {
35
+ username: 'reader',
36
+ password: 'readonly'
37
+ });
38
+
39
+ await doCachedLogin(browser, {
40
+ username: 'steven',
41
+ password: 'wizardstaff'
42
+ });
43
+ }
44
+
45
+ export default globalSetup;