a11y-form-validator 1.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.
Files changed (61) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +390 -0
  4. package/dist/A11yFormValidator-D0n6br-b.d.ts +335 -0
  5. package/dist/A11yFormValidator-D0n6br-b.d.ts.map +1 -0
  6. package/dist/addons/character-count.d.ts +38 -0
  7. package/dist/addons/character-count.d.ts.map +1 -0
  8. package/dist/addons/character-count.js +161 -0
  9. package/dist/addons/character-count.js.map +1 -0
  10. package/dist/addons/error-summary.d.ts +29 -0
  11. package/dist/addons/error-summary.d.ts.map +1 -0
  12. package/dist/addons/error-summary.js +4 -0
  13. package/dist/default-BHBWPNeK.d.ts +7 -0
  14. package/dist/default-BHBWPNeK.d.ts.map +1 -0
  15. package/dist/default-DFnPBuVC.js +18 -0
  16. package/dist/default-DFnPBuVC.js.map +1 -0
  17. package/dist/docs.d.ts +66 -0
  18. package/dist/docs.d.ts.map +1 -0
  19. package/dist/docs.js +204 -0
  20. package/dist/docs.js.map +1 -0
  21. package/dist/error-summary-FnZoUC72.js +99 -0
  22. package/dist/error-summary-FnZoUC72.js.map +1 -0
  23. package/dist/helpers-c_THOe-Q.js +150 -0
  24. package/dist/helpers-c_THOe-Q.js.map +1 -0
  25. package/dist/index.d.ts +37 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +1197 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/index.min.js +2 -0
  30. package/dist/index.min.js.map +1 -0
  31. package/dist/locales/ar.json +13 -0
  32. package/dist/locales/en.json +13 -0
  33. package/dist/locales/es.json +13 -0
  34. package/dist/locales/fr.json +13 -0
  35. package/dist/locales/hi.json +13 -0
  36. package/dist/locales/it.json +13 -0
  37. package/dist/locales/ja.json +13 -0
  38. package/dist/locales/ko.json +13 -0
  39. package/dist/locales/nl.json +13 -0
  40. package/dist/locales/pl.json +13 -0
  41. package/dist/locales/pt-BR.json +13 -0
  42. package/dist/locales/ru.json +13 -0
  43. package/dist/locales/tr.json +13 -0
  44. package/dist/locales/uk.json +13 -0
  45. package/dist/locales/zh-CN.json +13 -0
  46. package/dist/minimal-40_EIW9U.d.ts +7 -0
  47. package/dist/minimal-40_EIW9U.d.ts.map +1 -0
  48. package/dist/minimal-Bm3pKoN7.js +15 -0
  49. package/dist/minimal-Bm3pKoN7.js.map +1 -0
  50. package/dist/no-summary-BI1pTld5.d.ts +7 -0
  51. package/dist/no-summary-BI1pTld5.d.ts.map +1 -0
  52. package/dist/no-summary-DQCNtzs6.js +16 -0
  53. package/dist/no-summary-DQCNtzs6.js.map +1 -0
  54. package/dist/presets/default.d.ts +3 -0
  55. package/dist/presets/default.js +5 -0
  56. package/dist/presets/minimal.d.ts +3 -0
  57. package/dist/presets/minimal.js +3 -0
  58. package/dist/presets/no-summary.d.ts +3 -0
  59. package/dist/presets/no-summary.js +3 -0
  60. package/dist/styles.css +91 -0
  61. package/package.json +95 -0
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Questo campo è obbligatorio.",
3
+ "email": "Inserisci un indirizzo email valido.",
4
+ "minLength": "Inserisci almeno {min} caratteri.",
5
+ "maxLength": "Inserisci al massimo {max} caratteri.",
6
+ "pattern": "Inserisci un valore nel formato corretto.",
7
+ "checked": "Seleziona questa opzione per continuare.",
8
+ "sameAs": "Questo valore deve corrispondere a {targetLabel}.",
9
+ "summaryTitleOne": "C'è 1 problema nel modulo.",
10
+ "summaryTitleOther": "Ci sono {count} problemi nel modulo.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Controlla questo campo."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "この項目は必須です。",
3
+ "email": "有効なメールアドレスを入力してください。",
4
+ "minLength": "{min}文字以上で入力してください。",
5
+ "maxLength": "{max}文字以内で入力してください。",
6
+ "pattern": "正しい形式で入力してください。",
7
+ "checked": "続行するにはこの項目を選択してください。",
8
+ "sameAs": "この値は {targetLabel} と一致する必要があります。",
9
+ "summaryTitleOne": "フォームに1件の問題があります。",
10
+ "summaryTitleOther": "フォームに{count}件の問題があります。",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "この項目を確認してください。"
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "이 필드는 필수입니다.",
3
+ "email": "유효한 이메일 주소를 입력하세요.",
4
+ "minLength": "최소 {min}자 이상 입력하세요.",
5
+ "maxLength": "최대 {max}자까지 입력하세요.",
6
+ "pattern": "올바른 형식으로 값을 입력하세요.",
7
+ "checked": "계속하려면 이 옵션을 선택하세요.",
8
+ "sameAs": "이 값은 {targetLabel}와(과) 일치해야 합니다.",
9
+ "summaryTitleOne": "양식에 문제가 1개 있습니다.",
10
+ "summaryTitleOther": "양식에 문제가 {count}개 있습니다.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "이 필드를 확인하세요."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Dit veld is verplicht.",
3
+ "email": "Voer een geldig e-mailadres in.",
4
+ "minLength": "Voer minimaal {min} tekens in.",
5
+ "maxLength": "Voer maximaal {max} tekens in.",
6
+ "pattern": "Voer een waarde in het juiste formaat in.",
7
+ "checked": "Selecteer deze optie om door te gaan.",
8
+ "sameAs": "Deze waarde moet overeenkomen met {targetLabel}.",
9
+ "summaryTitleOne": "Er is 1 probleem met je formulier.",
10
+ "summaryTitleOther": "Er zijn {count} problemen met je formulier.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Controleer dit veld."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "To pole jest wymagane.",
3
+ "email": "Wpisz prawidłowy adres e-mail.",
4
+ "minLength": "Wpisz co najmniej {min} znaków.",
5
+ "maxLength": "Wpisz maksymalnie {max} znaków.",
6
+ "pattern": "Wpisz wartość w prawidłowym formacie.",
7
+ "checked": "Zaznacz tę opcję, aby kontynuować.",
8
+ "sameAs": "Ta wartość musi być zgodna z {targetLabel}.",
9
+ "summaryTitleOne": "W formularzu jest 1 problem.",
10
+ "summaryTitleOther": "Formularz zawiera {count} problemów.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Sprawdź to pole."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Este campo é obrigatório.",
3
+ "email": "Digite um endereço de e-mail válido.",
4
+ "minLength": "Digite pelo menos {min} caracteres.",
5
+ "maxLength": "Digite no máximo {max} caracteres.",
6
+ "pattern": "Digite um valor no formato correto.",
7
+ "checked": "Selecione esta opção para continuar.",
8
+ "sameAs": "Este valor deve corresponder a {targetLabel}.",
9
+ "summaryTitleOne": "Há 1 problema no seu formulário.",
10
+ "summaryTitleOther": "Há {count} problemas no seu formulário.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Verifique este campo."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Это поле обязательно.",
3
+ "email": "Введите действительный адрес электронной почты.",
4
+ "minLength": "Введите не менее {min} символов.",
5
+ "maxLength": "Введите не более {max} символов.",
6
+ "pattern": "Введите значение в правильном формате.",
7
+ "checked": "Выберите этот вариант, чтобы продолжить.",
8
+ "sameAs": "Это значение должно совпадать с {targetLabel}.",
9
+ "summaryTitleOne": "В форме есть 1 ошибка.",
10
+ "summaryTitleOther": "Количество ошибок в форме: {count}.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Проверьте это поле."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Bu alan zorunludur.",
3
+ "email": "Geçerli bir e-posta adresi girin.",
4
+ "minLength": "En az {min} karakter girin.",
5
+ "maxLength": "En fazla {max} karakter girin.",
6
+ "pattern": "Doğru biçimde bir değer girin.",
7
+ "checked": "Devam etmek için bu seçeneği işaretleyin.",
8
+ "sameAs": "Bu değer {targetLabel} ile eşleşmelidir.",
9
+ "summaryTitleOne": "Formunuzda 1 sorun var.",
10
+ "summaryTitleOther": "Formunuzda {count} sorun var.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Bu alanı kontrol edin."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "Це поле є обов’язковим.",
3
+ "email": "Введіть дійсну адресу електронної пошти.",
4
+ "minLength": "Введіть щонайменше {min} символів.",
5
+ "maxLength": "Введіть не більше {max} символів.",
6
+ "pattern": "Введіть значення у правильному форматі.",
7
+ "checked": "Виберіть цей варіант, щоб продовжити.",
8
+ "sameAs": "Це значення має збігатися з {targetLabel}.",
9
+ "summaryTitleOne": "У формі є 1 проблема.",
10
+ "summaryTitleOther": "У формі є {count} проблем.",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "Перевірте це поле."
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "required": "此字段为必填项。",
3
+ "email": "请输入有效的电子邮件地址。",
4
+ "minLength": "请输入至少 {min} 个字符。",
5
+ "maxLength": "请输入不超过 {max} 个字符。",
6
+ "pattern": "请输入正确格式的值。",
7
+ "checked": "请选择此选项以继续。",
8
+ "sameAs": "此值必须与 {targetLabel} 匹配。",
9
+ "summaryTitleOne": "表单中有 1 个问题。",
10
+ "summaryTitleOther": "表单中有 {count} 个问题。",
11
+ "summaryItem": "{fieldLabel}: {message}",
12
+ "genericFallback": "请检查此字段。"
13
+ }
@@ -0,0 +1,7 @@
1
+ import { i as A11yFormValidatorOptionsInput } from "./A11yFormValidator-D0n6br-b.js";
2
+
3
+ //#region src/presets/minimal.d.ts
4
+ declare function createMinimalPreset(): A11yFormValidatorOptionsInput;
5
+ //#endregion
6
+ export { createMinimalPreset as t };
7
+ //# sourceMappingURL=minimal-40_EIW9U.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal-40_EIW9U.d.ts","names":[],"sources":["../src/presets/minimal.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,mBAAA,CAAA,GAAuB"}
@@ -0,0 +1,15 @@
1
+ //#region src/presets/minimal.ts
2
+ function createMinimalPreset() {
3
+ return {
4
+ validateOn: ["submit"],
5
+ focusOnError: "first-invalid",
6
+ errorMode: "inline",
7
+ useNativeRules: true,
8
+ disableNativeUI: true
9
+ };
10
+ }
11
+ var minimal_default = createMinimalPreset;
12
+
13
+ //#endregion
14
+ export { minimal_default as n, createMinimalPreset as t };
15
+ //# sourceMappingURL=minimal-Bm3pKoN7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal-Bm3pKoN7.js","names":[],"sources":["../src/presets/minimal.ts"],"sourcesContent":["import type { A11yFormValidatorOptionsInput } from '../core/A11yFormValidator.js';\n\nexport function createMinimalPreset(): A11yFormValidatorOptionsInput {\n return {\n validateOn: ['submit'],\n focusOnError: 'first-invalid',\n errorMode: 'inline',\n useNativeRules: true,\n disableNativeUI: true\n };\n}\n\nexport default createMinimalPreset;\n"],"mappings":";AAEA,SAAgB,sBAAqD;AACnE,QAAO;EACL,YAAY,CAAC,SAAS;EACtB,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iBAAiB;EAClB;;AAGH,sBAAe"}
@@ -0,0 +1,7 @@
1
+ import { i as A11yFormValidatorOptionsInput } from "./A11yFormValidator-D0n6br-b.js";
2
+
3
+ //#region src/presets/no-summary.d.ts
4
+ declare function createNoSummaryPreset(): A11yFormValidatorOptionsInput;
5
+ //#endregion
6
+ export { createNoSummaryPreset as t };
7
+ //# sourceMappingURL=no-summary-BI1pTld5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-summary-BI1pTld5.d.ts","names":[],"sources":["../src/presets/no-summary.ts"],"sourcesContent":[],"mappings":";;;iBAEgB,qBAAA,CAAA,GAAyB"}
@@ -0,0 +1,16 @@
1
+ //#region src/presets/no-summary.ts
2
+ function createNoSummaryPreset() {
3
+ return {
4
+ validateOn: ["submit", "blur"],
5
+ focusOnError: "first-invalid",
6
+ errorMode: "both",
7
+ useNativeRules: true,
8
+ disableNativeUI: true,
9
+ addons: []
10
+ };
11
+ }
12
+ var no_summary_default = createNoSummaryPreset;
13
+
14
+ //#endregion
15
+ export { no_summary_default as n, createNoSummaryPreset as t };
16
+ //# sourceMappingURL=no-summary-DQCNtzs6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-summary-DQCNtzs6.js","names":[],"sources":["../src/presets/no-summary.ts"],"sourcesContent":["import type { A11yFormValidatorOptionsInput } from '../core/A11yFormValidator.js';\n\nexport function createNoSummaryPreset(): A11yFormValidatorOptionsInput {\n return {\n validateOn: ['submit', 'blur'],\n focusOnError: 'first-invalid',\n errorMode: 'both',\n useNativeRules: true,\n disableNativeUI: true,\n addons: []\n };\n}\n\nexport default createNoSummaryPreset;\n"],"mappings":";AAEA,SAAgB,wBAAuD;AACrE,QAAO;EACL,YAAY,CAAC,UAAU,OAAO;EAC9B,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iBAAiB;EACjB,QAAQ,EAAE;EACX;;AAGH,yBAAe"}
@@ -0,0 +1,3 @@
1
+ import "../A11yFormValidator-D0n6br-b.js";
2
+ import { t as createDefaultPreset } from "../default-BHBWPNeK.js";
3
+ export { createDefaultPreset, createDefaultPreset as default };
@@ -0,0 +1,5 @@
1
+ import "../helpers-c_THOe-Q.js";
2
+ import "../error-summary-FnZoUC72.js";
3
+ import { n as default_default, t as createDefaultPreset } from "../default-DFnPBuVC.js";
4
+
5
+ export { createDefaultPreset, default_default as default };
@@ -0,0 +1,3 @@
1
+ import "../A11yFormValidator-D0n6br-b.js";
2
+ import { t as createMinimalPreset } from "../minimal-40_EIW9U.js";
3
+ export { createMinimalPreset, createMinimalPreset as default };
@@ -0,0 +1,3 @@
1
+ import { n as minimal_default, t as createMinimalPreset } from "../minimal-Bm3pKoN7.js";
2
+
3
+ export { createMinimalPreset, minimal_default as default };
@@ -0,0 +1,3 @@
1
+ import "../A11yFormValidator-D0n6br-b.js";
2
+ import { t as createNoSummaryPreset } from "../no-summary-BI1pTld5.js";
3
+ export { createNoSummaryPreset, createNoSummaryPreset as default };
@@ -0,0 +1,3 @@
1
+ import { n as no_summary_default, t as createNoSummaryPreset } from "../no-summary-DQCNtzs6.js";
2
+
3
+ export { createNoSummaryPreset, no_summary_default as default };
@@ -0,0 +1,91 @@
1
+ .a11y-form-validator {
2
+ --_error-color: var(--a11y-form-validator-error-color, #b00020);
3
+ --_border-color: var(--a11y-form-validator-border-color, #d0d7de);
4
+ --_focus-color: var(--a11y-form-validator-focus-color, #0a66ff);
5
+ --_success-color: var(--a11y-form-validator-success-color, #1a7f37);
6
+ --_pending-color: var(--a11y-form-validator-pending-color, #8250df);
7
+ --_error-shadow: var(--a11y-form-validator-error-shadow, rgba(176, 0, 32, 0.12));
8
+ --_gap: var(--a11y-form-validator-gap, 0.5rem);
9
+ --_radius: var(--a11y-form-validator-radius, 0.375rem);
10
+ --_font-size: var(--a11y-form-validator-font-size, 0.95rem);
11
+ --_summary-background: var(--a11y-form-validator-summary-background, #fff8f8);
12
+ }
13
+
14
+ .a11y-form-validator__error {
15
+ color: var(--_error-color);
16
+ font-size: var(--_font-size);
17
+ font-weight: 600;
18
+ line-height: 1.4;
19
+ margin-block-start: var(--_gap);
20
+ }
21
+
22
+ .a11y-form-validator__summary {
23
+ background: var(--_summary-background);
24
+ border: 1px solid var(--_error-color);
25
+ border-radius: var(--_radius);
26
+ margin-block-end: 1rem;
27
+ padding: 1rem;
28
+ }
29
+
30
+ .a11y-form-validator__summary-title {
31
+ font-size: 1.125rem;
32
+ line-height: 1.3;
33
+ margin-block: 0 0.5rem;
34
+ }
35
+
36
+ .a11y-form-validator__summary:focus-visible,
37
+ .a11y-form-validator__summary-link:focus-visible,
38
+ .a11y-form-validator [aria-invalid='true']:focus-visible {
39
+ outline: 2px solid var(--_focus-color);
40
+ outline-offset: 2px;
41
+ }
42
+
43
+ .a11y-form-validator__summary-list {
44
+ margin: 0;
45
+ padding-inline-start: 1.25rem;
46
+ }
47
+
48
+ .a11y-form-validator__summary-link {
49
+ color: inherit;
50
+ }
51
+
52
+ .a11y-form-validator [aria-invalid='true'] {
53
+ border-color: var(--_error-color);
54
+ box-shadow: 0 0 0 3px var(--_error-shadow);
55
+ }
56
+
57
+ .a11y-form-validator .is-valid:not([type='radio']):not([type='checkbox']) {
58
+ border-color: var(--_success-color);
59
+ }
60
+
61
+ .a11y-form-validator .is-pending:not([type='radio']):not([type='checkbox']) {
62
+ border-color: var(--_pending-color);
63
+ }
64
+
65
+ .a11y-form-validator .is-disabled {
66
+ opacity: 0.7;
67
+ }
68
+
69
+ .a11y-form-validator__character-count {
70
+ color: var(--a11y-form-validator-character-count-color, #57606a);
71
+ font-size: var(--_font-size);
72
+ line-height: 1.4;
73
+ margin-block-start: 0.25rem;
74
+ }
75
+
76
+ .a11y-form-validator__character-count.is-over-limit,
77
+ .a11y-form-validator__character-count.is-under-minimum {
78
+ color: var(--_error-color);
79
+ font-weight: 600;
80
+ }
81
+
82
+ @media (prefers-reduced-motion: reduce) {
83
+ .a11y-form-validator *,
84
+ .a11y-form-validator *::before,
85
+ .a11y-form-validator *::after {
86
+ animation-duration: 0.001ms;
87
+ animation-iteration-count: 1;
88
+ scroll-behavior: auto;
89
+ transition-duration: 0.001ms;
90
+ }
91
+ }
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "a11y-form-validator",
3
+ "version": "1.0.0",
4
+ "description": "Accessible, dependency-light form validation plugin for semantic HTML forms",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./min": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.min.js"
17
+ },
18
+ "./docs": {
19
+ "types": "./dist/docs.d.ts",
20
+ "import": "./dist/docs.js"
21
+ },
22
+ "./addons/error-summary": {
23
+ "types": "./dist/addons/error-summary.d.ts",
24
+ "import": "./dist/addons/error-summary.js"
25
+ },
26
+ "./addons/character-count": {
27
+ "types": "./dist/addons/character-count.d.ts",
28
+ "import": "./dist/addons/character-count.js"
29
+ },
30
+ "./presets/default": {
31
+ "types": "./dist/presets/default.d.ts",
32
+ "import": "./dist/presets/default.js"
33
+ },
34
+ "./presets/no-summary": {
35
+ "types": "./dist/presets/no-summary.d.ts",
36
+ "import": "./dist/presets/no-summary.js"
37
+ },
38
+ "./presets/minimal": {
39
+ "types": "./dist/presets/minimal.d.ts",
40
+ "import": "./dist/presets/minimal.js"
41
+ },
42
+ "./locales/*.json": "./dist/locales/*.json",
43
+ "./styles.css": "./dist/styles.css",
44
+ "./package.json": "./package.json"
45
+ },
46
+ "files": [
47
+ "dist",
48
+ "README.md",
49
+ "CHANGELOG.md",
50
+ "LICENSE"
51
+ ],
52
+ "sideEffects": [
53
+ "**/*.css"
54
+ ],
55
+ "scripts": {
56
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
57
+ "copy:assets": "node scripts/copy-assets.mjs",
58
+ "build:esm": "tsdown --config tsdown.config.ts",
59
+ "build:min": "tsdown --config tsdown.min.config.ts",
60
+ "build:dist": "npm run clean && npm run build:esm && npm run build:min && npm run copy:assets",
61
+ "build": "npm run pages:build",
62
+ "pages:build": "npm run build:dist && npm run pages:generate",
63
+ "pages:generate": "node scripts/build-pages.mjs",
64
+ "typecheck": "tsc --noEmit",
65
+ "test": "vitest run",
66
+ "pack:check": "npm pack --dry-run --cache ./.npm-cache",
67
+ "prepack": "npm run build",
68
+ "changeset": "changeset",
69
+ "version-packages": "changeset version",
70
+ "release": "npm run test && npm run typecheck && npm run build && changeset publish"
71
+ },
72
+ "repository": {
73
+ "type": "git",
74
+ "url": "git+https://github.com/vmitsaras/A11y-Form-Validator.git"
75
+ },
76
+ "keywords": [
77
+ "accessibility",
78
+ "forms",
79
+ "validation",
80
+ "a11y"
81
+ ],
82
+ "license": "MIT",
83
+ "bugs": {
84
+ "url": "https://github.com/vmitsaras/A11y-Form-Validator/issues"
85
+ },
86
+ "homepage": "https://github.com/vmitsaras/A11y-Form-Validator#readme",
87
+ "devDependencies": {
88
+ "@changesets/cli": "^2.29.7",
89
+ "@types/jsdom": "^27.0.0",
90
+ "jsdom": "^29.1.1",
91
+ "tsdown": "^0.15.8",
92
+ "typescript": "^5.9.3",
93
+ "vitest": "^4.0.15"
94
+ }
95
+ }