client_side_validations-simple_form 17.0.0 → 19.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebf9d3042a4f3be6d85d8fbe2fb9f92e178bdb9ae1f8eee83c27969b82b8e941
4
- data.tar.gz: f861a3f23a66616b580bcbe0cf98eff4799737649a703f90b421c335deda3bce
3
+ metadata.gz: 662fef6ec361706a1b503c70d3e05b070fe04ce1e22be8f5484c8acdde51174f
4
+ data.tar.gz: b1928166b3647f0148e4e1756b4ac5098c4a8bcc3e03e449d07929447735a14b
5
5
  SHA512:
6
- metadata.gz: e9c68651915c31fda268f6ba48db65a4ea78476b518f255645e624d532075f815ec08a702ccf87f26f33435d831779b40f49b3fa6db396fbdade14046077c835
7
- data.tar.gz: c3a0abda4e8071e03e204adfcdb7b5664f393cdd10f0fad6c8a5c5da2929003838496c9eacac7bd752c07b2bc6dc6c88b37bb7b31a69080a9cf6b129199a36e7
6
+ metadata.gz: ac910ea4f4b494125948129d0559445f125b5f5ed2d226f1cf6158c7693d1718a1c2ffe80d326616e45c86f36bb789b938b3d916ff8ae3ef62189d33d7b80514
7
+ data.tar.gz: 45320bd2eaa7d6ac414bc7d6c5bec419019315a9ada203d615cfdcc6628f404df7ed7e1adb1f9e531997442277d2a6657776b0e7568dd213b856a349b06b2b40
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 19.0.0 / 2026-07-05
4
+
5
+ * [FEATURE] Breaking change: Replace Rollup with Rolldown v1 for bundling (10–30× faster builds)
6
+ * [FEATURE] Breaking change: Replace ESLint + neostandard with Oxlint v1 for linting (50–100× faster)
7
+ * [FEATURE] Breaking change: Drop Babel — transpilation handled by Rolldown's built-in Oxc transforms (minimum browser targets are unchanged: Chrome 60+, Firefox 60+, iOS 12+, Safari 12+)
8
+ * [FEATURE] Breaking change: Drop CSV < 25 compatibility
9
+ * [ENHANCEMENT] Remove 9 unused npm devDependencies (smaller install footprint)
10
+
11
+ ## 18.0.0 / 2026-04-19
12
+
13
+ * [FEATURE] Breaking change: Align the Simple Form JavaScript hooks with the DOM-first `ClientSideValidations` runtime
14
+ * [ENHANCEMENT] Remove jQuery-specific assumptions from the browser test harness and documentation
15
+
3
16
  ## 17.0.0 / 2026-01-07
4
17
 
5
18
  * [FEATURE] Drop Internet Explorer and other older browsers support
data/README.md CHANGED
@@ -28,9 +28,11 @@ required **before** `client_side_validations-simple_form`.
28
28
 
29
29
  Instructions depend on your technology stack.
30
30
 
31
+ This package extends the jQuery-free, DOM-first `ClientSideValidations` runtime.
32
+
31
33
  #### When using Webpacker ####
32
34
 
33
- Make sure that you are requiring jQuery and Client Side Validations.
35
+ Make sure that you are requiring Client Side Validations before the Simple Form plugin.
34
36
 
35
37
  Add the following package:
36
38
 
@@ -44,10 +46,10 @@ pack:
44
46
 
