formatic 0.2.3 → 0.2.4

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascript/declarations/date.d.ts +9 -0
  3. data/app/assets/javascript/declarations/file.d.ts +14 -0
  4. data/app/assets/javascript/declarations/select.d.ts +15 -0
  5. data/app/assets/javascript/declarations/setup.d.ts +3 -0
  6. data/app/assets/javascript/declarations/stepper.d.ts +12 -0
  7. data/app/assets/javascript/declarations/string.d.ts +14 -0
  8. data/app/assets/javascript/declarations/textarea.d.ts +15 -0
  9. data/app/assets/javascript/declarations/toggle.d.ts +8 -0
  10. data/app/assets/javascript/formatic/date.js +30 -0
  11. data/app/assets/javascript/formatic/date.js.map +1 -0
  12. data/app/assets/javascript/formatic/file.js +83 -0
  13. data/app/assets/javascript/formatic/file.js.map +1 -0
  14. data/app/assets/javascript/formatic/select.js +81 -0
  15. data/app/assets/javascript/formatic/select.js.map +1 -0
  16. data/app/assets/javascript/formatic/setup.js +42 -0
  17. data/app/assets/javascript/formatic/setup.js.map +1 -0
  18. data/app/assets/javascript/formatic/stepper.js +67 -0
  19. data/app/assets/javascript/formatic/stepper.js.map +1 -0
  20. data/app/assets/javascript/formatic/string.js +71 -0
  21. data/app/assets/javascript/formatic/string.js.map +1 -0
  22. data/app/assets/javascript/formatic/textarea.js +81 -0
  23. data/app/assets/javascript/formatic/textarea.js.map +1 -0
  24. data/app/assets/javascript/formatic/toggle.js +63 -0
  25. data/app/assets/javascript/formatic/toggle.js.map +1 -0
  26. data/app/assets/javascript/src/date.ts +41 -0
  27. data/app/assets/javascript/src/file.ts +101 -0
  28. data/app/assets/javascript/src/select.ts +101 -0
  29. data/app/assets/javascript/src/setup.js +44 -0
  30. data/app/assets/javascript/src/stepper.ts +80 -0
  31. data/app/assets/javascript/src/string.ts +89 -0
  32. data/app/assets/javascript/src/textarea.ts +101 -0
  33. data/app/assets/javascript/src/toggle.ts +76 -0
  34. data/app/assets/stylesheets/formatic/components/checklist.css +1 -0
  35. data/app/assets/stylesheets/formatic/components/checklist.css.map +1 -0
  36. data/app/assets/stylesheets/formatic/components/date.css +17 -0
  37. data/app/assets/stylesheets/formatic/components/date.sass +2 -2
  38. data/app/assets/stylesheets/formatic/components/select.css +17 -0
  39. data/app/assets/stylesheets/formatic/components/stepper.css +17 -0
  40. data/app/assets/stylesheets/formatic/components/string.css +17 -0
  41. data/app/assets/stylesheets/formatic/components/textarea.css +17 -0
  42. data/app/assets/stylesheets/formatic/components/time.css +17 -0
  43. data/app/assets/stylesheets/formatic/components/toggle.css +17 -0
  44. data/app/assets/stylesheets/formatic/components/wrapper.css +17 -0
  45. data/app/assets/stylesheets/formatic/formatic.css +450 -0
  46. data/app/assets/stylesheets/formatic/formatic.css.map +1 -0
  47. data/app/assets/stylesheets/formatic/generics/flip.css +1 -0
  48. data/app/assets/stylesheets/formatic/generics/flip.css.map +1 -0
  49. data/app/assets/stylesheets/formatic/scopes/form.css +17 -0
  50. data/app/assets/stylesheets/formatic/utilities/container.css +1 -0
  51. data/app/assets/stylesheets/formatic/utilities/container.css.map +1 -0
  52. data/app/assets/stylesheets/formatic/vendor.css +1107 -0
  53. data/app/assets/stylesheets/formatic/vendor.css.map +1 -0
  54. data/app/assets/stylesheets/formatic.css +18 -0
  55. data/app/assets/stylesheets/formatic.sass +17 -0
  56. data/app/assets/stylesheets/vendor.css +5 -0
  57. data/app/assets/stylesheets/vendor.css.map +1 -0
  58. data/app/assets/stylesheets/vendor.sass +1 -0
  59. data/app/components/formatic/base.rb +4 -1
  60. data/app/components/formatic/date.rb +1 -1
  61. data/app/components/formatic/file.rb +21 -0
  62. data/app/components/formatic/files.rb +8 -0
  63. data/app/components/formatic/select.rb +1 -1
  64. data/app/components/formatic/time.rb +3 -3
  65. data/config/importmap.rb +11 -0
  66. data/lib/formatic/choices/options.rb +1 -1
  67. data/lib/formatic/choices/records.rb +1 -1
  68. data/lib/formatic/engine.rb +12 -0
  69. data/lib/formatic/version.rb +1 -1
  70. data/lib/formatic/wrappers/required.rb +1 -1
  71. data/lib/formatic.rb +2 -1
  72. metadata +77 -17
  73. data/app/assets/javascript/formatic/components/date.ts +0 -54
  74. data/app/assets/javascript/formatic/components/select.ts +0 -113
  75. data/app/assets/javascript/formatic/components/stepper.ts +0 -89
  76. data/app/assets/javascript/formatic/components/string.ts +0 -103
  77. data/app/assets/javascript/formatic/components/textarea.ts +0 -112
  78. data/app/assets/javascript/formatic/components/toggle.ts +0 -89
  79. data/app/assets/javascript/formatic.js +0 -446
  80. data/app/assets/javascript/formatic.js.map +0 -1
  81. data/app/assets/stylesheets/formatic/index.sass +0 -17
  82. data/app/assets/stylesheets/formatic/package.json +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b7a49fd3aac4ec891ed88e0897343eae41ab0a23bebac19c5b856d2270d67fb
