generator-pninja 1.6.1 → 2.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 (98) hide show
  1. package/README.md +2 -1
  2. package/generators/client/react.inc.js +2 -0
  3. package/generators/client/templates/react/package-lock.json.ejs +271 -0
  4. package/generators/client/templates/react/package.json.ejs +1 -0
  5. package/generators/client/templates/react/public/locales/common/am.json.ejs +7 -2
  6. package/generators/client/templates/react/public/locales/common/ar.json.ejs +7 -2
  7. package/generators/client/templates/react/public/locales/common/az.json.ejs +7 -2
  8. package/generators/client/templates/react/public/locales/common/bg.json.ejs +7 -2
  9. package/generators/client/templates/react/public/locales/common/bn.json.ejs +7 -2
  10. package/generators/client/templates/react/public/locales/common/ca.json.ejs +7 -2
  11. package/generators/client/templates/react/public/locales/common/cs.json.ejs +7 -2
  12. package/generators/client/templates/react/public/locales/common/cy.json.ejs +7 -2
  13. package/generators/client/templates/react/public/locales/common/da.json.ejs +7 -2
  14. package/generators/client/templates/react/public/locales/common/de.json.ejs +7 -2
  15. package/generators/client/templates/react/public/locales/common/el.json.ejs +7 -2
  16. package/generators/client/templates/react/public/locales/common/en.json.ejs +7 -2
  17. package/generators/client/templates/react/public/locales/common/es.json.ejs +7 -2
  18. package/generators/client/templates/react/public/locales/common/et.json.ejs +7 -2
  19. package/generators/client/templates/react/public/locales/common/eu.json.ejs +7 -2
  20. package/generators/client/templates/react/public/locales/common/fa.json.ejs +7 -2
  21. package/generators/client/templates/react/public/locales/common/fi.json.ejs +7 -2
  22. package/generators/client/templates/react/public/locales/common/fr.json.ejs +7 -2
  23. package/generators/client/templates/react/public/locales/common/fy.json.ejs +7 -2
  24. package/generators/client/templates/react/public/locales/common/ga.json.ejs +7 -2
  25. package/generators/client/templates/react/public/locales/common/gl.json.ejs +7 -2
  26. package/generators/client/templates/react/public/locales/common/gu.json.ejs +7 -2
  27. package/generators/client/templates/react/public/locales/common/ha.json.ejs +7 -2
  28. package/generators/client/templates/react/public/locales/common/he.json.ejs +7 -2
  29. package/generators/client/templates/react/public/locales/common/hi.json.ejs +7 -2
  30. package/generators/client/templates/react/public/locales/common/hr.json.ejs +7 -2
  31. package/generators/client/templates/react/public/locales/common/ht.json.ejs +7 -2
  32. package/generators/client/templates/react/public/locales/common/hu.json.ejs +7 -2
  33. package/generators/client/templates/react/public/locales/common/hy.json.ejs +7 -2
  34. package/generators/client/templates/react/public/locales/common/id.json.ejs +7 -2
  35. package/generators/client/templates/react/public/locales/common/is.json.ejs +7 -2
  36. package/generators/client/templates/react/public/locales/common/it.json.ejs +7 -2
  37. package/generators/client/templates/react/public/locales/common/ja.json.ejs +7 -2
  38. package/generators/client/templates/react/public/locales/common/kk.json.ejs +7 -2
  39. package/generators/client/templates/react/public/locales/common/ko.json.ejs +7 -2
  40. package/generators/client/templates/react/public/locales/common/lt.json.ejs +7 -2
  41. package/generators/client/templates/react/public/locales/common/lv.json.ejs +7 -2
  42. package/generators/client/templates/react/public/locales/common/mi.json.ejs +7 -2
  43. package/generators/client/templates/react/public/locales/common/ms.json.ejs +7 -2
  44. package/generators/client/templates/react/public/locales/common/mt.json.ejs +7 -2
  45. package/generators/client/templates/react/public/locales/common/nl.json.ejs +7 -2
  46. package/generators/client/templates/react/public/locales/common/no.json.ejs +7 -2
  47. package/generators/client/templates/react/public/locales/common/om.json.ejs +7 -2
  48. package/generators/client/templates/react/public/locales/common/pl.json.ejs +7 -2
  49. package/generators/client/templates/react/public/locales/common/pt.json.ejs +7 -2
  50. package/generators/client/templates/react/public/locales/common/ro.json.ejs +7 -2
  51. package/generators/client/templates/react/public/locales/common/ru.json.ejs +7 -2
  52. package/generators/client/templates/react/public/locales/common/rw.json.ejs +7 -2
  53. package/generators/client/templates/react/public/locales/common/sk.json.ejs +7 -2
  54. package/generators/client/templates/react/public/locales/common/sl.json.ejs +7 -2
  55. package/generators/client/templates/react/public/locales/common/sq.json.ejs +7 -2
  56. package/generators/client/templates/react/public/locales/common/sr.json.ejs +7 -2
  57. package/generators/client/templates/react/public/locales/common/sv.json.ejs +7 -2
  58. package/generators/client/templates/react/public/locales/common/sw.json.ejs +7 -2
  59. package/generators/client/templates/react/public/locales/common/ta.json.ejs +7 -2
  60. package/generators/client/templates/react/public/locales/common/tr.json.ejs +7 -2
  61. package/generators/client/templates/react/public/locales/common/uk.json.ejs +7 -2
  62. package/generators/client/templates/react/public/locales/common/ur.json.ejs +7 -2
  63. package/generators/client/templates/react/public/locales/common/uz.json.ejs +7 -2
  64. package/generators/client/templates/react/public/locales/common/vi.json.ejs +7 -2
  65. package/generators/client/templates/react/public/locales/common/yo.json.ejs +7 -2
  66. package/generators/client/templates/react/public/locales/common/zh.json.ejs +7 -2
  67. package/generators/client/templates/react/public/locales/common/zu.json.ejs +7 -2
  68. package/generators/client/templates/react/src/components/BlobViewer.tsx.ejs +260 -0
  69. package/generators/client/templates/react/src/components/FullPageLoader.tsx.ejs +9 -0
  70. package/generators/client/templates/react/src/components/entities/EntityForm.tsx.ejs +36 -10
  71. package/generators/client/templates/react/src/components/formElements/FileField.tsx.ejs +228 -106
  72. package/generators/client/templates/react/src/pages/admin/audit/AuditView.tsx.ejs +58 -27
  73. package/generators/client/templates/react/src/pages/entities/EntityEdit.tsx.ejs +21 -21
  74. package/generators/client/templates/react/src/pages/entities/EntityList.tsx.ejs +10 -8
  75. package/generators/client/templates/react/src/pages/entities/EntityView.tsx.ejs +22 -29
  76. package/generators/entities/templates/app/Http/Controllers/EntityController.php.ejs +26 -79
  77. package/generators/entities/templates/app/Models/Entity.php.ejs +1 -1
  78. package/generators/entities/templates/database/migrations/create_audits_table.php.ejs +7 -2
  79. package/generators/entities/templates/database/seeders/EntitySeeder.php.ejs +3 -0
  80. package/generators/entities/utils/controllers-generator.js +26 -6
  81. package/generators/entities/utils/factories-generator.js +6 -7
  82. package/generators/entities/utils/migrations-generator.js +10 -8
  83. package/generators/entities/utils/models-generator.js +9 -21
  84. package/generators/entities/utils/openapi-generator.js +27 -32
  85. package/generators/final/templates/README.md.ejs +22 -0
  86. package/generators/server/index.js +11 -6
  87. package/generators/server/templates/Casts/BlobCast.php.ejs +77 -0
  88. package/generators/server/templates/Providers/AppServiceProvider.php.ejs +10 -10
  89. package/generators/server/templates/Rules/{Base64MaxSize.php.ejs → BlobMaxSize.php.ejs} +2 -2
  90. package/generators/server/templates/Rules/{Base64MinSize.php.ejs → BlobMinSize.php.ejs} +2 -2
  91. package/generators/server/templates/app/Http/Controllers/AuditController.php.ejs +2 -1
  92. package/generators/server/templates/app/Traits/SeederHelpers.php.ejs +96 -62
  93. package/package.json +1 -1
  94. package/generators/client/templates/react/src/components/entities/AcRuleForm.tsx.ejs +0 -107
  95. package/generators/entities/templates/Providers/AppServiceProvider.php.ejs +0 -53
  96. package/generators/entities/templates/openapi.yaml.ejs +0 -1
  97. package/generators/server/templates/Casts/Base64BinaryCast.php.ejs +0 -20
  98. package/generators/server/templates/database/migrations/create_audits_table.php.ejs +0 -52
