@dxtmisha/wiki 0.39.7 → 0.56.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 (227) hide show
  1. package/dist/{defineProperty-DblGXmzD.js → defineProperty-149Ahniv.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
  4. package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
  5. package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
  6. package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
  7. package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
  8. package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
  9. package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
  10. package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
  11. package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
  12. package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
  13. package/dist/media.d.ts +1 -1
  14. package/dist/media.js +127 -68
  15. package/dist/storybook.js +2707 -1841
  16. package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
  17. package/package.json +1 -1
  18. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
  19. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
  20. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
  21. package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
  22. package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
  23. package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
  24. package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
  25. package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
  26. package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
  27. package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
  28. package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
  29. package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
  30. package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
  31. package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
  32. package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
  33. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +57 -54
  34. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
  35. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -54
  36. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
  37. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
  38. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
  39. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
  40. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
  41. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
  42. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
  43. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
  44. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
  45. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
  46. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
  47. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
  48. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
  49. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
  50. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
  51. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +106 -51
  52. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
  53. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
  54. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
  55. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
  56. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
  57. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +59 -21
  58. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
  59. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -26
  60. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
  61. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
  62. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
  63. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
  64. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
  65. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
  66. package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
  67. package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
  68. package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
  69. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
  70. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
  71. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
  72. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
  73. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
  74. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
  75. package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
  76. package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
  77. package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
  78. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
  79. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
  80. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
  81. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
  82. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
  83. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
  84. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +178 -0
  85. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
  86. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -0
  87. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
  88. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
  89. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
  90. package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
  91. package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
  92. package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
  93. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
  94. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
  95. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
  96. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
  97. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
  98. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
  99. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
  100. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
  101. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
  102. package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
  103. package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
  104. package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
  105. package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
  106. package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
  107. package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
  108. package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
  109. package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
  110. package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
  111. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
  112. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
  113. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
  114. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
  115. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
  116. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
  117. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
  118. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
  119. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
  120. package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
  121. package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
  122. package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
  123. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
  124. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
  125. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
  126. package/src/media/functional/functional-basic/classes/Meta/Meta.en.mdx +16 -0
  127. package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
  128. package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
  129. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
  130. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
  131. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
  132. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
  133. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
  134. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -0
  135. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
  136. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
  137. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
  138. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
  139. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
  140. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
  141. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
  142. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
  143. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
  144. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
  145. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
  146. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
  147. package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
  148. package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
  149. package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
  150. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
  151. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
  152. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
  153. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
  154. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
  155. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
  156. package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
  157. package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
  158. package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
  159. package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
  160. package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
  161. package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
  162. package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
  163. package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
  164. package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
  165. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
  166. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
  167. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
  168. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
  169. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
  170. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
  171. package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
  172. package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
  173. package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
  174. package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
  175. package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
  176. package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
  177. package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
  178. package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
  179. package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
  180. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
  181. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
  182. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
  183. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
  184. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
  185. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
  186. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
  187. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
  188. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
  189. package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
  190. package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
  191. package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
  192. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
  193. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
  194. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
  195. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
  196. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
  197. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
  198. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
  199. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
  200. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
  201. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
  202. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
  203. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
  204. package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
  205. package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
  206. package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
  207. package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
  208. package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
  209. package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
  210. package/src/media/functional/functional-basic/icons/icons.en.mdx +3 -0
  211. package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
  212. package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
  213. package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
  214. package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
  215. package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
  216. package/src/media/functional/ui/about/about.en.mdx +45 -0
  217. package/src/media/functional/ui/about/about.ru.mdx +45 -0
  218. package/src/media/functional/ui/about/about.vi.mdx +45 -0
  219. package/src/media/functional/ui/component/component.en.mdx +104 -0
  220. package/src/media/functional/ui/component/component.ru.mdx +106 -0
  221. package/src/media/functional/ui/component/component.vi.mdx +104 -0
  222. package/src/media/functional/ui/setup/setup.en.mdx +72 -0
  223. package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
  224. package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
  225. package/src/media/functional/ui/wiki-data.en.mdx +114 -0
  226. package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
  227. package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
@@ -2,122 +2,70 @@ import {Meta} from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/vi/functional-basic/Classes/ErrorCenterInstance - Thực thể lỗi'/>
4
4
 
5
- # ErrorCenterInstance
5
+ # Lớp ErrorCenterInstance
6
6
 
7
- Một lớp để quản việc lưu trữ xử lỗi trong một thực thể (instance) cụ thể. cung cấp logic cốt lõi để duy trì một danh mục các nguyên nhân gây lỗi điều phối các thông báo thông qua một trình quản xử lý.
8
-
9
- Trong khi `ErrorCenter` cung cấp một lớp tĩnh toàn cục, `ErrorCenterInstance` có thể được sử dụng trực tiếp để theo dõi lỗi tách biệt hoặc các hệ thống quản lý lỗi tùy chỉnh.
7
+ `ErrorCenterInstance` động chính của hệ thống lỗi. kết hợp một sổ đăng nguyên nhân một trình quản xử lý. Bạn thể tạo các thực thể độc lập của lớp này cho các phần khác nhau của ứng dụng để lập logic xử lý lỗi của chúng.
10
8
 
11
9
  ## Các tính năng chính
12
10
 
13
- - **Lưu trữ tách biệt** — Duy trì danh sách các nguyên nhân lỗi cục bộ riêng biệt với trạng thái toàn cầu.
14
- - **Hợp nhất dữ liệu** — Tự động bổ sung thông tin nhãn thông báo đã đăng ký cho các lỗi được kích hoạt.
15
- - **Ủy quyền xử lý** — Sử dụng một `ErrorCenterHandler` riêng để thực thi các hàm gọi lại.
16
- - **Nguyên nhân định nghĩa trước** — thể được khởi tạo với một danh sách các nguyên nhân lỗi mặc định.
17
- - **Chainable API** — Hỗ trợ cấu hình linh hoạt để thêm nguyên nhân và trình xử lý.
18
-
19
- ## Các phương thức kiểm tra
20
-
21
- - `has(code: string, group?: string): boolean` — Kiểm tra xem một nguyên nhân lỗi có tồn tại trong bộ lưu trữ không.
22
- - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Truy xuất đối tượng nguyên nhân lỗi đã lưu trữ.
23
-
24
- ## Cấu hình
25
-
26
- - `add(cause: ErrorCenterCauseItem): this` — Thêm một nguyên nhân lỗi duy nhất vào bộ lưu trữ.
27
- - `addList(causes: ErrorCenterCauseList): this` — Thêm một danh sách các nguyên nhân lỗi.
28
- - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Đăng ký một trình xử lý cho nhóm cụ thể.
29
- - `addHandlerList(handlers: ErrorCenterHandlerList): this` — Đăng ký một loạt các trình xử lý.
30
-
31
- ## Các phương thức hành động
11
+ - **Kho lưu trữ lập** — duy trì một danh sách cục bộ các nguyên nhân lỗi.
12
+ - **Hợp nhất thông minh** — tự động bổ sung dữ liệu lỗi dựa trên hệ thống ưu tiên.
13
+ - **Ủy quyền xử lý** — sử dụng `ErrorCenterHandler` để kích hoạt các hàm callback.
14
+ - **API nối chuỗi** — hỗ trợ nối chuỗi cuộc gọi để cấu hình.
32
15
 
33
- ### `on`
16
+ ## Khởi tạo
34
17
 
35
- Kích hoạt xử lỗi. tìm kiếm dữ liệu đã đăng ký cho mã lỗi đầu vào, hợp nhất dữ liệu đó với nguyên nhân `cause`, và chuyển nó cho trình xử lý nội bộ.
18
+ Để tạo một thực thể, sử dụng constructor `ErrorCenterInstance(causes, handler)`.
36
19
 
37
20
  **Tham số:**
38
- - `cause: ErrorCenterCauseItem` — Thông tin lỗi cần kích hoạt.
39
-
40
- **Trả về:** `this`
41
-
42
- ## Các kiểu dữ liệu
43
-
44
- ### `ErrorCenterCauseItem`
45
-
46
- Đối tượng chính được sử dụng để xác định nguyên nhân gây lỗi trong thực thể này.
21
+ - `causes?: ErrorCenterCauseList` — danh sách nguyên nhân lỗi ban đầu.
22
+ - `handler?: ErrorCenterHandler` — thực thể trình xử lý (nếu không được chỉ định, một thực thể mới sẽ được tạo).
47
23
 
48
- - `group?: ErrorCenterGroup` — danh mục/nhóm mà lỗi thuộc về.
49
- - `code: string` — mã định danh duy nhất cho lỗi.
50
- - `label?: string` — tên lỗi dễ đọc cho người dùng.
51
- - `message?: string` — mô tả chi tiết về lỗi.
52
- - `details?: any` — đối tượng tùy chọn cho các dữ liệu bổ sung.
53
-
54
- ## Hướng dẫn: Quản lý nguyên nhân lỗi và bộ lắng nghe
55
-
56
- Sử dụng `ErrorCenterInstance` bao gồm ba bước chính: định nghĩa các nguyên nhân gây lỗi, thiết lập bộ lắng nghe (trình xử lý), và kích hoạt lỗi.
57
-
58
- ### 1. Thêm nguyên nhân lỗi
59
-
60
- Các nguyên nhân gây lỗi hoạt động như một từ điển cho ứng dụng của bạn. Bằng cách đăng ký trước chúng, bạn đảm bảo rằng các nhãn và thông báo nhất quán được sử dụng trên toàn bộ nền tảng.
61
-
62
- ```javascript
24
+ ```typescript
63
25
  import { ErrorCenterInstance } from '@dxtmisha/functional-basic'
64
26
 
65
- const myErrorCenter = new ErrorCenterInstance()
66
-
67
- // Đăng ký một nguyên nhân lỗi duy nhất
68
- myErrorCenter.add({
69
- group: 'auth',
70
- code: 'token_expired',
71
- label: 'Phiên hết hạn',
72
- message: 'Phiên đăng nhập của bạn đã hết hạn. Vui lòng đăng nhập lại.'
73
- })
74
-
75
- // Đăng ký nhiều nguyên nhân cùng lúc
76
- myErrorCenter.addList([
77
- { group: 'api', code: '404', label: 'Không tìm thấy', message: 'Dữ liệu được yêu cầu không tồn tại.' },
78
- { group: 'api', code: '500', label: 'Lỗi máy chủ', message: 'Đã có lỗi xảy ra trên máy chủ.' }
27
+ const myErrorCenter = new ErrorCenterInstance([
28
+ { group: 'api', code: '404', label: 'Không tìm thấy' }
79
29
  ])
80
30
  ```
81
31
 
82
- ### 2. Thêm bộ lắng nghe
32
+ ## Các phương thức
83
33
 
84
- Bộ lắng nghe (trình xử lý) là các hàm callback thực thi khi một lỗi cụ thể xảy ra. Bạn gán các bộ lắng nghe cho một nhóm (`group`) cụ thể để chúng chỉ phản ứng với các lỗi liên quan.
34
+ ### Hành động
35
+ - `on(cause: ErrorCenterCauseItem): this` — Bắt đầu quá trình xử lý. Hợp nhất dữ liệu từ sổ đăng ký với dữ liệu đầu vào và chuyển nó cho trình xử lý.
85
36
 
86
- ```javascript
87
- // Thêm bộ lắng nghe dành riêng cho nhóm "auth"
88
- myErrorCenter.addHandler('auth', (cause) => {
89
- // Ví dụ: chuyển hướng đến trang đăng nhập hoặc hiển thị thông báo cảnh báo
90
- console.log(`[LỖI XÁC THỰC] ${cause.label}: ${cause.message}`)
91
- })
37
+ ### Xác minh
38
+ - `has(code: string, group?: string): boolean` Tìm kiếm trong sổ đăng ký cục bộ.
39
+ - `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Truy xuất dữ liệu từ sổ đăng ký.
92
40
 
93
- // Thêm bộ lắng nghe cho nhóm "api"
94
- myErrorCenter.addHandler('api', (cause) => {
95
- // dụ: hiển thị thông báo dạng toast
96
- console.error(`[LỖI API ${cause.code}] ${cause.message}`)
97
- })
41
+ ### Cấu hình
42
+ - `add(cause: ErrorCenterCauseItem): this` — Thêm một lỗi vào sổ đăng ký cục bộ.
43
+ - `addList(causes: ErrorCenterCauseList): this` Thêm lỗi hàng loạt.
44
+ - `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` Đăng ký một phản ứng cho nhóm.
45
+ - `addHandlerList(handlers: ErrorCenterHandlerList): this` — Đăng ký hàng loạt các phản ứng.
98
46
 
99
- // Thêm bộ lắng nghe dự phòng toàn cục (bắt các lỗi không có trình xử lý cụ thể)
100
- myErrorCenter.addHandler(undefined, (cause) => {
101
- console.warn(`[LỖI KHÔNG XÁC ĐỊNH]`, cause)
102
- })
103
- ```
47
+ ## Các kiểu dữ liệu
48
+
49
+ #### `ErrorCenterCauseItem`
50
+ Đối tượng mô tả một lỗi cụ thể.
51
+ - `group?: ErrorCenterGroup` — nhóm lỗi (ví dụ: 'api').
52
+ - `code: string` — mã lỗi duy nhất.
53
+ - `priority?: number` — mức độ ưu tiên (mặc định `500`). Được sử dụng trong quá trình hợp nhất dữ liệu.
54
+ - `label?: string` — tiêu đề lỗi.
55
+ - `message?: string` — mô tả lỗi.
56
+ - `details?: any` — dữ liệu bổ sung.
104
57
 
105
- ### 3. Kích hoạt lỗi
58
+ #### `ErrorCenterHandlerCallback`
59
+ - `(cause: ErrorCenterCauseItem) => void` — hàm xử lý.
106
60
 
107
- Khi một lỗi xảy ra trong ứng dụng của bạn, bạn kích hoạt quá trình xử lý bằng cách sử dụng phương thức `on`. Bạn chỉ cần cung cấp mã (`code`) và nhóm (`group`). `ErrorCenterInstance` sẽ tự động hợp nhất yêu cầu này với nhãn (`label`) và thông báo (`message`) đã đăng ký trước đó rồi mới truyền đến các bộ lắng nghe.
61
+ ## dụ
108
62
 
109
- ```javascript
110
- // Kích hoạt lỗi xác thực
111
- // Các bộ lắng nghe cho "auth" sẽ nhận được toàn bộ đối tượng ErrorCenterCauseItem
112
- myErrorCenter.on({
113
- group: 'auth',
114
- code: 'token_expired'
115
- })
63
+ ### Khởi tạo với một từ điển
64
+ ```typescript
65
+ const myEC = new ErrorCenterInstance([
66
+ { group: 'db', code: 'connection_lost', label: 'DB không khả dụng' }
67
+ ]);
116
68
 
117
- // Kích hoạt một lỗi chưa đăng ký (sẽ rơi vào bộ lắng nghe của nhóm undefined)
118
- myErrorCenter.on({
119
- group: 'database',
120
- code: 'connection_lost',
121
- message: 'Mất kết nối với CSDL.' // Bạn cũng có thể truyền dữ liệu trực tiếp
122
- })
69
+ myEC.addHandler('db', (cause) => alert(cause.label));
70
+ myEC.on({ group: 'db', code: 'connection_lost' });
123
71
  ```
@@ -4,31 +4,31 @@ import {Meta} from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # EventItem Class
6
6
 
7
- A powerful wrapper for managing event listeners on DOM elements or the `window` object. This class simplifies the lifecycle of events (adding, removing, toggling), supports automatic DOM presence checks, and provides built-in optimization for heavy events like `resize` and `scroll`.
7
+ A powerful wrapper for managing event listeners on DOM elements or the `window` object. The class simplifies working with the event lifecycle (add, remove, toggle), supports automatic checking of the element's presence in the DOM, and provides built-in optimization for heavy events such as `resize` and `scroll`.
8
8
 
9
9
  ## Key Features
10
10
 
11
- - **Lifecycle Management** — convenient `start`, `stop`, `toggle`, and `reset` methods for precise control over event listening.
12
- - **DOM Safety** — automatic `isInDom` check before executing the listener (can be configured with a control element).
13
- - **ResizeObserver Support** — built-in handling of the `resize` event for any HTML element using the modern API.
14
- - **Scroll Optimization** — special `scroll-sync` event type using `requestAnimationFrame` for high performance.
15
- - **Chaining and Flexibility** — support for method chaining and dynamic target, type, or listener replacement.
16
- - **Custom Data** — ability to pass and dispatch custom data via `CustomEvent`.
11
+ - **Lifecycle Management** — convenient `start`, `stop`, `toggle`, and `reset` methods to control event listening.
12
+ - **DOM Safety** — automatic `isInDom` check before executing the handler (a control element can be configured).
13
+ - **ResizeObserver Support** — built-in handling of the `resize` event for any HTML elements via a modern API.
14
+ - **Scroll Optimization** — a special `scroll-sync` event type using `requestAnimationFrame` for high performance.
15
+ - **Chaining and Flexibility** — support for call chaining and dynamic changing of the target, type, or event handler.
16
+ - **Custom Data** — the ability to pass and dispatch custom data via `CustomEvent`.
17
17
 
18
18
  ## Initialization
19
19
 
20
- To initialize the object, call the `EventItem(elementSelector, type, listener, options, detail)` constructor.
20
+ To initialize the object, call the constructor `EventItem(elementSelector, type, listener, options, detail)`.
21
21
 
22
22
  ### Generic Constraints
23
23
 
24
24
  To ensure strict typing, the class supports the following generics:
25
- - `E extends ElementOrWindow` — The type of the element on which events are listened to.
26
- - `O extends Event` — The event object type.
27
- - `D extends Record<string, any>` — The structure for additional data.
25
+ - `E extends ElementOrWindow` — The type of element on which events are listened.
26
+ - `O extends Event` — The type of the event object.
27
+ - `D extends Record<string, any>` — The structure of additional data.
28
28
 
29
29
  **Parameters:**
30
- - `elementSelector?: ElementOrString<E>` — the target element where the listener is attached.
31
- - `type: string | string[] = 'click'` — the event type, an array of types, or special types (`'resize'`, `'scroll-sync'`).
30
+ - `elementSelector?: ElementOrString<E>` — the target element on which the listener is attached.
31
+ - `type: string | string[] = 'click'` — event type, array of types, or special types (`'resize'`, `'scroll-sync'`).
32
32
  - `listener?: EventListenerDetail<O, D>` — the event handler function.
33
33
  - `options?: EventOptions` — standard `addEventListener` options.
34
34
  - `detail?: D` — custom data that will be available in the handler.
@@ -36,7 +36,7 @@ To ensure strict typing, the class supports the following generics:
36
36
  ```typescript
37
37
  import { EventItem } from '@dxtmisha/functional-basic'
38
38
 
39
- // 1. Simple initialization
39
+ // 1. Basic initialization
40
40
  const myEvent = new EventItem(
41
41
  '.my-button',
42
42
  'click',
@@ -49,13 +49,13 @@ const customEvent = new EventItem<Window, MouseEvent, MyData>(
49
49
  window,
50
50
  'mousedown',
51
51
  (event, detail) => {
52
- console.log('Window clicked, data ID:', detail?.id)
52
+ console.log('Window click, data ID:', detail?.id)
53
53
  },
54
54
  { passive: true },
55
55
  { id: 42 }
56
56
  )
57
57
 
58
- // 3. Activating listeners
58
+ // 3. Activating listening
59
59
  myEvent.start()
60
60
  customEvent.start()
61
61
  ```
@@ -72,27 +72,48 @@ customEvent.start()
72
72
  All methods in this group support chaining and automatically call `reset()` if the event is active.
73
73
 
74
74
  - `setElement(elementSelector?: ElementOrString): this` — Changes the target element.
75
- - `setElementControl(elementSelector?: ElementOrString): this` — Sets a control element (if missing in DOM, the event won't trigger).
75
+ - `setElementControl(elementSelector?: ElementOrString): this` — Sets the control element (if it is not in the DOM, the event will not fire).
76
76
  - `setType(type: string | string[]): this` — Changes the event type.
77
- - `setListener(listener: Function): this` — Changes the callback function.
78
- - `setOptions(options?: EventOptions): this` — Changes the listener options.
79
- - `setDetail(detail?: D): this` — Changes the custom detail data.
77
+ - `setListener(listener: Function): this` — Changes the handler function.
78
+ - `setOptions(options?: EventOptions): this` — Changes the listener parameters.
79
+ - `setDetail(detail?: D): this` — Changes the custom event data.
80
80
 
81
- ### Control
81
+ ### Management
82
82
 
83
- - `start(): this` — Starts listening for events.
84
- - `stop(): this` — Stops listening for events.
85
- - `toggle(activity: boolean): this` — Enables or disables listening based on the flag.
83
+ - `start(): this` — Starts event listening.
84
+ - `stop(): this` — Stops event listening.
85
+ - `toggle(activity: boolean): this` — Enables or disables listening depending on the flag.
86
86
  - `reset(): this` — Restarts the event (useful after changing settings).
87
- - `dispatch(detail?: D): this` — Triggers the event on the target element with data transmission.
87
+ - `dispatch(detail?: D): this` — Triggers the event on the target element with data transfer.
88
+
89
+ ## Types
90
+
91
+ #### `ElementOrWindow`
92
+ Element on which an event can be attached: `HTMLElement | Window`.
93
+
94
+ #### `ElementOrString<E>`
95
+ Type for passing an element or its selector: `E | string`.
96
+
97
+ #### `EventListenerDetail<O, D>`
98
+ Event listener function: `(event: O, detail?: D) => void`.
99
+
100
+ #### `EventOptions`
101
+ Listening options: `AddEventListenerOptions | boolean | undefined`.
102
+
103
+ #### `EventActivityItem<E>`
104
+ Internal interface for tracking active listeners.
105
+ - `element: E | undefined` — Target element.
106
+ - `type: string` — Event type.
107
+ - `listener?: (event: any) => void` — Active function.
108
+ - `observer?: ResizeObserver` — Observer instance (for `resize`).
88
109
 
89
110
  ## Special Events
90
111
 
91
112
  ### `resize`
92
- If the event type is set to `resize`, the class automatically uses `ResizeObserver` to track element size changes (even if it's not the `window`).
113
+ If the event type is set to `resize`, the class automatically uses `ResizeObserver` to track changes in the size of the element (even if it is not `window`).
93
114
 
94
115
  ### `scroll-sync`
95
- A special type for optimized scrolling. It uses `requestAnimationFrame` internally, preventing redundant handler calls and improving performance.
116
+ A special type for optimized scrolling. Internally uses `requestAnimationFrame`, preventing unnecessary handler calls and increasing performance.
96
117
 
97
118
  ## Examples
98
119
 
@@ -104,7 +125,7 @@ const tracker = new EventItem('.item-1', 'mousemove', (e) => {
104
125
 
105
126
  tracker.start()
106
127
 
107
- // ... later switch to another element
128
+ // ... switch to another element later
108
129
  tracker.setElement('.item-2')
109
130
  ```
110
131
 
@@ -86,6 +86,27 @@ customEvent.start()
86
86
  - `reset(): this` — Перезапускает событие (полезно после смены настроек).
87
87
  - `dispatch(detail?: D): this` — Вызывает событие на целевом элементе с передачей данных.
88
88
 
89
+ ## Типы
90
+
91
+ #### `ElementOrWindow`
92
+ Элемент, на котором может висеть событие: `HTMLElement | Window`.
93
+
94
+ #### `ElementOrString<E>`
95
+ Тип для передачи элемента или его селектора: `E | string`.
96
+
97
+ #### `EventListenerDetail<O, D>`
98
+ Функция-обработчик события: `(event: O, detail?: D) => void`.
99
+
100
+ #### `EventOptions`
101
+ Опции прослушивания: `AddEventListenerOptions | boolean | undefined`.
102
+
103
+ #### `EventActivityItem<E>`
104
+ Внутренний интерфейс для отслеживания активных слушателей.
105
+ - `element: E | undefined` — Целевой элемент.
106
+ - `type: string` — Тип события.
107
+ - `listener?: (event: any) => void` — Активная функция.
108
+ - `observer?: ResizeObserver` — Инстанс наблюдателя (для `resize`).
109
+
89
110
  ## Специальные события
90
111
 
91
112
  ### `resize`
@@ -1,34 +1,34 @@
1
1
  import {Meta} from '@storybook/addon-docs/blocks'
2
2
 
3
- <Meta title='@dxtmisha/vi/functional-basic/Classes/EventItem - Quản lý Sự kiện Nâng cao'/>
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/EventItem - Quản lý sự kiện nâng cao'/>
4
4
 
5
5
  # Lớp EventItem
6
6
 
7
- Một bộ khung (wrapper) mạnh mẽ để quản lý các trình lắng nghe sự kiện (event listeners) trên các phần tử DOM hoặc đối tượng `window`. Lớp này đơn giản hóa vòng đời của sự kiện (thêm, xóa, bật/tắt), hỗ trợ kiểm tra sự tồn tại của phần tử trong DOM và cung cấp các tối ưu hóa tích hợp cho các sự kiện nặng như `resize` và `scroll`.
7
+ Một vỏ bọc mạnh mẽ để quản lý các trình lắng nghe sự kiện trên các phần tử DOM hoặc đối tượng `window`. Lớp này đơn giản hóa việc làm việc với vòng đời sự kiện (thêm, xóa, chuyển đổi), hỗ trợ tự động kiểm tra sự hiện diện của phần tử trong DOM và cung cấp tối ưu hóa tích hợp cho các sự kiện nặng như `resize` và `scroll`.
8
8
 
9
- ## Tính năng chính
9
+ ## Các tính năng chính
10
10
 
11
- - **Quản lý vòng đời** — các phương thức `start`, `stop`, `toggle` và `reset` tiện lợi để kiểm soát chính xác việc lắng nghe sự kiện.
12
- - **An toàn DOM** — tự động kiểm tra `isInDom` trước khi thực hiện trình xử lý (có thể cấu hình phần tử kiểm soát).
13
- - **Hỗ trợ ResizeObserver** — xử lý tích hợp sự kiện `resize` cho bất kỳ phần tử HTML nào bằng API hiện đại.
14
- - **Tối ưu hóa cuộn** — loại sự kiện đặc biệt `scroll-sync` sử dụng `requestAnimationFrame` để đạt hiệu suất cao.
15
- - **Chuỗi lệnh và linh hoạt** — hỗ trợ chuỗi lệnh (chaining) và thay đổi động mục tiêu, loại hoặc trình xử lý sự kiện.
16
- - **Dữ liệu tùy chỉnh** — khả năng truyền và phát tán dữ liệu tùy chỉnh thông qua `CustomEvent`.
11
+ - **Quản lý vòng đời** — các phương thức `start`, `stop`, `toggle` và `reset` thuận tiện để kiểm soát việc lắng nghe sự kiện.
12
+ - **An toàn DOM** — tự động kiểm tra `isInDom` trước khi thực thi trình xử lý (có thể cấu hình phần tử điều khiển).
13
+ - **Hỗ trợ ResizeObserver** — xử lý tích hợp sự kiện `resize` cho bất kỳ phần tử HTML nào thông qua API hiện đại.
14
+ - **Tối ưu hóa cuộn** — kiểu sự kiện `scroll-sync` đặc biệt sử dụng `requestAnimationFrame` cho hiệu suất cao.
15
+ - **Chaining và linh hoạt** — hỗ trợ nối chuỗi cuộc gọi và thay đổi động đích, kiểu hoặc trình xử lý sự kiện.
16
+ - **Dữ liệu tùy chỉnh** — khả năng truyền và điều phối dữ liệu tùy chỉnh thông qua `CustomEvent`.
17
17
 
18
18
  ## Khởi tạo
19
19
 
20
- Để khởi tạo đối tượng, hãy gọi hàm khởi tạo `EventItem(elementSelector, type, listener, options, detail)`.
20
+ Để khởi tạo đối tượng, hãy gọi constructor `EventItem(elementSelector, type, listener, options, detail)`.
21
21
 
22
- ### Ràng buộc Generic (Generic Constraints)
22
+ ### Các ràng buộc Generic (Generic Constraints)
23
23
 
24
- Để đảm bảo định kiểu nghiêm ngặt, lớp này hỗ trợ các generic sau:
25
- - `E extends ElementOrWindow` — Kiểu của phần tử nơi các sự kiện được lắng nghe.
26
- - `O extends Event` — Kiểu đối tượng sự kiện.
27
- - `D extends Record<string, any>` — Cấu trúc dữ liệu bổ sung.
24
+ Để đảm bảo kiểu nghiêm ngặt, lớp hỗ trợ các generic sau:
25
+ - `E extends ElementOrWindow` — Kiểu phần tử các sự kiện được lắng nghe.
26
+ - `O extends Event` — Kiểu của đối tượng sự kiện.
27
+ - `D extends Record<string, any>` — Cấu trúc của dữ liệu bổ sung.
28
28
 
29
29
  **Tham số:**
30
- - `elementSelector?: ElementOrString<E>` — phần tử đích nơi trình lắng nghe được gắn vào.
31
- - `type: string | string[] = 'click'` — loại sự kiện, một mảng các loại hoặc các loại đặc biệt (`'resize'`, `'scroll-sync'`).
30
+ - `elementSelector?: ElementOrString<E>` — phần tử đích trình lắng nghe được đính kèm.
31
+ - `type: string | string[] = 'click'` — kiểu sự kiện, mảng các kiểu hoặc các kiểu đặc biệt (`'resize'`, `'scroll-sync'`).
32
32
  - `listener?: EventListenerDetail<O, D>` — hàm xử lý sự kiện.
33
33
  - `options?: EventOptions` — các tùy chọn `addEventListener` tiêu chuẩn.
34
34
  - `detail?: D` — dữ liệu tùy chỉnh sẽ có sẵn trong trình xử lý.
@@ -36,63 +36,84 @@ Một bộ khung (wrapper) mạnh mẽ để quản lý các trình lắng nghe
36
36
  ```typescript
37
37
  import { EventItem } from '@dxtmisha/functional-basic'
38
38
 
39
- // 1. Khởi tạo đơn giản
39
+ // 1. Khởi tạo bản
40
40
  const myEvent = new EventItem(
41
41
  '.my-button',
42
42
  'click',
43
- (event) => console.log('Sự kiện được kích hoạt:', event.type)
43
+ (event) => console.log('Sự kiện đã kích hoạt:', event.type)
44
44
  )
45
45
 
46
- // 2. Sử dụng generic để định kiểu nghiêm ngặt
46
+ // 2. Sử dụng generic cho kiểu nghiêm ngặt
47
47
  interface MyData { id: number }
48
48
  const customEvent = new EventItem<Window, MouseEvent, MyData>(
49
49
  window,
50
50
  'mousedown',
51
51
  (event, detail) => {
52
- console.log('Cửa sổ được nhấn, ID dữ liệu:', detail?.id)
52
+ console.log('Nhấp vào cửa sổ, ID dữ liệu:', detail?.id)
53
53
  },
54
54
  { passive: true },
55
55
  { id: 42 }
56
56
  )
57
57
 
58
- // 3. Kích hoạt trình lắng nghe
58
+ // 3. Kích hoạt lắng nghe
59
59
  myEvent.start()
60
60
  customEvent.start()
61
61
  ```
62
62
 
63
- ## Phương thức
63
+ ## Các phương thức
64
64
 
65
65
  ### Thông tin
66
66
 
67
- - `isActive(): boolean` — Kiểm tra xem việc lắng nghe sự kiện có đang hoạt động hay không.
68
- - `getElement(): E | undefined` — Trả về phần tử mục tiêu hiện tại.
67
+ - `isActive(): boolean` — Kiểm tra xem việc lắng nghe sự kiện hiện có đang hoạt động hay không.
68
+ - `getElement(): E | undefined` — Trả về phần tử đích hiện tại.
69
69
 
70
70
  ### Cấu hình (Setters)
71
71
 
72
- Tất cả các phương thức trong nhóm này đều hỗ trợ chuỗi lệnh và tự động gọi `reset()` nếu sự kiện đang hoạt động.
72
+ Tất cả các phương thức trong nhóm này đều hỗ trợ nối chuỗi và tự động gọi `reset()` nếu sự kiện đang hoạt động.
73
73
 
74
- - `setElement(elementSelector?: ElementOrString): this` — Thay đổi phần tử mục tiêu.
75
- - `setElementControl(elementSelector?: ElementOrString): this` — Thiết lập phần tử kiểm soát (nếu thiếu trong DOM, sự kiện sẽ không kích hoạt).
76
- - `setType(type: string | string[]): this` — Thay đổi loại sự kiện.
74
+ - `setElement(elementSelector?: ElementOrString): this` — Thay đổi phần tử đích.
75
+ - `setElementControl(elementSelector?: ElementOrString): this` — Thiết lập phần tử điều khiển (nếu không có trong DOM, sự kiện sẽ không kích hoạt).
76
+ - `setType(type: string | string[]): this` — Thay đổi kiểu sự kiện.
77
77
  - `setListener(listener: Function): this` — Thay đổi hàm xử lý.
78
- - `setOptions(options?: EventOptions): this` — Thay đổi các tùy chọn của trình lắng nghe.
79
- - `setDetail(detail?: D): this` — Thay đổi dữ liệu tùy chỉnh của sự kiện.
78
+ - `setOptions(options?: EventOptions): this` — Thay đổi các tham số trình lắng nghe.
79
+ - `setDetail(detail?: D): this` — Thay đổi dữ liệu sự kiện tùy chỉnh.
80
80
 
81
- ### Điều khiển
81
+ ### Quản
82
82
 
83
- - `start(): this` — Bắt đầu lắng nghe các sự kiện.
84
- - `stop(): this` — Dừng lắng nghe các sự kiện.
85
- - `toggle(activity: boolean): this` — Bật hoặc tắt việc lắng nghe dựa trên cờ hiệu.
83
+ - `start(): this` — Bắt đầu lắng nghe sự kiện.
84
+ - `stop(): this` — Dừng lắng nghe sự kiện.
85
+ - `toggle(activity: boolean): this` — Bật hoặc tắt lắng nghe tùy thuộc vào cờ.
86
86
  - `reset(): this` — Khởi động lại sự kiện (hữu ích sau khi thay đổi cài đặt).
87
- - `dispatch(detail?: D): this` — Kích hoạt sự kiện trên phần tử mục tiêu với việc truyền dữ liệu.
87
+ - `dispatch(detail?: D): this` — Kích hoạt sự kiện trên phần tử đích với việc truyền dữ liệu.
88
+
89
+ ## Các kiểu dữ liệu
90
+
91
+ #### `ElementOrWindow`
92
+ Phần tử mà sự kiện có thể được đính kèm: `HTMLElement | Window`.
93
+
94
+ #### `ElementOrString<E>`
95
+ Kiểu để truyền một phần tử hoặc bộ chọn của nó: `E | string`.
96
+
97
+ #### `EventListenerDetail<O, D>`
98
+ Hàm lắng nghe sự kiện: `(event: O, detail?: D) => void`.
99
+
100
+ #### `EventOptions`
101
+ Các tùy chọn lắng nghe: `AddEventListenerOptions | boolean | undefined`.
102
+
103
+ #### `EventActivityItem<E>`
104
+ Giao diện nội bộ để theo dõi các trình lắng nghe đang hoạt động.
105
+ - `element: E | undefined` — Phần tử đích.
106
+ - `type: string` — Kiểu sự kiện.
107
+ - `listener?: (event: any) => void` — Hàm đang hoạt động.
108
+ - `observer?: ResizeObserver` — Thực thể observer (cho `resize`).
88
109
 
89
110
  ## Các sự kiện đặc biệt
90
111
 
91
112
  ### `resize`
92
- Nếu loại sự kiện được đặt `resize`, lớp sẽ tự động sử dụng `ResizeObserver` để theo dõi các thay đổi kích thước của phần tử (ngay cả khi đó không phải là `window`).
113
+ Nếu kiểu sự kiện được đặt thành `resize`, lớp sẽ tự động sử dụng `ResizeObserver` để theo dõi những thay đổi về kích thước của phần tử (ngay cả khi đó không phải là `window`).
93
114
 
94
115
  ### `scroll-sync`
95
- Một loại đặc biệt để tối ưu hóa việc cuộn. sử dụng `requestAnimationFrame` nội bộ, ngăn chặn các cuộc gọi trình xử lý thừacải thiện hiệu suất.
116
+ Một kiểu đặc biệt cho việc cuộn tối ưu hóa. Bên trong sử dụng `requestAnimationFrame`, ngăn chặn các cuộc gọi trình xử lý không cần thiết tăng hiệu suất.
96
117
 
97
118
  ## Ví dụ
98
119
 
@@ -104,20 +125,20 @@ const tracker = new EventItem('.item-1', 'mousemove', (e) => {
104
125
 
105
126
  tracker.start()
106
127
 
107
- // ... sau đó chuyển sang phần tử khác
128
+ // ... chuyển sang phần tử khác sau đó
108
129
  tracker.setElement('.item-2')
109
130
  ```
110
131
 
111
- ### Sử dụng CustomEvent với Dữ liệu
132
+ ### Sử dụng CustomEvent với dữ liệu
112
133
  ```javascript
113
134
  const emitter = new EventItem(window, 'my-custom-event')
114
135
 
115
136
  emitter.setListener((e, detail) => {
116
- console.log('Dữ liệu nhận được:', e.detail) // dữ liệu từ CustomEvent
137
+ console.log('Dữ liệu đã nhận:', e.detail) // dữ liệu từ CustomEvent
117
138
  })
118
139
 
119
140
  emitter.start()
120
141
 
121
- // Phát tán sự kiện
142
+ // Điều phối sự kiện
122
143
  emitter.dispatch({ userId: 123, action: 'refresh' })
123
144
  ```