@ng-formworks/core 17.2.7 → 17.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +836 -0
  3. package/esm2022/lib/framework-library/framework-library.service.mjs +175 -0
  4. package/esm2022/lib/framework-library/framework.mjs +15 -0
  5. package/esm2022/lib/framework-library/no-framework.component.mjs +18 -0
  6. package/esm2022/lib/framework-library/no-framework.module.mjs +27 -0
  7. package/esm2022/lib/framework-library/no.framework.mjs +19 -0
  8. package/esm2022/lib/json-schema-form.component.mjs +765 -0
  9. package/esm2022/lib/json-schema-form.module.mjs +26 -0
  10. package/esm2022/lib/json-schema-form.service.mjs +679 -0
  11. package/esm2022/lib/locale/de-validation-messages.mjs +60 -0
  12. package/esm2022/lib/locale/en-validation-messages.mjs +60 -0
  13. package/esm2022/lib/locale/es-validation-messages.mjs +57 -0
  14. package/esm2022/lib/locale/fr-validation-messages.mjs +60 -0
  15. package/esm2022/lib/locale/index.mjs +8 -0
  16. package/esm2022/lib/locale/it-validation-messages.mjs +60 -0
  17. package/esm2022/lib/locale/pt-validation-messages.mjs +60 -0
  18. package/esm2022/lib/locale/zh-validation-messages.mjs +60 -0
  19. package/esm2022/lib/shared/convert-schema-to-draft6.function.mjs +300 -0
  20. package/esm2022/lib/shared/form-group.functions.mjs +442 -0
  21. package/esm2022/lib/shared/format-regex.constants.mjs +54 -0
  22. package/esm2022/lib/shared/index.mjs +12 -0
  23. package/esm2022/lib/shared/json-schema.functions.mjs +784 -0
  24. package/esm2022/lib/shared/json.validators.mjs +884 -0
  25. package/esm2022/lib/shared/jsonpointer.functions.mjs +1026 -0
  26. package/esm2022/lib/shared/layout.functions.mjs +1154 -0
  27. package/esm2022/lib/shared/merge-schemas.function.mjs +345 -0
  28. package/esm2022/lib/shared/utility.functions.mjs +380 -0
  29. package/esm2022/lib/shared/validator.functions.mjs +584 -0
  30. package/esm2022/lib/widget-library/add-reference.component.mjs +61 -0
  31. package/esm2022/lib/widget-library/button.component.mjs +72 -0
  32. package/esm2022/lib/widget-library/checkbox.component.mjs +105 -0
  33. package/esm2022/lib/widget-library/checkboxes.component.mjs +147 -0
  34. package/esm2022/lib/widget-library/file.component.mjs +35 -0
  35. package/esm2022/lib/widget-library/hidden.component.mjs +54 -0
  36. package/esm2022/lib/widget-library/index.mjs +55 -0
  37. package/esm2022/lib/widget-library/input.component.mjs +119 -0
  38. package/esm2022/lib/widget-library/message.component.mjs +38 -0
  39. package/esm2022/lib/widget-library/none.component.mjs +21 -0
  40. package/esm2022/lib/widget-library/number.component.mjs +123 -0
  41. package/esm2022/lib/widget-library/one-of.component.mjs +35 -0
  42. package/esm2022/lib/widget-library/orderable.directive.mjs +123 -0
  43. package/esm2022/lib/widget-library/radios.component.mjs +153 -0
  44. package/esm2022/lib/widget-library/root.component.mjs +79 -0
  45. package/esm2022/lib/widget-library/section.component.mjs +199 -0
  46. package/esm2022/lib/widget-library/select-framework.component.mjs +51 -0
  47. package/esm2022/lib/widget-library/select-widget.component.mjs +46 -0
  48. package/esm2022/lib/widget-library/select.component.mjs +150 -0
  49. package/esm2022/lib/widget-library/submit.component.mjs +82 -0
  50. package/esm2022/lib/widget-library/tab.component.mjs +41 -0
  51. package/esm2022/lib/widget-library/tabs.component.mjs +108 -0
  52. package/esm2022/lib/widget-library/template.component.mjs +46 -0
  53. package/esm2022/lib/widget-library/textarea.component.mjs +104 -0
  54. package/esm2022/lib/widget-library/widget-library.module.mjs +42 -0
  55. package/esm2022/lib/widget-library/widget-library.service.mjs +226 -0
  56. package/esm2022/ng-formworks-core.mjs +5 -0
  57. package/esm2022/public_api.mjs +13 -0
  58. package/fesm2022/ng-formworks-core.mjs +10149 -0
  59. package/fesm2022/ng-formworks-core.mjs.map +1 -0
  60. package/index.d.ts +5 -0
  61. package/lib/framework-library/framework-library.service.d.ts +55 -0
  62. package/lib/framework-library/framework.d.ts +13 -0
  63. package/lib/framework-library/no-framework.component.d.ts +8 -0
  64. package/lib/framework-library/no-framework.module.d.ts +9 -0
  65. package/lib/framework-library/no.framework.d.ts +10 -0
  66. package/lib/json-schema-form.component.d.ts +218 -0
  67. package/lib/json-schema-form.module.d.ts +11 -0
  68. package/lib/json-schema-form.service.d.ts +115 -0
  69. package/lib/locale/de-validation-messages.d.ts +1 -0
  70. package/lib/locale/en-validation-messages.d.ts +1 -0
  71. package/lib/locale/es-validation-messages.d.ts +1 -0
  72. package/lib/locale/fr-validation-messages.d.ts +1 -0
  73. package/{src/lib/locale/index.ts → lib/locale/index.d.ts} +7 -7
  74. package/lib/locale/it-validation-messages.d.ts +1 -0
  75. package/lib/locale/pt-validation-messages.d.ts +1 -0
  76. package/lib/locale/zh-validation-messages.d.ts +1 -0
  77. package/lib/shared/convert-schema-to-draft6.function.d.ts +21 -0
  78. package/lib/shared/form-group.functions.d.ts +100 -0
  79. package/lib/shared/format-regex.constants.d.ts +19 -0
  80. package/lib/shared/index.d.ts +9 -0
  81. package/lib/shared/json-schema.functions.d.ts +193 -0
  82. package/lib/shared/json.validators.d.ts +441 -0
  83. package/lib/shared/jsonpointer.functions.d.ts +416 -0
  84. package/lib/shared/layout.functions.d.ts +83 -0
  85. package/lib/shared/merge-schemas.function.d.ts +19 -0
  86. package/lib/shared/utility.functions.d.ts +165 -0
  87. package/{src/lib/shared/validator.functions.ts → lib/shared/validator.functions.d.ts} +364 -601
  88. package/lib/widget-library/add-reference.component.d.ts +20 -0
  89. package/lib/widget-library/button.component.d.ts +21 -0
  90. package/lib/widget-library/checkbox.component.d.ts +24 -0
  91. package/lib/widget-library/checkboxes.component.d.ts +24 -0
  92. package/lib/widget-library/file.component.d.ts +21 -0
  93. package/lib/widget-library/hidden.component.d.ts +19 -0
  94. package/{src/lib/widget-library/index.ts → lib/widget-library/index.d.ts} +47 -56
  95. package/lib/widget-library/input.component.d.ts +22 -0
  96. package/lib/widget-library/message.component.d.ts +15 -0
  97. package/lib/widget-library/none.component.d.ts +8 -0
  98. package/lib/widget-library/number.component.d.ts +25 -0
  99. package/lib/widget-library/one-of.component.d.ts +21 -0
  100. package/lib/widget-library/orderable.directive.d.ts +41 -0
  101. package/lib/widget-library/radios.component.d.ts +23 -0
  102. package/lib/widget-library/root.component.d.ts +17 -0
  103. package/lib/widget-library/section.component.d.ts +19 -0
  104. package/lib/widget-library/select-framework.component.d.ts +18 -0
  105. package/lib/widget-library/select-widget.component.d.ts +18 -0
  106. package/lib/widget-library/select.component.d.ts +24 -0
  107. package/lib/widget-library/submit.component.d.ts +24 -0
  108. package/lib/widget-library/tab.component.d.ts +14 -0
  109. package/lib/widget-library/tabs.component.d.ts +20 -0
  110. package/lib/widget-library/template.component.d.ts +18 -0
  111. package/lib/widget-library/textarea.component.d.ts +21 -0
  112. package/lib/widget-library/widget-library.module.d.ts +31 -0
  113. package/lib/widget-library/widget-library.service.d.ts +22 -0
  114. package/package.json +64 -53
  115. package/{src/public_api.ts → public_api.d.ts} +9 -21
  116. package/karma.conf.js +0 -46
  117. package/ng-package.json +0 -11
  118. package/src/lib/framework-library/framework-library.service.ts +0 -195
  119. package/src/lib/framework-library/framework.ts +0 -11
  120. package/src/lib/framework-library/no-framework.component.html +0 -2
  121. package/src/lib/framework-library/no-framework.component.ts +0 -11
  122. package/src/lib/framework-library/no-framework.module.ts +0 -18
  123. package/src/lib/framework-library/no.framework.ts +0 -11
  124. package/src/lib/json-schema-form.component.html +0 -7
  125. package/src/lib/json-schema-form.component.ts +0 -809
  126. package/src/lib/json-schema-form.module.ts +0 -17
  127. package/src/lib/json-schema-form.service.ts +0 -907
  128. package/src/lib/locale/de-validation-messages.ts +0 -58
  129. package/src/lib/locale/en-validation-messages.ts +0 -58
  130. package/src/lib/locale/es-validation-messages.ts +0 -55
  131. package/src/lib/locale/fr-validation-messages.ts +0 -58
  132. package/src/lib/locale/it-validation-messages.ts +0 -58
  133. package/src/lib/locale/pt-validation-messages.ts +0 -58
  134. package/src/lib/locale/zh-validation-messages.ts +0 -58
  135. package/src/lib/locale-dates/en-US.ts +0 -5
  136. package/src/lib/shared/convert-schema-to-draft6.function.ts +0 -321
  137. package/src/lib/shared/form-group.functions.ts +0 -522
  138. package/src/lib/shared/format-regex.constants.ts +0 -73
  139. package/src/lib/shared/index.ts +0 -40
  140. package/src/lib/shared/json-schema.functions.ts +0 -788
  141. package/src/lib/shared/json.validators.ts +0 -878
  142. package/src/lib/shared/jsonpointer.functions.ts +0 -1012
  143. package/src/lib/shared/jspointer.functions.json.spec.ts +0 -103
  144. package/src/lib/shared/layout.functions.ts +0 -1233
  145. package/src/lib/shared/merge-schemas.function.ts +0 -329
  146. package/src/lib/shared/utility.functions.ts +0 -373
  147. package/src/lib/shared/validator.functions.spec.ts +0 -55
  148. package/src/lib/widget-library/add-reference.component.ts +0 -59
  149. package/src/lib/widget-library/button.component.ts +0 -54
  150. package/src/lib/widget-library/checkbox.component.ts +0 -74
  151. package/src/lib/widget-library/checkboxes.component.ts +0 -104
  152. package/src/lib/widget-library/file.component.ts +0 -36
  153. package/src/lib/widget-library/hidden.component.ts +0 -39
  154. package/src/lib/widget-library/input.component.ts +0 -76
  155. package/src/lib/widget-library/message.component.ts +0 -29
  156. package/src/lib/widget-library/none.component.ts +0 -12
  157. package/src/lib/widget-library/number.component.ts +0 -79
  158. package/src/lib/widget-library/one-of.component.ts +0 -36
  159. package/src/lib/widget-library/orderable.directive.ts +0 -130
  160. package/src/lib/widget-library/radios.component.ts +0 -101
  161. package/src/lib/widget-library/root.component.ts +0 -78
  162. package/src/lib/widget-library/section.component.ts +0 -133
  163. package/src/lib/widget-library/select-framework.component.ts +0 -50
  164. package/src/lib/widget-library/select-widget.component.ts +0 -46
  165. package/src/lib/widget-library/select.component.ts +0 -96
  166. package/src/lib/widget-library/submit.component.ts +0 -68
  167. package/src/lib/widget-library/tab.component.ts +0 -29
  168. package/src/lib/widget-library/tabs.component.ts +0 -83
  169. package/src/lib/widget-library/template.component.ts +0 -52
  170. package/src/lib/widget-library/textarea.component.ts +0 -68
  171. package/src/lib/widget-library/widget-library.module.ts +0 -13
  172. package/src/lib/widget-library/widget-library.service.ts +0 -234
  173. package/src/test.ts +0 -18
  174. package/tsconfig.lib.json +0 -25
  175. package/tsconfig.lib.prod.json +0 -9
  176. package/tsconfig.spec.json +0 -17
  177. package/tslint.json +0 -11
