treeloom 0.0.0-stage → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +91 -2
  3. package/browser/treeloom.js +11232 -0
  4. package/browser/treeloom.min.js +1 -0
  5. package/browser/treeloomRenderOnly.js +11115 -0
  6. package/browser/treeloomRenderOnly.min.js +1 -0
  7. package/dist/deflate/domItemToJson.d.ts +14 -0
  8. package/dist/deflate/domItemToJson.js +43 -0
  9. package/dist/deflate/domItemToJson.min.js +1 -0
  10. package/dist/deflate/index.d.ts +7 -0
  11. package/dist/deflate/index.js +19 -0
  12. package/dist/deflate/index.min.js +1 -0
  13. package/dist/deflate/removeEmptyProperties.d.ts +8 -0
  14. package/dist/deflate/removeEmptyProperties.js +43 -0
  15. package/dist/deflate/removeEmptyProperties.min.js +1 -0
  16. package/dist/diff/appliedSnapshot.d.ts +34 -0
  17. package/dist/diff/appliedSnapshot.js +134 -0
  18. package/dist/diff/appliedSnapshot.min.js +1 -0
  19. package/dist/diff/createChangeList.d.ts +9 -0
  20. package/dist/diff/createChangeList.js +44 -0
  21. package/dist/diff/createChangeList.min.js +1 -0
  22. package/dist/diff/domItemChanges.d.ts +9 -0
  23. package/dist/diff/domItemChanges.js +167 -0
  24. package/dist/diff/domItemChanges.min.js +1 -0
  25. package/dist/diff/domItemHasAttribute.d.ts +11 -0
  26. package/dist/diff/domItemHasAttribute.js +63 -0
  27. package/dist/diff/domItemHasAttribute.min.js +1 -0
  28. package/dist/diff/elementChanges.d.ts +10 -0
  29. package/dist/diff/elementChanges.js +151 -0
  30. package/dist/diff/elementChanges.min.js +1 -0
  31. package/dist/diff/elementHasAttribute.d.ts +10 -0
  32. package/dist/diff/elementHasAttribute.js +70 -0
  33. package/dist/diff/elementHasAttribute.min.js +1 -0
  34. package/dist/diff/getAssignedStyles.d.ts +9 -0
  35. package/dist/diff/getAssignedStyles.js +22 -0
  36. package/dist/diff/getAssignedStyles.min.js +1 -0
  37. package/dist/diff/index.d.ts +9 -0
  38. package/dist/diff/index.js +27 -0
  39. package/dist/diff/index.min.js +1 -0
  40. package/dist/diff/types.d.ts +17 -0
  41. package/dist/diff/types.js +8 -0
  42. package/dist/diff/types.min.js +1 -0
  43. package/dist/domItem/index.d.ts +34 -0
  44. package/dist/domItem/index.js +81 -0
  45. package/dist/domItem/index.min.js +1 -0
  46. package/dist/domItem/objects/addDomItemProperties.d.ts +7 -0
  47. package/dist/domItem/objects/addDomItemProperties.js +27 -0
  48. package/dist/domItem/objects/addDomItemProperties.min.js +1 -0
  49. package/dist/domItem/objects/createCoreItem.d.ts +9 -0
  50. package/dist/domItem/objects/createCoreItem.js +53 -0
  51. package/dist/domItem/objects/createCoreItem.min.js +1 -0
  52. package/dist/domItem/objects/createDomItem.d.ts +10 -0
  53. package/dist/domItem/objects/createDomItem.js +40 -0
  54. package/dist/domItem/objects/createDomItem.min.js +1 -0
  55. package/dist/domItem/objects/documentDomItem.d.ts +12 -0
  56. package/dist/domItem/objects/documentDomItem.js +36 -0
  57. package/dist/domItem/objects/documentDomItem.min.js +1 -0
  58. package/dist/domItem/objects/documentItem.d.ts +18 -0
  59. package/dist/domItem/objects/documentItem.js +40 -0
  60. package/dist/domItem/objects/documentItem.min.js +1 -0
  61. package/dist/domItem/objects/initChildren.d.ts +6 -0
  62. package/dist/domItem/objects/initChildren.js +44 -0
  63. package/dist/domItem/objects/initChildren.min.js +1 -0
  64. package/dist/domItem/objects/initRoot.d.ts +9 -0
  65. package/dist/domItem/objects/initRoot.js +32 -0
  66. package/dist/domItem/objects/initRoot.min.js +1 -0
  67. package/dist/domItem/query/gatherChildItems.d.ts +12 -0
  68. package/dist/domItem/query/gatherChildItems.js +19 -0
  69. package/dist/domItem/query/gatherChildItems.min.js +1 -0
  70. package/dist/domItem/query/getChildTest.d.ts +8 -0
  71. package/dist/domItem/query/getChildTest.js +15 -0
  72. package/dist/domItem/query/getChildTest.min.js +1 -0
  73. package/dist/domItem/query/getChildrenByClass.d.ts +11 -0
  74. package/dist/domItem/query/getChildrenByClass.js +26 -0
  75. package/dist/domItem/query/getChildrenByClass.min.js +1 -0
  76. package/dist/domItem/query/getChildrenByName.d.ts +9 -0
  77. package/dist/domItem/query/getChildrenByName.js +23 -0
  78. package/dist/domItem/query/getChildrenByName.min.js +1 -0
  79. package/dist/domItem/query/getChildrenFromAttribute.d.ts +13 -0
  80. package/dist/domItem/query/getChildrenFromAttribute.js +28 -0
  81. package/dist/domItem/query/getChildrenFromAttribute.min.js +1 -0
  82. package/dist/domItem/query/getItemByElement.d.ts +11 -0
  83. package/dist/domItem/query/getItemByElement.js +29 -0
  84. package/dist/domItem/query/getItemByElement.min.js +1 -0
  85. package/dist/domItem/query/getParentsByClass.d.ts +12 -0
  86. package/dist/domItem/query/getParentsByClass.js +40 -0
  87. package/dist/domItem/query/getParentsByClass.min.js +1 -0
  88. package/dist/domItem/query/getParentsByName.d.ts +9 -0
  89. package/dist/domItem/query/getParentsByName.js +23 -0
  90. package/dist/domItem/query/getParentsByName.min.js +1 -0
  91. package/dist/domItem/query/getParentsByTagName.d.ts +9 -0
  92. package/dist/domItem/query/getParentsByTagName.js +23 -0
  93. package/dist/domItem/query/getParentsByTagName.min.js +1 -0
  94. package/dist/domItem/query/getParentsFromAttribute.d.ts +13 -0
  95. package/dist/domItem/query/getParentsFromAttribute.js +39 -0
  96. package/dist/domItem/query/getParentsFromAttribute.min.js +1 -0
  97. package/dist/domItem/traits/defineTrait.d.ts +10 -0
  98. package/dist/domItem/traits/defineTrait.js +26 -0
  99. package/dist/domItem/traits/defineTrait.min.js +1 -0
  100. package/dist/domItem/traits/definitions.d.ts +7 -0
  101. package/dist/domItem/traits/definitions.js +20 -0
  102. package/dist/domItem/traits/definitions.min.js +1 -0
  103. package/dist/domItem/traits/getNonSerializableKeys.d.ts +9 -0
  104. package/dist/domItem/traits/getNonSerializableKeys.js +25 -0
  105. package/dist/domItem/traits/getNonSerializableKeys.min.js +1 -0
  106. package/dist/domItem/traits/getTraitDefinition.d.ts +7 -0
  107. package/dist/domItem/traits/getTraitDefinition.js +20 -0
  108. package/dist/domItem/traits/getTraitDefinition.min.js +1 -0
  109. package/dist/domItem/traits/hasTrait.d.ts +8 -0
  110. package/dist/domItem/traits/hasTrait.js +15 -0
  111. package/dist/domItem/traits/hasTrait.min.js +1 -0
  112. package/dist/domItem/traits/hasTraits.d.ts +9 -0
  113. package/dist/domItem/traits/hasTraits.js +16 -0
  114. package/dist/domItem/traits/hasTraits.min.js +1 -0
  115. package/dist/domItem/traits/isDomItem.d.ts +8 -0
  116. package/dist/domItem/traits/isDomItem.js +21 -0
  117. package/dist/domItem/traits/isDomItem.min.js +1 -0
  118. package/dist/domItem/traits/withTrait.d.ts +11 -0
  119. package/dist/domItem/traits/withTrait.js +30 -0
  120. package/dist/domItem/traits/withTrait.min.js +1 -0
  121. package/dist/domItem/tree/appendChild.d.ts +8 -0
  122. package/dist/domItem/tree/appendChild.js +19 -0
  123. package/dist/domItem/tree/appendChild.min.js +1 -0
  124. package/dist/domItem/tree/getItemByPath.d.ts +10 -0
  125. package/dist/domItem/tree/getItemByPath.js +23 -0
  126. package/dist/domItem/tree/getItemByPath.min.js +1 -0
  127. package/dist/domItem/tree/getItemPath.d.ts +9 -0
  128. package/dist/domItem/tree/getItemPath.js +31 -0
  129. package/dist/domItem/tree/getItemPath.min.js +1 -0
  130. package/dist/domItem/tree/getTopParentItem.d.ts +8 -0
  131. package/dist/domItem/tree/getTopParentItem.js +29 -0
  132. package/dist/domItem/tree/getTopParentItem.min.js +1 -0
  133. package/dist/domItem/tree/insertChild.d.ts +11 -0
  134. package/dist/domItem/tree/insertChild.js +22 -0
  135. package/dist/domItem/tree/insertChild.min.js +1 -0
  136. package/dist/domItem/tree/itemIdIndex.d.ts +43 -0
  137. package/dist/domItem/tree/itemIdIndex.js +118 -0
  138. package/dist/domItem/tree/itemIdIndex.min.js +1 -0
  139. package/dist/domItem/tree/removeChild.d.ts +8 -0
  140. package/dist/domItem/tree/removeChild.js +21 -0
  141. package/dist/domItem/tree/removeChild.min.js +1 -0
  142. package/dist/domItem/tree/setParentItemReferences.d.ts +7 -0
  143. package/dist/domItem/tree/setParentItemReferences.js +24 -0
  144. package/dist/domItem/tree/setParentItemReferences.min.js +1 -0
  145. package/dist/domItem/types.d.ts +131 -0
  146. package/dist/domItem/types.js +8 -0
  147. package/dist/domItem/types.min.js +1 -0
  148. package/dist/events/functions/activateListener.d.ts +10 -0
  149. package/dist/events/functions/activateListener.js +45 -0
  150. package/dist/events/functions/activateListener.min.js +1 -0
  151. package/dist/events/functions/addEventListener.d.ts +23 -0
  152. package/dist/events/functions/addEventListener.js +54 -0
  153. package/dist/events/functions/addEventListener.min.js +1 -0
  154. package/dist/events/functions/applyActiveListeners.d.ts +9 -0
  155. package/dist/events/functions/applyActiveListeners.js +52 -0
  156. package/dist/events/functions/applyActiveListeners.min.js +1 -0
  157. package/dist/events/functions/assignListener.d.ts +12 -0
  158. package/dist/events/functions/assignListener.js +39 -0
  159. package/dist/events/functions/assignListener.min.js +1 -0
  160. package/dist/events/functions/bindAllListeners.d.ts +10 -0
  161. package/dist/events/functions/bindAllListeners.js +28 -0
  162. package/dist/events/functions/bindAllListeners.min.js +1 -0
  163. package/dist/events/functions/bindElementListeners.d.ts +7 -0
  164. package/dist/events/functions/bindElementListeners.js +34 -0
  165. package/dist/events/functions/bindElementListeners.min.js +1 -0
  166. package/dist/events/functions/bindListeners.d.ts +9 -0
  167. package/dist/events/functions/bindListeners.js +23 -0
  168. package/dist/events/functions/bindListeners.min.js +1 -0
  169. package/dist/events/functions/deactivateListener.d.ts +13 -0
  170. package/dist/events/functions/deactivateListener.js +58 -0
  171. package/dist/events/functions/deactivateListener.min.js +1 -0
  172. package/dist/events/functions/deactivateListeners.d.ts +7 -0
  173. package/dist/events/functions/deactivateListeners.js +22 -0
  174. package/dist/events/functions/deactivateListeners.min.js +1 -0
  175. package/dist/events/functions/findEventListener.d.ts +22 -0
  176. package/dist/events/functions/findEventListener.js +61 -0
  177. package/dist/events/functions/findEventListener.min.js +1 -0
  178. package/dist/events/functions/fullAddEventListener.d.ts +20 -0
  179. package/dist/events/functions/fullAddEventListener.js +45 -0
  180. package/dist/events/functions/fullAddEventListener.min.js +1 -0
  181. package/dist/events/functions/fullRemoveEventListener.d.ts +22 -0
  182. package/dist/events/functions/fullRemoveEventListener.js +37 -0
  183. package/dist/events/functions/fullRemoveEventListener.min.js +1 -0
  184. package/dist/events/functions/listenerOptions.d.ts +12 -0
  185. package/dist/events/functions/listenerOptions.js +31 -0
  186. package/dist/events/functions/listenerOptions.min.js +1 -0
  187. package/dist/events/functions/makeEventHandler.d.ts +10 -0
  188. package/dist/events/functions/makeEventHandler.js +23 -0
  189. package/dist/events/functions/makeEventHandler.min.js +1 -0
  190. package/dist/events/functions/makeForwardingListener.d.ts +11 -0
  191. package/dist/events/functions/makeForwardingListener.js +46 -0
  192. package/dist/events/functions/makeForwardingListener.min.js +1 -0
  193. package/dist/events/functions/receiveForwardedEvent.d.ts +23 -0
  194. package/dist/events/functions/receiveForwardedEvent.js +40 -0
  195. package/dist/events/functions/receiveForwardedEvent.min.js +1 -0
  196. package/dist/events/functions/registerListener.d.ts +11 -0
  197. package/dist/events/functions/registerListener.js +25 -0
  198. package/dist/events/functions/registerListener.min.js +1 -0
  199. package/dist/events/functions/registerListeners.d.ts +10 -0
  200. package/dist/events/functions/registerListeners.js +26 -0
  201. package/dist/events/functions/registerListeners.min.js +1 -0
  202. package/dist/events/functions/removeEventListener.d.ts +18 -0
  203. package/dist/events/functions/removeEventListener.js +42 -0
  204. package/dist/events/functions/removeEventListener.min.js +1 -0
  205. package/dist/events/functions/retrieveListener.d.ts +14 -0
  206. package/dist/events/functions/retrieveListener.js +39 -0
  207. package/dist/events/functions/retrieveListener.min.js +1 -0
  208. package/dist/events/functions/revokeActiveListeners.d.ts +12 -0
  209. package/dist/events/functions/revokeActiveListeners.js +54 -0
  210. package/dist/events/functions/revokeActiveListeners.min.js +1 -0
  211. package/dist/events/functions/setForwardEvents.d.ts +11 -0
  212. package/dist/events/functions/setForwardEvents.js +26 -0
  213. package/dist/events/functions/setForwardEvents.min.js +1 -0
  214. package/dist/events/functions/unassignListener.d.ts +12 -0
  215. package/dist/events/functions/unassignListener.js +32 -0
  216. package/dist/events/functions/unassignListener.min.js +1 -0
  217. package/dist/events/index.d.ts +37 -0
  218. package/dist/events/index.js +72 -0
  219. package/dist/events/index.min.js +1 -0
  220. package/dist/events/objects/createEventListener.d.ts +13 -0
  221. package/dist/events/objects/createEventListener.js +30 -0
  222. package/dist/events/objects/createEventListener.min.js +1 -0
  223. package/dist/events/objects/createEventProxy.d.ts +10 -0
  224. package/dist/events/objects/createEventProxy.js +48 -0
  225. package/dist/events/objects/createEventProxy.min.js +1 -0
  226. package/dist/events/objects/createEventResponder.d.ts +8 -0
  227. package/dist/events/objects/createEventResponder.js +27 -0
  228. package/dist/events/objects/createEventResponder.min.js +1 -0
  229. package/dist/events/objects/options/getListenerOptions.d.ts +6 -0
  230. package/dist/events/objects/options/getListenerOptions.js +22 -0
  231. package/dist/events/objects/options/getListenerOptions.min.js +1 -0
  232. package/dist/events/objects/options/numberToOptions.d.ts +8 -0
  233. package/dist/events/objects/options/numberToOptions.js +21 -0
  234. package/dist/events/objects/options/numberToOptions.min.js +1 -0
  235. package/dist/events/objects/options/optionsToNumber.d.ts +9 -0
  236. package/dist/events/objects/options/optionsToNumber.js +27 -0
  237. package/dist/events/objects/options/optionsToNumber.min.js +1 -0
  238. package/dist/events/objects/options.d.ts +6 -0
  239. package/dist/events/objects/options.js +24 -0
  240. package/dist/events/objects/options.min.js +1 -0
  241. package/dist/events/types.d.ts +87 -0
  242. package/dist/events/types.js +8 -0
  243. package/dist/events/types.min.js +1 -0
  244. package/dist/inflate/index.d.ts +4 -0
  245. package/dist/inflate/index.js +17 -0
  246. package/dist/inflate/index.min.js +1 -0
  247. package/dist/inflate/jsonToDomItem.d.ts +7 -0
  248. package/dist/inflate/jsonToDomItem.js +30 -0
  249. package/dist/inflate/jsonToDomItem.min.js +1 -0
  250. package/dist/main.d.ts +2 -0
  251. package/dist/main.js +24 -0
  252. package/dist/main.min.js +1 -0
  253. package/dist/render/generateElement.d.ts +7 -0
  254. package/dist/render/generateElement.js +41 -0
  255. package/dist/render/generateElement.min.js +1 -0
  256. package/dist/render/index.d.ts +9 -0
  257. package/dist/render/index.js +27 -0
  258. package/dist/render/index.min.js +1 -0
  259. package/dist/render/reconcile.d.ts +16 -0
  260. package/dist/render/reconcile.js +169 -0
  261. package/dist/render/reconcile.min.js +1 -0
  262. package/dist/render/renderHtml.d.ts +16 -0
  263. package/dist/render/renderHtml.js +57 -0
  264. package/dist/render/renderHtml.min.js +1 -0
  265. package/dist/render/updateChildNodes.d.ts +7 -0
  266. package/dist/render/updateChildNodes.js +53 -0
  267. package/dist/render/updateChildNodes.min.js +1 -0
  268. package/dist/render/updateElement.d.ts +14 -0
  269. package/dist/render/updateElement.js +113 -0
  270. package/dist/render/updateElement.min.js +1 -0
  271. package/dist/render/updateElements.d.ts +9 -0
  272. package/dist/render/updateElements.js +33 -0
  273. package/dist/render/updateElements.min.js +1 -0
  274. package/dist/renderOnly.d.ts +2 -0
  275. package/dist/renderOnly.js +27 -0
  276. package/dist/renderOnly.min.js +1 -0
  277. package/dist/sync/index.d.ts +6 -0
  278. package/dist/sync/index.js +21 -0
  279. package/dist/sync/index.min.js +1 -0
  280. package/dist/sync/updateChildren.d.ts +7 -0
  281. package/dist/sync/updateChildren.js +38 -0
  282. package/dist/sync/updateChildren.min.js +1 -0
  283. package/dist/sync/updateDomItem.d.ts +8 -0
  284. package/dist/sync/updateDomItem.js +53 -0
  285. package/dist/sync/updateDomItem.min.js +1 -0
  286. package/dist/sync/updateDomItems.d.ts +9 -0
  287. package/dist/sync/updateDomItems.js +33 -0
  288. package/dist/sync/updateDomItems.min.js +1 -0
  289. package/package.json +74 -4
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ /**
10
+ * For each child of this item, set the parentItem references.
11
+ * @param item - The DomItem to have parent references applied.
12
+ */
13
+ const setParentItemReferences = item => {
14
+ if (!item.children || !item.children.length) {
15
+ item.children = [];
16
+ return item;
17
+ }
18
+ item.children.forEach(child => {
19
+ child.parentItem = item;
20
+ setParentItemReferences(child);
21
+ });
22
+ return item;
23
+ };
24
+ exports.default = setParentItemReferences;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const setParentItemReferences=e=>e.children&&e.children.length?(e.children.forEach(t=>{t.parentItem=e,setParentItemReferences(t)}),e):(e.children=[],e);exports.default=setParentItemReferences;
@@ -0,0 +1,131 @@
1
+ import type { EventListeners, EventName, EventResponder, ForwardEventsFunction, ListenerFunction } from '../events/types';
2
+ /** CSS property names (written in camelCase, like element.style) and their values. */
3
+ export type StyleValues = {
4
+ [property: string]: string;
5
+ };
6
+ /** A value an attribute can have. Objects are only used for the style attribute. */
7
+ export type AttributeValue = string | number | boolean | StyleValues | null | undefined;
8
+ /** All the HTML attributes of an element (className, style, id, innerHTML, data attributes, ...). */
9
+ export type Attributes = {
10
+ className?: string;
11
+ style?: StyleValues;
12
+ /** The native custom element name (a customized built-in): <button is="fancy-button">. */
13
+ is?: string;
14
+ [attribute: string]: AttributeValue;
15
+ };
16
+ /** A real node which a DomItem is mirrored onto. */
17
+ export type DomElement = HTMLElement | Text | Comment | Document;
18
+ /** The path from the root to an item: each level's index among its parent's children, top-down. An empty array
19
+ * means the item is the root itself. See getItemPath, getItemByPath. */
20
+ export type ItemPath = number[];
21
+ /** The parent of the root DomItem is an empty object (a null parent means the item is detached). */
22
+ export type EmptyParent = Record<string, never>;
23
+ /**
24
+ * The traits an item can have, and the data each one puts on it. treeloom has one - render - and other libraries
25
+ * add theirs by declaration merging:
26
+ *
27
+ * declare module 'treeloom/dist/domItem/types' {
28
+ * interface TraitRegistry { 'matrix.row': { axis: 'y' } }
29
+ * }
30
+ */
31
+ export interface TraitRegistry {
32
+ /** The item has a place for a real element (it stays null until the item is rendered). */
33
+ render: RenderProperties;
34
+ }
35
+ /** The name of a trait. */
36
+ export type TraitName = keyof TraitRegistry;
37
+ /** The traits an item has: a map of trait name to true. */
38
+ export type HasMap = {
39
+ [Trait in TraitName]?: true;
40
+ };
41
+ /** What the render trait puts on an item. */
42
+ export type RenderProperties = {
43
+ /** The real node this item is mirrored onto, or null while there is none. */
44
+ element: DomElement | null;
45
+ /** Generated: the listeners which are attached to the element, by event name. */
46
+ activeListeners?: Record<EventName, Record<number, EventResponder[]>>;
47
+ };
48
+ type UnionToIntersection<Union> = (Union extends unknown ? (member: Union) => void : never) extends (member: infer All) => void ? All : never;
49
+ /** What an item gains from having all of these traits: they are in its has map, and their data is on it. */
50
+ export type WithTraits<Trait extends TraitName> = {
51
+ has: {
52
+ [Name in Trait]: true;
53
+ };
54
+ } & UnionToIntersection<TraitRegistry[Trait]>;
55
+ /** The properties every item has, whatever traits it carries. */
56
+ export type CoreProperties = {
57
+ attributes: Attributes;
58
+ /** All the events to be registered for the element. */
59
+ eventListeners: Record<EventName, EventListeners>;
60
+ /** The traits this item has (see TraitRegistry). */
61
+ has: HasMap;
62
+ /** Assigned once at creation (see createCoreItem) and never reassigned, including across a clone or a JSON
63
+ * round-trip: the stable identity getItemById resolves by, independent of the item's current position in
64
+ * the tree (which a client's own tree may not match exactly - see ForwardedEvent's itemId). */
65
+ id: number;
66
+ /** Property names to leave out when converting to json. */
67
+ jsonExclusions: string[];
68
+ /** Any document node name: a tag name, #text, #comment or #document. */
69
+ nodeName: string;
70
+ /** The text of a text or comment node, null for elements. */
71
+ nodeValue: string | null;
72
+ /** Attach a child to this item. */
73
+ appendChild(child: CoreItem): CoreItem;
74
+ /** Detach a child from this item (and its element, when it has one). */
75
+ removeChild(child: CoreItem): CoreItem[];
76
+ };
77
+ /**
78
+ * The generic item: one node of a tree, with the traits it carries. A back-end item which is never rendered is a
79
+ * CoreItem; use hasTrait to find out what else it has.
80
+ */
81
+ export type CoreItem = CoreProperties & {
82
+ children: CoreItem[];
83
+ /** The parent item: an empty object for the root, null for an item which is not attached. */
84
+ parentItem: CoreItem | EmptyParent | null;
85
+ };
86
+ /**
87
+ * An item with the render trait: the item treeloom mirrors onto a real element (render) and reads back from one
88
+ * (sync). Its children have the render trait too.
89
+ */
90
+ export type DomItem = CoreProperties & WithTraits<'render'> & {
91
+ children: DomItem[];
92
+ parentItem: DomItem | EmptyParent | null;
93
+ appendChild(child: DomItem): DomItem;
94
+ removeChild(child: DomItem): DomItem[];
95
+ };
96
+ /**
97
+ * What can be given to build an item: any of its properties (the children may be plain configs as well), plus any
98
+ * custom data. Whatever is left out gets its default.
99
+ */
100
+ export type DomItemConfig = Partial<Omit<CoreProperties, 'appendChild' | 'removeChild'>> & Partial<RenderProperties> & {
101
+ children?: DomItemConfig[];
102
+ parentItem?: CoreItem | EmptyParent | null;
103
+ [custom: string]: unknown;
104
+ };
105
+ /** The extra properties of the root of a Virtual DOM. */
106
+ export type RootProperties = {
107
+ /** Registered listener functions, by name. */
108
+ eventActions: Record<string, ListenerFunction>;
109
+ /** Set with setForwardEvents to switch into render-only mode: every listener name resolves to a forwarder which
110
+ * sends this function an envelope instead of running local logic. See retrieveListener. */
111
+ forwardEvents?: ForwardEventsFunction;
112
+ head: DomItem;
113
+ body: DomItem;
114
+ };
115
+ /** The root of a Virtual DOM (the #document): the head and body items and the registered named listeners. */
116
+ export type DomItemRoot = DomItem & RootProperties;
117
+ /** What a trait is at runtime: which properties it puts on an item, and whether they belong in json. */
118
+ export type TraitDefinition = {
119
+ /** The properties the trait puts on an item. */
120
+ keys: string[];
121
+ /** False for properties which only make sense where the item lives (an element): they are left out of json. */
122
+ serializable?: boolean;
123
+ /** The data a new item gets when it is given the trait. */
124
+ defaults?: () => Record<string, unknown>;
125
+ };
126
+ /**
127
+ * Decides which items below (and including) an item are wanted. It receives the item being tested and everything
128
+ * gathered so far, and returns the gathered results with the item added if it qualifies.
129
+ */
130
+ export type ChildTest = (item: DomItem, gatheredResults: DomItem[]) => DomItem[];
131
+ export {};
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -0,0 +1,10 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName, ListenerDescriptor } from '../types';
3
+ /**
4
+ * Activate listener by pushing it to activeListeners.
5
+ * @param eventName
6
+ * @param eventListener
7
+ * @param item
8
+ */
9
+ declare const activateListener: (eventName: EventName, eventListener: ListenerDescriptor, item: DomItem) => DomItem;
10
+ export default activateListener;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const getTopParentItem_1 = __importDefault(require("../../domItem/tree/getTopParentItem"));
15
+ const makeEventHandler_1 = __importDefault(require("./makeEventHandler"));
16
+ const createEventResponder_1 = __importDefault(require("../objects/createEventResponder"));
17
+ const getListenerOptions_1 = __importDefault(require("../objects/options/getListenerOptions"));
18
+ const optionsToNumber_1 = __importDefault(require("../objects/options/optionsToNumber"));
19
+ const retrieveListener_1 = __importDefault(require("./retrieveListener"));
20
+ /**
21
+ * Activate listener by pushing it to activeListeners.
22
+ * @param eventName
23
+ * @param eventListener
24
+ * @param item
25
+ */
26
+ const activateListener = (eventName, eventListener, item) => {
27
+ const listenerOptions = (0, getListenerOptions_1.default)();
28
+ if (typeof item.activeListeners === 'undefined') {
29
+ item.activeListeners = {};
30
+ }
31
+ if (!(eventName in item.activeListeners)) {
32
+ item.activeListeners[eventName] = {};
33
+ }
34
+ const optionIdentifier = (0, optionsToNumber_1.default)(listenerOptions, eventListener.listenerOptions);
35
+ if (!(optionIdentifier in item.activeListeners[eventName])) {
36
+ item.activeListeners[eventName][optionIdentifier] = [];
37
+ }
38
+ const listenerFunc = (0, retrieveListener_1.default)(eventListener.listenerFunc, (0, getTopParentItem_1.default)(item));
39
+ const eventHandler = (0, makeEventHandler_1.default)(listenerFunc, item, eventListener.listenerArgs);
40
+ const eventResponder = (0, createEventResponder_1.default)(eventHandler, !!(optionIdentifier & listenerOptions.signal));
41
+ item.activeListeners[eventName][optionIdentifier].push(eventResponder);
42
+ eventListener.activeResponder = eventResponder;
43
+ return item;
44
+ };
45
+ exports.default = activateListener;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const getTopParentItem_1=__importDefault(require("../../domItem/tree/getTopParentItem")),makeEventHandler_1=__importDefault(require("./makeEventHandler")),createEventResponder_1=__importDefault(require("../objects/createEventResponder")),getListenerOptions_1=__importDefault(require("../objects/options/getListenerOptions")),optionsToNumber_1=__importDefault(require("../objects/options/optionsToNumber")),retrieveListener_1=__importDefault(require("./retrieveListener")),activateListener=(e,t,r)=>{const i=(0,getListenerOptions_1.default)();void 0===r.activeListeners&&(r.activeListeners={}),e in r.activeListeners||(r.activeListeners[e]={});const n=(0,optionsToNumber_1.default)(i,t.listenerOptions);n in r.activeListeners[e]||(r.activeListeners[e][n]=[]);const s=(0,retrieveListener_1.default)(t.listenerFunc,(0,getTopParentItem_1.default)(r)),o=(0,makeEventHandler_1.default)(s,r,t.listenerArgs),a=(0,createEventResponder_1.default)(o,!!(n&i.signal));return r.activeListeners[e][n].push(a),t.activeResponder=a,r};exports.default=activateListener;
@@ -0,0 +1,23 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName, ListenerFunction, ListenerOptions } from '../types';
3
+ /**
4
+ * Create an EventListener descriptor and push it onto a DomItem's eventListeners for the given event name.
5
+ * Does not attach anything to the real element - see {@link bindListeners} or {@link fullAddEventListener} for that.
6
+ *
7
+ * item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
8
+ * piped directly - see {@link fullAddEventListener} for an example.
9
+ *
10
+ * Prefer calling this through {@link fullAddEventListener} with a registered name (see {@link registerListener}).
11
+ * Passing a raw function directly here works, but logs a console warning - see {@link EventListener}'s
12
+ * listenerFunc property for what that discretionary path gives up.
13
+ * @param eventName - The name of the trigger event (e.g. 'click').
14
+ * @param listenerFunction - Preferably a name registered via
15
+ * {@link registerListener}; a raw listener function is also accepted, at the caller's discretion.
16
+ * @param customArgs - Additional args passed through to the listener when called.
17
+ * @param options - Options to be used when the listener is attached
18
+ * to the element.
19
+ * @param item - The DomItem which will receive the event listener.
20
+ * @returns The same DomItem, with the new EventListener descriptor appended.
21
+ */
22
+ declare const addEventListener: (eventName: EventName, listenerFunction: string | ListenerFunction, customArgs: object | null | undefined, options: ListenerOptions | null | undefined, item: DomItem) => DomItem;
23
+ export default addEventListener;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const createEventListener_1 = __importDefault(require("../objects/createEventListener"));
15
+ /**
16
+ * Create an EventListener descriptor and push it onto a DomItem's eventListeners for the given event name.
17
+ * Does not attach anything to the real element - see {@link bindListeners} or {@link fullAddEventListener} for that.
18
+ *
19
+ * item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
20
+ * piped directly - see {@link fullAddEventListener} for an example.
21
+ *
22
+ * Prefer calling this through {@link fullAddEventListener} with a registered name (see {@link registerListener}).
23
+ * Passing a raw function directly here works, but logs a console warning - see {@link EventListener}'s
24
+ * listenerFunc property for what that discretionary path gives up.
25
+ * @param eventName - The name of the trigger event (e.g. 'click').
26
+ * @param listenerFunction - Preferably a name registered via
27
+ * {@link registerListener}; a raw listener function is also accepted, at the caller's discretion.
28
+ * @param customArgs - Additional args passed through to the listener when called.
29
+ * @param options - Options to be used when the listener is attached
30
+ * to the element.
31
+ * @param item - The DomItem which will receive the event listener.
32
+ * @returns The same DomItem, with the new EventListener descriptor appended.
33
+ */
34
+ const addEventListener = (eventName, listenerFunction, customArgs, options, item) => {
35
+ customArgs = customArgs ?? null;
36
+ options = options ?? false;
37
+ if (typeof listenerFunction === 'function') {
38
+ console.warn(`addEventListener: attaching a raw function directly for "${eventName}" instead of a name registered via ` + 'registerListener. This works, but the listener will not be discoverable via eventActions, cannot be ' + 'shared by name across DomItems, and will be silently dropped by domItemToJson (JSON.stringify omits ' + 'function values). Prefer fullAddEventListener with a name unless this one-off behavior is intentional.');
39
+ }
40
+ if (typeof item.eventListeners === 'undefined') {
41
+ item.eventListeners = {};
42
+ }
43
+ if (typeof item.eventListeners[eventName] === 'undefined') {
44
+ item.eventListeners[eventName] = [];
45
+ }
46
+ // check if the listener already exists and don't add if it does
47
+ item.eventListeners[eventName].push((0, createEventListener_1.default)({
48
+ listenerFunc: listenerFunction,
49
+ listenerArgs: customArgs,
50
+ listenerOptions: options
51
+ }));
52
+ return item;
53
+ };
54
+ exports.default = addEventListener;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const createEventListener_1=__importDefault(require("../objects/createEventListener")),addEventListener=(e,t,n,s,i)=>(n=n??null,s=s??!1,"function"==typeof t&&console.warn(`addEventListener: attaching a raw function directly for "${e}" instead of a name registered via registerListener. This works, but the listener will not be discoverable via eventActions, cannot be shared by name across DomItems, and will be silently dropped by domItemToJson (JSON.stringify omits function values). Prefer fullAddEventListener with a name unless this one-off behavior is intentional.`),void 0===i.eventListeners&&(i.eventListeners={}),void 0===i.eventListeners[e]&&(i.eventListeners[e]=[]),i.eventListeners[e].push((0,createEventListener_1.default)({listenerFunc:t,listenerArgs:n,listenerOptions:s})),i);exports.default=addEventListener;
@@ -0,0 +1,9 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName } from '../types';
3
+ /**
4
+ * Apply each active event listener for event type to the DOM Item's element.
5
+ * @param eventName
6
+ * @param item
7
+ */
8
+ declare const applyActiveListeners: (eventName: EventName, item: DomItem) => DomItem;
9
+ export default applyActiveListeners;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const si_funciona_1 = __importDefault(require("si-funciona"));
15
+ const getListenerOptions_1 = __importDefault(require("../objects/options/getListenerOptions"));
16
+ const numberToOptions_1 = __importDefault(require("../objects/options/numberToOptions"));
17
+ const assignListener_1 = __importDefault(require("./assignListener"));
18
+ const createEventProxy_1 = __importDefault(require("../objects/createEventProxy"));
19
+ /**
20
+ * Apply each active event listener for event type to the DOM Item's element.
21
+ * @param eventName
22
+ * @param item
23
+ */
24
+ const applyActiveListeners = (eventName, item) => {
25
+ const listenerOptions = (0, getListenerOptions_1.default)();
26
+ const eventOptions = si_funciona_1.default.dotGet(item, `activeListeners.${eventName}`);
27
+ if (eventOptions === null) {
28
+ return item;
29
+ }
30
+ si_funciona_1.default.objectKeys(eventOptions).forEach(binaryOptions => {
31
+ const optionsToUse = (0, numberToOptions_1.default)(listenerOptions, parseInt(binaryOptions));
32
+ const usesSignal = !!optionsToUse.signal;
33
+ if (!usesSignal) {
34
+ // Abort signal must be undefined if it is not required.
35
+ delete optionsToUse.signal;
36
+ }
37
+ ;
38
+ item.activeListeners[eventName][Number(binaryOptions)].forEach(eventResponder => {
39
+ if (eventResponder.assignedHandler) {
40
+ // already attached to the element
41
+ return;
42
+ }
43
+ const finalOptions = usesSignal ? Object.assign({}, optionsToUse, {
44
+ signal: eventResponder.abort.signal
45
+ }) : optionsToUse;
46
+ eventResponder.assignedHandler = e => eventResponder.handler((0, createEventProxy_1.default)(e, item));
47
+ (0, assignListener_1.default)(eventName, item.element, eventResponder.assignedHandler, finalOptions);
48
+ });
49
+ });
50
+ return item;
51
+ };
52
+ exports.default = applyActiveListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const si_funciona_1=__importDefault(require("si-funciona")),getListenerOptions_1=__importDefault(require("../objects/options/getListenerOptions")),numberToOptions_1=__importDefault(require("../objects/options/numberToOptions")),assignListener_1=__importDefault(require("./assignListener")),createEventProxy_1=__importDefault(require("../objects/createEventProxy")),applyActiveListeners=(e,t)=>{const n=(0,getListenerOptions_1.default)(),s=si_funciona_1.default.dotGet(t,`activeListeners.${e}`);return null===s||si_funciona_1.default.objectKeys(s).forEach(s=>{const i=(0,numberToOptions_1.default)(n,parseInt(s)),r=!!i.signal;r||delete i.signal,t.activeListeners[e][Number(s)].forEach(n=>{if(n.assignedHandler)return;const s=r?Object.assign({},i,{signal:n.abort.signal}):i;n.assignedHandler=e=>n.handler((0,createEventProxy_1.default)(e,t)),(0,assignListener_1.default)(e,t.element,n.assignedHandler,s)})}),t};exports.default=applyActiveListeners;
@@ -0,0 +1,12 @@
1
+ import type { EventHandler, ListenerOptions, ListenerTarget } from '../types';
2
+ /**
3
+ * Provide compatibility for assigning listeners.
4
+ * @param trigger - The name of the event which will trigger the listenerFunction on the element. (keyof HTMLElementEventMap)
5
+ * @param elem - An element to append the listener onto
6
+ * @param fn - The function which will be invoked when the
7
+ * event is triggered
8
+ * @param options - Additional options to how the event will be
9
+ * fired
10
+ */
11
+ declare const assignListener: (trigger: string, elem: ListenerTarget, fn: EventHandler, options?: ListenerOptions) => EventHandler;
12
+ export default assignListener;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const listenerOptions_1 = __importDefault(require("./listenerOptions"));
15
+ /**
16
+ * Provide compatibility for assigning listeners.
17
+ * @param trigger - The name of the event which will trigger the listenerFunction on the element. (keyof HTMLElementEventMap)
18
+ * @param elem - An element to append the listener onto
19
+ * @param fn - The function which will be invoked when the
20
+ * event is triggered
21
+ * @param options - Additional options to how the event will be
22
+ * fired
23
+ */
24
+ const assignListener = (trigger, elem, fn, options = false) => {
25
+ // Attaching a listener may be done differently based on the browser support
26
+ if (elem.addEventListener) {
27
+ // Latest support is provided from addEventListener with the options parameter varying slightly
28
+ elem.addEventListener(trigger, fn, (0, listenerOptions_1.default)(options));
29
+ } else if (elem.attachEvent) {
30
+ // Older browsers, especially Internet Explorer
31
+ elem.attachEvent(`on${trigger}`, fn);
32
+ } else {
33
+ // General support for adding a new function onto the element which can be called to trigger the function
34
+ ;
35
+ elem[`on${trigger}`] = fn;
36
+ }
37
+ return fn;
38
+ };
39
+ exports.default = assignListener;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const listenerOptions_1=__importDefault(require("./listenerOptions")),assignListener=(e,t,n,s=!1)=>(t.addEventListener?t.addEventListener(e,n,(0,listenerOptions_1.default)(s)):t.attachEvent?t.attachEvent(`on${e}`,n):t[`on${e}`]=n,n);exports.default=assignListener;
@@ -0,0 +1,10 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Based on the eventListeners property of the provided item, bind the listeners to the associated element property
4
+ * for each item in the domEvents.DomItem structure.
5
+ * WARNING: This is a recursive function.
6
+ * @param item - The DomItem with an associated HTMLElement to have a listener
7
+ * assigned
8
+ */
9
+ declare const bindAllListeners: (item: DomItem) => DomItem;
10
+ export default bindAllListeners;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const bindListeners_1 = __importDefault(require("./bindListeners"));
15
+ /**
16
+ * Based on the eventListeners property of the provided item, bind the listeners to the associated element property
17
+ * for each item in the domEvents.DomItem structure.
18
+ * WARNING: This is a recursive function.
19
+ * @param item - The DomItem with an associated HTMLElement to have a listener
20
+ * assigned
21
+ */
22
+ const bindAllListeners = item => {
23
+ for (const child of item.children) {
24
+ bindAllListeners(child);
25
+ }
26
+ return (0, bindListeners_1.default)(item);
27
+ };
28
+ exports.default = bindAllListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const bindListeners_1=__importDefault(require("./bindListeners")),bindAllListeners=e=>{for(const t of e.children)bindAllListeners(t);return(0,bindListeners_1.default)(e)};exports.default=bindAllListeners;
@@ -0,0 +1,7 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Receive a DomItem with eventListeners and apply the event listeners onto the Dom element.
4
+ * @param item - The DomItem which has eventListeners to apply to its element
5
+ */
6
+ declare const bindElementListeners: (item: DomItem) => DomItem;
7
+ export default bindElementListeners;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const activateListener_1 = __importDefault(require("./activateListener"));
15
+ const applyActiveListeners_1 = __importDefault(require("./applyActiveListeners"));
16
+ /**
17
+ * Receive a DomItem with eventListeners and apply the event listeners onto the Dom element.
18
+ * @param item - The DomItem which has eventListeners to apply to its element
19
+ */
20
+ const bindElementListeners = item => {
21
+ for (const eventName in item.eventListeners) {
22
+ const listeners = item.eventListeners[eventName];
23
+ listeners.forEach(eventAttributes => {
24
+ if (eventAttributes.listenerActive) {
25
+ return;
26
+ }
27
+ item = (0, activateListener_1.default)(eventName, eventAttributes, item);
28
+ eventAttributes.listenerActive = true;
29
+ });
30
+ item = (0, applyActiveListeners_1.default)(eventName, item);
31
+ }
32
+ return item;
33
+ };
34
+ exports.default = bindElementListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const activateListener_1=__importDefault(require("./activateListener")),applyActiveListeners_1=__importDefault(require("./applyActiveListeners")),bindElementListeners=e=>{for(const t in e.eventListeners){e.eventListeners[t].forEach(i=>{i.listenerActive||(e=(0,activateListener_1.default)(t,i,e),i.listenerActive=!0)}),e=(0,applyActiveListeners_1.default)(t,e)}return e};exports.default=bindElementListeners;
@@ -0,0 +1,9 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Based on the eventListeners property of the provided item, bind the
4
+ * listeners to the associated element property for the provided domEvents.DomItem.
5
+ * @param item - The DomItem which may have eventListeners to apply to its
6
+ * element
7
+ */
8
+ declare const bindListeners: (item: DomItem) => DomItem;
9
+ export default bindListeners;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ /* This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
6
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ const bindElementListeners_1 = __importDefault(require("./bindElementListeners"));
15
+ const si_funciona_1 = __importDefault(require("si-funciona"));
16
+ /**
17
+ * Based on the eventListeners property of the provided item, bind the
18
+ * listeners to the associated element property for the provided domEvents.DomItem.
19
+ * @param item - The DomItem which may have eventListeners to apply to its
20
+ * element
21
+ */
22
+ const bindListeners = item => !si_funciona_1.default.emptyObject(item.eventListeners) && item.element ? (0, bindElementListeners_1.default)(item) : item;
23
+ exports.default = bindListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const bindElementListeners_1=__importDefault(require("./bindElementListeners")),si_funciona_1=__importDefault(require("si-funciona")),bindListeners=e=>!si_funciona_1.default.emptyObject(e.eventListeners)&&e.element?(0,bindElementListeners_1.default)(e):e;exports.default=bindListeners;
@@ -0,0 +1,13 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName, ListenerDescriptor } from '../types';
3
+ /**
4
+ * Deactivate a single listener: detach it from the element (if it was actually attached) and remove it from
5
+ * activeListeners, without disturbing any other listener sharing the same options bucket.
6
+ * @param eventName - The name of the trigger event the listener was activated under.
7
+ * @param eventListener - The EventListener descriptor to deactivate, as found via
8
+ * {@link findEventListener} or returned from {@link activateListener}.
9
+ * @param item - The DomItem the listener is attached to.
10
+ * @returns The same DomItem, with this listener detached and marked inactive.
11
+ */
12
+ declare const deactivateListener: (eventName: EventName, eventListener: ListenerDescriptor, item: DomItem) => DomItem;
13
+ export default deactivateListener;