taggedjs 2.1.1 → 2.3.25

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 (254) hide show
  1. package/index.js +1 -1
  2. package/js/Clones.type.d.ts +1 -0
  3. package/js/Clones.type.js +2 -0
  4. package/js/Clones.type.js.map +1 -0
  5. package/js/Props.d.ts +1 -0
  6. package/js/Props.js +2 -0
  7. package/js/Props.js.map +1 -0
  8. package/js/Subject.d.ts +17 -0
  9. package/js/Subject.js +43 -0
  10. package/js/Subject.js.map +1 -0
  11. package/js/Tag.class.d.ts +69 -0
  12. package/js/Tag.class.js +247 -0
  13. package/js/Tag.class.js.map +1 -0
  14. package/js/Tag.utils.d.ts +12 -0
  15. package/js/Tag.utils.js +31 -0
  16. package/js/Tag.utils.js.map +1 -0
  17. package/js/ValueSubject.d.ts +6 -0
  18. package/js/ValueSubject.js +15 -0
  19. package/js/ValueSubject.js.map +1 -0
  20. package/js/bindSubjectCallback.function.d.ts +5 -0
  21. package/js/bindSubjectCallback.function.js +19 -0
  22. package/js/bindSubjectCallback.function.js.map +1 -0
  23. package/js/deepFunctions.d.ts +2 -0
  24. package/js/deepFunctions.js +76 -0
  25. package/js/deepFunctions.js.map +1 -0
  26. package/js/elementDestroyCheck.function.d.ts +3 -0
  27. package/js/elementDestroyCheck.function.js +17 -0
  28. package/js/elementDestroyCheck.function.js.map +1 -0
  29. package/js/elementInitCheck.d.ts +2 -0
  30. package/js/elementInitCheck.js +18 -0
  31. package/js/elementInitCheck.js.map +1 -0
  32. package/js/gateway/gateway.web.component.d.ts +11 -0
  33. package/js/gateway/gateway.web.component.js +20 -0
  34. package/js/gateway/gateway.web.component.js.map +1 -0
  35. package/js/gateway/index.d.ts +3 -0
  36. package/js/gateway/index.js +3 -0
  37. package/js/gateway/index.js.map +1 -0
  38. package/js/gateway/loadTagGateway.function.d.ts +2 -0
  39. package/js/gateway/loadTagGateway.function.js +18 -0
  40. package/js/gateway/loadTagGateway.function.js.map +1 -0
  41. package/js/gateway/tagGateway.function.d.ts +31 -0
  42. package/js/gateway/tagGateway.function.js +187 -0
  43. package/js/gateway/tagGateway.function.js.map +1 -0
  44. package/js/getCallback.d.ts +3 -0
  45. package/js/getCallback.js +50 -0
  46. package/js/getCallback.js.map +1 -0
  47. package/js/getTagSupport.d.ts +21 -0
  48. package/js/getTagSupport.js +109 -0
  49. package/js/getTagSupport.js.map +1 -0
  50. package/js/html.d.ts +2 -0
  51. package/js/html.js +5 -0
  52. package/js/html.js.map +1 -0
  53. package/js/index.d.ts +19 -0
  54. package/js/index.js +24 -0
  55. package/js/index.js.map +1 -0
  56. package/js/inputAttribute.d.ts +1 -0
  57. package/js/inputAttribute.js +19 -0
  58. package/js/inputAttribute.js.map +1 -0
  59. package/js/interpolateAttributes.d.ts +4 -0
  60. package/js/interpolateAttributes.js +135 -0
  61. package/js/interpolateAttributes.js.map +1 -0
  62. package/js/interpolateContentTemplates.d.ts +6 -0
  63. package/js/interpolateContentTemplates.js +54 -0
  64. package/js/interpolateContentTemplates.js.map +1 -0
  65. package/js/interpolateElement.d.ts +9 -0
  66. package/js/interpolateElement.js +39 -0
  67. package/js/interpolateElement.js.map +1 -0
  68. package/js/interpolateTemplate.d.ts +17 -0
  69. package/js/interpolateTemplate.js +64 -0
  70. package/js/interpolateTemplate.js.map +1 -0
  71. package/js/interpolations.d.ts +7 -0
  72. package/js/interpolations.js +18 -0
  73. package/js/interpolations.js.map +1 -0
  74. package/js/isInstance.d.ts +6 -0
  75. package/js/isInstance.js +10 -0
  76. package/js/isInstance.js.map +1 -0
  77. package/js/js/Clones.type.d.ts +1 -0
  78. package/js/js/Clones.type.js +2 -0
  79. package/js/js/Clones.type.js.map +1 -0
  80. package/js/js/Props.d.ts +1 -0
  81. package/js/js/Props.js +2 -0
  82. package/js/js/Props.js.map +1 -0
  83. package/js/js/Subject.d.ts +17 -0
  84. package/js/js/Subject.js +43 -0
  85. package/js/js/Subject.js.map +1 -0
  86. package/js/js/Tag.class.d.ts +67 -0
  87. package/js/js/Tag.class.js +241 -0
  88. package/js/js/Tag.class.js.map +1 -0
  89. package/js/js/Tag.utils.d.ts +12 -0
  90. package/js/js/Tag.utils.js +31 -0
  91. package/js/js/Tag.utils.js.map +1 -0
  92. package/js/js/ValueSubject.d.ts +6 -0
  93. package/js/js/ValueSubject.js +15 -0
  94. package/js/js/ValueSubject.js.map +1 -0
  95. package/js/js/bindSubjectCallback.function.d.ts +5 -0
  96. package/js/js/bindSubjectCallback.function.js +19 -0
  97. package/js/js/bindSubjectCallback.function.js.map +1 -0
  98. package/js/js/deepFunctions.d.ts +2 -0
  99. package/js/js/deepFunctions.js +76 -0
  100. package/js/js/deepFunctions.js.map +1 -0
  101. package/js/js/elementDestroyCheck.function.d.ts +3 -0
  102. package/js/js/elementDestroyCheck.function.js +17 -0
  103. package/js/js/elementDestroyCheck.function.js.map +1 -0
  104. package/js/js/elementInitCheck.d.ts +2 -0
  105. package/js/js/elementInitCheck.js +18 -0
  106. package/js/js/elementInitCheck.js.map +1 -0
  107. package/js/js/getCallback.d.ts +3 -0
  108. package/js/js/getCallback.js +50 -0
  109. package/js/js/getCallback.js.map +1 -0
  110. package/js/js/getTagSupport.d.ts +22 -0
  111. package/js/js/getTagSupport.js +116 -0
  112. package/js/js/getTagSupport.js.map +1 -0
  113. package/js/js/html.d.ts +2 -0
  114. package/js/js/html.js +5 -0
  115. package/js/js/html.js.map +1 -0
  116. package/js/js/index.d.ts +19 -0
  117. package/js/js/index.js +24 -0
  118. package/js/js/index.js.map +1 -0
  119. package/js/js/inputAttribute.d.ts +1 -0
  120. package/js/js/inputAttribute.js +19 -0
  121. package/js/js/inputAttribute.js.map +1 -0
  122. package/js/js/interpolateAttributes.d.ts +4 -0
  123. package/js/js/interpolateAttributes.js +127 -0
  124. package/js/js/interpolateAttributes.js.map +1 -0
  125. package/js/js/interpolateContentTemplates.d.ts +5 -0
  126. package/js/js/interpolateContentTemplates.js +57 -0
  127. package/js/js/interpolateContentTemplates.js.map +1 -0
  128. package/js/js/interpolateElement.d.ts +9 -0
  129. package/js/js/interpolateElement.js +32 -0
  130. package/js/js/interpolateElement.js.map +1 -0
  131. package/js/js/interpolateTemplate.d.ts +17 -0
  132. package/js/js/interpolateTemplate.js +64 -0
  133. package/js/js/interpolateTemplate.js.map +1 -0
  134. package/js/js/interpolations.d.ts +8 -0
  135. package/js/js/interpolations.js +17 -0
  136. package/js/js/interpolations.js.map +1 -0
  137. package/js/js/isInstance.d.ts +6 -0
  138. package/js/js/isInstance.js +10 -0
  139. package/js/js/isInstance.js.map +1 -0
  140. package/js/js/onDestroy.d.ts +2 -0
  141. package/js/js/onDestroy.js +20 -0
  142. package/js/js/onDestroy.js.map +1 -0
  143. package/js/js/onInit.d.ts +2 -0
  144. package/js/js/onInit.js +19 -0
  145. package/js/js/onInit.js.map +1 -0
  146. package/js/js/processSubjectComponent.function.d.ts +8 -0
  147. package/js/js/processSubjectComponent.function.js +53 -0
  148. package/js/js/processSubjectComponent.function.js.map +1 -0
  149. package/js/js/processSubjectValue.function.d.ts +16 -0
  150. package/js/js/processSubjectValue.function.js +122 -0
  151. package/js/js/processSubjectValue.function.js.map +1 -0
  152. package/js/js/processTagArray.d.ts +9 -0
  153. package/js/js/processTagArray.js +60 -0
  154. package/js/js/processTagArray.js.map +1 -0
  155. package/js/js/processTagResult.function.d.ts +10 -0
  156. package/js/js/processTagResult.function.js +42 -0
  157. package/js/js/processTagResult.function.js.map +1 -0
  158. package/js/js/providers.d.ts +17 -0
  159. package/js/js/providers.js +86 -0
  160. package/js/js/providers.js.map +1 -0
  161. package/js/js/redrawTag.function.d.ts +7 -0
  162. package/js/js/redrawTag.function.js +9 -0
  163. package/js/js/redrawTag.function.js.map +1 -0
  164. package/js/js/render.d.ts +1 -0
  165. package/js/js/render.js +24 -0
  166. package/js/js/render.js.map +1 -0
  167. package/js/js/renderAppToElement.d.ts +14 -0
  168. package/js/js/renderAppToElement.js +57 -0
  169. package/js/js/renderAppToElement.js.map +1 -0
  170. package/js/js/setUse.function.d.ts +23 -0
  171. package/js/js/setUse.function.js +14 -0
  172. package/js/js/setUse.function.js.map +1 -0
  173. package/js/js/state.d.ts +24 -0
  174. package/js/js/state.js +98 -0
  175. package/js/js/state.js.map +1 -0
  176. package/js/js/tag.d.ts +8 -0
  177. package/js/js/tag.js +46 -0
  178. package/js/js/tag.js.map +1 -0
  179. package/js/js/tagElement.d.ts +14 -0
  180. package/js/js/tagElement.js +57 -0
  181. package/js/js/tagElement.js.map +1 -0
  182. package/js/js/tagGateway.function.d.ts +5 -0
  183. package/js/js/tagGateway.function.js +119 -0
  184. package/js/js/tagGateway.function.js.map +1 -0
  185. package/js/js/tagRunner.d.ts +6 -0
  186. package/js/js/tagRunner.js +19 -0
  187. package/js/js/tagRunner.js.map +1 -0
  188. package/js/js/templater.utils.d.ts +28 -0
  189. package/js/js/templater.utils.js +99 -0
  190. package/js/js/templater.utils.js.map +1 -0
  191. package/js/js/updateTag.utils.d.ts +6 -0
  192. package/js/js/updateTag.utils.js +84 -0
  193. package/js/js/updateTag.utils.js.map +1 -0
  194. package/js/js/wait.d.ts +1 -0
  195. package/js/js/wait.js +8 -0
  196. package/js/js/wait.js.map +1 -0
  197. package/js/onDestroy.d.ts +2 -0
  198. package/js/onDestroy.js +20 -0
  199. package/js/onDestroy.js.map +1 -0
  200. package/js/onInit.d.ts +2 -0
  201. package/js/onInit.js +19 -0
  202. package/js/onInit.js.map +1 -0
  203. package/js/processSubjectComponent.function.d.ts +8 -0
  204. package/js/processSubjectComponent.function.js +53 -0
  205. package/js/processSubjectComponent.function.js.map +1 -0
  206. package/js/processSubjectValue.function.d.ts +16 -0
  207. package/js/processSubjectValue.function.js +122 -0
  208. package/js/processSubjectValue.function.js.map +1 -0
  209. package/js/processTagArray.d.ts +9 -0
  210. package/js/processTagArray.js +60 -0
  211. package/js/processTagArray.js.map +1 -0
  212. package/js/processTagResult.function.d.ts +10 -0
  213. package/js/processTagResult.function.js +39 -0
  214. package/js/processTagResult.function.js.map +1 -0
  215. package/js/providers.d.ts +17 -0
  216. package/js/providers.js +86 -0
  217. package/js/providers.js.map +1 -0
  218. package/js/redrawTag.function.d.ts +7 -0
  219. package/js/redrawTag.function.js +8 -0
  220. package/js/redrawTag.function.js.map +1 -0
  221. package/js/render.d.ts +1 -0
  222. package/js/render.js +17 -0
  223. package/js/render.js.map +1 -0
  224. package/js/renderAppToElement.d.ts +14 -0
  225. package/js/renderAppToElement.js +57 -0
  226. package/js/renderAppToElement.js.map +1 -0
  227. package/js/setUse.function.d.ts +23 -0
  228. package/js/setUse.function.js +14 -0
  229. package/js/setUse.function.js.map +1 -0
  230. package/js/state.d.ts +24 -0
  231. package/js/state.js +98 -0
  232. package/js/state.js.map +1 -0
  233. package/js/tag.d.ts +7 -0
  234. package/js/tag.js +46 -0
  235. package/js/tag.js.map +1 -0
  236. package/js/tagElement.d.ts +14 -0
  237. package/js/tagElement.js +57 -0
  238. package/js/tagElement.js.map +1 -0
  239. package/js/tagGateway.function.d.ts +14 -0
  240. package/js/tagGateway.function.js +138 -0
  241. package/js/tagGateway.function.js.map +1 -0
  242. package/js/tagRunner.d.ts +6 -0
  243. package/js/tagRunner.js +19 -0
  244. package/js/tagRunner.js.map +1 -0
  245. package/js/templater.utils.d.ts +27 -0
  246. package/js/templater.utils.js +98 -0
  247. package/js/templater.utils.js.map +1 -0
  248. package/js/updateTag.utils.d.ts +6 -0
  249. package/js/updateTag.utils.js +102 -0
  250. package/js/updateTag.utils.js.map +1 -0
  251. package/js/wait.d.ts +1 -0
  252. package/js/wait.js +8 -0
  253. package/js/wait.js.map +1 -0
  254. package/package.json +1 -1