package/README.md ADDED
@@ -0,0 +1,836 @@
1
+
2
+
3
+ # ng-formworks
4
+
5
+ This project is a continuation of [hamzahamidi/ajsf](https://github.com/hamzahamidi/ajsf) and [dschnelldavis/Angular2-json-schema-form](https://github.com/dschnelldavis/angular2-json-schema-form) and is not affiliated with any organization.
6
+
7
+ ng-formworks targets angular 15+ and also adds extra frameworks and theming support
8
+
9
+ [hamzahamidi/ajsf](https://github.com/hamzahamidi/ajsf) can be used for angular 14 and below
10
+
11
+ <p align="center">
12
+
13
+
14
+ <a href="https://angular.io/"><img src="https://img.shields.io/badge/angular-15,_16,_17-red.svg?logo=Angular&logoColor=red&labelColor=white&style=plastic" alt="Angular Versions"></a>
15
+ <a href="https://github.com/zahmo/ng-formworks/actions?query=workflow%3ACI+branch%3Amain"><img src="https://github.com/zahmo/ng-formworks/workflows/CI/badge.svg" alt="CI Status"></a> <a href="https://www.npmjs.com/package/@ng-formworks/core"><img src="https://img.shields.io/npm/dm/@ng-formworks/core.svg?style=plastic" alt="npm number of downloads"></a><a href="https://github.com/zahmo/ng-formworks/blob/master/LICENSE"><img src="https://img.shields.io/github/license/zahmo/ng-formworks.svg?style=social" alt="LICENSE IMT"></a><a href="https://app.netlify.com/sites/ng-formworks/deploys"><img src="https://api.netlify.com/api/v1/badges/6c5b5a1d-db7c-4d0e-8ac1-a4840d8812f0/deploy-status" alt="Netlify Status"></a>
16
+
17
+
18
+ </p>
19
+
20
+
21
+ A [JSON Schema](http://json-schema.org) Form builder for Angular, similar to, and mostly API compatible with:
22
+
23
+ * [JSON Schema Form](https://github.com/json-schema-form)'s [Angular Schema Form](http://schemaform.io) for [AngularJS](https://angularjs.org) ([examples](http://schemaform.io/examples/bootstrap-example.html))
24
+
25
+
26
+ * [Mozilla](https://blog.mozilla.org/services/)'s [React JSON Schema Form](https://github.com/mozilla-services/react-jsonschema-form) for [React](https://facebook.github.io/react/) ([examples](https://mozilla-services.github.io/react-jsonschema-form/)), and
27
+
28
+
29
+ * [Joshfire](http://www.joshfire.com)'s [JSON Form](http://github.com/joshfire/jsonform/wiki) for [jQuery](https://jquery.com) ([examples](http://ulion.github.io/jsonform/playground/))
30
+
31
+
32
+ ## Versions
33
+
34
+ ### NB the version of ng-formworks to be installed, should correspond to the Angular version being used.
35
+
36
+ Below is a table of the corresponding ng-formworks versions that's needed for the Angular version installed. It also lists the installation command if choosing to use the Material Design Framework, but installing other frameworks should have a similar command, have a look at their READMES for specific details.
37
+
38
+ | Angular | ng-formworks | installation (for Material Design)
39
+ |--|--|--|
40
+ | 17.x.x |17.x.x|```npm install @ng-formworks/core@^17.0.0 @ng-formworks/cssframework@^17.0.0 @ng-formworks/material@^17.0.0```|
41
+ | 16.x.x |16.x.x|```npm install @ng-formworks/core@^16.0.0 @ng-formworks/cssframework@^16.0.0 @ng-formworks/material@^16.0.0```|
42
+ | 15.x.x |15.x.x|```npm install @ng-formworks/core@^15.0.0 @ng-formworks/cssframework@^15.0.0 @ng-formworks/material@^15.0.0```|
43
+
44
+
45
+ ## Packages
46
+
47
+ * [`@ng-formworks/core`][gh_core_project] [![npm version][npm_core_badge]][npm_core_ver][![npm RC version][npm_core_badge_alpha]][npm_core_ver_alpha]
48
+
49
+ * [`@ng-formworks/cssframework`][gh_cssframework_project] [![npm version][npm_cssframework_badge]][npm_cssframework_ver][![npm RC version][npm_cssframework_badge_alpha]][npm_cssframework_ver_alpha]
50
+
51
+ * [`@ng-formworks/bootstrap3`][gh_bootstrap3_project] [![npm version][npm_bootstrap3_badge]][npm_bootstrap3_ver][![npm RC version][npm_bootstrap3_badge_alpha]][npm_bootstrap3_ver_alpha]
52
+
53
+ * [`@ng-formworks/bootstrap4`][gh_bootstrap4_project] [![npm version][npm_bootstrap4_badge]][npm_bootstrap4_ver][![npm RC version][npm_bootstrap4_badge_alpha]][npm_bootstrap4_ver_alpha]
54
+
55
+
56
+ * [`@ng-formworks/bootstrap5`][gh_bootstrap5_project] [![npm version][npm_bootstrap5_badge]][npm_bootstrap5_ver][![npm RC version][npm_bootstrap5_badge_alpha]][npm_bootstrap5_ver_alpha]
57
+
58
+
59
+ * [`@ng-formworks/daisyui`][gh_daisyui_project] [![npm version][npm_daisyui_badge]][npm_daisyui_ver][![npm RC version][npm_daisyui_badge_alpha]][npm_daisyui_ver_alpha]
60
+
61
+
62
+ * [`@ng-formworks/material`][gh_material_project] [![npm version][npm_material_badge]][npm_material_ver][![npm RC version][npm_material_badge_alpha]][npm_material_ver_alpha]
63
+
64
+ ## Check out the live demo and play with the examples
65
+
66
+ [Check out some examples here.](https://zahmo.github.io/ng-formworks/)
67
+
68
+ This example playground features over 70 different JSON Schemas for you to try (including all examples used by each of the three libraries listed above), and the ability to quickly view any example formatted with Material Design, Bootstrap 3, Bootstrap 4, Bootstrap 5, DaisyUI or without any formatting.
69
+
70
+ ## Installation
71
+
72
+ ### To install from NPM/YARN and use in your own project
73
+
74
+ First decide on which frameworks you plan to use (more than one can be installed) and have a look at their specific READMES regarding their installation:
75
+
76
+ [@ng-formworks/material][npm_material_ver] — Material Design
77
+
78
+
79
+ [@ng-formworks/bootstrap3][npm_bootstrap3_ver] — Bootstrap 3
80
+
81
+
82
+ [@ng-formworks/bootstrap4][npm_bootstrap4_ver] — Bootstrap 4
83
+
84
+
85
+ [@ng-formworks/bootstrap5][npm_bootstrap5_ver] — Bootstrap 5
86
+
87
+
88
+ [@ng-formworks/daisyui][npm_daisyui_ver] — DaisyUi
89
+
90
+
91
+ [@ng-formworks/core][npm_core_ver] — plain HTML (for testing)
92
+
93
+ For example if you'd like to try the material design based framework, [install @ng-formworks/material package from NPM][npm_material_ver] which uses `material-angular` UI. You can use either [NPM](https://www.npmjs.com) or [Yarn](https://yarnpkg.com). To install with NPM, run the following from your terminal:
94
+
95
+
96
+ ```shell
97
+ npm install @ng-formworks/core @ng-formworks/cssframework @ng-formworks/material
98
+ ```
99
+
100
+ With YARN, run the following:
101
+ ```shell
102
+ yarn add @ng-formworks/core @ng-formworks/cssframework @ng-formworks/material
103
+ ```
104
+
105
+ include the themes scss in your applications sass file(typically "styles.scss" under "src" folder -see angular docs for more details)
106
+ ```scss
107
+ @import "node_modules/@ng-formworks/material/assets/material-design-themes.scss";
108
+ ```
109
+
110
+ Then import `MaterialDesignFrameworkModule` in your main application module like this:
111
+
112
+
113
+ ```javascript
114
+
115
+ import { BrowserModule } from '@angular/platform-browser';
116
+ import { NgModule } from '@angular/core';
117
+ import { MaterialDesignFrameworkModule } from '@ng-formworks/material';
118
+ import { AppComponent } from './app.component';
119
+
120
+ @NgModule({
121
+ declarations: [ AppComponent ],
122
+ imports: [
123
+ MaterialDesignFrameworkModule
124
+ ],
125
+ providers: [],
126
+ bootstrap: [ AppComponent ]
127
+ })
128
+
129
+ export class AppModule { }
130
+ ```
131
+
132
+ six framework modules are currently available, their import is similar to above and may vary slightly, have a look at their specific docs :
133
+
134
+ * MaterialDesignFrameworkModule from [@ng-formworks/material][npm_material_ver] — Material Design
135
+
136
+
137
+ * Bootstrap3FrameworkModule from [@ng-formworks/bootstrap3][npm_bootstrap3_ver] — Bootstrap 3
138
+
139
+
140
+ * Bootstrap4FrameworkModule from [@ng-formworks/bootstrap4][npm_bootstrap4_ver] — Bootstrap 4
141
+
142
+
143
+ * Bootstrap5FrameworkModule from [@ng-formworks/bootstrap5][npm_bootstrap5_ver] — Bootstrap 5
144
+
145
+
146
+ * DaisyUIFrameworkModule from [@ng-formworks/daisyui][npm_daisyui_ver] — DaisyUi
147
+
148
+
149
+ * JsonSchemaFormModule from [@ng-formworks/core][npm_core_ver] — plain HTML (for testing)
150
+
151
+ It is also possible to load multiple frameworks and switch between them at runtime, like the example playground on GitHub. But most typical sites will just load one framework.
152
+
153
+ ### To install from GitHub
154
+
155
+ To install [the library and the example playground from GitHub](https://github.com/zahmo/ng-formworks), clone `https://github.com/zahmo/ng-formworks.git` with your favorite git program. Or, assuming you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Node/YARN](https://nodejs.org/en/download/) installed, enter the following in your terminal:
156
+
157
+
158
+ ```shell
159
+ git clone https://github.com/zahmo/ng-formworks.git ng-formworks
160
+ cd ng-formworks
161
+ yarn install
162
+ yarn start
163
+ ```
164
+
165
+ This should start a server with the example playground, which you can view in your browser at `http://localhost:4200`
166
+
167
+ The source code is composed as the following:
168
+
169
+ * `projects/ng-formworks-core` - Angular JSON Schema Form main library
170
+
171
+
172
+ * `projects/ng-formworks-cssframework` - Framework module used to build other frameworks
173
+
174
+
175
+ * `projects/ng-formworks-bootstrap3` - Framework for Bootstrap 3
176
+
177
+
178
+ * `projects/ng-formworks-bootstrap4` - Framework for Bootstrap 4
179
+
180
+
181
+ * `projects/ng-formworks-bootstrap5` - Framework for Bootstrap 5
182
+
183
+
184
+ * `projects/ng-formworks-daisyui` - Framework for DaisyUI
185
+
186
+
187
+ * `projects/ng-formworks-material` - Framework for Angular Material
188
+
189
+
190
+ * `projects/ng-formworks-core/src/lib/framework-library` - framework library
191
+
192
+
193
+ * `projects/ng-formworks-core/src/lib/widget-library` - widget library
194
+
195
+
196
+ * `projects/ng-formworks-core/src/lib/shared` - various utilities and helper functions
197
+
198
+
199
+ * `demo` - the demonstration playground example application
200
+
201
+
202
+ * `demo/assets/example-schemas` - JSON Schema examples used in the playground
203
+
204
+ If you want detailed documentation describing the individual functions used in this library, check the README in each component. (Angular JSON Schema Form is still a work in progress, so right now this documentation varies from highly detailed to completely missing.)
205
+
206
+ ## Using Angular JSON Schema Form
207
+
208
+ ### Basic use
209
+
210
+ For basic use, after loading JsonSchemaFormModule as described above, to display a form in your Angular component, simply add the following to your component's template:
211
+
212
+
213
+ ```html
214
+ <json-schema-form
215
+ loadExternalAssets="true"
216
+ [schema]="yourJsonSchema"
217
+ framework="no-framework"
218
+ (onSubmit)="yourOnSubmitFn($event)">
219
+ </json-schema-form>
220
+ ```
221
+
222
+ Where `schema` is a valid JSON schema object, and `onSubmit` calls a function to process the submitted JSON form data. If you don't already have your own schemas, you can find a bunch of samples to test with in the `demo/assets/example-schemas` folder, as described above.
223
+
224
+ `framework` is for the template you want to use, the default value is `no-framwork`. The possible values are:
225
+
226
+ * `material-design` for Material Design (if installed).
227
+
228
+
229
+ * `bootstrap-3` for Bootstrap 3 (if installed).
230
+
231
+
232
+ * `bootstrap-4` for Bootstrap 4 (if installed).
233
+
234
+
235
+ * `bootstrap-5` for Bootstrap 5 (if installed).
236
+
237
+
238
+ * `daisyui` for DaisyUi.
239
+
240
+
241
+ * `no-framework` for (plain HTML).
242
+
243
+ Setting `loadExternalAssets="true"` will automatically load any additional assets needed by the display framework. It is useful when you are trying out this library, but production sites should instead load all required assets separately. For full details see 'Changing or adding frameworks', below.
244
+
245
+ ### Data-only mode
246
+
247
+ Angular JSON Schema Form can also create a form entirely from a JSON object—with no schema—like so:
248
+
249
+
250
+ ```html
251
+ <json-schema-form
252
+ loadExternalAssets="true"
253
+ [(ngModel)]="exampleJsonObject">
254
+ </json-schema-form>
255
+ ```
256
+
257
+ ```javascript
258
+ exampleJsonObject = {
259
+ "first_name": "Jane", "last_name": "Doe", "age": 25, "is_company": false,
260
+ "address": {
261
+ "street_1": "123 Main St.", "street_2": null,
262
+ "city": "Las Vegas", "state": "NV", "zip_code": "89123"
263
+ },
264
+
265
+ "phone_numbers": [
266
+ { "number": "702-123-4567", "type": "cell" },
267
+ { "number": "702-987-6543", "type": "work" }
268
+ ],
269
+ "notes": ""
270
+
271
+ };
272
+ ```
273
+
274
+ In this mode, Angular JSON Schema Form automatically generates a schema from your data. The generated schema is relatively simple, compared to what you could create on your own. However, as the above example shows, it does detect and enforce string, number, and boolean values (nulls are also assumed to be strings), and automatically allows array elements to be added, removed, and reordered.
275
+
276
+ After displaying a form in this mode, you can also use the `formSchema` and `formLayout` outputs (described in 'Debugging inputs and outputs', below), to return the generated schema and layout, which will give you a head start on writing your own schemas and layouts by showing you examples created from your own data.
277
+
278
+ Also, notice that the 'ngModel' input supports Angular's 2-way data binding, just like other form controls, which is why it is not always necessary to use an onSubmit function.
279
+
280
+ ### Advanced use
281
+
282
+ #### Additional inputs an outputs
283
+
284
+ For more control over your form, you may provide these additional inputs:
285
+
286
+ * `layout` array with a custom form layout (see Angular Schema Form's [form definitions](https://github.com/json-schema-form/angular-schema-form/blob/master/docs/index.md#form-definitions) for information about how to construct a form layout)
287
+
288
+
289
+ * `data` object to populate the form with default or previously submitted values
290
+
291
+
292
+ * `options` object to set any global options for the form
293
+
294
+
295
+ * `widgets` object to add custom widgets
296
+
297
+
298
+ * `language` string to set the error message language (currently supports 'de', 'en', 'es', 'fr', 'it', 'pt', 'zh')
299
+
300
+
301
+ * `framework` string or object to set which framework to use
302
+
303
+ For `framework`, you can pass in your own custom framework object, or, if you've loaded multiple frameworks, you can specify the name of the framework you want to use. To switch between the included frameworks, use 'material-design', 'bootstrap-3', 'bootstrap-4', and 'no-framework'.
304
+
305
+ If you want more detailed output, you may provide additional functions for `onChanges` to read the values in real time as the form is being filled out, and you may implement your own custom validation indicators from the boolean `isValid` or the detailed `validationErrors` outputs.
306
+
307
+ Here is an example:
308
+
309
+
310
+ ```html
311
+ <json-schema-form
312
+ [schema]="yourJsonSchema"
313
+ [layout]="yourJsonFormLayout"
314
+ [(data)]="yourData"
315
+ [options]="yourFormOptions"
316
+ [widgets]="yourCustomWidgets"
317
+ language="fr"
318
+ framework="material-design"
319
+ loadExternalAssets="true"
320
+ (onChanges)="yourOnChangesFn($event)"
321
+ (onSubmit)="yourOnSubmitFn($event)"
322
+ (isValid)="yourIsValidFn($event)"
323
+ (validationErrors)="yourValidationErrorsFn($event)">
324
+ </json-schema-form>
325
+ ```
326
+
327
+ Note: If you prefer brackets around all your attributes, the following is functionally equivalent:
328
+
329
+
330
+ ```html
331
+ <json-schema-form
332
+ [schema]="yourJsonSchema"
333
+ [layout]="yourJsonFormLayout"
334
+ [(data)]="yourData"
335
+ [options]="yourFormOptions"
336
+ [widgets]="yourCustomWidgets"
337
+ [language]="'fr'"
338
+ [framework]="'material-design'"
339
+ [loadExternalAssets]="true"
340
+ (onChanges)="yourOnChangesFn($event)"
341
+ (onSubmit)="yourOnSubmitFn($event)"
342
+ (isValid)="yourIsValidFn($event)"
343
+ (validationErrors)="yourValidationErrorsFn($event)">
344
+ </json-schema-form>
345
+ ```
346
+
347
+ If you use this syntax, make sure to include the nested quotes (`"'` and `'"`) around the language and framework names. (If you leave out the inner quotes, Angular will read them as a variable names, rather than strings, which will cause errors. All un-bracketed attributes, however, are automatically read as strings, so they don't need inner quotes.)
348
+
349
+ #### Single-input mode
350
+
351
+ You may also combine all your inputs into one compound object and include it as a `form` input, like so:
352
+
353
+
354
+ ```javascript
355
+ const yourCompoundInputObject = {
356
+ schema: { ... }, // REQUIRED
357
+ layout: [ ... ], // optional
358
+ data: { ... }, // optional
359
+ options: { ... }, // optional
360
+ widgets: { ... }, // optional
361
+ language: '...' , // optional
362
+ framework: '...' // (or { ... }) optional
363
+ }
364
+ ```
365
+ ```html
366
+ <json-schema-form
367
+ [form]="yourCompoundInputObject"
368
+ (onSubmit)="yourOnSubmitFn($event)">
369
+ </json-schema-form>
370
+ ```
371
+
372
+ You can also mix these two styles depending on your needs. In the example playground, all examples use the combined `form` input for `schema`, `layout`, and `data`, which enables each example to control those three inputs, but the playground uses separate inputs for `language` and `framework`, enabling it to change those settings independent of the example.
373
+
374
+ Combining inputs is useful if you have many unique forms and store each form's data and schema together. If you have one form (or many identical forms), it will likely be more useful to use separate inputs for your data and schema. Though even in that case, if you use a custom layout, you could store your schema and layout together and use one input for both.
375
+
376
+ #### Compatibility modes
377
+
378
+ If you have previously used another JSON form creation library—Angular Schema Form (for AngularJS), React JSON Schema Form, or JSON Form (for jQuery)—in order to make the transition easier, Angular JSON Schema Form will recognize the input names and custom input objects used by those libraries. It should automatically work with JSON Schemas in [version 6](http://json-schema.org/draft-06/schema), [version 4](http://json-schema.org/draft-04/schema), [version 3](http://json-schema.org/draft-03/schema), or the [truncated version 3 format supported by JSON Form](https://github.com/joshfire/jsonform/wiki#schema-shortcut). So the following will all work:
379
+
380
+ Angular Schema Form (AngularJS) compatibility:
381
+
382
+
383
+ ```html
384
+ <json-schema-form
385
+ [schema]="yourJsonSchema"
386
+ [form]="yourAngularSchemaFormLayout"
387
+ [(model)]="yourData">
388
+ </json-schema-form>
389
+ ```
390
+
391
+ React JSON Schema Form compatibility:
392
+
393
+
394
+ ```html
395
+ <json-schema-form
396
+ [schema]="yourJsonSchema"
397
+ [UISchema]="yourReactJsonSchemaFormUISchema"
398
+ [(formData)]="yourData">
399
+ </json-schema-form>
400
+ ```
401
+
402
+ JSON Form (jQuery) compatibility:
403
+
404
+
405
+ ```html
406
+ <json-schema-form
407
+ [form]="{
408
+ schema: yourJsonSchema,
409
+ form: yourJsonFormLayout,
410
+ customFormItems: yourJsonFormCustomFormItems,
411
+ value: yourData
412
+ }">
413
+ </json-schema-form>
414
+ ```
415
+
416
+ Note: 2-way data binding will work with any dedicated data input, including 'data', 'model', 'ngModel', or 'formData'. However, 2-way binding will _not_ work with the combined 'form' input.
417
+
418
+ #### Debugging inputs and outputs
419
+
420
+ Finally, Angular JSON Schema Form includes some additional inputs and outputs for debugging:
421
+
422
+ * `debug` input — Activates debugging mode.
423
+
424
+
425
+ * `loadExternalAssets` input — Causes external JavaScript and CSS needed by the selected framework to be automatically loaded from a CDN (this is not 100% reliable, so while this can be helpful during development and testing, it is not recommended for production)—Note: If you are using this mode and get a console error saying an external asset has not loaded (such as jQuery, required for Bootstrap 3) simply reloading your web browser will usually fix it.
426
+
427
+
428
+ * `formSchema` and `formLayout` outputs — Returns the final schema and layout used to create the form (which will either show how your original input schema and layout were modified, if you provided inputs, or show you the automatically generated ones, if you didn't).
429
+
430
+
431
+ ```html
432
+ <json-schema-form
433
+ [schema]="yourJsonSchema"
434
+ [debug]="true"
435
+ loadExternalAssets="true"
436
+ (formSchema)="showFormSchemaFn($event)"
437
+ (formLayout)="showFormLayoutFn($event)">
438
+ </json-schema-form>
439
+ ```
440
+
441
+ ## Customizing
442
+
443
+ In addition to a large number of user-settable options, Angular JSON Schema Form also has the ability to load custom form control widgets and layout frameworks. All forms are constructed from these basic components. The default widget library includes all standard HTML 5 form controls, as well as several common layout patterns, such as multiple checkboxes and tab sets. The default framework library includes templates to style forms using Material Design, Bootstrap 3, or Bootstrap 4 (or plain HTML with no formatting, which is not useful in production, but can be helpful for development and debugging).
444
+
445
+ ### User settings
446
+
447
+ (TODO: List all available user settings, and configuration options for each.)
448
+
449
+ ### Creating custom input validation error messages
450
+
451
+ You can easily add your own custom input validation error messages, either for individual control widgets, or for your entire form.
452
+
453
+ #### Setting error messages for individual controls or the entire form
454
+
455
+ To set messages for individual form controls, add them to that control's node in the form layout, like this:
456
+
457
+
458
+ ```javascript
459
+ const yourFormLayout = [
460
+ { key: 'name',
461
+ title: 'Enter your name',
462
+ validationMessages: {
463
+ // Put your error messages for the 'name' field here
464
+ }
465
+ },
466
+ { type: 'submit', title: 'Submit' }
467
+ ]
468
+ ```
469
+
470
+ To set messages for the entire form, add them to the form options, inside the defautWidgetOptions validationMessages object, like this:
471
+
472
+
473
+ ```javascript
474
+ const yourFormOptions = {
475
+ defautWidgetOptions: {
476
+ validationMessages: {
477
+ // Put your error messages for the entire form here
478
+ }
479
+ }
480
+ }
481
+ ```
482
+
483
+ #### How to format error messages
484
+
485
+ The validationMessages object—in either a layout node or the form options—contains the names of each error message you want to set as keys, and the corresponding messages as values. Messages may be in any of the following formats:
486
+
487
+ * String: A plain text message, which is always the same.
488
+
489
+
490
+ * String template: A text message that includes Angular template-style {{variables}}, which will be be replaced with values from the returned error object.
491
+
492
+
493
+ * Function: A JavaScript function which accepts the error object as input, and returns a string error message.
494
+
495
+ Here are examples of all three error message types:
496
+
497
+
498
+ ```javascript
499
+ validationMessages: {
500
+ // String error message
501
+ required: 'This field is required.',
502
+ // String template error message
503
+ // - minimumLength variable will be replaced
504
+ minLength: 'Must be at least {{minimumLength}} characters long.',
505
+ // Function error message
506
+ // - example error object: { multipleOfValue: 0.01, currentValue: 3.456 }
507
+ // - resulting error message: 'Must have 2 or fewer decimal places.'
508
+ multipleOf: function(error) {
509
+ if ((1 / error.multipleOfValue) % 10 === 0) {
510
+ const decimals = Math.log10(1 / error.multipleOfValue);
511
+ return `Must have ${decimals} or fewer decimal places.`;
512
+ } else {
513
+ return `Must be a multiple of ${error.multipleOfValue}.`;
514
+ }
515
+ }
516
+ }
517
+
518
+ ```
519
+ (Note: These examples are from the default set of built-in error messages, which includes messages for all JSON Schema errors except type, const, enum, and dependencies.)
520
+
521
+ #### Available input validation errors and object values
522
+
523
+ Here is a list of all the built-in JSON Schema errors, which data type each error is available for, and the values in their returned error objects:
524
+
525
+ Error name | Data type | Returned error object values
526
+ -----------------|-----------|-----------------------------------------
527
+ required | any | (none)
528
+ type | any | requiredType, currentValue
529
+ const | any | requiredValue, currentValue
530
+ enum | any | allowedValues, currentValue
531
+ minLength | string | minimumLength, currentLength
532
+ maxLength | string | maximumLength, currentLength
533
+ pattern | string | requiredPattern, currentValue
534
+ format | string | requiredFormat, currentValue
535
+ minimum | number | minimumValue, currentValue
536
+ exclusiveMinimum | number | exclusiveMinimumValue, currentValue
537
+ maximum | number | maximumValue, currentValue
538
+ exclusiveMaximum | number | exclusiveMaximumValue, currentValue
539
+ multipleOf | number | multipleOfValue, currentValue
540
+ minProperties | object | minimumProperties, currentProperties
541
+ maxProperties | object | maximumProperties, currentProperties
542
+ dependencies * | object | (varies, based on dependencies schema)
543
+ minItems | array | minimumItems, currentItems
544
+ maxItems | array | maximumItems, currentItems
545
+ uniqueItems | array | duplicateItems
546
+ contains * | array | requiredItem
547
+
548
+ * Note: The `contains` and `dependencies` validators are still in development, and do not yet work correctly.
549
+
550
+ ### Changing or adding widgets
551
+
552
+ To add a new widget or override an existing widget, either add an object containing your new widgets to the `widgets` input of the `<json-schema-form>` tag, or load the `WidgetLibraryService` and call `registerWidget(widgetType, widgetComponent)`, with a string type name and an Angular component to be used whenever a form needs that widget type.
553
+
554
+ Example:
555
+
556
+
557
+ ```javascript
558
+ import { YourInputWidgetComponent } from './your-input-widget.component';
559
+
560
+ import { YourCustomWidgetComponent } from './your-custom-widget.component';
561
+
562
+ ...
563
+
564
+ const yourNewWidgets = {
565
+ 'input': YourInputWidgetComponent, // Replace existing 'input' widget
566
+ 'custom-control': YourCustomWidgetComponent // Add new 'custom-control' widget
567
+ }
568
+ ```
569
+
570
+ ...and...
571
+
572
+
573
+ ```html
574
+ <json-schema-form
575
+ [schema]="yourJsonSchema"
576
+ [widgets]="yourNewWidgets">
577
+ </json-schema-form>
578
+ ```
579
+
580
+ ...or...
581
+
582
+
583
+ ```javascript
584
+
585
+ import { WidgetLibraryService } from '@ng-formworks/core';
586
+
587
+
588
+ ...
589
+
590
+ constructor(private widgetLibrary: WidgetLibraryService) { }
591
+
592
+ ...
593
+
594
+ // Replace existing 'input' widget:
595
+ widgetLibrary.registerWidget('input', YourInputWidgetComponent);
596
+
597
+ // Add new 'custom-control' widget:
598
+ widgetLibrary.registerWidget('custom-control', YourCustomWidgetComponent);
599
+ ```
600
+
601
+ To see many examples of widgets, explore the source code, or call `getAllWidgets()` from the `WidgetLibraryService` to see all widgets currently available in the library. All default widget components are in the `projects/json-schema-form/src/lib/widget-library` folder, and all custom Material Design widget components are in the `projects/json-schema-form/src/lib/framework-library/material-design-framework` folder. (The Bootstrap 3 and Bootstrap 4 frameworks just reformat the default widgets, and so do not include any custom widgets of their own.)
602
+
603
+ ### Changing or adding frameworks
604
+
605
+ To change the active framework, either use the `framework` input of the `<json-schema-form>` tag, or load the `FrameworkLibraryService` and call `setFramework(yourCustomFramework)`, with either the name of an available framework ('bootstrap-3', 'bootstrap-4', 'material-design', or 'no-framework'), or with your own custom framework object, like so:
606
+
607
+
608
+ ```javascript
609
+ import { YourFrameworkComponent } from './your-framework.component';
610
+ import { YourWidgetComponent } from './your-widget.component';
611
+
612
+ ...
613
+
614
+ const yourCustomFramework = {
615
+ framework: YourFrameworkComponent, // required
616
+ widgets: { 'your-widget-name': YourWidgetComponent, ... }, // optional
617
+ stylesheets: [ '//url-to-framework-external-style-sheet', ... ], // optional
618
+ scripts: [ '//url-to-framework-external-script', ... ] // optional
619
+
620
+ }
621
+ ```
622
+
623
+ ...and...
624
+
625
+
626
+ ```html
627
+ <json-schema-form
628
+ [schema]="yourJsonSchema"
629
+ [framework]="yourCustomFramework">
630
+ </json-schema-form>
631
+ ```
632
+
633
+ ...or...
634
+
635
+
636
+ ```javascript
637
+ import { FrameworkLibraryService } from '@ng-formworks/core';
638
+
639
+ ...
640
+
641
+ constructor(private frameworkLibrary: FrameworkLibraryService) { }
642
+
643
+ ...
644
+
645
+ frameworkLibrary.setFramework(yourCustomFramework);
646
+ ```
647
+
648
+ The value of the required `framework` key is an Angular component which will be called to format each widget before it is displayed. The optional `widgets` object contains any custom widgets, which will override or supplement the built-in widgets. And the optional `stylesheets` and `scripts` arrays contain URLs to any additional external style sheets or JavaScript libraries required by the framework. These are the external stylesheets and scripts that will be loaded if the "loadExternalAssets" option is set to "true".
649
+
650
+ #### Loading external assets required by a framework
651
+
652
+ Most Web layout framework libraries (including both Bootstrap and Material Design) need additional external JavaScript and/or CSS assets loaded in order to work properly. The best practice is to load these assets separately in your site, before calling Angular JSON Schema Form. (For the included libraries, follow these links for more information about how to do this: [Bootstrap](http://getbootstrap.com/getting-started/) and [Material Design](https://github.com/angular/material2/blob/master/GETTING_STARTED.md).)
653
+
654
+ Alternately, during development, you may find it helpful to let Angular JSON Schema Form load these resources for you (as wed did in the 'Basic use' example, above), which you can do in several ways:
655
+
656
+ * Call `setFramework` with a second parameter of `true` (e.g. `setFramework('material-design', true)`), or
657
+
658
+
659
+ * Add `loadExternalAssets: true` to your `options` object, or
660
+
661
+
662
+ * Add `loadExternalAssets="true"` to your `<json-schema-form>` tag, as shown above
663
+
664
+ Finally, if you want to see what scripts a particular framework will automatically load, after setting that framework you can call `getFrameworkStylesheets()` or `getFrameworkScritps()` from the `FrameworkLibraryService` to return the built-in arrays of URLs.
665
+
666
+ However, if you are creating a production site you should load these assets separately, and make sure to remove all references to `loadExternalAssets` to prevent the assets from being loaded twice.
667
+
668
+ #### Theming
669
+
670
+
671
+ Framework specific theming is supported(implementation dependent).
672
+
673
+
674
+ To enable theming in a form component, the theme binding must be in place
675
+
676
+
677
+ for example
678
+
679
+
680
+ ```html
681
+ <json-schema-form
682
+ loadExternalAssets="true"
683
+ [schema]="yourJsonSchema"
684
+ [framework]="yourFramework"
685
+ [theme]="yourTheme"
686
+ (onSubmit)="yourOnSubmitFn($event)">
687
+ </json-schema-form>
688
+ ```
689
+
690
+ currently the following built-in themes are available(per framework):
691
+
692
+ * Bootstrap 3:"bootstrap3_default"
693
+ * Bootstrap 4:"bootstrap4_default"
694
+ * Bootstrap 5:"bootstrap5_default" | "light" | "dark"
695
+ * Material design:"material_default" | "indigo-pink" | "purple-green" | "deeppurple-amber" | "pink-bluegrey"
696
+ * DaisyUi: "daisyui_default" | "light" | "dark" | "cupcake" | "cmyk" | "pastel" |"daisyui_leaf"
697
+
698
+ | Framework Values | Theme values |
699
+ |--|--|
700
+ | "bootstrap-3" | "bootstrap3_default" |
701
+ | "bootstrap-4" | "bootstrap4_default" |
702
+ | "bootstrap-5" | "light" |
703
+ | | "dark" |
704
+ | "material-design" | "material_default" |
705
+ | | "indigo-pink" |
706
+ | | "purple-green" |
707
+ | | "deeppurple-amber" |
708
+ | | "pink-bluegrey" |
709
+ | "daisyui" | "daisyui_default" |
710
+ | | "light" |
711
+ | | "dark" |
712
+ | | "cupcake" |
713
+ | | "pastel" |
714
+ | | "daisyui-leaf" |
715
+
716
+
717
+ for more on how to customize themes, take a look at the relevant framework's docs:
718
+
719
+ * [`@ng-formworks/bootstrap3`](./projects/ng-formworks-bootstrap3/README.md#custom-theming)
720
+
721
+ * [`@ng-formworks/bootstrap4`](./projects/ng-formworks-bootstrap3/README.md#custom-theming)
722
+
723
+
724
+ * [`@ng-formworks/bootstrap5`](./projects/ng-formworks-bootstrap4/README.md#custom-theming)
725
+
726
+
727
+ * [`@ng-formworks/daisyui`](./projects/ng-formworks-daisyui/README.md#custom-theming)
728
+
729
+
730
+ * [`@ng-formworks/material`](./projects/ng-formworks-material/README.md#custom-theming)
731
+
732
+ ## contributing guide
733
+
734
+ If you like this project and want to contribute you can check this [documentation](./CONTRIBUTING.md).
735
+
736
+ ## License
737
+
738
+ [MIT](/LICENSE)
739
+
740
+ [gh_core_project]:./README.md
741
+
742
+ [npm_core_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fcore.svg?color=#010101
743
+
744
+ [npm_core_ver]:https://www.npmjs.com/package/@ng-formworks/core
745
+
746
+ [npm_core_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fcore/RC.svg?color=blue
747
+
748
+ [npm_core_ver_RC]:https://www.npmjs.com/package/@ng-formworks/core
749
+
750
+ [npm_core_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fcore/alpha.svg?color=blue
751
+
752
+ [npm_core_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/core
753
+
754
+ [gh_cssframework_project]:./projects/ng-formworks-cssframework/README.md
755
+
756
+ [npm_cssframework_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fcssframework.svg?color=#010101
757
+
758
+ [npm_cssframework_ver]:https://www.npmjs.com/package/@ng-formworks/cssframework
759
+
760
+ [npm_cssframework_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fcssframework/RC.svg?color=blue
761
+
762
+ [npm_cssframework_ver_RC]:https://www.npmjs.com/package/@ng-formworks/cssframework
763
+
764
+ [npm_cssframework_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fcssframework/alpha.svg?color=blue
765
+
766
+ [npm_cssframework_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/cssframework
767
+
768
+ [gh_bootstrap3_project]:./projects/ng-formworks-bootstrap3/README.md
769
+
770
+ [npm_bootstrap3_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap3.svg?color=#010101
771
+
772
+ [npm_bootstrap3_ver]:https://www.npmjs.com/package/@ng-formworks/bootstrap3
773
+
774
+ [npm_bootstrap3_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap3/RC.svg?color=blue
775
+
776
+ [npm_bootstrap3_ver_RC]:https://www.npmjs.com/package/@ng-formworks/bootstrap3
777
+
778
+ [npm_bootstrap3_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap3/alpha.svg?color=blue
779
+
780
+ [npm_bootstrap3_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/bootstrap3
781
+
782
+ [gh_bootstrap4_project]:./projects/ng-formworks-bootstrap4/README.md
783
+
784
+ [npm_bootstrap4_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap4.svg?color=#010101
785
+
786
+ [npm_bootstrap4_ver]:https://www.npmjs.com/package/@ng-formworks/bootstrap4
787
+
788
+ [npm_bootstrap4_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap4/RC.svg?color=blue
789
+
790
+ [npm_bootstrap4_ver_RC]:https://www.npmjs.com/package/@ng-formworks/bootstrap4
791
+
792
+ [npm_bootstrap4_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap4/alpha.svg?color=blue
793
+
794
+ [npm_bootstrap4_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/bootstrap4
795
+
796
+ [gh_bootstrap5_project]:./projects/ng-formworks-bootstrap5/README.md
797
+
798
+ [npm_bootstrap5_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap5.svg?color=#010101
799
+
800
+ [npm_bootstrap5_ver]:https://www.npmjs.com/package/@ng-formworks/bootstrap5
801
+
802
+ [npm_bootstrap5_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap5/RC.svg?color=blue
803
+
804
+ [npm_bootstrap5_ver_RC]:https://www.npmjs.com/package/@ng-formworks/bootstrap5
805
+
806
+ [npm_bootstrap5_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fbootstrap5/alpha.svg?color=blue
807
+
808
+ [npm_bootstrap5_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/bootstrap5
809
+
810
+ [gh_daisyui_project]:./projects/ng-formworks-daisyui/README.md
811
+
812
+ [npm_daisyui_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fdaisyui.svg?color=#010101
813
+
814
+ [npm_daisyui_ver]:https://www.npmjs.com/package/@ng-formworks/daisyui
815
+
816
+ [npm_daisyui_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fdaisyui/RC.svg?color=blue
817
+
818
+ [npm_daisyui_ver_RC]:https://www.npmjs.com/package/@ng-formworks/daisyui
819
+
820
+ [npm_daisyui_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fdaisyui/alpha.svg?color=blue
821
+
822
+ [npm_daisyui_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/daisyui
823
+
824
+ [gh_material_project]:./projects/ng-formworks-material/README.md
825
+
826
+ [npm_material_badge]:https://img.shields.io/npm/v/%40ng-formworks%2Fmaterial.svg?color=#010101
827
+
828
+ [npm_material_ver]:https://www.npmjs.com/package/@ng-formworks/material
829
+
830
+ [npm_material_badge_RC]:https://img.shields.io/npm/v/%40ng-formworks%2Fmaterial/RC.svg?color=blue
831
+
832
+ [npm_material_ver_RC]:https://www.npmjs.com/package/@ng-formworks/material
833
+
834
+ [npm_material_badge_alpha]:https://img.shields.io/npm/v/%40ng-formworks%2Fmaterial/alpha.svg?color=blue
835
+
836
+ [npm_material_ver_alpha]:https://www.npmjs.com/package/@ng-formworks/material