# formlyjs

> A Package to help submit forms via json request

Latest version **1.0.1** (published 2020-06-22) · ISC license · 0 weekly downloads

## Install

```sh
npm install formlyjs
pnpm add formlyjs
yarn add formlyjs
bun add formlyjs
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2020-06-22 |
| First published | 2020-06-22 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 58.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Miguel Lima |
| Maintainers | codeexposed |
| Keywords | formlyjs, submit, form, json |

## Links

- npm: https://www.npmjs.com/package/formlyjs
- Repository: https://github.com/vmiguellima/formlyjs
- Homepage: https://github.com/vmiguellima/formlyjs#readme
- Issues: https://github.com/vmiguellima/formlyjs/issues
- npm.io page: https://npm.io/package/formlyjs

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 1.0.1 (latest) — 2020-06-22

## README

# Formly
It will prevent default form submit, and it will get all the values of the form inputs tags, then get the ```method``` and ```action``` attributte values, and then send the request

| Attributte   | Description  | Required  | Attribute Value
| ------------ |------------- | :-------: | --------|
| ```data-formlyjs-name``` |  This it is used on the ```<form data-formlyjs-name="login">...</form>```  | X  | ```unique```
| ```data-formlyjs-res-type``` |  This it is used on the ```<form data-formlyjs-name="login" data-formlyjs-res-type="application/json">...</form>```  |   | default: ```application/json```, allowed: ```application/json```
| ```data-formlyjs-reset``` |  This it is used on the ```<form data-formlyjs-name="login" data-formlyjs-reset="true">...</form>```, and if exists it will reset form values on success response  |   | default: ```false```, allowed: ```true``` and ```false```
| ```data-formlyjs-error```  | This it is used to display errors, it can be used inside or outside the form tags. Response must be ```{"errors": { "name": "Invalid Characters", "email": "Invalid Email Address"}}```, are cleared on form submit |    | ```name``` or ```name.first```
| ```data-formlyjs-success```  | This it is used to display success messages, it can be used inside or outside the form tags. Response must be ```{ "success": "User Updated" }```, are cleared on form submit |    | ```success``` or ```user.updated```
| ```data-formlyjs-res```  | This it is used to persist data from response, it can be used inside or outside the form tags. Response must be ```{ "followers": 92992 }```, are cleared on form submit |    | ```user.name.first```
| ```data-formlyjs-add```  | This it is used to append data from response to an html element, it can be used inside or outside the form tags. Response must be ```{ "followers": 92992 }```, are cleared on form submit |    | ```user.name.first```
| ```data-formlyjs-class-add```  | It is used with  ```data-formlyjs-error``` or ```data-formlyjs-success``` or ```data-formlyjs-add``` or ```data-formlyjs-res```, it add classes to be added when a response is received , classes are removed on form submit |    | ```border-b text-green-300```
| ```data-formlyjs-class-remove```  | It is used with  ```data-formlyjs-error``` or ```data-formlyjs-success``` or ```data-formlyjs-add``` or ```data-formlyjs-res```, it remove classes to be removed when a response is received , classes are added on form submit |    | ```border-b text-green-300```
| ```data-formlyjs-to```  | It is used with  ```data-formlyjs-error``` or ```data-formlyjs-success``` or ```data-formlyjs-add``` or ```data-formlyjs-res```, it is used when user uses the previous attributtes outside the form tags, it is used to link the element to the form |    | ```form-name```
| ```data-formlyjs-loading```  | It can be used inside or outside the ```<form>...</form>```, it is displayed when user submits any form on the page, it can be displayed only a certain form is submitted, for that the attributte must receive form name|    | ```form-name```
| ```data-formlyjs-saving```  | It can be used in ```input``` and ```button``` tags, ```type="submit"```, in the input tag this value it will replace the default input value, in the button tag it will replace the value of the element with attributte ```data-formlyjs-saving-default``` |    | ```form-name```
| ```data-formlyjs-saving-default```  | It can be used inside ```button``` tag |    | ```form-name```
| ```data-formlyjs-type```  | It can be used in ```<form data-formlyjs-type="toggler">...</form>``` tag, this is used like a toggle button, when a form it is submitted it will add the class ```on``` to the parent element of tag ```<form>``` |    | allowed: ```toggler```
| ```data-formlyjs-close``` | It is used to close a certain element, receives the ```#id``` of the element to be removed|   | ```element-id```
| ```data-formlyjs-timeout``` | It is used with ```data-formlyjs-res```, ```data-formlyjs-error```, ```data-formlyjs-success```, ```data-formlyjs-add```, if used, it will remove the classes from ```data-formlyjs-class-add``` and add the classes from ```data-formlyjs-class-remove```. The value passe can be ```100ms```, ```10s```, ```1m```, ```1h```. ```ms```time in milliseconds - ```s```time in seconds - ```m```time in minutes - ```h```time in hours |    | ```data-formlyjs-timeout="55s"```
  ```data-formlyjs-atr``` | It is used with ```data-formlyjs-res```, ```data-formlyjs-error```, ```data-formlyjs-success```, ```data-formlyjs-add```, it is used with, eg: ```data-formlyjs-success="username|ra"```, it can receive multiple attribures seperated using ```|``` (pipe), the number of key objects in ```data-formlyjs-success="username;somevalue;otherValue;|ra"``` must be equal to the value in ```data-formlyjs-atr="attr1|attr2|attr2"``` |    | ```data-formlyjs-timeout="55s"```
