@formio/js 5.0.0-rc.25 → 5.0.0-rc.27

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.
@@ -1,6 +1,6 @@
1
1
  /*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */
2
2
 
3
- /*! formiojs v5.0.0-rc.25 | https://unpkg.com/formiojs@5.0.0-rc.25/LICENSE.txt */
3
+ /*! formiojs v5.0.0-rc.27 | https://unpkg.com/formiojs@5.0.0-rc.27/LICENSE.txt */
4
4
 
5
5
  /**
6
6
  * @license
@@ -12,7 +12,7 @@
12
12
 
13
13
  /*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */
14
14
 
15
- /*! formiojs v5.0.0-rc.25 | https://unpkg.com/formiojs@5.0.0-rc.25/LICENSE.txt */
15
+ /*! formiojs v5.0.0-rc.27 | https://unpkg.com/formiojs@5.0.0-rc.27/LICENSE.txt */
16
16
 
17
17
  /**
18
18
  * @license
@@ -2,22 +2,42 @@ export class Formio {
2
2
  static baseUrl: any;
3
3
  static projectUrl: any;
4
4
  static language: any;
5
- static wrapper: any;
6
- static element: any;
7
5
  static config: {};
8
- static loader: null;
9
6
  static cdn: null;
10
7
  static proxy: boolean;
8
+ static version: string;
11
9
  static setBaseUrl(url: any): Promise<void>;
12
10
  static setProjectUrl(url: any): Promise<void>;
13
11
  static debug(...args: any[]): void;
12
+ static clearCache(): void;
14
13
  static global(prop: any): any;
15
14
  static createElement(type: any, attrs: any, children: any): any;
16
- static addScript(src: any, name: any): Promise<any>;
17
- static addStyles(href: any): Promise<void>;
15
+ static addScript(wrapper: any, src: any, name: any): Promise<any>;
16
+ static addStyles(wrapper: any, href: any): Promise<void>;
18
17
  static submitDone(instance: any, submission: any): Promise<void>;
19
18
  static formioScript(script: any, builder: any): any;
20
- static init(element: any, builder?: boolean): Promise<void>;
19
+ static init(element: any, builder?: boolean): Promise<any>;
21
20
  static createForm(element: any, form: any, options: any): Promise<any>;
22
21
  static builder(element: any, form: any, options: any): Promise<any>;
23
22
  }
23
+ export namespace Formio {
24
+ export { Form };
25
+ export { FormBuilder };
26
+ }
27
+ export class Form {
28
+ constructor(element: any, form: any, options: any);
29
+ form: any;
30
+ element: any;
31
+ options: any;
32
+ instance: {
33
+ proxy: boolean;
34
+ ready: Promise<any> | undefined;
35
+ destroy: () => void;
36
+ };
37
+ init(): void;
38
+ ready: Promise<any> | undefined;
39
+ create(): Promise<any>;
40
+ setDisplay(display: any): Promise<any> | undefined;
41
+ }
42
+ export class FormBuilder extends Form {
43
+ }
package/lib/cjs/Embed.js CHANGED
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.Formio = void 0;
15
+ exports.FormBuilder = exports.Form = exports.Formio = void 0;
16
16
  const CDN_js_1 = __importDefault(require("./CDN.js"));
17
17
  class Formio {
18
18
  static setBaseUrl(url) {
@@ -30,6 +30,11 @@ class Formio {
30
30
  console.log(...args);
31
31
  }
32
32
  }
33
+ static clearCache() {
34
+ if (Formio.FormioClass) {
35
+ Formio.FormioClass.clearCache();
36
+ }
37
+ }
33
38
  static global(prop) {
34
39
  const globalValue = window[prop];
35
40
  if (globalValue && globalValue.proxy) {
@@ -48,20 +53,20 @@ class Formio {
48
53
  });
49
54
  return element;
50
55
  }
51
- static addScript(src, name) {
56
+ static addScript(wrapper, src, name) {
52
57
  return __awaiter(this, void 0, void 0, function* () {
53
58
  if (!src) {
54
59
  return Promise.resolve();
55
60
  }
56
61
  if (typeof src !== 'string' && src.length) {
57
- return Promise.all(src.map(ref => Formio.addScript(ref)));
62
+ return Promise.all(src.map(ref => Formio.addScript(wrapper, ref)));
58
63
  }
59
64
  if (name && Formio.global(name)) {
60
65
  Formio.debug(`${name} already loaded.`);
61
66
  return Promise.resolve(Formio.global(name));
62
67
  }
63
68
  Formio.debug('Adding Script', src);
64
- Formio.wrapper.appendChild(Formio.createElement('script', {
69
+ wrapper.appendChild(Formio.createElement('script', {
65
70
  src
66
71
  }));
67
72
  if (!name) {
@@ -79,17 +84,17 @@ class Formio {
79
84
  });
80
85
  });
81
86
  }
82
- static addStyles(href) {
87
+ static addStyles(wrapper, href) {
83
88
  return __awaiter(this, void 0, void 0, function* () {
84
89
  if (!href) {
85
90
  return;
86
91
  }
87
92
  if (typeof href !== 'string' && href.length) {
88
- href.forEach(ref => Formio.addStyles(ref));
93
+ href.forEach(ref => Formio.addStyles(wrapper, ref));
89
94
  return;
90
95
  }
91
96
  Formio.debug('Adding Styles', href);
92
- Formio.wrapper.appendChild(Formio.createElement('link', {
97
+ wrapper.appendChild(Formio.createElement('link', {
93
98
  rel: 'stylesheet',
94
99
  href
95
100
  }));
@@ -98,6 +103,10 @@ class Formio {
98
103
  static submitDone(instance, submission) {
99
104
  return __awaiter(this, void 0, void 0, function* () {
100
105
  Formio.debug('Submision Complete', submission);
106
+ const successMessage = (Formio.config.success || '').toString();
107
+ if (successMessage && successMessage.toLowerCase() !== 'false' && instance.element) {
108
+ instance.element.innerHTML = `<div class="alert-success" role="alert">${successMessage}</div>`;
109
+ }
101
110
  let returnUrl = Formio.config.redirect;
102
111
  // Allow form based configuration for return url.
103
112
  if (!returnUrl &&
@@ -127,12 +136,15 @@ class Formio {
127
136
  }
128
137
  // Return the full script if the builder is being used.
129
138
  static formioScript(script, builder) {
130
- return builder ? script.replace('formio.form', 'formio.full') : script;
139
+ if (Formio.fullAdded || builder) {
140
+ Formio.fullAdded = true;
141
+ return script.replace('formio.form', 'formio.full');
142
+ }
143
+ return script;
131
144
  }
132
145
  // eslint-disable-next-line max-statements
133
146
  static init(element, builder = false) {
134
147
  return __awaiter(this, void 0, void 0, function* () {
135
- Formio.element = element;
136
148
  Formio.cdn = new CDN_js_1.default(Formio.config.cdn);
137
149
  Formio.config.libs = Formio.config.libs || {
138
150
  uswds: {
@@ -147,17 +159,18 @@ class Formio {
147
159
  css: `${Formio.cdn.bootstrap}/css/bootstrap.min.css`
148
160
  }
149
161
  };
150
- Formio.config.id = Formio.config.id || `formio-${Math.random().toString(36).substring(7)}`;
162
+ const id = Formio.config.id || `formio-${Math.random().toString(36).substring(7)}`;
151
163
  // Create a new wrapper and add the element inside of a new wrapper.
152
- Formio.wrapper = Formio.createElement('div', {
153
- 'id': `"${Formio.config.id}-wrapper"`
164
+ const wrapper = Formio.createElement('div', {
165
+ 'id': `"${id}-wrapper"`
154
166
  });
155
- element.parentNode.insertBefore(Formio.wrapper, element);
167
+ element.parentNode.insertBefore(wrapper, element);
156
168
  element.parentNode.removeChild(element);
157
- Formio.wrapper.appendChild(element);
169
+ wrapper.appendChild(element);
158
170
  // Load the renderer styles.
159
- yield Formio.addStyles(Formio.config.embedCSS || `${Formio.cdn.js}/formio.embed.css`);
160
- Formio.loader = Formio.createElement('div', {
171
+ yield Formio.addStyles(wrapper, Formio.config.embedCSS || `${Formio.cdn.js}/formio.embed.css`);
172
+ // Add a loader.
173
+ wrapper.appendChild(Formio.createElement('div', {
161
174
  'class': 'formio-loader'
162
175
  }, [{
163
176
  tag: 'div',
@@ -170,9 +183,8 @@ class Formio {
170
183
  class: 'loader text-center'
171
184
  }
172
185
  }]
173
- }]);
174
- Formio.wrapper.appendChild(Formio.loader);
175
- Formio.FormioClass = yield Formio.addScript(Formio.formioScript(Formio.config.script || `${Formio.cdn.js}/formio.form.min.js`, builder), 'Formio');
186
+ }]));
187
+ Formio.FormioClass = yield Formio.addScript(wrapper, Formio.formioScript(Formio.config.script || `${Formio.cdn.js}/formio.form.min.js`, builder), 'Formio');
176
188
  Formio.FormioClass.setBaseUrl(Formio.baseUrl || Formio.config.base);
177
189
  Formio.FormioClass.setProjectUrl(Formio.projectUrl || Formio.config.project);
178
190
  Formio.FormioClass.language = Formio.language;
@@ -187,17 +199,17 @@ class Formio {
187
199
  }
188
200
  if (Formio.config.template) {
189
201
  if (Formio.config.includeLibs) {
190
- yield Formio.addStyles(Formio.config.libs[Formio.config.template].css);
191
- yield Formio.addScript(Formio.config.libs[Formio.config.template].js);
202
+ yield Formio.addStyles(wrapper, Formio.config.libs[Formio.config.template].css);
203
+ yield Formio.addScript(wrapper, Formio.config.libs[Formio.config.template].js);
192
204
  if (Formio.config.libs[Formio.config.template].fa) {
193
- yield Formio.addStyles(Formio.config.libs.fontawesome.css);
205
+ yield Formio.addStyles(wrapper, Formio.config.libs.fontawesome.css);
194
206
  }
195
207
  }
196
208
  if (Formio.cdn[Formio.config.template]) {
197
209
  const templateSrc = `${Formio.cdn[Formio.config.template]}/${Formio.config.template}.min`;
198
- yield Formio.addStyles(`${templateSrc}.css`);
210
+ yield Formio.addStyles(wrapper, `${templateSrc}.css`);
199
211
  Formio.debug(`Using ${Formio.config.template}`);
200
- Formio.FormioClass.use(yield Formio.addScript(`${templateSrc}.js`, Formio.config.template));
212
+ Formio.FormioClass.use(yield Formio.addScript(wrapper, `${templateSrc}.js`, Formio.config.template));
201
213
  }
202
214
  }
203
215
  else if (Formio.global('uswds')) {
@@ -206,29 +218,30 @@ class Formio {
206
218
  }
207
219
  // Default bootstrap + fontawesome.
208
220
  else if (Formio.config.includeLibs) {
209
- yield Formio.addStyles(Formio.config.libs.fontawesome.css);
210
- yield Formio.addStyles(Formio.config.libs.bootstrap.css);
221
+ yield Formio.addStyles(wrapper, Formio.config.libs.fontawesome.css);
222
+ yield Formio.addStyles(wrapper, Formio.config.libs.bootstrap.css);
211
223
  }
212
224
  if (Formio.config.premium) {
213
- yield Formio.addStyles(Formio.config.premium.css);
225
+ yield Formio.addStyles(wrapper, Formio.config.premium.css);
214
226
  Formio.debug('Using premium');
215
- Formio.FormioClass.use(yield Formio.addScript(Formio.config.premium.js, 'premium'));
227
+ Formio.FormioClass.use(yield Formio.addScript(wrapper, Formio.config.premium.js, 'premium'));
216
228
  }
217
- yield Formio.addStyles(Formio.formioScript(Formio.config.style || `${Formio.cdn.js}/formio.form.min.css`, builder));
229
+ yield Formio.addStyles(wrapper, Formio.formioScript(Formio.config.style || `${Formio.cdn.js}/formio.form.min.css`, builder));
218
230
  if (Formio.config.before) {
219
- yield Formio.config.before(Formio.FormioClass, Formio.element, Formio.config);
231
+ yield Formio.config.before(Formio.FormioClass, element, Formio.config);
220
232
  }
221
233
  Formio.FormioClass.license = true;
234
+ return wrapper;
222
235
  });
223
236
  }
224
237
  static createForm(element, form, options) {
225
238
  return __awaiter(this, void 0, void 0, function* () {
226
- yield Formio.init(element);
227
- return Formio.FormioClass.createForm(Formio.element, form, Object.assign(Object.assign({}, options), { noLoader: true })).then((instance) => {
239
+ const wrapper = yield Formio.init(element);
240
+ return Formio.FormioClass.createForm(element, form, Object.assign(Object.assign({}, options), { noLoader: true })).then((instance) => {
228
241
  Formio.debug('Form created', instance);
229
242
  // Remove the loader.
230
243
  Formio.debug('Removing loader');
231
- Formio.wrapper.removeChild(Formio.loader);
244
+ wrapper.removeChild(wrapper.querySelector('.formio-loader'));
232
245
  // Set the default submission data.
233
246
  if (Formio.config.submission) {
234
247
  Formio.debug('Setting submission', Formio.config.submission);
@@ -248,11 +261,11 @@ class Formio {
248
261
  }
249
262
  static builder(element, form, options) {
250
263
  return __awaiter(this, void 0, void 0, function* () {
251
- yield Formio.init(element, true);
252
- return Formio.FormioClass.builder(Formio.element, form, options).then((instance) => {
264
+ const wrapper = yield Formio.init(element, true);
265
+ return Formio.FormioClass.builder(element, form, options).then((instance) => {
253
266
  Formio.debug('Builder created', instance);
254
267
  Formio.debug('Removing loader');
255
- Formio.wrapper.removeChild(Formio.loader);
268
+ wrapper.removeChild(wrapper.querySelector('.formio-loader'));
256
269
  Formio.debug('Triggering embed event');
257
270
  Formio.FormioClass.events.emit('builderEmbedded', instance);
258
271
  if (Formio.config.after) {
@@ -265,7 +278,48 @@ class Formio {
265
278
  }
266
279
  }
267
280
  Formio.config = {};
268
- Formio.loader = null;
269
281
  Formio.cdn = null;
270
282
  Formio.proxy = true;
283
+ Formio.version = 'FORMIO_VERSION';
271
284
  exports.Formio = Formio;
285
+ class Form {
286
+ constructor(element, form, options) {
287
+ this.form = form;
288
+ this.element = element;
289
+ this.options = options || {};
290
+ this.init();
291
+ this.instance = {
292
+ proxy: true,
293
+ ready: this.ready,
294
+ destroy: () => { }
295
+ };
296
+ }
297
+ init() {
298
+ this.element.innerHTML = '';
299
+ this.ready = this.create().then((instance) => {
300
+ this.instance = instance;
301
+ this.form = instance.form;
302
+ return instance;
303
+ });
304
+ }
305
+ create() {
306
+ return Formio.createForm(this.element, this.form, this.options);
307
+ }
308
+ setDisplay(display) {
309
+ if (this.instance.proxy) {
310
+ return this.ready;
311
+ }
312
+ this.form.display = display;
313
+ this.init();
314
+ return this.ready;
315
+ }
316
+ }
317
+ exports.Form = Form;
318
+ class FormBuilder extends Form {
319
+ create() {
320
+ return Formio.builder(this.element, this.form, this.options);
321
+ }
322
+ }
323
+ exports.FormBuilder = FormBuilder;
324
+ Formio.Form = Form;
325
+ Formio.FormBuilder = FormBuilder;
package/lib/cjs/Wizard.js CHANGED
@@ -778,22 +778,21 @@ class Wizard extends Webform_1.default {
778
778
  }
779
779
  }
780
780
  setValue(submission, flags = {}, ignoreEstablishment) {
781
- this._submission = submission;
782
- if ((flags && flags.fromSubmission && (this.options.readOnly || this.editMode) && !this.isHtmlRenderMode()) ||
783
- (flags && flags.fromSubmission && (this.prefixComps.length || this.suffixComps.length) && submission._id) ||
784
- (this.options.server && (this.prefixComps.length || this.suffixComps.length))) {
785
- this._data = submission.data;
786
- }
787
- if (!ignoreEstablishment) {
788
- this.establishPages(submission.data);
789
- }
790
781
  const changed = this.getPages({ all: true }).reduce((changed, page) => {
791
782
  return this.setNestedValue(page, submission.data, flags, changed) || changed;
792
783
  }, false);
784
+ if (!flags.sanitize) {
785
+ this.mergeData(this.data, submission.data);
786
+ }
793
787
  if (changed) {
794
788
  this.pageFieldLogic(this.page);
795
789
  }
796
790
  this.setEditMode(submission);
791
+ submission.data = this.data;
792
+ this._submission = submission;
793
+ if (!ignoreEstablishment) {
794
+ this.establishPages(submission.data);
795
+ }
797
796
  return changed;
798
797
  }
799
798
  isClickable(page, index) {
@@ -43,6 +43,7 @@ if (thisScript) {
43
43
  config: {},
44
44
  redirect: (query.return || query.redirect),
45
45
  embedCSS: (`${config.updatePath ? config.updatePath() : scriptSrc}/formio.embed.css`),
46
+ success: query.success || 'Thank you for your submission!',
46
47
  before: null,
47
48
  after: null
48
49
  }, config);
@@ -2,22 +2,42 @@ export class Formio {
2
2
  static baseUrl: any;
3
3
  static projectUrl: any;
4
4
  static language: any;
5
- static wrapper: any;
6
- static element: any;
7
5
  static config: {};
8
- static loader: null;
9
6
  static cdn: null;
10
7
  static proxy: boolean;
8
+ static version: string;
11
9
  static setBaseUrl(url: any): Promise<void>;
12
10
  static setProjectUrl(url: any): Promise<void>;
13
11
  static debug(...args: any[]): void;
12
+ static clearCache(): void;
14
13
  static global(prop: any): any;
15
14
  static createElement(type: any, attrs: any, children: any): any;
16
- static addScript(src: any, name: any): Promise<any>;
17
- static addStyles(href: any): Promise<void>;
15
+ static addScript(wrapper: any, src: any, name: any): Promise<any>;
16
+ static addStyles(wrapper: any, href: any): Promise<void>;
18
17
  static submitDone(instance: any, submission: any): Promise<void>;
19
18
  static formioScript(script: any, builder: any): any;
20
- static init(element: any, builder?: boolean): Promise<void>;
19
+ static init(element: any, builder?: boolean): Promise<any>;
21
20
  static createForm(element: any, form: any, options: any): Promise<any>;
22
21
  static builder(element: any, form: any, options: any): Promise<any>;
23
22
  }
23
+ export namespace Formio {
24
+ export { Form };
25
+ export { FormBuilder };
26
+ }
27
+ export class Form {
28
+ constructor(element: any, form: any, options: any);
29
+ form: any;
30
+ element: any;
31
+ options: any;
32
+ instance: {
33
+ proxy: boolean;
34
+ ready: Promise<any> | undefined;
35
+ destroy: () => void;
36
+ };
37
+ init(): void;
38
+ ready: Promise<any> | undefined;
39
+ create(): Promise<any>;
40
+ setDisplay(display: any): Promise<any> | undefined;
41
+ }
42
+ export class FormBuilder extends Form {
43
+ }
package/lib/mjs/Embed.js CHANGED
@@ -3,12 +3,10 @@ class Formio {
3
3
  static baseUrl;
4
4
  static projectUrl;
5
5
  static language;
6
- static wrapper;
7
- static element;
8
6
  static config = {};
9
- static loader = null;
10
7
  static cdn = null;
11
8
  static proxy = true;
9
+ static version = 'FORMIO_VERSION';
12
10
  static async setBaseUrl(url) {
13
11
  Formio.baseUrl = url;
14
12
  }
@@ -20,6 +18,11 @@ class Formio {
20
18
  console.log(...args);
21
19
  }
22
20
  }
21
+ static clearCache() {
22
+ if (Formio.FormioClass) {
23
+ Formio.FormioClass.clearCache();
24
+ }
25
+ }
23
26
  static global(prop) {
24
27
  const globalValue = window[prop];
25
28
  if (globalValue && globalValue.proxy) {
@@ -38,19 +41,19 @@ class Formio {
38
41
  });
39
42
  return element;
40
43
  }
41
- static async addScript(src, name) {
44
+ static async addScript(wrapper, src, name) {
42
45
  if (!src) {
43
46
  return Promise.resolve();
44
47
  }
45
48
  if (typeof src !== 'string' && src.length) {
46
- return Promise.all(src.map(ref => Formio.addScript(ref)));
49
+ return Promise.all(src.map(ref => Formio.addScript(wrapper, ref)));
47
50
  }
48
51
  if (name && Formio.global(name)) {
49
52
  Formio.debug(`${name} already loaded.`);
50
53
  return Promise.resolve(Formio.global(name));
51
54
  }
52
55
  Formio.debug('Adding Script', src);
53
- Formio.wrapper.appendChild(Formio.createElement('script', {
56
+ wrapper.appendChild(Formio.createElement('script', {
54
57
  src
55
58
  }));
56
59
  if (!name) {
@@ -67,22 +70,26 @@ class Formio {
67
70
  }, 100);
68
71
  });
69
72
  }
70
- static async addStyles(href) {
73
+ static async addStyles(wrapper, href) {
71
74
  if (!href) {
72
75
  return;
73
76
  }
74
77
  if (typeof href !== 'string' && href.length) {
75
- href.forEach(ref => Formio.addStyles(ref));
78
+ href.forEach(ref => Formio.addStyles(wrapper, ref));
76
79
  return;
77
80
  }
78
81
  Formio.debug('Adding Styles', href);
79
- Formio.wrapper.appendChild(Formio.createElement('link', {
82
+ wrapper.appendChild(Formio.createElement('link', {
80
83
  rel: 'stylesheet',
81
84
  href
82
85
  }));
83
86
  }
84
87
  static async submitDone(instance, submission) {
85
88
  Formio.debug('Submision Complete', submission);
89
+ const successMessage = (Formio.config.success || '').toString();
90
+ if (successMessage && successMessage.toLowerCase() !== 'false' && instance.element) {
91
+ instance.element.innerHTML = `<div class="alert-success" role="alert">${successMessage}</div>`;
92
+ }
86
93
  let returnUrl = Formio.config.redirect;
87
94
  // Allow form based configuration for return url.
88
95
  if (!returnUrl &&
@@ -111,11 +118,14 @@ class Formio {
111
118
  }
112
119
  // Return the full script if the builder is being used.
113
120
  static formioScript(script, builder) {
114
- return builder ? script.replace('formio.form', 'formio.full') : script;
121
+ if (Formio.fullAdded || builder) {
122
+ Formio.fullAdded = true;
123
+ return script.replace('formio.form', 'formio.full');
124
+ }
125
+ return script;
115
126
  }
116
127
  // eslint-disable-next-line max-statements
117
128
  static async init(element, builder = false) {
118
- Formio.element = element;
119
129
  Formio.cdn = new CDN(Formio.config.cdn);
120
130
  Formio.config.libs = Formio.config.libs || {
121
131
  uswds: {
@@ -130,17 +140,18 @@ class Formio {
130
140
  css: `${Formio.cdn.bootstrap}/css/bootstrap.min.css`
131
141
  }
132
142
  };
133
- Formio.config.id = Formio.config.id || `formio-${Math.random().toString(36).substring(7)}`;
143
+ const id = Formio.config.id || `formio-${Math.random().toString(36).substring(7)}`;
134
144
  // Create a new wrapper and add the element inside of a new wrapper.
135
- Formio.wrapper = Formio.createElement('div', {
136
- 'id': `"${Formio.config.id}-wrapper"`
145
+ const wrapper = Formio.createElement('div', {
146
+ 'id': `"${id}-wrapper"`
137
147
  });
138
- element.parentNode.insertBefore(Formio.wrapper, element);
148
+ element.parentNode.insertBefore(wrapper, element);
139
149
  element.parentNode.removeChild(element);
140
- Formio.wrapper.appendChild(element);
150
+ wrapper.appendChild(element);
141
151
  // Load the renderer styles.
142
- await Formio.addStyles(Formio.config.embedCSS || `${Formio.cdn.js}/formio.embed.css`);
143
- Formio.loader = Formio.createElement('div', {
152
+ await Formio.addStyles(wrapper, Formio.config.embedCSS || `${Formio.cdn.js}/formio.embed.css`);
153
+ // Add a loader.
154
+ wrapper.appendChild(Formio.createElement('div', {
144
155
  'class': 'formio-loader'
145
156
  }, [{
146
157
  tag: 'div',
@@ -153,9 +164,8 @@ class Formio {
153
164
  class: 'loader text-center'
154
165
  }
155
166
  }]
156
- }]);
157
- Formio.wrapper.appendChild(Formio.loader);
158
- Formio.FormioClass = await Formio.addScript(Formio.formioScript(Formio.config.script || `${Formio.cdn.js}/formio.form.min.js`, builder), 'Formio');
167
+ }]));
168
+ Formio.FormioClass = await Formio.addScript(wrapper, Formio.formioScript(Formio.config.script || `${Formio.cdn.js}/formio.form.min.js`, builder), 'Formio');
159
169
  Formio.FormioClass.setBaseUrl(Formio.baseUrl || Formio.config.base);
160
170
  Formio.FormioClass.setProjectUrl(Formio.projectUrl || Formio.config.project);
161
171
  Formio.FormioClass.language = Formio.language;
@@ -170,17 +180,17 @@ class Formio {
170
180
  }
171
181
  if (Formio.config.template) {
172
182
  if (Formio.config.includeLibs) {
173
- await Formio.addStyles(Formio.config.libs[Formio.config.template].css);
174
- await Formio.addScript(Formio.config.libs[Formio.config.template].js);
183
+ await Formio.addStyles(wrapper, Formio.config.libs[Formio.config.template].css);
184
+ await Formio.addScript(wrapper, Formio.config.libs[Formio.config.template].js);
175
185
  if (Formio.config.libs[Formio.config.template].fa) {
176
- await Formio.addStyles(Formio.config.libs.fontawesome.css);
186
+ await Formio.addStyles(wrapper, Formio.config.libs.fontawesome.css);
177
187
  }
178
188
  }
179
189
  if (Formio.cdn[Formio.config.template]) {
180
190
  const templateSrc = `${Formio.cdn[Formio.config.template]}/${Formio.config.template}.min`;
181
- await Formio.addStyles(`${templateSrc}.css`);
191
+ await Formio.addStyles(wrapper, `${templateSrc}.css`);
182
192
  Formio.debug(`Using ${Formio.config.template}`);
183
- Formio.FormioClass.use(await Formio.addScript(`${templateSrc}.js`, Formio.config.template));
193
+ Formio.FormioClass.use(await Formio.addScript(wrapper, `${templateSrc}.js`, Formio.config.template));
184
194
  }
185
195
  }
186
196
  else if (Formio.global('uswds')) {
@@ -189,30 +199,31 @@ class Formio {
189
199
  }
190
200
  // Default bootstrap + fontawesome.
191
201
  else if (Formio.config.includeLibs) {
192
- await Formio.addStyles(Formio.config.libs.fontawesome.css);
193
- await Formio.addStyles(Formio.config.libs.bootstrap.css);
202
+ await Formio.addStyles(wrapper, Formio.config.libs.fontawesome.css);
203
+ await Formio.addStyles(wrapper, Formio.config.libs.bootstrap.css);
194
204
  }
195
205
  if (Formio.config.premium) {
196
- await Formio.addStyles(Formio.config.premium.css);
206
+ await Formio.addStyles(wrapper, Formio.config.premium.css);
197
207
  Formio.debug('Using premium');
198
- Formio.FormioClass.use(await Formio.addScript(Formio.config.premium.js, 'premium'));
208
+ Formio.FormioClass.use(await Formio.addScript(wrapper, Formio.config.premium.js, 'premium'));
199
209
  }
200
- await Formio.addStyles(Formio.formioScript(Formio.config.style || `${Formio.cdn.js}/formio.form.min.css`, builder));
210
+ await Formio.addStyles(wrapper, Formio.formioScript(Formio.config.style || `${Formio.cdn.js}/formio.form.min.css`, builder));
201
211
  if (Formio.config.before) {
202
- await Formio.config.before(Formio.FormioClass, Formio.element, Formio.config);
212
+ await Formio.config.before(Formio.FormioClass, element, Formio.config);
203
213
  }
204
214
  Formio.FormioClass.license = true;
215
+ return wrapper;
205
216
  }
206
217
  static async createForm(element, form, options) {
207
- await Formio.init(element);
208
- return Formio.FormioClass.createForm(Formio.element, form, {
218
+ const wrapper = await Formio.init(element);
219
+ return Formio.FormioClass.createForm(element, form, {
209
220
  ...options,
210
221
  ...{ noLoader: true }
211
222
  }).then((instance) => {
212
223
  Formio.debug('Form created', instance);
213
224
  // Remove the loader.
214
225
  Formio.debug('Removing loader');
215
- Formio.wrapper.removeChild(Formio.loader);
226
+ wrapper.removeChild(wrapper.querySelector('.formio-loader'));
216
227
  // Set the default submission data.
217
228
  if (Formio.config.submission) {
218
229
  Formio.debug('Setting submission', Formio.config.submission);
@@ -230,11 +241,11 @@ class Formio {
230
241
  });
231
242
  }
232
243
  static async builder(element, form, options) {
233
- await Formio.init(element, true);
234
- return Formio.FormioClass.builder(Formio.element, form, options).then((instance) => {
244
+ const wrapper = await Formio.init(element, true);
245
+ return Formio.FormioClass.builder(element, form, options).then((instance) => {
235
246
  Formio.debug('Builder created', instance);
236
247
  Formio.debug('Removing loader');
237
- Formio.wrapper.removeChild(Formio.loader);
248
+ wrapper.removeChild(wrapper.querySelector('.formio-loader'));
238
249
  Formio.debug('Triggering embed event');
239
250
  Formio.FormioClass.events.emit('builderEmbedded', instance);
240
251
  if (Formio.config.after) {
@@ -246,3 +257,42 @@ class Formio {
246
257
  }
247
258
  }
248
259
  export { Formio };
260
+ export class Form {
261
+ constructor(element, form, options) {
262
+ this.form = form;
263
+ this.element = element;
264
+ this.options = options || {};
265
+ this.init();
266
+ this.instance = {
267
+ proxy: true,
268
+ ready: this.ready,
269
+ destroy: () => { }
270
+ };
271
+ }
272
+ init() {
273
+ this.element.innerHTML = '';
274
+ this.ready = this.create().then((instance) => {
275
+ this.instance = instance;
276
+ this.form = instance.form;
277
+ return instance;
278
+ });
279
+ }
280
+ create() {
281
+ return Formio.createForm(this.element, this.form, this.options);
282
+ }
283
+ setDisplay(display) {
284
+ if (this.instance.proxy) {
285
+ return this.ready;
286
+ }
287
+ this.form.display = display;
288
+ this.init();
289
+ return this.ready;
290
+ }
291
+ }
292
+ export class FormBuilder extends Form {
293
+ create() {
294
+ return Formio.builder(this.element, this.form, this.options);
295
+ }
296
+ }
297
+ Formio.Form = Form;
298
+ Formio.FormBuilder = FormBuilder;