@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,54 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/functional-basic/Classes/HashInstance - Экземпляр URL Hash'/>
4
+
5
+ # Класс HashInstance
6
+
7
+ `HashInstance` — это основной класс, реализующий логику управления данными в URL-хэше. Он обеспечивает хранение состояния, механизмы подписки на изменения и синхронизацию с браузерным API.
8
+
9
+ Вы можете использовать этот класс напрямую, если вам требуется изолированное управление хэшем, отличное от глобального состояния `Hash`.
10
+
11
+ ## Ключевые особенности
12
+
13
+ - **Изолированное состояние** — Хранит свой набор переменных хэша.
14
+ - **Поддержка цепочки вызовов** — Большинство методов возвращают `this`, позволяя писать компактный код.
15
+ - **Автоматическая синхронизация** — При инициализации считывает данные из URL и подписывается на событие `hashchange`.
16
+ - **SSR-совместимость** — Безопасно работает в серверном окружении, используя заглушки для DOM API.
17
+
18
+ ## Инициализация
19
+
20
+ Для создания экземпляра используйте конструктор `HashInstance()`.
21
+
22
+ ```typescript
23
+ import { HashInstance } from '@dxtmisha/functional-basic'
24
+
25
+ const myHash = new HashInstance()
26
+ ```
27
+
28
+ ## Методы
29
+
30
+ ### Чтение и запись
31
+ - `get<T>(name: string, defaultValue?: T | (() => T)): T` — Возвращает значение переменной. Если её нет, устанавливает `defaultValue` и возвращает его.
32
+ - `set<T>(name: string, callback: T | (() => T)): this` — Обновляет значение переменной и синхронизирует URL.
33
+
34
+ ### Наблюдение (Watchers)
35
+ - `addWatch<T>(name: string, callback: (value: T) => void): this` — Добавляет обработчик изменения переменной.
36
+ - `removeWatch<T>(name: string, callback: (value: T) => void): this` — Удаляет обработчик.
37
+
38
+ ### Управление
39
+ - `reload(): this` — Обновляет внутреннее состояние из текущего URL-хэша.
40
+
41
+ ## Примеры
42
+
43
+ ### Использование изолированного экземпляра
44
+ ```typescript
45
+ const searchHash = new HashInstance()
46
+
47
+ // Подписка
48
+ searchHash.addWatch('query', (q) => {
49
+ console.log('Поиск:', q)
50
+ })
51
+
52
+ // Установка значения (обновит URL)
53
+ searchHash.set('query', 'smartphones')
54
+ ```
@@ -0,0 +1,54 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/HashInstance - Phiên bản URL Hash'/>
4
+
5
+ # Lớp HashInstance
6
+
7
+ `HashInstance` là lớp cốt lõi triển khai logic quản lý dữ liệu trong URL hash. Nó cung cấp khả năng lưu trữ trạng thái, các cơ chế để đăng ký theo dõi thay đổi và đồng bộ hóa với browser API.
8
+
9
+ Bạn có thể sử dụng lớp này trực tiếp nếu cần quản lý hash riêng biệt, tách rời khỏi trạng thái `Hash` toàn cục.
10
+
11
+ ## Tính năng chính
12
+
13
+ - **Trạng thái biệt lập** — Lưu trữ bộ biến hash riêng của nó.
14
+ - **Chainable API** — Hầu hết các phương thức trả về `this`, cho phép viết mã ngắn gọn.
15
+ - **Đồng bộ hóa tự động** — Khi khởi tạo, nó đọc dữ liệu từ URL và đăng ký sự kiện `hashchange`.
16
+ - **Tương thích SSR** — Hoạt động an toàn trong môi trường máy chủ bằng cách sử dụng các bản giả cho DOM API.
17
+
18
+ ## Khởi tạo
19
+
20
+ Để tạo một phiên bản, hãy sử dụng hàm khởi tạo `HashInstance()`.
21
+
22
+ ```typescript
23
+ import { HashInstance } from '@dxtmisha/functional-basic'
24
+
25
+ const myHash = new HashInstance()
26
+ ```
27
+
28
+ ## Phương thức
29
+
30
+ ### Đọc và Ghi
31
+ - `get<T>(name: string, defaultValue?: T | (() => T)): T` — Trả về giá trị của một biến. Nếu nó không tồn tại, thiết lập `defaultValue` và trả về nó.
32
+ - `set<T>(name: string, callback: T | (() => T)): this` — Cập nhật giá trị của biến và đồng bộ hóa URL.
33
+
34
+ ### Theo dõi (Watchers)
35
+ - `addWatch<T>(name: string, callback: (value: T) => void): this` — Thêm bộ xử lý cho các thay đổi của biến.
36
+ - `removeWatch<T>(name: string, callback: (value: T) => void): this` — Xóa bộ xử lý.
37
+
38
+ ### Quản lý
39
+ - `reload(): this` — Làm mới trạng thái nội bộ từ URL hash hiện tại.
40
+
41
+ ## Ví dụ
42
+
43
+ ### Sử dụng một phiên bản biệt lập
44
+ ```typescript
45
+ const searchHash = new HashInstance()
46
+
47
+ // Đăng ký theo dõi
48
+ searchHash.addWatch('query', (q) => {
49
+ console.log('Tìm kiếm:', q)
50
+ })
51
+
52
+ // Thiết lập giá trị (sẽ cập nhật URL)
53
+ searchHash.set('query', 'smartphones')
54
+ ```
@@ -41,6 +41,11 @@ const meta = new Meta()
41
41
  - `getOg(): MetaOg` — direct access to the `MetaOg` instance.
