@mapomodule/form 2.0.0-beta.1 → 2.0.0-beta.11
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.
- package/README.md +37 -118
- package/dist/__tests__/__mocks__/nuxt-imports.d.ts +4 -0
- package/dist/__tests__/__mocks__/nuxt-imports.d.ts.map +1 -0
- package/dist/__tests__/camomillaRoundTrip.test.d.ts +2 -0
- package/dist/__tests__/camomillaRoundTrip.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.d.ts +2 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/tabVisibility.test.d.ts +2 -0
- package/dist/__tests__/tabVisibility.test.d.ts.map +1 -0
- package/dist/__tests__/useFormFromSchema.test.d.ts +2 -0
- package/dist/__tests__/useFormFromSchema.test.d.ts.map +1 -0
- package/dist/__tests__/useMapoForm.test.d.ts +2 -0
- package/dist/__tests__/useMapoForm.test.d.ts.map +1 -0
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +7 -34
- package/dist/module.d.mts +20 -2
- package/dist/module.d.ts +12 -2
- package/dist/module.d.ts.map +1 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +187 -13
- package/dist/runtime/components/MapoFocusPortal.vue +115 -0
- package/dist/runtime/components/MapoFocusPortal.vue.d.ts +4 -0
- package/dist/runtime/components/MapoFocusPortal.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoForm.vue +177 -0
- package/dist/runtime/components/MapoForm.vue.d.ts +47 -0
- package/dist/runtime/components/MapoForm.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoFormField.vue +269 -0
- package/dist/runtime/components/MapoFormField.vue.d.ts +46 -0
- package/dist/runtime/components/MapoFormField.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoFormFlatSection.vue +149 -0
- package/dist/runtime/components/MapoFormFlatSection.vue.d.ts +15 -0
- package/dist/runtime/components/MapoFormFlatSection.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoFormGroup.vue +247 -0
- package/dist/runtime/components/MapoFormGroup.vue.d.ts +44 -0
- package/dist/runtime/components/MapoFormGroup.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoFormTabs.vue +122 -0
- package/dist/runtime/components/MapoFormTabs.vue.d.ts +15 -0
- package/dist/runtime/components/MapoFormTabs.vue.d.ts.map +1 -0
- package/dist/runtime/components/MapoUnknownField.vue +62 -0
- package/dist/runtime/components/MapoUnknownField.vue.d.ts +16 -0
- package/dist/runtime/components/MapoUnknownField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoDateField.vue +88 -0
- package/dist/runtime/components/fields/MapoDateField.vue.d.ts +17 -0
- package/dist/runtime/components/fields/MapoDateField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoDateTimeField.vue +159 -0
- package/dist/runtime/components/fields/MapoDateTimeField.vue.d.ts +17 -0
- package/dist/runtime/components/fields/MapoDateTimeField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoEnhancedMediaField.vue +130 -0
- package/dist/runtime/components/fields/MapoEnhancedMediaField.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoEnhancedMediaField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoFileField.vue +99 -0
- package/dist/runtime/components/fields/MapoFileField.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoFileField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoFksField.vue +122 -0
- package/dist/runtime/components/fields/MapoFksField.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoFksField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoMapField.vue +99 -0
- package/dist/runtime/components/fields/MapoMapField.vue.d.ts +22 -0
- package/dist/runtime/components/fields/MapoMapField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoMapFieldClient.vue +67 -0
- package/dist/runtime/components/fields/MapoMapFieldClient.vue.d.ts +20 -0
- package/dist/runtime/components/fields/MapoMapFieldClient.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoMediaField.vue +93 -0
- package/dist/runtime/components/fields/MapoMediaField.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoMediaField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoMediaM2mField.vue +111 -0
- package/dist/runtime/components/fields/MapoMediaM2mField.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoMediaM2mField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoMediaUnavailable.vue +15 -0
- package/dist/runtime/components/fields/MapoMediaUnavailable.vue.d.ts +4 -0
- package/dist/runtime/components/fields/MapoMediaUnavailable.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoRepeater.vue +459 -0
- package/dist/runtime/components/fields/MapoRepeater.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoRepeater.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoRepeaterItem.vue +346 -0
- package/dist/runtime/components/fields/MapoRepeaterItem.vue.d.ts +55 -0
- package/dist/runtime/components/fields/MapoRepeaterItem.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoSeoPreview.vue +122 -0
- package/dist/runtime/components/fields/MapoSeoPreview.vue.d.ts +22 -0
- package/dist/runtime/components/fields/MapoSeoPreview.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoTimeField.vue +44 -0
- package/dist/runtime/components/fields/MapoTimeField.vue.d.ts +17 -0
- package/dist/runtime/components/fields/MapoTimeField.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/MapoWygEditor.vue +258 -0
- package/dist/runtime/components/fields/MapoWygEditor.vue.d.ts +16 -0
- package/dist/runtime/components/fields/MapoWygEditor.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiCheckbox.vue +9 -0
- package/dist/runtime/components/fields/nui/NuiCheckbox.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiCheckbox.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiInput.vue +9 -0
- package/dist/runtime/components/fields/nui/NuiInput.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiInput.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiSelectMenu.vue +18 -0
- package/dist/runtime/components/fields/nui/NuiSelectMenu.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiSelectMenu.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiSlider.vue +9 -0
- package/dist/runtime/components/fields/nui/NuiSlider.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiSlider.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiSwitch.vue +9 -0
- package/dist/runtime/components/fields/nui/NuiSwitch.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiSwitch.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/NuiTextarea.vue +9 -0
- package/dist/runtime/components/fields/nui/NuiTextarea.vue.d.ts +4 -0
- package/dist/runtime/components/fields/nui/NuiTextarea.vue.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/useNuiFieldAttrs.d.ts +13 -0
- package/dist/runtime/components/fields/nui/useNuiFieldAttrs.d.ts.map +1 -0
- package/dist/runtime/components/fields/nui/useNuiFieldAttrs.js +19 -0
- package/dist/runtime/composables/defineFormField.d.ts +25 -0
- package/dist/runtime/composables/defineFormField.d.ts.map +1 -0
- package/dist/runtime/composables/defineFormField.js +27 -0
- package/dist/runtime/composables/useCurrentLang.d.ts +6 -0
- package/dist/runtime/composables/useCurrentLang.d.ts.map +1 -0
- package/dist/runtime/composables/useCurrentLang.js +9 -0
- package/dist/runtime/composables/useFocusMode.d.ts +40 -0
- package/dist/runtime/composables/useFocusMode.d.ts.map +1 -0
- package/dist/runtime/composables/useFocusMode.js +31 -0
- package/dist/runtime/composables/useFormDraft.d.ts +60 -0
- package/dist/runtime/composables/useFormDraft.d.ts.map +1 -0
- package/dist/runtime/composables/useFormDraft.js +52 -0
- package/dist/runtime/composables/useFormFromSchema.d.ts +21 -0
- package/dist/runtime/composables/useFormFromSchema.d.ts.map +1 -0
- package/dist/runtime/composables/useFormFromSchema.js +145 -0
- package/dist/runtime/composables/useMapoForm.d.ts +96 -0
- package/dist/runtime/composables/useMapoForm.d.ts.map +1 -0
- package/dist/runtime/composables/useMapoForm.js +325 -0
- package/dist/runtime/composables/useMediaManager.d.ts +17 -0
- package/dist/runtime/composables/useMediaManager.d.ts.map +1 -0
- package/dist/runtime/composables/useMediaManager.js +6 -0
- package/dist/runtime/composables/useProgressiveDisclosure.d.ts +44 -0
- package/dist/runtime/composables/useProgressiveDisclosure.d.ts.map +1 -0
- package/dist/runtime/composables/useProgressiveDisclosure.js +23 -0
- package/dist/runtime/composables/useUnsavedChangesGuard.d.ts +24 -0
- package/dist/runtime/composables/useUnsavedChangesGuard.d.ts.map +1 -0
- package/dist/runtime/composables/useUnsavedChangesGuard.js +28 -0
- package/dist/runtime/devtools/DevtoolsFormsPage.vue +235 -0
- package/dist/runtime/devtools/DevtoolsFormsPage.vue.d.ts +4 -0
- package/dist/runtime/devtools/DevtoolsFormsPage.vue.d.ts.map +1 -0
- package/dist/runtime/plugins/form-registry.d.ts +18 -0
- package/dist/runtime/plugins/form-registry.d.ts.map +1 -0
- package/dist/runtime/plugins/form-registry.js +19 -0
- package/dist/runtime/registry/defaults.d.ts +3 -0
- package/dist/runtime/registry/defaults.d.ts.map +1 -0
- package/dist/runtime/registry/defaults.js +93 -0
- package/dist/runtime/types/descriptor.d.ts +373 -0
- package/dist/runtime/types/descriptor.d.ts.map +1 -0
- package/dist/runtime/types/descriptor.js +26 -0
- package/dist/runtime/types/index.d.ts +12 -0
- package/dist/runtime/types/index.d.ts.map +1 -0
- package/dist/runtime/types/index.js +6 -0
- package/dist/runtime/types/layout.d.ts +21 -0
- package/dist/runtime/types/layout.d.ts.map +1 -0
- package/dist/runtime/types/layout.js +0 -0
- package/dist/runtime/types/media.d.ts +43 -0
- package/dist/runtime/types/media.d.ts.map +1 -0
- package/dist/runtime/types/media.js +0 -0
- package/dist/runtime/types/registry.d.ts +62 -0
- package/dist/runtime/types/registry.d.ts.map +1 -0
- package/dist/runtime/types/registry.js +19 -0
- package/dist/runtime/utils/flattenFieldGroups.d.ts +50 -0
- package/dist/runtime/utils/flattenFieldGroups.d.ts.map +1 -0
- package/dist/runtime/utils/flattenFieldGroups.js +24 -0
- package/dist/runtime/utils/tabVisibility.d.ts +18 -0
- package/dist/runtime/utils/tabVisibility.d.ts.map +1 -0
- package/dist/runtime/utils/tabVisibility.js +18 -0
- package/dist/types.d.mts +6 -10
- package/package.json +10 -8
- package/src/__tests__/article.schema.json +193 -0
- package/src/__tests__/camomillaRoundTrip.test.ts +73 -0
- package/src/__tests__/tabVisibility.test.ts +102 -0
- package/src/__tests__/useFormFromSchema.test.ts +24 -0
- package/src/__tests__/useMapoForm.test.ts +5 -0
- package/src/index.ts +5 -0
- package/src/module.ts +34 -0
- package/src/runtime/components/MapoFocusPortal.vue +3 -1
- package/src/runtime/components/MapoForm.vue +17 -4
- package/src/runtime/components/MapoFormTabs.vue +29 -6
- package/src/runtime/components/fields/MapoDateField.vue +3 -1
- package/src/runtime/components/fields/MapoDateTimeField.vue +3 -1
- package/src/runtime/components/fields/MapoEnhancedMediaField.vue +153 -0
- package/src/runtime/components/fields/MapoFileField.vue +3 -1
- package/src/runtime/components/fields/MapoFksField.vue +7 -2
- package/src/runtime/components/fields/MapoMapField.vue +5 -2
- package/src/runtime/components/fields/MapoMediaField.vue +106 -0
- package/src/runtime/components/fields/MapoMediaM2mField.vue +131 -0
- package/src/runtime/components/fields/MapoMediaUnavailable.vue +19 -0
- package/src/runtime/components/fields/MapoRepeater.vue +33 -26
- package/src/runtime/components/fields/MapoRepeaterItem.vue +14 -8
- package/src/runtime/components/fields/MapoSeoPreview.vue +17 -13
- package/src/runtime/components/fields/MapoWygEditor.vue +55 -7
- package/src/runtime/composables/useFormFromSchema.ts +4 -1
- package/src/runtime/composables/useMapoForm.ts +4 -2
- package/src/runtime/composables/useMediaManager.ts +21 -0
- package/src/runtime/composables/useUnsavedChangesGuard.ts +3 -3
- package/src/runtime/registry/defaults.ts +9 -1
- package/src/runtime/types/descriptor.ts +22 -7
- package/src/runtime/types/index.ts +4 -0
- package/src/runtime/types/media.ts +44 -0
- package/src/runtime/utils/tabVisibility.ts +44 -0
- package/dist/index.d.cts +0 -1
- package/dist/module.d.cts +0 -2
package/README.md
CHANGED
|
@@ -1,43 +1,28 @@
|
|
|
1
1
|
# @mapomodule/form
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- **Typed extension API**: `defineFormField(type, entry, opts)` to register custom fields with collision detection
|
|
12
|
-
- **JSON Schema bridge**: `useFormFromSchema()` generates descriptors from Pydantic v2 / DRF-spectacular schemas
|
|
13
|
-
- **Multilingual fields**: `translatable: true` writes to `model.translations[lang].field` automatically
|
|
14
|
-
- **Client validation**: `validate(value, ctx)` per descriptor + `required` shorthand
|
|
15
|
-
- **Tab/group layout**: declare `tab` and `group` per field — tabs render automatically (incl. nested tabs), groups are collapsible. Tab panels expose `tab.<name>.before/after`, full override, `.label` and `tab-bar-end` slots
|
|
16
|
-
- **Consistent repeater items**: `MapoRepeater` drives each item through `useMapoForm`, so nested-path keys, `translatable`, accessors, `descriptor.is` overrides and **client validation** behave identically inside a repeater
|
|
17
|
-
- **Draft persistence**: `draftKey` option on `useMapoForm()` auto-saves to localStorage every 2 s; `checkDraft()` / `draftBanner` offer restore/discard; clears on successful `submit()`
|
|
18
|
-
- **Fail-soft**: unknown field types render a non-destructive placeholder, never crash the form
|
|
19
|
-
|
|
20
|
-
## Install
|
|
21
|
-
|
|
22
|
-
`@mapomodule/form` is included automatically when you install `mapomodule` (recommended). No additional module entry is needed.
|
|
23
|
-
|
|
24
|
-
```ts
|
|
25
|
-
// nuxt.config.ts
|
|
26
|
-
export default defineNuxtConfig({
|
|
27
|
-
modules: ["@nuxt/ui", "mapomodule"],
|
|
28
|
-
mapo: {
|
|
29
|
-
form: {
|
|
30
|
-
// optional — global field registry defaults
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
});
|
|
3
|
+
The form engine of Mapo. A form is an array of `FieldDescriptor` objects; the engine resolves each descriptor's `type` through a field registry to a lazily loaded component, and renders the result in `MapoDetail` (from `@mapomodule/uikit`), in `MapoForm`, or headless through `useMapoForm()`.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Installed by the meta-package [`mapomodule`](https://www.npmjs.com/package/mapomodule), which configures it under `mapo.form`. On its own it reads the `mapoForm` key:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @mapomodule/form@next
|
|
34
11
|
```
|
|
35
12
|
|
|
13
|
+
| Option | Default | Description |
|
|
14
|
+
| ----------------- | ------- | ---------------------------------------------------------------------------------------- |
|
|
15
|
+
| `fields.attrs` | `{}` | Default `attrs` per field type, merged into the registry defaults |
|
|
16
|
+
| `groups.expanded` | `true` | Whether collapsible field groups start open |
|
|
17
|
+
| `debounce` | `300` | Milliseconds before a field change reaches the model; `descriptor.debounce` overrides it |
|
|
18
|
+
|
|
19
|
+
Mapo v2 is published on the `next` dist-tag while it is in beta.
|
|
20
|
+
|
|
36
21
|
## Quick start
|
|
37
22
|
|
|
38
23
|
```vue
|
|
39
24
|
<script setup lang="ts">
|
|
40
|
-
import type { FieldDescriptor } from "
|
|
25
|
+
import type { FieldDescriptor } from "mapomodule/types";
|
|
41
26
|
|
|
42
27
|
interface Article {
|
|
43
28
|
title: string;
|
|
@@ -60,96 +45,30 @@ const fields: FieldDescriptor<Article>[] = [
|
|
|
60
45
|
</template>
|
|
61
46
|
```
|
|
62
47
|
|
|
63
|
-
The
|
|
64
|
-
|
|
65
|
-
## Field types
|
|
66
|
-
|
|
67
|
-
| Type | Component | Notes |
|
|
68
|
-
| ---------------------------- | --------------------- | ----------------------------------------------------------- |
|
|
69
|
-
| `text` | `UInput` | |
|
|
70
|
-
| `textarea` | `UTextarea` | |
|
|
71
|
-
| `number` | `UInput[type=number]` | |
|
|
72
|
-
| `boolean` | `UCheckbox` | |
|
|
73
|
-
| `switch` | `USwitch` | |
|
|
74
|
-
| `color` | `UInput[type=color]` | |
|
|
75
|
-
| `slider` | `USlider` | |
|
|
76
|
-
| `file` | `MapoFileField` | Current-file preview, image thumbnail, remove button |
|
|
77
|
-
| `select` | `USelectMenu` | requires `attrs.options` |
|
|
78
|
-
| `date` / `datetime` / `time` | `MapoDateField` etc. | ISO string in model; `tz: 'naive' \| 'utc'` for `datetime` |
|
|
79
|
-
| `fks` | `MapoFksField` | FK autocomplete; `attrs.endpoint` required |
|
|
80
|
-
| `m2m` | `MapoFksField` | Multi-select autocomplete, removable chips |
|
|
81
|
-
| `editor` | `MapoWygEditor` | Tiptap v2; sanitized output, safe `Link` validator |
|
|
82
|
-
| `seo` | `MapoSeoPreview` | Title / description with live SERP preview |
|
|
83
|
-
| `map` | `MapoMapField` | Leaflet, `{ lat, lng }` in model, SSR-safe via `ClientOnly` |
|
|
84
|
-
| `repeater` | `MapoRepeater` | Nested fields, drag-and-drop, undo stack, templates |
|
|
85
|
-
|
|
86
|
-
## JSON Schema → Form
|
|
87
|
-
|
|
88
|
-
```ts
|
|
89
|
-
const schema = await $fetch("/api/schema/");
|
|
90
|
-
const fields = useFormFromSchema(schema, {
|
|
91
|
-
exclude: ["id", "created_at"],
|
|
92
|
-
overrides: {
|
|
93
|
-
body: { type: "editor", translatable: true },
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
```
|
|
48
|
+
The built-in types cover text and numbers, choices, dates and times, files, relations (`fks`, `m2m`), rich text, SEO preview, maps, repeaters and media pickers. The media pickers drive the Media Manager of `@mapomodule/uikit` and show a notice when it is not installed. A `type` the registry does not know renders `MapoUnknownField` instead of breaking the form.
|
|
97
49
|
|
|
98
|
-
##
|
|
50
|
+
## What you get
|
|
99
51
|
|
|
100
|
-
|
|
101
|
-
const form = useMapoForm({ model, fields, registry: $mapoFormRegistry });
|
|
52
|
+
Components and composables are auto-imported.
|
|
102
53
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
54
|
+
| API | Purpose |
|
|
55
|
+
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `MapoForm` | Renders a `FieldDescriptor[]` on your model, with tabs, collapsible groups, a responsive grid and slots |
|
|
57
|
+
| `useMapoForm(options)` | The same engine headless: dirty state, client validation, `getPatch()`, `submit()`, drafts. Pass `registry` explicitly |
|
|
58
|
+
| `defineFormField(type, component, opts?)` | Registers a custom field type from a plugin: a component or a lazy `import()`, with optional default `attrs` and accessor. Re-registering a type warns unless you pass `{ override: true }` |
|
|
59
|
+
| `useFormFromSchema(schema, opts?)` | Builds descriptors from a JSON Schema, such as a DRF-spectacular or Pydantic schema |
|
|
60
|
+
| `when`, `whenAny`, `whenNot`, `matchesField`, `isOneOf`, … | Build `visible` conditions declaratively |
|
|
61
|
+
| `useFormDraft`, `useFocusMode`, `useCurrentLang` | Draft autosave, focus mode, the language being edited |
|
|
62
|
+
| `$mapoFormRegistry` | The global registry: type → component, default `attrs`, accessor |
|
|
109
63
|
|
|
110
|
-
|
|
111
|
-
const form = useMapoForm({
|
|
112
|
-
model,
|
|
113
|
-
fields,
|
|
114
|
-
registry: $mapoFormRegistry,
|
|
115
|
-
draftKey: `article:${route.params.id}`,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// After fetch:
|
|
119
|
-
form.checkDraft(); // populates form.draftBanner if a draft is found
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
`form.draftBanner.value` exposes `{ savedAt, restore(), discard() }`. On `submit()` success the draft is cleared automatically. When using `<MapoDetail :draft="true">`, all of this is handled for you.
|
|
123
|
-
|
|
124
|
-
## Custom fields
|
|
125
|
-
|
|
126
|
-
The recommended way to register a custom field is the typed `defineFormField()` helper, called from a Nuxt plugin:
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
// app/plugins/my-fields.ts
|
|
130
|
-
export default defineNuxtPlugin(() => {
|
|
131
|
-
defineFormField("rich-text", () => import("~/components/RichText.vue"), {
|
|
132
|
-
attrs: { rows: 6 },
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Plugins in `app/plugins/` run after module plugins, so `$mapoFormRegistry` is always available. Re-registering an existing type prints a development warning unless you pass `{ override: true }` explicitly.
|
|
138
|
-
|
|
139
|
-
Any component with `modelValue` + `descriptor` + `errors` + `readonly` props works as a field.
|
|
64
|
+
A custom field is any component that accepts the `modelValue`, `descriptor`, `errors`, `readonly` and `disabled` props and emits `update:modelValue`.
|
|
140
65
|
|
|
141
66
|
## Documentation
|
|
142
67
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- [
|
|
146
|
-
- [Validation](
|
|
147
|
-
- [
|
|
148
|
-
- [
|
|
149
|
-
- [
|
|
150
|
-
- [Slot system](../../../docs/uikit/form/slots.md)
|
|
151
|
-
- [JSON Schema bridge](../../../docs/uikit/form/schema-to-form.md)
|
|
152
|
-
|
|
153
|
-
## License
|
|
154
|
-
|
|
155
|
-
MIT
|
|
68
|
+
- [Form Engine](https://lotrekagency.github.io/mapo-new/uikit/form/): your first form, tabs and groups, how the engine works
|
|
69
|
+
- [All field types](https://lotrekagency.github.io/mapo-new/uikit/form/add-fields)
|
|
70
|
+
- [Field registry](https://lotrekagency.github.io/mapo-new/uikit/form/registry) and [Custom fields](https://lotrekagency.github.io/mapo-new/uikit/form/custom-fields)
|
|
71
|
+
- [Validation](https://lotrekagency.github.io/mapo-new/uikit/form/validation), [Multilingual fields](https://lotrekagency.github.io/mapo-new/uikit/form/i18n), [Draft autosave](https://lotrekagency.github.io/mapo-new/uikit/form/draft), [Progressive Disclosure](https://lotrekagency.github.io/mapo-new/uikit/form/progressive-disclosure)
|
|
72
|
+
- [`useMapoForm()` reference](https://lotrekagency.github.io/mapo-new/uikit/form/composable)
|
|
73
|
+
- [From JSON Schema to form](https://lotrekagency.github.io/mapo-new/uikit/form/schema-to-form)
|
|
74
|
+
- [Form Engine — Component API Reference](https://lotrekagency.github.io/mapo-new/uikit/form/api)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt-imports.d.ts","sourceRoot":"","sources":["../../../src/__tests__/__mocks__/nuxt-imports.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;EAEvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camomillaRoundTrip.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/camomillaRoundTrip.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabVisibility.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tabVisibility.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormFromSchema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/useFormFromSchema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMapoForm.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/useMapoForm.test.ts"],"names":[],"mappings":""}
|
package/dist/index.d.mts
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { MapoFormOptions } from './module.mjs';
|
|
2
|
+
export { UseFormFromSchemaOptions, useFormFromSchema } from '../dist/runtime/composables/useFormFromSchema.js';
|
|
3
|
+
export { UseFormDraftOptions, useFormDraft } from '../dist/runtime/composables/useFormDraft.js';
|
|
4
|
+
export { FocusTarget, useFocusMode } from '../dist/runtime/composables/useFocusMode.js';
|
|
5
|
+
export { UnsavedChangesGuardOptions, useUnsavedChangesGuard } from '../dist/runtime/composables/useUnsavedChangesGuard.js';
|
|
6
|
+
export { greaterThan, isEmpty, isNoneOf, isNotEmpty, isOneOf, lessThan, matches, matchesField, when, whenAny, whenNot } from '../dist/runtime/composables/useProgressiveDisclosure.js';
|
|
7
|
+
export { FieldGroupDescriptor, flattenFieldGroups } from '../dist/runtime/utils/flattenFieldGroups.js';
|
|
8
|
+
export { AnyFieldDescriptor, BooleanDescriptor, ColorDescriptor, CustomDescriptor, DateDescriptor, EditorDescriptor, EnhancedMediaDescriptor, EnhancedMediaValue, FieldAccessor, FieldComponentEntry, FieldDescriptor, FieldRegistry, FieldType, FileDescriptor, FksDescriptor, KnownFieldType, MapDescriptor, MediaDescriptor, MediaItem, MediaLink, MediaM2mDescriptor, NumberDescriptor, PartialFieldRegistry, RepeaterDescriptor, SelectDescriptor, SeoDescriptor, TextDescriptor } from '../dist/runtime/types/index.js';
|
|
9
|
+
import '@nuxt/schema';
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type { MapoFormOptions } from "./module.js";
|
|
2
|
+
export { useFormFromSchema } from "./runtime/composables/useFormFromSchema.js";
|
|
3
|
+
export type { UseFormFromSchemaOptions } from "./runtime/composables/useFormFromSchema.js";
|
|
4
|
+
export { useFormDraft } from "./runtime/composables/useFormDraft.js";
|
|
5
|
+
export type { UseFormDraftOptions } from "./runtime/composables/useFormDraft.js";
|
|
6
|
+
export { useFocusMode } from "./runtime/composables/useFocusMode.js";
|
|
7
|
+
export type { FocusTarget } from "./runtime/composables/useFocusMode.js";
|
|
8
|
+
export { useUnsavedChangesGuard } from "./runtime/composables/useUnsavedChangesGuard.js";
|
|
9
|
+
export type { UnsavedChangesGuardOptions } from "./runtime/composables/useUnsavedChangesGuard.js";
|
|
10
|
+
export { when, whenAny, whenNot, matchesField, isOneOf, isNoneOf, isNotEmpty, isEmpty, greaterThan, lessThan, matches, } from "./runtime/composables/useProgressiveDisclosure.js";
|
|
11
|
+
export { flattenFieldGroups } from "./runtime/utils/flattenFieldGroups.js";
|
|
12
|
+
export type { FieldGroupDescriptor } from "./runtime/utils/flattenFieldGroups.js";
|
|
13
|
+
export { KnownFieldType } from "./runtime/types/index.js";
|
|
14
|
+
export type { FieldType, FieldAccessor, FieldDescriptor, AnyFieldDescriptor, TextDescriptor, NumberDescriptor, BooleanDescriptor, SelectDescriptor, FksDescriptor, DateDescriptor, ColorDescriptor, FileDescriptor, EditorDescriptor, SeoDescriptor, MapDescriptor, RepeaterDescriptor, MediaDescriptor, MediaM2mDescriptor, EnhancedMediaDescriptor, CustomDescriptor, MediaLink, MediaItem, EnhancedMediaValue, FieldComponentEntry, FieldRegistry, PartialFieldRegistry, } from "./runtime/types/index.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,YAAY,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,YAAY,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAElG,OAAO,EACL,IAAI,EACJ,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,OAAO,GACR,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,YAAY,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,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,EAChB,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,34 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"transformOptions": {
|
|
9
|
-
"babel": {
|
|
10
|
-
"plugins": []
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
/** @type {import("/home/runner/work/mapo-new/mapo-new/packages/@mapomodule/form/src/index.js")} */
|
|
16
|
-
const _module = await jiti.import("/home/runner/work/mapo-new/mapo-new/packages/@mapomodule/form/src/index.ts");
|
|
17
|
-
|
|
18
|
-
export const useFormFromSchema = _module.useFormFromSchema;
|
|
19
|
-
export const useFormDraft = _module.useFormDraft;
|
|
20
|
-
export const useFocusMode = _module.useFocusMode;
|
|
21
|
-
export const useUnsavedChangesGuard = _module.useUnsavedChangesGuard;
|
|
22
|
-
export const when = _module.when;
|
|
23
|
-
export const whenAny = _module.whenAny;
|
|
24
|
-
export const whenNot = _module.whenNot;
|
|
25
|
-
export const matchesField = _module.matchesField;
|
|
26
|
-
export const isOneOf = _module.isOneOf;
|
|
27
|
-
export const isNoneOf = _module.isNoneOf;
|
|
28
|
-
export const isNotEmpty = _module.isNotEmpty;
|
|
29
|
-
export const isEmpty = _module.isEmpty;
|
|
30
|
-
export const greaterThan = _module.greaterThan;
|
|
31
|
-
export const lessThan = _module.lessThan;
|
|
32
|
-
export const matches = _module.matches;
|
|
33
|
-
export const flattenFieldGroups = _module.flattenFieldGroups;
|
|
34
|
-
export const KnownFieldType = _module.KnownFieldType;
|
|
1
|
+
export { useFormFromSchema } from '../dist/runtime/composables/useFormFromSchema.js';
|
|
2
|
+
export { useFormDraft } from '../dist/runtime/composables/useFormDraft.js';
|
|
3
|
+
export { useFocusMode } from '../dist/runtime/composables/useFocusMode.js';
|
|
4
|
+
export { useUnsavedChangesGuard } from '../dist/runtime/composables/useUnsavedChangesGuard.js';
|
|
5
|
+
export { greaterThan, isEmpty, isNoneOf, isNotEmpty, isOneOf, lessThan, matches, matchesField, when, whenAny, whenNot } from '../dist/runtime/composables/useProgressiveDisclosure.js';
|
|
6
|
+
export { flattenFieldGroups } from '../dist/runtime/utils/flattenFieldGroups.js';
|
|
7
|
+
export { KnownFieldType } from '../dist/runtime/types/index.js';
|
package/dist/module.d.mts
CHANGED
|
@@ -1,2 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { NuxtModule } from '@nuxt/schema';
|
|
2
|
+
import { PartialFieldRegistry } from '../dist/runtime/types/index.js';
|
|
3
|
+
import '../dist/runtime/composables/useFormFromSchema.js';
|
|
4
|
+
import '../dist/runtime/composables/useFormDraft.js';
|
|
5
|
+
import '../dist/runtime/composables/useFocusMode.js';
|
|
6
|
+
import '../dist/runtime/composables/useUnsavedChangesGuard.js';
|
|
7
|
+
import '../dist/runtime/composables/useProgressiveDisclosure.js';
|
|
8
|
+
import '../dist/runtime/utils/flattenFieldGroups.js';
|
|
9
|
+
|
|
10
|
+
interface MapoFormOptions {
|
|
11
|
+
fields?: PartialFieldRegistry;
|
|
12
|
+
groups?: {
|
|
13
|
+
expanded?: boolean;
|
|
14
|
+
};
|
|
15
|
+
debounce?: number;
|
|
16
|
+
}
|
|
17
|
+
declare const _default: NuxtModule<MapoFormOptions, MapoFormOptions, false>;
|
|
18
|
+
|
|
19
|
+
export { _default as default };
|
|
20
|
+
export type { MapoFormOptions };
|
package/dist/module.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { NuxtModule } from "@nuxt/schema";
|
|
2
|
+
import type { PartialFieldRegistry } from "./runtime/types/index.js";
|
|
3
|
+
export interface MapoFormOptions {
|
|
4
|
+
fields?: PartialFieldRegistry;
|
|
5
|
+
groups?: {
|
|
6
|
+
expanded?: boolean;
|
|
7
|
+
};
|
|
8
|
+
debounce?: number;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: NuxtModule<MapoFormOptions, MapoFormOptions, false>;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;;AAED,wBAkOyC"}
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,18 +1,192 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineNuxtModule, createResolver, hasNuxtModule, installModule, addPlugin, addTypeTemplate, extendPages, addComponent, addImports } from '@nuxt/kit';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
const module$1 = defineNuxtModule({
|
|
4
|
+
meta: {
|
|
5
|
+
name: "@mapomodule/form",
|
|
6
|
+
configKey: "mapoForm"
|
|
7
7
|
},
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
defaults: {
|
|
9
|
+
debounce: 300,
|
|
10
|
+
groups: { expanded: true }
|
|
11
|
+
},
|
|
12
|
+
async setup(options, nuxt) {
|
|
13
|
+
const resolver = createResolver(import.meta.url);
|
|
14
|
+
nuxt.options.build.transpile.push(resolver.resolve("./runtime"));
|
|
15
|
+
nuxt.options.imports.transform ??= {};
|
|
16
|
+
(nuxt.options.imports.transform.include ??= []).push(
|
|
17
|
+
/@mapomodule[\\/]form[\\/]/
|
|
18
|
+
);
|
|
19
|
+
if (!hasNuxtModule("@mapomodule/i18n")) {
|
|
20
|
+
await installModule(await resolver.resolvePath("@mapomodule/i18n"));
|
|
11
21
|
}
|
|
22
|
+
nuxt.options.runtimeConfig.public.mapoForm = {
|
|
23
|
+
groups: { expanded: options.groups?.expanded ?? true },
|
|
24
|
+
debounce: options.debounce ?? 300,
|
|
25
|
+
// attrs is JSON-serialisable (plain objects) — merged in the plugin
|
|
26
|
+
fields: { attrs: options.fields?.attrs ?? {} }
|
|
27
|
+
};
|
|
28
|
+
addPlugin(resolver.resolve("./runtime/plugins/form-registry"));
|
|
29
|
+
addTypeTemplate({
|
|
30
|
+
filename: "types/mapo-form-registry.d.ts",
|
|
31
|
+
getContents: () => `
|
|
32
|
+
import type { FieldRegistry } from '@mapomodule/form/types';
|
|
33
|
+
declare module '#app' {
|
|
34
|
+
interface NuxtApp {
|
|
35
|
+
$mapoFormRegistry: FieldRegistry;
|
|
12
36
|
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
37
|
+
}
|
|
38
|
+
declare module 'vue' {
|
|
39
|
+
interface ComponentCustomProperties {
|
|
40
|
+
$mapoFormRegistry: FieldRegistry;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
`
|
|
45
|
+
});
|
|
46
|
+
if (nuxt.options.dev) {
|
|
47
|
+
extendPages((pages) => {
|
|
48
|
+
pages.push({
|
|
49
|
+
name: "mapo-devtools-forms",
|
|
50
|
+
path: "/_mapo/devtools/forms",
|
|
51
|
+
file: resolver.resolve("./runtime/devtools/DevtoolsFormsPage.vue")
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
nuxt.hook(
|
|
55
|
+
"devtools:customTabs",
|
|
56
|
+
(tabs) => {
|
|
57
|
+
tabs.push({
|
|
58
|
+
name: "mapo-forms",
|
|
59
|
+
title: "Mapo Forms",
|
|
60
|
+
icon: "i-lucide-layout-list",
|
|
61
|
+
view: { type: "iframe", src: "/_mapo/devtools/forms" }
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
const shellComponents = [
|
|
67
|
+
"MapoForm",
|
|
68
|
+
"MapoFormField",
|
|
69
|
+
"MapoFormGroup",
|
|
70
|
+
"MapoFormTabs",
|
|
71
|
+
"MapoUnknownField",
|
|
72
|
+
"MapoFocusPortal"
|
|
73
|
+
];
|
|
74
|
+
for (const name of shellComponents) {
|
|
75
|
+
addComponent({
|
|
76
|
+
name,
|
|
77
|
+
filePath: resolver.resolve(`./runtime/components/${name}.vue`)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const mediaFieldComponents = [
|
|
81
|
+
"MapoMediaField",
|
|
82
|
+
"MapoMediaM2mField",
|
|
83
|
+
"MapoEnhancedMediaField",
|
|
84
|
+
"MapoMediaUnavailable"
|
|
85
|
+
];
|
|
86
|
+
for (const name of mediaFieldComponents) {
|
|
87
|
+
addComponent({
|
|
88
|
+
name,
|
|
89
|
+
filePath: resolver.resolve(`./runtime/components/fields/${name}.vue`)
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
addImports([
|
|
93
|
+
{
|
|
94
|
+
name: "useMapoForm",
|
|
95
|
+
from: resolver.resolve("./runtime/composables/useMapoForm")
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "useCurrentLang",
|
|
99
|
+
from: resolver.resolve("./runtime/composables/useCurrentLang")
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "provideCurrentLang",
|
|
103
|
+
from: resolver.resolve("./runtime/composables/useCurrentLang")
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "useFormFromSchema",
|
|
107
|
+
from: resolver.resolve("./runtime/composables/useFormFromSchema")
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "useFormDraft",
|
|
111
|
+
from: resolver.resolve("./runtime/composables/useFormDraft")
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "useFocusMode",
|
|
115
|
+
from: resolver.resolve("./runtime/composables/useFocusMode")
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "defineFormField",
|
|
119
|
+
from: resolver.resolve("./runtime/composables/defineFormField")
|
|
120
|
+
},
|
|
121
|
+
// Progressive disclosure DSL
|
|
122
|
+
{
|
|
123
|
+
name: "when",
|
|
124
|
+
from: resolver.resolve(
|
|
125
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
126
|
+
)
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: "whenAny",
|
|
130
|
+
from: resolver.resolve(
|
|
131
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
132
|
+
)
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "whenNot",
|
|
136
|
+
from: resolver.resolve(
|
|
137
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
138
|
+
)
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: "matchesField",
|
|
142
|
+
from: resolver.resolve(
|
|
143
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
144
|
+
)
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "isOneOf",
|
|
148
|
+
from: resolver.resolve(
|
|
149
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
150
|
+
)
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
name: "isNoneOf",
|
|
154
|
+
from: resolver.resolve(
|
|
155
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
156
|
+
)
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: "isNotEmpty",
|
|
160
|
+
from: resolver.resolve(
|
|
161
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
162
|
+
)
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: "isEmpty",
|
|
166
|
+
from: resolver.resolve(
|
|
167
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
168
|
+
)
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "greaterThan",
|
|
172
|
+
from: resolver.resolve(
|
|
173
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
174
|
+
)
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
name: "lessThan",
|
|
178
|
+
from: resolver.resolve(
|
|
179
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
180
|
+
)
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: "matches",
|
|
184
|
+
from: resolver.resolve(
|
|
185
|
+
"./runtime/composables/useProgressiveDisclosure"
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
]);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
17
191
|
|
|
18
|
-
export
|
|
192
|
+
export { module$1 as default };
|