45
47
  ```js
46
48
  // No framework / Generic frameworks / Bootstrap 3 with `import` syntax
47
- import '@client-side-validations/simple-form/src'
49
+ import '@client-side-validations/simple-form'
48
50
 
49
51
  // Bootstrap 4+ with `import` syntax
50
- import '@client-side-validations/simple-form/src/index.bootstrap4'
52
+ import '@client-side-validations/simple-form/dist/simple-form.bootstrap4.esm'
51
53
 
52
54
  // No framework / Generic frameworks / Bootstrap 3 with `require` syntax
53
55
  require('@client-side-validations/simple-form')
@@ -58,7 +60,7 @@ require('@client-side-validations/simple-form/dist/simple-form.bootstrap4.esm')
58
60
 
59
61
  #### When using Sprockets ####
60
62
 
61
- Make sure that you are requiring jQuery and Client Side Validations.
63
+ Make sure that you are requiring Client Side Validations before the Simple Form plugin.
62
64
 
63
65
  According to the web framework you are using, add **one** of the following
64
66
  lines to your `app/assets/javascripts/application.js`, **after**
@@ -80,6 +82,18 @@ rails g client_side_validations:copy_assets
80
82
 
81
83
  Note: If you run `copy_assets`, you will need to run it again each time you update this project.
82
84
 
85
+ ## Migration Guide ##
86
+
87
+ ### Removing jQuery Dependency ###
88
+
89
+ `client_side_validations-simple_form` now plugs into the DOM-first `ClientSideValidations` runtime and no longer assumes jQuery is present.
90
+
91
+ Follow the main `ClientSideValidations` migration guide for the public API changes. In particular, load the current DOM-first `ClientSideValidations` bundle before loading this package, and update any custom code that still expects jQuery-wrapped objects.
92
+
93
+ Custom Simple Form builders now receive native DOM elements in their `add` and `remove` hooks, so custom overrides should use DOM APIs such as `.closest()`, `.querySelector()`, and `.classList`.
94
+
95
+ If you vendor the compiled assets with `rails g client_side_validations:copy_assets`, run that generator again after upgrading so the copied Simple Form assets stay in sync with the current `ClientSideValidations` bundle.
96
+
83
97
  ## Usage ##
84
98
 
85
99
  The usage is the same as `ClientSideValidations`, just pass `validate: true` to the form builder
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ClientSideValidations
4
4
  module SimpleForm
5
- VERSION = '17.0.0'
5
+ VERSION = '19.0.0'
6
6
  end
7
7
  end
@@ -1,67 +1,77 @@
1
1
  /*!
2
- * Client Side Validations Simple Form JS (Bootstrap 4+) - v17.0.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
2
+ * Client Side Validations Simple Form JS (Bootstrap 4+) - v19.0.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
3
3
  * Copyright (c) 2026 Geremia Taglialatela, Brian Cardarella
4
4
  * Licensed under MIT (https://opensource.org/licenses/mit-license.php)
5
5
  */
6
-
7
- (function (global, factory) {
8
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@client-side-validations/client-side-validations')) :
9
- typeof define === 'function' && define.amd ? define(['@client-side-validations/client-side-validations'], factory) :
10
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ClientSideValidations));
11
- })(this, (function (ClientSideValidations) { 'use strict';
12
-
13
- const addClass = (element, customClass) => {
14
- if (customClass) {
15
- element.classList.add(...customClass.split(' '));
16
- }
17
- };
18
- const removeClass = (element, customClass) => {
19
- if (customClass) {
20
- element.classList.remove(...customClass.split(' '));
21
- }
22
- };
23
-
24
- ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
25
- add: function ($element, settings, message) {
26
- this.wrapper(settings.wrapper).add.call(this, $element[0], settings, message);
27
- },
28
- remove: function ($element, settings) {
29
- this.wrapper(settings.wrapper).remove.call(this, $element[0], settings);
30
- },
31
- wrapper: function (name) {
32
- return this.wrappers[name] || this.wrappers.default;
33
- },
34
- wrappers: {
35
- default: {
36
- add(element, settings, message) {
37
- const wrapperElement = element.parentElement;
38
- let errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
39
- if (!errorElement) {
40
- const formTextElement = wrapperElement.querySelector('.form-text');
41
- errorElement = document.createElement(settings.error_tag);
42
- addClass(errorElement, 'invalid-feedback');
43
- errorElement.textContent = message;
44
- if (formTextElement) {
45
- formTextElement.before(errorElement);
46
- } else {
47
- wrapperElement.appendChild(errorElement);
48
- }
49
- }
50
- addClass(wrapperElement, settings.wrapper_error_class);
51
- addClass(element, 'is-invalid');
52
- errorElement.textContent = message;
53
- },
54
- remove(element, settings) {
55
- const wrapperElement = element.parentElement;
56
- const errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
57
- removeClass(wrapperElement, settings.wrapper_error_class);
58
- removeClass(element, 'is-invalid');
59
- if (errorElement) {
60
- errorElement.remove();
61
- }
62
- }
63
- }
64
- }
65
- };
66
-
67
- }));
6
+ (function(global, factory) {
7
+ typeof exports === "object" && typeof module !== "undefined" ? factory(require("@client-side-validations/client-side-validations")) : typeof define === "function" && define.amd ? define(["@client-side-validations/client-side-validations"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.ClientSideValidations));
8
+ })(this, function(_client_side_validations_client_side_validations) {
9
+ //#region \0rolldown/runtime.js
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
18
+ key = keys[i];
19
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
20
+ get: ((k) => from[k]).bind(null, key),
21
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
22
+ });
23
+ }
24
+ return to;
25
+ };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
27
+ value: mod,
28
+ enumerable: true
29
+ }) : target, mod));
30
+ //#endregion
31
+ _client_side_validations_client_side_validations = __toESM(_client_side_validations_client_side_validations);
32
+ //#region src/utils.js
33
+ const addClass = (element, customClass) => {
34
+ if (customClass) element.classList.add(...customClass.split(" "));
35
+ };
36
+ const removeClass = (element, customClass) => {
37
+ if (customClass) element.classList.remove(...customClass.split(" "));
38
+ };
39
+ //#endregion
40
+ //#region src/index.bootstrap4.js
41
+ _client_side_validations_client_side_validations.default.formBuilders["SimpleForm::FormBuilder"] = {
42
+ add: function(element, settings, message) {
43
+ this.wrapper(settings.wrapper).add.call(this, element, settings, message);
44
+ },
45
+ remove: function(element, settings) {
46
+ this.wrapper(settings.wrapper).remove.call(this, element, settings);
47
+ },
48
+ wrapper: function(name) {
49
+ return this.wrappers[name] || this.wrappers.default;
50
+ },
51
+ wrappers: { default: {
52
+ add(element, settings, message) {
53
+ const wrapperElement = element.parentElement;
54
+ let errorElement = wrapperElement.querySelector(`${settings.error_tag}.invalid-feedback`);
55
+ if (!errorElement) {
56
+ const formTextElement = wrapperElement.querySelector(".form-text");
57
+ errorElement = document.createElement(settings.error_tag);
58
+ addClass(errorElement, "invalid-feedback");
59
+ errorElement.textContent = message;
60
+ if (formTextElement) formTextElement.before(errorElement);
61
+ else wrapperElement.appendChild(errorElement);
62
+ }
63
+ addClass(wrapperElement, settings.wrapper_error_class);
64
+ addClass(element, "is-invalid");
65
+ errorElement.textContent = message;
66
+ },
67
+ remove(element, settings) {
68
+ const wrapperElement = element.parentElement;
69
+ const errorElement = wrapperElement.querySelector(`${settings.error_tag}.invalid-feedback`);
70
+ removeClass(wrapperElement, settings.wrapper_error_class);
71
+ removeClass(element, "is-invalid");
72
+ if (errorElement) errorElement.remove();
73
+ }
74
+ } }
75
+ };
76
+ //#endregion
77
+ });
@@ -1,60 +1,73 @@
1
1
  /*!
2
- * Client Side Validations Simple Form JS (Default) - v17.0.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
2
+ * Client Side Validations Simple Form JS (Default) - v19.0.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
3
3
  * Copyright (c) 2026 Geremia Taglialatela, Brian Cardarella
4
4
  * Licensed under MIT (https://opensource.org/licenses/mit-license.php)
5
5
  */
6
-
7
- (function (global, factory) {
8
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@client-side-validations/client-side-validations')) :
9
- typeof define === 'function' && define.amd ? define(['@client-side-validations/client-side-validations'], factory) :
10
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ClientSideValidations));
11
- })(this, (function (ClientSideValidations) { 'use strict';
12
-
13
- const addClass = (element, customClass) => {
14
- if (customClass) {
15
- element.classList.add(...customClass.split(' '));
16
- }
17
- };
18
- const removeClass = (element, customClass) => {
19
- if (customClass) {
20
- element.classList.remove(...customClass.split(' '));
21
- }
22
- };
23
-
24
- ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
25
- add: function ($element, settings, message) {
26
- this.wrapper(settings.wrapper).add.call(this, $element[0], settings, message);
27
- },
28
- remove: function ($element, settings) {
29
- this.wrapper(settings.wrapper).remove.call(this, $element[0], settings);
30
- },
31
- wrapper: function (name) {
32
- return this.wrappers[name] || this.wrappers.default;
33
- },
34
- wrappers: {
35
- default: {
36
- add(element, settings, message) {
37
- const wrapperElement = element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.')));
38
- let errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
39
- if (!errorElement) {
40
- errorElement = document.createElement(settings.error_tag);
41
- addClass(errorElement, settings.error_class);
42
- errorElement.textContent = message;
43
- wrapperElement.appendChild(errorElement);
44
- }
45
- addClass(wrapperElement, settings.wrapper_error_class);
46
- errorElement.textContent = message;
47
- },
48
- remove(element, settings) {
49
- const wrapperElement = element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.')));
50
- const errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
51
- removeClass(wrapperElement, settings.wrapper_error_class);
52
- if (errorElement) {
53
- errorElement.remove();
54
- }
55
- }
56
- }
57
- }
58
- };
59
-
60
- }));
6
+ (function(global, factory) {
7
+ typeof exports === "object" && typeof module !== "undefined" ? factory(require("@client-side-validations/client-side-validations")) : typeof define === "function" && define.amd ? define(["@client-side-validations/client-side-validations"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.ClientSideValidations));
8
+ })(this, function(_client_side_validations_client_side_validations) {
9
+ //#region \0rolldown/runtime.js
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
18
+ key = keys[i];
19
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
20
+ get: ((k) => from[k]).bind(null, key),
21
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
22
+ });
23
+ }
24
+ return to;
25
+ };
26
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
27
+ value: mod,
28
+ enumerable: true
29
+ }) : target, mod));
30
+ //#endregion
31
+ _client_side_validations_client_side_validations = __toESM(_client_side_validations_client_side_validations);
32
+ //#region src/utils.js
33
+ const addClass = (element, customClass) => {
34
+ if (customClass) element.classList.add(...customClass.split(" "));
35
+ };
36
+ const removeClass = (element, customClass) => {
37
+ if (customClass) element.classList.remove(...customClass.split(" "));
38
+ };
39
+ //#endregion
40
+ //#region src/index.js
41
+ _client_side_validations_client_side_validations.default.formBuilders["SimpleForm::FormBuilder"] = {
42
+ add: function(element, settings, message) {
43
+ this.wrapper(settings.wrapper).add.call(this, element, settings, message);
44
+ },
45
+ remove: function(element, settings) {
46
+ this.wrapper(settings.wrapper).remove.call(this, element, settings);
47
+ },
48
+ wrapper: function(name) {
49
+ return this.wrappers[name] || this.wrappers.default;
50
+ },
51
+ wrappers: { default: {
52
+ add(element, settings, message) {
53
+ const wrapperElement = element.closest(`${settings.wrapper_tag}.${settings.wrapper_class.replace(/ /g, ".")}`);
54
+ let errorElement = wrapperElement.querySelector(`${settings.error_tag}.${settings.error_class.replace(/ /g, ".")}`);
55
+ if (!errorElement) {
56
+ errorElement = document.createElement(settings.error_tag);
57
+ addClass(errorElement, settings.error_class);
58
+ errorElement.textContent = message;
59
+ wrapperElement.appendChild(errorElement);
60
+ }
61
+ addClass(wrapperElement, settings.wrapper_error_class);
62
+ errorElement.textContent = message;
63
+ },
64
+ remove(element, settings) {
65
+ const wrapperElement = element.closest(`${settings.wrapper_tag}.${settings.wrapper_class.replace(/ /g, ".")}`);
66
+ const errorElement = wrapperElement.querySelector(`${settings.error_tag}.${settings.error_class.replace(/ /g, ".")}`);
67
+ removeClass(wrapperElement, settings.wrapper_error_class);
68
+ if (errorElement) errorElement.remove();
69
+ }
70
+ } }
71
+ };
72
+ //#endregion
73
+ });
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: client_side_validations-simple_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 17.0.0
4
+ version: 19.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geremia Taglialatela
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '23.0'
19
+ version: '25.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '23.0'
26
+ version: '25.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: simple_form
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  - !ruby/object:Gem::Version
79
79
  version: '0'
80
80
  requirements: []
81
- rubygems_version: 4.0.3
81
+ rubygems_version: 4.0.14
82
82
  specification_version: 4
83
83
  summary: ClientSideValidations SimpleForm
84
84
  test_files: []