@dxtmisha/wiki 0.39.7 → 0.39.8

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 (191) hide show
  1. package/dist/{defineProperty-DblGXmzD.js → defineProperty-Bjg6wMoX.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/media.js +12 -0
  4. package/dist/storybook.js +1 -1
  5. package/package.json +1 -1
  6. package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
  7. package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
  8. package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
  9. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +54 -54
  10. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +54 -54
  11. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +54 -54
  12. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
  13. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
  14. package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
  15. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
  16. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
  17. package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
  18. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
  19. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
  20. package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
  21. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
  22. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
  23. package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
  24. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
  25. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
  26. package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
  27. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +101 -49
  28. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +101 -49
  29. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +98 -47
  30. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
  31. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
  32. package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
  33. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +50 -21
  34. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +54 -25
  35. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +55 -26
  36. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
  37. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
  38. package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
  39. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
  40. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
  41. package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
  42. package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
  43. package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
  44. package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
  45. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
  46. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
  47. package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
  48. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
  49. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
  50. package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
  51. package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
  52. package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
  53. package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
  54. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
  55. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
  56. package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
  57. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
  58. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
  59. package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
  60. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +153 -0
  61. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +153 -0
  62. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +153 -0
  63. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
  64. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
  65. package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
  66. package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
  67. package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
  68. package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
  69. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
  70. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
  71. package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
  72. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
  73. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
  74. package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
  75. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
  76. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
  77. package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
  78. package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
  79. package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
  80. package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
  81. package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
  82. package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
  83. package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
  84. package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
  85. package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
  86. package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
  87. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
  88. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
  89. package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
  90. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
  91. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
  92. package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
  93. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
  94. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
  95. package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
  96. package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
  97. package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
  98. package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
  99. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
  100. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
  101. package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
  102. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +78 -0
  103. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +78 -0
  104. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +78 -0
  105. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
  106. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
  107. package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
  108. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
  109. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
  110. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
  111. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
  112. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
  113. package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
  114. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
  115. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
  116. package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
  117. package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
  118. package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
  119. package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
  120. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
  121. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
  122. package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
  123. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
  124. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
  125. package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
  126. package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
  127. package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
  128. package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
  129. package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
  130. package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
  131. package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
  132. package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
  133. package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
  134. package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
  135. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
  136. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
  137. package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
  138. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
  139. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
  140. package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
  141. package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
  142. package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
  143. package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
  144. package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
  145. package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
  146. package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
  147. package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
  148. package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
  149. package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
  150. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
  151. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
  152. package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
  153. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
  154. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
  155. package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
  156. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
  157. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
  158. package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
  159. package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
  160. package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
  161. package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
  162. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
  163. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
  164. package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
  165. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
  166. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
  167. package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
  168. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
  169. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
  170. package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
  171. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
  172. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
  173. package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
  174. package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
  175. package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
  176. package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
  177. package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
  178. package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
  179. package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
  180. package/src/media/functional/ui/about/about.en.mdx +45 -0
  181. package/src/media/functional/ui/about/about.ru.mdx +45 -0
  182. package/src/media/functional/ui/about/about.vi.mdx +45 -0
  183. package/src/media/functional/ui/component/component.en.mdx +104 -0
  184. package/src/media/functional/ui/component/component.ru.mdx +106 -0
  185. package/src/media/functional/ui/component/component.vi.mdx +104 -0
  186. package/src/media/functional/ui/setup/setup.en.mdx +72 -0
  187. package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
  188. package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
  189. package/src/media/functional/ui/wiki-data.en.mdx +114 -0
  190. package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
  191. package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
@@ -21,8 +21,8 @@ import {Meta} from '@storybook/addon-docs/blocks'
21
21
  ### Ограничения дженериков (Generic Constraints)
22
22
 
23
23
  - `Options extends FormattersOptionsList` — тип параметров форматирования.
24
- - `List extends FormattersList<FormattersListItem> | FormattersListItem` — тип входных данных (массив или один элемент).
25
- - `Item extends (List extends any[] ? List[number] : List)` — тип одного элемента в списке.
24
+ - `List extends FormattersListProp` — тип входных данных (массив или один элемент).
25
+ - `Item extends FormattersItemProp<List>` — тип одного элемента в списке.
26
26
 
27
27
  **Параметры:**
28
28
  - `options: Options` — параметры форматирования для каждого столбца/свойства.
@@ -44,31 +44,17 @@ const options = {
44
44
  user: {
45
45
  type: 'name',
46
46
  options: { lastPropName: 'surname', firstPropName: 'name' }
47
- },
48
- weight: {
49
- type: 'unit',
50
- options: { unit: 'kilogram' }
51
- },
52
- count: {
53
- type: 'plural',
54
- options: { words: 'яблоко|яблока|яблок' }
55
- },
56
- status: {
57
- transformation: (value: number) => value === 1 ? 'Активен' : 'Неактивен'
58
47
  }
59
48
  }
60
49
 
61
- // 2. Исходные данные (может быть массивом или одним объектом)
50
+ // 2. Исходные данные
62
51
  const data = [
63
52
  {
64
53
  price: 100,
65
54
  currency: 'RUB',
66
55
  created: '2024-03-07T12:00:00',
67
56
  name: 'Иван',
68
- surname: 'Иванов',
69
- weight: 75,
70
- count: 5,
71
- status: 1
57
+ surname: 'Иванов'
72
58
  }
73
59
  ]
74
60
 
@@ -76,93 +62,95 @@ const data = [
76
62
  const formatter = new Formatters(options, data)
77
63
  ```
78
64
 
79
- ## Обработка данных
65
+ ## Методы
80
66
 
81
- ### `to`
67
+ ### Обработка
68
+ - `to(): FormattersReturn<List, Options>` — Обрабатывает данные и возвращает результат. Если на вход был массив, возвращает новый массив обогащенных элементов. Если был один элемент — один объект. Добавляет свойства с суффиксом `Format`.
82
69
 
83
- Обрабатывает данные и возвращает результат. Если на вход был передан массив, метод возвращает новый массив обогащенных элементов. Если был один элемент — возвращает один обогащенный элемент.
70
+ ### Настройка
71
+ - `setList(list?: List): this` — Обновляет данные для форматирования. Поддерживает чейнинг.
84
72
 
85
- **Возвращает:** `FormattersListColumns<Item, Options> | FormattersListColumnItem<Item, Options>` — обогащенные данные с дополнительными свойствами `*Format`.
73
+ ### Информация
74
+ - `is(): boolean` — Проверяет, установлены ли данные для обработки.
75
+ - `isArray(): boolean` — Являются ли текущие данные массивом.
76
+ - `length(): number` — Возвращает количество записей в списке.
77
+ - `getList(): FormattersList<Item>` — Возвращает текущий список в виде массива.
78
+ - `getOptions(): Options` — Возвращает текущую конфигурацию форматирования.
79
+
80
+ ## Типы и параметры форматирования
81
+
82
+ Конфигурация `FormattersOptionsList` — это словарь, где ключи соответствуют именам свойств в данных (поддерживается точечная нотация `path.to.prop`), а значения — объекту `FormattersOptionsItem`.
83
+
84
+ ### Общая структура `FormattersOptionsItem`
85
+ - `type?: FormattersType` — Тип форматировщика.
86
+ - `transformation?: (value, item, options) => string` — Кастомная функция преобразования.
87
+ - `options?: Options` — Объект параметров, структура которого зависит от выбранного `type`.
88
+
89
+ ### Подробное описание типов
90
+
91
+ #### 1. Валюта (`currency`)
92
+ Используется для локализованного отображения денежных значений.
93
+ - `currencyPropName?: string` — Имя свойства в элементе, из которого берется код валюты (по умолчанию `currency`).
94
+ - `options?: string | Intl.NumberFormatOptions` — Можно передать фиксированный код (например, `'USD'`) или объект настроек `Intl.NumberFormat`.
95
+ - `numberOnly?: boolean` — Если `true`, возвращает только отформатированное число без символа валюты.
96
+
97
+ #### 2. Дата (`date`)
98
+ Форматирование дат и времени через `GeoIntl`.
99
+ - `type?: GeoDate` — Предустановленный формат:
100
+ - `full` — Полная дата и время.
101
+ - `datetime` — Дата и время (без секунд).
102
+ - `date` — Только дата.
103
+ - `time` — Только время.
104
+ - `year-month`, `year`, `month`, `day`, `day-month`, `hour-minute`.
105
+ - `options?: Intl.DateTimeFormatOptions` — Стандартные параметры `Intl` (например, `month: 'long'`).
106
+ - `hour24?: boolean` — Если `true`, принудительно включает 24-часовой режим.
107
+
108
+ #### 3. Имя (`name`)
109
+ Склеивает ФИО в правильном порядке.
110
+ - `lastPropName?: string` — Поле для фамилии (по умолчанию `lastName`).
111
+ - `firstPropName?: string` — Поле для имени (по умолчанию `firstName`).
112
+ - `surname?: string` — Поле для отчества (по умолчанию `surname`).
113
+ - `short?: boolean` — Если `true`, выводит фамилию и инициалы (например, «Иванов И. И.»).
114
+
115
+ #### 4. Число (`number`)
116
+ Обычное форматирование чисел с разделением разрядов.
117
+ - `options?: Intl.NumberFormatOptions` — Параметры `Intl` (количество знаков после запятой, стиль и т.д.).
118
+
119
+ #### 5. Множественное число (`plural`)
120
+ Выбор правильной формы слова в зависимости от числа.
121
+ - `words: string` — Формы слова через разделитель `|`.
122
+ - Для русского: `"яблоко|яблока|яблок"`.
123
+ - Для английского: `"apple|apples"`.
124
+ - `options?: Intl.PluralRulesOptions` — Настройки правил плюрализации.
125
+ - `optionsNumber?: Intl.NumberFormatOptions` — Настройки форматирования самого числа, которое выводится перед словом.
126
+
127
+ #### 6. Единица измерения (`unit`)
128
+ Добавление единиц измерения (км, кг, л).
129
+ - `unit: string` — Код единицы измерения (например, `'kilometer'`, `'kilogram'`, `'liter'`).
130
+ - `options?: Intl.NumberFormatOptions` — Параметры форматирования числовой части.
131
+
132
+ ## Примеры
133
+
134
+ ### Использование точечной нотации (Dot Notation)
135
+ ```typescript
136
+ const options = {
137
+ 'user.profile.age': { type: 'number' }
138
+ }
139
+ const data = { user: { profile: { age: 25 } } }
140
+ const formatter = new Formatters(options, data)
86
141
 
87
- ```javascript
88
142
  const result = formatter.to()
89
- /*
90
- Результат (если массив): [
91
- {
92
- id: 101,
93
- price: 100,
94
- currency: 'RUB',
95
- priceFormat: '100,00 ₽',
96
- status: 1,
97
- statusFormat: 'Активен',
98
- ...
99
- }
100
- ]
101
-
102
- Результат (если один объект): {
103
- price: 100,
104
- priceFormat: '100,00 ₽',
105
- ...
106
- }
107
- */
143
+ // result.userProfileAgeFormat === "25"
108
144
  ```
109
145
 
110
- ## Получение и управление данными
111
-
112
- - `is(): boolean` — Проверяет, установлен ли список/элемент.
113
- - `isArray(): boolean` — Проверяет, являются ли текущие данные массивом.
114
- - `length(): number` — Возвращает количество записей в списке.
115
- - `getList(): Item[]` — Возвращает текущий список данных в виде массива.
116
- - `getOptions(): Options` — Возвращает текущую карту конфигурации форматирования.
117
- - `setList(list?: List): this` — Обновляет данные для форматирования и возвращает экземпляр класса для цепочки вызовов.
118
-
119
- ## Структура конфигурации
120
-
121
- Объект конфигурации, передаваемый в конструктор, представляет собой карту, где каждый ключ соответствует имени свойства в ваших данных. Каждое значение должно соответствовать структуре `FormattersOptionsItem`.
122
-
123
- ### Основная структура элемента
124
-
146
+ ### Кастомная трансформация
125
147
  ```typescript
126
- {
127
- // 1. Укажите тип форматирования
128
- type: 'currency' | 'date' | 'name' | 'number' | 'plural' | 'unit',
129
-
130
- // 2. Передайте параметры, специфичные для типа, здесь
131
- options: { ... },
132
-
133
- // 3. Или используйте собственную функцию (перекрывает логику типа)
134
- transformation: (value, item, options) => string
148
+ const options = {
149
+ status: {
150
+ // Пользовательская функция имеет приоритет над type
151
+ transformation: (value, item) => {
152
+ return value === 'active' ? `✅ ${item.name} в сети` : '❌ Оффлайн'
153
+ }
154
+ }
135
155
  }
136
156
  ```
137
-
138
- ## Специфичные параметры
139
-
140
- Ниже приведены параметры, доступные внутри свойства **`options`** для каждого типа.
141
-
142
- ### Валюта (`currency`)
143
- - `currencyPropName?: string` — Свойство в элементе, содержащее код валюты (по умолчанию `item.currency`).
144
- - `options?: string | Intl.NumberFormatOptions` — Фиксированный код валюты или полные параметры `Intl`.
145
- - `numberOnly?: boolean` — Если `true`, возвращает только отформатированное число без символа.
146
-
147
- ### Дата (`date`)
148
- - `type?: GeoDate` — Предустановленный тип: `full`, `datetime`, `date`, `year-month`, `year`, `month`, `day`, `day-month`, `time`, `hour-minute`, `hour`, `minute`, `second`.
149
- - `options?: Intl.DateTimeFormatOptions['month'] | Intl.DateTimeFormatOptions` — Дополнительные параметры `Intl` или стиль месяца.
150
- - `hour24?: boolean` — Принудительно использует 24-часовой формат, если `true`.
151
-
152
- ### Имя (`name`)
153
- - `lastPropName?: string` — Поле для фамилии (по умолчанию: `lastName`).
154
- - `firstPropName?: string` — Поле для имени (по умолчанию: `firstName`).
155
- - `surname?: string` — Поле для отчества (по умолчанию: `surname`).
156
- - `short?: boolean` — Использовать ли краткий формат (инициалы).
157
-
158
- ### Число (`number`)
159
- - `options?: Intl.NumberFormatOptions` — Стандартные параметры чисел `Intl`.
160
-
161
- ### Множественное число (`plural`)
162
- - `words: string` — Формы слов, разделенные `|` (например, `"яблоко|яблока|яблок"`).
163
- - `options?: Intl.PluralRulesOptions` — Настройки правил множественного числа.
164
- - `optionsNumber?: Intl.NumberFormatOptions` — Форматирование самого числа.
165
-
166
- ### Единица измерения (`unit`)
167
- - `unit: string | Intl.NumberFormatOptions` — Единица измерения для отображения (например, `'kilometer'`, `'kilogram'`).
168
-
@@ -4,34 +4,34 @@ import {Meta} from '@storybook/addon-docs/blocks'
4
4
 
5
5
  # Lớp Formatters
6
6
 
7
- Một lớp chuyên dụng để định dạng danh sách dữ liệu dựa trên cấu hình được cung cấp. Nó đóng vai trò như một cầu nối giữa dữ liệu thô và các chuỗi văn bản đã được địa phương hóa, dễ đọc, tận dụng cơ chế singleton `GeoIntl` để đảm bảo tính nhất quán trong định dạng trên các ngôn ngữ khác nhau.
7
+ Một lớp chuyên dụng để định dạng danh sách dữ liệu dựa trên cấu hình được cung cấp. Nó đóng vai trò cầu nối giữa dữ liệu thô và các chuỗi đã được bản địa hóa, dễ đọc, sử dụng singleton `GeoIntl` để định dạng nhất quán trên các ngôn ngữ khác nhau.
8
8
 
9
- ## Tính năng chính
9
+ ## Các tính năng chính
10
10
 
11
- - **Cấu hình khai báo** — Định nghĩa các quy tắc định dạng một lần và áp dụng chúng cho toàn bộ tập dữ liệu.
12
- - **Hỗ trợ nhiều kiểu dữ liệu** — Hỗ trợ tích hợp cho tiền tệ, ngày tháng, tên, số, số nhiều và các đơn vị đo lường.
13
- - **Biến đổi tùy chỉnh** — Khả năng cung cấp các hàm riêng cho các nhu cầu định dạng đặc thù.
14
- - **An toàn kiểu dữ liệu (Type Safety)** — Hỗ trợ đầy đủ TypeScript cho các mục dữ liệu, các tùy chọn và danh sách kết quả đã được định dạng.
15
- - **Tự động tạo khóa (Key Generation)** — Tự động thêm các giá trị đã định dạng vào các mục với hậu tố `Format` (ví dụ: `price` trở thành `priceFormat`).
11
+ - **Cấu hình khai báo** — Xác định các quy tắc định dạng một lần và áp dụng chúng cho toàn bộ tập dữ liệu.
12
+ - **Hỗ trợ nhiều loại** — Hỗ trợ tích hợp cho tiền tệ, ngày tháng, tên, số, số nhiều và đơn vị đo lường.
13
+ - **Chuyển đổi tùy chỉnh** — Khả năng cung cấp các hàm riêng của bạn cho các nhu cầu định dạng duy nhất.
14
+ - **Typing** — Hỗ trợ TypeScript đầy đủ cho các mục, tham số và danh sách đã định dạng kết quả.
15
+ - **Tự động tạo khóa** — Tự động thêm các giá trị đã định dạng vào các mục với hậu tố `Format` (ví dụ: `price` trở thành `priceFormat`).
16
16
 
17
17
  ## Khởi tạo
18
18
 
19
- Để khởi tạo đối tượng, hãy gọi hàm khởi tạo `Formatters(options, list)`.
19
+ Để khởi tạo đối tượng, hãy gọi constructor `Formatters(options, list)`.
20
20
 
21
- ### Ràng buộc Generic (Generic Constraints)
21
+ ### Các ràng buộc Generic (Generic Constraints)
22
22
 
23
- - `Options extends FormattersOptionsList` — kiểu của các tùy chọn định dạng.
24
- - `List extends FormattersList<FormattersListItem> | FormattersListItem` — kiểu dữ liệu đầu vào (mảng hoặc một mục duy nhất).
25
- - `Item extends (List extends any[] ? List[number] : List)` — kiểu của một mục duy nhất trong danh sách.
23
+ - `Options extends FormattersOptionsList` — kiểu tham số định dạng.
24
+ - `List extends FormattersListProp` — kiểu dữ liệu đầu vào (mảng hoặc một mục).
25
+ - `Item extends FormattersItemProp<List>` — kiểu của một mục duy nhất trong danh sách.
26
26
 
27
27
  **Tham số:**
28
- - `options: Options` — tùy chọn định dạng cho mỗi cột/thuộc tính.
29
- - `list?: List` — danh sách hoặc mục dữ liệu ban đầu để định dạng.
28
+ - `options: Options` — tham số định dạng cho mỗi cột/thuộc tính.
29
+ - `list?: List` — danh sách dữ liệu ban đầu để định dạng.
30
30
 
31
31
  ```typescript
32
32
  import { Formatters } from '@dxtmisha/functional-basic'
33
33
 
34
- // 1. Xác định các tùy chọn định dạng
34
+ // 1. Xác định các tham số định dạng
35
35
  const options = {
36
36
  price: {
37
37
  type: 'currency',
@@ -44,31 +44,17 @@ const options = {
44
44
  user: {
45
45
  type: 'name',
46
46
  options: { lastPropName: 'surname', firstPropName: 'name' }
47
- },
48
- weight: {
49
- type: 'unit',
50
- options: { unit: 'kilogram' }
51
- },
52
- count: {
53
- type: 'plural',
54
- options: { words: 'quả táo|quả táo' }
55
- },
56
- status: {
57
- transformation: (value: number) => value === 1 ? 'Đang hoạt động' : 'Ngừng hoạt động'
58
47
  }
59
48
  }
60
49
 
61
- // 2. Dữ liệu ban đầu (có thể là một mảng hoặc một đối tượng duy nhất)
50
+ // 2. Dữ liệu thô
62
51
  const data = [
63
52
  {
64
53
  price: 100,
65
54
  currency: 'VND',
66
55
  created: '2024-03-07T12:00:00',
67
- name: 'Thanh',
68
- surname: 'Nguyễn',
69
- weight: 75,
70
- count: 5,
71
- status: 1
56
+ name: 'An',
57
+ surname: 'Nguyễn'
72
58
  }
73
59
  ]
74
60
 
@@ -76,93 +62,95 @@ const data = [
76
62
  const formatter = new Formatters(options, data)
77
63
  ```
78
64
 
79
- ## Xử dữ liệu
80
-
81
- ### `to`
65
+ ## Các phương thức
82
66
 
83
- Xử lý dữ liệu và trả về kết quả. Nếu đầu vào là một mảng, nó sẽ trả về một mảng mới gồm các mục đã được bổ sung dữ liệu. Nếu đầu vào là một mục duy nhất, nó sẽ trả về chính mục đó với các trường đã định dạng.
67
+ ### Xử lý
68
+ - `to(): FormattersReturn<List, Options>` — Xử lý dữ liệu và trả về kết quả. Nếu đầu vào là một mảng, trả về một mảng mới gồm các mục đã được làm giàu. Nếu là một mục duy nhất — một đối tượng duy nhất. Thêm các thuộc tính với hậu tố `Format`.
84
69
 
85
- **Trả về:** `FormattersListColumns<Item, Options> | FormattersListColumnItem<Item, Options>` — dữ liệu đã được bổ sung các thuộc tính `*Format`.
86
-
87
- ```javascript
88
- const result = formatter.to()
89
- /*
90
- Kết quả (nếu là mảng): [
91
- {
92
- id: 101,
93
- price: 100,
94
- currency: 'VND',
95
- priceFormat: '100.000 ₫',
96
- status: 1,
97
- statusFormat: 'Đang hoạt động',
98
- ...
99
- }
100
- ]
70
+ ### Cấu hình
71
+ - `setList(list?: List): this` — Cập nhật dữ liệu để định dạng. Hỗ trợ nối chuỗi.
101
72
 
102
- Kết quả (nếu là một mục duy nhất): {
103
- price: 100,
104
- priceFormat: '100.000 ₫',
105
- ...
106
- }
107
- */
108
- ```
109
-
110
- ## Truy xuất và quản lý dữ liệu
111
-
112
- - `is(): boolean` — Kiểm tra xem danh sách/mục đã được thiết lập chưa.
113
- - `isArray(): boolean` — Kiểm tra xem dữ liệu hiện tại có phải là một mảng không.
73
+ ### Thông tin
74
+ - `is(): boolean` — Kiểm tra xem dữ liệu đã được thiết lập để xử lý hay chưa.
75
+ - `isArray(): boolean` Liệu dữ liệu hiện tại có phải là một mảng hay không.
114
76
  - `length(): number` — Trả về số lượng bản ghi trong danh sách.
115
- - `getList(): Item[]` — Trả về danh sách dữ liệu hiện tại dưới dạng mảng.
77
+ - `getList(): FormattersList<Item>` — Trả về danh sách hiện tại dưới dạng mảng.
116
78
  - `getOptions(): Options` — Trả về cấu hình định dạng hiện tại.
117
- - `setList(list?: List): this` — Cập nhật dữ liệu cần định dạng và trả về thực thể để gọi chuỗi lệnh.
118
-
119
- ## Cấu trúc cấu hình
120
-
121
- Đối tượng cấu hình được truyền vào hàm khởi tạo là một bản đồ (map), nơi mỗi khóa tương ứng với tên một thuộc tính trong dữ liệu của bạn. Mỗi giá trị phải tuân theo cấu trúc `FormattersOptionsItem`.
122
-
123
- ### Cấu trúc mục chính
124
79
 
80
+ ## Các loại định dạng và Tham số
81
+
82
+ Cấu hình `FormattersOptionsList` là một từ điển trong đó các khóa tương ứng với tên thuộc tính trong dữ liệu (hỗ trợ ký hiệu chấm `path.to.prop`) và các giá trị là đối tượng `FormattersOptionsItem`.
83
+
84
+ ### Cấu trúc chung của `FormattersOptionsItem`
85
+ - `type?: FormattersType` — Loại định dạng.
86
+ - `transformation?: (value, item, options) => string` — Hàm chuyển đổi tùy chỉnh.
87
+ - `options?: Options` — Đối tượng tham số, cấu trúc phụ thuộc vào `type` đã chọn.
88
+
89
+ ### Mô tả chi tiết các loại
90
+
91
+ #### 1. Tiền tệ (`currency`)
92
+ Được sử dụng để hiển thị các giá trị tiền tệ đã được bản địa hóa.
93
+ - `currencyPropName?: string` — Tên thuộc tính trong mục chứa mã tiền tệ (mặc định là `currency`).
94
+ - `options?: string | Intl.NumberFormatOptions` — Bạn có thể truyền một mã cố định (ví dụ: `'VND'`) hoặc một đối tượng cài đặt `Intl.NumberFormat`.
95
+ - `numberOnly?: boolean` — Nếu `true`, chỉ trả về số đã định dạng mà không có biểu tượng tiền tệ.
96
+
97
+ #### 2. Ngày tháng (`date`)
98
+ Định dạng ngày và giờ thông qua `GeoIntl`.
99
+ - `type?: GeoDate` — Định dạng đặt trước:
100
+ - `full` — Ngày và giờ đầy đủ.
101
+ - `datetime` — Ngày và giờ (không có giây).
102
+ - `date` — Chỉ ngày.
103
+ - `time` — Chỉ giờ.
104
+ - `year-month`, `year`, `month`, `day`, `day-month`, `hour-minute`.
105
+ - `options?: Intl.DateTimeFormatOptions` — Các tham số `Intl` tiêu chuẩn (ví dụ: `month: 'long'`).
106
+ - `hour24?: boolean` — Nếu `true`, buộc sử dụng chế độ 24 giờ.
107
+
108
+ #### 3. Tên (`name`)
109
+ Kết hợp các phần của tên đầy đủ theo đúng thứ tự.
110
+ - `lastPropName?: string` — Trường cho họ (mặc định là `lastName`).
111
+ - `firstPropName?: string` — Trường cho tên (mặc định là `firstName`).
112
+ - `surname?: string` — Trường cho tên đệm (mặc định là `surname`).
113
+ - `short?: boolean` — Nếu `true`, xuất họ và chữ cái đầu (ví dụ: "Nguyễn A.").
114
+
115
+ #### 4. Số (`number`)
116
+ Định dạng số tiêu chuẩn với phân tách chữ số.
117
+ - `options?: Intl.NumberFormatOptions` — Các tham số `Intl` (số chữ số thập phân, kiểu dáng, v.v.).
118
+
119
+ #### 5. Số nhiều (`plural`)
120
+ Chọn dạng từ đúng tùy thuộc vào số lượng.
121
+ - `words: string` — Các dạng từ thông qua dấu phân cách `|`.
122
+ - Cho tiếng Việt: `"quả táo|những quả táo"`.
123
+ - Cho tiếng Anh: `"apple|apples"`.
124
+ - `options?: Intl.PluralRulesOptions` — Cài đặt quy tắc số nhiều.
125
+ - `optionsNumber?: Intl.NumberFormatOptions` — Cài đặt định dạng cho chính con số được xuất trước từ.
126
+
127
+ #### 6. Đơn vị đo lường (`unit`)
128
+ Thêm các đơn vị đo lường (km, kg, l).
129
+ - `unit: string` — Mã đơn vị đo lường (ví dụ: `'kilometer'`, `'kilogram'`, `'liter'`).
130
+ - `options?: Intl.NumberFormatOptions` — Tham số định dạng cho phần số.
131
+
132
+ ## Ví dụ
133
+
134
+ ### Sử dụng Dot Notation
125
135
  ```typescript
126
- {
127
- // 1. Chỉ định kiểu định dạng
128
- type: 'currency' | 'date' | 'name' | 'number' | 'plural' | 'unit',
136
+ const options = {
137
+ 'user.profile.age': { type: 'number' }
138
+ }
139
+ const data = { user: { profile: { age: 25 } } }
140
+ const formatter = new Formatters(options, data)
129
141
 
130
- // 2. Truyền các tham số dành riêng cho kiểu tại đây
131
- options: { ... },
142
+ const result = formatter.to()
143
+ // result.userProfileAgeFormat === "25"
144
+ ```
132
145
 
133
- // 3. Hoặc sử dụng một hàm tùy chỉnh (ghi đè logic của kiểu)
134
- transformation: (value, item, options) => string
146
+ ### Chuyển đổi tùy chỉnh
147
+ ```typescript
148
+ const options = {
149
+ status: {
150
+ // Hàm tùy chỉnh có ưu tiên cao hơn type
151
+ transformation: (value, item) => {
152
+ return value === 'active' ? `✅ ${item.name} đang trực tuyến` : '❌ Ngoại tuyến'
153
+ }
154
+ }
135
155
  }
136
156
  ```
137
-
138
- ## Các tham số cụ thể
139
-
140
- Dưới đây là các tham số có sẵn bên trong thuộc tính **`options`** cho từng kiểu.
141
-
142
- ### Tiền tệ (`currency`)
143
- - `currencyPropName?: string` — Thuộc tính trong mục chứa mã tiền tệ (mặc định là `item.currency`).
144
- - `options?: string | Intl.NumberFormatOptions` — Mã tiền tệ cố định hoặc các tùy chọn `Intl` đầy đủ.
145
- - `numberOnly?: boolean` — Nếu là `true`, chỉ trả về số đã định dạng mà không có ký hiệu tiền tệ.
146
-
147
- ### Ngày tháng (`date`)
148
- - `type?: GeoDate` — Kiểu thiết lập sẵn: `full`, `datetime`, `date`, `year-month`, `year`, `month`, `day`, `day-month`, `time`, `hour-minute`, `hour`, `minute`, `second`.
149
- - `options?: Intl.DateTimeFormatOptions['month'] | Intl.DateTimeFormatOptions` — Các tùy chọn ngày tháng tiêu chuẩn của `Intl` hoặc kiểu tháng.
150
- - `hour24?: boolean` — Kết quả định dạng bắt buộc sử dụng định dạng 24 giờ nếu là `true`.
151
-
152
- ### Tên (`name`)
153
- - `lastPropName?: string` — Trường cho họ (mặc định: `lastName`).
154
- - `firstPropName?: string` — Trường cho tên (mặc định: `firstName`).
155
- - `surname?: string` — Trường cho tên đệm (mặc định: `surname`).
156
- - `short?: boolean` — Có sử dụng định dạng rút gọn (viết tắt) hay không.
157
-
158
- ### Số (`number`)
159
- - `options?: Intl.NumberFormatOptions` — Các tùy chọn số tiêu chuẩn của `Intl`.
160
-
161
- ### Số nhiều (`plural`)
162
- - `words: string` — Các dạng từ cách nhau bởi `|` (ví dụ: `"quả táo|quả táo"`).
163
- - `options?: Intl.PluralRulesOptions` — Các thiết lập quy tắc số nhiều.
164
- - `optionsNumber?: Intl.NumberFormatOptions` — Định dạng cho chính con số đó.
165
-
166
- ### Đơn vị (`unit`)
167
- - `unit: string | Intl.NumberFormatOptions` — Đơn vị cần hiển thị (ví dụ: `'kilometer'`, `'kilogram'`).
168
-
@@ -8,11 +8,11 @@ A static utility class for centralized management of the application's geographi
8
8
 
9
9
  ## Key Features
10
10
 
11
- - **Auto-Detection** — intelligently identifies the user's locale via `navigator.language` or HTML attributes if not explicitly defined.
11
+ - **Auto-Detection** — intelligently identifies the user's locale via storage or environment defaults.
12
12
  - **Persistence** — utilizes `DataStorage` to save and restore user-selected language and country preferences.
13
13
  - **Media Database Integration** — provides access to a comprehensive database of countries and languages from the `@dxtmisha/media` library.
14
- - **Global Time Management** — centralized setting and retrieval of time zone offsets for correct date handling.
15
- - **Static Access** — all methods are static, eliminating the need for instantiation (`new Geo()`).
14
+ - **Global Time Management** — centralized setting and retrieval of time zone offsets.
15
+ - **Static Access** — all methods are static, providing a convenient global interface without manual instantiation.
16
16
 
17
17
  ## Basic Usage
18
18
 
@@ -8,11 +8,11 @@ import {Meta} from '@storybook/addon-docs/blocks'
8
8
 
9
9
  ## Ключевые особенности
10
10
 
11
- - **Автоматическое определение** — интеллектуально определяет локаль пользователя через `navigator.language` или настройки HTML, если они не заданы явно.
12
- - **Персистентность** — использует `DataStorage` для сохранения и восстановления выбранных пользователем предпочтений языка и страны.
13
- - **Интеграция с медиа-базой** — предоставляет доступ к полной базе данных стран и языков из библиотеки `@dxtmisha/media`.
14
- - **Глобальное управление временем** — централизованная установка и получение смещения часового пояса для корректной работы с датами.
15
- - **Статический доступ** — все методы класса статические, что исключает необходимость создания экземпляров (`new Geo()`).
11
+ - **Автоматическое определение** — интеллектуально определяет локаль через хранилище или настройки окружения.
12
+ - **Персистентность** — использует `DataStorage` для сохранения и восстановления предпочтений пользователя.
13
+ - **Интеграция с медиа-базой** — предоставляет доступ к базе данных стран и языков из библиотеки `@dxtmisha/media`.
14
+ - **Глобальное управление временем** — централизованная установка и получение смещения часового пояса.
15
+ - **Статический доступ** — удобный глобальный интерфейс без необходимости ручного создания экземпляров.
16
16
 
17
17
  ## Базовое использование
18
18
 
@@ -8,11 +8,11 @@ Một lớp tiện ích tĩnh (static class) để quản lý tập trung dữ l
8
8
 
9
9
  ## Tính năng chính
10
10
 
11
- - **Tự động phát hiện** — xác định thông minh địa phương (locale) của người dùng thông qua `navigator.language` hoặc các thuộc tính HTML nếu không được xác định rõ ràng.
12
- - **Lưu trữ lâu dài** — sử dụng `DataStorage` để lưu và khôi phục các tùy chọn ngôn ngữ và quốc gia do người dùng chọn.
13
- - **Tích hợp cơ sở dữ liệu truyền thông** — cung cấp quyền truy cập vào cơ sở dữ liệu toàn diện về các quốc gia và ngôn ngữ từ thư viện `@dxtmisha/media`.
14
- - **Quản lý thời gian toàn cầu** — thiết lập và truy xuất tập trung các độ lệch múi giờ để xử lý ngày tháng chính xác.
15
- - **Truy cập tĩnh** — tất cả các phương thức đều tĩnh, loại bỏ nhu cầu khởi tạo (`new Geo()`).
11
+ - **Tự động phát hiện** — xác định thông minh địa phương (locale) thông qua bộ nhớ hoặc mặc định của môi trường.
12
+ - **Lưu trữ lâu dài** — sử dụng `DataStorage` để lưu và khôi phục các tùy chọn của người dùng.
13
+ - **Tích hợp cơ sở dữ liệu truyền thông** — cung cấp quyền truy cập vào cơ sở dữ liệu quốc gia và ngôn ngữ từ thư viện `@dxtmisha/media`.
14
+ - **Quản lý thời gian toàn cầu** — thiết lập và truy xuất tập trung các độ lệch múi giờ.
15
+ - **Truy cập tĩnh** — cung cấp giao diện toàn cầu thuận tiện không cần khởi tạo thủ công.
16
16
 
17
17
  ## Cách sử dụng cơ bản
18
18