42
42
  - `getTwitter(): MetaTwitter` — direct access to the `MetaTwitter` instance.
43
43
 
44
+ ## Methods for Generating HTML
45
+
46
+ - `html(): string` — generates the full HTML string of all meta tags: standard + Open Graph + Twitter Card. Used for SSR.
47
+ - `htmlTitle(): string` — generates the page title.
48
+
44
49
  ## Setters
45
50
 
46
51
  All setters return `this` for method chaining.
@@ -74,6 +79,17 @@ const html = meta.html()
74
79
  // ...
75
80
  ```
76
81
 
82
+ ### `htmlTitle(): string`
83
+
84
+ Generates the current title (including suffix).
85
+
86
+ ```javascript
87
+ const meta = new Meta()
88
+ meta.setSuffix('My Site').setTitle('Home')
89
+
90
+ meta.htmlTitle() // "Home - My Site"
91
+ ```
92
+
77
93
  ## Example
78
94
 
79
95
  ```javascript
@@ -41,6 +41,11 @@ const meta = new Meta()
41
41
  - `getOg(): MetaOg` — прямой доступ к экземпляру `MetaOg`.
42
42
  - `getTwitter(): MetaTwitter` — прямой доступ к экземпляру `MetaTwitter`.
43
43
 
44
+ ## Методы для генерации HTML
45
+
46
+ - `html(): string` — генерирует полную HTML-строку всех мета-тегов: стандартных + Open Graph + Twitter Card. Используется для SSR.
47
+ - `htmlTitle(): string` — генерирует заголовок страницы.
48
+
44
49
  ## Сеттеры
45
50
 
46
51
  Все сеттеры возвращают `this` для цепочки вызовов.
@@ -74,6 +79,17 @@ const html = meta.html()
74
79
  // ...
75
80
  ```
76
81
 
82
+ ### `htmlTitle(): string`
83
+
84
+ Генерирует текущий заголовок (включая суффикс).
85
+
86
+ ```javascript
87
+ const meta = new Meta()
88
+ meta.setSuffix('Мой Сайт').setTitle('Главная')
89
+
90
+ meta.htmlTitle() // "Главная - Мой Сайт"
91
+ ```
92
+
77
93
  ## Пример
78
94
 
79
95
  ```javascript
@@ -41,9 +41,14 @@ const meta = new Meta()
41
41
  - `getOg(): MetaOg` — truy cập trực tiếp instance `MetaOg`.
42
42
  - `getTwitter(): MetaTwitter` — truy cập trực tiếp instance `MetaTwitter`.
43
43
 
44
+ ## Phương thức tạo HTML
45
+
46
+ - `html(): string` — tạo chuỗi HTML đầy đủ của tất cả thẻ meta: tiêu chuẩn + Open Graph + Twitter Card. Dùng cho SSR.
47
+ - `htmlTitle(): string` — tạo tiêu đề trang.
48
+
44
49
  ## Setter
45
50
 
46
- Tất cả setter trả về `this` để chuỗi phương thức.
51
+ All setter trả về `this` để chuỗi phương thức.
47
52
 
