@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
@@ -0,0 +1,97 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/StorageCallback - Storage Callbacks'/>
4
+
5
+ # Lớp StorageCallback
6
+
7
+ Một lớp tiện ích để quản lý các nhóm hàm callback liên kết với các khóa lưu trữ cụ thể. Nó cho phép nhiều thành phần hoặc chức năng phản hồi các thay đổi hoặc kích hoạt lưu trữ một cách phối hợp, bất đồng bộ.
8
+
9
+ ## Các đặc điểm chính
10
+
11
+ - **Các thực thể có tên** — thực hiện mô hình singleton, trong đó các thực thể được truy xuất theo tên và nhóm, đảm bảo rằng các phần khác nhau của ứng dụng chia sẻ cùng một danh sách callback cho cùng một tài nguyên.
12
+ - **Phân tách theo nhóm** — cho phép tách biệt các danh sách callback theo nhóm (ví dụ: 'main', 'global', 'local'), ngăn chặn xung đột tên giữa các mô-đun khác nhau.
13
+ - **Thực thi bất đồng bộ** — hỗ trợ các callback dựa trên `Promise` và thực thi chúng theo trình tự trong quá trình `run`.
14
+ - **Theo dõi trạng thái tải** — cung cấp cờ `loading` có sẵn, được quản lý tự động trong giai đoạn thực thi callback.
15
+
16
+ ## Khởi tạo
17
+
18
+ Để khởi tạo đối tượng, hãy gọi hàm tạo `StorageCallback(name, group)` hoặc sử dụng phương thức tĩnh `getInstance(name, group)`.
19
+
20
+ ### Các ràng buộc Generic
21
+
22
+ Để đảm bảo kiểu dữ liệu nghiêm ngặt, lớp hỗ trợ các generic sau:
23
+ - `T = any` — Kiểu dữ liệu được truyền cho các callback.
24
+ - `Callback = (value: T) => void | Promise<void>` — Cấu trúc hàm callback.
25
+
26
+ **Tham số:**
27
+ - `name: string` — định danh duy nhất cho mục nhập lưu trữ.
28
+ - `group: string = 'main'` — phân loại tùy chọn để ngăn chặn xung đột tên.
29
+
30
+ ```typescript
31
+ import { StorageCallback } from '@dxtmisha/functional-basic'
32
+
33
+ // 1. Khởi tạo đơn giản (nhóm mặc định là 'main')
34
+ const storage = new StorageCallback('user-data')
35
+
36
+ // 2. Sử dụng phương thức tĩnh getInstance
37
+ const sharedStorage = StorageCallback.getInstance('settings', 'global')
38
+
39
+ // 3. Sử dụng generic để kiểm soát kiểu dữ liệu
40
+ const numberStorage = new StorageCallback<number>('counter')
41
+ numberStorage.addCallback((val) => console.log(val + 1))
42
+ ```
43
+
44
+ ## Các phương thức
45
+
46
+ ### Thông tin
47
+
48
+ - `getName(): string` — trả về tên của thực thể lưu trữ.
49
+ - `isLoading(): boolean` — trả về trạng thái tải hiện tại.
50
+ - `getLoading(): boolean` — trả về trạng thái tải hiện tại (tương tự `isLoading`).
51
+
52
+ ### Quản lý
53
+
54
+ - `addCallback(callback: Callback, isOnce?: boolean): this` — thêm một callback mới vào danh sách thực thi. Nếu `isOnce: true`, callback sẽ bị xóa sau lần thực thi đầu tiên.
55
+ - `removeCallback(callback: Callback): this` — xóa một callback cụ thể khỏi danh sách.
56
+
57
+ ### Điều khiển (Control)
58
+
59
+ - `preparation(): this` — chuẩn bị trạng thái trước khi thực thi (đặt `loading` thành `true`). Được sử dụng thủ công khi bắt đầu các hoạt động bất đồng bộ.
60
+ - `run(value: T): Promise<this>` — thực thi tất cả các callback theo trình tự với giá trị được cung cấp. Đặt `loading` về `false` khi bắt đầu thực thi.
61
+
62
+ ## Ví dụ sử dụng
63
+
64
+ ### Quản lý trạng thái tải thủ công
65
+
66
+ Khi dữ liệu được lấy bất đồng bộ từ nguồn bên ngoài (ví dụ: Figma storage), bạn có thể quản lý trạng thái `loading` thủ công để điều phối nhiều yêu cầu.
67
+
68
+ ```typescript
69
+ const storage = new StorageCallback('figma-data')
70
+
71
+ // 1. Kiểm tra nếu không phải đang tải
72
+ if (!storage.isLoading()) {
73
+ // 2. Thiết lập trạng thái đang tải
74
+ storage.preparation()
75
+
76
+ // 3. Yêu cầu dữ liệu
77
+ fetchFromFigma((data) => {
78
+ // 4. Thực thi callback (run sẽ đưa loading về false)
79
+ storage.run(data)
80
+ })
81
+ }
82
+ ```
83
+
84
+ ### Callback một lần
85
+
86
+ Nếu bạn chỉ cần một hàm kích hoạt một lần (ví dụ: để nạp dữ liệu ban đầu), hãy sử dụng cờ `isOnce`.
87
+
88
+ ```typescript
89
+ const storage = new StorageCallback('initial-data')
90
+
91
+ storage.addCallback((data) => {
92
+ console.log('Đã thực thi một lần:', data)
93
+ }, true)
94
+
95
+ await storage.run('update 1') // 'Đã thực thi một lần: update 1'
96
+ await storage.run('update 2') // (không có đầu ra, callback đã bị xóa)
97
+ ```
@@ -1,4 +1,4 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/en/functional-basic/Functions/addTagHighlightMatch - Highlight matches in a string'/>
4
4
 
