From d7cb44df1eff556b46669a5e08224522b9728297 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Thu, 21 Aug 2025 18:16:41 -0400 Subject: [PATCH 01/11] allow control-wrapper to be overridden by provided component --- packages/vue-vuetify/README.md | 28 +++++++++ packages/vue-vuetify/dev/App.vue | 10 ++- .../dev/components/ControlWrapper.vue | 62 +++++++++++++++++++ .../dev/components/ExampleSettings.vue | 18 ++++++ packages/vue-vuetify/dev/store/index.ts | 1 + .../src/controls/ControlWrapper.vue | 52 +++++++++++----- .../components/DefaultControlWrapper.vue | 29 +++++++++ .../src/controls/components/index.ts | 1 + packages/vue-vuetify/src/util/inject.ts | 22 ++++++- .../BooleanControlRenderer.spec.ts.snap | 2 +- .../DateControlRenderer.spec.ts.snap | 4 +- .../DateTimeControlRenderer.spec.ts.snap | 4 +- .../EnumControlRenderer.spec.ts.snap | 4 +- .../IntegerControlRenderer.spec.ts.snap | 2 +- .../MultiStringControlRenderer.spec.ts.snap | 2 +- .../NumberControlRenderer.spec.ts.snap | 2 +- .../OneOfEnumControlRenderer.spec.ts.snap | 4 +- .../StringControlRenderer.spec.ts.snap | 6 +- .../TimeControlRenderer.spec.ts.snap | 4 +- 19 files changed, 221 insertions(+), 36 deletions(-) create mode 100644 packages/vue-vuetify/dev/components/ControlWrapper.vue create mode 100644 packages/vue-vuetify/src/controls/components/DefaultControlWrapper.vue diff --git a/packages/vue-vuetify/README.md b/packages/vue-vuetify/README.md index 6f1a2d9247..8ae9c6d561 100644 --- a/packages/vue-vuetify/README.md +++ b/packages/vue-vuetify/README.md @@ -126,6 +126,34 @@ If note done yet, please [install Vuetify for Vue](https://vuetifyjs.com/en/gett For more information on how JSON Forms can be configured, please see the [README of `@jsonforms/vue`](https://github.com/eclipsesource/jsonforms/blob/master/packages/vue/README.md). +## Override the ControlWrapper component + +All control renderers wrap their components with a **`ControlWrapper`** component, which by default uses **`DefaultControlWrapper`** to render the wrapper element around each control. + +If you want to: + +- Replace the **`DefaultControlWrapper`** with your own implementation, or +- Provide custom renderers that render their child controls differently, + +you can use Vue’s **`provide` / `inject` mechanism** to supply your own wrapper under the **`ControlWrapperSymbol`**. + +For example, the demo application includes a custom wrapper that can be enabled from the **Example App Settings**. It is registered like this: + +```ts +import { provide, type DefineComponent } from 'vue'; +import { + ControlWrapperSymbol, + type ControlWrapperProps, +} from '@jsonforms/vue-vuetify'; + +import ControlWrapper from './components/ControlWrapper.vue'; + +provide( + ControlWrapperSymbol, + ControlWrapper as DefineComponent, +); +``` + ## License The JSONForms project is licensed under the MIT License. See the [LICENSE file](https://github.com/eclipsesource/jsonforms/blob/master/LICENSE) for more information. diff --git a/packages/vue-vuetify/dev/App.vue b/packages/vue-vuetify/dev/App.vue index eab6fa09be..e3a9cb4964 100644 --- a/packages/vue-vuetify/dev/App.vue +++ b/packages/vue-vuetify/dev/App.vue @@ -1,5 +1,6 @@