@twobirds/microcomponents 0.1.0 → 0.1.2

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 (326) hide show
  1. package/dist/MC.js +1 -1
  2. package/dist/MC.min.js +34 -53
  3. package/dist/MC.ts +3 -3
  4. package/dist/elements.min.js +1 -1
  5. package/dist/formValues.min.js +1 -1
  6. package/dist/microcomponents.min.js +1 -1
  7. package/dist/observables.min.js +1 -1
  8. package/package.json +11 -2
  9. package/.gitlab-ci.yml +0 -18
  10. package/.vscode/settings.json +0 -3
  11. package/MicroComponents.svg +0 -15
  12. package/assets/documentation/MC.md +0 -547
  13. package/assets/documentation/MicroComponents.svg +0 -15
  14. package/assets/documentation/ajaxian-1.png +0 -0
  15. package/assets/documentation/ajaxian-2.png +0 -0
  16. package/assets/documentation/ajaxian-3.png +0 -0
  17. package/assets/documentation/elements.md +0 -277
  18. package/assets/documentation/formvalues.md +0 -25
  19. package/assets/documentation/functional_requirements.md +0 -8
  20. package/assets/documentation/history.md +0 -436
  21. package/assets/documentation/klemmstein.png +0 -0
  22. package/assets/documentation/magic.md +0 -29
  23. package/assets/documentation/observables.md +0 -187
  24. package/assets/documentation/rnd0023-1.jpg +0 -0
  25. package/assets/documentation/rnd0023-2.jpg +0 -0
  26. package/assets/documentation/rnd0023-3.jpg +0 -0
  27. package/assets/documentation/tB_react.md +0 -207
  28. package/assets/documentation/usage.md +0 -142
  29. package/assets/documentation/why.md +0 -25
  30. package/assets/fiddle/MicroComponents.svg +0 -15
  31. package/assets/fiddle/fiddle.css +0 -0
  32. package/assets/fiddle/fiddle.js +0 -0
  33. package/assets/fiddle/index.html +0 -0
  34. package/assets/test/MicroComponents.svg +0 -15
  35. package/assets/test/grandparent.css +0 -16
  36. package/assets/test/myButton.css +0 -19
  37. package/assets/test/style.css +0 -8
  38. package/assets/test/test.html +0 -29
  39. package/assets/test/testform.json +0 -27
  40. package/public/.nojekyll +0 -1
  41. package/public/MC.d.ts +0 -39
  42. package/public/MC.d.ts.map +0 -1
  43. package/public/MC.js +0 -287
  44. package/public/MC.js.map +0 -1
  45. package/public/MC.min.js +0 -348
  46. package/public/MC.ts +0 -431
  47. package/public/MicroComponents.svg +0 -15
  48. package/public/documentation/MC.md +0 -547
  49. package/public/documentation/MicroComponents.svg +0 -15
  50. package/public/documentation/ajaxian-1.png +0 -0
  51. package/public/documentation/ajaxian-2.png +0 -0
  52. package/public/documentation/ajaxian-3.png +0 -0
  53. package/public/documentation/elements.md +0 -277
  54. package/public/documentation/formvalues.md +0 -25
  55. package/public/documentation/functional_requirements.md +0 -8
  56. package/public/documentation/history.md +0 -436
  57. package/public/documentation/klemmstein.png +0 -0
  58. package/public/documentation/magic.md +0 -29
  59. package/public/documentation/observables.md +0 -187
  60. package/public/documentation/rnd0023-1.jpg +0 -0
  61. package/public/documentation/rnd0023-2.jpg +0 -0
  62. package/public/documentation/rnd0023-3.jpg +0 -0
  63. package/public/documentation/tB_react.md +0 -207
  64. package/public/documentation/usage.md +0 -142
  65. package/public/documentation/why.md +0 -25
  66. package/public/elements.d.ts +0 -5
  67. package/public/elements.d.ts.map +0 -1
  68. package/public/elements.js +0 -68
  69. package/public/elements.js.map +0 -1
  70. package/public/elements.min.js +0 -1
  71. package/public/elements.ts +0 -119
  72. package/public/fiddle/MicroComponents.svg +0 -15
  73. package/public/fiddle/fiddle.css +0 -0
  74. package/public/fiddle/fiddle.js +0 -0
  75. package/public/fiddle/index.html +0 -0
  76. package/public/formValues.d.ts +0 -3
  77. package/public/formValues.d.ts.map +0 -1
  78. package/public/formValues.js +0 -162
  79. package/public/formValues.js.map +0 -1
  80. package/public/formValues.min.js +0 -1
  81. package/public/formValues.ts +0 -225
  82. package/public/helpers.d.ts +0 -14
  83. package/public/helpers.d.ts.map +0 -1
  84. package/public/helpers.js +0 -113
  85. package/public/helpers.js.map +0 -1
  86. package/public/helpers.ts +0 -149
  87. package/public/microcomponents.d.ts +0 -6
  88. package/public/microcomponents.d.ts.map +0 -1
  89. package/public/microcomponents.js +0 -7
  90. package/public/microcomponents.js.map +0 -1
  91. package/public/microcomponents.min.js +0 -1
  92. package/public/microcomponents.ts +0 -8
  93. package/public/observables.d.ts +0 -11
  94. package/public/observables.d.ts.map +0 -1
  95. package/public/observables.js +0 -244
  96. package/public/observables.js.map +0 -1
  97. package/public/observables.min.js +0 -1
  98. package/public/observables.ts +0 -416
  99. package/public/selectors._ts +0 -1269
  100. package/public/src/MC.d.ts +0 -39
  101. package/public/src/MC.d.ts.map +0 -1
  102. package/public/src/MC.js +0 -287
  103. package/public/src/MC.js.map +0 -1
  104. package/public/src/MC.ts +0 -431
  105. package/public/src/elements.d.ts +0 -5
  106. package/public/src/elements.d.ts.map +0 -1
  107. package/public/src/elements.js +0 -68
  108. package/public/src/elements.js.map +0 -1
  109. package/public/src/elements.ts +0 -119
  110. package/public/src/formValues.d.ts +0 -3
  111. package/public/src/formValues.d.ts.map +0 -1
  112. package/public/src/formValues.js +0 -162
  113. package/public/src/formValues.js.map +0 -1
  114. package/public/src/formValues.ts +0 -225
  115. package/public/src/helpers.d.ts +0 -14
  116. package/public/src/helpers.d.ts.map +0 -1
  117. package/public/src/helpers.js +0 -113
  118. package/public/src/helpers.js.map +0 -1
  119. package/public/src/helpers.ts +0 -149
  120. package/public/src/microcomponents.d.ts +0 -6
  121. package/public/src/microcomponents.d.ts.map +0 -1
  122. package/public/src/microcomponents.js +0 -7
  123. package/public/src/microcomponents.js.map +0 -1
  124. package/public/src/microcomponents.ts +0 -8
  125. package/public/src/observables.d.ts +0 -11
  126. package/public/src/observables.d.ts.map +0 -1
  127. package/public/src/observables.js +0 -244
  128. package/public/src/observables.js.map +0 -1
  129. package/public/src/observables.ts +0 -416
  130. package/public/src/selectors._ts +0 -1269
  131. package/public/src/test/grandparent.css +0 -14
  132. package/public/src/test/test/child.d.ts +0 -2
  133. package/public/src/test/test/child.d.ts.map +0 -1
  134. package/public/src/test/test/child.js +0 -26
  135. package/public/src/test/test/child.js.map +0 -1
  136. package/public/src/test/test/child.ts +0 -36
  137. package/public/src/test/test/grandchild.d.ts +0 -2
  138. package/public/src/test/test/grandchild.d.ts.map +0 -1
  139. package/public/src/test/test/grandchild.js +0 -22
  140. package/public/src/test/test/grandchild.js.map +0 -1
  141. package/public/src/test/test/grandchild.ts +0 -31
  142. package/public/src/test/test/grandparent.d.ts +0 -2
  143. package/public/src/test/test/grandparent.d.ts.map +0 -1
  144. package/public/src/test/test/grandparent.js +0 -1
  145. package/public/src/test/test/grandparent.js.map +0 -1
  146. package/public/src/test/test/grandparent.ts +0 -43
  147. package/public/src/test/test/greatgrandchild.d.ts +0 -2
  148. package/public/src/test/test/greatgrandchild.d.ts.map +0 -1
  149. package/public/src/test/test/greatgrandchild.js +0 -36
  150. package/public/src/test/test/greatgrandchild.js.map +0 -1
  151. package/public/src/test/test/greatgrandchild.ts +0 -51
  152. package/public/src/test/test/parent.d.ts +0 -2
  153. package/public/src/test/test/parent.d.ts.map +0 -1
  154. package/public/src/test/test/parent.js +0 -25
  155. package/public/src/test/test/parent.js.map +0 -1
  156. package/public/src/test/test/parent.ts +0 -35
  157. package/public/src/test/test/testform.d.ts +0 -2
  158. package/public/src/test/test/testform.d.ts.map +0 -1
  159. package/public/src/test/test/testform.js +0 -1
  160. package/public/src/test/test/testform.js.map +0 -1
  161. package/public/src/test/test/testform.ts +0 -153
  162. package/public/src/test/test/testfunction.d.ts +0 -3
  163. package/public/src/test/test/testfunction.d.ts.map +0 -1
  164. package/public/src/test/test/testfunction.js +0 -7
  165. package/public/src/test/test/testfunction.js.map +0 -1
  166. package/public/src/test/test/testfunction.ts +0 -12
  167. package/public/src/test/test/testmc.d.ts +0 -3
  168. package/public/src/test/test/testmc.d.ts.map +0 -1
  169. package/public/src/test/test/testmc.js +0 -10
  170. package/public/src/test/test/testmc.js.map +0 -1
  171. package/public/src/test/test/testmc.ts +0 -16
  172. package/public/src/test/test/testsimpleclass.d.ts +0 -3
  173. package/public/src/test/test/testsimpleclass.d.ts.map +0 -1
  174. package/public/src/test/test/testsimpleclass.js +0 -9
  175. package/public/src/test/test/testsimpleclass.js.map +0 -1
  176. package/public/src/test/test/testsimpleclass.ts +0 -15
  177. package/public/src/test/test.d.ts +0 -2
  178. package/public/src/test/test.d.ts.map +0 -1
  179. package/public/src/test/test.js +0 -72
  180. package/public/src/test/test.js.map +0 -1
  181. package/public/src/test/test.ts +0 -176
  182. package/public/src/test/testform.css +0 -47
  183. package/public/src/test/testform.html +0 -56
  184. package/public/src/test/testform.json +0 -27
  185. package/public/test/MC.d.ts +0 -39
  186. package/public/test/MC.d.ts.map +0 -1
  187. package/public/test/MC.js +0 -287
  188. package/public/test/MC.min.js +0 -348
  189. package/public/test/MC.ts +0 -431
  190. package/public/test/MicroComponents.svg +0 -15
  191. package/public/test/elements.d.ts +0 -5
  192. package/public/test/elements.d.ts.map +0 -1
  193. package/public/test/elements.js +0 -68
  194. package/public/test/elements.min.js +0 -1
  195. package/public/test/elements.ts +0 -119
  196. package/public/test/formValues.d.ts +0 -3
  197. package/public/test/formValues.d.ts.map +0 -1
  198. package/public/test/formValues.js +0 -162
  199. package/public/test/formValues.min.js +0 -1
  200. package/public/test/formValues.ts +0 -225
  201. package/public/test/grandparent.css +0 -14
  202. package/public/test/helpers.d.ts +0 -14
  203. package/public/test/helpers.d.ts.map +0 -1
  204. package/public/test/helpers.js +0 -113
  205. package/public/test/helpers.ts +0 -149
  206. package/public/test/microcomponents.d.ts +0 -6
  207. package/public/test/microcomponents.d.ts.map +0 -1
  208. package/public/test/microcomponents.js +0 -7
  209. package/public/test/microcomponents.min.js +0 -1
  210. package/public/test/microcomponents.ts +0 -8
  211. package/public/test/myButton.css +0 -19
  212. package/public/test/observables.d.ts +0 -11
  213. package/public/test/observables.d.ts.map +0 -1
  214. package/public/test/observables.js +0 -244
  215. package/public/test/observables.min.js +0 -1
  216. package/public/test/observables.ts +0 -416
  217. package/public/test/style.css +0 -8
  218. package/public/test/test/child.d.ts +0 -2
  219. package/public/test/test/child.d.ts.map +0 -1
  220. package/public/test/test/child.js +0 -26
  221. package/public/test/test/child.js.map +0 -1
  222. package/public/test/test/child.ts +0 -36
  223. package/public/test/test/grandchild.d.ts +0 -2
  224. package/public/test/test/grandchild.d.ts.map +0 -1
  225. package/public/test/test/grandchild.js +0 -22
  226. package/public/test/test/grandchild.js.map +0 -1
  227. package/public/test/test/grandchild.ts +0 -31
  228. package/public/test/test/grandparent.d.ts +0 -2
  229. package/public/test/test/grandparent.d.ts.map +0 -1
  230. package/public/test/test/grandparent.js +0 -1
  231. package/public/test/test/grandparent.js.map +0 -1
  232. package/public/test/test/grandparent.ts +0 -43
  233. package/public/test/test/greatgrandchild.d.ts +0 -2
  234. package/public/test/test/greatgrandchild.d.ts.map +0 -1
  235. package/public/test/test/greatgrandchild.js +0 -36
  236. package/public/test/test/greatgrandchild.js.map +0 -1
  237. package/public/test/test/greatgrandchild.ts +0 -51
  238. package/public/test/test/parent.d.ts +0 -2
  239. package/public/test/test/parent.d.ts.map +0 -1
  240. package/public/test/test/parent.js +0 -25
  241. package/public/test/test/parent.js.map +0 -1
  242. package/public/test/test/parent.ts +0 -35
  243. package/public/test/test/testform.d.ts +0 -2
  244. package/public/test/test/testform.d.ts.map +0 -1
  245. package/public/test/test/testform.js +0 -1
  246. package/public/test/test/testform.js.map +0 -1
  247. package/public/test/test/testform.ts +0 -153
  248. package/public/test/test/testfunction.d.ts +0 -3
  249. package/public/test/test/testfunction.d.ts.map +0 -1
  250. package/public/test/test/testfunction.js +0 -7
  251. package/public/test/test/testfunction.js.map +0 -1
  252. package/public/test/test/testfunction.ts +0 -12
  253. package/public/test/test/testmc.d.ts +0 -3
  254. package/public/test/test/testmc.d.ts.map +0 -1
  255. package/public/test/test/testmc.js +0 -10
  256. package/public/test/test/testmc.js.map +0 -1
  257. package/public/test/test/testmc.ts +0 -16
  258. package/public/test/test/testsimpleclass.d.ts +0 -3
  259. package/public/test/test/testsimpleclass.d.ts.map +0 -1
  260. package/public/test/test/testsimpleclass.js +0 -9
  261. package/public/test/test/testsimpleclass.js.map +0 -1
  262. package/public/test/test/testsimpleclass.ts +0 -15
  263. package/public/test/test.d.ts +0 -2
  264. package/public/test/test.d.ts.map +0 -1
  265. package/public/test/test.html +0 -29
  266. package/public/test/test.js +0 -72
  267. package/public/test/test.js.map +0 -1
  268. package/public/test/test.ts +0 -176
  269. package/public/test/testform.css +0 -47
  270. package/public/test/testform.html +0 -56
  271. package/public/test/testform.json +0 -27
  272. package/public/typedoc/.nojekyll +0 -1
  273. package/public/typedoc/assets/highlight.css +0 -106
  274. package/public/typedoc/assets/icons.js +0 -18
  275. package/public/typedoc/assets/icons.svg +0 -1
  276. package/public/typedoc/assets/main.js +0 -60
  277. package/public/typedoc/assets/navigation.js +0 -1
  278. package/public/typedoc/assets/search.js +0 -1
  279. package/public/typedoc/assets/style.css +0 -1493
  280. package/public/typedoc/classes/MC.DC.html +0 -13
  281. package/public/typedoc/classes/MC.MC.html +0 -3
  282. package/public/typedoc/classes/MC.McBase.html +0 -3
  283. package/public/typedoc/functions/MC.autoload.html +0 -1
  284. package/public/typedoc/functions/MC.off.html +0 -1
  285. package/public/typedoc/functions/MC.on.html +0 -1
  286. package/public/typedoc/functions/MC.one.html +0 -1
  287. package/public/typedoc/functions/MC.trigger.html +0 -1
  288. package/public/typedoc/functions/elements.defineCE.html +0 -1
  289. package/public/typedoc/functions/elements.getCE.html +0 -1
  290. package/public/typedoc/functions/formValues.formValues.html +0 -1
  291. package/public/typedoc/functions/observables.observe.html +0 -1
  292. package/public/typedoc/hierarchy.html +0 -1
  293. package/public/typedoc/index.html +0 -122
  294. package/public/typedoc/interfaces/MC.HTMLMcElement.html +0 -758
  295. package/public/typedoc/media/MicroComponents.svg +0 -15
  296. package/public/typedoc/modules/MC.html +0 -10
  297. package/public/typedoc/modules/elements.html +0 -3
  298. package/public/typedoc/modules/formValues.html +0 -2
  299. package/public/typedoc/modules/observables.html +0 -3
  300. package/public/typedoc/modules.html +0 -5
  301. package/public/typedoc/types/observables.Observable.html +0 -1
  302. package/src/MC.ts +0 -431
  303. package/src/elements.ts +0 -119
  304. package/src/formValues.ts +0 -225
  305. package/src/helpers.ts +0 -149
  306. package/src/microcomponents.ts +0 -8
  307. package/src/observables.ts +0 -416
  308. package/src/selectors._ts +0 -1269
  309. package/src/test/grandparent.css +0 -14
  310. package/src/test/test/child.ts +0 -36
  311. package/src/test/test/grandchild.ts +0 -31
  312. package/src/test/test/grandparent.ts +0 -43
  313. package/src/test/test/greatgrandchild.ts +0 -51
  314. package/src/test/test/parent.ts +0 -35
  315. package/src/test/test/testform.ts +0 -153
  316. package/src/test/test/testfunction.ts +0 -12
  317. package/src/test/test/testmc.ts +0 -16
  318. package/src/test/test/testsimpleclass.ts +0 -15
  319. package/src/test/test.ts +0 -176
  320. package/src/test/testform.css +0 -47
  321. package/src/test/testform.html +0 -56
  322. package/src/test/testform.json +0 -27
  323. package/tasks.md +0 -36
  324. package/tsconfig.json +0 -107
  325. package/typedoc.json +0 -7
  326. package/webpack.config.js +0 -346