@@ -8,17 +8,20 @@ A utility for highlighting matches in a string by wrapping them in a `<span>` HT
8
8
 
9
9
  **Parameters:**
10
10
  - `value: string` — The initial string to process.
11
- - `search?: string` — The search string (one or more words separated by spaces).
11
+ - `search?: string | RegExp` — The search string (one or more words separated by spaces) or a regular expression.
12
12
  - `className: string = 'sys-highlight-match'` — The CSS class to be added to the `<span>` tag.
13
+ - `shouldEscape: boolean = false` — Whether to escape the string before adding highlighting.
13
14
 
14
15
  **Returns:**
15
16
  `string` — The string with HTML tags added for highlighting.
16
17
 
17
- ```typescript
18
+ <Source
19
+ language='typescript'
20
+ code={`
18
21
  import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
19
22
 
20
23
  // Highlight a single word
21
- addTagHighlightMatch('Hello world', 'hello')
24
+ addTagHighlightMatch('Hello world', 'hello')
22
25
  // '<span class="sys-highlight-match">Hello</span> world'
23
26
 
24
27
  // Highlight multiple words (OR logic)
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
28
31
  // Custom class
29
32
  addTagHighlightMatch('Test', 'test', 'text-red')
30
33
  // '<span class="text-red">Test</span>'
31
- ```
34
+
35
+ // With escaping
36
+ addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
37
+ // '&lt;b&gt;<span class="sys-highlight-match">bold</span>&lt;/b&gt;'
38
+ `}
39
+ />
@@ -1,4 +1,4 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/ru/functional-basic/Functions/addTagHighlightMatch - Подсветка совпадений в строке'/>
4
4
 
@@ -8,17 +8,20 @@ import { Meta } from '@storybook/addon-docs/blocks'
8
8
 
9
9
  **Параметры:**
10
10
  - `value: string` — Исходная строка для обработки.
11
- - `search?: string` — Строка поиска (одно или несколько слов через пробел).
11
+ - `search?: string | RegExp` — Строка поиска (одно или несколько слов через пробел) или регулярное выражение.
12
12
  - `className: string = 'sys-highlight-match'` — CSS-класс, который будет добавлен к тегу `<span>`.
13
+ - `shouldEscape: boolean = false` — Нужно ли экранировать строку перед добавлением подсветки.
13
14
 
14
15
  **Возвращает:**
15
16
  `string` — Строка с добавленными HTML-тегами для подсветки.
16
17
 
17
- ```typescript
18
+ <Source
19
+ language='typescript'
20
+ code={`
18
21
  import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
19
22
 
20
23
  // Подсветка одного слова
21
- addTagHighlightMatch('Hello world', 'hello')
24
+ addTagHighlightMatch('Hello world', 'hello')
22
25
  // '<span class="sys-highlight-match">Hello</span> world'
23
26
 
24
27
  // Подсветка нескольких слов (OR-логика)
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
28
31
  // Кастомный класс
29
32
  addTagHighlightMatch('Test', 'test', 'text-red')