#### Responses
Reserved response keys

| Response | Description |
| -------- | ----------- |
| ```{ "redirect": "/home" }``` | If the success response contains, on root level, a key named ```redirect``` the user it will be redirected to the value of the key, using ```Turbolinks.visit(redirect)```, giving the felling of single page application

# How to Use

   - To Use, only need to add attributte ```data-formlyjs-name``` to form tag, and must be unique on the page:
   ```html
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="login" data-formlyjs-res-type="application/json">
        ...
    </form>
   ```

### To get started:

  - Simple Form:
  ```html
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">
        <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-error="name">@error('name'){{ $message }}@enderror</p>

        <input type="text" name="username" value="{{ $user->username}}">
        <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-error="username">@error('username'){{ $message }}@enderror</p>

        <input type="text" name="email"  value="{{ $user->email }}">
        <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-error="email">@error('email'){{ $message }}@enderror</p>

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
        <button type="submit" data-formlyjs-saving="Saving...">
            <span data-formlyjs-saving-default>Save</span>
            {{-- <span class="hidden" data-formlyjs-loading>...</span> --}}
        </button>
    </form>
  ```
&nbsp;
### data-formlyjs-success , data-formlyjs-error , data-formlyjs-add
This attributtes can receive a value. We can do:
| Example | Description |
| ------- | ----------- |
| ```data-formlyjs-success="success|show"``` | This means we just want to add the classes from ```data-formlyjs-class-add``` and remove from ```data-formlyjs-class-remove``` if the the key ```success``` exist in the reponse object |
| ```data-formlyjs-success="success|inner"``` | This means we just want to replace the ```innerHTML``` from the current object if the the key ```success``` exist in the reponse object |
| ```data-formlyjs-res="avatar|ra"``` | This means we just want to replace the value of current html attributtes values, if the the key ```avatar``` exist in the reponse object |
| ```data-formlyjs-success="success"``` | This means we want to add the classes from ```data-formlyjs-class-add``` and remove from ```data-formlyjs-class-remove``` and replace the ```innerHTML``` from the current object, if the the key ```success``` exist in the reponse object |

### data-formlyjs-success , data-formlyjs-error , data-formlyjs-add, data-formlyjs-res

we can use an html element to be displayed in certain errors, just need to use ```;``` to seperate object keys.

```php
    <div class="@if (session('success')) success-alert @else hidden @endif"
        id="success-alert"
        data-formlyjs-to="update-user"
        data-formlyjs-success="success;username|show" 
        data-formlyjs-class-add="success-alert"
        data-formlyjs-class-remove="hidden"
        data-formlyjs-timeout="2s">
        <strong class="font-bold">Holy smokes!</strong>
        <span class="block sm:inline"
                data-formlyjs-to="update-user"
                data-formlyjs-success="success;username|inner">
            @if (session('success'))
                {{ session('success') }}
            @endif
        </span>
        <span class="absolute top-0 bottom-0 right-0 px-4 py-3 cursor-pointer flex justify-center items-center" data-formlyjs-close="success-alert">
          <svg class="fill-current h-6 w-6 text-green-500" role="button" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><title>Close</title><path d="M14.348 14.849a1.2 1.2 0 0 1-1.697 0L10 11.819l-2.651 3.029a1.2 1.2 0 1 1-1.697-1.697l2.758-3.15-2.759-3.152a1.2 1.2 0 1 1 1.697-1.697L10 8.183l2.651-3.031a1.2 1.2 0 1 1 1.697 1.697l-2.758 3.152 2.758 3.15a1.2 1.2 0 0 1 0 1.698z"/></svg>
        </span>
    </div>
```

