@adartem/adlib-attributes 0.1.4 → 0.1.5
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.
- package/attributes.js +957 -1
- package/attributes.js.map +4 -4
- package/dist/chunk-IEGIKJKW.js +5776 -0
- package/dist/chunk-IEGIKJKW.js.map +7 -0
- package/dist/chunk-M2KO765Q.js +43 -0
- package/dist/chunk-M2KO765Q.js.map +7 -0
- package/dist/chunk-NS2GB4WB.js +63 -0
- package/dist/chunk-NS2GB4WB.js.map +7 -0
- package/dist/dist-46N2ZXQQ.js +80 -0
- package/dist/dist-46N2ZXQQ.js.map +7 -0
- package/dist/dist-4EIQOOMJ.js +331 -0
- package/dist/dist-4EIQOOMJ.js.map +7 -0
- package/dist/dist-6YSNCGWO.js +227 -0
- package/dist/dist-6YSNCGWO.js.map +7 -0
- package/dist/dist-7GSHUMRU.js +60 -0
- package/dist/dist-7GSHUMRU.js.map +7 -0
- package/dist/dist-ALT6N2V6.js +165 -0
- package/dist/dist-ALT6N2V6.js.map +7 -0
- package/dist/dist-BXD5YEF3.js +290 -0
- package/dist/dist-BXD5YEF3.js.map +7 -0
- package/dist/dist-D2J4YZM6.js +52 -0
- package/dist/dist-D2J4YZM6.js.map +7 -0
- package/dist/dist-D2X7FLMD.js +126 -0
- package/dist/dist-D2X7FLMD.js.map +7 -0
- package/dist/dist-DOOWCYTM.js +92 -0
- package/dist/dist-DOOWCYTM.js.map +7 -0
- package/dist/dist-GLBAV2CS.js +202 -0
- package/dist/dist-GLBAV2CS.js.map +7 -0
- package/dist/dist-GQHJZHTH.js +73 -0
- package/dist/dist-GQHJZHTH.js.map +7 -0
- package/dist/dist-H4ILPDRU.js +59 -0
- package/dist/dist-H4ILPDRU.js.map +7 -0
- package/dist/dist-IDJRFWAH.js +71 -0
- package/dist/dist-IDJRFWAH.js.map +7 -0
- package/dist/dist-KDCRSMGT.js +63 -0
- package/dist/dist-KDCRSMGT.js.map +7 -0
- package/dist/dist-KF5AKQ52.js +740 -0
- package/dist/dist-KF5AKQ52.js.map +7 -0
- package/dist/dist-KU26ZFEG.js +169 -0
- package/dist/dist-KU26ZFEG.js.map +7 -0
- package/dist/dist-M6QCD7TL.js +4281 -0
- package/dist/dist-M6QCD7TL.js.map +7 -0
- package/dist/dist-MBFKX56S.js +482 -0
- package/dist/dist-MBFKX56S.js.map +7 -0
- package/dist/dist-NOIPAOTU.js +131 -0
- package/dist/dist-NOIPAOTU.js.map +7 -0
- package/dist/dist-QPNIGMZA.js +33028 -0
- package/dist/dist-QPNIGMZA.js.map +7 -0
- package/dist/dist-RAOZ6VUA.js +14416 -0
- package/dist/dist-RAOZ6VUA.js.map +7 -0
- package/dist/dist-RQZGUXDL.js +102 -0
- package/dist/dist-RQZGUXDL.js.map +7 -0
- package/dist/dist-T4V65O5X.js +54 -0
- package/dist/dist-T4V65O5X.js.map +7 -0
- package/dist/dist-UFMW7V6T.js +317 -0
- package/dist/dist-UFMW7V6T.js.map +7 -0
- package/dist/dist-V7I3FQX7.js +1419 -0
- package/dist/dist-V7I3FQX7.js.map +7 -0
- package/dist/dist-XTGERRGU.js +160 -0
- package/dist/dist-XTGERRGU.js.map +7 -0
- package/dist/dist-YAVVMJ7W.js +72 -0
- package/dist/dist-YAVVMJ7W.js.map +7 -0
- package/dist/dist-YGJKGMK6.js +137 -0
- package/dist/dist-YGJKGMK6.js.map +7 -0
- package/package.json +11 -11
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import {
|
|
2
|
+
A,
|
|
3
|
+
Dt,
|
|
4
|
+
Jo,
|
|
5
|
+
N,
|
|
6
|
+
Nt,
|
|
7
|
+
Qt,
|
|
8
|
+
Xt,
|
|
9
|
+
_n,
|
|
10
|
+
init_live_reload,
|
|
11
|
+
q,
|
|
12
|
+
rr,
|
|
13
|
+
vt,
|
|
14
|
+
wn,
|
|
15
|
+
zo
|
|
16
|
+
} from "./chunk-IEGIKJKW.js";
|
|
17
|
+
|
|
18
|
+
// ../formsubmit/dist/index.js
|
|
19
|
+
init_live_reload();
|
|
20
|
+
var H = Object.defineProperty;
|
|
21
|
+
var K = (r, e, t) => e in r ? H(r, e, { enumerable: true, configurable: true, writable: true, value: t }) : r[e] = t;
|
|
22
|
+
var a = (r, e, t) => K(r, typeof e != "symbol" ? e + "" : e, t);
|
|
23
|
+
var T = (r, e) => {
|
|
24
|
+
e ? window.open(r, "_blank") : window.location.href = r;
|
|
25
|
+
};
|
|
26
|
+
var d = "ad-formsubmit";
|
|
27
|
+
var g = ["form", "reset", "ix-trigger"];
|
|
28
|
+
var E = { reset: { key: "reset", values: ["true"] }, preventreset: { key: "preventreset", values: ["true"] }, reload: { key: "reload", values: ["true"] }, redirect: { key: "redirect", values: ["true"] }, redirecturl: { key: "redirecturl" }, redirectnewtab: { key: "redirectnewtab", values: ["true"] }, disabled: { key: "disabled", values: ["true"] }, enhance: { key: "enhance", values: ["true"] }, a11y: { key: "a11y", values: ["false"] } };
|
|
29
|
+
var R = { reset: { type: "string" }, reload: { type: "string" }, redirect: { type: "string" }, redirecturl: { type: "string" }, redirectnewtab: { type: "enum", values: ["true"] }, disabled: { type: "boolean", default: false }, enhance: { type: "enum", values: ["true"] }, a11y: { type: "boolean", default: true } };
|
|
30
|
+
var { getInstance: w, getPresenceSelector: ue, getElementSelector: v, getSettingSelector: x, queryElement: me, queryAllElements: f, getAttribute: de, hasAttributeValue: pe } = Jo(d, g, E);
|
|
31
|
+
var S = ({ form: r, successMessage: e, errorMessage: t }, o = []) => {
|
|
32
|
+
r.reset();
|
|
33
|
+
for (let { element: s, value: i, checked: n } of o) s.value = i, q(s) && n && (s.checked = n);
|
|
34
|
+
e.style.display = "none", t.style.display = "none", r.style.display = "";
|
|
35
|
+
};
|
|
36
|
+
var A2 = (r) => [...r.querySelectorAll("input, select, textarea")].reduce((o, s) => {
|
|
37
|
+
if (!s.closest(x("preventreset"))) return o;
|
|
38
|
+
let { value: n } = s, u = q(s) ? s.checked : void 0;
|
|
39
|
+
return o.push({ element: s, value: n, checked: u }), o;
|
|
40
|
+
}, []);
|
|
41
|
+
var M = async (r, e, t) => {
|
|
42
|
+
let o = new FormData(r), s = new URL(e);
|
|
43
|
+
if (t === "get") for (let [n, u] of o) Qt(u) && s.searchParams.append(n, u);
|
|
44
|
+
let i = t === "post" ? o : void 0;
|
|
45
|
+
try {
|
|
46
|
+
return (await fetch(s.toString(), { method: t, body: i })).ok;
|
|
47
|
+
} catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var I = ({ successMessage: r, errorMessage: e }) => new Promise((t) => {
|
|
52
|
+
let o = new MutationObserver(([{ target: i }]) => {
|
|
53
|
+
t(i === r);
|
|
54
|
+
}), s = { attributes: true, attributeFilter: ["style"] };
|
|
55
|
+
o.observe(r, s), o.observe(e, s);
|
|
56
|
+
});
|
|
57
|
+
var L = ({ errorMessage: r }) => {
|
|
58
|
+
r.style.display = "block";
|
|
59
|
+
};
|
|
60
|
+
var D = ({ errorMessage: r }) => {
|
|
61
|
+
r.style.display = "none";
|
|
62
|
+
};
|
|
63
|
+
var O = ({ form: r, successMessage: e, errorMessage: t }) => {
|
|
64
|
+
r.style.display = "none", t.style.display = "none", e.style.display = "block";
|
|
65
|
+
};
|
|
66
|
+
var C = ({ submitButtons: r }) => {
|
|
67
|
+
let e = r.reduce((t, o) => {
|
|
68
|
+
let { value: s, dataset: i } = o, n = i.wait;
|
|
69
|
+
return !s || !n || (o.value = n, t.push(() => {
|
|
70
|
+
o.value = s;
|
|
71
|
+
})), t;
|
|
72
|
+
}, []);
|
|
73
|
+
return () => {
|
|
74
|
+
for (let t of e) t();
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
var b = class {
|
|
78
|
+
constructor({ form: e, formBlock: t, reset: o, resetTimeout: s, reload: i, reloadTimeout: n, redirect: u, redirectTimeout: c, redirectUrl: l, redirectToNewTab: p, enhance: m, ixTriggers: y, resetButtons: _, a11y: q2 }) {
|
|
79
|
+
a(this, "form");
|
|
80
|
+
a(this, "formBlock");
|
|
81
|
+
a(this, "successMessage");
|
|
82
|
+
a(this, "errorMessage");
|
|
83
|
+
a(this, "submitButtons");
|
|
84
|
+
a(this, "redirect");
|
|
85
|
+
a(this, "redirectTimeout");
|
|
86
|
+
a(this, "redirectUrl");
|
|
87
|
+
a(this, "redirectToNewTab");
|
|
88
|
+
a(this, "reset");
|
|
89
|
+
a(this, "resetTimeout");
|
|
90
|
+
a(this, "reload");
|
|
91
|
+
a(this, "reloadTimeout");
|
|
92
|
+
a(this, "enhance");
|
|
93
|
+
a(this, "ixTriggers");
|
|
94
|
+
a(this, "resetButtons");
|
|
95
|
+
a(this, "a11y");
|
|
96
|
+
a(this, "currentRedirectTimeout");
|
|
97
|
+
a(this, "currentResetTimeout");
|
|
98
|
+
a(this, "currentReloadTimeout");
|
|
99
|
+
this.form = e, this.formBlock = t, this.successMessage = t.querySelector(`.${N.successMessage}`), this.errorMessage = t.querySelector(`.${N.errorMessage}`), this.submitButtons = [...e.querySelectorAll('input[type="submit"]')], this.redirect = u, this.redirectTimeout = c, this.redirectUrl = l, this.redirectToNewTab = p, this.reset = o, this.resetTimeout = s, this.reload = i, this.reloadTimeout = n, this.enhance = m, this.ixTriggers = y, this.resetButtons = _, this.a11y = q2;
|
|
100
|
+
}
|
|
101
|
+
destroy() {
|
|
102
|
+
clearTimeout(this.currentRedirectTimeout), this.currentRedirectTimeout = void 0, clearTimeout(this.currentResetTimeout), this.currentResetTimeout = void 0, clearTimeout(this.currentReloadTimeout), this.currentReloadTimeout = void 0;
|
|
103
|
+
}
|
|
104
|
+
async handleSubmit(e) {
|
|
105
|
+
let { reset: t, redirect: o, reload: s, enhance: i } = this, n;
|
|
106
|
+
i && (e.preventDefault(), e.stopImmediatePropagation()), i ? n = await this.handleEnhancedSubmit() : n = await I(this), n && (t && this.handleReset(), o && this.handleRedirect(), s && this.handleReload(), this.triggerIx());
|
|
107
|
+
}
|
|
108
|
+
handleReset(e = true) {
|
|
109
|
+
let { form: t, resetTimeout: o, currentResetTimeout: s } = this;
|
|
110
|
+
clearTimeout(s), this.currentResetTimeout = void 0;
|
|
111
|
+
let i = A2(t);
|
|
112
|
+
e && o ? this.currentResetTimeout = setTimeout(() => S(this, i), o) : S(this, i);
|
|
113
|
+
}
|
|
114
|
+
handleRedirect() {
|
|
115
|
+
let { redirectUrl: e, redirectTimeout: t, redirectToNewTab: o, currentRedirectTimeout: s } = this;
|
|
116
|
+
e && (clearTimeout(s), this.currentRedirectTimeout = void 0, t ? this.currentRedirectTimeout = setTimeout(() => T(e, o), t) : T(e, o));
|
|
117
|
+
}
|
|
118
|
+
handleReload() {
|
|
119
|
+
let { reloadTimeout: e, currentReloadTimeout: t } = this, { location: o } = window;
|
|
120
|
+
clearTimeout(t), this.currentReloadTimeout = void 0, e ? this.currentReloadTimeout = setTimeout(o.reload, e) : o.reload();
|
|
121
|
+
}
|
|
122
|
+
async handleEnhancedSubmit() {
|
|
123
|
+
let { form: e } = this, { action: t, method: o } = e;
|
|
124
|
+
if (!t) return false;
|
|
125
|
+
D(this);
|
|
126
|
+
let s = C(this), i = await M(e, t, o);
|
|
127
|
+
return i ? O(this) : L(this), s(), i;
|
|
128
|
+
}
|
|
129
|
+
triggerIx() {
|
|
130
|
+
for (let e of this.ixTriggers) A(e, "click");
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
var h = (r) => {
|
|
134
|
+
let e = Qt(r), t;
|
|
135
|
+
if (e) {
|
|
136
|
+
let o = parseInt(r);
|
|
137
|
+
isNaN(o) || (t = o);
|
|
138
|
+
}
|
|
139
|
+
return [e, t];
|
|
140
|
+
};
|
|
141
|
+
var B = (r) => {
|
|
142
|
+
let e = zo(r, d, R, { includeGlobal: false }), [t, o] = h(e.reset), [s, i] = h(e.reload), [n, u] = h(e.redirect), c = e.redirecturl, l = e.redirectnewtab === "true", p = e.enhance === "true", m = e.a11y ?? true;
|
|
143
|
+
return { reset: t, resetTimeout: o, reload: s, reloadTimeout: i, redirect: n, redirectUrl: c, redirectTimeout: u, redirectToNewTab: l, enhance: p, a11y: m };
|
|
144
|
+
};
|
|
145
|
+
var U = (r, e) => {
|
|
146
|
+
let t = r.closest(`.${N.formBlock}`);
|
|
147
|
+
if (!t) return;
|
|
148
|
+
let o = t.querySelector("form");
|
|
149
|
+
if (!o) return;
|
|
150
|
+
let s = w(r), i = f("ix-trigger", { instance: s }), n = f("reset", { instance: s });
|
|
151
|
+
return new b({ form: o, formBlock: t, ...e, ixTriggers: i, resetButtons: n });
|
|
152
|
+
};
|
|
153
|
+
var F = async () => {
|
|
154
|
+
let r = Nt();
|
|
155
|
+
await rr();
|
|
156
|
+
let e = f("form"), t = [], o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), i = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 };
|
|
157
|
+
for (let c of e) {
|
|
158
|
+
let l = await Xt({ el: c, moduleKey: d, includeGlobal: false, guardsRegistry: {}, readOptions: () => B(c), action: (p) => {
|
|
159
|
+
let m = U(c, p);
|
|
160
|
+
if (m) {
|
|
161
|
+
t.push(m), o.set(m.form, m);
|
|
162
|
+
for (let y of m.resetButtons) s.set(y, m.a11y), m.a11y !== false && Dt(y);
|
|
163
|
+
}
|
|
164
|
+
} });
|
|
165
|
+
l.ok ? i.activeCount += 1 : l.reason === "disabled" ? (i.disabledCount += 1, i.lastNonActivationReason = "disabled") : l.reason === "guard-failed" && (i.guardFailedCount += 1, i.lastNonActivationReason = "guard-failed");
|
|
166
|
+
}
|
|
167
|
+
let n = _n(v("form"), { submit: ({ event: c, el: l }) => {
|
|
168
|
+
let p = l instanceof HTMLFormElement ? o.get(l) : void 0;
|
|
169
|
+
p && p.handleSubmit(c);
|
|
170
|
+
} });
|
|
171
|
+
r.add(n);
|
|
172
|
+
let u = _n(v("reset"), { click: ({ el: c }) => {
|
|
173
|
+
for (let l of t) if (l.resetButtons.includes(c)) {
|
|
174
|
+
l.handleReset(false);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}, keydown: ({ event: c, el: l }) => {
|
|
178
|
+
s.get(l) && vt(c) && (c.preventDefault(), l.click());
|
|
179
|
+
} });
|
|
180
|
+
return r.add(u), r.add(() => {
|
|
181
|
+
for (let c of t) c.destroy();
|
|
182
|
+
}), { result: { instances: t, diagnostics: i }, destroy: () => r.run() };
|
|
183
|
+
};
|
|
184
|
+
var te = "0.1.0";
|
|
185
|
+
var We = wn({ key: d, init: async (r) => {
|
|
186
|
+
let e = Nt(), t = await F();
|
|
187
|
+
return t && typeof t.destroy == "function" && e.add(() => {
|
|
188
|
+
try {
|
|
189
|
+
t.destroy();
|
|
190
|
+
} catch {
|
|
191
|
+
}
|
|
192
|
+
}), { key: d, destroy: () => e.run() };
|
|
193
|
+
} });
|
|
194
|
+
export {
|
|
195
|
+
g as ELEMENTS,
|
|
196
|
+
d as MODULE_KEY,
|
|
197
|
+
E as SETTINGS,
|
|
198
|
+
We as default,
|
|
199
|
+
F as init,
|
|
200
|
+
te as version
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=dist-GLBAV2CS.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../formsubmit/src/index.ts", "../../formsubmit/src/actions/redirect.ts", "../../formsubmit/src/utils/constants.ts", "../../formsubmit/src/utils/selectors.ts", "../../formsubmit/src/actions/reset.ts", "../../formsubmit/src/actions/submit.ts", "../../formsubmit/src/utils/dom.ts", "../../formsubmit/src/components/Form.ts", "../../formsubmit/src/utils/attributes.ts", "../../formsubmit/src/factory.ts", "../../formsubmit/src/init.ts", "../../formsubmit/package.json"],
|
|
4
|
+
"sourcesContent": ["import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n", "/**\n * Redirects the user to a new URL.\n * @param url\n * @param newTab Defines if the new URL should be openened in a new tab.\n */\nexport const redirectUser = (url: string, newTab?: boolean) => {\n if (newTab) window.open(url, '_blank');\n else window.location.href = url;\n};\n", "import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-formsubmit' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines a form element.\n */\n 'form',\n\n /**\n * Defines an element that, when clicked, should reset the form.\n */\n 'reset',\n\n /**\n * Defines an element that should be clicked after form submission, triggering a Mouse Click interaction.\n */\n 'ix-trigger',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Defines if the form should reset all inputs after submission.\n * If set to true, it resets automatically.\n * If set to a number in miliseconds, it will timeout before resetting.\n */\n reset: {\n key: 'reset',\n values: ['true'],\n },\n\n /**\n * Defines an element (or a wrapper of multiple elements) that should preserve the value when resetting the form.\n */\n preventreset: {\n key: 'preventreset',\n values: ['true'],\n },\n\n /**\n * Defines if the form should reload the page after submission.\n * If set to true, it reloads it automatically.\n * If set to a number in miliseconds, it will timeout before reloading.\n */\n reload: {\n key: 'reload',\n values: ['true'],\n },\n\n /**\n * Defines if the form should redirect after submission.\n * If set to true, it redirects automatically.\n * If set to a number in miliseconds, it will timeout before redirecting.\n */\n redirect: {\n key: 'redirect',\n values: ['true'],\n },\n\n /**\n * Defines the URL to redirect the user.\n */\n redirecturl: {\n key: 'redirecturl',\n },\n\n /**\n * Defines the redirect target, either on place or on a new tab.\n */\n redirectnewtab: {\n key: 'redirectnewtab',\n values: ['true'],\n },\n\n /**\n * Defines if the form should be disabled, preventing all submissions.\n */\n disabled: {\n key: 'disabled',\n values: ['true'],\n },\n\n /**\n * Sends the data to the form action as a custom JavaScript Fetch instead of reloading the page.\n */\n enhance: {\n key: 'enhance',\n values: ['true'],\n },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: {\n key: 'a11y',\n values: ['false'],\n },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n reset: { type: 'string' },\n reload: { type: 'string' },\n redirect: { type: 'string' },\n redirecturl: { type: 'string' },\n redirectnewtab: { type: 'enum', values: ['true'] },\n disabled: { type: 'boolean', default: false },\n enhance: { type: 'enum', values: ['true'] },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import { type FormField, isHTMLInputElement } from '@adartem/adlib-utils';\n\nimport type { Form } from '../components/Form';\nimport { getSettingSelector } from '../utils/selectors';\nimport type { FieldData } from '../utils/types';\n\n/**\n * Resets a Webflow form and sets it back to visibile.\n * @param formInstance\n */\nexport const resetForm = (\n { form, successMessage, errorMessage }: Form,\n preventResetFields: FieldData[] = [],\n) => {\n form.reset();\n\n for (const { element, value, checked } of preventResetFields) {\n element.value = value;\n if (isHTMLInputElement(element) && checked) element.checked = checked;\n }\n\n successMessage.style.display = 'none';\n errorMessage.style.display = 'none';\n form.style.display = '';\n};\n\n/**\n * Collects the data from all the fields that should not be resetted.\n * @param form\n * @returns An array of {@link FormData}.\n */\nexport const collectPreventResetFields = (form: HTMLFormElement) => {\n const fields = [...form.querySelectorAll<FormField>('input, select, textarea')];\n\n const fieldsData = fields.reduce<FieldData[]>((acc, element) => {\n const shouldPreventReset = element.closest(getSettingSelector('preventreset'));\n if (!shouldPreventReset) return acc;\n\n const { value } = element;\n const checked = isHTMLInputElement(element) ? element.checked : undefined;\n\n acc.push({\n element,\n value,\n checked,\n });\n\n return acc;\n }, []);\n\n return fieldsData;\n};\n", "import { isString } from '@adartem/adlib-utils';\n\n/**\n * Submits the form data to a custom URL using the defined action and method in the form.\n * @param form\n * @param action\n * @param method\n * @returns A boolean promise.\n */\nexport const enhancedSubmit = async (form: HTMLFormElement, action: string, method: string) => {\n const formData = new FormData(form);\n const url = new URL(action);\n\n if (method === 'get') {\n for (const [key, value] of formData) {\n if (!isString(value)) continue;\n\n url.searchParams.append(key, value);\n }\n }\n\n const body = method === 'post' ? formData : undefined;\n\n try {\n const response = await fetch(url.toString(), {\n method,\n body,\n });\n\n return response.ok;\n } catch {\n return false;\n }\n};\n", "import type { Form } from '../components/Form';\n\n/**\n * Checks if a form submission was successful based on the focused element by Webflow.\n * @param formInstance\n * @returns A boolean Promise.\n */\nexport const checkFormSuccess = ({ successMessage, errorMessage }: Form): Promise<boolean> =>\n new Promise<boolean>((resolve) => {\n const observer = new MutationObserver(([{ target }]) => {\n const success = target === successMessage;\n resolve(success);\n });\n\n const options: MutationObserverInit = {\n attributes: true,\n attributeFilter: ['style'],\n };\n\n observer.observe(successMessage, options);\n observer.observe(errorMessage, options);\n });\n\n/**\n * Displays the Error Message of a Webflow form.\n * @param formInstance\n */\nexport const showFormError = ({ errorMessage }: Form) => {\n errorMessage.style.display = 'block';\n};\n\n/**\n * Hides the Error Message of a Webflow form.\n * @param formInstance\n */\nexport const hideFormError = ({ errorMessage }: Form) => {\n errorMessage.style.display = 'none';\n};\n\n/**\n * Displays the Success Message of a Webflow form.\n * Acts exactly like the native Webflow submission, the form is hidden and the success message is displayed.\n * @param formInstance\n */\nexport const showFormSuccess = ({ form, successMessage, errorMessage }: Form) => {\n form.style.display = 'none';\n errorMessage.style.display = 'none';\n successMessage.style.display = 'block';\n};\n\n/**\n * Displays the wait text of a Form's submit buttons.\n *\n * @param submitButtons\n * @returns A callback to reset all texts back to original.\n */\nexport const displayFormSubmitWaitText = ({ submitButtons }: Form) => {\n const resetCallbacks = submitButtons.reduce<Array<() => void>>((acc, submitButton) => {\n const { value, dataset } = submitButton;\n const waitText = dataset.wait;\n\n if (!value || !waitText) return acc;\n\n submitButton.value = waitText;\n\n acc.push(() => {\n submitButton.value = value;\n });\n\n return acc;\n }, []);\n\n return () => {\n for (const resetCallback of resetCallbacks) resetCallback();\n };\n};\n", "import {\n FORM_CSS_CLASSES,\n type FormBlockElement,\n type FormErrorElement,\n type FormSuccessElement,\n simulateEvent,\n} from '@adartem/adlib-utils';\n\nimport { redirectUser } from '../actions/redirect';\nimport { collectPreventResetFields, resetForm } from '../actions/reset';\nimport { enhancedSubmit } from '../actions/submit';\nimport {\n checkFormSuccess,\n displayFormSubmitWaitText,\n hideFormError,\n showFormError,\n showFormSuccess,\n} from '../utils/dom';\n\nexport class Form {\n public readonly form;\n public readonly formBlock;\n public readonly successMessage;\n public readonly errorMessage;\n public readonly submitButtons;\n\n private redirect;\n private redirectTimeout;\n private redirectUrl;\n private redirectToNewTab;\n private reset;\n private resetTimeout;\n private reload;\n private reloadTimeout;\n private enhance;\n private ixTriggers;\n public readonly resetButtons;\n public readonly a11y: boolean;\n private currentRedirectTimeout?: number | ReturnType<typeof setTimeout>;\n private currentResetTimeout?: number | ReturnType<typeof setTimeout>;\n private currentReloadTimeout?: number | ReturnType<typeof setTimeout>;\n\n constructor({\n form,\n formBlock,\n reset,\n resetTimeout,\n reload,\n reloadTimeout,\n redirect,\n redirectTimeout,\n redirectUrl,\n redirectToNewTab,\n enhance,\n ixTriggers,\n resetButtons,\n a11y,\n }: {\n form: HTMLFormElement;\n formBlock: FormBlockElement;\n reset: boolean;\n resetTimeout?: number;\n reload: boolean;\n reloadTimeout?: number;\n redirect: boolean;\n redirectTimeout?: number;\n redirectUrl?: string | null;\n redirectToNewTab?: boolean;\n enhance: boolean;\n ixTriggers: Element[];\n resetButtons: Element[];\n a11y: boolean;\n }) {\n this.form = form;\n this.formBlock = formBlock;\n this.successMessage = formBlock.querySelector(\n `.${FORM_CSS_CLASSES.successMessage}`,\n ) as FormSuccessElement;\n this.errorMessage = formBlock.querySelector(\n `.${FORM_CSS_CLASSES.errorMessage}`,\n ) as FormErrorElement;\n this.submitButtons = [...form.querySelectorAll<HTMLInputElement>('input[type=\"submit\"]')];\n\n this.redirect = redirect;\n this.redirectTimeout = redirectTimeout;\n this.redirectUrl = redirectUrl;\n this.redirectToNewTab = redirectToNewTab;\n this.reset = reset;\n this.resetTimeout = resetTimeout;\n this.reload = reload;\n this.reloadTimeout = reloadTimeout;\n this.enhance = enhance;\n this.ixTriggers = ixTriggers;\n this.resetButtons = resetButtons;\n this.a11y = a11y;\n }\n\n /**\n * Clears all pending timeouts.\n */\n public destroy() {\n clearTimeout(this.currentRedirectTimeout);\n this.currentRedirectTimeout = undefined;\n clearTimeout(this.currentResetTimeout);\n this.currentResetTimeout = undefined;\n clearTimeout(this.currentReloadTimeout);\n this.currentReloadTimeout = undefined;\n }\n\n /**\n * Handles form submissions.\n * @param e The submit event.\n */\n public async handleSubmit(e: SubmitEvent) {\n const { reset, redirect, reload, enhance } = this;\n\n let success: boolean;\n\n if (enhance) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n if (enhance) {\n success = await this.handleEnhancedSubmit();\n } else {\n success = await checkFormSuccess(this);\n }\n\n if (!success) return;\n\n if (reset) this.handleReset();\n if (redirect) this.handleRedirect();\n if (reload) this.handleReload();\n\n this.triggerIx();\n }\n\n /**\n * Resets the form.\n * @param allowTimeout Defines if waiting for the `resetTimeout` is allowed.\n */\n public handleReset(allowTimeout = true) {\n const { form, resetTimeout, currentResetTimeout } = this;\n\n clearTimeout(currentResetTimeout);\n this.currentResetTimeout = undefined;\n\n const preventResetFields = collectPreventResetFields(form);\n\n if (allowTimeout && resetTimeout) {\n this.currentResetTimeout = setTimeout(\n () => resetForm(this, preventResetFields),\n resetTimeout,\n );\n } else {\n resetForm(this, preventResetFields);\n }\n }\n\n /**\n * Redirects the user to the defined URL.\n */\n public handleRedirect() {\n const { redirectUrl, redirectTimeout, redirectToNewTab, currentRedirectTimeout } = this;\n\n if (!redirectUrl) return;\n\n clearTimeout(currentRedirectTimeout);\n this.currentRedirectTimeout = undefined;\n\n if (redirectTimeout) {\n this.currentRedirectTimeout = setTimeout(\n () => redirectUser(redirectUrl, redirectToNewTab),\n redirectTimeout,\n );\n } else {\n redirectUser(redirectUrl, redirectToNewTab);\n }\n }\n\n /**\n * Reload the page.\n */\n public handleReload() {\n const { reloadTimeout, currentReloadTimeout } = this;\n const { location } = window;\n\n clearTimeout(currentReloadTimeout);\n this.currentReloadTimeout = undefined;\n\n if (reloadTimeout) {\n this.currentReloadTimeout = setTimeout(location.reload, reloadTimeout);\n } else {\n location.reload();\n }\n }\n\n /**\n * Submits the form data to a custom URL using the defined action and method in the form.\n * @returns A boolean Promise. `true` if it was successful.\n */\n public async handleEnhancedSubmit(): Promise<boolean> {\n const { form } = this;\n const { action, method } = form;\n\n if (!action) return false;\n\n hideFormError(this);\n\n const resetSubmitText = displayFormSubmitWaitText(this);\n\n const success = await enhancedSubmit(form, action, method);\n\n if (success) showFormSuccess(this);\n else showFormError(this);\n\n resetSubmitText();\n\n return success;\n }\n\n /**\n * Triggers all the `ix-trigger` interactions.\n */\n public triggerIx() {\n for (const ixTrigger of this.ixTriggers) simulateEvent(ixTrigger, 'click');\n }\n}\n", "import { isString } from '@adartem/adlib-utils';\n\n/**\n * Parses the `redirect`, `reset` and `reload` attributes.\n * @param attribute\n * @returns A tuple.\n */\nexport const parseActionAttribute = (attribute?: string) => {\n const shouldAct = isString(attribute);\n\n let actionTimeout: number | undefined;\n\n if (shouldAct) {\n const rawActionTimeout = parseInt(attribute);\n if (!isNaN(rawActionTimeout)) actionTimeout = rawActionTimeout;\n }\n\n return [shouldAct, actionTimeout] as const;\n};\n", "import {\n FORM_CSS_CLASSES,\n type FormBlockElement,\n readOptionsFromAttributes,\n} from '@adartem/adlib-utils';\n\nimport { Form } from './components/Form';\nimport { parseActionAttribute } from './utils/attributes';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getInstance, queryAllElements } from './utils/selectors';\n\n/**\n * Reads options for a form element.\n * @param formElement\n */\nexport const readFormOptions = (formElement: Element) => {\n const options = readOptionsFromAttributes(formElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n });\n\n // Reset\n const [reset, resetTimeout] = parseActionAttribute(options.reset);\n\n // Reload\n const [reload, reloadTimeout] = parseActionAttribute(options.reload);\n\n // Redirect\n const [redirect, redirectTimeout] = parseActionAttribute(options.redirect);\n\n const redirectUrl = options.redirecturl;\n const redirectToNewTab = options.redirectnewtab === 'true';\n\n // Enhance\n const enhance = options.enhance === 'true';\n\n // A11y (default to true if not explicitly set)\n const a11y = options.a11y ?? true;\n\n return {\n reset,\n resetTimeout,\n reload,\n reloadTimeout,\n redirect,\n redirectUrl,\n redirectTimeout,\n redirectToNewTab,\n enhance,\n a11y,\n };\n};\n\n/**\n * Creates a new formsubmit instance.\n * @param formElement\n * @param options\n */\nexport const createFormInstance = (\n formElement: Element,\n options: ReturnType<typeof readFormOptions>,\n) => {\n const formBlock = formElement.closest<FormBlockElement>(`.${FORM_CSS_CLASSES.formBlock}`);\n if (!formBlock) return;\n\n const form = formBlock.querySelector('form');\n if (!form) return;\n\n const instance = getInstance(formElement);\n\n const ixTriggers = queryAllElements('ix-trigger', { instance });\n const resetButtons = queryAllElements('reset', { instance });\n\n const formInstance = new Form({\n form,\n formBlock,\n ...options,\n ixTriggers,\n resetButtons,\n });\n\n return formInstance;\n};\n", "import {\n type ActivationStopReason,\n type AdLibAttributeInit,\n createCleanupBag,\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { Form } from './components/Form';\nimport { createFormInstance, readFormOptions } from './factory';\nimport { MODULE_KEY } from './utils/constants';\nimport { getElementSelector, queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: ActivationStopReason;\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n await waitWebflowReady();\n\n const formElements = queryAllElements('form');\n const formInstances: Form[] = [];\n const formByEl = new Map<HTMLFormElement, Form>();\n const resetA11yMap = new Map<Element, boolean>();\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n for (const formElement of formElements) {\n const result = await runActivationPipeline({\n el: formElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () => readFormOptions(formElement),\n action: (options) => {\n const formInstance = createFormInstance(formElement, options);\n if (formInstance) {\n formInstances.push(formInstance);\n formByEl.set(formInstance.form, formInstance);\n\n // Apply a11y attributes to reset buttons at init time\n for (const resetButton of formInstance.resetButtons) {\n resetA11yMap.set(resetButton, formInstance.a11y);\n if (formInstance.a11y !== false) {\n ensureButtonLike(resetButton);\n }\n }\n }\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount += 1;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount += 1;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount += 1;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n // Delegated submit listener on form elements\n // The ad-formsubmit-element=\"form\" attribute is on the <form> itself,\n // so el is the <form> element and we can look it up directly.\n const destroySubmitDelegation = createDelegation(getElementSelector('form'), {\n submit: ({ event, el }) => {\n const instance = el instanceof HTMLFormElement ? formByEl.get(el) : undefined;\n if (instance) instance.handleSubmit(event);\n },\n });\n bag.add(destroySubmitDelegation);\n\n // Delegated click + keydown on reset buttons\n const destroyResetDelegation = createDelegation(getElementSelector('reset'), {\n click: ({ el }) => {\n for (const instance of formInstances) {\n if (instance.resetButtons.includes(el)) {\n instance.handleReset(false);\n return;\n }\n }\n },\n keydown: ({ event, el }) => {\n const a11yEnabled = resetA11yMap.get(el);\n if (!a11yEnabled) return;\n if (!isActivationKey(event)) return;\n event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n bag.add(destroyResetDelegation);\n\n bag.add(() => {\n for (const formInstance of formInstances) {\n formInstance.destroy();\n }\n });\n\n return {\n result: { instances: formInstances, diagnostics },\n destroy: () => bag.run(),\n };\n};\n", "{\n \"name\": \"@adartem/ad-formsubmit\",\n \"version\": \"0.1.0\",\n \"description\": \"Smart actions after Webflow form submission.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["redirectUser", "url", "newTab", "MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "resetForm", "form", "successMessage", "errorMessage", "preventResetFields", "element", "value", "checked", "isHTMLInputElement", "collectPreventResetFields", "acc", "enhancedSubmit", "action", "method", "formData", "key", "isString", "body", "checkFormSuccess", "resolve", "observer", "target", "options", "showFormError", "hideFormError", "showFormSuccess", "displayFormSubmitWaitText", "submitButtons", "resetCallbacks", "submitButton", "dataset", "waitText", "resetCallback", "Form", "formBlock", "reset", "resetTimeout", "reload", "reloadTimeout", "redirect", "redirectTimeout", "redirectUrl", "redirectToNewTab", "enhance", "ixTriggers", "resetButtons", "a11y", "__publicField", "FORM_CSS_CLASSES", "success", "allowTimeout", "currentResetTimeout", "currentRedirectTimeout", "currentReloadTimeout", "location", "resetSubmitText", "ixTrigger", "simulateEvent", "parseActionAttribute", "attribute", "shouldAct", "actionTimeout", "rawActionTimeout", "readFormOptions", "formElement", "readOptionsFromAttributes", "createFormInstance", "instance", "init", "bag", "createCleanupBag", "waitWebflowReady", "formElements", "formInstances", "formByEl", "resetA11yMap", "diagnostics", "result", "runActivationPipeline", "formInstance", "resetButton", "ensureButtonLike", "destroySubmitDelegation", "createDelegation", "event", "el", "destroyResetDelegation", "isActivationKey", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
$o,
|
|
3
|
+
Jo,
|
|
4
|
+
Nt,
|
|
5
|
+
Xt,
|
|
6
|
+
_n,
|
|
7
|
+
init_live_reload,
|
|
8
|
+
on,
|
|
9
|
+
rr,
|
|
10
|
+
wn,
|
|
11
|
+
zo
|
|
12
|
+
} from "./chunk-IEGIKJKW.js";
|
|
13
|
+
|
|
14
|
+
// ../displayvalues/dist/index.js
|
|
15
|
+
init_live_reload();
|
|
16
|
+
var r = "ad-displayvalues";
|
|
17
|
+
var d = ["source", "target"];
|
|
18
|
+
var u = { placeholder: { key: "placeholder" }, a11y: { key: "a11y", values: ["false"] } };
|
|
19
|
+
var a = { disabled: { type: "boolean", default: false }, placeholder: { type: "string" }, a11y: { type: "boolean", default: true } };
|
|
20
|
+
var { getInstance: f, getPresenceSelector: K, getElementSelector: y, getSettingSelector: V, queryElement: G, queryAllElements: l, getAttribute: U, hasAttributeValue: Y } = Jo(r, d, u);
|
|
21
|
+
var c = /* @__PURE__ */ new Map();
|
|
22
|
+
var g = (e) => {
|
|
23
|
+
let s = f(e), t = l("target", { instance: s });
|
|
24
|
+
if (!t.length) return;
|
|
25
|
+
let n = t.map((o) => {
|
|
26
|
+
let i = zo(o, r, a, { includeGlobal: false });
|
|
27
|
+
return { element: o, placeholder: i.placeholder ?? null };
|
|
28
|
+
});
|
|
29
|
+
c.set(e, n);
|
|
30
|
+
};
|
|
31
|
+
var p = (e) => {
|
|
32
|
+
let s = c.get(e);
|
|
33
|
+
if (s) for (let { element: t, placeholder: n } of s) {
|
|
34
|
+
let o = $o(e), i = o || n;
|
|
35
|
+
t.textContent = i?.toString() || "";
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var E = () => _n(y("source"), { input: ({ el: e }) => {
|
|
39
|
+
on(e) && p(e);
|
|
40
|
+
} });
|
|
41
|
+
var m = async () => {
|
|
42
|
+
let e = Nt();
|
|
43
|
+
await rr();
|
|
44
|
+
let s = l("source"), t = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 };
|
|
45
|
+
for (let o of s) {
|
|
46
|
+
if (!on(o)) continue;
|
|
47
|
+
let i = await Xt({ el: o, moduleKey: r, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(o, r, a, { includeGlobal: false }), action: () => {
|
|
48
|
+
g(o), p(o);
|
|
49
|
+
} });
|
|
50
|
+
i.ok ? t.activeCount++ : i.reason === "disabled" ? (t.disabledCount++, t.lastNonActivationReason = "disabled") : i.reason === "guard-failed" && (t.guardFailedCount++, t.lastNonActivationReason = "guard-failed");
|
|
51
|
+
}
|
|
52
|
+
let n = E();
|
|
53
|
+
return e.add(n), { result: { sourceElements: s, diagnostics: t }, destroy: () => e.run() };
|
|
54
|
+
};
|
|
55
|
+
var C = "0.1.0";
|
|
56
|
+
var ut = wn({ key: r, init: async (e) => {
|
|
57
|
+
let s = Nt(), t = await m();
|
|
58
|
+
return t && typeof t.destroy == "function" && s.add(() => {
|
|
59
|
+
try {
|
|
60
|
+
t.destroy();
|
|
61
|
+
} catch {
|
|
62
|
+
}
|
|
63
|
+
}), { key: r, destroy: () => s.run() };
|
|
64
|
+
} });
|
|
65
|
+
export {
|
|
66
|
+
d as ELEMENTS,
|
|
67
|
+
r as MODULE_KEY,
|
|
68
|
+
u as SETTINGS,
|
|
69
|
+
ut as default,
|
|
70
|
+
m as init,
|
|
71
|
+
C as version
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=dist-GQHJZHTH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../displayvalues/src/utils/constants.ts", "../../displayvalues/src/utils/selectors.ts", "../../displayvalues/src/utils/stores.ts", "../../displayvalues/src/actions/collect.ts", "../../displayvalues/src/actions/sync.ts", "../../displayvalues/src/actions/events.ts", "../../displayvalues/src/init.ts", "../../displayvalues/package.json", "../../displayvalues/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-displayvalues' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines the element as the source of the event.\n */\n 'source',\n\n /**\n * Defines the element as the target to display the source value.\n */\n 'target',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Defines a placeholder text to display when no value exists.\n */\n placeholder: { key: 'placeholder' },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n disabled: { type: 'boolean', default: false },\n placeholder: { type: 'string' },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import type { FormField } from '@adartem/adlib-utils';\n\nexport type DisplayTargetData = {\n element: HTMLElement;\n placeholder: string | null;\n};\n\nexport const relationshipsStore: Map<FormField, DisplayTargetData[]> = new Map();\n", "import { type FormField, readOptionsFromAttributes } from '@adartem/adlib-utils';\n\nimport { MODULE_KEY, OPTIONS } from '../utils/constants';\nimport { getInstance, queryAllElements } from '../utils/selectors';\nimport { relationshipsStore } from '../utils/stores';\n\n/**\n * Collects the targets where to display the values.\n * @param sourceElement\n */\nexport const collectTargets = (sourceElement: FormField) => {\n const instance = getInstance(sourceElement);\n\n const targetElements = queryAllElements('target', { instance });\n if (!targetElements.length) return;\n\n const displayTargets = targetElements.map((element) => {\n const options = readOptionsFromAttributes(element, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n });\n\n return {\n element,\n placeholder: options.placeholder ?? null,\n };\n });\n\n relationshipsStore.set(sourceElement, displayTargets);\n};\n", "import { type FormField, getFormFieldValue } from '@adartem/adlib-utils';\n\nimport { relationshipsStore } from '../utils/stores';\n\n/**\n * Updates the value of the target element from a source.\n * @param sourceElement\n */\nexport const syncValue = (sourceElement: FormField) => {\n const displayTargets = relationshipsStore.get(sourceElement);\n if (!displayTargets) return;\n\n for (const { element, placeholder } of displayTargets) {\n const sourceValue = getFormFieldValue(sourceElement);\n\n const displayValue = sourceValue ? sourceValue : placeholder;\n\n element.textContent = displayValue?.toString() || '';\n }\n};\n", "import { createDelegation, isFormField } from '@adartem/adlib-utils';\n\nimport { getElementSelector } from '../utils/selectors';\nimport { syncValue } from './sync';\n\n/**\n * Sets up delegated input event listening for source elements.\n * @returns A callback to destroy the delegation.\n */\nexport const listenEvents = () => {\n return createDelegation(getElementSelector('source'), {\n input: ({ el }) => {\n if (isFormField(el)) {\n syncValue(el);\n }\n },\n });\n};\n", "import {\n type ActivationStopReason,\n type AdLibAttributeInit,\n createCleanupBag,\n isFormField,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { collectTargets } from './actions/collect';\nimport { listenEvents } from './actions/events';\nimport { syncValue } from './actions/sync';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: ActivationStopReason;\n}\n\n/**\n * Inits click events mirroring.\n */\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n await waitWebflowReady();\n\n const sourceElements = queryAllElements('source');\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n for (const sourceElement of sourceElements) {\n if (!isFormField(sourceElement)) continue;\n\n const result = await runActivationPipeline({\n el: sourceElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(sourceElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: () => {\n collectTargets(sourceElement);\n syncValue(sourceElement);\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n const removeListeners = listenEvents();\n bag.add(removeListeners);\n\n return {\n result: { sourceElements, diagnostics },\n destroy: () => bag.run(),\n };\n};\n", "{\n \"name\": \"@adartem/ad-displayvalues\",\n \"version\": \"0.1.0\",\n \"description\": \"Display the value of a Form Element.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "relationshipsStore", "collectTargets", "sourceElement", "instance", "targetElements", "displayTargets", "element", "options", "readOptionsFromAttributes", "syncValue", "placeholder", "sourceValue", "getFormFieldValue", "displayValue", "listenEvents", "createDelegation", "el", "isFormField", "init", "bag", "createCleanupBag", "waitWebflowReady", "sourceElements", "diagnostics", "result", "runActivationPipeline", "removeListeners", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Dt,
|
|
3
|
+
Jo,
|
|
4
|
+
Nt,
|
|
5
|
+
Xt,
|
|
6
|
+
_n,
|
|
7
|
+
init_live_reload,
|
|
8
|
+
or,
|
|
9
|
+
rr,
|
|
10
|
+
vt,
|
|
11
|
+
wn,
|
|
12
|
+
zo
|
|
13
|
+
} from "./chunk-IEGIKJKW.js";
|
|
14
|
+
|
|
15
|
+
// ../removequery/dist/index.js
|
|
16
|
+
init_live_reload();
|
|
17
|
+
var t = "ad-removequery";
|
|
18
|
+
var d = ["trigger"];
|
|
19
|
+
var l = { disabled: { key: "disabled", values: ["true"] }, a11y: { key: "a11y", values: ["false"] } };
|
|
20
|
+
var u = { a11y: { type: "boolean", default: true } };
|
|
21
|
+
var { getInstance: D, getPresenceSelector: I, getElementSelector: f, getSettingSelector: R, queryElement: U, queryAllElements: p, getAttribute: q, hasAttributeValue: K } = Jo(t, d, l);
|
|
22
|
+
var c = async () => {
|
|
23
|
+
await rr(), await or("list"), await or("queryparam");
|
|
24
|
+
let r = Nt(), e = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 }, i = true, o = await Xt({ el: document.documentElement, moduleKey: t, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(document.documentElement, t, u, { includeGlobal: false }), action: (a) => {
|
|
25
|
+
let s = new URL(window.location.href);
|
|
26
|
+
if (s.search = "", window.history.replaceState({}, "", s), i = a.a11y !== false, i) {
|
|
27
|
+
let n = p("trigger");
|
|
28
|
+
for (let g of n) Dt(g);
|
|
29
|
+
}
|
|
30
|
+
} });
|
|
31
|
+
if (o.ok) {
|
|
32
|
+
let a = _n(f("trigger"), { keydown: ({ event: s, el: n }) => {
|
|
33
|
+
i && vt(s) && (s.preventDefault(), n.click());
|
|
34
|
+
} });
|
|
35
|
+
r.add(a);
|
|
36
|
+
}
|
|
37
|
+
return o.ok ? e.activeCount++ : o.reason === "disabled" ? (e.disabledCount++, e.lastNonActivationReason = "disabled") : o.reason === "guard-failed" && (e.guardFailedCount++, e.lastNonActivationReason = "guard-failed"), { result: { diagnostics: e }, destroy() {
|
|
38
|
+
r.run();
|
|
39
|
+
} };
|
|
40
|
+
};
|
|
41
|
+
var h = "0.1.0";
|
|
42
|
+
var W = wn({ key: t, init: async (r) => {
|
|
43
|
+
let e = Nt(), i = await c();
|
|
44
|
+
return i && typeof i.destroy == "function" && e.add(() => {
|
|
45
|
+
try {
|
|
46
|
+
i.destroy();
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
}), { key: t, destroy: () => e.run() };
|
|
50
|
+
} });
|
|
51
|
+
export {
|
|
52
|
+
d as ELEMENTS,
|
|
53
|
+
t as MODULE_KEY,
|
|
54
|
+
l as SETTINGS,
|
|
55
|
+
W as default,
|
|
56
|
+
c as init,
|
|
57
|
+
h as version
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=dist-H4ILPDRU.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../removequery/src/utils/constants.ts", "../../removequery/src/utils/selectors.ts", "../../removequery/src/init.ts", "../../removequery/package.json", "../../removequery/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-removequery' as const;\n\nexport const ELEMENTS = [\n /**\n * Defines a trigger element that removes query params on click.\n */\n 'trigger',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Defines if the module is disabled.\n */\n disabled: {\n key: 'disabled',\n values: ['true'],\n },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitAttributeLoaded,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getElementSelector, queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n await waitWebflowReady();\n await waitAttributeLoaded('list');\n await waitAttributeLoaded('queryparam');\n\n const bag = createCleanupBag();\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n let a11yEnabled = true;\n\n const result = await runActivationPipeline({\n el: document.documentElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(document.documentElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({}, '', url);\n\n a11yEnabled = options.a11y !== false;\n\n if (a11yEnabled) {\n const triggers = queryAllElements('trigger');\n for (const trigger of triggers) {\n ensureButtonLike(trigger);\n }\n }\n },\n });\n\n // Delegated keydown for a11y activation\n if (result.ok) {\n const destroyDelegation = createDelegation(getElementSelector('trigger'), {\n keydown: ({ event, el }) => {\n if (!a11yEnabled) return;\n if (!isActivationKey(event)) return;\n event.preventDefault();\n (el as HTMLElement).click();\n },\n });\n bag.add(destroyDelegation);\n }\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n\n return {\n result: { diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-removequery\",\n \"version\": \"0.1.0\",\n \"description\": \"Remove the URL query parameters from the URL after the page loads.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAMO,IAAMA,IAAa;AAAnB,IAEMC,IAAW,CAItB,SACF;AAPO,IASMC,IAAW,EAItB,UAAU,EACR,KAAK,YACL,QAAQ,CAAC,MAAM,EACjB,GAMA,MAAM,EAAE,KAAK,QAAQ,QAAQ,CAAC,OAAO,EAAE,EACzC;AAvBO,IAyBMC,IAAU,EACrB,MAAM,EAAE,MAAM,WAAW,SAAS,KAAK,EACzC;AC7BO,IAAM,EACX,aAAAC,GACA,qBAAAC,GACA,oBAAAC,GACA,oBAAAC,GACA,cAAAC,GACA,kBAAAC,GACA,cAAAC,GACA,mBAAAC,EACF,IAAIC,GAAkBZ,GAAYC,GAAUC,CAAQ;ACY7C,IAAMW,IAA2B,YAAY;AAClD,QAAMC,GAAAA,GACN,MAAMC,GAAoB,MAAM,GAChC,MAAMA,GAAoB,YAAY;AAEtC,MAAMC,IAAMC,GAAAA,GAENC,IAAiC,EACrC,aAAa,GACb,eAAe,GACf,kBAAkB,EACpB,GAEIC,IAAc,MAEZC,IAAS,MAAMC,GAAsB,EACzC,IAAI,SAAS,iBACb,WAAWrB,GACX,eAAe,OACf,gBAAgB,CAAA,GAChB,aAAa,MACXsB,GAA0B,SAAS,iBAAiBtB,GAAYG,GAAS,EACvE,eAAe,MACjB,CAAC,GACH,QAASoB,OAAY;AACnB,QAAMC,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AAMxC,QALAA,EAAI,SAAS,IACb,OAAO,QAAQ,aAAa,CAAA,GAAI,IAAIA,CAAG,GAEvCL,IAAcI,EAAQ,SAAS,OAE3BJ,GAAa;AACf,UAAMM,IAAWhB,EAAiB,SAAS;AAC3C,eAAWiB,KAAWD,EACpBE,IAAiBD,CAAO;IAE5B;EACF,EACF,CAAC;AAGD,MAAIN,EAAO,IAAI;AACb,QAAMQ,IAAoBC,GAAiBvB,EAAmB,SAAS,GAAG,EACxE,SAAS,CAAC,EAAE,OAAAwB,GAAO,IAAAC,EAAG,MAAM;AACrBZ,WACAa,GAAgBF,CAAK,MAC1BA,EAAM,eAAA,GACLC,EAAmB,MAAA;IACtB,EACF,CAAC;AACDf,MAAI,IAAIY,CAAiB;EAC3B;AAEA,SAAIR,EAAO,KACTF,EAAY,gBACHE,EAAO,WAAW,cAC3BF,EAAY,iBACZA,EAAY,0BAA0B,cAC7BE,EAAO,WAAW,mBAC3BF,EAAY,oBACZA,EAAY,0BAA0B,iBAGjC,EACL,QAAQ,EAAE,aAAAA,EAAY,GACtB,UAAU;AACRF,MAAI,IAAA;EACN,EACF;AACF;AAAA,IC5FEiB,IAAW;ACGb,IAAOC,IAAQC,GAAa,EAC1B,KAAKnC,GACL,MAAM,OAAOoC,MAAS;AAGpB,MAAMpB,IAAMC,GAAAA,GACNoB,IAAM,MAAMxB,EAAAA;AAElB,SAAIwB,KAAO,OAAQA,EAA8B,WAAY,cAC3DrB,EAAI,IAAI,MAAM;AACZ,QAAI;AACDqB,QAAgC,QAAA;IACnC,QAAQ;IAER;EACF,CAAC,GAGI,EACL,KAAKrC,GACL,SAAS,MAAMgB,EAAI,IAAA,EACrB;AACF,EACF,CAAC;",
|
|
6
|
+
"names": ["MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "generateSelectors", "init", "waitWebflowReady", "waitAttributeLoaded", "bag", "createCleanupBag", "diagnostics", "a11yEnabled", "result", "runActivationPipeline", "readOptionsFromAttributes", "options", "url", "triggers", "trigger", "ensureButtonLike", "destroyDelegation", "createDelegation", "event", "el", "isActivationKey", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
N,
|
|
3
|
+
Nt,
|
|
4
|
+
Xt,
|
|
5
|
+
_n,
|
|
6
|
+
gt,
|
|
7
|
+
init_live_reload,
|
|
8
|
+
q,
|
|
9
|
+
rr,
|
|
10
|
+
wn,
|
|
11
|
+
zo
|
|
12
|
+
} from "./chunk-IEGIKJKW.js";
|
|
13
|
+
|
|
14
|
+
// ../inputactive/dist/index.js
|
|
15
|
+
init_live_reload();
|
|
16
|
+
var c = (e, o) => {
|
|
17
|
+
let t = o.activeclass ?? "is-inputactive-active", n = e.type === "checkbox", s = e.closest(`.${N.checkboxField}`);
|
|
18
|
+
if (n && s) {
|
|
19
|
+
m(s, t, e.checked);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!(e.type === "radio")) return;
|
|
23
|
+
let r = gt(e);
|
|
24
|
+
for (let u of r) {
|
|
25
|
+
let p = u.closest(`.${N.radioField}`);
|
|
26
|
+
p && m(p, t, u.checked);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var m = (e, o, t = true) => e.classList[t ? "add" : "remove"](o);
|
|
30
|
+
var i = "ad-inputactive";
|
|
31
|
+
var v = [];
|
|
32
|
+
var E = { activeclass: { key: "activeclass", defaultValue: `is-${i.slice(3)}-active` }, a11y: { key: "a11y", values: ["false"] } };
|
|
33
|
+
var d = { disabled: { type: "boolean", default: false }, activeclass: { type: "string", default: `is-${i.slice(3)}-active` }, a11y: { type: "boolean", default: true } };
|
|
34
|
+
var l = async () => {
|
|
35
|
+
let e = Nt();
|
|
36
|
+
await rr();
|
|
37
|
+
let o = document.querySelectorAll("input"), t = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 };
|
|
38
|
+
for (let s of o) {
|
|
39
|
+
let a = await Xt({ el: s, moduleKey: i, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(s, i, d, { includeGlobal: false }), action: (r) => {
|
|
40
|
+
c(s, r);
|
|
41
|
+
} });
|
|
42
|
+
a.ok ? t.activeCount++ : a.reason === "disabled" ? (t.disabledCount++, t.lastNonActivationReason = "disabled") : a.reason === "guard-failed" && (t.guardFailedCount++, t.lastNonActivationReason = "guard-failed");
|
|
43
|
+
}
|
|
44
|
+
let n = _n("input", { change: ({ el: s }) => {
|
|
45
|
+
q(s) && Xt({ el: s, moduleKey: i, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(s, i, d, { includeGlobal: false }), action: (a) => {
|
|
46
|
+
c(s, a);
|
|
47
|
+
} });
|
|
48
|
+
} });
|
|
49
|
+
return e.add(n), { result: { diagnostics: t }, destroy() {
|
|
50
|
+
e.run();
|
|
51
|
+
} };
|
|
52
|
+
};
|
|
53
|
+
var k = "0.1.0";
|
|
54
|
+
var Y = wn({ key: i, init: async (e) => {
|
|
55
|
+
let o = Nt(), t = await l();
|
|
56
|
+
return t && typeof t.destroy == "function" && o.add(() => {
|
|
57
|
+
try {
|
|
58
|
+
t.destroy();
|
|
59
|
+
} catch {
|
|
60
|
+
}
|
|
61
|
+
}), { key: i, destroy: () => o.run() };
|
|
62
|
+
} });
|
|
63
|
+
export {
|
|
64
|
+
v as ELEMENTS,
|
|
65
|
+
i as MODULE_KEY,
|
|
66
|
+
E as SETTINGS,
|
|
67
|
+
Y as default,
|
|
68
|
+
l as init,
|
|
69
|
+
k as version
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=dist-IDJRFWAH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../inputactive/src/actions/classes.ts", "../../inputactive/src/utils/constants.ts", "../../inputactive/src/init.ts", "../../inputactive/package.json", "../../inputactive/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { FORM_CSS_CLASSES, getRadioGroupInputs } from '@adartem/adlib-utils';\n\n/**\n * Handles adding/removing the active class from an input.\n * @param input\n */\nexport const handleInputActiveClass = (\n input: HTMLInputElement,\n options: { activeclass?: string },\n) => {\n const activeClass = options.activeclass ?? 'is-inputactive-active';\n\n // Checkboxes\n const isCheckbox = input.type === 'checkbox';\n const checkboxField = input.closest(`.${FORM_CSS_CLASSES.checkboxField}`);\n\n if (isCheckbox && checkboxField) {\n setClass(checkboxField, activeClass, input.checked);\n return;\n }\n\n // Radios\n const isRadio = input.type === 'radio';\n if (!isRadio) return;\n\n const groupRadios = getRadioGroupInputs(input);\n for (const radio of groupRadios) {\n const radioField = radio.closest(`.${FORM_CSS_CLASSES.radioField}`);\n if (!radioField) continue;\n\n setClass(radioField, activeClass, radio.checked);\n }\n};\n\n/**\n * Adds/removes the active class from an element.\n * @param target\n * @param className\n * @param add\n */\nconst setClass = (target: Element, className: string, add = true) =>\n target.classList[add ? 'add' : 'remove'](className);\n", "import {\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-inputactive' as const;\n\nexport const ELEMENTS = [] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Defines a custom active class.\n */\n activeclass: {\n key: 'activeclass',\n defaultValue: `is-${MODULE_KEY.slice(3)}-active`,\n },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const OPTIONS = {\n disabled: { type: 'boolean', default: false },\n activeclass: {\n type: 'string',\n default: `is-${MODULE_KEY.slice(3)}-active`,\n },\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n createDelegation,\n isHTMLInputElement,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { handleInputActiveClass } from './actions/classes';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason?: 'disabled' | 'guard-failed';\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n const bag = createCleanupBag();\n\n await waitWebflowReady();\n\n // Query all input elements\n const allInputs = document.querySelectorAll('input');\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n };\n\n // Run pipeline per input for initial state\n for (const input of allInputs) {\n const result = await runActivationPipeline({\n el: input,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(input, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n handleInputActiveClass(input, options);\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n // Delegated change listener on all inputs\n const destroyDelegation = createDelegation('input', {\n change: ({ el }) => {\n if (!isHTMLInputElement(el)) return;\n\n void runActivationPipeline({\n el,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(el, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n handleInputActiveClass(el, options);\n },\n });\n },\n });\n\n bag.add(destroyDelegation);\n\n return {\n result: { diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-inputactive\",\n \"version\": \"0.1.0\",\n \"description\": \"Set custom active CSS classes for Webflow form elements.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n return {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["handleInputActiveClass", "input", "options", "activeClass", "isCheckbox", "checkboxField", "FORM_CSS_CLASSES", "setClass", "groupRadios", "getRadioGroupInputs", "radio", "radioField", "target", "className", "add", "MODULE_KEY", "ELEMENTS", "SETTINGS", "OPTIONS", "init", "bag", "createCleanupBag", "waitWebflowReady", "allInputs", "diagnostics", "result", "runActivationPipeline", "readOptionsFromAttributes", "destroyDelegation", "createDelegation", "el", "isHTMLInputElement", "version", "index_default", "defineModule", "core", "res"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
$o,
|
|
3
|
+
Jo,
|
|
4
|
+
Nt,
|
|
5
|
+
Vo,
|
|
6
|
+
Xt,
|
|
7
|
+
_n,
|
|
8
|
+
init_live_reload,
|
|
9
|
+
on,
|
|
10
|
+
rr,
|
|
11
|
+
wn,
|
|
12
|
+
zo
|
|
13
|
+
} from "./chunk-IEGIKJKW.js";
|
|
14
|
+
|
|
15
|
+
// ../mirrorclick/dist/index.js
|
|
16
|
+
init_live_reload();
|
|
17
|
+
var i = "ad-mirrorclick";
|
|
18
|
+
var c = ["trigger", "target"];
|
|
19
|
+
var d = { a11y: { key: "a11y", values: ["false"] } };
|
|
20
|
+
var f = { disabled: { type: "boolean", default: false }, a11y: { type: "boolean", default: true } };
|
|
21
|
+
var { getInstance: E, getPresenceSelector: K, getElementSelector: y, getSettingSelector: R, queryElement: G, queryAllElements: u, getAttribute: U, hasAttributeValue: Y } = Jo(i, c, d);
|
|
22
|
+
var g = async () => {
|
|
23
|
+
let s = Nt();
|
|
24
|
+
await rr();
|
|
25
|
+
let o = u("trigger"), e = { activeCount: 0, disabledCount: 0, guardFailedCount: 0 }, p = [], m = /* @__PURE__ */ new Map();
|
|
26
|
+
for (let t of o) {
|
|
27
|
+
if (!on(t)) continue;
|
|
28
|
+
let r = await Xt({ el: t, moduleKey: i, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(t, i, f, { includeGlobal: false }), action: () => {
|
|
29
|
+
let a = E(t), l = u("target", { instance: a })[0];
|
|
30
|
+
!on(l) || t.type !== l.type || (m.set(t, l), p.push(t));
|
|
31
|
+
} });
|
|
32
|
+
r.ok ? e.activeCount++ : r.reason === "disabled" ? (e.disabledCount++, e.lastNonActivationReason = "disabled") : r.reason === "guard-failed" && (e.guardFailedCount++, e.lastNonActivationReason = "guard-failed");
|
|
33
|
+
}
|
|
34
|
+
let b = _n(y("trigger"), { input: ({ el: t }) => {
|
|
35
|
+
if (!on(t)) return;
|
|
36
|
+
let r = m.get(t);
|
|
37
|
+
if (!r || !on(r)) return;
|
|
38
|
+
let a = $o(t);
|
|
39
|
+
Vo(r, a);
|
|
40
|
+
} });
|
|
41
|
+
return s.add(b), { result: { triggers: p, diagnostics: e }, destroy() {
|
|
42
|
+
s.run();
|
|
43
|
+
} };
|
|
44
|
+
};
|
|
45
|
+
var N = "0.1.0";
|
|
46
|
+
var J = wn({ key: i, init: async (s) => {
|
|
47
|
+
let o = Nt(), e = await g();
|
|
48
|
+
return e && typeof e.destroy == "function" && o.add(() => {
|
|
49
|
+
try {
|
|
50
|
+
e.destroy();
|
|
51
|
+
} catch {
|
|
52
|
+
}
|
|
53
|
+
}), { key: i, destroy: () => o.run() };
|
|
54
|
+
} });
|
|
55
|
+
export {
|
|
56
|
+
c as ELEMENTS,
|
|
57
|
+
i as MODULE_KEY,
|
|
58
|
+
d as SETTINGS,
|
|
59
|
+
J as default,
|
|
60
|
+
g as init,
|
|
61
|
+
N as version
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=dist-KDCRSMGT.js.map
|