package/README.md CHANGED
@@ -135,6 +135,7 @@ Fully wired together: auth, routing, forms, CRUD, migrations.
135
135
  }
136
136
  ```
137
137
 
138
+ - **Blob Fields** - Binary attachments (`Blob`, `AnyBlob`, `ImageBlob`) are stored as a single JSON column `{data, type, name, size}` per field. In list responses `data` (base64) is omitted for performance; it is included in single-record responses. The `serveBlob` endpoint serves the raw binary directly. Validation uses `blob_min_size` / `blob_max_size` rules; `ImageBlob` enforces MIME type via `image_mimetype`. Supported databases: SQLite (`json`), MySQL/MariaDB (`json`), PostgreSQL (`jsonb`).
138
139
  - **CSV Database Seeding** - Populate your database from CSV files
139
140
  - **Seeding Administration** - Web interface to run seeders individually or in bulk, with direct CSV upload from the browser
140
141
  - **Migration Administration** - Web interface to run `migrate`, `rollback`, `migrate:fresh` and check `migrate:status` without the command line
@@ -231,7 +232,7 @@ The API docs are accessible at `/support/api-docs` in the generated React client
231
232
  - **Interactive console** — execute API calls directly from the browser
232
233
  - **Authentication** — supports both Bearer token and OAuth2 (Keycloak) login via the **Authorize** button
233
234
  - **Full endpoint coverage** — all generated entities, auth, user, and locks endpoints are documented
234
- - **Schema reference** — read and write schemas for every entity, including blob field handling
235
+ - **Schema reference** — read and write schemas for every entity, including blob fields (stored as JSON objects `{data, type, name, size}`; `data` is omitted in list responses and included only in single-record responses)
235
236
 
236
237
  **Authenticating via Swagger UI:**
237
238
 
@@ -209,6 +209,7 @@ export async function createReactClient(that) {
209
209
  that.fs.copyTpl(that.templatePath("../../client/templates/assets/vue.svg"), that.destinationPath(`client/src/assets/vue.svg`));
210
210
 
211
211
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/ApiResponsePagination.tsx.ejs"), that.destinationPath(`client/src/components/ApiResponsePagination.tsx`), {});
212
+ that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/BlobViewer.tsx.ejs"), that.destinationPath(`client/src/components/BlobViewer.tsx`), {});
212
213
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/Can.tsx.ejs"), that.destinationPath(`client/src/components/Can.tsx`), {});
213
214
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/ConfirmButton.tsx.ejs"), that.destinationPath(`client/src/components/ConfirmButton.tsx`), {});
214
215
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/DarkModeToggle.tsx.ejs"), that.destinationPath(`client/src/components/DarkModeToggle.tsx`), { to });
@@ -247,6 +248,7 @@ export async function createReactClient(that) {
247
248
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/LoginRedirector.tsx.ejs"), that.destinationPath(`client/src/components/LoginRedirector.tsx`));
248
249
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/SearchInput.css"), that.destinationPath(`client/src/components/SearchInput.css`), {});
249
250
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/SearchInput.tsx.ejs"), that.destinationPath(`client/src/components/SearchInput.tsx`), {});
251
+ that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/FullPageLoader.tsx.ejs"), that.destinationPath(`client/src/components/FullPageLoader.tsx`), {});
250
252
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/SimpleLoader.tsx.ejs"), that.destinationPath(`client/src/components/SimpleLoader.tsx`), {});
251
253
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/TableSkeletonLoader.tsx.ejs"), that.destinationPath(`client/src/components/TableSkeletonLoader.tsx`), {});
252
254
  that.fs.copyTpl(that.templatePath("../../client/templates/react/src/components/Toast.tsx.ejs"), that.destinationPath(`client/src/components/Toast.tsx`));
@@ -18,6 +18,7 @@
18
18
  "i18next-browser-languagedetector": "^8.0.2",
19
19
  "i18next-http-backend": "^3.0.1",
20
20
  "jodit-react": "^5.2.37",
21
+ "pdfjs-dist": "^5.5.207",
21
22
  "pretty-bytes": "^7.0.0",
22
23
  "quill": "^2.0.3",
23
24
  "react": "^18.3.1",
@@ -1104,6 +1105,256 @@
1104
1105
  "@jridgewell/sourcemap-codec": "^1.4.14"
1105
1106
  }
1106
1107
  },
1108
+ "node_modules/@napi-rs/canvas": {
1109
+ "version": "0.1.97",
1110
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.97.tgz",
1111
+ "integrity": "sha512-8cFniXvrIEnVwuNSRCW9wirRZbHvrD3JVujdS2P5n5xiJZNZMOZcfOvJ1pb66c7jXMKHHglJEDVJGbm8XWFcXQ==",
1112
+ "license": "MIT",
1113
+ "optional": true,
1114
+ "workspaces": [
1115
+ "e2e/*"
1116
+ ],
1117
+ "engines": {
1118
+ "node": ">= 10"
1119
+ },
1120
+ "funding": {
1121
+ "type": "github",
1122
+ "url": "https://github.com/sponsors/Brooooooklyn"
1123
+ },
1124
+ "optionalDependencies": {
1125
+ "@napi-rs/canvas-android-arm64": "0.1.97",
1126
+ "@napi-rs/canvas-darwin-arm64": "0.1.97",
1127
+ "@napi-rs/canvas-darwin-x64": "0.1.97",
1128
+ "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.97",
1129
+ "@napi-rs/canvas-linux-arm64-gnu": "0.1.97",
1130
+ "@napi-rs/canvas-linux-arm64-musl": "0.1.97",
1131
+ "@napi-rs/canvas-linux-riscv64-gnu": "0.1.97",
1132
+ "@napi-rs/canvas-linux-x64-gnu": "0.1.97",
1133
+ "@napi-rs/canvas-linux-x64-musl": "0.1.97",
1134
+ "@napi-rs/canvas-win32-arm64-msvc": "0.1.97",
1135
+ "@napi-rs/canvas-win32-x64-msvc": "0.1.97"
1136
+ }
1137
+ },
1138
+ "node_modules/@napi-rs/canvas-android-arm64": {
1139
+ "version": "0.1.97",
1140
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.97.tgz",
1141
+ "integrity": "sha512-V1c/WVw+NzH8vk7ZK/O8/nyBSCQimU8sfMsB/9qeSvdkGKNU7+mxy/bIF0gTgeBFmHpj30S4E9WHMSrxXGQuVQ==",
1142
+ "cpu": [
1143
+ "arm64"
1144
+ ],
1145
+ "license": "MIT",
1146
+ "optional": true,
1147
+ "os": [
1148
+ "android"
1149
+ ],
1150
+ "engines": {
1151
+ "node": ">= 10"
1152
+ },
1153
+ "funding": {
1154
+ "type": "github",
1155
+ "url": "https://github.com/sponsors/Brooooooklyn"
1156
+ }
1157
+ },
1158
+ "node_modules/@napi-rs/canvas-darwin-arm64": {
1159
+ "version": "0.1.97",
1160
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.97.tgz",
1161
+ "integrity": "sha512-ok+SCEF4YejcxuJ9Rm+WWunHHpf2HmiPxfz6z1a/NFQECGXtsY7A4B8XocK1LmT1D7P174MzwPF9Wy3AUAwEPw==",
1162
+ "cpu": [
1163
+ "arm64"
1164
+ ],
1165
+ "license": "MIT",
1166
+ "optional": true,
1167
+ "os": [
1168
+ "darwin"
1169
+ ],
1170
+ "engines": {
1171
+ "node": ">= 10"
1172
+ },
1173
+ "funding": {
1174
+ "type": "github",
1175
+ "url": "https://github.com/sponsors/Brooooooklyn"
1176
+ }
1177
+ },
1178
+ "node_modules/@napi-rs/canvas-darwin-x64": {
1179
+ "version": "0.1.97",
1180
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.97.tgz",
1181
+ "integrity": "sha512-PUP6e6/UGlclUvAQNnuXCcnkpdUou6VYZfQOQxExLp86epOylmiwLkqXIvpFmjoTEDmPmXrI+coL/9EFU1gKPA==",
1182
+ "cpu": [
1183
+ "x64"
1184
+ ],
1185
+ "license": "MIT",
1186
+ "optional": true,
1187
+ "os": [
1188
+ "darwin"
1189
+ ],
1190
+ "engines": {
1191
+ "node": ">= 10"
1192
+ },
1193
+ "funding": {
1194
+ "type": "github",
1195
+ "url": "https://github.com/sponsors/Brooooooklyn"
1196
+ }
1197
+ },
1198
+ "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
1199
+ "version": "0.1.97",
1200
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.97.tgz",
1201
+ "integrity": "sha512-XyXH2L/cic8eTNtbrXCcvqHtMX/nEOxN18+7rMrAM2XtLYC/EB5s0wnO1FsLMWmK+04ZSLN9FBGipo7kpIkcOw==",
1202
+ "cpu": [
1203
+ "arm"
1204
+ ],
1205
+ "license": "MIT",
1206
+ "optional": true,
1207
+ "os": [
1208
+ "linux"
1209
+ ],
1210
+ "engines": {
1211
+ "node": ">= 10"
1212
+ },
1213
+ "funding": {
1214
+ "type": "github",
1215
+ "url": "https://github.com/sponsors/Brooooooklyn"
1216
+ }
1217
+ },
1218
+ "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
1219
+ "version": "0.1.97",
1220
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.97.tgz",
1221
+ "integrity": "sha512-Kuq/M3djq0K8ktgz6nPlK7Ne5d4uWeDxPpyKWOjWDK2RIOhHVtLtyLiJw2fuldw7Vn4mhw05EZXCEr4Q76rs9w==",
1222
+ "cpu": [
1223
+ "arm64"
1224
+ ],
1225
+ "license": "MIT",
1226
+ "optional": true,
1227
+ "os": [
1228
+ "linux"
1229
+ ],
1230
+ "engines": {
1231
+ "node": ">= 10"
1232
+ },
1233
+ "funding": {
1234
+ "type": "github",
1235
+ "url": "https://github.com/sponsors/Brooooooklyn"
1236
+ }
1237
+ },
1238
+ "node_modules/@napi-rs/canvas-linux-arm64-musl": {
1239
+ "version": "0.1.97",
1240
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.97.tgz",
1241
+ "integrity": "sha512-kKmSkQVnWeqg7qdsiXvYxKhAFuHz3tkBjW/zyQv5YKUPhotpaVhpBGv5LqCngzyuRV85SXoe+OFj+Tv0a0QXkQ==",
1242
+ "cpu": [
1243
+ "arm64"
1244
+ ],
1245
+ "license": "MIT",
1246
+ "optional": true,
1247
+ "os": [
1248
+ "linux"
1249
+ ],
1250
+ "engines": {
1251
+ "node": ">= 10"
1252
+ },
1253
+ "funding": {
1254
+ "type": "github",
1255
+ "url": "https://github.com/sponsors/Brooooooklyn"
1256
+ }
1257
+ },
1258
+ "node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
1259
+ "version": "0.1.97",
1260
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.97.tgz",
1261
+ "integrity": "sha512-Jc7I3A51jnEOIAXeLsN/M/+Z28LUeakcsXs07FLq9prXc0eYOtVwsDEv913Gr+06IRo34gJJVgT0TXvmz+N2VA==",
1262
+ "cpu": [
1263
+ "riscv64"
1264
+ ],
1265
+ "license": "MIT",
1266
+ "optional": true,
1267
+ "os": [
1268
+ "linux"
1269
+ ],
1270
+ "engines": {
1271
+ "node": ">= 10"
1272
+ },
1273
+ "funding": {
1274
+ "type": "github",
1275
+ "url": "https://github.com/sponsors/Brooooooklyn"
1276
+ }
1277
+ },
1278
+ "node_modules/@napi-rs/canvas-linux-x64-gnu": {
1279
+ "version": "0.1.97",
1280
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.97.tgz",
1281
+ "integrity": "sha512-iDUBe7AilfuBSRbSa8/IGX38Mf+iCSBqoVKLSQ5XaY2JLOaqz1TVyPFEyIck7wT6mRQhQt5sN6ogfjIDfi74tg==",
1282
+ "cpu": [
1283
+ "x64"
1284
+ ],
1285
+ "license": "MIT",
1286
+ "optional": true,
1287
+ "os": [
1288
+ "linux"
1289
+ ],
1290
+ "engines": {
1291
+ "node": ">= 10"
1292
+ },
1293
+ "funding": {
1294
+ "type": "github",
1295
+ "url": "https://github.com/sponsors/Brooooooklyn"
1296
+ }
1297
+ },
1298
+ "node_modules/@napi-rs/canvas-linux-x64-musl": {
1299
+ "version": "0.1.97",
1300
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.97.tgz",
1301
+ "integrity": "sha512-AKLFd/v0Z5fvgqBDqhvqtAdx+fHMJ5t9JcUNKq4FIZ5WH+iegGm8HPdj00NFlCSnm83Fp3Ln8I2f7uq1aIiWaA==",
1302
+ "cpu": [
1303
+ "x64"
1304
+ ],
1305
+ "license": "MIT",
1306
+ "optional": true,
1307
+ "os": [
1308
+ "linux"
1309
+ ],
1310
+ "engines": {
1311
+ "node": ">= 10"
1312
+ },
1313
+ "funding": {
1314
+ "type": "github",
1315
+ "url": "https://github.com/sponsors/Brooooooklyn"
1316
+ }
1317
+ },
1318
+ "node_modules/@napi-rs/canvas-win32-arm64-msvc": {
1319
+ "version": "0.1.97",
1320
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.97.tgz",
1321
+ "integrity": "sha512-u883Yr6A6fO7Vpsy9YE4FVCIxzzo5sO+7pIUjjoDLjS3vQaNMkVzx5bdIpEL+ob+gU88WDK4VcxYMZ6nmnoX9A==",
1322
+ "cpu": [
1323
+ "arm64"
1324
+ ],
1325
+ "license": "MIT",
1326
+ "optional": true,
1327
+ "os": [
1328
+ "win32"
1329
+ ],
1330
+ "engines": {
1331
+ "node": ">= 10"
1332
+ },
1333
+ "funding": {
1334
+ "type": "github",
1335
+ "url": "https://github.com/sponsors/Brooooooklyn"
1336
+ }
1337
+ },
1338
+ "node_modules/@napi-rs/canvas-win32-x64-msvc": {
1339
+ "version": "0.1.97",
1340
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.97.tgz",
1341
+ "integrity": "sha512-sWtD2EE3fV0IzN+iiQUqr/Q1SwqWhs2O1FKItFlxtdDkikpEj5g7DKQpY3x55H/MAOnL8iomnlk3mcEeGiUMoQ==",
1342
+ "cpu": [
1343
+ "x64"
1344
+ ],
1345
+ "license": "MIT",
1346
+ "optional": true,
1347
+ "os": [
1348
+ "win32"
1349
+ ],
1350
+ "engines": {
1351
+ "node": ">= 10"
1352
+ },
1353
+ "funding": {
1354
+ "type": "github",
1355
+ "url": "https://github.com/sponsors/Brooooooklyn"
1356
+ }
1357
+ },
1107
1358
  "node_modules/@nodelib/fs.scandir": {
1108
1359
  "version": "2.1.5",
1109
1360
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -8092,6 +8343,13 @@
8092
8343
  "node-gyp-build-test": "build-test.js"
8093
8344
  }
8094
8345
  },
8346
+ "node_modules/node-readable-to-web-readable-stream": {
8347
+ "version": "0.4.2",
8348
+ "resolved": "https://registry.npmjs.org/node-readable-to-web-readable-stream/-/node-readable-to-web-readable-stream-0.4.2.tgz",
8349
+ "integrity": "sha512-/cMZNI34v//jUTrI+UIo4ieHAB5EZRY/+7OmXZgBxaWBMcW2tGdceIw06RFxWxrKZ5Jp3sI2i5TsRo+CBhtVLQ==",
8350
+ "license": "MIT",
8351
+ "optional": true
8352
+ },
8095
8353
  "node_modules/node-releases": {
8096
8354
  "version": "2.0.19",
8097
8355
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
@@ -8247,6 +8505,19 @@
8247
8505
  "node": ">=8"
8248
8506
  }
8249
8507
  },
8508
+ "node_modules/pdfjs-dist": {
8509
+ "version": "5.5.207",
8510
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.5.207.tgz",
8511
+ "integrity": "sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw==",
8512
+ "license": "Apache-2.0",
8513
+ "engines": {
8514
+ "node": ">=20.19.0 || >=22.13.0 || >=24"
8515
+ },
8516
+ "optionalDependencies": {
8517
+ "@napi-rs/canvas": "^0.1.95",
8518
+ "node-readable-to-web-readable-stream": "^0.4.2"
8519
+ }
8520
+ },
8250
8521
  "node_modules/picocolors": {
8251
8522
  "version": "1.1.1",
8252
8523
  "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -22,6 +22,7 @@
22
22
  "i18next-browser-languagedetector": "^8.0.2",
23
23
  "i18next-http-backend": "^3.0.1",
24
24
  "jodit-react": "^5.2.37",
25
+ "pdfjs-dist": "^5.5.207",
25
26
  "pretty-bytes": "^7.0.0",
26
27
  "quill": "^2.0.3",
27
28
  "react": "^18.3.1",
@@ -19,9 +19,14 @@
19
19
  "update": "ይዘው ይመለከቱ",
20
20
  "view": "ፋይል ለመሰየም ተለይቷል (ለመከታተል ይደግፉ)",
21
21
  "file": {
22
+ "download": "ይቅርታ",
23
+ "dragOrClick": "ግንባር እና ወይንን ወይም ለመምረጥ ጠቅ ይዙ",
24
+ "dropHere": "ፋይሉን እዚህ ታይ",
22
25
  "markedForDeletion": "ይዘው/ይወርድ",
23
- "viewOrDownload": "አዲስ ፋይል መምረጥ ይባላል የእንደኋላውን ይቀይራል",
24
- "replaceWarning": "መዝግብ መለዮ {{id}} በተሳካ መልኩ ተፍጥሯል"
26
+ "openInNewWindow": "አዳብር በአዲስ መስክ",
27
+ "removeSelection": "ምርጫ ይኖርበት አፈር",
28
+ "replaceWarning": "መዝግብ መለዮ {{id}} በተሳካ መልኩ ተፍጥሯል",
29
+ "viewOrDownload": "አዲስ ፋይል መምረጥ ይባላል የእንደኋላውን ይቀይራል"
25
30
  },
26
31
  "successfullyCreated": "መዝግብ መለዮ {{id}} በተሳካ መልኩ አዳዲስ ተደርጎ ተማርዖል",
27
32
  "successfullyUpdated": "መዝግብ መለዮ {{id}} በተሳካ መልኩ ተነሳል",
@@ -19,9 +19,14 @@
19
19
  "update": "تحديث",
20
20
  "view": "عرض",
21
21
  "file": {
22
+ "download": "تحميل",
23
+ "dragOrClick": "اسحب وأفلت أو انقر للاختيار",
24
+ "dropHere": "اسقط الملف هنا",
22
25
  "markedForDeletion": "الملف محدد للحذف (احفظ لتأكيد)",
23
- "viewOrDownload": "عرض/تنزيل",
24
- "replaceWarning": "اختيار ملف جديد سيستبدل الملف الحالي"
26
+ "openInNewWindow": "فتح في نافذة جديدة",
27
+ "removeSelection": "إزالة الاختيار",
28
+ "replaceWarning": "اختيار ملف جديد سيستبدل الملف الحالي",
29
+ "viewOrDownload": "عرض/تنزيل"
25
30
  },
26
31
  "successfullyCreated": "تم إنشاء سجل ID {{id}} بنجاح",
27
32
  "successfullyUpdated": "تم تحديث سجل ID {{id}} بنجاح",
@@ -19,9 +19,14 @@
19
19
  "update": "Yenilə",
20
20
  "view": "Görüntülə",
21
21
  "file": {
22
+ "download": "Yüklə",
23
+ "dragOrClick": "Sürüşdür və burax və ya seçmək üçün vur",
24
+ "dropHere": "Faylı bura burax",
22
25
  "markedForDeletion": "Silinməsi üçün qeyd edilmiş fayl (Təsdiq etmək üçün saxla)",
23
- "viewOrDownload": "Görüntülə/Yüklə",
24
- "replaceWarning": "Yeni bir fayl seçmək, mövcudunu əvəzləyəcək"
26
+ "openInNewWindow": "Yeni pəncərədə aç",
27
+ "removeSelection": "Seçimi sil",
28
+ "replaceWarning": "Yeni bir fayl seçmək, mövcudunu əvəzləyəcək",
29
+ "viewOrDownload": "Görüntülə/Yüklə"
25
30
  },
26
31
  "successfullyCreated": "Qeyd ID {{id}} uğurla yaradıldı",
27
32
  "successfullyUpdated": "Qeyd ID {{id}} uğurla yeniləndi",
@@ -19,9 +19,14 @@
19
19
  "update": "Актуализиране",
20
20
  "view": "Преглед",
21
21
  "file": {
22
+ "download": "Изтегляне",
23
+ "dragOrClick": "Плъзнете и пуснете или кликнете, за да изберете",
24
+ "dropHere": "Пуснете файла тук",
22
25
  "markedForDeletion": "Файлът е маркиран за изтриване (Запазете, за да потвърдите)",
23
- "viewOrDownload": "Преглед/Изтегляне",
24
- "replaceWarning": "Избор на нов файл ще замени съществуващия"
26
+ "openInNewWindow": "Отворете в нов прозорец",
27
+ "removeSelection": "Премахнете избора",
28
+ "replaceWarning": "Избор на нов файл ще замени съществуващия",
29
+ "viewOrDownload": "Преглед/Изтегляне"
25
30
  },
26
31
  "successfullyCreated": "Запис ID {{id}} успешно създаден",
27
32
  "successfullyUpdated": "Запис ID {{id}} успешно актуализиран",
@@ -19,9 +19,14 @@
19
19
  "update": "আপডেট করুন",
20
20
  "view": "দৃশ্যমান",
21
21
  "file": {
22
+ "download": "ডাউনলোড",
23
+ "dragOrClick": "ড্র্যাগ এবং ড্রপ বা নির্বাচন করতে ক্লিক করুন",
24
+ "dropHere": "ফাইলটি এখানে ফেলুন",
22
25
  "markedForDeletion": "ফাইল মুছে ফেলার জন্য চিহ্নিত (নিশ্চিত করতে সংরক্ষণ করুন)",
23
- "viewOrDownload": "দৃশ্য/ডাউনলোড",
24
- "replaceWarning": "নতুন ফাইল নির্বাচন করলে বিদ্যমানটি প্রতিস্থাপন হবে"
26
+ "openInNewWindow": "নতুন উইন্ডোতে খুলুন",
27
+ "removeSelection": "নির্বাচন মুছুন",
28
+ "replaceWarning": "নতুন ফাইল নির্বাচন করলে বিদ্যমানটি প্রতিস্থাপন হবে",
29
+ "viewOrDownload": "দৃশ্য/ডাউনলোড"
25
30
  },
26
31
  "successfullyCreated": "রেকর্ড আইডি {{id}} সফলভাবে তৈরি করা হয়েছে",
27
32
  "successfullyUpdated": "রেকর্ড আইডি {{id}} সফলভাবে আপডেট করা হয়েছে",
@@ -19,9 +19,14 @@
19
19
  "update": "Actualitzar",
20
20
  "view": "Veure",
21
21
  "file": {
22
+ "download": "Descarregar",
23
+ "dragOrClick": "Arrossega i deixa anar o fes clic per seleccionar",
24
+ "dropHere": "Deixa caure el fitxer aquí",
22
25
  "markedForDeletion": "Fitxer marcat per a l'eliminació (Desa per confirmar)",
23
- "viewOrDownload": "Veure/Descarregar",
24
- "replaceWarning": "Seleccionar un nou fitxer reemplaçarà l'existent"
26
+ "openInNewWindow": "Obrir en una nova finestra",
27
+ "removeSelection": "Eliminar selecció",
28
+ "replaceWarning": "Seleccionar un nou fitxer reemplaçarà l'existent",
29
+ "viewOrDownload": "Veure/Descarregar"
25
30
  },
26
31
  "successfullyCreated": "ID de registre {{id}} creat amb èxit",
27
32
  "successfullyUpdated": "ID de registre {{id}} actualitzat amb èxit",
@@ -19,9 +19,14 @@
19
19
  "update": "Aktualizovat",
20
20
  "view": "Zobrazit",
21
21
  "file": {
22
+ "download": "Stáhnout",
23
+ "dragOrClick": "Přetáhněte a pusťte nebo klikněte pro výběr",
24
+ "dropHere": "Pusťte soubor sem",
22
25
  "markedForDeletion": "Soubor označen k odstranění (Uložit pro potvrzení)",
23
- "viewOrDownload": "Zobrazit/stáhnout",
24
- "replaceWarning": "Výběr nového souboru nahradí stávající"
26
+ "openInNewWindow": "Otevřít v novém okně",
27
+ "removeSelection": "Odstranit výběr",
28
+ "replaceWarning": "Výběr nového souboru nahradí stávající",
29
+ "viewOrDownload": "Zobrazit/stáhnout"
25
30
  },
26
31
  "successfullyCreated": "Záznam ID {{id}} byl úspěšně vytvořen",
27
32
  "successfullyUpdated": "Záznam ID {{id}} byl úspěšně aktualizován",
@@ -19,9 +19,14 @@
19
19
  "update": "Diweddaru",
20
20
  "view": "Gweld",
21
21
  "file": {
22
+ "download": "Dewiso",
23
+ "dragOrClick": "Tynnu a rhoi neu glicio i ddewis",
24
+ "dropHere": "Gwylio'r ffeil yma",
22
25
  "markedForDeletion": "Ffeil wedi'i nodi ar gyfer dileu (Cadwch i gadarnhau)",
23
- "viewOrDownload": "Gweld/Llwytho i lawr",
24
- "replaceWarning": "Dewis ffeil newydd a fydd yn disodli'r un presennol"
26
+ "openInNewWindow": "Agor mewn ffenestr newydd",
27
+ "removeSelection": "Dileu dewis",
28
+ "replaceWarning": "Dewis ffeil newydd a fydd yn disodli'r un presennol",
29
+ "viewOrDownload": "Gweld/Llwytho i lawr"
25
30
  },
26
31
  "successfullyCreated": "Rhoddir ID cofrestr {{id}} yn llwyddiannus",
27
32
  "successfullyUpdated": "Rhoddir ID cofrestr {{id}} wedi'i ddiweddaru'n llwyddiannus",
@@ -19,9 +19,14 @@
19
19
  "update": "Opdater",
20
20
  "view": "Vis",
21
21
  "file": {
22
+ "download": "Download",
23
+ "dragOrClick": "Træk og slip eller klik for at vælge",
24
+ "dropHere": "Slip filen her",
22
25
  "markedForDeletion": "Fil markeret til sletning (Gem for at bekræfte)",
23
- "viewOrDownload": "Vis/Download",
24
- "replaceWarning": "Valg af en ny fil vil erstatte den eksisterende"
26
+ "openInNewWindow": "Åbn i nyt vindue",
27
+ "removeSelection": "Fjern valg",
28
+ "replaceWarning": "Valg af en ny fil vil erstatte den eksisterende",
29
+ "viewOrDownload": "Vis/Download"
25
30
  },
26
31
  "successfullyCreated": "Post ID {{id}} oprettet med succes",
27
32
  "successfullyUpdated": "Post ID {{id}} opdateret med succes",
@@ -19,9 +19,14 @@
19
19
  "update": "Aktualisieren",
20
20
  "view": "Anzeigen",
21
21
  "file": {
22
+ "download": "Herunterladen",
23
+ "dragOrClick": "Ziehen und ablegen oder klicken, um auszuwählen",
24
+ "dropHere": "Legen Sie die Datei hier ab",
22
25
  "markedForDeletion": "Datei zur Löschung markiert (Speichern um zu bestätigen)",
23
- "viewOrDownload": "Anzeigen/Herunterladen",
24
- "replaceWarning": "Die Auswahl einer neuen Datei ersetzt die vorhandene"
26
+ "openInNewWindow": "In neuem Fenster öffnen",
27
+ "removeSelection": "Auswahl entfernen",
28
+ "replaceWarning": "Die Auswahl einer neuen Datei ersetzt die vorhandene",
29
+ "viewOrDownload": "Anzeigen/Herunterladen"
25
30
  },
26
31
  "successfullyCreated": "Datensatz-ID {{id}} erfolgreich erstellt",
27
32
  "successfullyUpdated": "Datensatz-ID {{id}} erfolgreich aktualisiert",
@@ -19,9 +19,14 @@
19
19
  "update": "Ενημέρωση",
20
20
  "view": "Προβολή",
21
21
  "file": {
22
+ "download": "Λήψη",
23
+ "dragOrClick": "Σύρε και άφησε ή κάνε κλικ για να επιλέξεις",
24
+ "dropHere": "Απέλυψε το αρχείο εδώ",
22
25
  "markedForDeletion": "Αρχείο σημειωμένο για διαγραφή (Αποθήκευση για επιβεβαίωση)",
23
- "viewOrDownload": "Προβολή/Λήψη",
24
- "replaceWarning": "Η επιλογή νέου αρχείου θα αντικαταστήσει το υπάρχον"
26
+ "openInNewWindow": "Άνοιγμα σε νέο παράθυρο",
27
+ "removeSelection": "Αφαίρεση επιλογής",
28
+ "replaceWarning": "Η επιλογή νέου αρχείου θα αντικαταστήσει το υπάρχον",
29
+ "viewOrDownload": "Προβολή/Λήψη"
25
30
  },
26
31
  "successfullyCreated": "Η εγγραφή ID {{id}} δημιουργήθηκε με επιτυχία",
27
32
  "successfullyUpdated": "Η εγγραφή ID {{id}} ενημερώθηκε με επιτυχία",
@@ -19,9 +19,14 @@
19
19
  "update": "Update",
20
20
  "view": "View",
21
21
  "file": {
22
+ "download": "Download",
23
+ "dragOrClick": "Drag & drop or click to select",
24
+ "dropHere": "Drop the file here",
22
25
  "markedForDeletion": "File marked for deletion (Save to confirm)",
23
- "viewOrDownload": "View/Download",
24
- "replaceWarning": "Selecting a new file will replace the existing one"
26
+ "openInNewWindow": "Open in new window",
27
+ "removeSelection": "Remove selection",
28
+ "replaceWarning": "Selecting a new file will replace the existing one",
29
+ "viewOrDownload": "View/Download"
25
30
  },
26
31
  "successfullyCreated": "Record ID {{id}} successfully created",
27
32
  "successfullyUpdated": "Record ID {{id}} successfully updated",
@@ -19,9 +19,14 @@
19
19
  "update": "Actualizar",
20
20
  "view": "Ver",
21
21
  "file": {
22
+ "download": "Descargar",
23
+ "dragOrClick": "Arrastrar y soltar o hacer clic para seleccionar",
24
+ "dropHere": "Suelta el archivo aquí",
22
25
  "markedForDeletion": "Archivo marcado para eliminación (Guardar para confirmar)",
23
- "viewOrDownload": "Ver/Descargar",
24
- "replaceWarning": "Seleccionar un nuevo archivo reemplazará el existente"
26
+ "openInNewWindow": "Abrir en una nueva ventana",
27
+ "removeSelection": "Eliminar selección",
28
+ "replaceWarning": "Seleccionar un nuevo archivo reemplazará el existente",
29
+ "viewOrDownload": "Ver/Descargar"
25
30
  },
26
31
  "successfullyCreated": "Registro ID {{id}} creado con éxito",
27
32
  "successfullyUpdated": "Registro ID {{id}} actualizado con éxito",
@@ -19,9 +19,14 @@
19
19
  "update": "Uuenda",
20
20
  "view": "Vaada",
21
21
  "file": {
22
+ "download": "Laadi alla",
23
+ "dragOrClick": "Looja ja lohista või kliki valimiseks",
24
+ "dropHere": "Aseta fail siia",
22
25
  "markedForDeletion": "Fail märgistatud kustutamiseks (Salvesta kinnitamiseks)",
23
- "viewOrDownload": "Vaata/Laadi alla",
24
- "replaceWarning": "Uue faili valimine asendab olemasoleva"
26
+ "openInNewWindow": "Ava uues aknas",
27
+ "removeSelection": "Eemalda valik",
28
+ "replaceWarning": "Uue faili valimine asendab olemasoleva",
29
+ "viewOrDownload": "Vaata/Laadi alla"
25
30
  },
26
31
  "successfullyCreated": "Kande ID {{id}} edukalt loodud",
27
32
  "successfullyUpdated": "Kande ID {{id}} edukalt uuendatud",
@@ -19,9 +19,14 @@
19
19
  "update": "Eguneratu",
20
20
  "view": "Ikusi",
21
21
  "file": {
22
+ "download": "Deskargatu",
23
+ "dragOrClick": "Arrastatu eta laga edo klikatu hautatzeko",
24
+ "dropHere": "Froga hemen laga",
22
25
  "markedForDeletion": "Fitxategia ezabatzekoa markatuta (Gorde egiaztatzeko)",
23
- "viewOrDownload": "Ikusi/Deskargatu",
24
- "replaceWarning": "Fitxategi berri bat hautatzeak egungo fitxategia ordezkatuko du"
26
+ "openInNewWindow": "Leiho berri batean ireki",
27
+ "removeSelection": "Hautaketa kendu",
28
+ "replaceWarning": "Fitxategi berri bat hautatzeak egungo fitxategia ordezkatuko du",
29
+ "viewOrDownload": "Ikusi/Deskargatu"
25
30
  },
26
31
  "successfullyCreated": "Erregistro ID-a {{id}} arrakastaz sortu da",
27
32
  "successfullyUpdated": "Erregistro ID-a {{id}} arrakastaz eguneratu da",
@@ -19,9 +19,14 @@
19
19
  "update": "به‌روزرسانی",
20
20
  "view": "مشاهده",
21
21
  "file": {
22
+ "download": "دانلود",
23
+ "dragOrClick": "بکش و رها کن یا کلیک کنید تا انتخاب کنید",
24
+ "dropHere": "فایل را اینجا رها کنید",
22
25
  "markedForDeletion": "فایل برای حذف علامت‌گذاری شده است (ذخیره‌سازی برای تأیید)",
23
- "viewOrDownload": "مشاهده/دانلود",
24
- "replaceWarning": "انتخاب یک فایل جدید فایل موجود را جایگزین خواهد کرد"
26
+ "openInNewWindow": "در پنجره جدید باز کنید",
27
+ "removeSelection": "انتخاب را حذف کنید",
28
+ "replaceWarning": "انتخاب یک فایل جدید فایل موجود را جایگزین خواهد کرد",
29
+ "viewOrDownload": "مشاهده/دانلود"
25
30
  },
26
31
  "successfullyCreated": "شناسه رکورد {{id}} با موفقیت ایجاد شد",
27
32
  "successfullyUpdated": "شناسه رکورد {{id}} با موفقیت به‌روزرسانی شد",