4
- data.tar.gz: db10f8c8f04e3bb2a8f3b5c272e34fb4b7035be02e6dc28e2c1420dab662fd56
3
+ metadata.gz: 997cd7cec3d24e119ab4efa2338da4c24af6cc10a0af49ba868368cb451bb270
4
+ data.tar.gz: 7b92e274989248ab7bd9ab9987424859068cc75bbfdb377f9ce18ef31f858102
5
5
  SHA512:
6
- metadata.gz: 1dbdf5c86de05615c92c0e39ace9531e2c0280af91866776abb02ed3f8b27c5dc383eadae7a1fbec05687cf8f0b7ebfa69d2fed86e6e1420b9673ff9e272364e
7
- data.tar.gz: 9bfb7cf8e8a6268159f38f5b79c01e1cf719bbb01d83511b991c6bb15400018cc4ce537586d463f6dfbca01f2f1aab51e83b93ca6b448ed5aeec39847b3ed82a
6
+ metadata.gz: 4206b2d92050be2c8acca35c6fd60ce6ead28ed816683b7bbe41b6ad22b9a5842610cc5a93d6aceb17766dea1edf147d1ae29508e43163d308220c125b93fce0
7
+ data.tar.gz: 8b4bf4386ec76f1770548d38c8d9d6d80052a77a19b70639d0b7ce137de613f199ab621fdcd5ecab47e478a60306d8f7205d3c39a00a37effeb1713a11ce1b03
@@ -0,0 +1,9 @@
1
+ export declare class Date {
2
+ private el;
3
+ constructor(el: HTMLElement);
4
+ private setupBindings;
5
+ private get dayInput();
6
+ private get monthInput();
7
+ private get yearInput();
8
+ private get shortcutButtons();
9
+ }
@@ -0,0 +1,14 @@
1
+ export declare class FormaticFile {
2
+ private el;
3
+ private url;
4
+ private pond;
5
+ private busyStatuses;
6
+ constructor(el: HTMLElement);
7
+ private setupBindings;
8
+ private updateSubmit;
9
+ private enableSubmit;
10
+ private disableSubmit;
11
+ private get input();
12
+ private get form();
13
+ private get submitButtons();
14
+ }
@@ -0,0 +1,15 @@
1
+ export declare class Select {
2
+ private el;
3
+ private timeoutId;
4
+ constructor(el: HTMLElement);
5
+ private setupBindings;
6
+ private actionSave;
7
+ private actionSaveNow;
8
+ private guiWaitingForSave;
9
+ private guiSaved;
10
+ private guiFailed;
11
+ private get autoSubmit();
12
+ private save;
13
+ private debounce;
14
+ private autosize;
15
+ }
@@ -0,0 +1,3 @@
1
+ export declare namespace Formatic {
2
+ function setup(): void;
3
+ }
@@ -0,0 +1,12 @@
1
+ export declare class Stepper {
2
+ private el;
3
+ constructor(el: HTMLElement);
4
+ private setupBindings;
5
+ private increment;
6
+ private decrement;
7
+ private get minimum();
8
+ private get number();
9
+ private get incrementButtons();
10
+ private get decrementButtons();
11
+ private get numberInput();
12
+ }
@@ -0,0 +1,14 @@
1
+ export declare class String {
2
+ private el;
3
+ private timeoutId;
4
+ constructor(el: HTMLElement);
5
+ private setupBindings;
6
+ private actionSave;
7
+ private actionSaveNow;
8
+ private guiWaitingForSave;
9
+ private guiSaved;
10
+ private guiFailed;
11
+ private get autoSubmit();
12
+ private save;
13
+ private debounce;
14
+ }
@@ -0,0 +1,15 @@
1
+ export declare class Textarea {
2
+ private el;
3
+ private timeoutId;
4
+ constructor(el: HTMLElement);
5
+ private setupBindings;
6
+ private actionSave;
7
+ private actionSaveNow;
8
+ private guiWaitingForSave;
9
+ private guiSaved;
10
+ private guiFailed;
11
+ private get autoSubmit();
12
+ private save;
13
+ private debounce;
14
+ private autosize;
15
+ }
@@ -0,0 +1,8 @@
1
+ export declare class Toggle {
2
+ private el;
3
+ constructor(el: HTMLElement);
4
+ private setupBindings;
5
+ private activate;
6
+ private deactivate;
7
+ private get checkbox();
8
+ }
@@ -0,0 +1,30 @@
1
+ export class Date {
2
+ constructor(el) {
3
+ this.el = el;
4
+ this.setupBindings();
5
+ }
6
+ setupBindings() {
7
+ this.shortcutButtons.forEach((el) => {
8
+ el.addEventListener('click', (event) => {
9
+ event.preventDefault();
10
+ const shortcut = event.currentTarget;
11
+ this.dayInput.value = shortcut.dataset.day;
12
+ this.monthInput.value = shortcut.dataset.month;
13
+ this.yearInput.value = shortcut.dataset.year;
14
+ });
15
+ });
16
+ }
17
+ get dayInput() {
18
+ return this.el.querySelector('.js-formatic-date__day');
19
+ }
20
+ get monthInput() {
21
+ return this.el.querySelector('.js-formatic-date__month');
22
+ }
23
+ get yearInput() {
24
+ return this.el.querySelector('.js-formatic-date__year');
25
+ }
26
+ get shortcutButtons() {
27
+ return this.el.querySelectorAll('.js-formatic-date__shortcut');
28
+ }
29
+ }
30
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,IAAI;IAGf,YAAY,EAAe;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAClC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,MAAM,QAAQ,GAAqB,KAAK,CAAC,aAAa,CAAA;gBAEtD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAA;gBAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA;gBAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAA;YAC9C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAMD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,wBAAwB,CAAC,CAAA;IAC3E,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,0BAA0B,CAAC,CAAA;IAC7E,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,yBAAyB,CAAC,CAAA;IAC5E,CAAC;IAED,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,6BAA6B,CAAC,CAAA;IAC7E,CAAC;CACF"}
@@ -0,0 +1,83 @@
1
+ import * as FilePond from "filepond";
2
+ import { DirectUpload } from "@rails/activestorage";
3
+ export class FormaticFile {
4
+ constructor(el) {
5
+ this.busyStatuses = new Set([
6
+ FilePond.FileStatus.LOADING,
7
+ FilePond.FileStatus.PROCESSING_QUEUED,
8
+ FilePond.FileStatus.PROCESSING,
9
+ ]);
10
+ this.el = el;
11
+ this.url = this.input.dataset.directUploadUrl;
12
+ this.setupBindings();
13
+ }
14
+ setupBindings() {
15
+ this.pond = FilePond.create(this.input, {
16
+ credits: false,
17
+ onwarning: () => this.updateSubmit(),
18
+ onerror: () => this.updateSubmit(),
19
+ onaddfilestart: () => this.updateSubmit(),
20
+ onaddfileprogress: () => this.updateSubmit(),
21
+ onaddfile: () => this.updateSubmit(),
22
+ onprocessfilestart: () => this.updateSubmit(),
23
+ onprocessfileprogress: () => this.updateSubmit(),
24
+ onprocessfileabort: () => this.updateSubmit(),
25
+ onprocessfilerevert: () => this.updateSubmit(),
26
+ onprocessfile: () => this.updateSubmit(),
27
+ onprocessfiles: () => this.updateSubmit(),
28
+ onremovefile: () => this.updateSubmit(),
29
+ onpreparefile: () => this.updateSubmit(),
30
+ onupdatefiles: () => this.updateSubmit(),
31
+ onactivatefile: () => this.updateSubmit(),
32
+ onreorderfiles: () => this.updateSubmit(),
33
+ server: {
34
+ process: (fieldName, file, _metadata, load, error, progress, abort, transfer, options) => {
35
+ const uploader = new DirectUpload(file, this.url, {
36
+ directUploadWillStoreFileWithXHR: (request) => {
37
+ request.upload.addEventListener('progress', event => progress(event.lengthComputable, event.loaded, event.total));
38
+ }
39
+ });
40
+ uploader.create((errorResponse, blob) => {
41
+ if (errorResponse) {
42
+ error(`Something went wrong: ${errorResponse}`);
43
+ }
44
+ else {
45
+ load(blob.signed_id);
46
+ }
47
+ });
48
+ return {
49
+ abort: () => abort()
50
+ };
51
+ },
52
+ headers: {
53
+ 'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]')?.content
54
+ }
55
+ },
56
+ });
57
+ }
58
+ updateSubmit() {
59
+ const files = this.pond.getFiles();
60
+ const busyFiles = files.some(f => this.busyStatuses.has(f.status));
61
+ busyFiles ? this.disableSubmit() : this.enableSubmit();
62
+ }
63
+ enableSubmit() {
64
+ this.submitButtons.forEach((button) => {
65
+ button.disabled = false;
66
+ });
67
+ }
68
+ disableSubmit() {
69
+ this.submitButtons.forEach((button) => {
70
+ button.disabled = true;
71
+ });
72
+ }
73
+ get input() {
74
+ return this.el.querySelector('.js-formatic-file__input');
75
+ }
76
+ get form() {
77
+ return this.el.closest('form');
78
+ }
79
+ get submitButtons() {
80
+ return this.form.querySelectorAll('[type="submit"]');
81
+ }
82
+ }
83
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import autosize from "autosize";
2
+ export class Select {
3
+ constructor(el) {
4
+ this.el = el;
5
+ this.setupBindings();
6
+ }
7
+ setupBindings() {
8
+ this.autosize();
9
+ this.el.addEventListener('input', (event) => {
10
+ event.preventDefault();
11
+ if (this.autoSubmit)
12
+ this.actionSave();
13
+ });
14
+ }
15
+ actionSave() {
16
+ this.guiWaitingForSave();
17
+ this.debounce(this.actionSaveNow.bind(this))();
18
+ }
19
+ actionSaveNow() {
20
+ console.debug("Saving select...");
21
+ this.el.classList.remove('is-loading');
22
+ this.el.classList.add('is-saved');
23
+ this.save();
24
+ }
25
+ guiWaitingForSave() {
26
+ this.el.classList.add('is-loading');
27
+ this.el.classList.remove('is-saved');
28
+ this.el.classList.remove('is-failed');
29
+ }
30
+ guiSaved() {
31
+ this.el.classList.remove('is-loading');
32
+ this.el.classList.add('is-saved');
33
+ this.el.classList.remove('is-failed');
34
+ }
35
+ guiFailed() {
36
+ this.el.classList.remove('is-loading');
37
+ this.el.classList.remove('is-saved');
38
+ this.el.classList.add('is-failed');
39
+ }
40
+ get autoSubmit() {
41
+ return this.el.classList.contains('is-autosubmit');
42
+ }
43
+ save() {
44
+ const form = this.el.closest('form');
45
+ const data = new FormData(form);
46
+ data.set('_method', 'patch');
47
+ fetch(form.action, {
48
+ method: 'POST',
49
+ headers: { 'Accept': 'text/javascript' },
50
+ body: data
51
+ })
52
+ .then(response => {
53
+ if (response.status == 201) {
54
+ console.debug('Select content saved');
55
+ this.guiSaved();
56
+ }
57
+ else {
58
+ console.debug('Select content not saved');
59
+ this.guiFailed();
60
+ }
61
+ }).catch(err => {
62
+ console.warn(err);
63
+ console.debug('Failed badly to save');
64
+ });
65
+ }
66
+ debounce(fn) {
67
+ return () => {
68
+ clearTimeout(this.timeoutId);
69
+ this.timeoutId = setTimeout(() => fn(), 1000);
70
+ };
71
+ }
72
+ autosize() {
73
+ try {
74
+ autosize(this.el);
75
+ }
76
+ catch (error) {
77
+ console.warn(`Formatic is missing the autosize library`);
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Date } from 'formatic/date';
2
+ import { Select } from 'formatic/select';
3
+ import { Stepper } from 'formatic/stepper';
4
+ import { String } from 'formatic/string';
5
+ import { Textarea } from 'formatic/textarea';
6
+ import { Toggle } from 'formatic/toggle';
7
+ import { FormaticFile } from 'formatic/file';
8
+ export var Formatic;
9
+ (function (Formatic) {
10
+ function setup() {
11
+ document.querySelectorAll('.js-formatic-file').forEach((el) => {
12
+ console.debug('[Formatic] Instantiating File...');
13
+ new FormaticFile(el);
14
+ });
15
+ document.querySelectorAll('.js-formatic-date').forEach((el) => {
16
+ console.debug('[Formatic] Instantiating Date...');
17
+ new Date(el);
18
+ });
19
+ document.querySelectorAll('.js-formatic-select').forEach((el) => {
20
+ console.debug('[Formatic] Instantiating Select...');
21
+ new Select(el);
22
+ });
23
+ document.querySelectorAll('.js-formatic-stepper').forEach((el) => {
24
+ console.debug('[Formatic] Instantiating Stepper...');
25
+ new Stepper(el);
26
+ });
27
+ document.querySelectorAll('.js-formatic-string').forEach((el) => {
28
+ console.debug('[Formatic] Instantiating String...');
29
+ new String(el);
30
+ });
31
+ document.querySelectorAll('.js-formatic-textarea').forEach((el) => {
32
+ console.debug('[Formatic] Instantiating Textarea...');
33
+ new Textarea(el);
34
+ });
35
+ document.querySelectorAll('.js-formatic-toggle').forEach((el) => {
36
+ console.debug('[Formatic] Instantiating Toggle...');
37
+ new Toggle(el);
38
+ });
39
+ }
40
+ Formatic.setup = setup;
41
+ })(Formatic || (Formatic = {}));
42
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,KAAW,QAAQ,CAqCxB;AArCD,WAAiB,QAAQ;IACvB,SAAgB,KAAK;QACnB,QAAQ,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACjD,IAAI,YAAY,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACjD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;YACpD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC7E,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACrD,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAnCe,cAAK,QAmCpB,CAAA;AACH,CAAC,EArCgB,QAAQ,KAAR,QAAQ,QAqCxB"}
@@ -0,0 +1,67 @@
1
+ export class Stepper {
2
+ constructor(el) {
3
+ this.el = el;
4
+ this.setupBindings();
5
+ }
6
+ setupBindings() {
7
+ this.incrementButtons.forEach((el) => {
8
+ el.addEventListener('click', (event) => {
9
+ event.preventDefault();
10
+ this.increment();
11
+ });
12
+ });
13
+ this.decrementButtons.forEach((el) => {
14
+ el.addEventListener('click', (event) => {
15
+ event.preventDefault();
16
+ this.decrement();
17
+ });
18
+ });
19
+ this.numberInput.addEventListener('click', (event) => {
20
+ this.numberInput.select();
21
+ });
22
+ }
23
+ increment() {
24
+ if (!this.number && this.number != 0) {
25
+ this.numberInput.value = Math.max(...[0, this.minimum]).toString();
26
+ }
27
+ else if (isNaN(this.number)) {
28
+ return;
29
+ }
30
+ else if (this.number < this.minimum) {
31
+ this.numberInput.value = this.minimum.toString();
32
+ }
33
+ else {
34
+ this.numberInput.value = (this.number + 1).toString();
35
+ }
36
+ }
37
+ decrement() {
38
+ if (!this.number && this.number != 0) {
39
+ this.numberInput.value = Math.max(...[-1, this.minimum]).toString();
40
+ }
41
+ else if (isNaN(this.number)) {
42
+ return;
43
+ }
44
+ else if (this.number <= this.minimum) {
45
+ return;
46
+ }
47
+ else {
48
+ this.numberInput.value = (this.number - 1).toString();
49
+ }
50
+ }
51
+ get minimum() {
52
+ return parseInt(this.numberInput.min);
53
+ }
54
+ get number() {
55
+ return parseInt(this.numberInput.value);
56
+ }
57
+ get incrementButtons() {
58
+ return this.el.querySelectorAll('.js-formatic-stepper__increment');
59
+ }
60
+ get decrementButtons() {
61
+ return this.el.querySelectorAll('.js-formatic-stepper__decrement');
62
+ }
63
+ get numberInput() {
64
+ return this.el.querySelector('.js-formatic-stepper__number');
65
+ }
66
+ }
67
+ //# sourceMappingURL=stepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepper.js","sourceRoot":"","sources":["../src/stepper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export class String {
2
+ constructor(el) {
3
+ this.el = el;
4
+ this.setupBindings();
5
+ }
6
+ setupBindings() {
7
+ this.el.addEventListener('input', (event) => {
8
+ event.preventDefault();
9
+ if (this.autoSubmit)
10
+ this.actionSave();
11
+ });
12
+ }
13
+ actionSave() {
14
+ this.guiWaitingForSave();
15
+ this.debounce(this.actionSaveNow.bind(this))();
16
+ }
17
+ actionSaveNow() {
18
+ console.debug("Saving text input...");
19
+ this.el.classList.remove('is-loading');
20
+ this.el.classList.add('is-saved');
21
+ this.save();
22
+ }
23
+ guiWaitingForSave() {
24
+ this.el.classList.add('is-loading');
25
+ this.el.classList.remove('is-saved');
26
+ this.el.classList.remove('is-failed');
27
+ }
28
+ guiSaved() {
29
+ this.el.classList.remove('is-loading');
30
+ this.el.classList.add('is-saved');
31
+ this.el.classList.remove('is-failed');
32
+ }
33
+ guiFailed() {
34
+ this.el.classList.remove('is-loading');
35
+ this.el.classList.remove('is-saved');
36
+ this.el.classList.add('is-failed');
37
+ }
38
+ get autoSubmit() {
39
+ return this.el.classList.contains('is-autosubmit');
40
+ }
41
+ save() {
42
+ const form = this.el.closest('form');
43
+ const data = new FormData(form);
44
+ data.set('_method', 'patch');
45
+ fetch(form.action, {
46
+ method: 'POST',
47
+ headers: { 'Accept': 'text/javascript' },
48
+ body: data
49
+ })
50
+ .then(response => {
51
+ if (response.status == 201) {
52
+ console.debug('String content saved');
53
+ this.guiSaved();
54
+ }
55
+ else {
56
+ console.debug('String content not saved');
57
+ this.guiFailed();
58
+ }
59
+ }).catch(err => {
60
+ console.warn(err);
61
+ console.debug('Failed badly to save');
62
+ });
63
+ }
64
+ debounce(fn) {
65
+ return () => {
66
+ clearTimeout(this.timeoutId);
67
+ this.timeoutId = setTimeout(() => fn(), 1000);
68
+ };
69
+ }
70
+ }
71
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IAIjB,YAAY,EAAe;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,UAAU,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC;IAIO,UAAU;QAChB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;IAChD,CAAC;IAEO,aAAa;QACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACrC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAIO,iBAAiB;QACvB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACnC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACpC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IACvC,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IACvC,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACpC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACpC,CAAC;IAID,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;IACpD,CAAC;IAIO,IAAI;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAkB,MAAM,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAE5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE;YACxC,IAAI,EAAE,IAAI;SACX,CAAC;aACC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACf,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBACrC,IAAI,CAAC,QAAQ,EAAE,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;gBACzC,IAAI,CAAC,SAAS,EAAE,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,QAAQ,CAAC,EAAY;QAC3B,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QAC/C,CAAC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,81 @@
1
+ import autosize from "autosize";
2
+ export class Textarea {
3
+ constructor(el) {
4
+ this.el = el;
5
+ this.setupBindings();
6
+ }
7
+ setupBindings() {
8
+ this.autosize();
9
+ this.el.addEventListener('input', (event) => {
10
+ event.preventDefault();
11
+ if (this.autoSubmit)
12
+ this.actionSave();
13
+ });
14
+ }
15
+ actionSave() {
16
+ this.guiWaitingForSave();
17
+ this.debounce(this.actionSaveNow.bind(this))();
18
+ }
19
+ actionSaveNow() {
20
+ console.debug("Saving textarea...");
21
+ this.el.classList.remove('is-loading');
22
+ this.el.classList.add('is-saved');
23
+ this.save();
24
+ }
25
+ guiWaitingForSave() {
26
+ this.el.classList.add('is-loading');
27
+ this.el.classList.remove('is-saved');
28
+ this.el.classList.remove('is-failed');
29
+ }
30
+ guiSaved() {
31
+ this.el.classList.remove('is-loading');
32
+ this.el.classList.add('is-saved');
33
+ this.el.classList.remove('is-failed');
34
+ }
35
+ guiFailed() {
36
+ this.el.classList.remove('is-loading');
37
+ this.el.classList.remove('is-saved');
38
+ this.el.classList.add('is-failed');
39
+ }
40
+ get autoSubmit() {
41
+ return this.el.classList.contains('is-autosubmit');
42
+ }
43
+ save() {
44
+ const form = this.el.closest('form');
45
+ const data = new FormData(form);
46
+ data.set('_method', 'patch');
47
+ fetch(form.action, {
48
+ method: 'POST',
49
+ headers: { 'Accept': 'text/javascript' },
50
+ body: data
51
+ })
52
+ .then(response => {
53
+ if (response.status == 201) {
54
+ console.debug('Textarea content saved');
55
+ this.guiSaved();
56
+ }
57
+ else {
58
+ console.debug('Textarea content not saved');
59
+ this.guiFailed();
60
+ }
61
+ }).catch(err => {
62
+ console.warn(err);
63
+ console.debug('Failed badly to save');
64
+ });
65
+ }
66
+ debounce(fn) {
67
+ return () => {
68
+ clearTimeout(this.timeoutId);
69
+ this.timeoutId = setTimeout(() => fn(), 1000);
70
+ };
71
+ }
72
+ autosize() {
73
+ try {
74
+ autosize(this.el);
75
+ }
76
+ catch (error) {
77
+ console.warn(`Formatic is missing the autosize library`);
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../src/textarea.ts"],"names":[],"mappings":"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"}