48
53
  - `setTitle(title: string)` — đặt `document.title` (có hậu tố), `og:title` và `twitter:title` đồng thời.
49
54
  - `setKeywords(keywords: string | string[])` — nhận chuỗi hoặc mảng; mảng tự động nối bằng dấu phẩy.
@@ -74,6 +79,17 @@ const html = meta.html()
74
79
  // ...
75
80
  ```
76
81
 
82
+ ### `htmlTitle(): string`
83
+
84
+ Tạo tiêu đề hiện tại (bao gồm cả hậu tố).
85
+
86
+ ```javascript
87
+ const meta = new Meta()
88
+ meta.setSuffix('Trang web của tôi').setTitle('Trang chủ')
89
+
90
+ meta.htmlTitle() // "Trang chủ - Trang web của tôi"
91
+ ```
92
+
77
93
  ## Ví dụ
78
94
 
79
95
  ```javascript
@@ -49,3 +49,12 @@ manager.set('description', 'My description').set('keywords', 'vue, typescript')
49
49
  manager.html()
50
50
  // '<meta name="description" content="My description"><meta name="keywords" content="vue, typescript">'
51
51
  ```
52
+
53
+ ### `htmlTitle(title: string): string`
54
+
55
+ Converts a title string into an HTML `<title>` tag.
56
+
57
+ ```javascript
58
+ manager.htmlTitle('My Page Title')
59
+ // '<title>My Page Title</title>'
60
+ ```
@@ -49,3 +49,12 @@ manager.set('description', 'Моё описание').set('keywords', 'vue, type
49
49
  manager.html()
50
50
  // '<meta name="description" content="Моё описание"><meta name="keywords" content="vue, typescript">'
51
51
  ```