30
33
  // '<span class="text-red">Test</span>'
31
- ```
34
+
35
+ // С экранированием
36
+ addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
37
+ // '&lt;b&gt;<span class="sys-highlight-match">bold</span>&lt;/b&gt;'
38
+ `}
39
+ />
@@ -1,4 +1,4 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/vi/functional-basic/Functions/addTagHighlightMatch - Làm nổi bật các kết quả khớp trong chuỗi'/>
4
4
 
@@ -8,17 +8,20 @@ Tiện ích để làm nổi bật các kết quả khớp trong một chuỗi b
8
8
 
9
9
  **Tham số:**
10
10
  - `value: string` — Chuỗi ban đầu để xử lý.
11
- - `search?: string` — Chuỗi tìm kiếm (một hoặc nhiều từ phân tách bằng dấu cách).
11
+ - `search?: string | RegExp` — Chuỗi tìm kiếm (một hoặc nhiều từ phân tách bằng dấu cách) hoặc biễu thức chính quy.
12
12
  - `className: string = 'sys-highlight-match'` — Class CSS sẽ được thêm vào thẻ `<span>`.
13
+ - `shouldEscape: boolean = false` — Có nên thoát chuỗi trước khi thêm làm nổi bật hay không.
13
14
 
14
15
  **Trả về:**
15
16
  `string` — Chuỗi với các thẻ HTML được thêm vào để làm nổi bật.
16
17
 
17
- ```typescript
18
+ <Source
19
+ language='typescript'
20
+ code={`
18
21
  import { addTagHighlightMatch } from '@dxtmisha/functional-basic'
19
22
 
20
23
  // Làm nổi bật một từ đơn
21
- addTagHighlightMatch('Hello world', 'hello')
24
+ addTagHighlightMatch('Hello world', 'hello')
22
25
  // '<span class="sys-highlight-match">Hello</span> world'
23
26
 
24
27
  // Làm nổi bật nhiều từ (logic OR)
@@ -28,4 +31,9 @@ addTagHighlightMatch('Apple and Banana', 'apple banana')
28
31
  // Class tùy chỉnh
29
32
  addTagHighlightMatch('Test', 'test', 'text-red')
30
33
  // '<span class="text-red">Test</span>'
31
- ```
34
+
35
+ // Với thoát chuỗi (escaping)
36
+ addTagHighlightMatch('<b>bold</b>', 'bold', 'sys-highlight-match', true)
37
+ // '&lt;b&gt;<span class="sys-highlight-match">bold</span>&lt;/b&gt;'
38
+ `}
39
+ />
@@ -1,33 +1,51 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/en/functional-basic/Functions/anyToString - Conversion of a value to a string'/>
4
4
 
5
5
  # `anyToString`
6
6
 
7
- A utility that safely converts any input data into a string type.
8
-
9
- This is useful when outputting data to the interface when the variable type (object, array, boolean, or null) is not known in advance.
7
+ A utility for safely converting any input data into a string type.
10
8
 
11
9
  **Parameters:**
12
- - `value: V` — Values for conversion.
13
- - `isArrayString: boolean` (optional, default: `true`) — If `true`, arrays of primitives will be joined by commas. If `false`, they will be stringified as JSON.
10
+ - `value: V` — The value for conversion.
11
+ - `isArrayString: boolean = true` — If `true`, primitive arrays are joined by commas.
12
+ - `trim: boolean = true` — If `true`, trims leading and trailing whitespace (only for strings).
13
+
14
+ **Conversion Rules:**
15
+ - **Strings**: Returned as is (with `trim` if enabled).
16
+ - **Arrays**: If `isArrayString: true` and no objects are in the array, elements are joined by commas. Otherwise, JSON stringified.
17
+ - **Objects**: Converted to JSON. In case of error (e.g., circular reference), returns standard `toString()`.
18
+ - **Boolean**: `true` converts to `'1'`, `false` to `'0'`.
19
+ - **Other types**: `null` and `undefined` result in an empty string. Others call `toString()`.
14
20
 
15
21
  **Returns:**
16
- `string` — The string representation of the provided value.
22
+ `string` — The string representation of the value.
23
+
24
+ ## Examples
17
25
 
18
- ```typescript
26
+ <Source
27
+ language='typescript'
28
+ code={`
19
29
  import { anyToString } from '@dxtmisha/functional-basic'
20
30
 
