@fdm-monster/client-next 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 (205) hide show
  1. package/.all-contributorsrc +57 -0
  2. package/.browserslistrc +4 -0
  3. package/.editorconfig +5 -0
  4. package/.env +1 -0
  5. package/.eslintrc-auto-import.json +73 -0
  6. package/.eslintrc.js +126 -0
  7. package/.github/FUNDING.yml +3 -0
  8. package/.github/workflows/release-client.yml +94 -0
  9. package/.github/workflows/vue-publish.yml +26 -0
  10. package/.prettierignore +15 -0
  11. package/.prettierrc.cjs +7 -0
  12. package/.whitesource +12 -0
  13. package/.yarn/releases/yarn-4.5.1.cjs +934 -0
  14. package/.yarnrc.yml +3 -0
  15. package/CODE_OF_CONDUCT.md +46 -0
  16. package/README.md +93 -0
  17. package/RELEASE_NOTES.MD +11 -0
  18. package/index.html +16 -0
  19. package/package.default.json +42 -0
  20. package/package.json +26 -0
  21. package/public/favicon.ico +0 -0
  22. package/public/img/DavidZwart.jpg +0 -0
  23. package/public/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
  24. package/public/img/OIG.jpg +0 -0
  25. package/public/img/icons/android-chrome-192x192.png +0 -0
  26. package/public/img/icons/android-chrome-256x256.png +0 -0
  27. package/public/img/icons/android-chrome-384x384.png +0 -0
  28. package/public/img/icons/android-chrome-512x512.png +0 -0
  29. package/public/img/icons/favicon.svg +1 -0
  30. package/public/img/logo.png +0 -0
  31. package/public/img/logo.svg +1 -0
  32. package/public/img/manifest.webmanifest +33 -0
  33. package/public/img/octoprint-tentacle.svg +144 -0
  34. package/public/img/thumbail_unknown.jpg +0 -0
  35. package/public/img/vbanner.jpg +0 -0
  36. package/public/index.html +17 -0
  37. package/public/robots.txt +2 -0
  38. package/renovate.json +30 -0
  39. package/src/App.vue +60 -0
  40. package/src/AppLoader.vue +383 -0
  41. package/src/assets/adjectives.json +1468 -0
  42. package/src/assets/android-chrome-192x192.png +0 -0
  43. package/src/assets/logo.png +0 -0
  44. package/src/assets/logo.svg +6 -0
  45. package/src/assets/nouns.json +4309 -0
  46. package/src/auto-imports.d.ts +139 -0
  47. package/src/backend/app.service.ts +39 -0
  48. package/src/backend/auth.service.ts +56 -0
  49. package/src/backend/base.service.ts +57 -0
  50. package/src/backend/batch.service.ts +37 -0
  51. package/src/backend/camera-stream.service.ts +33 -0
  52. package/src/backend/custom-gcode.service.ts +11 -0
  53. package/src/backend/dto/octoprint-settings.dto.ts +168 -0
  54. package/src/backend/first-time-setup.service.ts +17 -0
  55. package/src/backend/floor.service.ts +84 -0
  56. package/src/backend/index.ts +4 -0
  57. package/src/backend/print-completions.service.ts +11 -0
  58. package/src/backend/printer-file.service.ts +91 -0
  59. package/src/backend/printer-group.service.ts +62 -0
  60. package/src/backend/printer-job.service.ts +20 -0
  61. package/src/backend/printer-settings.service.ts +28 -0
  62. package/src/backend/printers.service.ts +136 -0
  63. package/src/backend/server-private.service.ts +55 -0
  64. package/src/backend/server.api.ts +132 -0
  65. package/src/backend/settings.service.ts +85 -0
  66. package/src/backend/user.service.ts +51 -0
  67. package/src/components/AboutHelp/AboutView.vue +164 -0
  68. package/src/components/CameraGrid/CameraGridView.vue +111 -0
  69. package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +354 -0
  70. package/src/components/Generic/Actions/PrinterConnectionAction.vue +56 -0
  71. package/src/components/Generic/Actions/PrinterCreateAction.vue +22 -0
  72. package/src/components/Generic/Actions/PrinterDeleteAction.vue +29 -0
  73. package/src/components/Generic/Actions/PrinterQuickStopAction.vue +35 -0
  74. package/src/components/Generic/Actions/PrinterSettingsAction.vue +35 -0
  75. package/src/components/Generic/Actions/PrinterUrlAction.vue +24 -0
  76. package/src/components/Generic/Actions/RefreshFilesAction.vue +50 -0
  77. package/src/components/Generic/Actions/SyncPrinterNameAction.vue +36 -0
  78. package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +131 -0
  79. package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +141 -0
  80. package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +303 -0
  81. package/src/components/Generic/Dialogs/BaseDialog.vue +81 -0
  82. package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +109 -0
  83. package/src/components/Generic/Dialogs/BatchReprintDialog.vue +190 -0
  84. package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +37 -0
  85. package/src/components/Generic/Dialogs/PrinterControlDialog.vue +202 -0
  86. package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +130 -0
  87. package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +186 -0
  88. package/src/components/Generic/Dialogs/dialog.constants.ts +19 -0
  89. package/src/components/Generic/FileExplorerSideNav.vue +734 -0
  90. package/src/components/Generic/Loaders/GridLoader.vue +68 -0
  91. package/src/components/Generic/NavigationDrawer.vue +69 -0
  92. package/src/components/Generic/PrintJobsMenu.vue +148 -0
  93. package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +64 -0
  94. package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +63 -0
  95. package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +158 -0
  96. package/src/components/Generic/Vuetify/TooltipButton.vue +47 -0
  97. package/src/components/HelpOverlay/HelpOverlay.vue +57 -0
  98. package/src/components/Login/LoginForm.vue +206 -0
  99. package/src/components/Login/LoginView.spec.ts +64 -0
  100. package/src/components/Login/LoginView.vue +65 -0
  101. package/src/components/Login/Logo.vue +13 -0
  102. package/src/components/Login/PermissionDenied.vue +109 -0
  103. package/src/components/Login/RegistrationForm.vue +207 -0
  104. package/src/components/Login/RegistrationView.vue +17 -0
  105. package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +1051 -0
  106. package/src/components/NotFound/NotFoundView.vue +39 -0
  107. package/src/components/PrintStatistics/PrintStatistics.vue +168 -0
  108. package/src/components/PrintStatistics/PrintStatisticsView.vue +15 -0
  109. package/src/components/PrinterGrid/HomeToolbar.vue +90 -0
  110. package/src/components/PrinterGrid/PrinterGrid.vue +164 -0
  111. package/src/components/PrinterGrid/PrinterGridTile.vue +438 -0
  112. package/src/components/PrinterGrid/PrinterGridView.vue +210 -0
  113. package/src/components/PrinterList/FileControlList.vue +40 -0
  114. package/src/components/PrinterList/PrinterDetails.vue +91 -0
  115. package/src/components/PrinterList/PrintersView.vue +492 -0
  116. package/src/components/Settings/AccountSettings.vue +163 -0
  117. package/src/components/Settings/DiagnosticsSettings.vue +137 -0
  118. package/src/components/Settings/EmergencyCommands.vue +265 -0
  119. package/src/components/Settings/FloorSettings.vue +276 -0
  120. package/src/components/Settings/GridSettings.vue +127 -0
  121. package/src/components/Settings/OctoPrintSettings.vue +188 -0
  122. package/src/components/Settings/ServerProtectionSettings.vue +370 -0
  123. package/src/components/Settings/SettingsView.vue +73 -0
  124. package/src/components/Settings/SoftwareUpgradeSettings.vue +297 -0
  125. package/src/components/Settings/UserManagementSettings.vue +257 -0
  126. package/src/components/TopBar.vue +147 -0
  127. package/src/components.d.ts +70 -0
  128. package/src/directives/file-upload.directive.ts +117 -0
  129. package/src/directives/printer-drop-position.directive.ts +92 -0
  130. package/src/env.d.ts +6 -0
  131. package/src/main.ts +76 -0
  132. package/src/models/batch/reprint.dto.ts +79 -0
  133. package/src/models/batch.model.ts +11 -0
  134. package/src/models/camera-streams/camera-stream.ts +19 -0
  135. package/src/models/floors/floor.model.ts +30 -0
  136. package/src/models/octoprint/connection-options.model.ts +8 -0
  137. package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +57 -0
  138. package/src/models/print-completions/print-completions.model.ts +49 -0
  139. package/src/models/printers/crud/create-printer.model.ts +26 -0
  140. package/src/models/printers/file-upload-commands.model.ts +4 -0
  141. package/src/models/printers/gcode/gcode-analysis.model.ts +30 -0
  142. package/src/models/printers/printer-current-job.model.ts +90 -0
  143. package/src/models/printers/printer-file.model.ts +48 -0
  144. package/src/models/printers/printer.model.ts +18 -0
  145. package/src/models/server/client-releases.model.ts +27 -0
  146. package/src/models/server/export-yaml.model.ts +11 -0
  147. package/src/models/server/features.model.ts +37 -0
  148. package/src/models/server/github-rate-limit.model.ts +21 -0
  149. package/src/models/server/version.model.ts +14 -0
  150. package/src/models/settings/printer-file-clean-settings.model.ts +5 -0
  151. package/src/models/settings/server-settings.dto.ts +19 -0
  152. package/src/models/settings/settings.model.ts +57 -0
  153. package/src/models/socketio-messages/socketio-message.model.ts +53 -0
  154. package/src/models/uploads/queued-upload.model.ts +12 -0
  155. package/src/models/user.model.ts +15 -0
  156. package/src/plugins/README.md +3 -0
  157. package/src/plugins/index.ts +17 -0
  158. package/src/plugins/vuetify.ts +53 -0
  159. package/src/router/index.ts +192 -0
  160. package/src/router/route-names.ts +14 -0
  161. package/src/router/utils.ts +23 -0
  162. package/src/shared/alert.events.ts +14 -0
  163. package/src/shared/app.constants.ts +23 -0
  164. package/src/shared/auth.constants.ts +34 -0
  165. package/src/shared/dialog.composable.ts +41 -0
  166. package/src/shared/drag.constants.ts +19 -0
  167. package/src/shared/experimental.constants.ts +1 -0
  168. package/src/shared/http-client.ts +162 -0
  169. package/src/shared/noun-adjectives.data.ts +24 -0
  170. package/src/shared/printer-grid.constants.ts +5 -0
  171. package/src/shared/printer-state.constants.ts +194 -0
  172. package/src/shared/snackbar.composable.ts +66 -0
  173. package/src/shared/socketio.service.ts +104 -0
  174. package/src/store/auth.store.ts +255 -0
  175. package/src/store/connection.store.ts +66 -0
  176. package/src/store/dialog.store.ts +114 -0
  177. package/src/store/features.store.ts +57 -0
  178. package/src/store/floor.store.ts +173 -0
  179. package/src/store/grid.store.ts +10 -0
  180. package/src/store/index.ts +4 -0
  181. package/src/store/printer-state.store.ts +246 -0
  182. package/src/store/printer.store.ts +236 -0
  183. package/src/store/profile.store.ts +25 -0
  184. package/src/store/settings.store.ts +64 -0
  185. package/src/store/test-printer.store.ts +70 -0
  186. package/src/store/uploads.store.ts +75 -0
  187. package/src/styles/README.md +3 -0
  188. package/src/styles/settings.scss +10 -0
  189. package/src/types/global.d.ts +15 -0
  190. package/src/utils/array.utils.ts +15 -0
  191. package/src/utils/date.utils.ts +5 -0
  192. package/src/utils/download-file.util.ts +25 -0
  193. package/src/utils/error.utils.ts +3 -0
  194. package/src/utils/file-size.util.ts +11 -0
  195. package/src/utils/id.type.ts +1 -0
  196. package/src/utils/sentry.util.ts +8 -0
  197. package/src/utils/test.util.ts +30 -0
  198. package/src/utils/time.utils.ts +2 -0
  199. package/src/utils/uploads-state.utils.ts +58 -0
  200. package/src/utils/validation.utils.ts +14 -0
  201. package/src/vite-env.d.ts +7 -0
  202. package/test/setup-axios-mock.ts +15 -0
  203. package/tsconfig.json +47 -0
  204. package/tsconfig.node.json +9 -0
  205. package/vite.config.mts +106 -0
