Generate Vue Forms and Data-tables fast with a simple JSON-like syntax ⚡️

Overview

hero

Blitzar

Generate Vue Forms and Data-tables fast with a simple JSON-like syntax ⚡️

npm i blitzar

Documentation

Vue 3
blitzar.cycraft.co

Vue 2
blitzar0.web.app

Motivation

Check out this blog post to understand my motivation for creating Blitzar: Better, Faster Vue Forms with Blitzar

Meet the family

  • Magnetar 🌟

    State-management done right with automatic sync to remote databases and services. Framework-agnostic & optimistic-UI built-in

  • Blitzar ⚡️

    Generate Vue Forms and Data-tables fast with a simple JSON-like syntax

  • Planetar 🪐

    A Vue framework for creating a design system styleguide with interactive component explorer

Comments
  • build(deps): bump ini from 1.3.5 to 1.3.8 in /packages/dev

    build(deps): bump ini from 1.3.5 to 1.3.8 in /packages/dev

    Bumps ini from 1.3.5 to 1.3.8.

    Commits
    • a2c5da8 1.3.8
    • af5c6bb Do not use Object.create(null)
    • 8b648a1 don't test where our devdeps don't even work
    • c74c8af 1.3.7
    • 024b8b5 update deps, add linting
    • 032fbaf Use Object.create(null) to avoid default object property hazards
    • 2da9039 1.3.6
    • cfea636 better git push script, before publish instead of after
    • 56d2805 do not allow invalid hazardous string as section name
    • See full diff in compare view
    Maintainer changes

    This version was pushed to npm by isaacs, a new releaser for ini since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 45
  • build(deps): bump ini from 1.3.5 to 1.3.8 in /packages/docs-vuepress

    build(deps): bump ini from 1.3.5 to 1.3.8 in /packages/docs-vuepress

    Bumps ini from 1.3.5 to 1.3.8.

    Commits
    • a2c5da8 1.3.8
    • af5c6bb Do not use Object.create(null)
    • 8b648a1 don't test where our devdeps don't even work
    • c74c8af 1.3.7
    • 024b8b5 update deps, add linting
    • 032fbaf Use Object.create(null) to avoid default object property hazards
    • 2da9039 1.3.6
    • cfea636 better git push script, before publish instead of after
    • 56d2805 do not allow invalid hazardous string as section name
    • See full diff in compare view
    Maintainer changes

    This version was pushed to npm by isaacs, a new releaser for ini since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 45
  • Vue 3 support

    Vue 3 support

    I have released the official Vue 3 Blitzar! 🎉

    • See new docs: https://blitzar.cycraft.co/

    --

    • [x] double check wether or not the documentation of blitzar covers all use cases & features for the Vue 2 version
    • [x] recreate the documentation in Vite + Vue 3 with all the markdown content ready.
    • [x] start implementing all the examples of the docs one by one.
      • [x] completely rewrite BlitzForm, BlitzTable, BlitzListForm based on this rewrite
      • [ ] keep an ongoing list of breaking changes

    -- Breaking Changes For Blitzar + Vue 3

    BlitzTable

    BlitzTable was completely rewritten and has changed a lot.

    • Please check out the new documentation on BlitzTable and adjust accordingly.
    • Some features are not yet re-implemented like conditional/dynamic styles & classes but they will be soon

    BlitzForm

    renamed terminology

    • @input to @update:modelValue
      • reason: Vue 3 requirement
    • @field-input to @updateField
      • reason: update-field makes sense with Vue 3 terminology (because Vue 3 doesn't rely on @input anymore)
    • @input-cell to @updateCell
      • reason: same as above
    • fieldInput (the function) to updateField
      • reason: same as above
    • evaluatedProps to dynamicProps
      • reason: clarity — Dynamic Props is a bit easier to understand imo.
    • mode: 'view' to mode: 'readonly'
      • reason: clarity — closer to HTML5 readonly attribute

    upgrade strategy for the above:

    • find and replace

    Deprecated props

    • deprecate rules validation array per field
      • reason: we do not use Quasar under the hood anymore, rules was only used because Quasar's QField uses it for Validation
      • I have thought a long time about the best way of implementing Validation, looking at VeeValidate, Vuelidate, Quasar, Vuetify and others, and have realised we already have a very simple implementation of form validation via Dynamic Props... So to reduce codebase complexity, I have added a new prop called error where you can simple pass a validation function much like the rules prop before. The difference is, it's a single function (to be marked as dynamicProps: ['error']) and you make it a single function that returns null if there's no error, or the error you want to display when there is one.
      • upgrade strategy: Read the new Documentation on Validation here. Please scroll to "validation" at the bottom
    // before
    {
      rules: [(val) => Number(val) > 18 || 'no minors allowed']
    }
    // after
    {
      dynamicProps: ['error'],
      error: (val) => Number(val) > 18 ? null : 'no minors allowed'
    }
    
    
    • deprecate prop internalErrorsFor array of field-names

      • reason: reduce codebase complexity & delete less common options to reduce size
      • upgrade strategy: just add internalErrors: true to the fields you need this
    • deprecate prop validator global validation function

      • reason: reduce codebase complexity & delete less common options to reduce size
      • upgrade strategy: just add error validation to each field in your schema instead
    • deprecate mode: 'add'

      • reason: reduce complexity
      • upgrade strategy:
        • check if your forms rely on mode: 'add' by doing a global search for add
        • write custom logic to difference between mode: 'add' and mode: 'edit'
    opened by mesqueeb 26
  • merge is not defined helpers.js

    merge is not defined helpers.js

    I have this error with version 1.0.5:

    Uncaught (in promise) ReferenceError: merge is not defined
        at getBlitzFieldOverwrites (webpack-internal:///./node_modules/@blitzar/form/dist/components/helpers.js:14)
    

    Looks like this import is missing in form/src/components/helpers.js:

    import { merge } from 'merge-anything'
    
    opened by ymarcon 13
  • Vue warn label missing but label is supplied?

    Vue warn label missing but label is supplied?

    I've had a go at using Quasar using Blitzar, and even though there is no Quasar example, the existing documentation gave me enough clues to work it out. Now there's an error being displayed which is clear, but to me it seems that it shouldn't be there. So maybe there's some underlying logic or library trick I'm missing.

    image

    I use a blitz-form in my step, with the following makeup:

    <script setup lang="ts">
    import { BlitzForm } from "blitzar"
    import testComponent from './test-component.vue'
    import { markRaw } from "vue"
    
    const { name, title } = defineProps<{
            name:any,
            title:any,
            step:any
    }>()
    
        const schema = [
          {
            name:"Voornaam",
            label:"Voornaam",
            outlined:true,
            component: markRaw(testComponent),
          },
          {
            name:"Achternaam",
            label:"Achternaam",
            outlined:true,
            component: markRaw(testComponent),
          },
          {
            name:"Email",
            label:"Email",
            outlined:true,
            component: markRaw(testComponent),
          },
          {
            name:"Geb datum",
            label:"Geb datum",
            outlined:true,
            component: markRaw(testComponent),
          },
          {
            name:"Telefoon Nummer",
            label:"Telefoon Nummer",
            outlined:true,
            component: markRaw(testComponent),
          },
        ]
    
        const formData = $ref({})
    </script>
    
    <template>
      <q-step
        :name="name"
        :title="title"
        :done="step > name"
        :header-nav="step > name"
      >
        For each ad campaign that you create, you can control how much you're willing to
        spend on clicks and conversions, which networks and geographical locations you want
        your ads to show on, and more.
    
            <blitz-form v-model="formData" :schema="schema" columns="2"/>
      </q-step>
    </template>
    
    <style scoped lang="scss"></style>
    

    and my test component

    <script setup lang=ts>
    
    const { name, label, outlined } = defineProps<{
            name:string,
            label:string,
            outlined:boolean
    }>()
    
    </script>
    
    <template>
        <q-input
            :name="name"
            model-value=""
            :label="label"
            :outlined="outlined"
        />
    </template>
    
    <style lang="scss" scoped></style>
    

    and the output which does seem to correctly show the supplied label. image

    opened by KazWar 7
  • BlitzListForm in BlitzForm

    BlitzListForm in BlitzForm

    I've followed the example, but it does not appear to be working.

    If I create a BlitzListForm standalone it works, but when I move it into a BlitzForm, I can see the label, but the component itself is not loading any form components that are visible.

    Before I go further, has this been implemented in the current version?

    Thank you.

    opened by rdemo 6
  • Misusage of disabled HTML attribute

    Misusage of disabled HTML attribute

    I am playing with v1.0.0 branch + quasar. It appears that options, toggle, slider etc components are in the disabled state despite the blitzar form mode is 'edit'. It is because the disabled HTML attribute is misused: the statement disabled="false" is not valid because what matters is the presence or not of this attribute. Then whatever the value is assigned to disabled, the component will be in the disabled state. See MDN HTML disabled.

    The same goes with the required attribute. And also you cannot have disabled and required at the same time.

    opened by ymarcon 6
  • Label Slot repeat in BlitzListForm

    Label Slot repeat in BlitzListForm

    Try to append a red star sign with label slot (for figure out required field), then it appears in every row. Is it on purpose? If label only show once, maybe label slot shoud too.

    Another problem: if set rules property (not empty) on QInput with outlined, result double outline.

    CleanShot 2021-06-17 at 13 36 23@2x

    [
      {
        "id": "basic",
        "label": "基本信息",
        "component": "BlitzListForm",
        "schema": [
          {
            "component": "QInput",
            "type": "text",
            "id": "name",
            "label": "姓名",
            "outlined": true,
            "dense": true,
            "rules": [ v => !!v || '必填' ],
            "slots": {
              "label": {
                "component": "span",
                "slot": "*",
                "style": "color: red"
              }
            },
            "options": [],
            "hideBottomSpace": true
          },
          {
            "component": "QInput",
            "type": "text",
            "id": "age",
            "label": "年龄",
            "outlined": true,
            "dense": true,
            "rules": [],
            "slots": {},
            "options": [],
            "hideBottomSpace": true
          },
          {
            "component": "QInput",
            "type": "text",
            "id": "time",
            "label": "时间",
            "outlined": true,
            "dense": true,
            "rules": [],
            "slots": {},
            "options": [],
            "hideBottomSpace": true
          }
        ]
      }
    ]
    
    opened by XiongLiding 6
  • Class row in div component

    Class row in div component

    Hi, this is my first day with blitzar. I use this with quasar framework.

    I try do:

    {
        span: 1,
        label: 'Test',
        component: 'div',
        componentStyle: 'border: solid thin goldenrod; padding: 0.5em',
        class: 'row',
        slot: [
          {
            component: 'div',
            slot: 'AAA',
            class: 'col bg-red'
          },
          {
            component: 'div',
            slot: 'BBB',
            class: 'col bg-blue'
          },
          {
            component: 'div',
            slot: 'CCC',
            class: 'col bg-orange'
          }
        ]
      },
    

    I get this:

    <div rules="" class="blitz-field__component" style="border: thin solid goldenrod; padding: 0.5em;">
      <div slot="AAA" class="col bg-red">AAA</div>
      <div slot="BBB" class="col bg-blue">BBB</div>
      <div slot="CCC" class="col bg-orange">CCC</div>
    </div>
    

    And I hope to get the row class in the first div

    <div rules="" class="row blitz-field__component" style="border: thin solid goldenrod; padding: 0.5em;">
      <div slot="AAA" class="col bg-red">AAA</div>
     
    </div>
    

    Consequently I see the divs stacked instead of seeing them in columns

    Jose

    opened by josejachuf 6
  • Suggestion: Submit Blitzar to vuejsexamples?

    Suggestion: Submit Blitzar to vuejsexamples?

    I didn't see Blitzar in https://vuejsexamples.com/ under form. Blitzar is a lot nicer than the other form generators I saw on this list. You might want to submit it?

    help wanted 
    opened by jasonfharris 5
  • typescript types

    typescript types

    Quickly mashed this together, for anyone interested.

    blitzar.d.ts

    declare module 'blitzar' {
        import Vue, { PluginFunction, VueConstructor } from 'vue';
    
        export interface BlitzarLang {
            archive: string
            delete: string
            cancel: string
            edit: string
            save: string
            requiredField: string
            formValidationError: string
        }
    
        export interface BlitzFieldProps {
            /**
             * The value of the field. The BlitzForm `formData` is an object with the value of each field and the id for key.
             * @type {any}
             * @category model
             */
            value: any
    
            /**
             * An `id` is required for the BlitzForm to be able to know which fields have which value.
             *
             * A string with dot notation will become a nested field in the `formData`.
             * @type {string}
             * @category model
             */
            id: string
    
            /**
             * A defaultValue value to be used when the `value` is `undefined`.
             *
             * You can also pass a function that will receive two params you can work with: `(formData, context)`
             * - `formData` is the value object of your BlitzForm. This will be undefined when BlitzField is used as stand-alone (without BlitzForm) unless you manually pass it.
             * - `context` is either your BlitzForm or BlitzField context with many usefull props. See the documentation on Evaluated Props for more info.
             * @type {(formData: Record<string, any>, formContext: FormContext) => any | any}
             * @category model
             */
            defaultValue: any
    
            /**
             * A function that modifies a value before it is used in the actual component. (see `parseInput` for the reverse)
             * @type {(val: any) => any}
             * @example val => val && val.split(' ').map(str => !str ? '' : `${str[0].toUpperCase()}${str.slice(1)}`).join(' ')
             * @example val => Number(val)
             * @example val => Date(val)
             * @category model
             */
            parseValue: Function
    
            /**
             * A function that modifies a value after user input but before the value is emitted. (see `parseValue` for the reverse)
             * @type {(val: any) => any}
             * @example val => (val || '').toLowerCase()
             * @example val => val.toISOString()
             * @category model
             */
            parseInput: Function
    
            /**
             * The component to be used for the field. Is mounted via `<component :is="component" />`. You can pass the name of a native HTML5 element or Vue component that is globally registered. You can also import the Vue file and directly pass the imported object, just like you would when you add it to a Vue file's components prop.
             * @type {string | Function | EvaluatedProp<string | Function>}
             * @example 'input'
             * @example 'MyCustomField'
             * @category content
             */
            component: any
            // object for imported vue instances
    
            /**
             * An Object with keys for the slot names and an object for values. The object you pass to a slot is itself applied as a `<component is="" />`.
             *
             * The last example below shows how this is actually used under the hood.
             * @type {{ label?: string | Record<string, any> | Record<string, any>[], default?: string | Record<string, any> | Record<string, any>[] } | EvaluatedProp<{ label?: string | Record<string, any> | Record<string, any>[], default?: string | Record<string, any> | Record<string, any>[] }>}
             * @example { label: { component: 'MyTooltip', tip: 'hi' } } }
             * @example <slot name="label"><component :is="slots.label.component" v-bind="slots.label" /></slot>
             * @category content
             */
            slots: object | Function
    
            /**
             * The text used in the UI for the action buttons and some error messages.
             *
             * The example shows how the error message for required fields is overwritten.
             * @type {{ archive?: string, delete?: string, cancel?: string, edit?: string, save?: string, requiredField?: string, formValidationError?: string } | EvaluatedProp<{ archive?: string, delete?: string, cancel?: string, edit?: string, save?: string, requiredField?: string, formValidationError?: string }>}
             * @example { requiredField: `Don't forget this field!` }
             * @category content
             */
            lang: BlitzarLang
            /**
             * The field label.
             * @type {string | EvaluatedProp<string>}
             * @example 'Your Name'
             * @category content
             */
            label: string | Function
    
            /**
             * A smaller label for extra info.
             * @type {string | EvaluatedProp<string>}
             * @example 'first and last'
             * @category content
             */
            subLabel: string | Function
    
            /**
             * The mode represents how fields are rendered
             * - `'edit'` — (default) show editable fields based on the schema
             * - `'view'` — show each field with `readonly: true`
             * - `'disabled'` — show each field with `disabled: true`
             * - `'raw'` — used to show raw data of your form (for select components, it will show the data label instead of its value)
             * - `'add'` — the same as `'edit'`
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {'edit' | 'view' | 'disabled' | 'raw' | 'add' | EvaluatedProp<'edit' | 'view' | 'disabled' | 'raw' | 'add'>}
             * @category state
             */
            mode: string | Function
    
            /**
             * An Object with an event name as key and the handler function as value. The function you pass will receive the native event payload as first parameter and the BlitzField context (the component instance) as second: `($event, context) => {}`
             * @type {Record<string, (event: any, formContext: FormContext) => any> | EvaluatedProp<Record<string, (event: any, formContext: FormContext) => any>>}
             * @example { click: (val, { formData }) => console.log(formData) }
             * @category behavior
             */
            events: any
    
            /**
             * Whether or not the field is required or not. If a field is marked 'required' it will add a default rule like so: `[val => (val !== null && val !== undefined) || 'Field is required']`. The default message can be set in the `lang` prop as `requiredField`.
             * @type {boolean | EvaluatedProp<boolean>}
             * @category behavior
             */
            required: boolean | Function
    
            /**
             * An array of rule functions that receive the value of the field as parameter and should return `true` if the rule passes or a `string` if the rule fails. The string represents the error message that is then shown underneath the field in red.
             * @type {((val: any) => (true | string))[] | EvaluatedProp<((val: any) => (true | string))[]>}
             * @example [val => (val && val.length <= 3) || 'Maximum 3 characters']
             * @category behavior
             */
            rules: any
    
            /**
             * An array with prop names that should be treated as Evaluated Props when passed a function.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string[]}
             * @category behavior
             */
            evaluatedProps: string[]
    
            /**
             * Set to `true` if the component has its own labels and you do not want the BlitzField to show a label.
             *
             * When `true` subLabels will also be hidden and passed to the component instead as a prop called 'hint'.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {boolean | undefined | EvaluatedProp<boolean | undefined>}
             * @category style
             */
            internalLabels: boolean
    
            /**
             * Set to true if the component has its own error handling. This makes sure it passes on props like `rules` and does nothing with them in the BlitzField.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {boolean | undefined | EvaluatedProp<boolean | undefined>}
             * @category behavior
             */
            internalErrors: boolean
    
            /**
             * Setting to `false` will hide the field. When using as an Evaluated Prop it can used to conditionally hide fields based on the other `formData`.
             * @type {boolean | EvaluatedProp<boolean>}
             * @example (val, { mode }) => (mode === 'edit')
             * @example false
             * @category state
             */
            showCondition: boolean
    
            /**
             * `readonly` defaults to `true` on `mode: 'view'`
             * @type {boolean | 'readonly' | EvaluatedProp<boolean | 'readonly'>}
             * @category state
             */
            readonly: boolean
    
            /**
             * `disabled` defaults to `true` on `mode: 'disabled'`
             * @type {boolean | 'disabled' | EvaluatedProp<boolean | 'disabled'>}
             * @category state
             */
            disabled: boolean
    
            /**
             * The position of the label in comparison to the field.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {'top' | 'left' | EvaluatedProp<'top' | 'left'>}
             * @category style
             */
            labelPosition: string | Function
    
            /**
             * Custom styling to be applied to the BlitzField. Applied like so `:style="fieldStyle"`. Can be an Evaluated Prop (this is why I opted to have a different name from `style`).
             *
             * In a BlitzForm schema you can also just write `style: '...'` and BlitzForm will pass that as fieldStyle for you, because "style" is not a valid prop name.
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example 'padding: 0.5em; color: white'
             * @category style
             */
            fieldStyle: any
    
            /**
             * Custom classes to be applied to the BlitzField. Applied like so `:class="fieldClasses"`. Can be an Evaluated Prop (this is why I opted to have a different name from `class`).
             *
             * In a BlitzForm schema you can also just write `class: '...'` and BlitzForm will pass that as `fieldClasses` for you, because "class" is not a valid prop name.
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example ['dark-theme']
             * @category style
             */
            fieldClasses: any
    
            /**
             * Custom styling to be applied to the inner component of BlitzField. Applied like so `:style="componentStyle"`. Can be an Evaluated Prop.
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example 'padding: 1em;'
             * @category style
             */
            componentStyle: any
    
            /**
             * Custom classes to be applied to the inner component of BlitzField. Applied like so `:class="componentClasses"`. Can be an Evaluated Prop.
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example ['dark-theme']
             * @category style
             */
            componentClasses: any
    
            /**
             * Custom styling to be applied to the label of BlitzField. Applied like so `:style="componentStyle"`. Can be an Evaluated Prop.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example 'font-weight: 200;'
             * @category style
             */
            labelStyle: any
    
            /**
             * Custom classes to be applied to the label of BlitzField. Applied like so `:class="labelClasses"`. Can be an Evaluated Prop.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example ['text-h6']
             * @category style
             */
            labelClasses: any
    
            /**
             * This is the *nested* data of all the fields inside a BlitzForm. (When using BlitzListForm as standalone, this is an array.)
             *
             * It's not something you can pass via the schema, but something that BlitzForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {Record<string, any> | Record<string, any>[]}
             * @category readonly
             */
            formData: object | Array<any>
    
            /**
             * This is the *flattened* data of all the fields inside a BlitzForm.
             *
             * It's not something you can pass via the schema, but something that BlitzForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {Record<string, any>}
             * @category readonly
             */
            formDataFlat: object
    
            /**
             * A manually set 'id' of the BlitzForm. This only exists if you passed an id directly to the BlitzForm.
             *
             * It's not something you can pass via the schema, but something that BlitzForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {string}
             * @category readonly
             */
            formId: string
    
            /**
             * The `fieldInput` function of BlitzForm. Is passed so it can be used in events. Eg.: `events: { input: (value, { fieldInput } => fieldInput({ id: 'otherField', value }))}`
             *
             * It's not something you can pass via the schema, but something that BlitzForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {(val: any, formContext: FormContext) => void}
             * @category readonly
             */
            fieldInput: Function
    
            /**
             * (only present in BlitzListForm!)
             * The `rowInput` function of BlitzForm. Is passed so it can be used in events. Eg.: `events: { input: (value, { fieldInput } => fieldInput({ id: 'otherField', value }))}`
             *
             * It's not something you can pass via the schema, but something that BlitzListForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {(val: any, formContext: FormContext) => void}
             * @category readonly
             */
            rowInput: Function
    
            /**
             * (only present in BlitzListForm!)
             * The current row index of this field.
             *
             * It's not something you can pass via the schema, but something that BlitzListForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {number}
             * @category readonly
             */
            rowIndex: number
    
            /**
             * (only present in BlitzListForm!)
             * This is the *nested* data of all the fields of the row.
             *
             * It's not something you can pass via the schema, but something that BlitzListForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {Record<string, any>}
             * @category readonly
             */
            rowData: object
    
            /**
             * (only present in BlitzListForm!)
             * This is a function that you can call to delete the row.
             *
             * It's not something you can pass via the schema, but something that BlitzListForm will automatically pass to each of its fields so you can use it in Evaluated Props.
             * @type {() => void}
             * @category readonly
             */
            deleteRow: Function
        }
    
        export interface BlitzFormProps extends Vue {
            /**
             * An object with the data of the entire form. The object keys are the ids of the fields passed in the `schema`.
             *
             * To be used with `:value` or `v-model`.
             * @type {Record<string, any>}
             * @example { name: '' }
             * @category model
             */
            value: any
    
            /**
             * A manually set `id` of the BlitzForm. This prop is accessible in the `context` (as `formId`) of any Evaluated Prop and event.
             *
             * Read more on Evaluated Props in its dedicated page.
             * @type {string}
             * @category model
             */
            id: string
    
            /**
             * This is the heart of your BlitzForm. It's the schema that defines what fields will be generated.
             *
             * The possible props you can pass are:
             * - BlitzField props (see BlitzField API Card in the documentation)
             * - any props of the actual component you define
             * @type {Record<string, any>[]}
             * @example [{id: 'name', label: 'Name', component: 'input', style: 'color: white'}, {id: 'age', label: 'Age', component: 'input', type: 'number', style: 'color: white'}]
             * @category model
             */
            schema: BlitzFieldProps[]
    
            /**
             * Buttons on top of the form that control the `mode` of the form. The possible pre-made buttons are:
             * - `'edit'` — a button which puts the form in 'edit' mode & does `emit('edit')`
             * - `'cancel'` — a button which puts the form in 'view' mode & does `emit('cancel')`
             * - `'save'` — a button which puts the form in 'edit' mode & does `emit('save', {newData, oldData})`
             * - `'delete'` — a red button which does `emit('delete')`
             * - `'archive'` — a red button which does `emit('archive')`
             *
             * You can also pass custom buttons with the same schema to generate forms.
             *
             * See the documentation on Action Buttons for more info.
             * @type {('edit' | 'cancel' | 'save' | 'delete' | 'archive' | Record<string, any>)[]}
             * @example ['delete', 'cancel', 'edit', 'save']
             * @example [{component: 'button', type: 'button', slot: 'log', events: {click: console.log}}]
             * @category content
             */
            actionButtons: any[]
    
            /**
             * You can overwrite the schema used for the default action buttons for edit, cancel, save, delete & archive.
             * @type {{ edit?: Record<string, any>, cancel?: Record<string, any>, save?: Record<string, any>, delete?: Record<string, any>, archive?: Record<string, any>, }}
             * @example {'save': {push: true}, 'delete': {color: 'secondary'}}
             * @category content
             */
            actionButtonDefaults: any
    
            /**
             * The position of the action buttons.
             * @type {'top' | 'bottom' | 'right' | 'left'}
             * @category content
             */
            actionButtonsPosition: string
    
            /**
             * A function which serves as global validator for your form. It will receive the edited data as first param and the original data (before user edits) as second. It should return true if all is OK or a string with error message.
             * @type {(newData: Record<string, any>, oldData: Record<string, any>) => (true | string)}
             * @example (newData, oldData) => newData.pass1 === newData.pass2 || 'passwords don't match'
             * @category behavior
             */
            validator: Function
    
            /**
             * The amount of columns the form should have. Each field can set a specific 'span' to be able to span multiple columns.
             * @type {number}
             * @category style
             */
            columnCount: number
    
            /**
             * The size of the gap between each field in the form.
             * @type {string}
             * @category style
             */
            gridGap: string
    
            /**
             * The text used in the UI for the action buttons and some error messages.
             * @type {{ archive?: string, delete?: string, cancel?: string, edit?: string, save?: string, requiredField?: string, formValidationError?: string } | EvaluatedProp<{ archive?: string, delete?: string, cancel?: string, edit?: string, save?: string, requiredField?: string, formValidationError?: string }>}
             * @example { cancel: 'キャンセル', edit: '編集', save: '保存' }
             * @category content
             */
            lang: BlitzarLang
    
            /**
             * The mode represents how fields are rendered
             * - `'edit'` — (default) show editable fields based on the schema
             * - `'view'` — show each field with `readonly: true`
             * - `'disabled'` — show each field with `disabled: true`
             * - `'raw'` — used to show raw data of your form (for select components, it will show the data label instead of its value)
             * - `'add'` — the same as `'edit'`
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {'edit' | 'view' | 'disabled' | 'raw' | 'add'}
             * @category state
             */
            mode: string
    
            /**
             * The position of the label in comparison to the field.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {'top' | 'left'}
             * @category style
             */
            labelPosition: string | Function
    
            /**
             * Custom styling to be applied to the label of BlitzField. Applied like so `:style="componentStyle"`. Can be an Evaluated Prop.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example 'font-weight: 200;'
             * @category style
             */
            labelStyle: any
    
            /**
             * Custom classes to be applied to the label of BlitzField. Applied like so `:class="labelClasses"`. Can be an Evaluated Prop.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string | Record<string, boolean> | (string | Record<string, boolean>)[] | EvaluatedProp<string | Record<string, boolean> | (string | Record<string, boolean>)[]>}
             * @example ['text-h6']
             * @category style
             */
            labelClasses: any
    
            /**
             * An array with prop names that should be treated as Evaluated Props when passed a function.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {string[]}
             * @category behavior
             */
            evaluatedProps: Array<string | 'component' | 'showCondition' | 'label' | 'subLabel' | 'required' | 'rules' | 'fieldStyle' | 'fieldClasses' | 'componentStyle' | 'componentClasses' | 'disable' | 'events' | 'lang'>
    
            /**
             * Set to true if the entire form has its own labels and you do not want the BlitzField to show a label.
             *
             * When `true` subLabels will be passed as a prop called 'hint'.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {boolean | undefined}
             * @category behavior
             */
            internalLabels: boolean
            /**
             * Set to true if the entire form has its own error handling. This makes sure it passes on props like `rules` and does nothing with them in the BlitzField.
             *
             * This prop can be set on a BlitzField or on a BlitzForm (in which case it's applied to all fields).
             * @type {boolean | undefined}
             * @category behavior
             */
            internalErrors: boolean
    
            /**
             * Pass the component names (without `.vue`) that have internal error handling. This makes sure it passes on props like `rules` and does nothing with them in the BlitzField.
             * @type {string[]}
             * @category behavior
             */
            internalErrorsFor: Array<string | 'QInput' | 'QSelect' | 'QField' | 'q-input' | 'q-select' | 'q-field'>
            /**
             * The component that should be used to generate the form. Defaults to QForm. You can pass the name of a native HTML5 element or Vue component that is globally registered. You can also import the Vue file and directly pass the imported object, just like you would when you add it to a Vue file's components prop.
             * @type {string | Function}
             * @example 'form'
             * @example 'tr'
             * @example 'MyFormWrapper'
             */
            formComponent: string | Function
        }
    
        export interface BlitzField extends BlitzFieldProps, Vue {}
    
        export interface BlitzForm extends BlitzFormProps, Vue {
            fieldInput(_ref5)
    
            resetState()
    
            restoreBackup()
    
            tapCancel()
    
            validate()
    
            tapEdit()
    
            tapSave()
    
            tapDelete()
    
            tapArchive()
        }
    
        export const BlitzField: VueConstructor<BlitzForm>;
        export const BlitzForm: VueConstructor<BlitzFormProps>;
    
        // as an alias
        export interface Schema extends BlitzFieldProps {}
    
        /**
         * Validates a form data based on its schema
         *
         * @export
         * @param {PlainObject} formData the form data in an object that looks like: `{[fieldId: string]: any}`
         * @param {Schema} schema
         * @param {StringObject} lang the lang object with at least the key `requiredField` used as error message for required fields
         * @returns {ValidationResultForm}
         */
        export function validateFormPerSchema(formData:any , schema:Schema, lang:BlitzarLang)
    
        export default class Blitzar {
            static BlitzForm: BlitzForm;
            static BlitzField: BlitzField;
            static BlitzH: any;
            static BlitzListForm: any;
            static install: PluginFunction<any>;
        }
    }
    
    opened by RobinRadic 5
  • build(deps): bump decode-uri-component from 0.2.0 to 0.2.2

    build(deps): bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Custimazation of error messages as message for required inputs.

    Custimazation of error messages as message for required inputs.

    Firstly I want to thank you for this great work it is very powerful and simple for understanding thank you very much. my question is How to customize error validation messages as a required validation error message?

    opened by abumalekFayed 0
  • build(deps): bump loader-utils from 1.4.0 to 1.4.2

    build(deps): bump loader-utils from 1.4.0 to 1.4.2

    Bumps loader-utils from 1.4.0 to 1.4.2.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.2

    1.4.2 (2022-11-11)

    Bug Fixes

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    Changelog

    Sourced from loader-utils's changelog.

    1.4.2 (2022-11-11)

    Bug Fixes

    1.4.1 (2022-11-07)

    Bug Fixes

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Use VueUse composable useVModel to update all props

    Use VueUse composable useVModel to update all props

    Hi! Thank you for the work put in Blitzar.

    I'm using Blitzar to create a dynamic form creator where user selects form-components and then modify properties on the form components. Change schema values. I would like to use VueUse composable to achieve this change props and then updating through emits the schema and not just form data. Is this possible could you give some hints best way to change schema from component? here is an example only works for formData modeValue but not schema props:

    <template>
      <q-input
            ref="input"
            type="text"
            outlined
            :required="required"
            :readonly="readonly"
            :label="text"
            v-model="modelValue"
        />
    </template>
    <script setup>
    
    import { ref } from 'vue';
    import { useVModel } from '@vueuse/core';
    
    const emits = defineEmits([
      'update:modelValue',
      'update:required',
      'update:text',
    ]);
    const props = defineProps([
      'modelValue',
      'name',
      'placeholder',
      'text',
      'required',
      'readonly',
    ]);
    
    const modelValue = useVModel(props, 'modelValue', emits);
    const required = useVModel(props, 'required', emits);
    const text = useVModel(props, 'text', emits);
    
    opened by abbjetmus 0
Releases(v1.1.8)
  • v1.1.8(Feb 10, 2022)

  • v1.0.6(Dec 18, 2021)

    Blitzar has finally landed for Vue 3!

    Check the brand new docs at:

    blitzar.cycraft.co

    Breaking Changes

    • npm i blitzar will now default to the Vue 3 version.

    • for now check this thread for breaking changes: https://github.com/CyCraft/blitzar/issues/55

    will try to improve the information on the breaking changes and post them here and in that thread soon, so click the Subscribe button in that thread for updates!

    Source code(tar.gz)
    Source code(zip)
  • v0.0.14(Jan 8, 2021)

    Blitzar release!

    • see blog post here: https://lucaban.medium.com/better-faster-vue-forms-with-blitzar-a0d71258a3bb
    • see documentation here: https://blitzar.cycraft.co

    Blitzar has organically grown from my old library quasar-easy-forms.

    Upgrade guide from Easy Forms

    ・・・New features・・・

    slot prop!

    You can now use the slot prop in your schema. This makes BlitzForm super powerful and easy to use with native HTML5 elements that just accept stuff in their default slot.

    Example:

    <BlitzForm :schema="[{ component: 'button', type: 'button', slot: 'click me!' }]" />
    

    Etc.

    There are many many other small fixes, improvements and new features! It's best to read through the new documentation!

    ・・・Breaking changes・・・

    renamed EasyForm EasyTable → BlitzForm BlitzTable

    find and replace all of these instances:

    • EasyForm → BlitzForm (and EasyField → BlitzField)
    • EasyTable → BlitzTable
    • EfMiniForm → BlitzListForm

    find and replace all usage of css classes

    • easy-form → blitz-form (and easy-field → blitz-field)
    • easy-table → blitz-table
    • ef-mini-form → blitz-list-form

    renamed default → defaultValue

    reason: for clarity and to prevent clashing with reserved keywords.

    find and replace default: with defaultValue: in all your schemas

    deprecated EfBtn

    reason: EfBtn was just a wrapper around QBtn but had the extra prop called "btnLabel" to make sure you could differentiate between the actual label on the button and the label of the field inside the form.

    However, I found a solution for getting around the duplicate QBtn label field that clashes with our fields! For this reason I deprecated the fact that the form uses the EfBtn for the actionButtons and now default to HTML5 buttons instead.

    To keep your forms as is just add this to your forms:

    const ACTION_BUTTON_DEFAULTS = {
      edit: { component: 'QBtn', slot: 'Edit' },
      save: { component: 'QBtn', slot: 'Save' },
      cancel: { component: 'QBtn', slot: 'Cancel' },
      archive: { component: 'QBtn', slot: 'Archive' },
      delete: { component: 'QBtn', slot: 'Delete' },
    }
    

    this is only for the forms where you are actually using the action buttons though! ↓

    <BlitzForm :actionButtonDefaults="ACTION_BUTTON_DEFAULTS" :actionButtons="['edit', 'save', 'cancel', 'archive', 'delete']" />
    

    However, in the future you might want to use your own original button components, since one of the focuses of BlitzForm is BYOC (Bring Your Own Components), this is a better solution:

    <BlitzForm :actionButtonDefaults="{ edit: { component: 'MyButton', buttonLabel: 'Edit' } }" :actionButtons="['edit']" />
    

    deprecated EfDiv

    reason: EfDiv was never really meant for direct use outside my Library and I want to keep my Library as minimal as possible and EfDiv always felt kinda awkward.

    It was changed to be a single function that my other components use internally. Feel free to reach out in an issue if you need more info.

    deprecated valueType: 'date' and dateFormat

    reason: it's not good to have an entire "date library" as dependency of this package. It's better to have the user provide the logic themselves with whatever library they are already using.

    // before
    {
      valueType: 'date',
      dateFormat: 'YYYY/MM/DD',
    }
    // now:
    // you need to provide your own `formatDate` implementation in `parseValue`
    // eg.
    {
      parseValue: val => formatDate(val, 'YYYY/MM/DD'),
    }
    

    small update on internalErrors

    EasyForm/BlitzForm has the ability to display errors for any field, or you can pass internalErrors: true if you are handling errors in your schema's component itself instead.

    Before, fields with certain component names it would automatically enable internalErrors: true:

    • QInput, QSelect, QField, EfInput, EfSelect, EfInputDate, q-input, q-select, q-field

    Now you can pass an array with component names for those you want to have internalErrors. eg.:

    <BlitzForm :internalErrorsFor="[ 'MyInput', 'QInput', 'QSelect' ]" />
    

    In case you only ever used Quasar "input" or "select" components, you don't need to set this, because it will default to: ['QInput', 'QSelect', 'QField', 'q-input', 'q-select', 'q-field']

    deprecated preset actionButtons for BlitzTable

    Before, in BlitzTable there were 3 preset buttons you could show on the top-right of a table like so:

    <BlitzTable :actionButtons="['grid', 'add', 'duplicate']">
    

    Now 'add' and 'duplicate' are deprecated and 'grid' is the only one that remains. The grid button also uses a different icon now.

    Reason: It's now more easy than ever to add custom buttons with custom behaviour to the top right of the BlitzTable. actionButtons now doesn't force the schema passed to it to be buttons at all. You can pass a schema just like BlitzForms to actionButtons, so you can more easily bring your own components and integrate your requested behaviour via events: { click: () => {} } in the schema.

    Source code(tar.gz)
    Source code(zip)
👷A component that allows creating forms with two-way binding from data object with default HTML fields and custom, like multi-block or AJAX-select.

From Builder A component that allows creating forms with two-way binding from data object with default HTML fields and custom, like multi-block or AJA

Awes.io 66 Dec 22, 2022
FormVueLate is a zero dependency library that allows you to generate schema-driven forms with extreme ease

FormVueLate Visit FormVueLate 3.0's full documentation for more detailed information and examples. Getting Started FormVueLate is a zero dependency li

FormVueLate 439 Dec 16, 2022
Build forms with textfield, options, checkboxes, datatables and ... by defining a schema in json

WorkInProgress Vuetify FormJSON Demos: Example: Showcase Example: 2 way binding Example: FormSchema builder Example: Full features Example: Datatable

Peyman 1 Aug 9, 2022
Generate a form using JSON Schema and Vue.js

FormSchema Native Vue component form based on JSON Schema and Native HTML This is the branch for @formschema/native 2.0 Alpha, not ready for productio

FormSchema 458 Dec 13, 2022
Generate form based on standard json-schema and customize it using ui-schema

FFV Form For Vue Generate form based on standard json-schema and customize it using ui-schema Installation npm install --save ffv Usage Bundler (Webpa

null 2 Aug 23, 2019
🍻 ncform, a very nice configuration generation way to develop forms ( vue, json-schema, form, generator )

ncform 中文版 ncform, a nice form development way that generates form UIs and their interactions with just configuration. Comes with standard components

ncform 1.2k Dec 27, 2022
Cheetah Forms - An Json Based Form Generator for Vuetify

Cheetah Forms is a simple JSON form builder for generating a Vuetify Form with just a JSON

null 12 May 5, 2021
VueJS library for generating forms from JSON schemas

vue-json-schema-form Generate forms from your JSON schemas! ✨ Background JSON Schema makes it possible to define form validation rules in an environme

Collin Rickford 39 Apr 28, 2022
Create beautiful and low-effort forms that output valid data.

vjsf vuetify-jsonschema-form Create beautiful and low-effort forms that output valid data. Based on Vue.js / Vuetify / JSON Schema. See the documentat

Koumoul 483 Dec 23, 2022
A Vue.js component for creating simple AJAX forms.

vue-ajax-form-component A Vue.js component for creating simple AJAX forms. Install Available through npm as vue-ajax-form-component. Or include as an

James Doyle 87 Jan 14, 2022
📋 Fresh way to create simple or complex forms – without programming!

?? Vue Described-Data Form A fresh way to create simple or complex forms – without programming! ?? Demo Try it yourself in a Live Demo! ?? About vue-d

Marek Mensa 74 Nov 9, 2022
A set of Vue components to rapidly build forms with Tailwind CSS v2.0. It supports validation, model binding, includes default vendor styling and is fully customizable!

A set of Vue components to rapidly build forms with Tailwind CSS v2.0. It supports validation, model binding, includes default vendor styling and is fully customizable!

Protone Media 72 Nov 28, 2022
Create conversational conditional-logic forms with Vue.js.

Vue Flow Form Create conversational conditional-logic forms with Vue.js. Live Demos Questionnaire example Support page example Quiz example Project Do

DITDOT 631 Dec 28, 2022
Easy way to dynamically create reactive forms in Vue based on a varying business object model

Easy way to dynamically create reactive forms in Vue based on a varying business object model

ASIgloo 364 Dec 28, 2022
Turning web forms into conversations using Vue.js

Vue.js Conversational Form Turning web forms into conversations using Vue.js. Demo Install npm i --save vue-conversational-form Usage <template> <

Sophia Saiada 48 Dec 5, 2022
A Vue wrapper for HubSpot Forms

HubSpot Vue Form A Vue wrapper for HubSpot Forms Usage npm install @jagaad/vue-hubspot-form <script setup> import HubspotForm from "@jagaad/vue-hubspo

Jagaad 7 Nov 17, 2022
A composition based API forms helper for Vue 3 projects that utilise TypeScript

A composition based API forms helper for Vue 3 projects that utilise TypeScript

Sean Matheson 7 Sep 11, 2022
Learn how to create badass dynamic forms with Vue.js in this course

Dynamic Forms with Vue.js This repository contains the example code for the Custom Vue.js Directives Course. Learn how to create badass dynamic forms

Sergey Shmatovskiy 3 Dec 20, 2022
A Vue component for generating forms from GateSchema.

gateschema-form-vue A Vue component for generating forms from gateschema-js. Features GateSchema driven Auto validation Auto updating form data when u

GateSchema 10 May 12, 2021