@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.
- package/dist/{defineProperty-DblGXmzD.js → defineProperty-149Ahniv.js} +4 -4
- package/dist/library.js +1 -1
- package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
- package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
- package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
- package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
- package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
- package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
- package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
- package/dist/media.d.ts +1 -1
- package/dist/media.js +127 -68
- package/dist/storybook.js +2707 -1841
- package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
- package/package.json +1 -1
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
- package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
- package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
- package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
- package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
- package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
- package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
- package/src/media/functional/functional-basic/api/api.en.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.ru.mdx +45 -0
- package/src/media/functional/functional-basic/api/api.vi.mdx +45 -0
- package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +57 -54
- package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +57 -54
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.en.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.ru.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiCache/ApiCache.vi.mdx +111 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.en.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.ru.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDataReturn/ApiDataReturn.vi.mdx +32 -0
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.en.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.ru.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiDefault/ApiDefault.vi.mdx +24 -28
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.en.mdx +28 -14
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.ru.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHeaders/ApiHeaders.vi.mdx +33 -19
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.en.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.ru.mdx +56 -0
- package/src/media/functional/functional-basic/classes/ApiHydration/ApiHydration.vi.mdx +55 -0
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +106 -51
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +107 -52
- package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +103 -49
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.en.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.ru.mdx +45 -27
- package/src/media/functional/functional-basic/classes/ApiPreparation/ApiPreparation.vi.mdx +44 -26
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +59 -21
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +63 -25
- package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +64 -26
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.en.mdx +29 -32
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.ru.mdx +33 -36
- package/src/media/functional/functional-basic/classes/ApiStatus/ApiStatus.vi.mdx +33 -36
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.en.mdx +34 -53
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.ru.mdx +33 -52
- package/src/media/functional/functional-basic/classes/BroadcastMessage/BroadcastMessage.vi.mdx +39 -58
- package/src/media/functional/functional-basic/classes/Cache/Cache.en.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.ru.mdx +7 -4
- package/src/media/functional/functional-basic/classes/Cache/Cache.vi.mdx +28 -25
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.en.mdx +45 -53
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.ru.mdx +46 -54
- package/src/media/functional/functional-basic/classes/CacheItem/CacheItem.vi.mdx +47 -55
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.en.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.ru.mdx +13 -1
- package/src/media/functional/functional-basic/classes/CacheStatic/CacheStatic.vi.mdx +13 -0
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.en.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.ru.mdx +88 -44
- package/src/media/functional/functional-basic/classes/Cookie/Cookie.vi.mdx +85 -41
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.en.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.ru.mdx +46 -25
- package/src/media/functional/functional-basic/classes/CookieBlock/CookieBlock.vi.mdx +43 -22
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.en.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.ru.mdx +84 -0
- package/src/media/functional/functional-basic/classes/CookieBlockInstance/CookieBlockInstance.vi.mdx +100 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +178 -0
- package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +178 -0
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.en.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.ru.mdx +32 -25
- package/src/media/functional/functional-basic/classes/DataStorage/DataStorage.vi.mdx +32 -27
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.en.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.ru.mdx +36 -4
- package/src/media/functional/functional-basic/classes/Datetime/Datetime.vi.mdx +36 -4
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.en.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.ru.mdx +100 -69
- package/src/media/functional/functional-basic/classes/ErrorCenter/ErrorCenter.vi.mdx +101 -70
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.en.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.ru.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterHandler/ErrorCenterHandler.vi.mdx +46 -42
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.en.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.ru.mdx +44 -96
- package/src/media/functional/functional-basic/classes/ErrorCenterInstance/ErrorCenterInstance.vi.mdx +44 -96
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.en.mdx +49 -28
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.ru.mdx +21 -0
- package/src/media/functional/functional-basic/classes/EventItem/EventItem.vi.mdx +63 -42
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.en.mdx +97 -109
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.ru.mdx +86 -98
- package/src/media/functional/functional-basic/classes/Formatters/Formatters.vi.mdx +99 -111
- package/src/media/functional/functional-basic/classes/Geo/Geo.en.mdx +3 -3
- package/src/media/functional/functional-basic/classes/Geo/Geo.ru.mdx +5 -5
- package/src/media/functional/functional-basic/classes/Geo/Geo.vi.mdx +5 -5
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.en.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.ru.mdx +83 -40
- package/src/media/functional/functional-basic/classes/GeoFlag/GeoFlag.vi.mdx +87 -44
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.en.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.ru.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoInstance/GeoInstance.vi.mdx +81 -0
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.en.mdx +56 -105
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.ru.mdx +53 -102
- package/src/media/functional/functional-basic/classes/GeoPhone/GeoPhone.vi.mdx +55 -105
- package/src/media/functional/functional-basic/classes/Hash/Hash.en.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.ru.mdx +18 -7
- package/src/media/functional/functional-basic/classes/Hash/Hash.vi.mdx +18 -7
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.en.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.ru.mdx +54 -0
- package/src/media/functional/functional-basic/classes/HashInstance/HashInstance.vi.mdx +54 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.en.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
- package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +79 -0
- package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +79 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.en.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.ru.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ResumableTimer/ResumableTimer.vi.mdx +50 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +131 -0
- package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +131 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.en.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.ru.mdx +97 -0
- package/src/media/functional/functional-basic/classes/StorageCallback/StorageCallback.vi.mdx +97 -0
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.en.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.ru.mdx +13 -5
- package/src/media/functional/functional-basic/functions/addTagHighlightMatch/addTagHighlightMatch.vi.mdx +13 -5
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.en.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.ru.mdx +37 -19
- package/src/media/functional/functional-basic/functions/anyToString/anyToString.vi.mdx +35 -17
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.en.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.ru.mdx +31 -19
- package/src/media/functional/functional-basic/functions/applyTemplate/applyTemplate.vi.mdx +32 -20
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.en.mdx +29 -15
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.ru.mdx +28 -14
- package/src/media/functional/functional-basic/functions/blobToBase64/blobToBase64.vi.mdx +28 -14
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.en.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.ru.mdx +7 -3
- package/src/media/functional/functional-basic/functions/capitalize/capitalize.vi.mdx +7 -3
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.en.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.ru.mdx +17 -13
- package/src/media/functional/functional-basic/functions/copyObject/copyObject.vi.mdx +17 -13
- package/src/media/functional/functional-basic/functions/createElement/createElement.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/createElement/createElement.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx +1 -3
- package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx +1 -3
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx +13 -10
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.ru.mdx +14 -11
- package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.vi.mdx +12 -9
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.en.mdx +14 -13
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.ru.mdx +15 -14
- package/src/media/functional/functional-basic/functions/executePromise/executePromise.vi.mdx +14 -13
- package/src/media/functional/functional-basic/functions/forEach/forEach.en.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.ru.mdx +1 -1
- package/src/media/functional/functional-basic/functions/forEach/forEach.vi.mdx +1 -1
- package/src/media/functional/functional-basic/functions/frame/frame.en.mdx +7 -4
- package/src/media/functional/functional-basic/functions/frame/frame.ru.mdx +6 -3
- package/src/media/functional/functional-basic/functions/frame/frame.vi.mdx +7 -4
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.en.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.ru.mdx +34 -0
- package/src/media/functional/functional-basic/functions/getArrayHighlightMatch/getArrayHighlightMatch.vi.mdx +35 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +2 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.en.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.ru.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getCurrentTime/getCurrentTime.vi.mdx +21 -0
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.en.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.ru.mdx +17 -3
- package/src/media/functional/functional-basic/functions/getElementId/getElementId.vi.mdx +18 -4
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.en.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.ru.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getElementSafeScript/getElementSafeScript.vi.mdx +31 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getOnlyText/getOnlyText.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.en.mdx +11 -4
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.ru.mdx +14 -7
- package/src/media/functional/functional-basic/functions/getSearchExp/getSearchExp.vi.mdx +13 -6
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.en.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.ru.mdx +3 -2
- package/src/media/functional/functional-basic/functions/getSeparatingSearchExp/getSeparatingSearchExp.vi.mdx +3 -2
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.en.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.ru.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toNumber/toNumber.vi.mdx +25 -9
- package/src/media/functional/functional-basic/functions/toString/toString.en.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.ru.mdx +28 -0
- package/src/media/functional/functional-basic/functions/toString/toString.vi.mdx +28 -0
- package/src/media/functional/functional-basic/icons/icons.en.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
- package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
- package/src/media/functional/nitro-basic/functions/getInject.en.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.ru.mdx +27 -0
- package/src/media/functional/nitro-basic/functions/getInject.vi.mdx +20 -0
- package/src/media/functional/ui/about/about.en.mdx +45 -0
- package/src/media/functional/ui/about/about.ru.mdx +45 -0
- package/src/media/functional/ui/about/about.vi.mdx +45 -0
- package/src/media/functional/ui/component/component.en.mdx +104 -0
- package/src/media/functional/ui/component/component.ru.mdx +106 -0
- package/src/media/functional/ui/component/component.vi.mdx +104 -0
- package/src/media/functional/ui/setup/setup.en.mdx +72 -0
- package/src/media/functional/ui/setup/setup.ru.mdx +72 -0
- package/src/media/functional/ui/setup/setup.vi.mdx +72 -0
- package/src/media/functional/ui/wiki-data.en.mdx +114 -0
- package/src/media/functional/ui/wiki-data.ru.mdx +114 -0
- package/src/media/functional/ui/wiki-data.vi.mdx +114 -0
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/applyTemplate - Áp dụng mẫu vào văn bản'/>
|
|
4
4
|
|
|
5
5
|
# `applyTemplate`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Hàm này hỗ trợ:
|
|
10
|
-
- Các điểm đánh dấu theo vị trí (`%d`, `%e`, v.v.) để thay thế các giá trị từ một mảng theo thứ tự.
|
|
11
|
-
- Các điểm đánh dấu theo tên (`[key]`, `{key}`) để thay thế các giá trị từ một đối tượng thông qua khóa.
|
|
12
|
-
- Thẻ theo cặp (`[key]nội dung[/key]`, `{key}nội dung{/key}`) để bao bọc nội dung trong các thẻ HTML hoặc cấu trúc khác (từ `[content]` bên trong giá trị truyền vào sẽ được thay thế bởi nội dung của thẻ).
|
|
7
|
+
Tiện ích để thay thế các thẻ đánh dấu trong văn bản bằng các giá trị từ một đối tượng hoặc mảng.
|
|
13
8
|
|
|
14
9
|
**Tham số:**
|
|
15
|
-
- `text: string` — Văn bản gốc
|
|
16
|
-
- `replacement: Record<string, string | number> | string[]` —
|
|
10
|
+
- `text: string` — Văn bản gốc có mẫu.
|
|
11
|
+
- `replacement: Record<string, string | number | boolean> | string[]` — Đối tượng hoặc mảng có các giá trị.
|
|
12
|
+
|
|
13
|
+
**Định dạng thay thế (replacement)**
|
|
14
|
+
- **Mảng**: Được sử dụng cho các thẻ vị trí như `%d`, `%e`, `%f`, v.v. (theo thứ tự bảng chữ cái).
|
|
15
|
+
- **Đối tượng**: Được sử dụng cho các thẻ có tên trong ngoặc `[key]` hoặc `{key}`, cũng như các thẻ cặp `[tag]nội dung[/tag]`.
|
|
17
16
|
|
|
18
17
|
**Trả về:**
|
|
19
18
|
`string` — Văn bản với các giá trị đã được thay thế.
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
## Ví dụ
|
|
21
|
+
|
|
22
|
+
<Source
|
|
23
|
+
language='typescript'
|
|
24
|
+
code={`
|
|
22
25
|
import { applyTemplate } from '@dxtmisha/functional-basic'
|
|
23
26
|
|
|
24
|
-
//
|
|
25
|
-
|
|
27
|
+
// 1. Điểm đánh dấu vị trí (mảng)
|
|
28
|
+
applyTemplate('Xin chào, %d %e!', ['John', 'Doe']) // 'Xin chào, John Doe!'
|
|
29
|
+
|
|
30
|
+
// 2. Điểm đánh dấu có tên (đối tượng)
|
|
31
|
+
applyTemplate('Giá: [price] {currency}', { price: 100, currency: 'USD' }) // 'Giá: 100 USD'
|
|
32
|
+
|
|
33
|
+
// 3. Xử lý 0 và false
|
|
34
|
+
applyTemplate('Giá trị: [val]', { val: 0 }) // // 'Giá trị: 0'
|
|
35
|
+
applyTemplate('Trạng thái: [val]', { val: false }) // 'Trạng thái: false'
|
|
36
|
+
|
|
37
|
+
// 4. Bỏ qua các khóa bị thiếu
|
|
38
|
+
applyTemplate('Thiếu: [none]', {}) // 'Thiếu: [none]'
|
|
26
39
|
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
40
|
+
// 5. Các thẻ cặp với thay thế nội dung
|
|
41
|
+
const tags = { link: '<a href="https://google.com">[content]</a>' }
|
|
42
|
+
applyTemplate('Nhấp vào [link]đây[/link]', tags) // 'Nhấp vào <a href="https://google.com">đây</a>'
|
|
30
43
|
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
```
|
|
44
|
+
// 6. Macro danh sách (vượt quá giới hạn)
|
|
45
|
+
applyTemplate('Macros: %d, %e, %f', ['A', 'B']) // 'Macros: A, B, '
|
|
46
|
+
`}
|
|
47
|
+
/>
|
|
@@ -1,28 +1,42 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
|
-
<Meta title='@dxtmisha/en/functional-basic/Functions/blobToBase64 -
|
|
3
|
+
<Meta title='@dxtmisha/en/functional-basic/Functions/blobToBase64 - Converting Blob to Base64'/>
|
|
4
4
|
|
|
5
5
|
# `blobToBase64`
|
|
6
6
|
|
|
7
7
|
Asynchronously converts `Blob` or `File` objects into a Base64 string (Data URL).
|
|
8
8
|
|
|
9
|
-
This is useful when preparing local files (e.g., user-uploaded images) for in-browser previews or for sending to the server in string format.
|
|
10
|
-
|
|
11
9
|
**Parameters:**
|
|
12
|
-
- `blob: Blob` — The `Blob` (or `File`) object to
|
|
10
|
+
- `blob: Blob` — The `Blob` (or `File`) object to be converted.
|
|
11
|
+
- `clean: boolean = false` — If `true`, removes the Data URL prefix (e.g., `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Environment Support:**
|
|
14
|
+
The utility automatically detects the environment:
|
|
15
|
+
- **Browser**: Uses `FileReader` to read the content.
|
|
16
|
+
- **Server (SSR)**: Uses `Buffer` and the asynchronous `blob.arrayBuffer()` method.
|
|
13
17
|
|
|
14
18
|
**Returns:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Base64 string or `undefined` if conversion is not possible.
|
|
20
|
+
|
|
21
|
+
## Examples
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. Default (returns Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Raw Base64 (without prefix)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Handling API unavailability
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// work with string
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/blobToBase64 - Преобразование Blob в Base64'/>
|
|
4
4
|
|
|
@@ -6,23 +6,37 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Асинхронно преобразует объекты `Blob` или `File` в строку формата Base64 (Data URL).
|
|
8
8
|
|
|
9
|
-
Это полезно при подготовке локальных файлов (например, загруженных пользователем изображений) для их предпросмотра в браузере или отправки на сервер в строковом формате.
|
|
10
|
-
|
|
11
9
|
**Параметры:**
|
|
12
|
-
- `blob: Blob` — Объект `Blob` (или `File`)
|
|
10
|
+
- `blob: Blob` — Объект `Blob` (или `File`) для преобразования.
|
|
11
|
+
- `clean: boolean = false` — Если `true`, удаляет префикс Data URL (например, `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Среда выполнения:**
|
|
14
|
+
Утилита автоматически определяет доступный метод конвертации:
|
|
15
|
+
- **Браузер**: Использует `FileReader` для чтения содержимого.
|
|
16
|
+
- **Сервер (SSR)**: Использует `Buffer` и асинхронный метод `blob.arrayBuffer()`.
|
|
13
17
|
|
|
14
18
|
**Возвращает:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Строка Base64 или `undefined`, если конвертация невозможна.
|
|
20
|
+
|
|
21
|
+
## Примеры
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. По умолчанию (возвращает Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Чистый Base64 (без префикса)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Обработка случая недоступности API
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// работа со строкой
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -1,28 +1,42 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/blobToBase64 - Chuyển đổi Blob thành Base64'/>
|
|
4
4
|
|
|
5
5
|
# `blobToBase64`
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Điều này hữu ích khi chuẩn bị các tệp cục bộ (ví dụ: hình ảnh do người dùng tải lên) để xem trước trực tiếp trên trình duyệt hoặc gửi dạng chuỗi văn bản lên máy chủ.
|
|
7
|
+
Chuyển đổi bất đồng bộ các đối tượng `Blob` hoặc `File` thành chuỗi định dạng Base64 (Data URL).
|
|
10
8
|
|
|
11
9
|
**Tham số:**
|
|
12
10
|
- `blob: Blob` — Đối tượng `Blob` (hoặc `File`) cần chuyển đổi.
|
|
11
|
+
- `clean: boolean = false` — Nếu `true`, loại bỏ tiền tố Data URL (ví dụ: `data:image/png;base64,`).
|
|
12
|
+
|
|
13
|
+
**Môi trường thực thi:**
|
|
14
|
+
Tiện ích tự động xác định phương pháp chuyển đổi khả dụng:
|
|
15
|
+
- **Trình duyệt**: Sử dụng `FileReader` để đọc nội dung.
|
|
16
|
+
- **Máy chủ (SSR)**: Sử dụng `Buffer` và phương thức bất đồng bộ `blob.arrayBuffer()`.
|
|
13
17
|
|
|
14
18
|
**Trả về:**
|
|
15
|
-
`Promise<string |
|
|
19
|
+
`Promise<string | undefined>` — Chuỗi Base64 hoặc `undefined` nếu không thể chuyển đổi.
|
|
20
|
+
|
|
21
|
+
## Ví dụ
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
<Source
|
|
24
|
+
language='typescript'
|
|
25
|
+
code={`
|
|
18
26
|
import { blobToBase64 } from '@dxtmisha/functional-basic'
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
// 1. Mặc định (trả về Data URL)
|
|
29
|
+
const dataUrl = await blobToBase64(file)
|
|
30
|
+
// 'data:image/png;base64,iVBORw0KGgo...'
|
|
31
|
+
|
|
32
|
+
// 2. Base64 thô (không có tiền tố)
|
|
33
|
+
const rawBase64 = await blobToBase64(file, true)
|
|
34
|
+
// 'iVBORw0KGgo...'
|
|
35
|
+
|
|
36
|
+
// 3. Xử lý trường hợp API không khả dụng
|
|
37
|
+
const result = await blobToBase64(blob)
|
|
38
|
+
if (result) {
|
|
39
|
+
// làm việc với chuỗi
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
`}
|
|
42
|
+
/>
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Capitalizes the first letter of a string. Returns the same string if
|
|
7
|
+
Capitalizes the first letter of a string. Returns the same string if it is empty. The function is robust and safe for non-string inputs.
|
|
8
8
|
|
|
9
9
|
**Parameters:**
|
|
10
10
|
- `value: string` — The original string to capitalize.
|
|
11
|
+
- `isLocale: boolean` (optional) — If `true`, uses the current global locale (via `Geo.getLocation()`) for capitalization rules.
|
|
11
12
|
|
|
12
13
|
**Returns:**
|
|
13
14
|
`string` — The string with the first letter capitalized.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Locale-aware capitalization (e.g., for Turkish 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Делает первую букву строки заглавной. Возвращает ту же строку, если
|
|
7
|
+
Делает первую букву строки заглавной. Возвращает ту же строку, если она пуста. Функция устойчива к некорректным входным данным и безопасно обрабатывает не-строковые значения.
|
|
8
8
|
|
|
9
9
|
**Параметры:**
|
|
10
10
|
- `value: string` — Исходная строка для капитализации.
|
|
11
|
+
- `isLocale: boolean` (опционально) — Если `true`, использует текущую глобальную локаль (через `Geo.getLocation()`) для правил капитализации.
|
|
11
12
|
|
|
12
13
|
**Возвращает:**
|
|
13
14
|
`string` — Строка с заглавной первой буквой.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Капитализация с учетом локали (например, для турецкого 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|
|
@@ -4,18 +4,22 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `capitalize`
|
|
6
6
|
|
|
7
|
-
Viết hoa chữ cái đầu tiên của một chuỗi. Trả về cùng một chuỗi nếu
|
|
7
|
+
Viết hoa chữ cái đầu tiên của một chuỗi. Trả về cùng một chuỗi nếu nó trống. Hàm này mạnh mẽ và an toàn cho các đầu vào không phải chuỗi.
|
|
8
8
|
|
|
9
9
|
**Tham số:**
|
|
10
10
|
- `value: string` — Chuỗi gốc cần viết hoa.
|
|
11
|
+
- `isLocale: boolean` (tùy chọn) — Nếu là `true`, sử dụng địa phương (locale) toàn cục hiện tại (thông qua `Geo.getLocation()`) cho các quy tắc viết hoa.
|
|
11
12
|
|
|
12
13
|
**Trả về:**
|
|
13
14
|
`string` — Chuỗi với chữ cái đầu tiên được viết hoa.
|
|
14
15
|
|
|
15
16
|
```typescript
|
|
16
|
-
import { capitalize } from '@dxtmisha/functional-basic'
|
|
17
|
+
import { capitalize, Geo } from '@dxtmisha/functional-basic'
|
|
17
18
|
|
|
18
19
|
console.log(capitalize('hello')) // 'Hello'
|
|
19
|
-
console.log(capitalize('Hello')) // 'Hello'
|
|
20
20
|
console.log(capitalize('123')) // '123'
|
|
21
|
+
|
|
22
|
+
// Viết hoa theo ngữ cảnh địa phương (ví dụ: đối với tiếng Thổ Nhĩ Kỳ 'i' -> 'İ')
|
|
23
|
+
Geo.set('tr-TR')
|
|
24
|
+
console.log(capitalize('i', true)) // 'İ'
|
|
21
25
|
```
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/en/functional-basic/Functions/copyObject - Copy an object'/>
|
|
4
4
|
|
|
5
5
|
# `copyObject`
|
|
6
6
|
|
|
7
|
-
Creates a deep copy of
|
|
8
|
-
|
|
9
|
-
This is useful when you need to avoid mutating the original state. Keep in mind that it does not copy functions, symbols, or `undefined` values, and it cannot handle circular references (under the hood it uses `JSON.parse(JSON.stringify(value))`).
|
|
7
|
+
Creates a deep copy of an object for independent data management. The goal of the method is to obtain a completely separate instance of the data to prevent unintended mutations in the original object.
|
|
10
8
|
|
|
11
9
|
**Parameters:**
|
|
12
|
-
- `value: T` — The object or
|
|
10
|
+
- `value: T` — The object or array to be copied.
|
|
13
11
|
|
|
14
12
|
**Returns:**
|
|
15
13
|
`T` — A new copy of the object.
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
import { copyObject } from '@dxtmisha/functional-basic'
|
|
15
|
+
## Examples
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
<Source
|
|
18
|
+
language='typescript'
|
|
19
|
+
code={`
|
|
20
|
+
import { copyObject } from '@dxtmisha/functional-basic'
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
const original = {
|
|
23
|
+
name: 'John',
|
|
24
|
+
age: 30,
|
|
25
|
+
details: { role: 'admin' }
|
|
26
|
+
}
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const copy = copyObject(original)
|
|
29
|
+
// copy is a completely new object for independent management
|
|
30
|
+
`}
|
|
31
|
+
/>
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/ru/functional-basic/Functions/copyObject - Копирование объекта'/>
|
|
4
4
|
|
|
5
5
|
# `copyObject`
|
|
6
6
|
|
|
7
|
-
Создает глубокую копию
|
|
8
|
-
|
|
9
|
-
Это полезно, когда нужно избежать мутаций исходного состояния. Однако следует помнить, что утилита не копирует функции, символы, значения `undefined` и не может обработать циклические ссылки (внутри используется `JSON.parse(JSON.stringify(value))`).
|
|
7
|
+
Создает глубокую копию объекта для независимого управления данными. Цель метода — получить полностью новый отдельный экземпляр данных во избежание нежелательных мутаций в исходном объекте.
|
|
10
8
|
|
|
11
9
|
**Параметры:**
|
|
12
|
-
- `value: T` — Объект или
|
|
10
|
+
- `value: T` — Объект или массив, который необходимо скопировать.
|
|
13
11
|
|
|
14
12
|
**Возвращает:**
|
|
15
13
|
`T` — Новая копия объекта.
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
import { copyObject } from '@dxtmisha/functional-basic'
|
|
15
|
+
## Примеры
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
<Source
|
|
18
|
+
language='typescript'
|
|
19
|
+
code={`
|
|
20
|
+
import { copyObject } from '@dxtmisha/functional-basic'
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
const original = {
|
|
23
|
+
name: 'John',
|
|
24
|
+
age: 30,
|
|
25
|
+
details: { role: 'admin' }
|
|
26
|
+
}
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const copy = copyObject(original)
|
|
29
|
+
// copy — это полностью новый экземпляр для независимого управления
|
|
30
|
+
`}
|
|
31
|
+
/>
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import { Meta } from '@storybook/addon-docs/blocks'
|
|
1
|
+
import { Meta, Source } from '@storybook/addon-docs/blocks'
|
|
2
2
|
|
|
3
3
|
<Meta title='@dxtmisha/vi/functional-basic/Functions/copyObject - Sao chép đối tượng'/>
|
|
4
4
|
|
|
5
5
|
# `copyObject`
|
|
6
6
|
|
|
7
|
-
Tạo bản sao sâu
|
|
8
|
-
|
|
9
|
-
Điều này hữu ích khi bạn cần tránh thay đổi trực tiếp dữ liệu (mutate) của trạng thái ban đầu. Hãy nhớ rằng nó không sao chép các hàm, ký hiệu symbols, giá trị `undefined` và không thể xử lý các tham chiếu vòng (circular references) (do tiện ích sử dụng `JSON.parse(JSON.stringify(value))`).
|
|
7
|
+
Tạo bản sao sâu của đối tượng để quản lý dữ liệu độc lập. Mục tiêu của phương thức là có được một phiên bản riêng biệt hoàn toàn mới của dữ liệu để tránh các thay đổi ngoài ý muốn đối với đối tượng gốc.
|
|
10
8
|
|
|
11
9
|
**Tham số:**
|
|
12
|
-
- `value: T` — Đối tượng hoặc
|
|
10
|
+
- `value: T` — Đối tượng hoặc mảng cần sao chép.
|
|
13
11
|
|
|
14
12
|
**Trả về:**
|
|
15
13
|
`T` — Bản sao mới của đối tượng.
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
import { copyObject } from '@dxtmisha/functional-basic'
|
|
15
|
+
## Ví dụ
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
<Source
|
|
18
|
+
language='typescript'
|
|
19
|
+
code={`
|
|
20
|
+
import { copyObject } from '@dxtmisha/functional-basic'
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
const original = {
|
|
23
|
+
name: 'John',
|
|
24
|
+
age: 30,
|
|
25
|
+
details: { role: 'admin' }
|
|
26
|
+
}
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
const copy = copyObject(original)
|
|
29
|
+
// copy là một phiên bản hoàn toàn mới để quản lý độc lập
|
|
30
|
+
`}
|
|
31
|
+
/>
|
|
@@ -8,6 +8,8 @@ In a browser environment, creates a new HTML element with the specified tag name
|
|
|
8
8
|
|
|
9
9
|
The function relies on `isDomRuntime()` to verify the presence of a DOM environment. If the code executes outside the browser (e.g., during SSR on the server), the function will return `undefined`.
|
|
10
10
|
|
|
11
|
+
> **Warning (SSR):** When running on the server, the function always returns `undefined`. If you use it within a component's rendering logic, it may lead to hydration mismatches. It is recommended to call this function only inside lifecycle hooks that run exclusively on the client (e.g., `onMounted` in Vue or `useEffect` in React).
|
|
12
|
+
|
|
11
13
|
**Parameters:**
|
|
12
14
|
- `parentElement?: HTMLElement` — The parent element into which the new node will be inserted.
|
|
13
15
|
- `tagName: string = 'div'` — A string specifying the type of element to create (defaults to `'div'`).
|
|
@@ -8,6 +8,8 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
8
8
|
|
|
9
9
|
Функция проверяет наличие DOM-окружения с помощью `isDomRuntime()`. Если код выполняется не в браузере (например, на сервере во время SSR), функция вернёт `undefined`.
|
|
10
10
|
|
|
11
|
+
> **Внимание (SSR):** При выполнении на сервере функция всегда возвращает `undefined`. Если вы используете её внутри логики рендеринга компонента, это может привести к ошибкам гидратации. Рекомендуется вызывать эту функцию только в хуках жизненного цикла, которые выполняются на клиенте (например, `onMounted` в Vue или `useEffect` в React).
|
|
12
|
+
|
|
11
13
|
**Параметры:**
|
|
12
14
|
- `parentElement?: HTMLElement` — Родительский элемент, в который будет вставлен новый узел.
|
|
13
15
|
- `tagName: string = 'div'` — Строка, определяющая тип создаваемого элемента (по умолчанию `'div'`).
|
|
@@ -8,6 +8,8 @@ Trong môi trường trình duyệt, tạo một phần tử HTML mới với th
|
|
|
8
8
|
|
|
9
9
|
Hàm này kiểm tra sự tồn tại của môi trường DOM thông qua `isDomRuntime()`. Nếu mã không chạy trong trình duyệt (ví dụ: trên máy chủ trong quá trình SSR), hàm sẽ trả về `undefined`.
|
|
10
10
|
|
|
11
|
+
> **Cảnh báo (SSR):** Khi chạy trên máy chủ, hàm luôn trả về `undefined`. Nếu bạn sử dụng nó trong logic hiển thị của component, nó có thể dẫn đến lỗi không khớp hyradtion (hydration mismatch). Bạn nên gọi hàm này trong các hook vòng đời chỉ chạy trên client (ví dụ: `onMounted` trong Vue hoặc `useEffect` trong React).
|
|
12
|
+
|
|
11
13
|
**Tham số:**
|
|
12
14
|
- `parentElement?: HTMLElement` — Phần tử mẹ sẽ chứa nút DOM mới.
|
|
13
15
|
- `tagName: string = 'div'` — Chuỗi xác định loại phần tử sẽ được tạo (mặc định là `'div'`).
|
package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.en.mdx
CHANGED
|
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Encodes special characters in a string (`&`, `<`, `>`, `"`, `'`) into their corresponding HTML entities (`&`, `<`, `>`, `"`, `'`). This is essential for safely inserting user or dynamic text into HTML attributes to prevent XSS attacks.
|
|
8
8
|
|
|
9
|
-
Additionally, the function trims whitespace from the edges of the string using the `.trim()` method.
|
|
10
|
-
|
|
11
9
|
**Parameters:**
|
|
12
10
|
- `text: string` — The string to encode.
|
|
13
11
|
|
|
14
12
|
**Returns:**
|
|
15
|
-
`string` — The encoded string
|
|
13
|
+
`string` — The encoded string.
|
|
16
14
|
|
|
17
15
|
```typescript
|
|
18
16
|
import { encodeAttribute } from '@dxtmisha/functional-basic'
|
package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.ru.mdx
CHANGED
|
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Кодирует специальные символы в строке (`&`, `<`, `>`, `"`, `'`) в соответствующие HTML-сущности (`&`, `<`, `>`, `"`, `'`). Это необходимо для безопасной вставки пользовательского или динамического текста в HTML-атрибуты для предотвращения XSS-атак.
|
|
8
8
|
|
|
9
|
-
Кроме того, функция удаляет пробельные символы по краям строки с помощью метода `.trim()`.
|
|
10
|
-
|
|
11
9
|
**Параметры:**
|
|
12
10
|
- `text: string` — Строка, которую необходимо закодировать.
|
|
13
11
|
|
|
14
12
|
**Возвращает:**
|
|
15
|
-
`string` — Закодированная
|
|
13
|
+
`string` — Закодированная строка.
|
|
16
14
|
|
|
17
15
|
```typescript
|
|
18
16
|
import { encodeAttribute } from '@dxtmisha/functional-basic'
|
package/src/media/functional/functional-basic/functions/encodeAttribute/encodeAttribute.vi.mdx
CHANGED
|
@@ -6,13 +6,11 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
6
6
|
|
|
7
7
|
Mã hóa các ký tự đặc biệt trong chuỗi (`&`, `<`, `>`, `"`, `'`) thành các thực thể HTML tương ứng (`&`, `<`, `>`, `"`, `'`). Điều này là cần thiết để chèn văn bản người dùng hoặc văn bản động vào thuộc tính HTML một cách an toàn nhằm phòng chống tấn công XSS.
|
|
8
8
|
|
|
9
|
-
Hơn nữa, hàm cũng loại bỏ các khoảng trắng ở hai đầu chuỗi bằng phương thức `.trim()`.
|
|
10
|
-
|
|
11
9
|
**Tham số:**
|
|
12
10
|
- `text: string` — Chuỗi cần được mã hóa.
|
|
13
11
|
|
|
14
12
|
**Trả về:**
|
|
15
|
-
`string` — Chuỗi đã được mã hóa
|
|
13
|
+
`string` — Chuỗi đã được mã hóa.
|
|
16
14
|
|
|
17
15
|
```typescript
|
|
18
16
|
import { encodeAttribute } from '@dxtmisha/functional-basic'
|
package/src/media/functional/functional-basic/functions/executeFunction/executeFunction.en.mdx
CHANGED
|
@@ -4,25 +4,28 @@ import { Meta } from '@storybook/addon-docs/blocks'
|
|
|
4
4
|
|
|
5
5
|
# `executeFunction`
|
|
6
6
|
|
|
7
|
-
A utility that
|
|
7
|
+
A flexible utility designed to handle arguments that can be either a static value or a function. If the provided argument is a function, `executeFunction` invokes it with the specified arguments and returns the result. Otherwise, it returns the argument itself.
|
|
8
8
|
|
|
9
|
-
This is
|
|
9
|
+
This pattern is highly effective for implementing lazy evaluation, dynamic default values, or configuration properties that can be either fixed or computed.
|
|
10
10
|
|
|
11
11
|
**Parameters:**
|
|
12
|
-
- `callback: T |
|
|
12
|
+
- `callback: T | ((...args: any[]) => T)` — The value to process. Can be a literal value or a function returning type `T`.
|
|
13
|
+
- `...args: any[]` (optional) — Arguments to pass to the function if `callback` is callable.
|
|
13
14
|
|
|
14
15
|
**Returns:**
|
|
15
|
-
`T` — The result of the function execution
|
|
16
|
+
`T` — The result of the function execution or the raw value.
|
|
16
17
|
|
|
17
18
|
```typescript
|
|
18
19
|
import { executeFunction } from '@dxtmisha/functional-basic'
|
|
19
20
|
|
|
20
|
-
//
|
|
21
|
+
// 1. Static value handling
|
|
21
22
|
console.log(executeFunction('Hello')) // 'Hello'
|
|
22
23
|
|
|
23
|
-
//
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
// 2. Dynamic execution
|
|
25
|
+
const getLabel = (prefix: string) => `${prefix}: Dynamic Label`
|
|
26
|
+
console.log(executeFunction(getLabel, 'Admin')) // 'Admin: Dynamic Label'
|
|
27
|
+
|
|
28
|
+
// 3. Conditional logic in caller
|
|
29
|
+
const value = Math.random() > 0.5 ? 'Static' : () => 'Computed'
|
|
30
|
+
console.log(executeFunction(value)) // either 'Static' or 'Computed'
|
|
28
31
|
```
|