@@ -1,122 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Micro Components</title><meta name="description" content="Documentation for Micro Components"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">Micro Components</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>Micro Components</h1></div><div class="tsd-panel tsd-typography"><p><img src="media/MicroComponents.svg" alt="logo"></p>
2
- <a id="md:micro-components" class="tsd-anchor"></a><h2 class="tsd-anchor-link">MICRO COMPONENTS<a href="#md:micro-components" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p><strong>MCs are function blocks that you attach to DOM nodes.</strong> These are re-usable in any framework, and you can have any number of MCs in one DOM node.</p>
3
- <p>There are helpers for the following functionalities:</p>
4
- <ul>
5
- <li><strong>Web Components:</strong> create native web components. Their functionality is comprised of a set of inner MCs.</li>
6
- <li><strong>State</strong> is done by observable objects that you can attach callbacks to. This also allows for 1-way binding to DOM placeholders, and it can be extended to allow for complex data driven state machines.</li>
7
- <li><strong>Form Handling</strong> allows for 2-way binding from an observable form object to DOM form input elements.</li>
8
- <li><strong>Communication</strong> between DOM micro components is ensured via direct selected or directional bubbling CustomEvent's.</li>
9
- <li><strong>Autoloading</strong> allows for build-free websites that dynamically load JS requirements into DOM HTMLElements.</li>
10
- </ul>
11
- <p>The distinguishing feature - compared to other frameworks - is its <strong>minimalism</strong>, <strong>portability</strong> and <strong>granular modularization</strong>. In an almost literal sense MCs work like childrens building blocks, where a chest full of unassuming parts lets you compose whatever functionality lies in your imagination.</p>
12
- <p><strong>You work with one of the established frameworks?</strong> You can still put this hands-on tool in your tool belt. You then have a plugin fallback solution for when your FW fails you or lacks functionality.</p>
13
- <a id="md:status" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Status<a href="#md:status" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>In <a href="https://twobirds.gitlab.io/microcomponents/test/test.html" target="_blank" class="external">manual testing</a> ( also a speed test).</p>
14
- <p>Check the <a href="https://twobirds.gitlab.io/microcomponents/typedoc/index.html" target="_blank" class="external">typedoc API reference</a> if you want to drill into the source code.</p>
15
- <a id="md:simple-usage-examples" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Simple Usage Examples<a href="#md:simple-usage-examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:micro-components-1" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><strong>Micro Components</strong><a href="#md:micro-components-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Hint:</strong> This code only shows how Micro Components are stored in the DOM.</p>
16
- <p>before:</p>
17
- <pre><code class="HTML"><span class="hl-0">&lt;</span><span class="hl-1">div</span><span class="hl-0">&gt;&lt;/</span><span class="hl-1">div</span><span class="hl-0">&gt;</span>
18
- </code><button type="button">Copy</button></pre>
19
-
20
- <p>code:</p>
21
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyMC</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4"> </span><span class="hl-7">helloWorld</span><span class="hl-4">(){</span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">( </span><span class="hl-8">&#39;Hello World&#39;</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4">}</span><br/><br/><span class="hl-2">// get some element from the DOM</span><br/><span class="hl-3">const</span><span class="hl-4"> </span><span class="hl-9">element</span><span class="hl-4"> = </span><span class="hl-6">document</span><span class="hl-4">.</span><span class="hl-7">querySelector</span><span class="hl-4">(</span><span class="hl-8">&#39;div&#39;</span><span class="hl-4">);</span><br/><br/><span class="hl-2">// Add the custom micro component instance to the target element</span><br/><span class="hl-9">DC</span><span class="hl-4">.</span><span class="hl-7">add</span><span class="hl-4">(</span><br/><span class="hl-4"> </span><span class="hl-6">element</span><span class="hl-4">,</span><br/><span class="hl-4"> </span><span class="hl-8">&#39;myMC&#39;</span><span class="hl-4">,</span><br/><span class="hl-4"> </span><span class="hl-3">new</span><span class="hl-4"> </span><span class="hl-7">MyMC</span><span class="hl-4">( </span><span class="hl-6">element</span><span class="hl-4"> )</span><br/><span class="hl-4">);</span><br/><br/><span class="hl-2">// Hello World</span><br/><span class="hl-6">element</span><br/><span class="hl-4"> .</span><span class="hl-6">_mc</span><br/><span class="hl-4"> .</span><span class="hl-6">myMC</span><br/><span class="hl-4"> .</span><span class="hl-7">helloWorld</span><span class="hl-4">();</span>
22
- </code><button type="button">Copy</button></pre>
23
-
24
- <p>after:</p>
25
- <pre><code class="HTML"><span class="hl-0">&lt;</span><span class="hl-1">div</span><span class="hl-4"> </span><span class="hl-10">data-mc</span><span class="hl-0">&gt;&lt;/</span><span class="hl-1">div</span><span class="hl-0">&gt;</span>
26
- </code><button type="button">Copy</button></pre>
27
-
28
- <p>The <code>data-mc</code> <strong>attribute</strong> indicates that this <strong>HTML element contains at least one micro component</strong>. This is needed for the selectors.</p>
29
- <p>The <code>_mc</code> <strong>property</strong> is the only interference with the DOM, so any other system should be happy to work with this.</p>
30
- <a id="md:web-components--custom-elements" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><strong>Web Components / Custom Elements</strong><a href="#md:web-components--custom-elements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>code:</p>
31
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyComponent</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// this event handler is attached automatically</span><br/><span class="hl-4"> </span><span class="hl-7">onClick</span><span class="hl-4">(){</span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">( </span><span class="hl-8">&#39;&lt;my-component&gt; clicked!&#39;</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><span class="hl-4">}</span><br/><br/><span class="hl-7">defineCE</span><span class="hl-4">( </span><span class="hl-8">&#39;my-component&#39;</span><span class="hl-4">, </span><span class="hl-6">MyComponent</span><span class="hl-4"> );</span>
32
- </code><button type="button">Copy</button></pre>
33
-
34
- <p>after: you can use ...</p>
35
- <pre><code class="HTML"><span class="hl-0">&lt;</span><span class="hl-1">my-component</span><span class="hl-0">&gt;&lt;/</span><span class="hl-1">my-component</span><span class="hl-0">&gt;</span>
36
- </code><button type="button">Copy</button></pre>
37
-
38
- <p>... in your template.</p>
39
- <p>Or you can construct it programmatically:</p>
40
- <pre><code class="javascript"><span class="hl-3">const</span><span class="hl-4"> </span><span class="hl-9">myComponentClass</span><span class="hl-4"> = </span><span class="hl-7">getCE</span><span class="hl-4">(</span><span class="hl-8">&#39;my-component&#39;</span><span class="hl-4">);</span><br/><span class="hl-3">const</span><span class="hl-4"> </span><span class="hl-9">body</span><span class="hl-4"> = </span><span class="hl-6">document</span><span class="hl-4">.</span><span class="hl-6">body</span><span class="hl-4">;</span><br/><span class="hl-6">body</span><span class="hl-4">.</span><span class="hl-7">append</span><span class="hl-4">( </span><span class="hl-3">new</span><span class="hl-4"> </span><span class="hl-7">myComponentClass</span><span class="hl-4">() );</span>
41
- </code><button type="button">Copy</button></pre>
42
-
43
- <a id="md:state-and-1-way-binding" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><strong>State and 1-way-binding</strong><a href="#md:state-and-1-way-binding" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>code:</p>
44
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyMC</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">state</span><span class="hl-4"> = { </span><span class="hl-6">text:</span><span class="hl-4"> </span><span class="hl-8">&#39;Hello world!&#39;</span><span class="hl-4"> };</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// observe one property ...</span><br/><span class="hl-4"> </span><span class="hl-7">observe</span><span class="hl-4">( </span><span class="hl-3">this</span><span class="hl-4">, </span><span class="hl-8">&#39;state&#39;</span><span class="hl-4"> );</span><br/><span class="hl-4"> </span><br/><span class="hl-4"> </span><span class="hl-2">// or observe all properties defined so far</span><br/><span class="hl-4"> </span><span class="hl-7">observe</span><span class="hl-4">( </span><span class="hl-3">this</span><span class="hl-4"> ); </span><br/><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">target</span><span class="hl-4">.</span><span class="hl-6">innerHTML</span><span class="hl-4"> = </span><span class="hl-8">&#39;{text}&#39;</span><span class="hl-4">;</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// one way binding</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">state</span><span class="hl-4">.</span><span class="hl-7">bind</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ); </span><span class="hl-2">// links the state to DOM placeholders</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// attach your own callbacks</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">state</span><span class="hl-4">.</span><span class="hl-7">observe</span><span class="hl-4">( (</span><span class="hl-6">value</span><span class="hl-4">) </span><span class="hl-3">=&gt;</span><span class="hl-4"> { </span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">(</span><span class="hl-6">value</span><span class="hl-4">); </span><br/><span class="hl-4"> });</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// now simply changing the state will change the DOM</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">state</span><span class="hl-4">.</span><span class="hl-6">text</span><span class="hl-4"> = </span><span class="hl-8">&#39;Hallo Welt&#39;</span><span class="hl-4">;</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4">}</span>
45
- </code><button type="button">Copy</button></pre>
46
-
47
- <a id="md:forms-and-2-way-binding" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><strong>Forms and 2-way-binding</strong><a href="#md:forms-and-2-way-binding" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>code:</p>
48
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyMC</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">form</span><span class="hl-4"> = { </span><span class="hl-6">textinput:</span><span class="hl-4"> </span><span class="hl-8">&#39;Hello world!&#39;</span><span class="hl-4"> };</span><br/><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">target</span><span class="hl-4">.</span><span class="hl-6">innerHTML</span><span class="hl-4"> = </span><span class="hl-8">&#39;&lt;input name=&quot;textinput&quot; /&gt;&#39;</span><span class="hl-4">; </span><br/><span class="hl-4"> </span><br/><span class="hl-4"> </span><span class="hl-2">// link the form property to the DOM input fields</span><br/><span class="hl-4"> </span><span class="hl-7">formValues</span><span class="hl-4">( </span><span class="hl-3">this</span><span class="hl-4">, </span><span class="hl-8">&#39;form&#39;</span><span class="hl-4">, </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><span class="hl-4"> </span><br/><span class="hl-4"> </span><span class="hl-2">// now simply changing the form property will change the DOM input fields</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-6">form</span><span class="hl-4">.</span><span class="hl-6">textinput</span><span class="hl-4"> = </span><span class="hl-8">&#39;Hallo Welt&#39;</span><span class="hl-4">;</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4">}</span>
49
- </code><button type="button">Copy</button></pre>
50
-
51
- <a id="md:event-handlers" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><strong>Event Handlers</strong><a href="#md:event-handlers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><a id="md:native-events" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Native Events<a href="#md:native-events" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>code:</p>
52
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyMC</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// attach event handlers programatically</span><br/><span class="hl-4"> </span><span class="hl-3">const</span><span class="hl-4"> </span><span class="hl-9">onClickHandler</span><span class="hl-4"> = </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-7">on</span><span class="hl-4">( </span><span class="hl-8">&#39;click&#39;</span><span class="hl-4">, () </span><span class="hl-3">=&gt;</span><span class="hl-4"> {</span><br/><span class="hl-4"> </span><span class="hl-2">// ...</span><br/><span class="hl-4"> });</span><br/><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-7">one</span><span class="hl-4">( </span><span class="hl-8">&#39;click&#39;</span><span class="hl-4">, () </span><span class="hl-3">=&gt;</span><span class="hl-4"> {</span><br/><span class="hl-4"> </span><span class="hl-2">// ...</span><br/><span class="hl-4"> });</span><br/><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-7">off</span><span class="hl-4">( </span><span class="hl-8">&#39;click&#39;</span><span class="hl-4">, </span><span class="hl-6">onClickHandler</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// this event handler is attached automatically</span><br/><span class="hl-4"> </span><span class="hl-7">onClick</span><span class="hl-4">(){</span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">( </span><span class="hl-8">&#39;HTMLElement clicked!&#39;</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// this event handler is attached automatically</span><br/><span class="hl-4"> </span><span class="hl-7">oneClick</span><span class="hl-4">(){</span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">( </span><span class="hl-8">&#39;HTMLElement clicked! ( only fires once )&#39;</span><span class="hl-4"> );</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4">}</span>
53
- </code><button type="button">Copy</button></pre>
54
-
55
- <a id="md:custom-events" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Custom Events<a href="#md:custom-events" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p>code:</p>
56
- <pre><code class="javascript"><span class="hl-2">// create a custom micro component class</span><br/><span class="hl-3">class</span><span class="hl-4"> </span><span class="hl-5">MyMC</span><span class="hl-4"> </span><span class="hl-3">extends</span><span class="hl-4"> </span><span class="hl-5">DC</span><span class="hl-4">{</span><br/><br/><span class="hl-4"> </span><span class="hl-3">constructor</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-3">super</span><span class="hl-4">( </span><span class="hl-6">target</span><span class="hl-4"> );</span><br/><br/><span class="hl-4"> </span><span class="hl-6">payload</span><span class="hl-4"> = {</span><br/><span class="hl-4"> </span><span class="hl-6">test:</span><span class="hl-4"> </span><span class="hl-11">42</span><br/><span class="hl-4"> };</span><br/><br/><span class="hl-4"> </span><span class="hl-7">setTimeout</span><span class="hl-4">( () </span><span class="hl-3">=&gt;</span><span class="hl-4"> {</span><br/><span class="hl-4"> </span><span class="hl-3">this</span><span class="hl-4">.</span><span class="hl-7">trigger</span><span class="hl-4">(</span><span class="hl-8">&#39;customEvent&#39;</span><span class="hl-4">, </span><span class="hl-6">payload</span><span class="hl-4"> );</span><br/><span class="hl-4"> });</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4"> </span><span class="hl-2">// this event handler is attached automatically</span><br/><span class="hl-4"> </span><span class="hl-7">onCustomEvent</span><span class="hl-4">( </span><span class="hl-6">ev</span><span class="hl-4"> ){</span><br/><span class="hl-4"> </span><span class="hl-6">console</span><span class="hl-4">.</span><span class="hl-7">log</span><span class="hl-4">( </span><span class="hl-8">&#39;onCustomEvent called with&#39;</span><span class="hl-4">, </span><span class="hl-6">ev</span><span class="hl-4">.</span><span class="hl-6">data</span><span class="hl-4">.</span><span class="hl-6">test</span><span class="hl-4"> ); </span><span class="hl-2">// &quot;42&quot;</span><br/><span class="hl-4"> }</span><br/><br/><span class="hl-4">}</span>
57
- </code><button type="button">Copy</button></pre>
58
-
59
- <a id="md:goal" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Goal<a href="#md:goal" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This code aims at improving Javascript modularity and encapsulation. Micro Components are built on <strong>OOP</strong> for structure, so you should embrace <strong>DRY, KISS and SOLID</strong> principles.</p>
60
- <p>MCs provide a runtime app structure that is directly linked to the browser DOM. That is you don't need web components, you can attach MCs to plain HTMLElements. Having said this: the library also allows for standard web component programming, acting as a framework.</p>
61
- <p>In general this is a <strong>HTML / Web Standards first</strong> system. There is almost no abstraction, especially not for templating, except state binding to the DOM via simple placeholders.</p>
62
- <p>It has no interference with other frameworks, since it creates a second layer that hovers above the DOM. So what you intended to work as an add-on to React, is usable e.g. in Angular also.</p>
63
- <p>And, of course, you can use it as your main framework using its custom web component functionality.</p>
64
- <p>Its basic principle is <strong>composition over inheritance</strong>. Also it helps to embrace <strong>DIY</strong> (<strong>D</strong>o <strong>I</strong>t <strong>Y</strong>ourself) <strong>over Toolchains</strong>, but this is up to your personal preference.</p>
65
- <p>You can use <strong>Vanilla JS or Typescript</strong> or both in parallel in your project. For example you could use plain JS for rapid prototyping functionalities, then convert to TS for production.</p>
66
- <p>Most of all this system by design <strong>allows for outsourcing without sharing the main development system</strong>. It is absolutely granular as it enforces <strong>DRY</strong> (<strong>D</strong>on't <strong>R</strong>epeat <strong>Y</strong>ourself).</p>
67
- <p>Finally it allows for a clear distinction between <code>Junior</code>, <code>Senior</code> and <code>Architect</code> roles in a project. No more hiring junior programmers with 5 years experience in 50 tools under their belt. A junior in this system is somebody who likes HTML, CSS and JS/TS - nothing more. Teaching all of this system starting at zero takes 1 day. The rest is finger muscle memory and learning/knowing web standards.</p>
68
- <a id="md:documentation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Documentation<a href="#md:documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This repository exports 4 independent functionalities:</p>
69
- <ol>
70
- <li>
71
- <p><strong><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/MC.md?ref_type=heads" target="_blank" class="external">Micro Components</a></strong> contains the <strong>MC</strong> and <strong>DC</strong> classes you can use as super classes.</p>
72
- </li>
73
- <li>
74
- <p><strong><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/elements.md?ref_type=heads" target="_blank" class="external">Elements</a></strong> lets you define and use your own native web components. Uses (1).</p>
75
- </li>
76
- </ol>
77
- <ul>
78
- <li><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/elements.md?ref_type=heads#create-a-custom-element" target="_blank" class="external">Basic Usage</a>.</li>
79
- <li><a href="https://twobirds.gitlab.io/microcomponents/test/test.html" target="_blank" class="external">Live Example</a></li>
80
- </ul>
81
- <ol start="3">
82
- <li><strong><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/observables.md?ref_type=heads" target="_blank" class="external">Observables</a></strong> add <strong>observability</strong> and <strong>run time type safety</strong> to object properties. Also they provide <strong>1-way binding</strong> to placeholders in your template HTML.</li>
83
- </ol>
84
- <ul>
85
- <li><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/observables.md?ref_type=heads#example" target="_blank" class="external">Basic Usage</a></li>
86
- <li><a href="https://twobirds.gitlab.io/microcomponents/test/test.html" target="_blank" class="external">Live Example</a></li>
87
- </ul>
88
- <ol start="4">
89
- <li><strong><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/formvalues.md?ref_type=heads" target="_blank" class="external">Formvalues</a></strong> gives you <strong>2-way binding</strong> between a HTML form and an observable object. Uses (3).</li>
90
- </ol>
91
- <ul>
92
- <li><a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/src/test/test/testform.ts?ref_type=heads" target="_blank" class="external">Example Code</a></li>
93
- <li><a href="https://twobirds.gitlab.io/microcomponents/test/test.html" target="_blank" class="external">Live Example</a></li>
94
- </ul>
95
- <p>Also there is a bundle file that contains all of the above.</p>
96
- <p>To see what can be done, go to <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/magic.md?ref_type=heads" target="_blank" class="external">additional concepts</a> which shows what it already has been used for.</p>
97
- <a id="md:distinguishing-features" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Distinguishing Features<a href="#md:distinguishing-features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>There are a few potentially unique aspects of this micro components system that might differentiate it from other framework or library:</p>
98
- <ul>
99
- <li>
100
- <p><strong>Pure OOP Approach</strong>: The system explicitly positions itself as a strict object-oriented alternative to the functional approaches that dominate many modern frameworks.</p>
101
- </li>
102
- <li>
103
- <p><strong>Minimal Interference</strong>: The system has minimal DOM interference, only adding _mc property to DOM nodes that contain code. This makes it unusually compatible with other frameworks or libraries.</p>
104
- </li>
105
- <li>
106
- <p><strong>Hierarchical Component Traversal</strong>: The built-in ancestor/closest/child/descendant traversal methods provide a clean way to navigate component relationships.</p>
107
- </li>
108
- <li>
109
- <p><strong>Direct DOM Integration</strong>: Unlike virtual DOM-based frameworks, this approach works directly with the actual DOM while still providing component encapsulation.</p>
110
- </li>
111
- <li>
112
- <p><strong>Outsourcing Potential</strong>: Your external coders do not need to access your code repository or your toolchain.</p>
113
- </li>
114
- </ul>
115
- <p>The strongest argument might be for developers who prefer OOP, want minimal framework lock-in, and need a lightweight solution that works well with existing code or other libraries.</p>
116
- <a id="md:contact" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Contact<a href="#md:contact" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Feel free to contact me for any questions or inquiries:</p>
117
- <p>email <a href="mailto:fthuerigen@gmail.com?subject=Micro%20Components">Frank Thürigen</a></p>
118
- <p>You can <a href="https://www.gofundme.com/f/nachhaltige-programmierung" target="_blank" class="external">fund this</a>.</p>
119
- <a id="md:disclaimer" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Disclaimer<a href="#md:disclaimer" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>I decided to extract this functionality from the <a href="https://www.npmjs.com/package/twobirds-core" target="_blank" class="external">twoBirds framework</a>, because it is a useful tool in itself and it is framework agnostic. It relies solely on the standard DOM and native javascript or typescript.</p>
120
- <p>Later this will be backported into twoBirds as a dependency, and twoBirds will become completely modularized on the base of MCs.</p>
121
- <p><strong>This is a massive undertaking.</strong> MCs are just the foundation of what I do. I am about to dump <a href="https://gitlab.com/twoBirds/microcomponents/-/blob/main/assets/documentation/magic.md?ref_type=heads#things-i-already-did-with-this-in-my-own-framework-twobirds-or-in-apps-that-i-developed-with-it" target="_blank" class="external">20+ years of javascript programming</a> into open source libraries, so feel free to <a href="https://www.gofundme.com/f/nachhaltige-programmierung" target="_blank" class="external">fund this</a>. The better this is funded, the faster it will be done. Given enough resources, I will start a crowdfunded company that will develop a new open source ecosystem for javascript/typescript programming.</p>
122
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:micro-components"><span>MICRO COMPONENTS</span></a><a href="#md:status"><span>Status</span></a><a href="#md:simple-usage-examples"><span>Simple <wbr/>Usage <wbr/>Examples</span></a><ul><li><a href="#md:micro-components-1"><span>Micro <wbr/>Components</span></a></li><li><a href="#md:web-components--custom-elements"><span>Web <wbr/>Components / <wbr/>Custom <wbr/>Elements</span></a></li><li><a href="#md:state-and-1-way-binding"><span>State and 1-<wbr/>way-<wbr/>binding</span></a></li><li><a href="#md:forms-and-2-way-binding"><span>Forms and 2-<wbr/>way-<wbr/>binding</span></a></li><li><a href="#md:event-handlers"><span>Event <wbr/>Handlers</span></a></li><li><ul><li><a href="#md:native-events"><span>Native <wbr/>Events</span></a></li><li><a href="#md:custom-events"><span>Custom <wbr/>Events</span></a></li></ul></li></ul><a href="#md:goal"><span>Goal</span></a><a href="#md:documentation"><span>Documentation</span></a><a href="#md:distinguishing-features"><span>Distinguishing <wbr/>Features</span></a><a href="#md:contact"><span>Contact</span></a><a href="#md:disclaimer"><span>Disclaimer</span></a></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>Micro Components</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>