21
- console.log(anyToString(' test ')) // 'test' (trimmed)
22
- console.log(anyToString([1, 2, 3])) // '1,2,3' (isArrayString = true)
23
- console.log(anyToString([1, 2, 3], false)) // '[1,2,3]' (isArrayString = false)
31
+ // 1. Strings
32
+ anyToString(' Hello ') // 'Hello'
33
+ anyToString(' Hello ', true, false) // ' Hello '
34
+
35
+ // 2. Arrays
36
+ anyToString([1, 2, 3]) // '1,2,3'
37
+ anyToString([1, 2, 3], false) // '[1,2,3]'
38
+
39
+ // 3. Objects
40
+ anyToString({ a: 1 }) // '{"a":1}'
24
41
 
25
- console.log(anyToString([[1], [2]])) // '[[1],[2]]' (nested arrays are stringified as JSON)
26
- console.log(anyToString([{ a: 1 }, 2])) // '[{"a":1},2]' (arrays with objects are stringified as JSON)
42
+ // 4. Boolean values (1/0 conversion)
43
+ anyToString(true) // '1'
44
+ anyToString(false) // '0'
27
45
 
28
- console.log(anyToString({ a: 1 })) // '{"a":1}'
29
- console.log(anyToString(true)) // '1'
30
- console.log(anyToString(false)) // '0'
31
- console.log(anyToString(123)) // '123'
32
- console.log(anyToString(null)) // ''
33
- ```
46
+ // 5. Empty values and types
47
+ anyToString(null) // ''
48
+ anyToString(123) // '123'
49
+ anyToString(Symbol('test')) // 'Symbol(test)'
50
+ `}
51
+ />
@@ -1,33 +1,51 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/ru/functional-basic/Functions/anyToString - Преобразование значения в строку'/>
4
4
 
5
5
  # `anyToString`
6
6
 
7
- Утилита, которая безопасно приводит любые входящие данные к строковому типу.
8
-
9
- Это полезно при выводе данных в интерфейс, когда заранее неизвестен тип переменной (объект, массив, boolean или null).
7
+ Утилита для безопасного приведения любых данных к строковому типу.
10
8
 
11
9
  **Параметры:**
12
- - `value: V` — Значения для преобразования.
13
- - `isArrayString: boolean` (необязательно, по умолчанию: `true`) — Если `true`, массивы примитивов будут объединены через запятую. Если `false`, они будут преобразованы в строку JSON.
10
+ - `value: V` — Значение для преобразования.
11
+ - `isArrayString: boolean = true` — Если `true`, массивы примитивов объединяются через запятую.
12
+ - `trim: boolean = true` — Если `true`, обрезает лишние пробелы (только для строк).
13
+
14
+ **Правила преобразования:**
15
+ - **Строки**: Возвращаются как есть (с `trim`, если включено).
16
+ - **Массивы**: Если `isArrayString: true` и в массиве нет объектов, элементы объединяются через запятую. В остальных случаях — JSON.
17
+ - **Объекты**: Преобразуются в JSON. При ошибке (например, циклической ссылке) возвращается стандартный `toString()`.
18
+ - **Boolean**: `true` преобразуется в `'1'`, `false` — в `'0'`.
19
+ - **Прочие типы**: `null` и `undefined` дают пустую строку. Для остальных вызывается `toString()`.
14
20
 
15
21
  **Возвращает:**
16
- `string` — Строковое представление переданного значения.
22
+ `string` — Строковое представление значения.
23
+
24
+ ## Примеры
17
25
 
18
- ```typescript
26
+ <Source
27
+ language='typescript'
28
+ code={`
19
29
  import { anyToString } from '@dxtmisha/functional-basic'
20
30
 
21
- console.log(anyToString(' test ')) // 'test' (trimmed)
22
- console.log(anyToString([1, 2, 3])) // '1,2,3' (isArrayString = true)
23
- console.log(anyToString([1, 2, 3], false)) // '[1,2,3]' (isArrayString = false)
31
+ // 1. Строки
32
+ anyToString(' Hello ') // 'Hello'
33
+ anyToString(' Hello ', true, false) // ' Hello '
34
+
35
+ // 2. Массивы
36
+ anyToString([1, 2, 3]) // '1,2,3'
37
+ anyToString([1, 2, 3], false) // '[1,2,3]'
38
+
39
+ // 3. Объекты
40
+ anyToString({ a: 1 }) // '{"a":1}'
24
41
 