package/js/html.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { Tag } from "./Tag.class.js";
2
+ export declare function html(strings: string[] | TemplateStringsArray, ...values: unknown[]): Tag;
package/js/html.js ADDED
@@ -0,0 +1,5 @@
1
+ import { Tag } from "./Tag.class.js";
2
+ export function html(strings, ...values) {
3
+ return new Tag(strings, values);
4
+ }
5
+ //# sourceMappingURL=html.js.map
package/js/html.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../ts/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEpC,MAAM,UAAU,IAAI,CAClB,OAAwC,EACxC,GAAG,MAAiB;IAEpB,OAAO,IAAI,GAAG,CAAC,OAAmB,EAAE,MAAM,CAAC,CAAA;AAC7C,CAAC"}
package/js/index.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ /** Must use .js and NOT .ts extensions here */
2
+ export * from "./html.js";
3
+ export * from "./Subject.js";
4
+ export * from "./interpolateElement.js";
5
+ export * from "./getTagSupport.js";
6
+ export * from "./redrawTag.function.js";
7
+ export * from "./gateway/index.js";
8
+ export { isTagComponent } from "./isInstance.js";
9
+ export { tags, tag } from "./tag.js";
10
+ export { TagComponent } from "./templater.utils.js";
11
+ export { tagElement } from "./tagElement.js";
12
+ export { Tag } from "./Tag.class.js";
13
+ export { runBeforeRender } from "./tagRunner.js";
14
+ export { setUse } from "./setUse.function.js";
15
+ export { providers } from "./providers.js";
16
+ export { state } from "./state.js";
17
+ export * from "./onInit.js";
18
+ export * from "./onDestroy.js";
19
+ export * from "./getCallback.js";
package/js/index.js ADDED
@@ -0,0 +1,24 @@
1
+ /** Must use .js and NOT .ts extensions here */
2
+ export * from "./html.js";
3
+ export * from "./Subject.js";
4
+ export * from "./interpolateElement.js";
5
+ export * from "./getTagSupport.js";
6
+ export * from "./redrawTag.function.js";
7
+ export * from "./gateway/index.js";
8
+ // TODO: export *
9
+ export { isTagComponent } from "./isInstance.js";
10
+ export { tags, tag } from "./tag.js";
11
+ export { tagElement } from "./tagElement.js";
12
+ export { Tag } from "./Tag.class.js";
13
+ export { runBeforeRender } from "./tagRunner.js";
14
+ export { setUse } from "./setUse.function.js";
15
+ /* hooks */
16
+ // TODO: export *
17
+ export { providers } from "./providers.js";
18
+ // TODO: export *
19
+ export { state } from "./state.js";
20
+ export * from "./onInit.js";
21
+ export * from "./onDestroy.js";
22
+ export * from "./getCallback.js";
23
+ /* end: hooks */
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAElC,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,WAAW;AACT,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,iBAAiB;AACjB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAClC,gBAAgB"}
@@ -0,0 +1 @@
1
+ export declare function inputAttribute(name: string, value: any, element: Element): void;
@@ -0,0 +1,19 @@
1
+ export function inputAttribute(name, value, element) {
2
+ const names = name.split('.');
3
+ // style.position = "absolute"
4
+ if (names[0] === 'style') {
5
+ element.style[names[1]] = value;
6
+ }
7
+ // Example: class.width-full = "true"
8
+ if (names[0] === 'class') {
9
+ names.shift();
10
+ if (value) {
11
+ names.forEach(name => element.classList.add(name));
12
+ }
13
+ else {
14
+ names.forEach(name => element.classList.remove(name));
15
+ }
16
+ return;
17
+ }
18
+ }
19
+ //# sourceMappingURL=inputAttribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputAttribute.js","sourceRoot":"","sources":["../ts/inputAttribute.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,KAAU,EACV,OAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE7B,8BAA8B;IAC9B,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC1C,CAAC;IAED,qCAAqC;IACrC,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,IAAG,KAAK,EAAE,CAAC;YACT,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,CAAC;QACD,OAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Context, Tag } from "./Tag.class.js";
2
+ export declare function interpolateAttributes(child: Element, scope: Context, ownerTag: Tag): void;
3
+ /** Looking for (class | style) followed by a period */
4
+ export declare function isSpecialAttr(attrName: string | String): boolean;
@@ -0,0 +1,135 @@
1
+ import { inputAttribute } from "./inputAttribute.js";
2
+ import { isSubjectInstance } from "./isInstance.js";
3
+ export function interpolateAttributes(child, scope, ownerTag) {
4
+ const attrNames = child.getAttributeNames();
5
+ const isTextArea = child.nodeName === 'TEXTAREA';
6
+ if (isTextArea && !attrNames.includes('value')) {
7
+ const value = child.getAttribute('textVarValue'); // (child as any).value
8
+ processAttribute('textVarValue', value, child, scope, ownerTag, (_name, value) => child.value = value);
9
+ }
10
+ const howToSet = (name, value) => {
11
+ /*
12
+ if(name === 'class'){
13
+ value.split(' ').forEach(className => child.classList.add(className))
14
+ return
15
+ }
16
+ */
17
+ child.setAttribute(name, value);
18
+ };
19
+ attrNames.forEach(attrName => {
20
+ const value = child.getAttribute(attrName);
21
+ processAttribute(attrName, value, child, scope, ownerTag, howToSet);
22
+ });
23
+ }
24
+ /** Looking for (class | style) followed by a period */
25
+ export function isSpecialAttr(attrName) {
26
+ return attrName.search(/^(class|style)(\.)/) >= 0;
27
+ }
28
+ function processAttribute(attrName, value, child, scope, ownerTag, howToSet) {
29
+ if (isTagVar(value)) {
30
+ return processScopedNameValueAttr(attrName, value, child, scope, ownerTag, howToSet);
31
+ }
32
+ if (isTagVar(attrName)) {
33
+ const contextValueSubject = getContextValueByVarString(scope, attrName);
34
+ let lastValue;
35
+ // the above callback gets called immediately since its a ValueSubject()
36
+ const sub = contextValueSubject.subscribe((value) => {
37
+ processNameOnlyAttr(value, lastValue, child, ownerTag, howToSet);
38
+ lastValue = value;
39
+ });
40
+ ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
41
+ child.removeAttribute(attrName);
42
+ return;
43
+ }
44
+ // Non dynamic
45
+ const isSpecial = isSpecialAttr(attrName);
46
+ if (isSpecial) {
47
+ return inputAttribute(attrName, value, child);
48
+ }
49
+ }
50
+ const startRegX = /^\s*{__tagvar/;
51
+ const endRegX = /}\s*$/;
52
+ function isTagVar(value) {
53
+ return value && value.search(startRegX) >= 0 && value.search(endRegX) >= 0;
54
+ }
55
+ function processNameOnlyAttr(attrValue, lastValue, child, ownerTag, howToSet) {
56
+ if (lastValue && lastValue != attrValue) {
57
+ if (typeof (lastValue) === 'string') {
58
+ child.removeAttribute(lastValue);
59
+ }
60
+ else if (lastValue instanceof Object) {
61
+ Object.entries(lastValue).forEach(([name]) => child.removeAttribute(name));
62
+ }
63
+ }
64
+ if (typeof (attrValue) === 'string') {
65
+ if (!attrValue.length) {
66
+ return;
67
+ }
68
+ processNameValueAttr(attrValue, '', child, ownerTag, howToSet);
69
+ return;
70
+ }
71
+ if (attrValue instanceof Object) {
72
+ Object.entries(attrValue).forEach(([name, value]) => processNameValueAttr(name, value, child, ownerTag, howToSet));
73
+ return;
74
+ }
75
+ }
76
+ function getContextValueByVarString(scope, value) {
77
+ const code = value.replace('{', '').split('').reverse().join('').replace('}', '').split('').reverse().join('');
78
+ return scope[code];
79
+ }
80
+ function processNameValueAttr(attrName, result, child, ownerTag, howToSet) {
81
+ const isSpecial = isSpecialAttr(attrName);
82
+ // attach as callback
83
+ if (result instanceof Function) {
84
+ const action = function (...args) {
85
+ return result(child, args);
86
+ };
87
+ child[attrName].action = action;
88
+ // child.addEventListener(attrName, action)
89
+ }
90
+ if (isSubjectInstance(result)) {
91
+ child.removeAttribute(attrName);
92
+ const callback = (newAttrValue) => processSubjectValue(newAttrValue, child, attrName, isSpecial, howToSet);
93
+ // the above callback gets called immediately since its a ValueSubject()
94
+ const sub = result.subscribe(callback);
95
+ ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
96
+ return;
97
+ }
98
+ howToSet(attrName, result);
99
+ // child.setAttribute(attrName, result.value)
100
+ return;
101
+ }
102
+ function processSubjectValue(newAttrValue, child, attrName, isSpecial, howToSet) {
103
+ if (newAttrValue instanceof Function) {
104
+ ;
105
+ child[attrName] = function (...args) {
106
+ return newAttrValue(child, args);
107
+ };
108
+ child[attrName].tagFunction = newAttrValue;
109
+ return;
110
+ }
111
+ if (isSpecial) {
112
+ inputAttribute(attrName, newAttrValue, child);
113
+ return;
114
+ }
115
+ if (newAttrValue) {
116
+ howToSet(attrName, newAttrValue);
117
+ // child.setAttribute(attrName, newAttrValue)
118
+ return;
119
+ }
120
+ const isDeadValue = newAttrValue === undefined || newAttrValue === false || newAttrValue === null;
121
+ if (isDeadValue) {
122
+ child.removeAttribute(attrName);
123
+ return;
124
+ }
125
+ // value is 0
126
+ howToSet(attrName, newAttrValue);
127
+ // child.setAttribute(attrName, newAttrValue)
128
+ }
129
+ function processScopedNameValueAttr(attrName, value, // {__tagVarN}
130
+ child, scope, ownerTag, howToSet) {
131
+ // get the code inside the brackets like "variable0" or "{variable0}"
132
+ const result = getContextValueByVarString(scope, value);
133
+ return processNameValueAttr(attrName, result, child, ownerTag, howToSet);
134
+ }
135
+ //# sourceMappingURL=interpolateAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateAttributes.js","sourceRoot":"","sources":["../ts/interpolateAttributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Clones } from "./Clones.type.js";
2
+ import { Tag } from "./Tag.class.js";
3
+ import { InterpolateOptions } from "./interpolateElement.js";
4
+ /** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
5
+ export declare function interpolateContentTemplates(element: Element, // <div><div></div><template tag-wrap="22">...</template></div>
6
+ variable: any, tag: Tag, options: InterpolateOptions, children: HTMLCollection): Clones;
@@ -0,0 +1,54 @@
1
+ import { interpolateTemplate } from "./interpolateTemplate.js";
2
+ const templateSearch = new RegExp('\\s*<template interpolate end id="__tagvar(\\d{1,4})"([^>]*)></template>(\\s*)');
3
+ /** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
4
+ export function interpolateContentTemplates(element, // <div><div></div><template tag-wrap="22">...</template></div>
5
+ variable, tag, options, children) {
6
+ if (!children || element.tagName === 'TEMPLATE') {
7
+ return []; // done
8
+ }
9
+ const counts = {
10
+ added: 0,
11
+ removed: 0,
12
+ };
13
+ const clones = [];
14
+ const childArray = new Array(...children);
15
+ if (element.tagName === 'TEXTAREA') {
16
+ scanTextAreaValue(element);
17
+ }
18
+ childArray.forEach(child => {
19
+ const nextClones = interpolateTemplate(child, variable, tag, counts, options);
20
+ if (child.tagName === 'TEXTAREA') {
21
+ scanTextAreaValue(child);
22
+ }
23
+ clones.push(...nextClones);
24
+ if (child.children) {
25
+ const nextKids = new Array(...child.children);
26
+ nextKids.forEach(subChild => {
27
+ if (isRenderEndTemplate(subChild)) {
28
+ interpolateTemplate(subChild, variable, tag, counts, options);
29
+ }
30
+ const nextClones = interpolateContentTemplates(subChild, variable, tag, options, subChild.children);
31
+ clones.push(...nextClones);
32
+ });
33
+ }
34
+ });
35
+ return clones;
36
+ }
37
+ function isRenderEndTemplate(child) {
38
+ const isTemplate = child.tagName === 'TEMPLATE';
39
+ return isTemplate &&
40
+ child.getAttribute('interpolate') !== undefined &&
41
+ child.getAttribute('end') !== undefined;
42
+ }
43
+ function scanTextAreaValue(textarea) {
44
+ const value = textarea.value;
45
+ if (value.search(templateSearch) >= 0) {
46
+ const match = value.match(/__tagvar(\d{1,4})/);
47
+ const result = match ? match[0] : '';
48
+ const token = '{' + result + '}';
49
+ // textarea.value = token
50
+ textarea.value = '';
51
+ textarea.setAttribute('textVarValue', token);
52
+ }
53
+ }
54
+ //# sourceMappingURL=interpolateContentTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateContentTemplates.js","sourceRoot":"","sources":["../ts/interpolateContentTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEhF,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,gFAAgF,CAAC,CAAA;AAEnH,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CACzC,OAAgB,EAAE,+DAA+D;AACjF,QAAa,EACb,GAAQ,EACR,OAA2B,EAC3B,QAAwB;IAGxB,IAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAG,CAAC;QAClD,OAAO,EAAE,CAAA,CAAC,OAAO;IACnB,CAAC;IAED,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;KACX,CAAA;IACD,MAAM,MAAM,GAAW,EAAE,CAAA;IAEzB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;IAEzC,IAAG,OAAO,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;QAChC,iBAAiB,CAAC,OAA8B,CAAC,CAAA;IACnD,CAAC;IAED,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,UAAU,GAAG,mBAAmB,CACpC,KAAiB,EACjB,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,CACR,CAAA;QAED,IAAG,KAAK,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;YAC9B,iBAAiB,CAAC,KAA4B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;QAE1B,IAAK,KAAK,CAAC,QAAQ,EAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC1B,IAAK,mBAAmB,CAAC,QAAQ,CAAC,EAAG,CAAC;oBACpC,mBAAmB,CAAC,QAAoB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC3E,CAAC;gBAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACnG,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;YAC9B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAG,UAAU,CAAA;IAC7C,OAAO,UAAU;QACjB,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,SAAS;QAC/C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,CAAA;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA6B;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAG,CAAC,EAAG,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAA;QAChC,yBAAyB;QACzB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAA;QACnB,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Context, Tag, TagTemplate } from "./Tag.class.js";
2
+ import { Clones } from "./Clones.type.js";
3
+ export type InterpolateOptions = {
4
+ /** make the element go on document */
5
+ forceElement?: boolean;
6
+ };
7
+ export declare function interpolateElement(element: Element, context: Context, // variables used to evaluate
8
+ interpolatedTemplates: TagTemplate, tagOwner: Tag, options: InterpolateOptions): Clones;
9
+ export declare function interpolateString(string: string): import("./interpolations.js").InterpolatedTemplates;
@@ -0,0 +1,39 @@
1
+ import { interpolateAttributes } from "./interpolateAttributes.js";
2
+ import { interpolateToTemplates } from "./interpolations.js";
3
+ import { interpolateContentTemplates } from "./interpolateContentTemplates.js";
4
+ import { escapeSearch, variablePrefix } from "./Tag.class.js";
5
+ export function interpolateElement(element, context, // variables used to evaluate
6
+ interpolatedTemplates, tagOwner, options) {
7
+ const clones = [];
8
+ const result = interpolatedTemplates.interpolation; // interpolateElementChild(element)
9
+ // const result = interpolateElementChild(element)
10
+ const template = element.children[0];
11
+ const children = template.content.children;
12
+ if (result.keys.length) {
13
+ const nextClones = interpolateContentTemplates(element, context, tagOwner, options, children);
14
+ clones.push(...nextClones);
15
+ }
16
+ interpolateAttributes(element, context, tagOwner);
17
+ processChildrenAttributes(children, context, tagOwner);
18
+ return clones;
19
+ }
20
+ function processChildrenAttributes(children, context, ownerTag) {
21
+ new Array(...children).forEach(child => {
22
+ interpolateAttributes(child, context, ownerTag);
23
+ if (child.children) {
24
+ processChildrenAttributes(child.children, context, ownerTag);
25
+ }
26
+ });
27
+ }
28
+ /** Convert interpolations into template tags */
29
+ function interpolateElementChild(child) {
30
+ const result = interpolateString(child.innerHTML);
31
+ child.innerHTML = result.string;
32
+ return result;
33
+ }
34
+ export function interpolateString(string) {
35
+ const result = interpolateToTemplates(string);
36
+ result.string = result.string.replace(escapeSearch, variablePrefix);
37
+ return result;
38
+ }
39
+ //# sourceMappingURL=interpolateElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateElement.js","sourceRoot":"","sources":["../ts/interpolateElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,EAA6B,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQxF,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,OAAgB,EAAE,6BAA6B;AAC/C,qBAAkC,EAClC,QAAa,EACb,OAA2B;IAE3B,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,MAAM,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAA,CAAC,mCAAmC;IACtF,kDAAkD;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAwB,CAAA;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAA;IAE1C,IAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC7F,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;IAC9B,CAAC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACjD,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEtD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAwB,EACxB,OAAgB,EAChB,QAAa;IAEb,IAAI,KAAK,CAAC,GAAG,QAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE/C,IAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClB,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,gDAAgD;AAChD,SAAS,uBAAuB,CAC9B,KAAc;IAEd,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACjD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACnE,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Context, ElementBuildOptions, Tag } from "./Tag.class.js";
2
+ import { InterpolateOptions } from "./interpolateElement.js";
3
+ import { Clones } from "./Clones.type.js";
4
+ export type Template = Element & {
5
+ clone: any;
6
+ };
7
+ export declare function interpolateTemplate(template: Template, // <template end interpolate /> (will be removed)
8
+ context: Context, // variable scope of {`__tagvar${index}`:'x'}
9
+ tag: Tag, // Tag class
10
+ counts: Counts, // {added:0, removed:0}
11
+ options: InterpolateOptions): Clones;
12
+ export declare function updateBetweenTemplates(value: string | undefined | boolean | number, lastFirstChild: Element): Text;
13
+ export type Counts = {
14
+ added: number;
15
+ removed: number;
16
+ };
17
+ export declare function afterElmBuild(elm: Element | ChildNode, options: ElementBuildOptions): void;
@@ -0,0 +1,64 @@
1
+ import { variablePrefix } from "./Tag.class.js";
2
+ import { elementInitCheck } from "./elementInitCheck.js";
3
+ import { processSubjectValue } from "./processSubjectValue.function.js";
4
+ export function interpolateTemplate(template, // <template end interpolate /> (will be removed)
5
+ context, // variable scope of {`__tagvar${index}`:'x'}
6
+ tag, // Tag class
7
+ counts, // {added:0, removed:0}
8
+ options) {
9
+ const clones = [];
10
+ if (!template.hasAttribute('end')) {
11
+ return clones; // only care about starts
12
+ }
13
+ const variableName = template.getAttribute('id');
14
+ if (variableName?.substring(0, variablePrefix.length) !== variablePrefix) {
15
+ return clones; // ignore, not a tagVar
16
+ }
17
+ const result = context[variableName];
18
+ // const isSubject = isSubjectInstance(result)
19
+ let isForceElement = options.forceElement;
20
+ const callback = (templateNewValue) => {
21
+ const { clones } = processSubjectValue(templateNewValue, result, template, tag, { counts, forceElement: isForceElement });
22
+ if (isForceElement) {
23
+ isForceElement = false; // only can happen once
24
+ }
25
+ clones.push(...clones);
26
+ // TODO: See if we can remove
27
+ setTimeout(() => {
28
+ counts.added = 0; // reset
29
+ counts.removed = 0; // reset
30
+ }, 0);
31
+ };
32
+ const sub = result.subscribe(callback);
33
+ tag.cloneSubs.push(sub);
34
+ return clones;
35
+ }
36
+ // Function to update the value of x
37
+ export function updateBetweenTemplates(value, lastFirstChild) {
38
+ const parent = lastFirstChild.parentNode;
39
+ // mimic React skipping to display EXCEPT for true does display on page
40
+ if (value === undefined || value === false || value === null) { // || value === true
41
+ value = '';
42
+ }
43
+ // Insert the new value (never use innerHTML here)
44
+ const textNode = document.createTextNode(value); // never innerHTML
45
+ parent.insertBefore(textNode, lastFirstChild);
46
+ /* remove existing nodes */
47
+ parent.removeChild(lastFirstChild);
48
+ if (lastFirstChild.nodeName === 'TEMPLATE') {
49
+ lastFirstChild.setAttribute('removedAt', Date.now().toString());
50
+ }
51
+ return textNode;
52
+ }
53
+ export function afterElmBuild(elm, options) {
54
+ if (!elm.getAttribute) {
55
+ return;
56
+ }
57
+ if (!options.forceElement) {
58
+ elementInitCheck(elm, options.counts);
59
+ }
60
+ if (elm.children) {
61
+ new Array(...elm.children).forEach(child => afterElmBuild(child, options));
62
+ }
63
+ }
64
+ //# sourceMappingURL=interpolateTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateTemplate.js","sourceRoot":"","sources":["../ts/interpolateTemplate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const interpolateReplace: RegExp;
2
+ export type InterpolatedTemplates = {
3
+ string: string;
4
+ keys: string[];
5
+ };
6
+ /** replaces ${x} with <template id="x-start"></template><template id="x-end"></template> */
7
+ export declare function interpolateToTemplates(template: string): InterpolatedTemplates;
@@ -0,0 +1,18 @@
1
+ // support arrow functions in attributes
2
+ export const interpolateReplace = /(?:<[^>]*?(?:(?:\s+\w+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+)))*\s*)\/?>)|({__tagvar[^}]+})/g;
3
+ /** replaces ${x} with <template id="x-start"></template><template id="x-end"></template> */
4
+ export function interpolateToTemplates(template) {
5
+ const keys = [];
6
+ const string = template.replace(interpolateReplace, (match, expression) => {
7
+ if (match.startsWith('<')) {
8
+ // If the match is an HTML tag, don't replace
9
+ return match;
10
+ }
11
+ const noBraces = expression.substring(1, expression.length - 1);
12
+ const id = noBraces;
13
+ keys.push(id);
14
+ return `<template interpolate end id="${id}"></template>`;
15
+ });
16
+ return { string, keys };
17
+ }
18
+ //# sourceMappingURL=interpolations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolations.js","sourceRoot":"","sources":["../ts/interpolations.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,4FAA4F,CAAA;AAU9H,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CACpC,QAAgB;IAEhB,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACxE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,6CAA6C;YAC7C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAC,CAAC,CAAC,CAAA;QAC7D,MAAM,EAAE,GAAG,QAAQ,CAAA;QACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACb,OAAO,iCAAiC,EAAE,eAAe,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { SubjectLike } from "./Subject.js";
2
+ import { Tag } from "./Tag.class.js";
3
+ import { TemplaterResult } from "./templater.utils.js";
4
+ export declare function isTagComponent(value?: TemplaterResult): boolean;
5
+ export declare function isTagInstance(tag?: Tag | unknown): boolean;
6
+ export declare function isSubjectInstance(subject?: SubjectLike): Boolean;
@@ -0,0 +1,10 @@
1
+ export function isTagComponent(value) {
2
+ return value?.isTemplater === true;
3
+ }
4
+ export function isTagInstance(tag) {
5
+ return tag?.isTag === true;
6
+ }
7
+ export function isSubjectInstance(subject) {
8
+ return (subject?.isSubject === true || subject?.subscribe) ? true : false; // subject?.isSubject === true ||
9
+ }
10
+ //# sourceMappingURL=isInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isInstance.js","sourceRoot":"","sources":["../ts/isInstance.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,OAAO,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAmB;IAC/C,OAAQ,GAAW,EAAE,KAAK,KAAK,IAAI,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAqB;IAErB,OAAO,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,IAAI,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA,CAAC,kCAAkC;AAC9G,CAAC"}
@@ -0,0 +1 @@
1
+ export type Clones = (Element | Text | ChildNode)[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Clones.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clones.type.js","sourceRoot":"","sources":["../ts/Clones.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export type Props = unknown;
package/js/js/Props.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Props.js","sourceRoot":"","sources":["../ts/Props.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ export type Subscription = (() => void) & {
2
+ unsubscribe: () => any;
3
+ };
4
+ type Subscriber = (value?: any) => any;
5
+ export interface SubjectLike {
6
+ subscribe: (callback: (value?: any) => any) => any;
7
+ isSubject?: boolean;
8
+ }
9
+ export declare class Subject<T> implements SubjectLike {
10
+ isSubject: boolean;
11
+ subscribers: Subscriber[];
12
+ value?: any;
13
+ subscribe(callback: Subscriber): Subscription;
14
+ set(value: any): void;
15
+ next: (value: any) => void;
16
+ }
17
+ export {};
@@ -0,0 +1,43 @@
1
+ export class Subject {
2
+ isSubject = true;
3
+ subscribers = [];
4
+ value;
5
+ // unsubcount = 0 // 🔬 testing
6
+ subscribe(callback) {
7
+ this.subscribers.push(callback);
8
+ SubjectClass.globalSubs.push(callback); // 🔬 testing
9
+ SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value + 1);
10
+ const unsubscribe = () => {
11
+ unsubscribe.unsubscribe();
12
+ };
13
+ // Return a function to unsubscribe from the BehaviorSubject
14
+ unsubscribe.unsubscribe = () => {
15
+ removeSubFromArray(this.subscribers, callback);
16
+ removeSubFromArray(SubjectClass.globalSubs, callback); // 🔬 testing
17
+ SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value - 1);
18
+ // any double unsubscribes will be ignored
19
+ unsubscribe.unsubscribe = () => undefined;
20
+ };
21
+ return unsubscribe;
22
+ }
23
+ set(value) {
24
+ this.value = value;
25
+ // Notify all subscribers with the new value
26
+ this.subscribers.forEach((callback) => {
27
+ callback.value = value;
28
+ callback(value);
29
+ });
30
+ }
31
+ next = this.set;
32
+ }
33
+ function removeSubFromArray(subscribers, callback) {
34
+ const index = subscribers.indexOf(callback);
35
+ if (index !== -1) {
36
+ subscribers.splice(index, 1);
37
+ }
38
+ }
39
+ const SubjectClass = Subject;
40
+ SubjectClass.globalSubs = []; // 🔬 for testing
41
+ SubjectClass.globalSubCount$ = new Subject(); // for ease of debugging
42
+ SubjectClass.globalSubCount$.set(0);
43
+ //# sourceMappingURL=Subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subject.js","sourceRoot":"","sources":["../ts/Subject.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,OAAO;IAClB,SAAS,GAAG,IAAI,CAAA;IAChB,WAAW,GAAiB,EAAE,CAAA;IAC9B,KAAK,CAAM;IACX,+BAA+B;IAE/B,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,aAAa;QACpD,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QAE1E,MAAM,WAAW,GAAiB,GAAG,EAAE;YACrC,WAAW,CAAC,WAAW,EAAE,CAAA;QAC3B,CAAC,CAAA;QAED,4DAA4D;QAC5D,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE;YAC7B,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC9C,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA,CAAC,aAAa;YACnE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;YAE1E,0CAA0C;YAC1C,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,SAAS,CAAA;QAC3C,CAAC,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,KAAU;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;YACzC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;CAChB;AAED,SAAS,kBAAkB,CACzB,WAAyB,EACzB,QAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,OAGpB,CAAA;AACD,YAAY,CAAC,UAAU,GAAG,EAAE,CAAA,CAAC,iBAAiB;AAC9C,YAAY,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA,CAAC,wBAAwB;AACrE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA"}