@mapomodule/form 2.0.0-beta.4 → 2.0.0-beta.6

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 (83) hide show
  1. package/README.md +2 -1
  2. package/dist/index.d.mts +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/module.d.ts.map +1 -1
  6. package/dist/module.json +1 -1
  7. package/dist/module.mjs +16 -1
  8. package/dist/runtime/components/MapoFocusPortal.vue +3 -1
  9. package/dist/runtime/components/MapoFocusPortal.vue.d.ts.map +1 -1
  10. package/dist/runtime/components/MapoFormTabs.vue +4 -2
  11. package/dist/runtime/components/MapoFormTabs.vue.d.ts.map +1 -1
  12. package/dist/runtime/components/fields/MapoDateField.vue +3 -1
  13. package/dist/runtime/components/fields/MapoDateField.vue.d.ts.map +1 -1
  14. package/dist/runtime/components/fields/MapoDateTimeField.vue +5 -3
  15. package/dist/runtime/components/fields/MapoDateTimeField.vue.d.ts.map +1 -1
  16. package/dist/runtime/components/fields/MapoEnhancedMediaField.vue +130 -0
  17. package/dist/runtime/components/fields/MapoEnhancedMediaField.vue.d.ts +16 -0
  18. package/dist/runtime/components/fields/MapoEnhancedMediaField.vue.d.ts.map +1 -0
  19. package/dist/runtime/components/fields/MapoFileField.vue +3 -1
  20. package/dist/runtime/components/fields/MapoFileField.vue.d.ts.map +1 -1
  21. package/dist/runtime/components/fields/MapoFksField.vue +6 -2
  22. package/dist/runtime/components/fields/MapoFksField.vue.d.ts.map +1 -1
  23. package/dist/runtime/components/fields/MapoMapField.vue +4 -2
  24. package/dist/runtime/components/fields/MapoMapField.vue.d.ts.map +1 -1
  25. package/dist/runtime/components/fields/MapoMediaField.vue +91 -0
  26. package/dist/runtime/components/fields/MapoMediaField.vue.d.ts +16 -0
  27. package/dist/runtime/components/fields/MapoMediaField.vue.d.ts.map +1 -0
  28. package/dist/runtime/components/fields/MapoMediaM2mField.vue +110 -0
  29. package/dist/runtime/components/fields/MapoMediaM2mField.vue.d.ts +16 -0
  30. package/dist/runtime/components/fields/MapoMediaM2mField.vue.d.ts.map +1 -0
  31. package/dist/runtime/components/fields/MapoMediaUnavailable.vue +15 -0
  32. package/dist/runtime/components/fields/MapoMediaUnavailable.vue.d.ts +4 -0
  33. package/dist/runtime/components/fields/MapoMediaUnavailable.vue.d.ts.map +1 -0
  34. package/dist/runtime/components/fields/MapoRepeater.vue +32 -22
  35. package/dist/runtime/components/fields/MapoRepeater.vue.d.ts.map +1 -1
  36. package/dist/runtime/components/fields/MapoRepeaterItem.vue +13 -8
  37. package/dist/runtime/components/fields/MapoRepeaterItem.vue.d.ts.map +1 -1
  38. package/dist/runtime/components/fields/MapoSeoPreview.vue +16 -12
  39. package/dist/runtime/components/fields/MapoSeoPreview.vue.d.ts.map +1 -1
  40. package/dist/runtime/components/fields/MapoWygEditor.vue +30 -5
  41. package/dist/runtime/components/fields/MapoWygEditor.vue.d.ts.map +1 -1
  42. package/dist/runtime/composables/useMapoForm.d.ts.map +1 -1
  43. package/dist/runtime/composables/useMapoForm.js +4 -2
  44. package/dist/runtime/composables/useMediaManager.d.ts +17 -0
  45. package/dist/runtime/composables/useMediaManager.d.ts.map +1 -0
  46. package/dist/runtime/composables/useMediaManager.js +6 -0
  47. package/dist/runtime/composables/useUnsavedChangesGuard.d.ts.map +1 -1
  48. package/dist/runtime/composables/useUnsavedChangesGuard.js +3 -2
  49. package/dist/runtime/registry/defaults.d.ts.map +1 -1
  50. package/dist/runtime/registry/defaults.js +8 -2
  51. package/dist/runtime/types/descriptor.d.ts +18 -4
  52. package/dist/runtime/types/descriptor.d.ts.map +1 -1
  53. package/dist/runtime/types/index.d.ts +2 -1
  54. package/dist/runtime/types/index.d.ts.map +1 -1
  55. package/dist/runtime/types/media.d.ts +43 -0
  56. package/dist/runtime/types/media.d.ts.map +1 -0
  57. package/dist/runtime/types/media.js +0 -0
  58. package/package.json +9 -6
  59. package/src/__tests__/useMapoForm.test.ts +5 -0
  60. package/src/index.ts +5 -0
  61. package/src/module.ts +24 -0
  62. package/src/runtime/components/MapoFocusPortal.vue +3 -1
  63. package/src/runtime/components/MapoFormTabs.vue +4 -1
  64. package/src/runtime/components/fields/MapoDateField.vue +3 -1
  65. package/src/runtime/components/fields/MapoDateTimeField.vue +3 -1
  66. package/src/runtime/components/fields/MapoEnhancedMediaField.vue +153 -0
  67. package/src/runtime/components/fields/MapoFileField.vue +3 -1
  68. package/src/runtime/components/fields/MapoFksField.vue +7 -2
  69. package/src/runtime/components/fields/MapoMapField.vue +5 -2
  70. package/src/runtime/components/fields/MapoMediaField.vue +104 -0
  71. package/src/runtime/components/fields/MapoMediaM2mField.vue +130 -0
  72. package/src/runtime/components/fields/MapoMediaUnavailable.vue +19 -0
  73. package/src/runtime/components/fields/MapoRepeater.vue +33 -26
  74. package/src/runtime/components/fields/MapoRepeaterItem.vue +14 -8
  75. package/src/runtime/components/fields/MapoSeoPreview.vue +17 -13
  76. package/src/runtime/components/fields/MapoWygEditor.vue +47 -5
  77. package/src/runtime/composables/useMapoForm.ts +4 -2
  78. package/src/runtime/composables/useMediaManager.ts +21 -0
  79. package/src/runtime/composables/useUnsavedChangesGuard.ts +3 -3
  80. package/src/runtime/registry/defaults.ts +9 -1
  81. package/src/runtime/types/descriptor.ts +22 -7
  82. package/src/runtime/types/index.ts +4 -0
  83. package/src/runtime/types/media.ts +44 -0
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Resolves the Media Manager picker dialog at runtime.
3
+ *
4
+ * The media field types ship with `@mapomodule/form`, but the Media Manager
5
+ * itself lives in `@mapomodule/uikit`. Resolving the dialog by name instead of
6
+ * importing it keeps `form` free of a static dependency on `uikit` (which
7
+ * depends on `form`, so a static import would be a cycle) and lets `form` stay
8
+ * usable standalone — the fields then render an explicit notice instead of a
9
+ * broken picker.
10
+ *
11
+ * Must be called from `setup()`.
12
+ */
13
+ export declare function useMediaManager(): {
14
+ MediaDialog: string | import("vue").ConcreteComponent<{}, any, any, import("vue").ComputedOptions, import("vue").MethodOptions, {}, any>;
15
+ available: boolean;
16
+ };
17
+ //# sourceMappingURL=useMediaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaManager.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useMediaManager.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe;;;EAM9B"}
@@ -0,0 +1,6 @@
1
+ import { resolveComponent } from "vue";
2
+ export function useMediaManager() {
3
+ const MediaDialog = resolveComponent("MapoMediaManagerDialog");
4
+ const available = typeof MediaDialog !== "string";
5
+ return { MediaDialog, available };
6
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useUnsavedChangesGuard.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useUnsavedChangesGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAGhD,uEAAuE;AACvE,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EACrB,OAAO,GAAE,0BAA+B,QA8BzC"}
1
+ {"version":3,"file":"useUnsavedChangesGuard.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useUnsavedChangesGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAIhD,uEAAuE;AACvE,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EACrB,OAAO,GAAE,0BAA+B,QA6BzC"}
@@ -1,7 +1,8 @@
1
1
  import { onBeforeUnmount } from "vue";
2
- import { onBeforeRouteLeave } from "vue-router";
2
+ import { onBeforeRouteLeave } from "#app";
3
+ import { useMapoT } from "@mapomodule/i18n/runtime/composables/useMapoT";
3
4
  export function useUnsavedChangesGuard(isDirty, options = {}) {
4
- const message = options.message ?? "You have unsaved changes. Do you really want to leave?";
5
+ const message = options.message ?? useMapoT()("mapo.confirmLeaveChanges");
5
6
  const canUseWindow = typeof window !== "undefined";
6
7
  const isEnabled = () => {
7
8
  if (typeof options.enabled === "function") return options.enabled();
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime/registry/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,eAAO,MAAM,eAAe,EAAE,aA0F7B,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime/registry/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,eAAO,MAAM,eAAe,EAAE,aAkG7B,CAAC"}
@@ -22,8 +22,14 @@ export const defaultRegistry = {
22
22
  seo: () => import("../components/fields/MapoSeoPreview.vue"),
23
23
  editor: () => import("../components/fields/MapoWygEditor.vue"),
24
24
  map: () => import("../components/fields/MapoMapField.vue"),
25
- repeater: () => import("../components/fields/MapoRepeater.vue")
26
- // media, media-m2m, enhanced-media: added in Phase 6
25
+ repeater: () => import("../components/fields/MapoRepeater.vue"),
26
+ // ─── Media pickers ────────────────────────────────────────────────────────
27
+ // The fields live here with every other field type; the Media Manager they
28
+ // drive ships with @mapomodule/uikit and is resolved at runtime
29
+ // (see useMediaManager). Without uikit they render an explicit notice.
30
+ media: () => import("../components/fields/MapoMediaField.vue"),
31
+ "media-m2m": () => import("../components/fields/MapoMediaM2mField.vue"),
32
+ "enhanced-media": () => import("../components/fields/MapoEnhancedMediaField.vue")
27
33
  },
28
34
  attrs: {
29
35
  // Applied to all fields
@@ -312,12 +312,26 @@ export interface RepeaterDescriptor<T = Record<string, unknown>> extends FieldBa
312
312
  compressThreshold?: number;
313
313
  };
314
314
  }
315
- /** Descriptor for media/file manager fields. */
315
+ /** Descriptor for a single-media picker field (`type: 'media'`). */
316
316
  export interface MediaDescriptor<T = Record<string, unknown>> extends FieldBase<T> {
317
- type: `${KnownFieldType.Media}` | `${KnownFieldType.MediaM2m}` | `${KnownFieldType.EnhancedMedia}`;
317
+ type: `${KnownFieldType.Media}`;
318
+ attrs?: {
319
+ mime?: string;
320
+ };
321
+ }
322
+ /** Descriptor for a multi-media picker field (`type: 'media-m2m'`). */
323
+ export interface MediaM2mDescriptor<T = Record<string, unknown>> extends FieldBase<T> {
324
+ type: `${KnownFieldType.MediaM2m}`;
325
+ attrs?: {
326
+ mime?: string;
327
+ maxItems?: number;
328
+ };
329
+ }
330
+ /** Descriptor for a media picker with inline alt/caption metadata (`type: 'enhanced-media'`). */
331
+ export interface EnhancedMediaDescriptor<T = Record<string, unknown>> extends FieldBase<T> {
332
+ type: `${KnownFieldType.EnhancedMedia}`;
318
333
  attrs?: {
319
334
  mime?: string;
320
- multiple?: boolean;
321
335
  };
322
336
  }
323
337
  /**
@@ -344,7 +358,7 @@ export interface CustomDescriptor<T = Record<string, unknown>> extends FieldBase
344
358
  * { key: 'body', type: KnownFieldType.Editor, label: 'Body', translatable: true },
345
359
  * ]
346
360
  */
347
- export type FieldDescriptor<T = Record<string, unknown>> = TextDescriptor<T> | NumberDescriptor<T> | BooleanDescriptor<T> | SelectDescriptor<T> | FksDescriptor<T> | DateDescriptor<T> | ColorDescriptor<T> | FileDescriptor<T> | EditorDescriptor<T> | SeoDescriptor<T> | MapDescriptor<T> | RepeaterDescriptor<T> | MediaDescriptor<T>;
361
+ export type FieldDescriptor<T = Record<string, unknown>> = TextDescriptor<T> | NumberDescriptor<T> | BooleanDescriptor<T> | SelectDescriptor<T> | FksDescriptor<T> | DateDescriptor<T> | ColorDescriptor<T> | FileDescriptor<T> | EditorDescriptor<T> | SeoDescriptor<T> | MapDescriptor<T> | RepeaterDescriptor<T> | MediaDescriptor<T> | MediaM2mDescriptor<T> | EnhancedMediaDescriptor<T>;
348
362
  /**
349
363
  * {@link FieldDescriptor} plus the {@link CustomDescriptor} escape hatch.
350
364
  *
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/descriptor.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * and registry helpers.
5
5
  */
6
6
  export { KnownFieldType } from "./descriptor.js";
7
- export type { FieldType, FieldAccessor, FieldDescriptor, AnyFieldDescriptor, TextDescriptor, NumberDescriptor, BooleanDescriptor, SelectDescriptor, FksDescriptor, DateDescriptor, ColorDescriptor, FileDescriptor, EditorDescriptor, SeoDescriptor, MapDescriptor, RepeaterDescriptor, MediaDescriptor, CustomDescriptor, } from "./descriptor.js";
7
+ export type { FieldType, FieldAccessor, FieldDescriptor, AnyFieldDescriptor, TextDescriptor, NumberDescriptor, BooleanDescriptor, SelectDescriptor, FksDescriptor, DateDescriptor, ColorDescriptor, FileDescriptor, EditorDescriptor, SeoDescriptor, MapDescriptor, RepeaterDescriptor, MediaDescriptor, MediaM2mDescriptor, EnhancedMediaDescriptor, CustomDescriptor, } from "./descriptor.js";
8
+ export type { MediaLink, MediaItem, EnhancedMediaValue } from "./media.js";
8
9
  export type { FieldComponentEntry, FieldRegistry, PartialFieldRegistry, } from "./registry.js";
9
10
  export { resolveFieldComponent, resolveFieldAttrs, resolveFieldAccessor, } from "./registry.js";
10
11
  export type { MapoFormRuntimeConfig } from "./registry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE3E,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Media **value** types — the shape that lands in the form model for the
3
+ * `media`, `media-m2m`, and `enhanced-media` field types.
4
+ *
5
+ * These live in `@mapomodule/form` (next to their descriptors) because they are
6
+ * a form contract, not a Media Manager implementation detail. `@mapomodule/uikit`
7
+ * re-exports them from `runtime/types/media.ts` alongside the store/adapter types
8
+ * so the Media Manager keeps a single import surface.
9
+ */
10
+ /** A model instance referencing a media (Camomilla returns these as `links`). */
11
+ export interface MediaLink {
12
+ model: string;
13
+ id: number;
14
+ name: string;
15
+ }
16
+ export interface MediaItem {
17
+ id: number;
18
+ file: string;
19
+ mime_type: string;
20
+ title: string;
21
+ alt_text: string;
22
+ description: string;
23
+ size: number;
24
+ created: string;
25
+ modified: string;
26
+ folder?: number | null;
27
+ name?: string;
28
+ /** Model instances that reference this media — shown in the editor info panel. */
29
+ links?: MediaLink[];
30
+ translations?: Record<string, {
31
+ title?: string;
32
+ alt_text?: string;
33
+ description?: string;
34
+ }>;
35
+ }
36
+ /** Value of an `enhanced-media` field: a media plus inline caption metadata. */
37
+ export interface EnhancedMediaValue {
38
+ media: MediaItem | null;
39
+ alt?: string;
40
+ caption?: string;
41
+ [key: string]: unknown;
42
+ }
43
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/runtime/types/media.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CACnB,MAAM,EACN;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAC5D,CAAC;CACH;AAED,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapomodule/form",
3
- "version": "2.0.0-beta.4",
3
+ "version": "2.0.0-beta.6",
4
4
  "description": "Mapo declarative typed form engine and field components",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -48,14 +48,17 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "@internationalized/date": "^3.7.0",
51
+ "@mapomodule/i18n": "workspace:*",
51
52
  "@mapomodule/store": "2.0.0-beta.4",
52
- "@mapomodule/utils": "2.0.0-beta.1",
53
+ "@mapomodule/utils": "2.0.0-beta.3",
54
+ "@tiptap/extension-image": "^2.11.5",
53
55
  "@tiptap/extension-link": "^2.11.5",
54
56
  "@tiptap/extension-underline": "^2.11.5",
55
57
  "@tiptap/starter-kit": "^2.11.5",
56
58
  "@tiptap/vue-3": "^2.11.5",
57
59
  "leaflet": "^1.9.4",
58
- "vue-draggable-plus": "^0.6.0"
60
+ "vue-draggable-plus": "^0.6.0",
61
+ "vue-i18n": "^11.4.0"
59
62
  },
60
63
  "optionalDependencies": {
61
64
  "@types/leaflet": "^1.9.18"
@@ -68,10 +71,10 @@
68
71
  "@nuxt/kit": "4.4.2",
69
72
  "@nuxt/module-builder": "^1.0.2",
70
73
  "@nuxt/schema": "4.4.2",
71
- "nuxt": "^4.4.2",
74
+ "nuxt": "^4.5.1",
72
75
  "vitest": "^3.2.0",
73
- "vue": "^3.5.32",
74
- "vue-router": "^5.0.4",
76
+ "vue": "^3.5.40",
77
+ "vue-router": "^5.2.0",
75
78
  "vue-tsc": "^3.3.4",
76
79
  "zod": "^3.23.8"
77
80
  }
@@ -10,6 +10,11 @@ vi.mock("@mapomodule/store/runtime/stores/auth", () => ({
10
10
  vi.mock("@mapomodule/store/runtime/stores/snack", () => ({
11
11
  useSnackStore: () => ({ show: vi.fn() }),
12
12
  }));
13
+ // Pulls in `nuxt/app`, which cannot resolve outside a Nuxt build. Assertions
14
+ // below match on message keys, so echoing the key back is the useful stub.
15
+ vi.mock("@mapomodule/i18n/runtime/composables/useMapoT", () => ({
16
+ useMapoT: () => (key: string) => key,
17
+ }));
13
18
 
14
19
  // provide/inject called outside setup() emits a warning; silence it in tests.
15
20
  beforeEach(() => {
package/src/index.ts CHANGED
@@ -42,7 +42,12 @@ export type {
42
42
  MapDescriptor,
43
43
  RepeaterDescriptor,
44
44
  MediaDescriptor,
45
+ MediaM2mDescriptor,
46
+ EnhancedMediaDescriptor,
45
47
  CustomDescriptor,
48
+ MediaLink,
49
+ MediaItem,
50
+ EnhancedMediaValue,
46
51
  FieldComponentEntry,
47
52
  FieldRegistry,
48
53
  PartialFieldRegistry,
package/src/module.ts CHANGED
@@ -6,6 +6,8 @@ import {
6
6
  createResolver,
7
7
  addImports,
8
8
  extendPages,
9
+ hasNuxtModule,
10
+ installModule,
9
11
  } from "@nuxt/kit";
10
12
  import type { NuxtModule } from "@nuxt/schema";
11
13
  import type { PartialFieldRegistry } from "./runtime/types/index.js";
@@ -40,6 +42,13 @@ export default defineNuxtModule<MapoFormOptions>({
40
42
  /@mapomodule[\\/]form[\\/]/,
41
43
  );
42
44
 
45
+ // Form components render user-facing strings through vue-i18n
46
+ // (`useI18n().t("mapo...")`). @mapomodule/i18n provides the catalogs and
47
+ // installs @nuxtjs/i18n unless the app manages it itself.
48
+ if (!hasNuxtModule("@mapomodule/i18n")) {
49
+ await installModule(await resolver.resolvePath("@mapomodule/i18n"));
50
+ }
51
+
43
52
  // Only serializable values can go into runtimeConfig.public.
44
53
  // `mapping` and `accessor` contain functions → not SSR-serializable.
45
54
  // To extend mapping/accessor, use an app plugin that accesses $mapoFormRegistry:
@@ -121,6 +130,21 @@ export {};
121
130
  });
122
131
  }
123
132
 
133
+ // Media field components — registered so consumers can use them directly,
134
+ // and so MapoMediaUnavailable resolves inside them.
135
+ const mediaFieldComponents = [
136
+ "MapoMediaField",
137
+ "MapoMediaM2mField",
138
+ "MapoEnhancedMediaField",
139
+ "MapoMediaUnavailable",
140
+ ];
141
+ for (const name of mediaFieldComponents) {
142
+ addComponent({
143
+ name,
144
+ filePath: resolver.resolve(`./runtime/components/fields/${name}.vue`),
145
+ });
146
+ }
147
+
124
148
  // Public auto-imported composables
125
149
  addImports([
126
150
  {
@@ -11,9 +11,11 @@
11
11
  */
12
12
  import { computed, ref, onMounted, onUnmounted } from "vue";
13
13
  import { watch } from "vue";
14
+ import { useI18n } from "vue-i18n";
14
15
  import { useFocusMode } from "../composables/useFocusMode.js";
15
16
  import MapoForm from "./MapoForm.vue";
16
17
 
18
+ const { t } = useI18n();
17
19
  const { focusTarget, exit } = useFocusMode();
18
20
 
19
21
  const isOpen = computed(() => focusTarget.value !== null);
@@ -88,7 +90,7 @@ function onUpdate(val: Record<string, unknown>) {
88
90
  variant="ghost"
89
91
  color="neutral"
90
92
  icon="i-lucide-x"
91
- label="Close"
93
+ :label="t('mapo.close')"
92
94
  size="sm"
93
95
  @click="exit"
94
96
  />
@@ -1,10 +1,13 @@
1
1
  <script setup lang="ts">
2
2
  import { ref, computed } from "vue";
3
+ import { useI18n } from "vue-i18n";
3
4
  import type { TabEntry } from "../types/layout.js";
4
5
  import { injectMapoForm } from "../composables/useMapoForm.js";
5
6
  import MapoFormGroup from "./MapoFormGroup.vue";
6
7
  import MapoFormFlatSection from "./MapoFormFlatSection.vue";
7
8
 
9
+ const { t } = useI18n();
10
+
8
11
  const props = defineProps<{ tabs: TabEntry[] }>();
9
12
 
10
13
  defineSlots<Record<string, unknown>>();
@@ -54,7 +57,7 @@ const tabsWithErrors = computed(() => {
54
57
  <span
55
58
  v-if="tabsWithErrors.has(tab.name)"
56
59
  class="inline-block h-1.5 w-1.5 rounded-full bg-red-500"
57
- aria-label="This tab contains errors"
60
+ :aria-label="t('mapo.form.tabErrors')"
58
61
  />
59
62
  </button>
60
63
  <!-- Extra content appended to the tab bar (actions, badges, …). -->
@@ -1,5 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, ref } from "vue";
3
+ import { useI18n } from "vue-i18n";
3
4
  import { parseDate, CalendarDate } from "@internationalized/date";
4
5
  import type { DateDescriptor } from "../../types/index.js";
5
6
 
@@ -14,6 +15,7 @@ const props = defineProps<{
14
15
 
15
16
  const emit = defineEmits<{ "update:modelValue": [value: string | null] }>();
16
17
 
18
+ const { t } = useI18n();
17
19
  const open = ref(false);
18
20
 
19
21
  /** Parsed calendar value derived from the current ISO-like model string. */
@@ -30,7 +32,7 @@ const calendarValue = computed<CalendarDate | undefined>(() => {
30
32
 
31
33
  const displayLabel = computed(() => {
32
34
  const v = calendarValue.value;
33
- if (!v) return "Select date";
35
+ if (!v) return t("mapo.dateField.selectDate");
34
36
  return `${String(v.day).padStart(2, "0")}/${String(v.month).padStart(2, "0")}/${v.year}`;
35
37
  });
36
38
 
@@ -6,6 +6,7 @@ import {
6
6
  today,
7
7
  getLocalTimeZone,
8
8
  } from "@internationalized/date";
9
+ import { useI18n } from "vue-i18n";
9
10
  import type { DateDescriptor } from "../../types/index.js";
10
11
 
11
12
  /** Datetime field with configurable naive/UTC serialisation semantics. */
@@ -19,6 +20,7 @@ const props = defineProps<{
19
20
 
20
21
  const emit = defineEmits<{ "update:modelValue": [value: string | null] }>();
21
22
 
23
+ const { t } = useI18n();
22
24
  const open = ref(false);
23
25
 
24
26
  // Timezone strategy configurable through `descriptor.attrs.tz`:
@@ -72,7 +74,7 @@ function emitFromCalendar(v: CalendarDateTime) {
72
74
  // Displayed label in the trigger button
73
75
  const displayLabel = computed(() => {
74
76
  const v = calendarValue.value;
75
- if (!v) return "Select date and time";
77
+ if (!v) return t("mapo.dateField.selectDateTime");
76
78
  const date = `${String(v.day).padStart(2, "0")}/${String(v.month).padStart(2, "0")}/${v.year}`;
77
79
  const time = `${String(v.hour).padStart(2, "0")}:${String(v.minute).padStart(2, "0")}`;
78
80
  return `${date} ${time}`;
@@ -0,0 +1,153 @@
1
+ <script setup lang="ts">
2
+ import { ref, computed } from "vue";
3
+ import { useI18n } from "vue-i18n";
4
+ import type {
5
+ EnhancedMediaDescriptor,
6
+ EnhancedMediaValue,
7
+ MediaItem,
8
+ } from "../../types/index.js";
9
+ import { useMediaManager } from "../../composables/useMediaManager.js";
10
+
11
+ const props = defineProps<{
12
+ modelValue: EnhancedMediaValue | null | undefined;
13
+ descriptor: EnhancedMediaDescriptor;
14
+ errors?: string[];
15
+ readonly?: boolean;
16
+ disabled?: boolean;
17
+ }>();
18
+
19
+ const emit = defineEmits<{
20
+ "update:modelValue": [value: EnhancedMediaValue | null];
21
+ }>();
22
+
23
+ const { t } = useI18n();
24
+
25
+ const dialogOpen = ref(false);
26
+
27
+ // Picker dialog comes from @mapomodule/uikit, resolved at runtime.
28
+ const { MediaDialog, available } = useMediaManager();
29
+
30
+ const current = computed<MediaItem | null>(
31
+ () => props.modelValue?.media ?? null,
32
+ );
33
+
34
+ const altValue = computed({
35
+ get: () => props.modelValue?.alt ?? "",
36
+ set: (v: string) =>
37
+ emit("update:modelValue", {
38
+ ...(props.modelValue ?? { media: null }),
39
+ alt: v,
40
+ }),
41
+ });
42
+
43
+ const captionValue = computed({
44
+ get: () => props.modelValue?.caption ?? "",
45
+ set: (v: string) =>
46
+ emit("update:modelValue", {
47
+ ...(props.modelValue ?? { media: null }),
48
+ caption: v,
49
+ }),
50
+ });
51
+
52
+ const mime = computed(() => props.descriptor.attrs?.mime as string | undefined);
53
+
54
+ function onConfirm(selection: MediaItem | MediaItem[]) {
55
+ const media = Array.isArray(selection) ? (selection[0] ?? null) : selection;
56
+ emit("update:modelValue", {
57
+ ...(props.modelValue ?? {}),
58
+ media,
59
+ alt: props.modelValue?.alt ?? media?.alt_text ?? "",
60
+ caption: props.modelValue?.caption ?? "",
61
+ });
62
+ }
63
+
64
+ function clear() {
65
+ emit("update:modelValue", null);
66
+ }
67
+ </script>
68
+
69
+ <template>
70
+ <div class="mapo-enhanced-media-field space-y-3">
71
+ <MapoMediaUnavailable v-if="!available" />
72
+
73
+ <template v-else>
74
+ <div class="flex gap-3">
75
+ <!-- Preview -->
76
+ <div class="shrink-0">
77
+ <div
78
+ class="flex size-24 cursor-pointer items-center justify-center overflow-hidden rounded-lg border-2 border-dashed transition-colors"
79
+ :class="
80
+ current
81
+ ? 'border-default'
82
+ : 'border-accented hover:border-primary'
83
+ "
84
+ @click="!readonly && !disabled && (dialogOpen = true)"
85
+ >
86
+ <MapoMediaPreview v-if="current" :media="current" size="md" />
87
+ <div v-else class="flex flex-col items-center gap-1 text-dimmed">
88
+ <UIcon name="i-lucide-image-plus" class="size-7" />
89
+ <span class="text-[10px]">{{ t("mapo.select") }}</span>
90
+ </div>
91
+ </div>
92
+ </div>
93
+
94
+ <!-- Metadata fields -->
95
+ <div class="flex-1 space-y-2">
96
+ <div v-if="current" class="flex items-start justify-between gap-2">
97
+ <p class="truncate text-xs text-muted">
98
+ {{ current.title || current.file?.split("/").pop() }}
99
+ </p>
100
+ <div class="flex gap-1">
101
+ <UButton
102
+ v-if="!readonly && !disabled"
103
+ icon="i-lucide-refresh-cw"
104
+ size="xs"
105
+ variant="ghost"
106
+ color="neutral"
107
+ :title="t('mapo.change')"
108
+ @click="dialogOpen = true"
109
+ />
110
+ <UButton
111
+ v-if="!readonly && !disabled"
112
+ icon="i-lucide-x"
113
+ size="xs"
114
+ variant="ghost"
115
+ color="neutral"
116
+ :title="t('mapo.remove')"
117
+ @click="clear"
118
+ />
119
+ </div>
120
+ </div>
121
+
122
+ <UInput
123
+ v-model="altValue"
124
+ size="sm"
125
+ :placeholder="t('mapo.enhancedMediaField.altText')"
126
+ :disabled="readonly || disabled || !current"
127
+ />
128
+ <UInput
129
+ v-model="captionValue"
130
+ size="sm"
131
+ :placeholder="t('mapo.enhancedMediaField.caption')"
132
+ :disabled="readonly || disabled || !current"
133
+ />
134
+ </div>
135
+ </div>
136
+
137
+ <!-- Dialog -->
138
+ <component
139
+ :is="MediaDialog"
140
+ v-model="dialogOpen"
141
+ selection-mode="single"
142
+ :mime="mime"
143
+ :selected="current"
144
+ @confirm="onConfirm"
145
+ />
146
+ </template>
147
+
148
+ <!-- Errors -->
149
+ <p v-for="err in errors" :key="err" class="text-xs text-error" role="alert">
150
+ {{ err }}
151
+ </p>
152
+ </div>
153
+ </template>
@@ -1,5 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { ref, computed } from "vue";
3
+ import { useI18n } from "vue-i18n";
3
4
  import type { FileDescriptor } from "../../types/index.js";
4
5
 
5
6
  const props = defineProps<{
@@ -12,6 +13,7 @@ const props = defineProps<{
12
13
 
13
14
  const emit = defineEmits<{ "update:modelValue": [value: File | null] }>();
14
15
 
16
+ const { t } = useI18n();
15
17
  const inputRef = ref<HTMLInputElement | null>(null);
16
18
 
17
19
  const currentFileName = computed<string | null>(() => {
@@ -78,7 +80,7 @@ const accept = computed(
78
80
  variant="ghost"
79
81
  color="neutral"
80
82
  icon="i-lucide-x"
81
- aria-label="Remove file"
83
+ :aria-label="t('mapo.fileField.removeFile')"
82
84
  @click="clear"
83
85
  />
84
86
  </div>
@@ -1,5 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { ref, computed, watch, onMounted } from "vue";
3
+ import { useI18n } from "vue-i18n";
3
4
  import { useNuxtApp } from "#app";
4
5
  import { debounce } from "@mapomodule/utils";
5
6
  import type { FksDescriptor } from "../../types/index.js";
@@ -14,6 +15,8 @@ const props = defineProps<{
14
15
 
15
16
  const emit = defineEmits<{ "update:modelValue": [value: unknown] }>();
16
17
 
18
+ const { t } = useI18n();
19
+
17
20
  const attrs = computed(() => props.descriptor.attrs);
18
21
  const isMultiple = computed(
19
22
  () => props.descriptor.type === "m2m" || !!attrs.value.multiple,
@@ -70,7 +73,7 @@ const internalValue = computed({
70
73
 
71
74
  // Placeholder
72
75
  const placeholder = computed(() =>
73
- isMultiple.value ? "Search and select..." : "Search...",
76
+ isMultiple.value ? t("mapo.fksField.searchSelect") : t("mapo.search"),
74
77
  );
75
78
 
76
79
  // Chip text shown in the trigger.
@@ -144,7 +147,9 @@ function getItemKey(item: unknown): unknown {
144
147
  <!-- Empty state -->
145
148
  <template #empty>
146
149
  <span class="text-sm text-gray-500">
147
- {{ searchTerm ? "No results found" : "No items available" }}
150
+ {{
151
+ searchTerm ? t("mapo.fksField.noResults") : t("mapo.fksField.noItems")
152
+ }}
148
153
  </span>
149
154
  </template>
150
155
  </USelectMenu>