@k37z3r/jbase 2.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 (136) hide show
  1. package/LICENSE +621 -0
  2. package/README.md +124 -0
  3. package/dist/browser.d.ts +30 -0
  4. package/dist/browser.d.ts.map +1 -0
  5. package/dist/browser.js +29 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/core.d.ts +42 -0
  8. package/dist/core.d.ts.map +1 -0
  9. package/dist/core.js +78 -0
  10. package/dist/core.js.map +1 -0
  11. package/dist/index.cjs +2150 -0
  12. package/dist/index.d.ts +1158 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +100 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/index.mjs +2118 -0
  17. package/dist/jbase.browser.js +1906 -0
  18. package/dist/jbase.js +1898 -0
  19. package/dist/jbase.min.js +9 -0
  20. package/dist/modules/css/classes.d.ts +61 -0
  21. package/dist/modules/css/classes.d.ts.map +1 -0
  22. package/dist/modules/css/classes.js +88 -0
  23. package/dist/modules/css/classes.js.map +1 -0
  24. package/dist/modules/css/index.d.ts +30 -0
  25. package/dist/modules/css/index.d.ts.map +1 -0
  26. package/dist/modules/css/index.js +33 -0
  27. package/dist/modules/css/index.js.map +1 -0
  28. package/dist/modules/css/styles.d.ts +31 -0
  29. package/dist/modules/css/styles.d.ts.map +1 -0
  30. package/dist/modules/css/styles.js +49 -0
  31. package/dist/modules/css/styles.js.map +1 -0
  32. package/dist/modules/data/arrays.d.ts +131 -0
  33. package/dist/modules/data/arrays.d.ts.map +1 -0
  34. package/dist/modules/data/arrays.js +177 -0
  35. package/dist/modules/data/arrays.js.map +1 -0
  36. package/dist/modules/data/index.d.ts +29 -0
  37. package/dist/modules/data/index.d.ts.map +1 -0
  38. package/dist/modules/data/index.js +33 -0
  39. package/dist/modules/data/index.js.map +1 -0
  40. package/dist/modules/data/objects.d.ts +108 -0
  41. package/dist/modules/data/objects.d.ts.map +1 -0
  42. package/dist/modules/data/objects.js +168 -0
  43. package/dist/modules/data/objects.js.map +1 -0
  44. package/dist/modules/data/types.d.ts +35 -0
  45. package/dist/modules/data/types.d.ts.map +1 -0
  46. package/dist/modules/data/types.js +43 -0
  47. package/dist/modules/data/types.js.map +1 -0
  48. package/dist/modules/dom/attributes.d.ts +42 -0
  49. package/dist/modules/dom/attributes.d.ts.map +1 -0
  50. package/dist/modules/dom/attributes.js +69 -0
  51. package/dist/modules/dom/attributes.js.map +1 -0
  52. package/dist/modules/dom/content.d.ts +39 -0
  53. package/dist/modules/dom/content.d.ts.map +1 -0
  54. package/dist/modules/dom/content.js +63 -0
  55. package/dist/modules/dom/content.js.map +1 -0
  56. package/dist/modules/dom/index.d.ts +78 -0
  57. package/dist/modules/dom/index.d.ts.map +1 -0
  58. package/dist/modules/dom/index.js +48 -0
  59. package/dist/modules/dom/index.js.map +1 -0
  60. package/dist/modules/dom/manipulation.d.ts +159 -0
  61. package/dist/modules/dom/manipulation.d.ts.map +1 -0
  62. package/dist/modules/dom/manipulation.js +343 -0
  63. package/dist/modules/dom/manipulation.js.map +1 -0
  64. package/dist/modules/dom/states.d.ts +50 -0
  65. package/dist/modules/dom/states.d.ts.map +1 -0
  66. package/dist/modules/dom/states.js +89 -0
  67. package/dist/modules/dom/states.js.map +1 -0
  68. package/dist/modules/dom/traversal.d.ts +246 -0
  69. package/dist/modules/dom/traversal.d.ts.map +1 -0
  70. package/dist/modules/dom/traversal.js +527 -0
  71. package/dist/modules/dom/traversal.js.map +1 -0
  72. package/dist/modules/effects/fade.d.ts +58 -0
  73. package/dist/modules/effects/fade.d.ts.map +1 -0
  74. package/dist/modules/effects/fade.js +104 -0
  75. package/dist/modules/effects/fade.js.map +1 -0
  76. package/dist/modules/effects/index.d.ts +40 -0
  77. package/dist/modules/effects/index.d.ts.map +1 -0
  78. package/dist/modules/effects/index.js +38 -0
  79. package/dist/modules/effects/index.js.map +1 -0
  80. package/dist/modules/effects/slide.d.ts +58 -0
  81. package/dist/modules/effects/slide.d.ts.map +1 -0
  82. package/dist/modules/effects/slide.js +103 -0
  83. package/dist/modules/effects/slide.js.map +1 -0
  84. package/dist/modules/effects/vertical.d.ts +58 -0
  85. package/dist/modules/effects/vertical.d.ts.map +1 -0
  86. package/dist/modules/effects/vertical.js +118 -0
  87. package/dist/modules/effects/vertical.js.map +1 -0
  88. package/dist/modules/events/binding.d.ts +47 -0
  89. package/dist/modules/events/binding.d.ts.map +1 -0
  90. package/dist/modules/events/binding.js +60 -0
  91. package/dist/modules/events/binding.js.map +1 -0
  92. package/dist/modules/events/form.d.ts +72 -0
  93. package/dist/modules/events/form.d.ts.map +1 -0
  94. package/dist/modules/events/form.js +106 -0
  95. package/dist/modules/events/form.js.map +1 -0
  96. package/dist/modules/events/index.d.ts +62 -0
  97. package/dist/modules/events/index.d.ts.map +1 -0
  98. package/dist/modules/events/index.js +53 -0
  99. package/dist/modules/events/index.js.map +1 -0
  100. package/dist/modules/events/keyboard.d.ts +65 -0
  101. package/dist/modules/events/keyboard.d.ts.map +1 -0
  102. package/dist/modules/events/keyboard.js +83 -0
  103. package/dist/modules/events/keyboard.js.map +1 -0
  104. package/dist/modules/events/lifecycle.d.ts +28 -0
  105. package/dist/modules/events/lifecycle.d.ts.map +1 -0
  106. package/dist/modules/events/lifecycle.js +40 -0
  107. package/dist/modules/events/lifecycle.js.map +1 -0
  108. package/dist/modules/events/mouse.d.ts +120 -0
  109. package/dist/modules/events/mouse.d.ts.map +1 -0
  110. package/dist/modules/events/mouse.js +172 -0
  111. package/dist/modules/events/mouse.js.map +1 -0
  112. package/dist/modules/events/touch.d.ts +61 -0
  113. package/dist/modules/events/touch.d.ts.map +1 -0
  114. package/dist/modules/events/touch.js +74 -0
  115. package/dist/modules/events/touch.js.map +1 -0
  116. package/dist/modules/http/get.d.ts +47 -0
  117. package/dist/modules/http/get.d.ts.map +1 -0
  118. package/dist/modules/http/get.js +65 -0
  119. package/dist/modules/http/get.js.map +1 -0
  120. package/dist/modules/http/index.d.ts +37 -0
  121. package/dist/modules/http/index.d.ts.map +1 -0
  122. package/dist/modules/http/index.js +42 -0
  123. package/dist/modules/http/index.js.map +1 -0
  124. package/dist/modules/http/post.d.ts +36 -0
  125. package/dist/modules/http/post.d.ts.map +1 -0
  126. package/dist/modules/http/post.js +54 -0
  127. package/dist/modules/http/post.js.map +1 -0
  128. package/dist/types.d.ts +61 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +15 -0
  131. package/dist/types.js.map +1 -0
  132. package/dist/utils.d.ts +51 -0
  133. package/dist/utils.d.ts.map +1 -0
  134. package/dist/utils.js +71 -0
  135. package/dist/utils.js.map +1 -0
  136. package/package.json +58 -0
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ /**
3
+ * @file src/modules/dom/manipulation.ts
4
+ * @version 2.0.0
5
+ * @since 2.0.0
6
+ * @license GPL-3.0-or-later
7
+ * @copyright Sven Minio 2026
8
+ * @author Sven Minio <https://sven-minio.de>
9
+ * @category DOM
10
+ * @description
11
+ * * 🇬🇧: Methods for inserting, moving, and removing elements (append, prepend, remove).
12
+ * * 🇩🇪: Methoden zum Einfügen, Verschieben und Entfernen von Elementen (append, prepend, remove).
13
+ * @requires ../../core
14
+ * * 🇬🇧: Depends on the core jBase class for type definitions.
15
+ * * 🇩🇪: Hängt von der Core-jBase-Klasse für Typ-Definitionen ab.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.remove = remove;
19
+ exports.empty = empty;
20
+ exports.replaceWithClone = replaceWithClone;
21
+ exports.append = append;
22
+ exports.prepend = prepend;
23
+ exports.before = before;
24
+ exports.after = after;
25
+ exports.replaceWith = replaceWith;
26
+ exports.appendTo = appendTo;
27
+ exports.prependTo = prependTo;
28
+ exports.insertBefore = insertBefore;
29
+ exports.insertAfter = insertAfter;
30
+ exports.wrap = wrap;
31
+ exports.unwrap = unwrap;
32
+ const core_1 = require("../../core");
33
+ /**
34
+ * * 🇬🇧: Internal Helper: Converts a string into a DOM Node.
35
+ * * 🇩🇪: Interner Helper: Wandelt einen String in eine DOM Node um.
36
+ */
37
+ function parseHTML(html) {
38
+ const tmp = document.createElement('div');
39
+ tmp.innerHTML = html.trim();
40
+ return tmp.firstElementChild;
41
+ }
42
+ /**
43
+ * * 🇬🇧: Internal Helper: Converts arbitrary input into a DocumentFragment to minimize reflows.
44
+ * * 🇩🇪: Interner Helper: Wandelt beliebigen Input in ein DocumentFragment um, um Reflows zu minimieren.
45
+ */
46
+ function normalizeToFragment(content) {
47
+ const fragment = document.createDocumentFragment();
48
+ const add = (item) => {
49
+ if (typeof item === 'string') {
50
+ const temp = document.createElement('div');
51
+ temp.innerHTML = item.trim();
52
+ while (temp.firstChild) {
53
+ fragment.appendChild(temp.firstChild);
54
+ }
55
+ }
56
+ else if (item instanceof Node) {
57
+ fragment.appendChild(item);
58
+ }
59
+ else if (item instanceof core_1.jBase || Array.isArray(item) || item instanceof NodeList) {
60
+ Array.from(item).forEach(child => add(child));
61
+ }
62
+ };
63
+ add(content);
64
+ return fragment;
65
+ }
66
+ /**
67
+ * * 🇬🇧: Removes the selected elements from the DOM.
68
+ * * 🇩🇪: Entfernt die ausgewählten Elemente vollständig aus dem DOM.
69
+ * @returns
70
+ * * 🇬🇧: The current jBase instance.
71
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
72
+ */
73
+ function remove() {
74
+ this.forEach(el => {
75
+ if (el instanceof Element)
76
+ el.remove();
77
+ });
78
+ return this;
79
+ }
80
+ /**
81
+ * * 🇬🇧: Removes all child nodes and text content from the selected elements.
82
+ * * 🇩🇪: Entfernt alle Kind-Elemente und Textknoten aus den ausgewählten Elementen.
83
+ * @returns
84
+ * * 🇬🇧: The current jBase instance.
85
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
86
+ */
87
+ function empty() {
88
+ this.forEach(el => {
89
+ if (el instanceof Element)
90
+ el.innerHTML = '';
91
+ });
92
+ return this;
93
+ }
94
+ /**
95
+ * * 🇬🇧: Replaces each element with a deep clone of itself. Useful for removing all event listeners ("Nuke" strategy).
96
+ * * 🇩🇪: Ersetzt jedes Element durch eine tiefe Kopie seiner selbst. Nützlich, um alle Event-Listener hart zu entfernen.
97
+ * @returns
98
+ * * 🇬🇧: A new jBase instance containing the cloned elements.
99
+ * * 🇩🇪: Eine neue jBase-Instanz, die die geklonten Elemente enthält.
100
+ */
101
+ function replaceWithClone() {
102
+ const newElements = [];
103
+ this.forEach(el => {
104
+ if (el instanceof Element) {
105
+ const clone = el.cloneNode(true);
106
+ el.replaceWith(clone);
107
+ newElements.push(clone);
108
+ }
109
+ });
110
+ return new this.constructor(newElements);
111
+ }
112
+ /**
113
+ * * 🇬🇧: Inserts content at the end of each selected element (inside).
114
+ * * 🇩🇪: Fügt Inhalt am Ende jedes Elements in der Sammlung ein (innerhalb).
115
+ * @param content
116
+ * * 🇬🇧: HTML string, DOM Node, or jBase collection.
117
+ * * 🇩🇪: HTML-String, DOM-Node oder jBase-Sammlung.
118
+ * @returns
119
+ * * 🇬🇧: The current jBase instance.
120
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
121
+ */
122
+ function append(content) {
123
+ const fragment = normalizeToFragment(content);
124
+ this.forEach((el, i) => {
125
+ if (el instanceof Element) {
126
+ // Clone fragment for multiple targets, retain original for the last one
127
+ const contentToInsert = (i < this.length - 1) ? fragment.cloneNode(true) : fragment;
128
+ el.appendChild(contentToInsert);
129
+ }
130
+ });
131
+ return this;
132
+ }
133
+ /**
134
+ * * 🇬🇧: Inserts content at the beginning of each selected element (inside).
135
+ * * 🇩🇪: Fügt Inhalt am Anfang jedes Elements in der Sammlung ein (innerhalb).
136
+ * @param content
137
+ * * 🇬🇧: HTML string, DOM Node, or jBase collection.
138
+ * * 🇩🇪: HTML-String, DOM-Node oder jBase-Sammlung.
139
+ * @returns
140
+ * * 🇬🇧: The current jBase instance.
141
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
142
+ */
143
+ function prepend(content) {
144
+ const fragment = normalizeToFragment(content);
145
+ this.forEach((el, i) => {
146
+ if (el instanceof Element) {
147
+ const contentToInsert = (i < this.length - 1) ? fragment.cloneNode(true) : fragment;
148
+ el.prepend(contentToInsert);
149
+ }
150
+ });
151
+ return this;
152
+ }
153
+ /**
154
+ * * 🇬🇧: Inserts content before the element (outside).
155
+ * * 🇩🇪: Fügt Inhalt VOR dem Element ein (außerhalb).
156
+ * @param content
157
+ * * 🇬🇧: HTML string, DOM Node, or jBase collection.
158
+ * * 🇩🇪: HTML-String, DOM-Node oder jBase-Sammlung.
159
+ * @returns
160
+ * * 🇬🇧: The current jBase instance.
161
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
162
+ */
163
+ function before(content) {
164
+ const fragment = normalizeToFragment(content);
165
+ this.forEach((el, i) => {
166
+ if (el instanceof Element) {
167
+ const contentToInsert = (i < this.length - 1) ? fragment.cloneNode(true) : fragment;
168
+ el.before(contentToInsert);
169
+ }
170
+ });
171
+ return this;
172
+ }
173
+ /**
174
+ * * 🇬🇧: Inserts content after the element (outside).
175
+ * * 🇩🇪: Fügt Inhalt NACH dem Element ein (außerhalb).
176
+ * @param content
177
+ * * 🇬🇧: HTML string, DOM Node, or jBase collection.
178
+ * * 🇩🇪: HTML-String, DOM-Node oder jBase-Sammlung.
179
+ * @returns
180
+ * * 🇬🇧: The current jBase instance.
181
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
182
+ */
183
+ function after(content) {
184
+ const fragment = normalizeToFragment(content);
185
+ this.forEach((el, i) => {
186
+ if (el instanceof Element) {
187
+ const contentToInsert = (i < this.length - 1) ? fragment.cloneNode(true) : fragment;
188
+ el.after(contentToInsert);
189
+ }
190
+ });
191
+ return this;
192
+ }
193
+ /**
194
+ * * 🇬🇧: Replaces the element with new content.
195
+ * * 🇩🇪: Ersetzt das Element durch neuen Inhalt.
196
+ * @param content
197
+ * * 🇬🇧: The new content.
198
+ * * 🇩🇪: Der neue Inhalt.
199
+ * @returns
200
+ * * 🇬🇧: The current jBase instance.
201
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
202
+ */
203
+ function replaceWith(content) {
204
+ const fragment = normalizeToFragment(content);
205
+ this.forEach((el, i) => {
206
+ if (el instanceof Element) {
207
+ const contentToInsert = (i < this.length - 1) ? fragment.cloneNode(true) : fragment;
208
+ el.replaceWith(contentToInsert);
209
+ }
210
+ });
211
+ return this;
212
+ }
213
+ /**
214
+ * * 🇬🇧: Appends the selected elements to the end of a target element.
215
+ * * 🇩🇪: Hängt die aktuellen Elemente an das Ende des Ziel-Elements an.
216
+ * @param target
217
+ * * 🇬🇧: CSS selector or DOM element.
218
+ * * 🇩🇪: Der CSS-Selektor oder das DOM-Element.
219
+ * @returns
220
+ * * 🇬🇧: The current jBase instance.
221
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
222
+ */
223
+ function appendTo(target) {
224
+ const parent = typeof target === 'string' ? document.querySelector(target) : target;
225
+ if (parent instanceof Element) {
226
+ const fragment = document.createDocumentFragment();
227
+ this.forEach(el => {
228
+ if (el instanceof Node)
229
+ fragment.appendChild(el);
230
+ });
231
+ parent.appendChild(fragment);
232
+ }
233
+ return this;
234
+ }
235
+ /**
236
+ * * 🇬🇧: Prepends the selected elements to the beginning of a target element.
237
+ * * 🇩🇪: Fügt die aktuellen Elemente am Anfang des Ziel-Elements ein.
238
+ * @param target
239
+ * * 🇬🇧: CSS selector or DOM element.
240
+ * * 🇩🇪: Der CSS-Selektor oder das DOM-Element.
241
+ * @returns
242
+ * * 🇬🇧: The current jBase instance.
243
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
244
+ */
245
+ function prependTo(target) {
246
+ const parent = typeof target === 'string' ? document.querySelector(target) : target;
247
+ if (parent instanceof Element) {
248
+ const fragment = document.createDocumentFragment();
249
+ this.forEach(el => {
250
+ if (el instanceof Node)
251
+ fragment.appendChild(el);
252
+ });
253
+ parent.prepend(fragment);
254
+ }
255
+ return this;
256
+ }
257
+ /**
258
+ * * 🇬🇧: Inserts the selected elements immediately before the target element.
259
+ * * 🇩🇪: Fügt die aktuellen Elemente unmittelbar VOR dem Ziel-Element ein.
260
+ * @param target
261
+ * * 🇬🇧: CSS selector or DOM element.
262
+ * * 🇩🇪: Der CSS-Selektor oder das DOM-Element.
263
+ * @returns
264
+ * * 🇬🇧: The current jBase instance.
265
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
266
+ */
267
+ function insertBefore(target) {
268
+ const targetEl = typeof target === 'string' ? document.querySelector(target) : target;
269
+ if (targetEl instanceof Element) {
270
+ const fragment = document.createDocumentFragment();
271
+ this.forEach(el => {
272
+ if (el instanceof Node)
273
+ fragment.appendChild(el);
274
+ });
275
+ targetEl.before(fragment);
276
+ }
277
+ return this;
278
+ }
279
+ /**
280
+ * * 🇬🇧: Inserts the selected elements immediately after the target element.
281
+ * * 🇩🇪: Fügt die aktuellen Elemente unmittelbar NACH dem Ziel-Element ein.
282
+ * @param target
283
+ * * 🇬🇧: CSS selector or DOM element.
284
+ * * 🇩🇪: Der CSS-Selektor oder das DOM-Element.
285
+ * @returns
286
+ * * 🇬🇧: The current jBase instance.
287
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
288
+ */
289
+ function insertAfter(target) {
290
+ const targetEl = typeof target === 'string' ? document.querySelector(target) : target;
291
+ if (targetEl instanceof Element) {
292
+ const fragment = document.createDocumentFragment();
293
+ this.forEach(el => {
294
+ if (el instanceof Node)
295
+ fragment.appendChild(el);
296
+ });
297
+ targetEl.after(fragment);
298
+ }
299
+ return this;
300
+ }
301
+ /**
302
+ * * 🇬🇧: Wraps each selected element with the specified HTML structure.
303
+ * * 🇩🇪: Umschließt jedes Element in der Auswahl mit der angegebenen HTML-Struktur.
304
+ * @param wrapperHtml
305
+ * * 🇬🇧: HTML string defining the wrapper (e.g., `<div class="box"></div>`).
306
+ * * 🇩🇪: Ein HTML-String, der die Wrapper-Struktur definiert (z.B. `<div class="box"></div>`).
307
+ * @returns
308
+ * * 🇬🇧: The current jBase instance.
309
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
310
+ */
311
+ function wrap(wrapperHtml) {
312
+ this.forEach(el => {
313
+ if (el instanceof Element) {
314
+ const wrapper = parseHTML(wrapperHtml);
315
+ if (el.parentNode) {
316
+ el.parentNode.insertBefore(wrapper, el);
317
+ }
318
+ wrapper.appendChild(el);
319
+ }
320
+ });
321
+ return this;
322
+ }
323
+ /**
324
+ * * 🇬🇧: Removes the direct parent of the selected elements from the DOM.
325
+ * * 🇩🇪: Entfernt das direkte Elternelement der ausgewählten Elemente aus dem DOM.
326
+ * @returns
327
+ * * 🇬🇧: The current jBase instance.
328
+ * * 🇩🇪: Die aktuelle jBase-Instanz.
329
+ */
330
+ function unwrap() {
331
+ this.forEach(el => {
332
+ if (el instanceof Element && el.parentElement) {
333
+ const parent = el.parentElement;
334
+ const fragment = document.createDocumentFragment();
335
+ while (parent.firstChild) {
336
+ fragment.appendChild(parent.firstChild);
337
+ }
338
+ parent.replaceWith(fragment);
339
+ }
340
+ });
341
+ return this;
342
+ }
343
+ //# sourceMappingURL=manipulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manipulation.js","sourceRoot":"","sources":["../../../src/modules/dom/manipulation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file src/modules/dom/states.ts
3
+ * @version 2.0.0
4
+ * @since 2.0.0
5
+ * @license GPL-3.0-or-later
6
+ * @copyright Sven Minio 2026
7
+ * @author Sven Minio <https://sven-minio.de>
8
+ * @category DOM
9
+ * @description
10
+ * * 🇬🇧: Methods for checking element states (e.g., visibility, checked, disabled).
11
+ * * 🇩🇪: Methoden zur Prüfung von Element-Zuständen (z.B. Sichtbarkeit, checked, disabled).
12
+ * @requires ../../core
13
+ * * 🇬🇧: Depends on the core jBase class for type definitions.
14
+ * * 🇩🇪: Hängt von der Core-jBase-Klasse für Typ-Definitionen ab.
15
+ */
16
+ import { jBase } from '../../core';
17
+ /**
18
+ * * 🇬🇧: Gets or sets the 'checked' state of checkboxes and radio buttons.
19
+ * * 🇩🇪: Liest oder setzt den 'checked'-Status von Checkboxen und Radiobuttons.
20
+ * @param state
21
+ * * 🇬🇧: (Optional) `true` to check, `false` to uncheck. If undefined, acts as a getter.
22
+ * * 🇩🇪: (Optional) `true` zum Anhaken, `false` zum Deselektieren. Wenn nicht angegeben, wird gelesen.
23
+ * @returns
24
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
25
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
26
+ */
27
+ export declare function checked(this: jBase, state?: boolean): boolean | jBase;
28
+ /**
29
+ * * 🇬🇧: Gets or sets the 'selected' state of `<option>` elements.
30
+ * * 🇩🇪: Liest oder setzt den 'selected'-Status von `<option>`-Elementen.
31
+ * @param state
32
+ * * 🇬🇧: (Optional) `true` to select, `false` to deselect. If undefined, acts as a getter.
33
+ * * 🇩🇪: (Optional) `true` zum Auswählen, `false` zum Abwählen. Wenn nicht angegeben, wird gelesen.
34
+ * @returns
35
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
36
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
37
+ */
38
+ export declare function selected(this: jBase, state?: boolean): boolean | jBase;
39
+ /**
40
+ * * 🇬🇧: Enables or disables form fields and buttons. Additionally toggles the CSS class `.disabled`.
41
+ * * 🇩🇪: Aktiviert oder deaktiviert Formularfelder und Buttons. Toggelt zusätzlich die CSS-Klasse `.disabled`.
42
+ * @param state
43
+ * * 🇬🇧: (Optional) `true` to disable, `false` to enable. If undefined, acts as a getter.
44
+ * * 🇩🇪: (Optional) `true` zum Deaktivieren, `false` zum Aktivieren. Wenn nicht angegeben, wird gelesen.
45
+ * @returns
46
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
47
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
48
+ */
49
+ export declare function disabled(this: jBase, state?: boolean): boolean | jBase;
50
+ //# sourceMappingURL=states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../src/modules/dom/states.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAUrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAUtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAetE"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * @file src/modules/dom/states.ts
4
+ * @version 2.0.0
5
+ * @since 2.0.0
6
+ * @license GPL-3.0-or-later
7
+ * @copyright Sven Minio 2026
8
+ * @author Sven Minio <https://sven-minio.de>
9
+ * @category DOM
10
+ * @description
11
+ * * 🇬🇧: Methods for checking element states (e.g., visibility, checked, disabled).
12
+ * * 🇩🇪: Methoden zur Prüfung von Element-Zuständen (z.B. Sichtbarkeit, checked, disabled).
13
+ * @requires ../../core
14
+ * * 🇬🇧: Depends on the core jBase class for type definitions.
15
+ * * 🇩🇪: Hängt von der Core-jBase-Klasse für Typ-Definitionen ab.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.checked = checked;
19
+ exports.selected = selected;
20
+ exports.disabled = disabled;
21
+ /**
22
+ * * 🇬🇧: Gets or sets the 'checked' state of checkboxes and radio buttons.
23
+ * * 🇩🇪: Liest oder setzt den 'checked'-Status von Checkboxen und Radiobuttons.
24
+ * @param state
25
+ * * 🇬🇧: (Optional) `true` to check, `false` to uncheck. If undefined, acts as a getter.
26
+ * * 🇩🇪: (Optional) `true` zum Anhaken, `false` zum Deselektieren. Wenn nicht angegeben, wird gelesen.
27
+ * @returns
28
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
29
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
30
+ */
31
+ function checked(state) {
32
+ if (state === undefined) {
33
+ const el = this[0];
34
+ return (el instanceof HTMLInputElement) ? el.checked : false;
35
+ }
36
+ this.forEach(el => {
37
+ if (el instanceof HTMLInputElement)
38
+ el.checked = state;
39
+ });
40
+ return this;
41
+ }
42
+ /**
43
+ * * 🇬🇧: Gets or sets the 'selected' state of `<option>` elements.
44
+ * * 🇩🇪: Liest oder setzt den 'selected'-Status von `<option>`-Elementen.
45
+ * @param state
46
+ * * 🇬🇧: (Optional) `true` to select, `false` to deselect. If undefined, acts as a getter.
47
+ * * 🇩🇪: (Optional) `true` zum Auswählen, `false` zum Abwählen. Wenn nicht angegeben, wird gelesen.
48
+ * @returns
49
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
50
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
51
+ */
52
+ function selected(state) {
53
+ if (state === undefined) {
54
+ const el = this[0];
55
+ return (el instanceof HTMLOptionElement) ? el.selected : false;
56
+ }
57
+ this.forEach(el => {
58
+ if (el instanceof HTMLOptionElement)
59
+ el.selected = state;
60
+ });
61
+ return this;
62
+ }
63
+ /**
64
+ * * 🇬🇧: Enables or disables form fields and buttons. Additionally toggles the CSS class `.disabled`.
65
+ * * 🇩🇪: Aktiviert oder deaktiviert Formularfelder und Buttons. Toggelt zusätzlich die CSS-Klasse `.disabled`.
66
+ * @param state
67
+ * * 🇬🇧: (Optional) `true` to disable, `false` to enable. If undefined, acts as a getter.
68
+ * * 🇩🇪: (Optional) `true` zum Deaktivieren, `false` zum Aktivieren. Wenn nicht angegeben, wird gelesen.
69
+ * @returns
70
+ * * 🇬🇧: Boolean (getter) or the current jBase instance (setter).
71
+ * * 🇩🇪: Boolean (Getter) oder die aktuelle jBase-Instanz (Setter).
72
+ */
73
+ function disabled(state) {
74
+ if (state === undefined) {
75
+ const el = this[0];
76
+ return (el instanceof HTMLElement && 'disabled' in el) ? el.disabled : false;
77
+ }
78
+ this.forEach(el => {
79
+ if (el instanceof HTMLElement && 'disabled' in el) {
80
+ el.disabled = state;
81
+ if (state)
82
+ el.classList.add('disabled');
83
+ else
84
+ el.classList.remove('disabled');
85
+ }
86
+ });
87
+ return this;
88
+ }
89
+ //# sourceMappingURL=states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../../../src/modules/dom/states.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAcH,0BAUC;AAYD,4BAUC;AAYD,4BAeC;AArED;;;;;;;;;GASG;AACH,SAAgB,OAAO,CAAc,KAAe;IAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,EAAE,YAAY,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACd,IAAI,EAAE,YAAY,gBAAgB;YAC9B,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAAc,KAAe;IACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,EAAE,YAAY,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACd,IAAI,EAAE,YAAY,iBAAiB;YAC/B,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAAc,KAAe;IACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,EAAE,YAAY,WAAW,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACd,IAAI,EAAE,YAAY,WAAW,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;YAC/C,EAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC7B,IAAI,KAAK;gBACL,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;gBAE7B,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AAChB,CAAC"}