@formio/js 5.0.0-rc.20 → 5.0.0-rc.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. package/dist/formio.embed.css +1 -39
  2. package/dist/formio.embed.js +2 -90
  3. package/dist/formio.embed.min.js +1 -1
  4. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  5. package/dist/formio.form.js +58 -36
  6. package/dist/formio.form.min.js +1 -1
  7. package/dist/formio.form.min.js.LICENSE.txt +1 -1
  8. package/dist/formio.full.js +59 -37
  9. package/dist/formio.full.min.js +1 -1
  10. package/dist/formio.full.min.js.LICENSE.txt +1 -1
  11. package/dist/formio.js +2 -2
  12. package/dist/formio.min.js +1 -1
  13. package/dist/formio.min.js.LICENSE.txt +1 -1
  14. package/dist/formio.utils.js +1 -1
  15. package/dist/formio.utils.min.js +1 -1
  16. package/dist/formio.utils.min.js.LICENSE.txt +1 -1
  17. package/lib/cjs/CDN.d.ts +1 -0
  18. package/lib/cjs/CDN.js +1 -0
  19. package/lib/cjs/Element.js +5 -0
  20. package/lib/cjs/Embed.d.ts +21 -1
  21. package/lib/cjs/Embed.js +211 -308
  22. package/lib/cjs/Form.d.ts +1 -1
  23. package/lib/cjs/Form.js +1 -1
  24. package/lib/cjs/Webform.d.ts +6 -6
  25. package/lib/cjs/Webform.js +6 -6
  26. package/lib/cjs/WebformBuilder.js +1 -1
  27. package/lib/cjs/components/_classes/component/Component.d.ts +16 -6
  28. package/lib/cjs/components/_classes/component/Component.js +26 -6
  29. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +1 -0
  30. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +4 -0
  31. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.d.ts +1 -0
  32. package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +4 -0
  33. package/lib/cjs/components/address/Address.js +5 -0
  34. package/lib/cjs/components/button/Button.d.ts +1 -0
  35. package/lib/cjs/components/button/Button.js +3 -0
  36. package/lib/cjs/components/checkbox/Checkbox.d.ts +28 -0
  37. package/lib/cjs/components/checkbox/Checkbox.js +17 -2
  38. package/lib/cjs/components/columns/Columns.d.ts +1 -0
  39. package/lib/cjs/components/columns/Columns.js +3 -0
  40. package/lib/cjs/components/container/Container.js +3 -0
  41. package/lib/cjs/components/content/Content.d.ts +1 -0
  42. package/lib/cjs/components/content/Content.js +3 -0
  43. package/lib/cjs/components/datamap/DataMap.d.ts +1 -0
  44. package/lib/cjs/components/datamap/DataMap.js +3 -0
  45. package/lib/cjs/components/datetime/DateTime.d.ts +19 -0
  46. package/lib/cjs/components/datetime/DateTime.js +9 -10
  47. package/lib/cjs/components/day/Day.d.ts +21 -0
  48. package/lib/cjs/components/day/Day.js +12 -10
  49. package/lib/cjs/components/day/fixtures/comp5.d.ts +29 -0
  50. package/lib/cjs/components/day/fixtures/comp5.js +32 -0
  51. package/lib/cjs/components/day/fixtures/index.d.ts +2 -1
  52. package/lib/cjs/components/day/fixtures/index.js +3 -1
  53. package/lib/cjs/components/fieldset/Fieldset.d.ts +1 -0
  54. package/lib/cjs/components/fieldset/Fieldset.js +3 -0
  55. package/lib/cjs/components/file/File.d.ts +21 -1
  56. package/lib/cjs/components/file/File.js +15 -7
  57. package/lib/cjs/components/form/Form.d.ts +1 -0
  58. package/lib/cjs/components/form/Form.js +5 -1
  59. package/lib/cjs/components/html/HTML.d.ts +1 -0
  60. package/lib/cjs/components/html/HTML.js +3 -0
  61. package/lib/cjs/components/number/Number.d.ts +20 -1
  62. package/lib/cjs/components/number/Number.js +10 -15
  63. package/lib/cjs/components/panel/Panel.d.ts +1 -0
  64. package/lib/cjs/components/panel/Panel.js +3 -0
  65. package/lib/cjs/components/radio/Radio.d.ts +19 -0
  66. package/lib/cjs/components/radio/Radio.js +30 -0
  67. package/lib/cjs/components/recaptcha/ReCaptcha.d.ts +1 -0
  68. package/lib/cjs/components/recaptcha/ReCaptcha.js +3 -0
  69. package/lib/cjs/components/select/Select.d.ts +19 -1
  70. package/lib/cjs/components/select/Select.js +39 -4
  71. package/lib/cjs/components/select/fixtures/comp19.d.ts +23 -0
  72. package/lib/cjs/components/select/fixtures/comp19.js +36 -0
  73. package/lib/cjs/components/select/fixtures/index.d.ts +2 -1
  74. package/lib/cjs/components/select/fixtures/index.js +3 -1
  75. package/lib/cjs/components/selectboxes/SelectBoxes.d.ts +26 -1
  76. package/lib/cjs/components/selectboxes/SelectBoxes.js +8 -1
  77. package/lib/cjs/components/signature/Signature.d.ts +21 -0
  78. package/lib/cjs/components/signature/Signature.js +9 -1
  79. package/lib/cjs/components/survey/Survey.d.ts +21 -0
  80. package/lib/cjs/components/survey/Survey.js +7 -1
  81. package/lib/cjs/components/table/Table.d.ts +1 -0
  82. package/lib/cjs/components/table/Table.js +3 -0
  83. package/lib/cjs/components/tabs/Tabs.d.ts +1 -0
  84. package/lib/cjs/components/tabs/Tabs.js +3 -0
  85. package/lib/cjs/components/tags/Tags.d.ts +21 -0
  86. package/lib/cjs/components/tags/Tags.js +11 -1
  87. package/lib/cjs/components/tags/fixtures/comp6.d.ts +17 -0
  88. package/lib/cjs/components/tags/fixtures/comp6.js +20 -0
  89. package/lib/cjs/components/tags/fixtures/index.d.ts +2 -1
  90. package/lib/cjs/components/tags/fixtures/index.js +3 -1
  91. package/lib/cjs/components/textfield/TextField.d.ts +21 -0
  92. package/lib/cjs/components/textfield/TextField.js +7 -1
  93. package/lib/cjs/components/time/Time.d.ts +8 -1
  94. package/lib/cjs/components/well/Well.d.ts +1 -0
  95. package/lib/cjs/components/well/Well.js +3 -0
  96. package/lib/cjs/formio.embed.d.ts +2 -1
  97. package/lib/cjs/formio.embed.js +96 -1
  98. package/lib/cjs/formio.form.d.ts +4 -3
  99. package/lib/cjs/formio.form.js +17 -8
  100. package/lib/cjs/licenses/Licenses.d.ts +7 -0
  101. package/lib/cjs/licenses/Licenses.js +22 -0
  102. package/lib/cjs/licenses/index.d.ts +2 -0
  103. package/lib/cjs/licenses/index.js +7 -0
  104. package/lib/cjs/utils/utils.d.ts +10 -0
  105. package/lib/cjs/utils/utils.js +21 -1
  106. package/lib/mjs/CDN.d.ts +1 -0
  107. package/lib/mjs/CDN.js +1 -0
  108. package/lib/mjs/Element.js +5 -0
  109. package/lib/mjs/Embed.d.ts +21 -1
  110. package/lib/mjs/Embed.js +208 -322
  111. package/lib/mjs/Form.d.ts +1 -1
  112. package/lib/mjs/Form.js +1 -1
  113. package/lib/mjs/Webform.d.ts +6 -6
  114. package/lib/mjs/Webform.js +6 -6
  115. package/lib/mjs/WebformBuilder.js +1 -1
  116. package/lib/mjs/components/_classes/component/Component.d.ts +16 -6
  117. package/lib/mjs/components/_classes/component/Component.js +26 -6
  118. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +1 -0
  119. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +4 -0
  120. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.d.ts +1 -0
  121. package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +4 -0
  122. package/lib/mjs/components/address/Address.js +5 -0
  123. package/lib/mjs/components/button/Button.d.ts +1 -0
  124. package/lib/mjs/components/button/Button.js +4 -1
  125. package/lib/mjs/components/checkbox/Checkbox.d.ts +28 -0
  126. package/lib/mjs/components/checkbox/Checkbox.js +18 -3
  127. package/lib/mjs/components/columns/Columns.d.ts +1 -0
  128. package/lib/mjs/components/columns/Columns.js +3 -0
  129. package/lib/mjs/components/container/Container.js +4 -1
  130. package/lib/mjs/components/content/Content.d.ts +1 -0
  131. package/lib/mjs/components/content/Content.js +3 -0
  132. package/lib/mjs/components/datamap/DataMap.d.ts +1 -0
  133. package/lib/mjs/components/datamap/DataMap.js +4 -1
  134. package/lib/mjs/components/datetime/DateTime.d.ts +19 -0
  135. package/lib/mjs/components/datetime/DateTime.js +11 -12
  136. package/lib/mjs/components/day/Day.d.ts +21 -0
  137. package/lib/mjs/components/day/Day.js +16 -14
  138. package/lib/mjs/components/day/fixtures/comp5.d.ts +29 -0
  139. package/lib/mjs/components/day/fixtures/comp5.js +30 -0
  140. package/lib/mjs/components/day/fixtures/index.d.ts +2 -1
  141. package/lib/mjs/components/day/fixtures/index.js +2 -1
  142. package/lib/mjs/components/fieldset/Fieldset.d.ts +1 -0
  143. package/lib/mjs/components/fieldset/Fieldset.js +3 -0
  144. package/lib/mjs/components/file/File.d.ts +21 -1
  145. package/lib/mjs/components/file/File.js +16 -8
  146. package/lib/mjs/components/form/Form.d.ts +1 -0
  147. package/lib/mjs/components/form/Form.js +6 -2
  148. package/lib/mjs/components/html/HTML.d.ts +1 -0
  149. package/lib/mjs/components/html/HTML.js +3 -0
  150. package/lib/mjs/components/number/Number.d.ts +20 -1
  151. package/lib/mjs/components/number/Number.js +11 -12
  152. package/lib/mjs/components/panel/Panel.d.ts +1 -0
  153. package/lib/mjs/components/panel/Panel.js +3 -0
  154. package/lib/mjs/components/radio/Radio.d.ts +19 -0
  155. package/lib/mjs/components/radio/Radio.js +34 -1
  156. package/lib/mjs/components/recaptcha/ReCaptcha.d.ts +1 -0
  157. package/lib/mjs/components/recaptcha/ReCaptcha.js +3 -0
  158. package/lib/mjs/components/select/Select.d.ts +19 -1
  159. package/lib/mjs/components/select/Select.js +41 -6
  160. package/lib/mjs/components/select/fixtures/comp19.d.ts +23 -0
  161. package/lib/mjs/components/select/fixtures/comp19.js +34 -0
  162. package/lib/mjs/components/select/fixtures/index.d.ts +2 -1
  163. package/lib/mjs/components/select/fixtures/index.js +2 -1
  164. package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +26 -1
  165. package/lib/mjs/components/selectboxes/SelectBoxes.js +8 -1
  166. package/lib/mjs/components/signature/Signature.d.ts +21 -0
  167. package/lib/mjs/components/signature/Signature.js +9 -1
  168. package/lib/mjs/components/survey/Survey.d.ts +21 -0
  169. package/lib/mjs/components/survey/Survey.js +8 -2
  170. package/lib/mjs/components/table/Table.d.ts +1 -0
  171. package/lib/mjs/components/table/Table.js +3 -0
  172. package/lib/mjs/components/tabs/Tabs.d.ts +1 -0
  173. package/lib/mjs/components/tabs/Tabs.js +3 -0
  174. package/lib/mjs/components/tags/Tags.d.ts +21 -0
  175. package/lib/mjs/components/tags/Tags.js +12 -2
  176. package/lib/mjs/components/tags/fixtures/comp6.d.ts +17 -0
  177. package/lib/mjs/components/tags/fixtures/comp6.js +18 -0
  178. package/lib/mjs/components/tags/fixtures/index.d.ts +2 -1
  179. package/lib/mjs/components/tags/fixtures/index.js +2 -1
  180. package/lib/mjs/components/textfield/TextField.d.ts +21 -0
  181. package/lib/mjs/components/textfield/TextField.js +8 -2
  182. package/lib/mjs/components/time/Time.d.ts +8 -1
  183. package/lib/mjs/components/well/Well.d.ts +1 -0
  184. package/lib/mjs/components/well/Well.js +3 -0
  185. package/lib/mjs/formio.embed.d.ts +2 -1
  186. package/lib/mjs/formio.embed.js +96 -2
  187. package/lib/mjs/formio.form.d.ts +4 -3
  188. package/lib/mjs/formio.form.js +16 -8
  189. package/lib/mjs/licenses/Licenses.d.ts +7 -0
  190. package/lib/mjs/licenses/Licenses.js +17 -0
  191. package/lib/mjs/licenses/index.d.ts +2 -0
  192. package/lib/mjs/licenses/index.js +2 -0
  193. package/lib/mjs/utils/utils.d.ts +10 -0
  194. package/lib/mjs/utils/utils.js +19 -0
  195. package/package.json +5 -1
  196. package/types/index.d.ts +1 -0
  197. package/types/licenses.d.ts +7 -0
  198. package/types/utils.d.ts +2 -0