We can see in the example above, ```data-formlyjs-success="success;username|show"```,  this means that it will be used if get a success reponse, and the response contains an object key ```"success"``` or ```"username"``` 


#### Available Values

| Option | Description |
| ------ | ----------- |
| ```show```  | This means we just want to add the classes from ```data-formlyjs-class-add``` and remove from ```data-formlyjs-class-remove``` if the a certain key exists in the reponse object |
| ```inner```  | This means we just want to replace the ```innerHTML``` from the current object if a certain key exists in the reponse object  |
| ```ra```  | This means we just want to replace the attributes specified in ```data-formlyjs-atr``` attributte from the current object if a certain key exists in the reponse object, eg: ```<div data-formlyjs-to="update-user data-formlyjs-res="username|ra" data-formlyjs-atr="value"></div>```|
|  | ```Default``` This means we want to add the classes from ```data-formlyjs-class-add``` and remove from ```data-formlyjs-class-remove``` and replace the ```innerHTML``` from the current object, if the a certain key exist in the reponse object |


Example of ```ra``` usage:
  - Upload Image
    ```php
    <div class="flex items-center">
        <img class="w-8 h-8 rounded-full mr-4" data-formlyjs-to="upload-avatar" data-formlyjs-res="avatar|ra" data-formlyjs-atr="src" name="" src="{{ Auth::user()->avatarURL(['w' => 40, 'h' => 40, 'fit' => 'crop']) }}" alt="Avatar of Miguel">
    </div>
    ```
  - Explanation:
    - We are saying that we want to replace the value of attributte ```src``` if we get a response from form ```upload-avatar``` with a key named ```avatar```

  - Replace multiple attributes on current element
    - It is possible to replace multiple attributtes on the current object
    ```php
    <div class="flex items-center">
        <img ... data-formlyjs-to="upload-avatar" data-formlyjs-res="avatar;username|ra" data-formlyjs-atr="src|alt" name="" src="someValue" alt="Avatar of Miguel">
    </div>
    ```
    - Explanation:
      - We are saying that we want to replace the value of attributte ```src``` if we get a response from form ```upload-avatar``` with a key named ```avatar```, and replace the value of attributte ```alt``` if we get a response from form ```upload-avatar``` with a key named ```username```
Example:

```php
<div class="@if (session('success')) success-alert @else hidden @endif"
    id="success-alert"
    data-formlyjs-to="update-user"
    data-formlyjs-success="success|show" 
    data-formlyjs-class-add="success-alert"
    data-formlyjs-class-remove="hidden">
    <strong class="font-bold">Holy smokes!</strong>
    <span class="block sm:inline"
            data-formlyjs-to="update-user"
            data-formlyjs-success="success|inner">
        @if (session('success'))
            {{ session('success') }}
        @endif
    </span>
    <span class="absolute top-0 bottom-0 right-0 px-4 py-3 cursor-pointer flex justify-center items-center" data-formlyjs-close="success-alert">
        <svg class="fill-current h-6 w-6 text-green-500" role="button" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><title>Close</title><path d="M14.348 14.849a1.2 1.2 0 0 1-1.697 0L10 11.819l-2.651 3.029a1.2 1.2 0 1 1-1.697-1.697l2.758-3.15-2.759-3.152a1.2 1.2 0 1 1 1.697-1.697L10 8.183l2.651-3.031a1.2 1.2 0 1 1 1.697 1.697l-2.758 3.152 2.758 3.15a1.2 1.2 0 0 1 0 1.698z"/></svg>
    </span>
</div>
```

&nbsp;
### Attributes