package/.yarnrc.yml ADDED
@@ -0,0 +1,3 @@
1
+ nodeLinker: node-modules
2
+
3
+ yarnPath: .yarn/releases/yarn-4.5.1.cjs
@@ -0,0 +1,46 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6
+
7
+ ## Our Standards
8
+
9
+ Examples of behavior that contributes to creating a positive environment include:
10
+
11
+ * Using welcoming and inclusive language
12
+ * Being respectful of differing viewpoints and experiences
13
+ * Gracefully accepting constructive criticism
14
+ * Focusing on what is best for the community
15
+ * Showing empathy towards other community members
16
+
17
+ Examples of unacceptable behavior by participants include:
18
+
19
+ * The use of sexualized language or imagery and unwelcome sexual attention or advances
20
+ * Trolling, insulting/derogatory comments, and personal or political attacks
21
+ * Public or private harassment
22
+ * Publishing others' private information, such as a physical or electronic address, without explicit permission
23
+ * Other conduct which could reasonably be considered inappropriate in a professional setting
24
+
25
+ ## Our Responsibilities
26
+
27
+ Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28
+
29
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30
+
31
+ ## Scope
32
+
33
+ This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34
+
35
+ ## Enforcement
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [davidzwa@gmail.com](mailto:davidzwa@gmail.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38
+
39
+ Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40
+
41
+ ## Attribution
42
+
43
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version]
44
+
45
+ [homepage]: https://contributor-covenant.org
46
+ [version]: https://contributor-covenant.org/version/1/4/
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # Vuetify (Default)
2
+
3
+ This is the official scaffolding tool for Vuetify, designed to give you a head start in building your new Vuetify application. It sets up a base template with all the necessary configurations and standard directory structure, enabling you to begin development without the hassle of setting up the project from scratch.
4
+
5
+ ## Notes to self
6
+
7
+ - Example to fix alias includes https://github.com/mutoe/vue3-realworld-example-app/blob/master/tsconfig.json
8
+ ```json
9
+ "include": [
10
+ "src/**/*.ts",
11
+ "src/**/*.d.ts",
12
+ "src/**/*.tsx",
13
+ "src/**/*.vue"
14
+ ],
15
+ ```
16
+
17
+ ## ❗️ Important Links
18
+
19
+ - 📄 [Docs](https://vuetifyjs.com/)
20
+ - 🚨 [Issues](https://issues.vuetifyjs.com/)
21
+ - 🏬 [Store](https://store.vuetifyjs.com/)
22
+ - 🎮 [Playground](https://play.vuetifyjs.com/)
23
+ - 💬 [Discord](https://community.vuetifyjs.com)
24
+
25
+ ## 💿 Install
26
+
27
+ Set up your project using your preferred package manager. Use the corresponding command to install the dependencies:
28
+
29
+ | Package Manager | Command |
30
+ |---------------------------------------------------------------|----------------|
31
+ | [yarn](https://yarnpkg.com/getting-started) | `yarn install` |
32
+ | [npm](https://docs.npmjs.com/cli/v7/commands/npm-install) | `npm install` |
33
+ | [pnpm](https://pnpm.io/installation) | `pnpm install` |
34
+ | [bun](https://bun.sh/#getting-started) | `bun install` |
35
+
36
+ After completing the installation, your environment is ready for Vuetify development.
37
+
38
+ ## ✨ Features
39
+
40
+ - 🖼️ **Optimized Front-End Stack**: Leverage the latest Vue 3 and Vuetify 3 for a modern, reactive UI development experience. [Vue 3](https://v3.vuejs.org/) | [Vuetify 3](https://vuetifyjs.com/en/)
41
+ - 🗃️ **State Management**: Integrated with [Pinia](https://pinia.vuejs.org/), the intuitive, modular state management solution for Vue.
42
+ - 🚦 **Routing and Layouts**: Utilizes Vue Router for SPA navigation and vite-plugin-vue-layouts for organizing Vue file layouts. [Vue Router](https://router.vuejs.org/) | [vite-plugin-vue-layouts](https://github.com/JohnCampionJr/vite-plugin-vue-layouts)
43
+ - 💻 **Enhanced Development Experience**: Benefit from TypeScript's static type checking and the ESLint plugin suite for Vue, ensuring code quality and consistency. [TypeScript](https://www.typescriptlang.org/) | [ESLint Plugin Vue](https://eslint.vuejs.org/)
44
+ - ⚡ **Next-Gen Tooling**: Powered by Vite, experience fast cold starts and instant HMR (Hot Module Replacement). [Vite](https://vitejs.dev/)
45
+ - 🧩 **Automated Component Importing**: Streamline your workflow with unplugin-vue-components, automatically importing components as you use them. [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components)
46
+ - 🛠️ **Strongly-Typed Vue**: Use vue-tsc for type-checking your Vue components, and enjoy a robust development experience. [vue-tsc](https://github.com/johnsoncodehk/volar/tree/master/packages/vue-tsc)
47
+
48
+ These features are curated to provide a seamless development experience from setup to deployment, ensuring that your Vuetify application is both powerful and maintainable.
49
+
50
+ ## 💡 Usage
51
+
52
+ This section covers how to start the development server and build your project for production.
53
+
54
+ ### Starting the Development Server
55
+
56
+ To start the development server with hot-reload, run the following command. The server will be accessible at [http://localhost:3000](http://localhost:3000):
57
+
58
+ ```bash
59
+ yarn dev
60
+ ```
61
+
62
+ (Repeat for npm, pnpm, and bun with respective commands.)
63
+
64
+ > Add NODE_OPTIONS='--no-warnings' to suppress the JSON import warnings that happen as part of the Vuetify import mapping. If you are on Node [v21.3.0](https://nodejs.org/en/blog/release/v21.3.0) or higher, you can change this to NODE_OPTIONS='--disable-warning=5401'. If you don't mind the warning, you can remove this from your package.json dev script.
65
+
66
+ ### Building for Production
67
+
68
+ To build your project for production, use:
69
+
70
+ ```bash
71
+ yarn build
72
+ ```
73
+
74
+ (Repeat for npm, pnpm, and bun with respective commands.)
75
+
76
+ Once the build process is completed, your application will be ready for deployment in a production environment.
77
+
78
+ ## 💪 Support Vuetify Development
79
+
80
+ This project is built with [Vuetify](https://vuetifyjs.com/en/), a UI Library with a comprehensive collection of Vue components. Vuetify is an MIT licensed Open Source project that has been made possible due to the generous contributions by our [sponsors and backers](https://vuetifyjs.com/introduction/sponsors-and-backers/). If you are interested in supporting this project, please consider:
81
+
82
+ - [Requesting Enterprise Support](https://support.vuetifyjs.com/)
83
+ - [Sponsoring John on Github](https://github.com/users/johnleider/sponsorship)
84
+ - [Sponsoring Kael on Github](https://github.com/users/kaelwd/sponsorship)
85
+ - [Supporting the team on Open Collective](https://opencollective.com/vuetify)
86
+ - [Becoming a sponsor on Patreon](https://www.patreon.com/vuetify)
87
+ - [Becoming a subscriber on Tidelift](https://tidelift.com/subscription/npm/vuetify)
88
+ - [Making a one-time donation with Paypal](https://paypal.me/vuetify)
89
+
90
+ ## 📑 License
91
+ [MIT](http://opensource.org/licenses/MIT)
92
+
93
+ Copyright (c) 2016-present Vuetify, LLC
@@ -0,0 +1,11 @@
1
+ # Client 13/04/2024 1.5.8
2
+
3
+ Changes:
4
+
5
+ - yaml import dialog: convert to setup script
6
+
7
+ Fixes:
8
+
9
+ - yaml import: clear import file field when closing dialog
10
+ - yaml import: also clear import file field when an error has occurred during import
11
+ - yaml import: show an error message to provide context about why import has failed
package/index.html ADDED
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <link rel="icon" href="/favicon.ico" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>FDM Monster</title>
9
+ </head>
10
+
11
+ <body>
12
+ <div id="app"></div>
13
+ <script type="module" src="/src/main.ts"></script>
14
+ </body>
15
+
16
+ </html>
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "fdm-monster-client",
3
+ "version": "0.0.0",
4
+ "scripts": {
5
+ "dev": "vite",
6
+ "build": "vue-tsc --noEmit && vite build",
7
+ "preview": "vite preview",
8
+ "lint": "eslint . --fix --ignore-path .gitignore"
9
+ },
10
+ "dependencies": {
11
+ "@mdi/font": "6.2.95",
12
+ "core-js": "3.36.1",
13
+ "roboto-fontface": "*",
14
+ "vue": "3.4.21",
15
+ "vuetify": "3.5.14"
16
+ },
17
+ "devDependencies": {
18
+ "@babel/types": "7.24.0",
19
+ "@types/node": "20.12.4",
20
+ "@vitejs/plugin-vue": "5.0.4",
21
+ "@vue/eslint-config-typescript": "13.0.0",
22
+ "eslint": "8.57.0",
23
+ "eslint-config-standard": "17.1.0",
24
+ "eslint-plugin-import": "2.29.1",
25
+ "eslint-plugin-n": "16.6.2",
26
+ "eslint-plugin-node": "11.1.0",
27
+ "eslint-plugin-promise": "6.1.1",
28
+ "eslint-plugin-vue": "9.24.0",
29
+ "pinia": "2.1.7",
30
+ "sass": "1.74.1",
31
+ "typescript": "5.4.4",
32
+ "unplugin-auto-import": "0.17.5",
33
+ "unplugin-fonts": "1.1.1",
34
+ "unplugin-vue-components": "0.26.0",
35
+ "unplugin-vue-router": "0.8.5",
36
+ "vite": "5.2.8",
37
+ "vite-plugin-vue-layouts": "0.11.0",
38
+ "vite-plugin-vuetify": "2.0.3",
39
+ "vue-router": "4.3.0",
40
+ "vue-tsc": "2.0.10"
41
+ }
42
+ }
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@fdm-monster/client-next",
3
+ "repository": {
4
+ "type": "git",
5
+ "url": "git+https://github.com/fdm-monster/fdm-monster-client-next.git"
6
+ },
7
+ "author": "David Zwart",
8
+ "license": "AGPL-3.0-or-later",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "version": "0.0.1",
13
+ "description": "FDM Monster Client Next is the Vue3 frontend for FDM Monster.",
14
+ "scripts": {
15
+ "dev": "vite",
16
+ "build": "vue-tsc --noEmit && vite build",
17
+ "preview": "vite preview",
18
+ "lint": "eslint . --fix --ignore-path .gitignore",
19
+ "test:unit": "vitest --environment jsdom",
20
+ "test:coverage": "vitest run --coverage --environment jsdom",
21
+ "test:e2e": "start-server-and-test preview http://127.0.0.1:5050/ 'cypress open'"
22
+ },
23
+ "dependencies": {},
24
+ "devDependencies": {},
25
+ "packageManager": "yarn@4.5.1"
26
+ }
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg id="_레이어_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 412.42 412.42"><defs><style>.cls-1{fill:#e60012;}</style></defs><g id="_레이어_1-2"><circle cx="206.21" cy="206.21" r="206.21"/><path d="M34.9,185.49c-.71,5.88-1.13,11.86-1.26,17.9,22.27-14.3,45.49-25.72,45.49-25.72-14.56-.07-33.13,4.59-44.23,7.82Z"/><g><path class="cls-1" d="M127.11,154.6c-21.55,.7-61.54,5-91.52,25.69-3.61,2.49-7.07,5.22-10.34,8.21,0,0,3.78-1.31,9.64-3.01,11.1-3.23,29.67-7.89,44.23-7.82,0,0-23.22,11.42-45.49,25.72-.03,1.28-.05,2.55-.05,3.83,0,7.19,.44,14.27,1.26,21.23,28.85-38.28,73.71-64.21,92.26-73.85Z"/><path class="cls-1" d="M316.16,304.46c-13.24,9.59-32.06,2.21-26.71-14.19,0,0-8.39,6.35-16.59-1.14-8.2-7.49-5.32-14.28-5.32-14.28,0,0-4.76,5.93-15.82-1.2-4.18-2.69-4.92-3.16-6.61-8.41-5.2-16.2,.4-27.23,11.47-36.03,14.05-11.62,27.38-10.43,32.98-10.03,18.18,1.3,21.3,16.88,21.3,16.88,49.54-20.18,37.78,30.33,37.78,30.33,25.69-9.17,21.51-58.49,21.51-58.49-63.73,1.75-69.01-33.33-69.01-33.33h0c-73.34-32.35-98.93-136.88-98.93-136.88-10.09,33.49,8.45,101.01,8.45,101.01-41.28-21.1-66.05-63.3-66.05-63.3-2.69,20.6,29.6,66.99,31.13,69.18-1.05-1.46-16.46-21.08-81.61-15.27,0,0,43.43,8.91,47.96,23.52-1.19,.34-2.36,.68-3.53,1.02-45.03,20.97-82.6,57.7-102.36,83.99,8.94,52.17,40.31,96.68,83.84,123.22-29.33-58.5,4.94-109.29,21.47-121.26,15.22-11.02,28.12-12.32,34.24-10.75-8.32-18.53-31.75-29.17-31.75-29.17,45.98,15.71,39.57,45.39,39.57,45.39,0,0-4.35,14.14-5.8,13.79-.09,.17-.14,.26-.14,.26,105.64,26.71,92.52,74.54,92.52,74.54,37.61-6.42,46.18-29.67,46.18-29.67m-22.54-100.14c-4.43,.24-20.05-7.97-25.11-12.39-5.9-5.16-15.37-31.65-15.37-31.65,0,0,14.68,12.21,25.98,21.53,9.88,8.15,16.96,13.82,18.1,17.98l-3.6,4.53Z"/></g></g></svg>
Binary file
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg id="_레이어_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 412.42 412.42"><defs><style>.cls-1{fill:#e60012;}</style></defs><g id="_레이어_1-2"><circle cx="206.21" cy="206.21" r="206.21"/><path d="M34.9,185.49c-.71,5.88-1.13,11.86-1.26,17.9,22.27-14.3,45.49-25.72,45.49-25.72-14.56-.07-33.13,4.59-44.23,7.82Z"/><g><path class="cls-1" d="M127.11,154.6c-21.55,.7-61.54,5-91.52,25.69-3.61,2.49-7.07,5.22-10.34,8.21,0,0,3.78-1.31,9.64-3.01,11.1-3.23,29.67-7.89,44.23-7.82,0,0-23.22,11.42-45.49,25.72-.03,1.28-.05,2.55-.05,3.83,0,7.19,.44,14.27,1.26,21.23,28.85-38.28,73.71-64.21,92.26-73.85Z"/><path class="cls-1" d="M316.16,304.46c-13.24,9.59-32.06,2.21-26.71-14.19,0,0-8.39,6.35-16.59-1.14-8.2-7.49-5.32-14.28-5.32-14.28,0,0-4.76,5.93-15.82-1.2-4.18-2.69-4.92-3.16-6.61-8.41-5.2-16.2,.4-27.23,11.47-36.03,14.05-11.62,27.38-10.43,32.98-10.03,18.18,1.3,21.3,16.88,21.3,16.88,49.54-20.18,37.78,30.33,37.78,30.33,25.69-9.17,21.51-58.49,21.51-58.49-63.73,1.75-69.01-33.33-69.01-33.33h0c-73.34-32.35-98.93-136.88-98.93-136.88-10.09,33.49,8.45,101.01,8.45,101.01-41.28-21.1-66.05-63.3-66.05-63.3-2.69,20.6,29.6,66.99,31.13,69.18-1.05-1.46-16.46-21.08-81.61-15.27,0,0,43.43,8.91,47.96,23.52-1.19,.34-2.36,.68-3.53,1.02-45.03,20.97-82.6,57.7-102.36,83.99,8.94,52.17,40.31,96.68,83.84,123.22-29.33-58.5,4.94-109.29,21.47-121.26,15.22-11.02,28.12-12.32,34.24-10.75-8.32-18.53-31.75-29.17-31.75-29.17,45.98,15.71,39.57,45.39,39.57,45.39,0,0-4.35,14.14-5.8,13.79-.09,.17-.14,.26-.14,.26,105.64,26.71,92.52,74.54,92.52,74.54,37.61-6.42,46.18-29.67,46.18-29.67m-22.54-100.14c-4.43,.24-20.05-7.97-25.11-12.39-5.9-5.16-15.37-31.65-15.37-31.65,0,0,14.68,12.21,25.98,21.53,9.88,8.15,16.96,13.82,18.1,17.98l-3.6,4.53Z"/></g></g></svg>
@@ -0,0 +1,33 @@
1
+ {
2
+ "theme_color": "#9B0505",
3
+ "background_color": "#424242",
4
+ "display": "browser",
5
+ "scope": "/",
6
+ "start_url": "/",
7
+ "name": "FDM Monster",
8
+ "short_name": "FDM Monster",
9
+ "description": "Visit our github on https://github.com/fdm-monster/fdm-monster",
10
+ "icons": [
11
+ {
12
+ "src": "/img/icons/android-chrome-192x192.png",
13
+ "sizes": "192x192",
14
+ "type": "image/png"
15
+ },
16
+ {
17
+ "src": "/img/icons/android-chrome-256x256.png",
18
+ "sizes": "256x256",
19
+ "type": "image/png"
20
+ },
21
+ {
22
+ "src": "/img/icons/android-chrome-384x384.png",
23
+ "sizes": "384x384",
24
+ "type": "image/png"
25
+
26
+ },
27
+ {
28
+ "src": "/img/icons/android-chrome-512x512.png",
29
+ "sizes": "512x512",
30
+ "type": "image/png"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,144 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="119.2866"
6
+ height="108.72864"
7
+ id="svg2"
8
+ version="1.1"
9
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
10
+ sodipodi:docname="octoprint-tentacle.svg"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ xmlns:svg="http://www.w3.org/2000/svg"
15
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
16
+ xmlns:cc="http://creativecommons.org/ns#"
17
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
18
+ <defs
19
+ id="defs4">
20
+ <clipPath
21
+ clipPathUnits="userSpaceOnUse"
22
+ id="clipPath2999">
23
+ <path
24
+ d="M 0,600 H 800 V 0 H 0 Z"
25
+ id="path3001" />
26
+ </clipPath>
27
+ <clipPath
28
+ clipPathUnits="userSpaceOnUse"
29
+ id="clipPath3179">
30
+ <path
31
+ d="M 351,309.913 H 484 V 175.812 H 351 Z"
32
+ id="path3181" />
33
+ </clipPath>
34
+ <clipPath
35
+ clipPathUnits="userSpaceOnUse"
36
+ id="clipPath3195">
37
+ <path
38
+ d="m 361.6,295.312 h 19.5 v -19 h -19.5 z"
39
+ id="path3197" />
40
+ </clipPath>
41
+ <clipPath
42
+ clipPathUnits="userSpaceOnUse"
43
+ id="clipPath3211">
44
+ <path
45
+ d="m 351.7,260.413 h 16 v -15 h -16 z"
46
+ id="path3213" />
47
+ </clipPath>
48
+ <clipPath
49
+ clipPathUnits="userSpaceOnUse"
50
+ id="clipPath3227">
51
+ <path
52
+ d="m 344.1,254.212 h 8.3 v -3.9 h -8.3 z"
53
+ id="path3229" />
54
+ </clipPath>
55
+ <clipPath
56
+ clipPathUnits="userSpaceOnUse"
57
+ id="clipPath3243">
58
+ <path
59
+ d="m 340.9,226.913 h 44.9 v -51 h -44.9 z"
60
+ id="path3245" />
61
+ </clipPath>
62
+ <clipPath
63
+ clipPathUnits="userSpaceOnUse"
64
+ id="clipPath3259">
65
+ <path
66
+ d="m 351.7,230.012 h 63.7 v -48.3 h -63.7 z"
67
+ id="path3261" />
68
+ </clipPath>
69
+ <clipPath
70
+ clipPathUnits="userSpaceOnUse"
71
+ id="clipPath3299">
72
+ <path
73
+ d="m 385.8,184.512 h 53.4 v -9.275 h -53.4 z"
74
+ id="path3301" />
75
+ </clipPath>
76
+ <clipPath
77
+ clipPathUnits="userSpaceOnUse"
78
+ id="clipPath3323">
79
+ <path
80
+ d="m 426.9,185.212 h 18 v -3.6 h -18 z"
81
+ id="path3325" />
82
+ </clipPath>
83
+ </defs>
84
+ <sodipodi:namedview
85
+ id="base"
86
+ pagecolor="#ffffff"
87
+ bordercolor="#666666"
88
+ borderopacity="1.0"
89
+ inkscape:pageopacity="0.0"
90
+ inkscape:pageshadow="2"
91
+ inkscape:zoom="0.98994949"
92
+ inkscape:cx="73.741136"
93
+ inkscape:cy="-90.913729"
94
+ inkscape:document-units="px"
95
+ inkscape:current-layer="g2997"
96
+ showgrid="false"
97
+ borderlayer="false"
98
+ inkscape:window-width="3072"
99
+ inkscape:window-height="1630"
100
+ inkscape:window-x="0"
101
+ inkscape:window-y="0"
102
+ inkscape:window-maximized="1"
103
+ inkscape:showpageshadow="2"
104
+ inkscape:pagecheckerboard="0"
105
+ inkscape:deskcolor="#d1d1d1" />
106
+ <metadata
107
+ id="metadata7">
108
+ <rdf:RDF>
109
+ <cc:Work
110
+ rdf:about="">
111
+ <dc:format>image/svg+xml</dc:format>
112
+ <dc:type
113
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
114
+ </cc:Work>
115
+ </rdf:RDF>
116
+ </metadata>
117
+ <g
118
+ inkscape:label="Layer 1"
119
+ inkscape:groupmode="layer"
120
+ id="layer1"
121
+ transform="translate(-242.53139,-547.66593)">
122
+ <g
123
+ clip-path="url(#clipPath2999)"
124
+ id="g2997"
125
+ transform="matrix(0.72275231,-1.0198672,-1.0198672,-0.72275231,326.4038,1224.3601)">
126
+ <g
127
+ id="g4632"
128
+ transform="translate(-169.63313,-42.957391)">
129
+ <path
130
+ id="path3017"
131
+ transform="matrix(0.46256148,-0.652715,-0.652715,-0.46256148,648.17639,779.39047)"
132
+ d="m 384.4375,343.625 c -15.99755,0.30664 -30.52222,6.12188 -43.6875,17.78125 -8.14057,6.94712 -13.84608,14.98947 -17.125,24.15625 -2.84209,13.30651 -3.04201,26.33484 -0.65625,38.75 1.42265,7.86377 4.4336,17.15087 9.0625,28.03125 h 32.0625 c -2.23008,-6.5513 -4.39213,-11.64423 -6.4375,-15.375 -8.76436,-16.16947 -10.72333,-31.96741 -5.78125,-47.15625 1.79887,-4.70023 4.24569,-9.24781 7.28125,-13.53125 1.08413,-1.5298 2.49815,-3.12606 4.0625,-4.46875 2.04057,-2.23086 6.6777,-5.0753 14.03125,-8.75 2.88617,-1.47839 5.92925,-2.52099 9.3125,-3.1875 0.4208,-0.16141 3.13198,-0.53808 7.96875,-1.09375 3.16643,-0.36054 7.46794,0.0782 12.9375,1.65625 5.19331,1.53547 9.05886,3.20482 11.8125,5.15625 3.56954,2.52963 6.54008,5.24284 9.09375,8.125 0.67134,0.78218 1.15917,1.40686 1.65625,2.21875 0.90503,1.10099 2.17671,2.76831 3.8125,5 0.91788,0.65048 1.5374,1.2717 1.65625,1.96875 0.33567,0.39109 0.53933,0.54641 0.875,0.9375 0.83275,1.20297 1.67548,2.40055 2.40625,3.53125 0.59907,0.88416 1.04394,1.96113 1.46875,2.875 0.5999,-2.7922 0.49448,-6.54185 -0.65625,-11.1875 -1.37157,-5.41497 -2.97273,-9.15501 -4.8125,-11.53125 -3.8538,-4.72276 -6.14616,-7.58151 -7.09375,-8.40625 -0.23368,-0.31881 -2.36627,-1.83752 -6.34375,-4.65625 -3.67152,-2.60191 -7.53322,-4.72184 -11.375,-6.21875 -7.539,-3.1978 -16.23194,-4.7759 -25.53125,-4.625 z m -30.21875,99.9375 c 0.20397,0.14455 0.34683,0.40148 0.40625,0.75 -0.10199,-0.0723 -0.22375,-0.14494 -0.5,-0.1875 0.14455,-0.20397 0.12346,-0.38824 0.0937,-0.5625 z"
133
+ style="fill:#13c100;fill-opacity:1;fill-rule:nonzero;stroke:none"
134
+ inkscape:connector-curvature="0" />
135
+ <path
136
+ id="path3101"
137
+ transform="matrix(0.46256148,-0.652715,-0.652715,-0.46256148,648.17639,779.39047)"
138
+ d="m 397.125,358.65625 c -0.93277,-0.0147 -1.80214,0.0349 -2.59375,0.125 -4.83677,0.55567 -7.54795,0.93234 -7.96875,1.09375 -3.38325,0.66651 -6.42633,1.70911 -9.3125,3.1875 -7.35355,3.6747 -11.99068,6.51914 -14.03125,8.75 -1.56435,1.34269 -2.97837,2.93895 -4.0625,4.46875 -3.03556,4.28344 -5.48238,8.83102 -7.28125,13.53125 -4.94208,15.18884 -2.98311,30.98678 5.78125,47.15625 2.04537,3.73077 4.20742,8.8237 6.4375,15.375 h 32.375 c -1.17829,-3.4936 -2.92961,-7.46935 -5.40625,-11.9375 -1.87349,-3.62578 -4.0443,-7.45858 -6.5,-11.34375 -0.10199,-0.0723 -0.0312,-0.15625 -0.0312,-0.15625 -0.39509,-0.73961 -0.74984,-1.31789 -1.1875,-1.78125 -0.23368,-0.31881 -0.39132,-0.55619 -0.625,-0.875 l -1.375,-1.9375 c -0.52679,-0.98615 -1.06542,-1.96936 -1.5625,-2.78125 -1.86948,-2.5505 -3.30033,-4.62469 -4.46875,-6.21875 -0.99416,-1.62377 -1.98282,-3.261 -2.875,-4.8125 -8.48894,-12.45054 -7.74709,-23.23497 2.1875,-32.28125 2.8396,-2.27743 6.15377,-4.38436 10.1875,-5.96875 2.42281,-1.04073 4.99629,-1.81603 7.40625,-2.40625 17.61732,-2.37609 33.1565,3.5878 46.5625,17.53125 -0.73077,-1.1307 -1.5735,-2.35953 -2.40625,-3.5625 -0.33567,-0.39109 -0.53933,-0.51516 -0.875,-0.90625 -0.11885,-0.69705 -0.73837,-1.31827 -1.65625,-1.96875 -1.63579,-2.23169 -2.90747,-3.89901 -3.8125,-5 -0.49708,-0.81189 -0.98491,-1.43657 -1.65625,-2.21875 -2.55367,-2.88216 -5.52421,-5.59537 -9.09375,-8.125 -2.75364,-1.95143 -6.61919,-3.62078 -11.8125,-5.15625 -4.10217,-1.18353 -7.54545,-1.73719 -10.34375,-1.78125 z"
139
+ style="fill:#169300;fill-opacity:1;fill-rule:nonzero;stroke:none"
140
+ inkscape:connector-curvature="0" />
141
+ </g>
142
+ </g>
143
+ </g>
144
+ </svg>
Binary file
Binary file
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-build-timestamp-utc="<%= new Date().toISOString() %>">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
+ <link rel="icon" href="<%= BASE_URL %>favicon.ico">
8
+ <title>FDM Monster</title>
9
+ </head>
10
+ <body>
11
+ <noscript>
12
+ <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
13
+ </noscript>
14
+ <div id="app"></div>
15
+ <!-- built files will be auto injected -->
16
+ </body>
17
+ </html>
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Disallow:
package/renovate.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ],
5
+ "assignees": [
6
+ "davidzwa"
7
+ ],
8
+ "labels": [
9
+ "renovate"
10
+ ],
11
+ "automerge": true,
12
+ "packageRules": [
13
+ {
14
+ "matchUpdateTypes": [
15
+ "minor",
16
+ "patch",
17
+ "pin",
18
+ "digest"
19
+ ],
20
+ "automerge": true
21
+ },
22
+ {
23
+ "matchPackagePatterns": [
24
+ "@vueuse/*"
25
+ ],
26
+ "groupName": "@vueuse",
27
+ "automerge": true
28
+ }
29
+ ]
30
+ }
package/src/App.vue ADDED
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <v-app>
3
+ <AppInfoSnackbar />
4
+ <AppErrorSnackbar />
5
+ <AppProgressSnackbar />
6
+
7
+ <NavigationDrawer
8
+ v-if="
9
+ (authStore.hasAuthToken && !authStore.isLoginExpired) ||
10
+ !authStore.loginRequired
11
+ "
12
+ />
13
+ <TopBar
14
+ v-if="
15
+ (authStore.hasAuthToken && !authStore.isLoginExpired) ||
16
+ !authStore.loginRequired
17
+ "
18
+ />
19
+
20
+ <AppLoader>
21
+ <v-main>
22
+ <router-view />
23
+ </v-main>
24
+ </AppLoader>
25
+
26
+ <AddOrUpdatePrinterDialog />
27
+ <AddOrUpdateCameraStreamDialog />
28
+ <AddOrUpdateFloorDialog />
29
+ <PrinterMaintenanceDialog />
30
+ <BatchJsonCreateDialog />
31
+ <YamlImportExportDialog />
32
+ <FileExplorerSideNav />
33
+ <BatchReprintDialog />
34
+ <PrinterControlDialog />
35
+ </v-app>
36
+ </template>
37
+
38
+ <script lang="ts" setup>
39
+ import { onMounted, watch } from 'vue'
40
+ import { useUploadsStore } from './store/uploads.store'
41
+ import { uploadProgressTest } from './utils/test.util'
42
+ import { useAuthStore } from './store/auth.store'
43
+ import AppLoader from './AppLoader.vue'
44
+
45
+ const uploadsStore = useUploadsStore()
46
+ const authStore = useAuthStore()
47
+
48
+ const queuedUploads = uploadsStore.queuedUploads
49
+
50
+ watch(queuedUploads, async () => {
51
+ await uploadsStore.handleNextUpload()
52
+ })
53
+
54
+ onMounted(() => {
55
+ console.debug(
56
+ `App.vue mounted. Logged in: ${authStore.hasAuthToken}, Expired: ${authStore.isLoginExpired}`
57
+ )
58
+ uploadProgressTest(false)
59
+ })
60
+ </script>