@@ -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.20 | https://unpkg.com/formiojs@5.0.0-rc.20/LICENSE.txt */
15
+ /*! formiojs v5.0.0-rc.22 | https://unpkg.com/formiojs@5.0.0-rc.22/LICENSE.txt */
16
16
 
17
17
  /**
18
18
  * @license
package/lib/cjs/CDN.d.ts CHANGED
@@ -4,6 +4,7 @@ declare class CDN {
4
4
  baseUrl: any;
5
5
  overrides: {};
6
6
  libs: {
7
+ js: string;
7
8
  ace: string;
8
9
  bootstrap: string;
9
10
  ckeditor: string;
package/lib/cjs/CDN.js CHANGED
@@ -9,6 +9,7 @@ class CDN {
9
9
  this.baseUrl = baseUrl || 'https://cdn.form.io';
10
10
  this.overrides = {};
11
11
  this.libs = {
12
+ 'js': '',
12
13
  'ace': '1.4.12',
13
14
  'bootstrap': '4.6.2',
14
15
  'ckeditor': '19.0.0',
@@ -558,6 +558,11 @@ class Element {
558
558
  && !FormioUtils.Evaluator.templateSettings.interpolate.test(string)) {
559
559
  string = FormioUtils.translateHTMLTemplate(String(string), (value) => this.t(value));
560
560
  }
561
+ if (this.component.filter === string && !this.options.building) {
562
+ const evalContext = this.evalContext(data);
563
+ evalContext.data = lodash_1.default.mapValues(evalContext.data, (val) => lodash_1.default.isString(val) ? encodeURIComponent(val) : val);
564
+ return FormioUtils.interpolate(string, evalContext, options);
565
+ }
561
566
  return FormioUtils.interpolate(string, this.evalContext(data), options);
562
567
  }
563
568
  /**
@@ -1 +1,21 @@
1
- export function embed(config?: {}): void;
1
+ export class Formio {
2
+ static baseUrl: any;
3
+ static projectUrl: any;
4
+ static language: any;
5
+ static wrapper: any;
6
+ static element: any;
7
+ static config: {};
8
+ static loader: null;
9
+ static cdn: null;
10
+ static proxy: boolean;
11
+ static setBaseUrl(url: any): Promise<void>;
12
+ static setProjectUrl(url: any): Promise<void>;
13
+ static debug(...args: any[]): void;
14
+ static global(prop: any): any;
15
+ static createElement(type: any, attrs: any, children: any): any;
16
+ static addScript(src: any, name: any): Promise<any>;
17
+ static addStyles(href: any, addGlobally?: boolean): Promise<void>;
18
+ static submitDone(instance: any, submission: any): Promise<void>;
19
+ static renderForm(form: any, options: any): Promise<any>;
20
+ static createForm(element: any, form: any, options: any): Promise<any>;
21
+ }
package/lib/cjs/Embed.js CHANGED
@@ -1,355 +1,258 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
5
14
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.embed = void 0;
7
- const CDN_1 = __importDefault(require("./CDN"));
8
- // eslint-disable-next-line max-statements
9
- function embed(config = {}) {
10
- const scripts = document.getElementsByTagName('script');
11
- config = Object.assign(config, window.FormioConfig);
12
- let thisScript = null;
13
- let i = scripts.length;
14
- const scriptName = config.scriptName || 'formio.embed.';
15
- while (i--) {
16
- if (scripts[i].src && (scripts[i].src.indexOf(scriptName) !== -1)) {
17
- thisScript = scripts[i];
18
- break;
19
- }
15
+ exports.Formio = void 0;
16
+ const CDN_js_1 = __importDefault(require("./CDN.js"));
17
+ class Formio {
18
+ static setBaseUrl(url) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ Formio.baseUrl = url;
21
+ });
20
22
  }
21
- if (thisScript) {
22
- const query = {};
23
- const queryString = thisScript.src.replace(/^[^?]+\??/, '');
24
- queryString.replace(/\?/g, '&').split('&').forEach((item) => {
25
- query[item.split('=')[0]] = item.split('=')[1] && decodeURIComponent(item.split('=')[1]);
23
+ static setProjectUrl(url) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ Formio.projectUrl = url;
26
26
  });
27
- let scriptSrc = thisScript.src.replace(/^([^?]+).*/, '$1').split('/');
28
- scriptSrc.pop();
29
- if (config.formioPath) {
30
- config.formioPath(scriptSrc);
27
+ }
28
+ static debug(...args) {
29
+ if (Formio.config.debug) {
30
+ console.log(...args);
31
31
  }
32
- scriptSrc = scriptSrc.join('/');
33
- query.script = query.script || (`${config.updatePath ? config.updatePath() : scriptSrc}/formio.form.min.js`);
34
- query.styles = query.styles || (`${config.updatePath ? config.updatePath() : scriptSrc}/formio.form.min.css`);
35
- const cdn = query.cdn || 'https://cdn.jsdelivr.net/npm';
36
- const resolveLibs = (cdn) => {
37
- const libs = {
38
- uswds: {
39
- fa: true,
40
- js: `${cdn}/uswds@2.10.0/dist/js/uswds.min.js`,
41
- css: `${cdn}/uswds@2.10.0/dist/css/uswds.min.css`
42
- },
43
- fontawesome: {
44
- css: `${cdn}/font-awesome@4.7.0/css/font-awesome.min.css`
45
- },
46
- bootstrap: {
47
- css: `${cdn}/bootstrap@4.6.0/dist/css/bootstrap.min.css`
48
- }
49
- };
50
- // Check if using cdn.form.io standart folders format
51
- if (cdn instanceof CDN_1.default) {
52
- const url = cdn.baseUrl;
53
- libs.uswds.js = `${url}/uswds/${cdn.getVersion('uswds')}/uswds.min.js`;
54
- libs.uswds.css = `${url}/uswds/${cdn.getVersion('uswds')}/uswds.min.css`;
55
- libs.fontawesome.css = `${url}/font-awesome/${cdn.getVersion('font-awesome')}/css/font-awesome.min.css`;
56
- libs.bootstrap.css = `${url}/bootstrap/${cdn.getVersion('bootstrap')}/css/bootstrap.min.css`;
32
+ }
33
+ static global(prop) {
34
+ const globalValue = window[prop];
35
+ if (globalValue && globalValue.proxy) {
36
+ return null;
37
+ }
38
+ Formio.debug(`Getting global ${prop}`, globalValue);
39
+ return globalValue;
40
+ }
41
+ static createElement(type, attrs, children) {
42
+ const element = document.createElement(type);
43
+ Object.keys(attrs).forEach(key => {
44
+ element.setAttribute(key, attrs[key]);
45
+ });
46
+ (children || []).forEach(child => {
47
+ element.appendChild(Formio.createElement(child.tag, child.attrs, child.children));
48
+ });
49
+ return element;
50
+ }
51
+ static addScript(src, name) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ if (!src) {
54
+ return Promise.resolve();
57
55
  }
58
- return libs;
59
- };
60
- config = Object.assign({
61
- script: query.script,
62
- style: query.styles,
63
- class: (query.class || 'formio-form-wrapper'),
64
- src: query.src,
65
- form: null,
66
- submission: null,
67
- project: query.project,
68
- base: query.base,
69
- submit: query.submit,
70
- includeLibs: (query.libs === 'true' || query.libs === '1'),
71
- template: query.template,
72
- debug: (query.debug === 'true' || query.debug === '1'),
73
- config: {},
74
- redirect: (query.return || query.redirect),
75
- before: () => { },
76
- after: () => { }
77
- }, config);
78
- /**
79
- * Print debug statements.
80
- *
81
- * @param {...any} args Arguments to pass to the console.log method.
82
- */
83
- const debug = (...args) => {
84
- if (config.debug) {
85
- console.log(...args);
56
+ if (typeof src !== 'string' && src.length) {
57
+ return Promise.all(src.map(ref => Formio.addScript(ref)));
86
58
  }
87
- };
88
- /**
89
- * Creates a new DOM element.
90
- *
91
- * @param {string} tag The HTMLElement to add to the wrapper or shadow dom.
92
- * @param {Object} attrs The attributes to add to this element.
93
- * @param {Array<Object>} children The children attached to this element.
94
- */
95
- const createElement = (tag, attrs, children) => {
96
- const element = document.createElement(tag);
97
- for (const attr in attrs) {
98
- if (attrs.hasOwnProperty(attr)) {
99
- element.setAttribute(attr, attrs[attr]);
100
- }
59
+ if (name && Formio.global(name)) {
60
+ Formio.debug(`${name} already loaded.`);
61
+ return Promise.resolve(Formio.global(name));
101
62
  }
102
- (children || []).forEach(child => {
103
- element.appendChild(createElement(child.tag, child.attrs, child.children));
63
+ Formio.debug('Adding Script', src);
64
+ Formio.wrapper.appendChild(Formio.createElement('script', {
65
+ src
66
+ }));
67
+ if (!name) {
68
+ return Promise.resolve();
69
+ }
70
+ return new Promise((resolve) => {
71
+ Formio.debug(`Waiting to load ${name}`);
72
+ const wait = setInterval(() => {
73
+ if (Formio.global(name)) {
74
+ clearInterval(wait);
75
+ Formio.debug(`${name} loaded.`);
76
+ resolve(Formio.global(name));
77
+ }
78
+ }, 100);
104
79
  });
105
- return element;
106
- };
107
- debug('Embedding Configuration', config);
108
- if (config.addPremiumLib) {
109
- config.addPremiumLib(config, scriptSrc);
110
- }
111
- // The id for this embedded form.
112
- const id = `formio-${Math.random().toString(36).substring(7)}`;
113
- config.id = id;
114
- debug('Creating form wrapper');
115
- let wrapper = createElement('div', {
116
- 'id': `"${id}-wrapper"`
117
80
  });
118
- // insertAfter doesn't exist, but effect is identical.
119
- thisScript.parentNode.insertBefore(wrapper, thisScript.parentNode.firstElementChild.nextSibling);
120
- // If we include the libraries, then we will attempt to run this in shadow dom.
121
- if (config.includeLibs && (typeof wrapper.attachShadow === 'function') && !config.premium) {
122
- wrapper = wrapper.attachShadow({
123
- mode: 'open'
124
- });
125
- config.config.shadowRoot = wrapper;
126
- }
127
- const global = (name) => {
128
- const globalValue = window[name];
129
- debug(`Getting global ${name}`, globalValue);
130
- return globalValue;
131
- };
132
- const addStyles = (href, global) => {
81
+ }
82
+ static addStyles(href, addGlobally = false) {
83
+ return __awaiter(this, void 0, void 0, function* () {
133
84
  if (!href) {
134
85
  return;
135
86
  }
136
87
  if (typeof href !== 'string' && href.length) {
137
- href.forEach(ref => addStyles(ref));
88
+ href.forEach(ref => Formio.addStyles(ref));
138
89
  return;
139
90
  }
140
- debug('Adding Styles', href);
141
- const link = createElement('link', {
91
+ Formio.debug('Adding Styles', href);
92
+ const link = Formio.createElement('link', {
142
93
  rel: 'stylesheet',
143
94
  href
144
95
  });
145
- if (global) {
96
+ if (addGlobally) {
146
97
  // Add globally as well.
147
98
  document.head.appendChild(link);
148
99
  }
149
- wrapper.appendChild(createElement('link', {
100
+ Formio.wrapper.appendChild(Formio.createElement('link', {
150
101
  rel: 'stylesheet',
151
102
  href
152
103
  }));
153
- };
154
- const addScript = (src, globalProp, onReady) => {
155
- if (!src) {
156
- return;
157
- }
158
- if (typeof src !== 'string' && src.length) {
159
- src.forEach(ref => addScript(ref));
160
- return;
104
+ });
105
+ }
106
+ static submitDone(instance, submission) {
107
+ return __awaiter(this, void 0, void 0, function* () {
108
+ Formio.debug('Submision Complete', submission);
109
+ let returnUrl = Formio.config.redirect;
110
+ // Allow form based configuration for return url.
111
+ if (!returnUrl &&
112
+ (instance._form &&
113
+ instance._form.settings &&
114
+ (instance._form.settings.returnUrl ||
115
+ instance._form.settings.redirect))) {
116
+ Formio.debug('Return url found in form configuration');
117
+ returnUrl = instance._form.settings.returnUrl || instance._form.settings.redirect;
161
118
  }
162
- if (globalProp && global(globalProp)) {
163
- debug(`${globalProp} already loaded.`);
164
- return global(globalProp);
119
+ if (returnUrl) {
120
+ const formSrc = instance.formio ? instance.formio.formUrl : '';
121
+ const hasQuery = !!returnUrl.match(/\?/);
122
+ const isOrigin = returnUrl.indexOf(location.origin) === 0;
123
+ returnUrl += hasQuery ? '&' : '?';
124
+ returnUrl += `sub=${submission._id}`;
125
+ if (!isOrigin && formSrc) {
126
+ returnUrl += `&form=${encodeURIComponent(formSrc)}`;
127
+ }
128
+ Formio.debug('Return URL', returnUrl);
129
+ window.location.href = returnUrl;
130
+ if (isOrigin) {
131
+ window.location.reload();
132
+ }
165
133
  }
166
- debug('Adding Script', src);
167
- wrapper.appendChild(createElement('script', {
168
- src
169
- }));
170
- if (globalProp && onReady) {
171
- debug(`Waiting to load ${globalProp}`);
172
- const wait = setInterval(() => {
173
- if (global(globalProp)) {
174
- clearInterval(wait);
175
- debug(`${globalProp} loaded.`);
176
- onReady(global(globalProp));
177
- }
178
- }, 100);
134
+ });
135
+ }
136
+ static renderForm(form, options) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ if (Formio.config.before) {
139
+ yield Formio.config.before(Formio.FormioClass, Formio.element, Formio.config);
179
140
  }
180
- };
181
- // Create a loader
182
- addStyles(`${config.updatePath ? config.updatePath() : scriptSrc}/formio.embed.min.css`);
183
- debug('Creating loader');
184
- const loader = createElement('div', {
185
- 'class': 'formio-loader'
186
- }, [{
187
- tag: 'div',
188
- attrs: {
189
- class: 'loader-wrapper'
190
- },
191
- children: [{
192
- tag: 'div',
193
- attrs: {
194
- class: 'loader text-center'
195
- }
196
- }]
197
- }]);
198
- wrapper.appendChild(loader);
199
- // Add the wrapper for the rendered form.
200
- debug('Creating form element');
201
- const formElement = createElement('div', {
202
- class: config.class
141
+ Formio.FormioClass.license = true;
142
+ return Formio.FormioClass.createForm(Formio.element, form, Object.assign(Object.assign({}, options), { noLoader: true })).then((instance) => {
143
+ Formio.debug('Form created', instance);
144
+ // Remove the loader.
145
+ Formio.debug('Removing loader');
146
+ Formio.wrapper.removeChild(Formio.loader);
147
+ // Set the default submission data.
148
+ if (Formio.config.submission) {
149
+ Formio.debug('Setting submission', Formio.config.submission);
150
+ instance.submission = Formio.config.submission;
151
+ }
152
+ // Allow them to provide additional configs.
153
+ Formio.debug('Triggering embed event');
154
+ Formio.FormioClass.events.emit('formEmbedded', instance);
155
+ // Trigger the after handler.
156
+ if (Formio.config.after) {
157
+ Formio.debug('Calling ready callback');
158
+ Formio.config.after(instance, Formio.config);
159
+ }
160
+ return instance;
161
+ });
203
162
  });
204
- wrapper.appendChild(formElement);
205
- // Add the main formio script.
206
- addScript(config.script, 'Formio', (Formio) => {
207
- const renderForm = () => {
208
- addStyles(config.style);
209
- const isReady = config.before(Formio, formElement, config) || Formio.Promise.resolve();
210
- const form = (config.form || config.src);
211
- debug('Creating form', form, config.config);
212
- isReady.then(() => {
213
- Formio.license = true;
214
- Formio.createForm(formElement, form, Object.assign(Object.assign({}, config.config), { noLoader: true })).then((instance) => {
215
- const submitDone = (submission) => {
216
- debug('Submision Complete', submission);
217
- let returnUrl = config.redirect;
218
- // Allow form based configuration for return url.
219
- if (!returnUrl &&
220
- (instance._form &&
221
- instance._form.settings &&
222
- (instance._form.settings.returnUrl ||
223
- instance._form.settings.redirect))) {
224
- debug('Return url found in form configuration');
225
- returnUrl = instance._form.settings.returnUrl || instance._form.settings.redirect;
226
- }
227
- if (returnUrl) {
228
- const formSrc = instance.formio ? instance.formio.formUrl : '';
229
- const hasQuery = !!returnUrl.match(/\?/);
230
- const isOrigin = returnUrl.indexOf(location.origin) === 0;
231
- returnUrl += hasQuery ? '&' : '?';
232
- returnUrl += `sub=${submission._id}`;
233
- if (!isOrigin && formSrc) {
234
- returnUrl += `&form=${encodeURIComponent(formSrc)}`;
235
- }
236
- debug('Return URL', returnUrl);
237
- window.location.href = returnUrl;
238
- if (isOrigin) {
239
- window.location.reload();
240
- }
241
- }
242
- };
243
- if (config.submit) {
244
- instance.nosubmit = true;
245
- }
246
- debug('Form created', instance);
247
- // Remove the loader.
248
- debug('Removing loader');
249
- wrapper.removeChild(loader);
250
- // Set the default submission data.
251
- if (config.submission) {
252
- debug('Setting submission', config.submission);
253
- instance.submission = config.submission;
254
- }
255
- // Allow them to provide additional configs.
256
- debug('Triggering embed event');
257
- Formio.events.emit('formEmbedded', instance);
258
- debug('Calling ready callback');
259
- config.after(instance, config);
260
- // Configure a redirect.
261
- instance.on('submit', (submission) => {
262
- debug("on('submit')", submission);
263
- if (config.submit) {
264
- debug(`Sending submission to ${config.submit}`);
265
- const headers = {
266
- 'content-type': 'application/json'
267
- };
268
- const token = Formio.getToken();
269
- if (token) {
270
- headers['x-jwt-token'] = token;
271
- }
272
- Formio.fetch(config.submit, {
273
- body: JSON.stringify(submission),
274
- headers: headers,
275
- method: 'POST',
276
- mode: 'cors',
277
- })
278
- .then(resp => resp.json())
279
- .then(submission => submitDone(submission));
280
- }
281
- else {
282
- submitDone(submission);
283
- }
284
- });
285
- });
286
- });
163
+ }
164
+ // eslint-disable-next-line max-statements
165
+ static createForm(element, form, options) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ Formio.element = element;
168
+ Formio.cdn = new CDN_js_1.default(Formio.config.cdn);
169
+ Formio.config.libs = Formio.config.libs || {
170
+ uswds: {
171
+ fa: true,
172
+ js: `${Formio.cdn.uswds}/uswds.min.js`,
173
+ css: `${Formio.cdn.uswds}/uswds.min.css`,
174
+ },
175
+ fontawesome: {
176
+ css: `${Formio.cdn['font-awesome']}/css/font-awesome.min.css`
177
+ },
178
+ bootstrap: {
179
+ css: `${Formio.cdn.bootstrap}/css/bootstrap.min.css`
180
+ }
287
181
  };
288
- if (config.base) {
289
- Formio.setBaseUrl(config.base);
290
- }
291
- if (config.project) {
292
- Formio.setProjectUrl(config.project);
293
- }
182
+ Formio.config.id = Formio.config.id || `formio-${Math.random().toString(36).substring(7)}`;
183
+ // Create a new wrapper and add the element inside of a new wrapper.
184
+ Formio.wrapper = Formio.createElement('div', {
185
+ 'id': `"${Formio.config.id}-wrapper"`
186
+ });
187
+ element.parentNode.insertBefore(Formio.wrapper, element);
188
+ element.parentNode.removeChild(element);
189
+ Formio.wrapper.appendChild(element);
190
+ // Load the renderer styles.
191
+ yield Formio.addStyles(Formio.config.embedCSS || `${Formio.cdn.js}/formio.embed.css`);
192
+ Formio.loader = Formio.createElement('div', {
193
+ 'class': 'formio-loader'
194
+ }, [{
195
+ tag: 'div',
196
+ attrs: {
197
+ class: 'loader-wrapper'
198
+ },
199
+ children: [{
200
+ tag: 'div',
201
+ attrs: {
202
+ class: 'loader text-center'
203
+ }
204
+ }]
205
+ }]);
206
+ Formio.wrapper.appendChild(Formio.loader);
207
+ Formio.FormioClass = yield Formio.addScript(Formio.config.script || `${Formio.cdn.js}/formio.form.min.js`, 'Formio');
208
+ Formio.FormioClass.setBaseUrl(Formio.baseUrl || Formio.config.base);
209
+ Formio.FormioClass.setProjectUrl(Formio.projectUrl || Formio.config.project);
210
+ Formio.FormioClass.language = Formio.language;
294
211
  // Add premium modules
295
- if (global('premium')) {
296
- debug('Using premium module.');
297
- Formio.use(global('premium'));
212
+ if (Formio.global('premium')) {
213
+ Formio.debug('Using premium module.');
214
+ Formio.FormioClass.use(Formio.global('premium'));
298
215
  }
299
- if (global('vpat')) {
300
- debug('Using vpat module.');
301
- Formio.use(global('vpat'));
216
+ if (Formio.global('vpat')) {
217
+ Formio.debug('Using vpat module.');
218
+ Formio.FormioClass.use(Formio.global('vpat'));
302
219
  }
303
- if (config.template) {
304
- if (config.includeLibs) {
305
- addStyles(config.libs[config.template].css);
306
- addScript(config.libs[config.template].js);
307
- if (config.libs[config.template].fa) {
308
- addStyles(config.libs.fontawesome.css, true);
220
+ if (Formio.config.template) {
221
+ if (Formio.config.includeLibs) {
222
+ yield Formio.addStyles(Formio.config.libs[Formio.config.template].css);
223
+ yield Formio.addScript(Formio.config.libs[Formio.config.template].js);
224
+ if (Formio.config.libs[Formio.config.template].fa) {
225
+ yield Formio.addStyles(Formio.config.libs.fontawesome.css, true);
309
226
  }
310
227
  }
311
- let templateSrc;
312
- if (cdn instanceof CDN_1.default) {
313
- templateSrc = `${cdn[config.template]}/${config.template}.min`;
314
- }
315
- else {
316
- templateSrc = `${cdn}/@formio/${config.template}@latest/dist/${config.template}.min`;
228
+ if (Formio.cdn[Formio.config.template]) {
229
+ const templateSrc = `${Formio.cdn[Formio.config.template]}/${Formio.config.template}.min`;
230
+ yield Formio.addStyles(`${templateSrc}.css`);
231
+ Formio.debug(`Using ${Formio.config.template}`);
232
+ Formio.FormioClass.use(yield Formio.addScript(`${templateSrc}.js`, Formio.config.template));
317
233
  }
318
- addStyles(`${templateSrc}.css`);
319
- addScript(`${templateSrc}.js`, config.template, (template) => {
320
- debug(`Using ${config.template}`);
321
- Formio.use(template);
322
- renderForm();
323
- });
324
234
  }
325
- else if (global('uswds')) {
326
- debug('Using uswds module.');
327
- Formio.use(global('uswds'));
235
+ else if (Formio.global('uswds')) {
236
+ Formio.debug('Using uswds module.');
237
+ Formio.FormioClass.use(Formio.global('uswds'));
328
238
  }
329
239
  // Default bootstrap + fontawesome.
330
- else if (config.includeLibs) {
331
- Formio.cdn = new CDN_1.default();
332
- config.libs = resolveLibs(query.cdn || Formio.cdn);
333
- addStyles(config.libs.fontawesome.css, true);
334
- addStyles(config.libs.bootstrap.css);
240
+ else if (Formio.config.includeLibs) {
241
+ yield Formio.addStyles(Formio.config.libs.fontawesome.css, true);
242
+ yield Formio.addStyles(Formio.config.libs.bootstrap.css);
335
243
  }
336
- if (config.premium) {
337
- addStyles(config.premium.css);
338
- addScript(config.premium.js, 'premium', (premium) => {
339
- debug('Using premium');
340
- Formio.use(premium);
341
- renderForm();
342
- });
343
- }
344
- // Render the form if no template is provided.
345
- if (!config.template && !config.premium) {
346
- renderForm();
244
+ if (Formio.config.premium) {
245
+ yield Formio.addStyles(Formio.config.premium.css);
246
+ Formio.debug('Using premium');
247
+ Formio.FormioClass.use(yield Formio.addScript(Formio.config.premium.js, 'premium'));
347
248
  }
249
+ yield Formio.addStyles(Formio.config.style || `${Formio.cdn.js}/formio.form.min.css`);
250
+ return yield Formio.renderForm(form, options);
348
251
  });
349
252
  }
350
- else {
351
- // Show an error if the script cannot be found.
352
- document.write('<span>Could not locate the Embedded form.</span>');
353
- }
354
253
  }
355
- exports.embed = embed;
254
+ Formio.config = {};
255
+ Formio.loader = null;
256
+ Formio.cdn = null;
257
+ Formio.proxy = true;
258
+ exports.Formio = Formio;
package/lib/cjs/Form.d.ts CHANGED
@@ -12,7 +12,7 @@ export default class Form extends Element {
12
12
  * @param {boolean} options.template - Provides a way to inject custom logic into the creation of every element rendered within the form.
13
13
  *
14
14
  * @example
15
- * import Form from 'formiojs/Form';
15
+ * import Form from '@formio/js/Form';
16
16
  * const form = new Form(document.getElementById('formio'), 'https://examples.form.io/example');
17
17
  * form.build();
18
18
  */