52
+
53
+ ### `htmlTitle(title: string): string`
54
+
55
+ Преобразует строку заголовка в HTML-тег `<title>`.
56
+
57
+ ```javascript
58
+ manager.htmlTitle('Заголовок страницы')
59
+ // '<title>Заголовок страницы</title>'
60
+ ```
@@ -49,3 +49,12 @@ manager.set('description', 'Mô tả của tôi').set('keywords', 'vue, typescri
49
49
  manager.html()
50
50
  // '<meta name="description" content="Mô tả của tôi"><meta name="keywords" content="vue, typescript">'
51
51
  ```
52
+
53
+ ### `htmlTitle(title: string): string`
54
+
55
+ Chuyển đổi chuỗi tiêu đề thành thẻ HTML `<title>`.
56
+
57
+ ```javascript
58
+ manager.htmlTitle('Tiêu đề trang')
59
+ // '<title>Tiêu đề trang</title>'
60
+ ```
@@ -0,0 +1,79 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/functional-basic/Classes/MetaStatic - Meta Tags Management (Static)'/>
4
+
5
+ # Class MetaStatic
6
+
7
+ The `MetaStatic` class is a **static entry point** for managing page meta tags, Open Graph (OG), and Twitter Card data. It acts as a static wrapper around a globally managed `Meta` instance, providing a clean singleton interface for SEO and social sharing management.
8
+
9
+ ## Key Features
10
+
11
+ - **Static Interface** — Manage page titles, descriptions, and more without manual instantiation.
12
+ - **Unified Management** — Automatically syncs titles and other information across standard meta, OG, and Twitter.
13
+ - **SSR Isolation** — Uses `ServerStorage` to handle instance isolation during server-side rendering.
14
+ - **Fluent API** — Support for method chaining in setter methods.
15
+
16
+ ## Methods
17
+
18
+ ### Access
19
+
20
+ - `getItem(): Meta` — Returns the underlying `Meta` instance.
21
+ - `getOg(): MetaOg` — Gets the MetaOg instance for advanced Open Graph operations.
22
+ - `getTwitter(): MetaTwitter` — Gets the MetaTwitter instance for advanced Twitter Card operations.
23
+
24
+ ### Getters
25
+
26
+ - `getTitle(): string` — Gets the current page title (without suffix).
27
+ - `getDescription(): string` — Gets the current description meta tag.
28
+ - `getKeywords(): string` — Gets the current keywords.
29
+ - `getImage(): string` — Gets the image URL (from OG settings).
30
+ - `getCanonical(): string` — Gets the canonical URL.
31
+ - `getRobots(): MetaRobots` — Gets the current robots directive.
32
+ - `getAuthor(): string` — Gets the author name.
33
+ - `getSiteName(): string` — Gets the site name (from OG settings).
34
+ - `getLocale(): string` — Gets the locale (from OG settings).
35
+
36
+ ### Setters
37
+
38
+ All setter methods return `typeof MetaStatic` to support method chaining.
39
+
40
+ - `setTitle(title: string): typeof MetaStatic` — Sets the page title and updates OG/Twitter titles.
41
+ - `setDescription(description: string): typeof MetaStatic` — Sets the description meta tag.
42
+ - `setKeywords(keywords: string | string[]): typeof MetaStatic` — Sets the keywords (string or array).
43
+ - `setImage(image: string): typeof MetaStatic` — Sets the image for OG and Twitter.
44
+ - `setCanonical(canonical: string): typeof MetaStatic` — Sets the canonical URL and updates OG/Twitter URLs.
45
+ - `setRobots(robots: MetaRobots): typeof MetaStatic` — Sets the robots directive.
46
+ - `setAuthor(author: string): typeof MetaStatic` — Sets the author meta tag.
47
+ - `setSiteName(siteName: string): typeof MetaStatic` — Sets the site name for OG and Twitter.
48
+ - `setLocale(locale: string): typeof MetaStatic` — Sets the locale for Open Graph.
49
+ - `setSuffix(suffix?: string): typeof MetaStatic` — Sets a suffix (e.g., " | My Site") appended to titles.
50
+
51
+ ### Output
52
+
53
+ - `html(): string` — Generates a complete string of HTML meta tags for all managed properties.
54
+ - `htmlTitle(): string` — Generates a complete HTML-safe title string.
55
+
56
+ ## Architecture
57
+
58
+ `MetaStatic` works as a **static proxy**. All calls are forwarded to an internal `Meta` instance managed via `ServerStorage`.
59
+
60
+ ### Request Isolation (SSR)
61
+
62
+ By using `ServerStorage`, `MetaStatic` ensures that during Server-Side Rendering (SSR), meta information for one request does not leak into another. Each request gets its own isolated context.
63
+
64
+ ### Examples
65
+
66
+ ```typescript
67
+ import { MetaStatic } from '@dxtmisha/functional-basic';
68
+
69
+ MetaStatic
70
+ .setSuffix('My Online Store')
71
+ .setTitle('Summer Collection')
72
+ .setDescription('Explore our new arrivals.')
73
+ .setImage('https://example.com/cover.jpg')
74
+ .setLocale('en_US');
75
+
76
+ console.log(MetaStatic.getTitle()); // "Summer Collection"
77
+ document.title; // "Summer Collection - My Online Store"
78
+ console.log(MetaStatic.htmlTitle()); // "Summer Collection - My Online Store"
79
+ ```
@@ -0,0 +1,79 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/functional-basic/Classes/MetaStatic - Управление мета-тегами (Static)'/>
4
+
5
+ # Класс MetaStatic
6
+
7
+ Класс `MetaStatic` является **статической точкой входа** для управления мета-тегами страницы, данными Open Graph (OG) и Twitter Card. Он представляет собой статическую обертку над глобально управляемым экземпляром `Meta`, предоставляя удобный синглтон-интерфейс для SEO и социальных сетей.
8
+
9
+ ## Ключевые особенности
10
+
11
+ - **Статический интерфейс** — управление заголовками, описаниями и другими данными без необходимости ручного создания экземпляров.
12
+ - **Единое управление** — автоматическая синхронизация заголовков и другой информации между стандартными мета-тегами, OG и Twitter.
13
+ - **Изоляция в SSR** — использует `ServerStorage` для обеспечения изоляции данных между запросами во время рендеринга на стороне сервера.
14
+ - **Fluent API** — поддержка цепочки вызовов (method chaining) в методах установки.
15
+
16
+ ## Методы
17
+
18
+ ### Доступ
19
+
20
+ - `getItem(): Meta` — Возвращает базовый экземпляр класса `Meta`.
21
+ - `getOg(): MetaOg` — Получает экземпляр `MetaOg` для расширенных операций с Open Graph.
22
+ - `getTwitter(): MetaTwitter` — Получает экземпляр `MetaTwitter` для расширенных операций с Twitter Card.
23
+
24
+ ### Получение (Getters)
25
+
26
+ - `getTitle(): string` — Возвращает текущий заголовок (без суффикса).
27
+ - `getDescription(): string` — Возвращает содержимое мета-тега description.
28
+ - `getKeywords(): string` — Возвращает список ключевых слов.
29
+ - `getImage(): string` — Возвращает URL изображения (из настроек OG).
30
+ - `getCanonical(): string` — Возвращает канонический URL.
31
+ - `getRobots(): MetaRobots` — Возвращает текущую директиву robots.
32
+ - `getAuthor(): string` — Возвращает имя автора.
33
+ - `getSiteName(): string` — Возвращает название сайта (из настроек OG).
34
+ - `getLocale(): string` — Возвращает локаль (из настроек OG).
35
+
36
+ ### Установка (Setters)
37
+
38
+ Все методы установки возвращают `typeof MetaStatic` для поддержки цепочки вызовов.
39
+
40
+ - `setTitle(title: string): typeof MetaStatic` — Устанавливает заголовок страницы и обновляет заголовки OG/Twitter.
41
+ - `setDescription(description: string): typeof MetaStatic` — Устанавливает мета-тег description.
42
+ - `setKeywords(keywords: string | string[]): typeof MetaStatic` — Устанавливает ключевые слова (строка или массив).
43
+ - `setImage(image: string): typeof MetaStatic` — Устанавливает изображение для OG и Twitter.
44
+ - `setCanonical(canonical: string): typeof MetaStatic` — Устанавливает канонический URL и обновляет URL для OG/Twitter.
45
+ - `setRobots(robots: MetaRobots): typeof MetaStatic` — Устанавливает директиву robots.
46
+ - `setAuthor(author: string): typeof MetaStatic` — Устанавливает мета-тег author.
47
+ - `setSiteName(siteName: string): typeof MetaStatic` — Устанавливает название сайта для OG и Twitter.
48
+ - `setLocale(locale: string): typeof MetaStatic` — Устанавливает локаль для Open Graph.
49
+ - `setSuffix(suffix?: string): typeof MetaStatic` — Устанавливает суффикс (например, " | Мой Сайт"), добавляемый к заголовкам.
50
+
51
+ ### Вывод
52
+
53
+ - `html(): string` — Генерирует полную строку HTML-тегов для всех управляемых свойств.
54
+ - `htmlTitle(): string` — Генерирует полную HTML-безопасную строку заголовка.
55
+
56
+ ## Архитектура
57
+
58
+ `MetaStatic` работает как **статический прокси**. Все вызовы методов перенаправляются на внутренний экземпляр `Meta`, который управляется через `ServerStorage`.
59
+
60
+ ### Изоляция запросов (SSR)
61
+
62
+ Благодаря использованию `ServerStorage`, `MetaStatic` гарантирует, что при рендеринге на стороне сервера (SSR) информация одного запроса не попадет в другой. Каждый запрос получает свой изолированный контекст.
63
+
64
+ ### Примеры
65
+
66
+ ```typescript
67
+ import { MetaStatic } from '@dxtmisha/functional-basic';
68
+
69
+ MetaStatic
70
+ .setSuffix('Мой Интернет Магазин')
71
+ .setTitle('Летняя коллекция')
72
+ .setDescription('Ознакомьтесь с нашими новинками.')
73
+ .setImage('https://example.com/cover.jpg')
74
+ .setLocale('ru_RU');
75
+
76
+ console.log(MetaStatic.getTitle()); // "Летняя коллекция"
77
+ document.title; // "Летняя коллекция - Мой Интернет Магазин"
78
+ console.log(MetaStatic.htmlTitle()); // "Летняя коллекция - Мой Интернет Магазин"
79
+ ```
@@ -0,0 +1,79 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/MetaStatic - Quản lý Meta Tags (Static)'/>
4
+
5
+ # Class MetaStatic
6
+
7
+ Lớp `MetaStatic` là **điểm truy cập tĩnh** để quản lý các thẻ meta của trang, dữ liệu Open Graph (OG) và Twitter Card. Nó hoạt động như một lớp vỏ bọc tĩnh (static wrapper) xung quanh một thực thể `Meta` được quản lý toàn cục, cung cấp một giao diện singleton sạch sẽ để quản lý SEO và chia sẻ mạng xã hội.
8
+
9
+ ## Các tính năng chính
10
+
11
+ - **Giao diện tĩnh** — Quản lý tiêu đề trang, mô tả và nhiều thứ khác mà không cần khởi tạo thủ công.
12
+ - **Quản lý thống nhất** — Tự động đồng bộ hóa tiêu đề và các thông tin khác trên các thẻ meta tiêu chuẩn, OG và Twitter.
13
+ - **Cách ly trong SSR** — Sử dụng `ServerStorage` để xử lý cách ly thực thể trong quá trình render phía máy chủ (server-side rendering).
14
+ - **Fluent API** — Hỗ trợ kỹ thuật method chaining cho các phương thức thiết lập (setter).
15
+
16
+ ## Các phương thức
17
+
18
+ ### Truy cập
19
+
20
+ - `getItem(): Meta` — Trả về thực entity `Meta` cơ sở.
21
+ - `getOg(): MetaOg` — Lấy thực thể `MetaOg` cho các thao tác Open Graph nâng cao.
22
+ - `getTwitter(): MetaTwitter` — Lấy thực thể `MetaTwitter` cho các thao tác Twitter Card nâng cao.
23
+
24
+ ### Lấy dữ liệu (Getters)
25
+
26
+ - `getTitle(): string` — Lấy tiêu đề trang hiện tại (không bao gồm hậu tố).
27
+ - `getDescription(): string` — Lấy nội dung thẻ meta description.
28
+ - `getKeywords(): string` — Lấy các từ khóa hiện tại.
29
+ - `getImage(): string` — Lấy URL hình ảnh (từ cài đặt OG).
30
+ - `getCanonical(): string` — Lấy URL chuẩn (canonical).
31
+ - `getRobots(): MetaRobots` — Lấy chỉ thị robots hiện tại.
32
+ - `getAuthor(): string` — Lấy tên tác giả.
33
+ - `getSiteName(): string` — Lấy tên trang web (từ cài đặt OG).
34
+ - `getLocale(): string` — Lấy mã ngôn ngữ/khu vực (từ cài đặt OG).
35
+
36
+ ### Thiết lập (Setters)
37
+
38
+ Tất cả các phương thức thiết lập đều trả về `typeof MetaStatic` để hỗ trợ method chaining.
39
+
40
+ - `setTitle(title: string): typeof MetaStatic` — Thiết lập tiêu đề trang và cập nhật tiêu đề OG/Twitter.
41
+ - `setDescription(description: string): typeof MetaStatic` — Thiết lập thẻ meta description.
42
+ - `setKeywords(keywords: string | string[]): typeof MetaStatic` — Thiết lập từ khóa (chuỗi hoặc mảng).
43
+ - `setImage(image: string): typeof MetaStatic` — Thiết lập hình ảnh cho OG và Twitter.
44
+ - `setCanonical(canonical: string): typeof MetaStatic` — Thiết lập URL chuẩn và cập nhật URL cho OG/Twitter.
45
+ - `setRobots(robots: MetaRobots): typeof MetaStatic` — Thiết lập chỉ thị robots.
46
+ - `setAuthor(author: string): typeof MetaStatic` — Thiết lập thẻ meta author.
47
+ - `setSiteName(siteName: string): typeof MetaStatic` — Thiết lập tên trang web cho OG và Twitter.
48
+ - `setLocale(locale: string): typeof MetaStatic` — Thiết lập mã ngôn ngữ cho Open Graph.
49
+ - `setSuffix(suffix?: string): typeof MetaStatic` — Thiết lập hậu tố (ví dụ: " | My Site") được thêm vào cuối tiêu đề.
50
+
51
+ ### Đầu ra
52
+
53
+ - `html(): string` — Tạo ra một chuỗi đầy đủ các thẻ HTML meta cho tất cả các thuộc tính được quản lý.
54
+ - `htmlTitle(): string` — Tạo ra chuỗi tiêu đề an toàn với HTML.
55
+
56
+ ## Kiến trúc
57
+
58
+ `MetaStatic` hoạt động như một **proxy tĩnh**. Tất cả các cuộc gọi phương thức được chuyển tiếp đến một thực thể `Meta` nội bộ được quản lý thông qua `ServerStorage`.
59
+
60
+ ### Cách ly yêu cầu (SSR)
61
+
62
+ Bằng cách sử dụng `ServerStorage`, `MetaStatic` đảm bảo rằng trong quá trình Render phía máy chủ (SSR), thông tin meta của một yêu cầu không bị rò rỉ sang yêu cầu khác. Mỗi yêu cầu có một bối cảnh cách ly riêng.
63
+
64
+ ### Ví dụ
65
+
66
+ ```typescript
67
+ import { MetaStatic } from '@dxtmisha/functional-basic';
68
+
69
+ MetaStatic
70
+ .setSuffix('Cửa hàng trực tuyến của tôi')
71
+ .setTitle('Bộ sưu tập mùa hè')
72
+ .setDescription('Khám phá các sản phẩm mới nhất của chúng tôi.')
73
+ .setImage('https://example.com/cover.jpg')
74
+ .setLocale('vi_VN');
75
+
76
+ console.log(MetaStatic.getTitle()); // "Bộ sưu tập mùa hè"
77
+ document.title; // "Bộ sưu tập mùa hè - Cửa hàng trực tuyến của tôi"
78
+ console.log(MetaStatic.htmlTitle()); // "Bộ sưu tập mùa hè - Cửa hàng trực tuyến của tôi"
79
+ ```
@@ -0,0 +1,50 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/functional-basic/Classes/ResumableTimer - Pausable Timer'/>
4
+
5
+ # ResumableTimer Class
6
+
7
+ A class for creating a timer that can be paused, resumed, reset, and cleared. It is useful for UI elements that need to track elapsed time even when interrupted, such as progress bars, auto-closing notifications, or slides.
8
+
9
+ ## Key Features
10
+
11
+ - **Pause & Resume** — stop the countdown and continue later from the exact millisecond where it left off.
12
+ - **Completion Tracking** — explicitly tracks if the timer has finished its execution.
13
+ - **Robust Logic** — handles edge cases like resuming when time has already elapsed.
14
+ - **Fluent Interface** — methods return `this`, allowing for method chaining.
15
+
16
+ ## Initialization
17
+
18
+ To initialize the object, call the constructor `ResumableTimer(callback, delay, blockStart)`.
19
+
20
+ **Parameters:**
21
+ - `callback: FunctionVoid` — the function to be called after the delay.
22
+ - `delay: number = 320` — delay in milliseconds.
23
+ - `blockStart: boolean = false` — if true, the timer will not start immediately.
24
+
25
+ ```typescript
26
+ import { ResumableTimer } from '@dxtmisha/functional-basic'
27
+
28
+ // 1. Basic initialization (starts immediately)
29
+ const timer = new ResumableTimer(() => {
30
+ console.log('Timer finished!')
31
+ }, 5000)
32
+
33
+ // 2. Initialization without starting
34
+ const delayedTimer = new ResumableTimer(
35
+ () => console.log('Task started!'),
36
+ 3000,
37
+ true
38
+ )
39
+
40
+ delayedTimer.resume() // Start it manually
41
+ ```
42
+
43
+ ## Methods
44
+
45
+ ### Management
46
+
47
+ - `resume(): this` — Starts or resumes the timer.
48
+ - `pause(): this` — Pauses the timer and calculates the remaining time.
49
+ - `reset(): this` — Completely clears the current state and restarts the timer with the original delay.
50
+ - `clear(): this` — Completely stops the timer and resets all internal states.
@@ -0,0 +1,50 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/functional-basic/Classes/ResumableTimer - Таймер с паузой'/>
4
+
5
+ # Класс ResumableTimer
6
+
7
+ Класс для создания таймера, который можно приостанавливать, возобновлять, сбрасывать и очищать. Он полезен для элементов интерфейса, которым необходимо отслеживать прошедшее время даже при прерывании, таких как прогресс-бары, автоматически закрывающиеся уведомления или слайды.
8
+
9
+ ## Ключевые особенности
10
+
11
+ - **Пауза и возобновление** — останавливает обратный отсчет и продолжает его позже с точностью до миллисекунды.
12
+ - **Отслеживание завершения** — явно отслеживает, закончил ли таймер свое выполнение.
13
+ - **Надежная логика** — обрабатывает крайние случаи, такие как возобновление, когда время уже истекло.
14
+ - **Fluent Interface** — методы возвращают `this`, что позволяет использовать цепочки вызовов.
15
+
16
+ ## Инициализация
17
+
18
+ Для инициализации объекта вызовите конструктор `ResumableTimer(callback, delay, blockStart)`.
19
+
20
+ **Параметры:**
21
+ - `callback: FunctionVoid` — функция, которая будет вызвана после задержки.
22
+ - `delay: number = 320` — задержка в миллисекундах.
23
+ - `blockStart: boolean = false` — если true, таймер не запустится сразу.
24
+
25
+ ```typescript
26
+ import { ResumableTimer } from '@dxtmisha/functional-basic'
27
+
28
+ // 1. Базовая инициализация (запускается сразу)
29
+ const timer = new ResumableTimer(() => {
30
+ console.log('Таймер завершен!')
31
+ }, 5000)
32
+
33
+ // 2. Инициализация без немедленного запуска
34
+ const delayedTimer = new ResumableTimer(
35
+ () => console.log('Задача запущена!'),
36
+ 3000,
37
+ true
38
+ )
39
+
40
+ delayedTimer.resume() // Запуск вручную
41
+ ```
42
+
43
+ ## Методы
44
+
45
+ ### Управление
46
+
47
+ - `resume(): this` — Запускает или возобновляет таймер.
48
+ - `pause(): this` — Приостанавливает таймер и вычисляет оставшееся время.
49
+ - `reset(): this` — Полностью сбрасывает текущее состояние и перезапускает таймер с исходной задержкой.
50
+ - `clear(): this` — Полностью останавливает таймер и сбрасывает все внутренние состояния.
@@ -0,0 +1,50 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/functional-basic/Classes/ResumableTimer - Bộ hẹn giờ có thể tạm dừng'/>
4
+
5
+ # Lớp ResumableTimer
6
+
7
+ Lớp chuyên dùng để tạo bộ hẹn giờ có thể tạm dừng, tiếp tục, thiết lập lại và xóa bỏ. Nó hữu ích cho các thành phần giao diện người dùng cần theo dõi thời gian đã trôi qua ngay cả khi bị gián đoạn, chẳng hạn như thanh tiến trình, thông báo tự động đóng hoặc các slide.
8
+
9
+ ## Các tính năng chính
10
+
11
+ - **Tạm dừng & Tiếp tục** — dừng đếm ngược và tiếp tục sau đó từ chính xác mili giây đã dừng lại.
12
+ - **Theo dõi hoàn thành** — theo dõi rõ ràng xem bộ hẹn giờ đã kết thúc thực thi hay chưa.
13
+ - **Logic mạnh mẽ** — xử lý các trường hợp biên như tiếp tục khi thời gian đã trôi qua hết.
14
+ - **Giao diện mượt mà (Fluent Interface)** — các phương thức trả về `this`, cho phép gọi chuỗi phương thức.
15
+
16
+ ## Khởi tạo
17
+
18
+ Để khởi tạo đối tượng, hãy gọi hàm khởi tạo `ResumableTimer(callback, delay, blockStart)`.
19
+
20
+ **Tham số:**
21
+ - `callback: FunctionVoid` — hàm sẽ được gọi sau khoảng thời gian trễ.
22
+ - `delay: number = 320` — thời gian trễ tính bằng mili giây.
23
+ - `blockStart: boolean = false` — nếu là true, bộ hẹn giờ sẽ không bắt đầu ngay lập tức.
24
+
25
+ ```typescript
26
+ import { ResumableTimer } from '@dxtmisha/functional-basic'
27
+
28
+ // 1. Khởi tạo cơ bản (bắt đầu ngay lập tức)
29
+ const timer = new ResumableTimer(() => {
30
+ console.log('Hết giờ!')
31
+ }, 5000)
32
+
33
+ // 2. Khởi tạo không bắt đầu ngay
34
+ const delayedTimer = new ResumableTimer(
35
+ () => console.log('Nhiệm vụ bắt đầu!'),
36
+ 3000,
37
+ true
38
+ )
39
+
40
+ delayedTimer.resume() // Bắt đầu thủ công
41
+ ```
42
+
43
+ ## Các phương thức
44
+
45
+ ### Quản lý
46
+
47
+ - `resume(): this` — Bắt đầu hoặc tiếp tục bộ hẹn giờ.
48
+ - `pause(): this` — Tạm dừng bộ hẹn giờ và tính toán thời gian còn lại.
49
+ - `reset(): this` — Xóa hoàn toàn trạng thái hiện tại và khởi động lại với độ trễ ban đầu.
50
+ - `clear(): this` — Dừng hoàn toàn bộ hẹn giờ và thiết lập lại tất cả các trạng thái nội bộ.