25
- console.log(anyToString([[1], [2]])) // '[[1],[2]]' (вложенные массивы превращаются в JSON)
26
- console.log(anyToString([{ a: 1 }, 2])) // '[{"a":1},2]' (массивы с объектами превращаются в JSON)
42
+ // 4. Логические значения (преобразование в 1/0)
43
+ anyToString(true) // '1'
44
+ anyToString(false) // '0'
27
45
 
28
- console.log(anyToString({ a: 1 })) // '{"a":1}'
29
- console.log(anyToString(true)) // '1'
30
- console.log(anyToString(false)) // '0'
31
- console.log(anyToString(123)) // '123'
32
- console.log(anyToString(null)) // ''
33
- ```
46
+ // 5. Пустые значения и типы
47
+ anyToString(null) // ''
48
+ anyToString(123) // '123'
49
+ anyToString(Symbol('test')) // 'Symbol(test)'
50
+ `}
51
+ />
@@ -1,33 +1,51 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/vi/functional-basic/Functions/anyToString - Chuyển đổi một giá trị thành chuỗi'/>
4
4
 
5
5
  # `anyToString`
6
6
 
7
- Một tiện ích chuyển đổi an toàn bất kỳ dữ liệu đầu vào nào thành kiểu chuỗi.
8
-
9
- Điều này rất hữu ích khi xuất dữ liệu ra giao diện mà không biết trước kiểu của biến (đối tượng, mảng, boolean hoặc null).
7
+ Tiện ích để chuyển đổi an toàn bất kỳ dữ liệu đầu vào nào thành kiểu chuỗi.
10
8
 
11
9
  **Tham số:**
12
10
  - `value: V` — Giá trị cần chuyển đổi.
13
- - `isArrayString: boolean` (tùy chọn, mặc định: `true`) — Nếu `true`, các mảng nguyên thủy sẽ được nối với nhau bằng dấu phẩy. Nếu `false`, chúng sẽ được chuyển đổi thành chuỗi JSON.
11
+ - `isArrayString: boolean = true` — Nếu `true`, các mảng nguyên thủy sẽ được nối với nhau bằng dấu phẩy.
12
+ - `trim: boolean = true` — Nếu `true`, loại bỏ khoảng trắng dư thừa (chỉ dành cho chuỗi).
13
+
14
+ **Quy tắc chuyển đổi:**
15
+ - **Chuỗi**: Trả về nguyên bản (có `trim` nếu được bật).
16
+ - **Mảng**: Nếu `isArrayString: true` và không có đối tượng trong mảng, các phần tử sẽ được nối bằng dấu phẩy. Ngược lại — chuyển thành chuỗi JSON.
17
+ - **Đối tượng**: Chuyển đổi thành JSON. Trong trường hợp lỗi (ví dụ: tham chiếu vòng), trả về `toString()` tiêu chuẩn.
18
+ - **Boolean**: `true` chuyển thành `'1'`, `false` thành `'0'`.
19
+ - **Các kiểu khác**: `null` và `undefined` trả về chuỗi rỗng. Các kiểu khác gọi `toString()`.
14
20
 
15
21
  **Trả về:**
16
22
  `string` — Biểu diễn chuỗi của giá trị.
17
23
 
18
- ```typescript
24
+ ## Ví dụ
25
+
26
+ <Source
27
+ language='typescript'
28
+ code={`
19
29
  import { anyToString } from '@dxtmisha/functional-basic'
20
30
 
21
- console.log(anyToString(' test ')) // 'test' (đã trimmed)
22
- console.log(anyToString([1, 2, 3])) // '1,2,3' (isArrayString = true)
23
- console.log(anyToString([1, 2, 3], false)) // '[1,2,3]' (isArrayString = false)
31
+ // 1. Chuỗi (Strings)
32
+ anyToString(' Hello ') // 'Hello'
33
+ anyToString(' Hello ', true, false) // ' Hello '
34
+
35
+ // 2. Mảng (Arrays)
36
+ anyToString([1, 2, 3]) // '1,2,3'
37
+ anyToString([1, 2, 3], false) // '[1,2,3]'
38
+
39
+ // 3. Đối tượng (Objects)
40
+ anyToString({ a: 1 }) // '{"a":1}'
24
41
 