- ```data-formlyjs-res```, it is used to get and persist the response.
    It can be used inside the form:
    ```php
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-res="name">@error('name'){{ $message }}@enderror</p>
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
    Or Outside the form:
    ```php
    <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-to="update-user" data-formlyjs-res="name">@error('name'){{ $message }}@enderror</p>

    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
&nbsp;
- ```data-formlyjs-error```, it is used to get response errors, errors are cleaned in form submit, this is used to display form errors
  &nbsp;
    Response Example:
    ```{"errors": { "name": "Invalid Characters", "email": "Invalid Email Address"}}```
    &nbsp;
    It can be used inside the form:
    ```php
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-error="name">@error('name'){{ $message }}@enderror</p>
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
    Or Outside the form:
    ```php
    <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-to="update-user" data-formlyjs-error="name">@error('name'){{ $message }}@enderror</p>

    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
&nbsp;
- ```data-formlyjs-success```, it is used to get success response, this it is used to display success messages, this is used to display form errors
  &nbsp;
    Response Example:
    ```{ "success": "User Created" }```
    &nbsp;
    It can be used inside the form:
    ```php
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        <p class="text-green-500 text-xs italic pt-2" data-formlyjs-success="success"></p>
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
    Or Outside the form:
    ```php
    <p class="text-red-500 text-xs italic pt-2 @error('name') hidden @enderror" data-formlyjs-to="update-user" data-formlyjs-success="success"></p>

    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```

    &nbsp;
- ```data-formlyjs-add```, it is used to append the response to the element where it is placed, this can be used, for example to attach comments it comments area
  &nbsp;
    Response Example:
    ```{ "comment": "Nice Post" }```
    &nbsp;
    It can be used inside the form:
    ```php
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        <p class="text-xs italic pt-2" data-formlyjs-add="comment"></p>
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
    Or Outside the form:
    ```php
    <p class="text-xs italic pt-2" data-formlyjs-to="update-user" data-formlyjs-add="comment"></p>

    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="update-user" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">

        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
    &nbsp;
- ```data-formlyjs-class-add``` and ```data-formlyjs-class-remove``` can be used with ```data-formlyjs-success```, ```data-formlyjs-res``` and  ```data-formlyjs-error```
   Explanation:
   - The attributte ```data-formlyjs-class-add``` add the classes when it receives a response
   - The attributte ```data-formlyjs-class-remove``` remove the classes when it receives a response
   - Usage Example:
        ```php
        <span role="alert">
            <p class="hidden" data-formlyjs-to="update-user" data-formlyjs-add="success" data-formlyjs-class-add="block border-b-2" data-formlyjs-class-remove="hidden">
                @if (session('success')) {{ session('success') } }@endif
            </p>
        </span>
        ```
    - Classes must be separeted using spaces:
    ```data-formlyjs-class-add="block border-b-2"``` and ```data-formlyjs-class-remove="hidden"```

    &nbsp;
- ```data-formlyjs-remove```, it is used to remove html element on form submit success response, this attribut must receive the element id to be removed
  &nbsp;
    ```php
    <h1>Remove Element on Success</h1>
    <p id="remove">Element to be removed!</p>
    <form action="{{ route('account.update')}}" method="post" data-formlyjs-name="remove" data-formlyjs-remove="remove" data-formlyjs-res-type="application/json">
        {{-- <span role="alert">
            <p class="font-proxima font-light bg-green-200 rounded-lg text-green-600 text-sm p-2 text-center mb-4 @if (!session('success')) hidden @endif" data-formlyjs-success="success" data-formlyjs-class-add="block border-b-2" data-formlyjs-class-remove="hidden  bg-green-200">
                @if (session('success')) {{ session('success') }}@endif
            </p>
        </span> --}}
        @csrf
        @method('patch')
        <input type="text" name="name" value="{{ $user->name}}">
        <span role="alert">
            <p class="text-red-500 text-xs italic pt-2" data-formlyjs-error="name">@error('name'){{ $message }}@enderror</p>
        </span>

        <input type="text" name="username" value="{{ $user->username}}">
        <span role="alert">
            <p class="text-red-500 text-xs italic pt-2" data-formlyjs-error="username">@error('username'){{ $message }}@enderror</p>
        </span>

        <input type="text" name="email"  value="{{ $user->email }}">
        <span role="alert">
            <p class="text-red-500 text-xs italic pt-2" data-formlyjs-error="email">@error('email'){{ $message }}@enderror</p>
        </span>
        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
        <button type="submit" data-formlyjs-saving="Saving...">
            <span data-formlyjs-saving-default>Save</span>
            {{-- <span class="hidden" data-formlyjs-loading>...</span> --}}
        </button>
    </form>
    ```
    &nbsp;
- ```data-formlyjs-type```, it is used to specify the form type, available options: ```toggler```, it is not required, this data-formlyjs-type it will append a class ```open``` on the ```<form></form>``` parent
  &nbsp;
    ```php
    <div class="data-formlyjs-toggler-container privacy-container">
        <form action="/account/profile/private" class="unpublic" class="" method="post" data-formlyjs-name="private" data-formlyjs-type="toggler" data-formlyjs-res-type="application/json">
            @csrf
            @method('patch')
            <input type="submit" value="Set Private">
        </form>
        <form action="/account/profile/public" method="post" class="public" data-formlyjs-name="star" data-formlyjs-type="toggler" data-formlyjs-res-type="application/json">
            @csrf
            @method('patch')
            <input type="submit" value="Set Public">
        </form>
    </div>
    ```
    &nbsp;
- ```data-formlyjs-res-type```, it is used to specify the desired response type, available options: ```application/json```, it is not required, default: ```application/json```
  &nbsp;
    ```php
    <form action="/account/profile/private" class="unpublic" class="" method="post" data-formlyjs-name="private" data-formlyjs-res-type="application/json">
        @csrf
        @method('patch')
        <input type="submit" value="Set Private">
    </form>
    ```
    &nbsp;
- ```data-formlyjs-loading```, it is displayed when user submit the form and waits the response, it can receive form name
  &nbsp;
    It is displayed when any form on the page it is submitted
    ```php
    <p class="hidden" data-formlyjs-loading>Saving...</p>
    <form action="/account/profile/private" class="unpublic" class="" method="post" data-formlyjs-name="private">
        @csrf
        @method('patch')
        <input type="submit" value="Set Private">
    </form>
    <form action="/account/profile/public" class="public" class="" method="post" data-formlyjs-name="public">
        @csrf
        @method('patch')
        <input type="submit" value="Set Public">
    </form>
    ```
  &nbsp;
    It only be displayed when the first form it is submitted, because it receives the form name, linking it to the form
    ```php
    <p class="hidden" data-formlyjs-loading="private">Saving...</p>
    <form action="/account/profile/private" class="unpublic" class="" method="post" data-formlyjs-name="private">
        @csrf
        @method('patch')
        <input type="submit" value="Set Private">
    </form>
    <form action="/account/profile/public" class="public" class="" method="post" data-formlyjs-name="public">
        @csrf
        @method('patch')
        <input type="submit" value="Set Public">
    </form>
    ```

- ```data-formlyjs-saving```, it used in ```input```  and ```button```, this attribut receives the text that should be replaced when user submit the form
  &nbsp;
    Usage Example with ```<input></input>```
    **Explanation:** When the user submit the form, if the input tag has the attribute ```data-formlyjs-saving``` the value of it it will replace the value of attribute ```value```
    ```php
    <form action="/account/profile/public" class="public" class="" method="post" data-formlyjs-name="public">
        @csrf
        @method('patch')
        <input type="submit" data-formlyjs-saving="Saving..." value="Save">
    </form>
    ```
  &nbsp;
    Usage Example with ```<button></button>```
    **Explanation:** When the user submit the form, if the button tag has the attribute ```data-formlyjs-saving``` the value of it it will replace the value of an inner html element with the attribute name ```data-formlyjs-saving-default```
    ```php
    <p class="hidden" data-formlyjs-loading="private">Saving...</p>
    <form action="/account/profile/public" class="public" class="" method="post" data-formlyjs-name="public">
        @csrf
        @method('patch')
                <input type="submit" data-formlyjs-saving="Saving..." value="Save">
        <button type="submit" data-formlyjs-saving="Saving...">
            <span data-formlyjs-saving-default>Save</span>
            <span class="hidden" data-formlyjs-loading><svg>...</svg></span>
        </button>
    </form>
    ```

---
_Source: https://npm.io/package/formlyjs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