25
- console.log(anyToString([[1], [2]])) // '[[1],[2]]' (các mảng lồng nhau sẽ được chuyển thành JSON)
26
- console.log(anyToString([{ a: 1 }, 2])) // '[{"a":1},2]' (các mảng chứa đối tượng sẽ được chuyển thành JSON)
42
+ // 4. Giá trị Boolean (chuyển đổi thành 1/0)
43
+ anyToString(true) // '1'
44
+ anyToString(false) // '0'
27
45
 
28
- console.log(anyToString({ a: 1 })) // '{"a":1}'
29
- console.log(anyToString(true)) // '1'
30
- console.log(anyToString(false)) // '0'
31
- console.log(anyToString(123)) // '123'
32
- console.log(anyToString(null)) // ''
33
- ```
46
+ // 5. Giá trị rỗng các kiểu khác
47
+ anyToString(null) // ''
48
+ anyToString(123) // '123'
49
+ anyToString(Symbol('test')) // 'Symbol(test)'
50
+ `}
51
+ />
@@ -1,35 +1,47 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/en/functional-basic/Functions/applyTemplate - Applying a template to text'/>
4
4
 
5
5
  # `applyTemplate`
6
6
 
7
- A utility for dynamic text generation based on templates. This is useful for localization (i18n) tasks, generating system messages, or inserting user data into string constants.
8
-
9
- It supports:
10
- - Positional markers (`%d`, `%e`, etc.) to substitute values from an array in order.
11
- - Named markers (`[key]`, `{key}`) to substitute values from an object by keys.
12
- - Paired tags (`[key]content[/key]`, `{key}content{/key}`) to wrap content in HTML tags or other constructs (the word `[content]` inside the passed value is replaced by the tag's generic content).
7
+ A utility for replacing markers in text with values from an object or an array.
13
8
 
14
9
  **Parameters:**
15
10
  - `text: string` — The original text containing template markers.
16
- - `replacement: Record<string, string | number> | string[]` — An object or array containing values for substitution. Defaults to `{}`.
11
+ - `replacement: Record<string, string | number | boolean> | string[]` — An object or array containing values.
12
+
13
+ **Replacement formats (replacement)**
14
+ - **Array**: Used for positional markers like `%d`, `%e`, `%f`, and so on (alphabetically).
15
+ - **Object**: Used for named markers in brackets `[key]` or `{key}`, as well as paired tags `[tag]text[/tag]`.
17
16
 
18
17
  **Returns:**
19
18
  `string` — The text with substituted values.
20
19
 
21
- ```typescript
20
+ ## Examples
21
+
22
+ <Source
23
+ language='typescript'
24
+ code={`
22
25
  import { applyTemplate } from '@dxtmisha/functional-basic'
23
26
 
24
- // Positional markers
25
- console.log(applyTemplate('Hello, %d %e!', ['John', 'Doe'])) // 'Hello, John Doe!'
27
+ // 1. Positional markers (array)
28
+ applyTemplate('Hello, %d %e!', ['John', 'Doe']) // 'Hello, John Doe!'
29
+
30
+ // 2. Named markers (object)
31
+ applyTemplate('Price: [price] {currency}', { price: 100, currency: 'USD' }) // 'Price: 100 USD'
32
+
33
+ // 3. Handling 0 and false
34
+ applyTemplate('Value: [val]', { val: 0 }) // 'Value: 0'
35
+ applyTemplate('Status: [val]', { val: false }) // 'Status: false'
36
+
37
+ // 4. Skipping missing keys
38
+ applyTemplate('Missing: [none]', {}) // 'Missing: [none]'
26
39
 
27
- // Named markers
28
- console.log(applyTemplate('Hello, [name]!', { name: 'John' })) // 'Hello, John!'
29
- console.log(applyTemplate('Hello, {name}!', { name: 'John' })) // 'Hello, John!'
40
+ // 5. Paired tags with content substitution
41
+ const tags = { link: '<a href="https://google.com">[content]</a>' }
42
+ applyTemplate('Click [link]here[/link]', tags) // 'Click <a href="https://google.com">here</a>'
30
43
 
31
- // Wrapped tags with content substitution
32
- console.log(applyTemplate('Click [link]here[/link]', { link: '<a href="#">[content]</a>' }))
33
- console.log(applyTemplate('Click {link}here{/link}', { link: '<a href="#">{content}</a>' }))
34
- // 'Click <a href="#">here</a>'
35
- ```
44
+ // 6. List macros (handling out-of-bounds)
45
+ applyTemplate('Macros: %d, %e, %f', ['A', 'B']) // 'Macros: A, B, '
46
+ `}
47
+ />
@@ -1,35 +1,47 @@
1
- import { Meta } from '@storybook/addon-docs/blocks'
1
+ import { Meta, Source } from '@storybook/addon-docs/blocks'
2
2
 
3
3
  <Meta title='@dxtmisha/ru/functional-basic/Functions/applyTemplate - Применение шаблона к тексту'/>
4
4
 
5
5
  # `applyTemplate`
6
6
 
7
- Утилита для динамического формирования текста на основе шаблонов. Это полезно для задач локализации (i18n), генерации системных сообщений или подстановки пользовательских данных в строковые константы.
8
-
9
- Она поддерживает:
10
- - Позиционные маркеры (`%d`, `%e` и т.д.) для подстановки значений из массива по порядку.
11
- - Именованные маркеры (`[key]`, `{key}`) для подстановки значений из объекта по ключам.
12
- - Парные теги (`[key]контент[/key]`, `{key}контент{/key}`) для оборачивания контента в HTML-теги или другие конструкции (слово `[content]` внутри переданного значения заменяется на содержимое тега).
7
+ Утилита для замены меток в тексте на значения из объекта или массива.
13
8
 
14
9
  **Параметры:**
15
10
  - `text: string` — Исходный текст с шаблоном.
16
- - `replacement: Record<string, string | number> | string[]` — Объект или массив со значениями для подстановки. По умолчанию `{}`.
11
+ - `replacement: Record<string, string | number | boolean> | string[]` — Объект или массив со значениями.
12
+
13
+ **Форматы замены (replacement)**
14
+ - **Массив**: Используется для позиционных меток `%d`, `%e`, `%f` и далее по алфавиту.
15
+ - **Объект**: Используется для именованных меток в скобках `[key]` или `{key}`, а также для парных тегов `[tag]текст[/tag]`.
17
16
 
18
17
  **Возвращает:**
19
18
  `string` — Текст с подставленными значениями.
20
19
 
21
- ```typescript
20
+ ## Примеры
21
+
22
+ <Source
23
+ language='typescript'
24
+ code={`
22
25
  import { applyTemplate } from '@dxtmisha/functional-basic'
23
26
 
24
- // Позиционные маркеры
25
- console.log(applyTemplate('Привет, %d %e!', ['Иван', 'Иванов'])) // 'Привет, Иван Иванов!'
27
+ // 1. Позиционные маркеры (массив)
28
+ applyTemplate('Привет, %d %e!', ['Иван', 'Иванов']) // 'Привет, Иван Иванов!'
29
+
30
+ // 2. Именованные маркеры (объект)
31
+ applyTemplate('Цена: [price] {currency}', { price: 100, currency: 'USD' }) // 'Цена: 100 USD'
32
+
33
+ // 3. Обработка 0 и false
34
+ applyTemplate('Значение: [val]', { val: 0 }) // 'Значение: 0'
35
+ applyTemplate('Статус: [val]', { val: false }) // 'Статус: false'
36
+
37
+ // 4. Пропуск отсутствующих ключей
38
+ applyTemplate('Отсутствует: [none]', {}) // 'Отсутствует: [none]'
26
39
 
27
- // Именованные маркеры
28
- console.log(applyTemplate('Привет, [name]!', { name: 'Иван' })) // 'Привет, Иван!'
29
- console.log(applyTemplate('Привет, {name}!', { name: 'Иван' })) // 'Привет, Иван!'
40
+ // 5. Парные теги с подстановкой контента
41
+ const tags = { link: '<a href="https://google.com">[content]</a>' }
42
+ applyTemplate('Нажми [link]здесь[/link]', tags) // 'Нажми <a href="https://google.com">здесь</a>'
30
43
 
31
- // Обёртка с парными тегами и контентом
32
- console.log(applyTemplate('Нажми [link]здесь[/link]', { link: '<a href="#">[content]</a>' }))
33
- console.log(applyTemplate('Нажми {link}здесь{/link}', { link: '<a href="#">{content}</a>' }))
34
- // 'Нажми <a href="#">здесь</a>'
35
- ```
44
+ // 6. Макросы списка (выход за границы)
45
+ applyTemplate('Список: %d, %e, %f', ['A', 'B']) // 'Список: A, B, '
46
+ `}
47
+ />