@antscorp/antsomi-ui 1.3.5-beta.819 → 1.3.5-beta.820

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.
@@ -0,0 +1,5 @@
1
+ <svg width="12" height="13" viewBox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5.2658 1.37667C5.33497 1.20313 5.44007 1.05749 5.56949 0.955794C5.69891 0.8541 5.84765 0.800293 5.99933 0.800293C6.15101 0.800293 6.29975 0.8541 6.42917 0.955794C6.55859 1.05749 6.66369 1.20313 6.73286 1.37667L11.7575 10.9358C12.2983 11.9645 11.9042 12.8003 10.8773 12.8003H1.12339C0.0964559 12.8003 -0.299647 11.9688 0.243827 10.9358L5.26847 1.37667H5.2658Z" fill="#F5F500"/>
3
+ <rect x="5" y="3.80029" width="2" height="5" rx="1" fill="#595959"/>
4
+ <rect x="5" y="9.80029" width="2" height="2" rx="1" fill="#595959"/>
5
+ </svg>
@@ -3,6 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useRef, useEffect, useCallback, useMemo, memo, forwardRef, useImperativeHandle, useLayoutEffect, } from 'react';
4
4
  import _ from 'lodash';
5
5
  import htmlEntities from 'he';
6
+ // Assets
7
+ import iconWarningSvg from '@antscorp/antsomi-ui/es/assets/svg/warning-icon.svg';
6
8
  // Hooks
7
9
  import { useDeepCompareMemo } from '@antscorp/antsomi-ui/es/hooks/useDeepCompareMemo';
8
10
  import { useDebounce } from '@antscorp/antsomi-ui/es/hooks/useDebounce';
@@ -231,7 +233,7 @@ const TagifyInput = forwardRef((props, ref) => {
231
233
  // Disabled click event to avoid click event handler conflict
232
234
  tagElement.setAttribute(READONLY_TAG, 'true');
233
235
  tagElement.setAttribute(INVALID_TAG, 'true');
234
- tagTextNode.textContent = `${tagLabel} ⚠️`;
236
+ tagTextNode.textContent = tagLabel;
235
237
  tagTextNode.setAttribute('title', message);
236
238
  }
237
239
  else {
@@ -564,7 +566,7 @@ const TagifyInput = forwardRef((props, ref) => {
564
566
  }
565
567
  }
566
568
  }, [initialValue, mapAttributes, escapeHTML, acceptableTagPattern, makeValidLabelTags]);
567
- return (_jsxs(TagifyWrapper, { ref: tagifyWrapperRef, "$cssTagifyVariables": cssVariablesMemoized, className: "tagify-container", id: "tagify-container", "data-test": "tagify-wrapper", "$status": status, "$maxHeight": maxHeight, "$minWidth": minWidth, "$tagifyFullWidth": isLineBreak, "$placeholder": placeholder, onClick: onTagifyWrapperClick, children: [_jsx(TagTextArea, { id: "tagify-textarea", ref: inputRef, name: name, defaultValue: parsedDefaultValue, "data-test": "tagify-input" }), _jsx(WrapperPlaceHolder, { "data-test": "wrapper-placeholder", ref: placeholderRef, "$isShow": !!children, children: children })] }));
569
+ return (_jsxs(TagifyWrapper, { ref: tagifyWrapperRef, "$cssTagifyVariables": cssVariablesMemoized, className: "tagify-container", id: "tagify-container", "data-test": "tagify-wrapper", "$status": status, "$maxHeight": maxHeight, "$minWidth": minWidth, "$tagifyFullWidth": isLineBreak, "$placeholder": placeholder, "$tagInvalidIcon": iconWarningSvg, onClick: onTagifyWrapperClick, children: [_jsx(TagTextArea, { id: "tagify-textarea", ref: inputRef, name: name, defaultValue: parsedDefaultValue, "data-test": "tagify-input" }), _jsx(WrapperPlaceHolder, { "data-test": "wrapper-placeholder", ref: placeholderRef, "$isShow": !!children, children: children })] }));
568
570
  });
569
571
  TagifyInput.defaultProps = tagifyDefaultProps;
570
572
  export default memo(TagifyInput);
@@ -16,7 +16,6 @@ export declare function getCachedRegex(pattern: string, flags?: string, cacheKey
16
16
  export declare const detectURLRegex: RegExp;
17
17
  export declare const tagRegexStringPattern = "\\[\\[({.*?})\\]\\]";
18
18
  export declare function acceptablePatternChecking(pattern: AcceptablePattern, acceptablePattern: Array<AcceptablePattern>): boolean;
19
- export declare function validateURL(txt: string): boolean;
20
19
  export declare const getPersonalizeTagInfo: (originalTag: string, mapAttributes?: MapAttributesProps) => TagInfo;
21
20
  export declare const patternHandlers: Record<PatterTagName, PatternHandlerWrapper>;
22
21
  export {};
@@ -37,9 +37,151 @@ export function acceptablePatternChecking(pattern, acceptablePattern) {
37
37
  return acceptablePattern.includes(pattern);
38
38
  }
39
39
  // Helper function to validate URL formats
40
- export function validateURL(txt) {
41
- const regexUrl = getCachedRegex('^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?([\\?&]([^&=]+=[^&=]+)(&([^&=]+=[^&=]+))*)?$', '', 'checkingURL');
42
- return regexUrl.test(txt);
40
+ /**
41
+ * Validates a URL based on customizable options.
42
+ *
43
+ * @param {string} url - The URL to validate.
44
+ * @param {URLOptions} [options={}] - An object containing various validation options.
45
+ *
46
+ * @param {string[]} [options.protocols=['http:', 'https:']] - An array of allowed protocols (e.g., 'http:', 'https:').
47
+ * @param {boolean} [options.requireTld=true] - Whether a top-level domain (TLD) is required (e.g., ".com").
48
+ * @param {boolean} [options.allowUnderscores=false] - Whether underscores are allowed in domain name segments.
49
+ * @param {boolean} [options.allowTrailingDot=false] - Whether the domain can have a trailing dot (e.g., "example.com.").
50
+ * @param {boolean} [options.allowNumericTld=false] - Whether numeric TLDs (e.g., ".123") are allowed.
51
+ * @param {boolean} [options.allowIp=true] - Whether the hostname can be an IP address (IPv4 or IPv6).
52
+ * @param {number} [options.maxLength=2083] - The maximum allowed length for the URL.
53
+ * @param {number} [options.minLength=3] - The minimum allowed length for the URL.
54
+ * @param {boolean} [options.requireValidPath=false] - Whether to require the URL to have a valid path (e.g., "/path").
55
+ * @param {boolean} [options.allowDataUrl=false] - Whether Data URLs (e.g., "data:image/png;base64,...") are allowed.
56
+ * @param {boolean} [options.allowFragment=true] - Whether fragments (e.g., "#section") are allowed in the URL.
57
+ * @param {boolean} [options.requireFragment=false] - Whether a fragment is required in the URL.
58
+ * @param {RegExp} [options.fragmentRegex=/^[a-z0-9\-._~!$&'()*+,;=:@/?]*$/i] - A custom regex to validate the fragment part.
59
+ *
60
+ * @returns {boolean} - Returns `true` if the URL is valid based on the provided options, otherwise `false`.
61
+ *
62
+ * @example
63
+ * // Example 1: Validate a basic URL with default options
64
+ * const result = isValidUrl('https://example.com');
65
+ * console.log(result); // true
66
+ *
67
+ * @example
68
+ * // Example 2: Validate a URL with a fragment, allowing only alphanumeric fragments
69
+ * const options = {
70
+ * allowFragment: true,
71
+ * fragmentRegex: /^[a-zA-Z0-9_]*$/ // Allow only alphanumeric characters and underscores
72
+ * };
73
+ * const result = isValidUrl('https://example.com/#valid_fragment', options);
74
+ * console.log(result); // true
75
+ *
76
+ * @example
77
+ * // Example 3: Validate a URL requiring a fragment and allowing IP addresses
78
+ * const options = {
79
+ * requireFragment: true,
80
+ * allowIp: true
81
+ * };
82
+ * const result = isValidUrl('https://192.168.1.1/#section', options);
83
+ * console.log(result); // true
84
+ *
85
+ * @example
86
+ * // Example 4: Validate a Data URL
87
+ * const options = { allowDataUrl: true };
88
+ * const result = isValidUrl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...', options);
89
+ * console.log(result); // true
90
+ */
91
+ function isValidUrl(url, options = {}) {
92
+ const { protocols = ['http:', 'https:'], requireTld = true, allowUnderscores = false, allowTrailingDot = false, allowNumericTld = false, allowIp = true, maxLength = 2083, minLength = 3, requireValidPath = false, allowDataUrl = false, allowFragment = true, // Default: allow fragments
93
+ requireFragment = false, // Default: do not require fragments
94
+ fragmentRegex = /^[a-z0-9\-._~!$&'()*+,;=:@/?]*$/i, // Default: basic URL-safe characters
95
+ } = options;
96
+ // Early check for non-string input
97
+ if (typeof url !== 'string') {
98
+ return false;
99
+ }
100
+ // Check length of the URL
101
+ if (url.length < minLength || url.length > maxLength) {
102
+ return false;
103
+ }
104
+ // Data URL check
105
+ if (allowDataUrl && url.startsWith('data:')) {
106
+ return /^data:([a-z]+\/[a-z0-9-+.]+)?;base64,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)+$/i.test(url);
107
+ }
108
+ try {
109
+ const parsedUrl = new URL(url);
110
+ // Protocol check
111
+ if (!protocols.includes(parsedUrl.protocol)) {
112
+ return false;
113
+ }
114
+ // Host check
115
+ if (!parsedUrl.hostname) {
116
+ return false;
117
+ }
118
+ // IP address check
119
+ const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
120
+ const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
121
+ const isIp = ipv4Regex.test(parsedUrl.hostname) || ipv6Regex.test(parsedUrl.hostname);
122
+ if (isIp) {
123
+ if (!allowIp)
124
+ return false;
125
+ }
126
+ else {
127
+ // Domain name check
128
+ const domainSegments = parsedUrl.hostname.split('.');
129
+ if (requireTld && domainSegments.length < 2) {
130
+ return false;
131
+ }
132
+ const tld = domainSegments[domainSegments.length - 1];
133
+ if (!allowNumericTld && /^\d+$/.test(tld)) {
134
+ return false;
135
+ }
136
+ const domainRegex = allowUnderscores
137
+ ? /^[a-z0-9_]+(-[a-z0-9_]+)*$/i
138
+ : /^[a-z0-9]+(-[a-z0-9]+)*$/i;
139
+ for (let i = 0; i < domainSegments.length; i++) {
140
+ const segment = domainSegments[i];
141
+ if (segment.length > 63 || (i === domainSegments.length - 1 && segment.length < 2)) {
142
+ return false;
143
+ }
144
+ if (!domainRegex.test(segment)) {
145
+ if (!(allowTrailingDot && i === domainSegments.length - 1 && segment === '')) {
146
+ return false;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ // Path validation
152
+ if (requireValidPath && parsedUrl.pathname !== '/') {
153
+ const pathRegex = /^(\/[\w\-.~!$&'()*+,;=:@%]+)+\/?$/;
154
+ if (!pathRegex.test(parsedUrl.pathname)) {
155
+ return false;
156
+ }
157
+ }
158
+ // Port number validation
159
+ if (parsedUrl.port) {
160
+ const port = parseInt(parsedUrl.port, 10);
161
+ if (isNaN(port) || port <= 0 || port > 65535) {
162
+ return false;
163
+ }
164
+ }
165
+ // Fragment validation
166
+ if (parsedUrl.hash) {
167
+ const fragment = parsedUrl.hash.slice(1); // Remove the leading "#"
168
+ if (!allowFragment) {
169
+ return false; // Fragments are not allowed
170
+ }
171
+ if (!fragmentRegex.test(fragment)) {
172
+ return false; // Fragment does not match the custom fragment regex
173
+ }
174
+ }
175
+ else {
176
+ if (requireFragment) {
177
+ return false; // A fragment is required but missing
178
+ }
179
+ }
180
+ return true;
181
+ }
182
+ catch (error) {
183
+ return false;
184
+ }
43
185
  }
44
186
  /**
45
187
  * Retrieves the label for a content source tag.
@@ -156,7 +298,16 @@ const handleShortlinkIndividualPattern = match => {
156
298
  [, url] = matchUrl;
157
299
  }
158
300
  const urlForValidate = url.replace(new RegExp(PERSONALIZE_PTN_PATTERN, 'g'), 'personalize_pattern');
159
- const isValid = validateURL(urlForValidate);
301
+ const isValid = isValidUrl(urlForValidate, {
302
+ protocols: ['https:'],
303
+ requireTld: false,
304
+ allowFragment: true,
305
+ requireFragment: false,
306
+ allowNumericTld: true,
307
+ allowUnderscores: true,
308
+ allowTrailingDot: true,
309
+ allowIp: true,
310
+ });
160
311
  // Validate the URL inside the shortlink pattern
161
312
  if (!isValid) {
162
313
  console.error(`Invalid URL detected in shortlink individual: Full match: ${fullMatch} - URL: ${url} - Validate URL: ${urlForValidate}`);
@@ -188,7 +339,16 @@ const handleShortlinkGeneralPattern = match => {
188
339
  while ((matchUrl = urlRegex.exec(fullMatch)) !== null) {
189
340
  [, url] = matchUrl;
190
341
  }
191
- const isValid = validateURL(url);
342
+ const isValid = isValidUrl(url, {
343
+ protocols: ['https:'],
344
+ requireTld: false,
345
+ allowFragment: true,
346
+ requireFragment: false,
347
+ allowNumericTld: true,
348
+ allowUnderscores: true,
349
+ allowTrailingDot: true,
350
+ allowIp: true,
351
+ });
192
352
  // Validate the URL inside the shortlink general pattern
193
353
  if (!isValid) {
194
354
  console.error(`Invalid URL detected in shortlink general: fullMatch:: ${fullMatch}`);
@@ -9,6 +9,7 @@ export declare const TagifyWrapper: import("styled-components").StyledComponent<
9
9
  $maxHeight?: number | undefined;
10
10
  $minWidth?: CSSProperties['minWidth'];
11
11
  $tagifyFullWidth?: boolean | undefined;
12
+ $tagInvalidIcon?: any;
12
13
  $placeholder?: string | undefined;
13
14
  }, never>;
14
15
  export declare const TagInput: import("styled-components").StyledComponent<"input", any, {}, never>;
@@ -3,7 +3,7 @@ import styled, { css } from 'styled-components';
3
3
  import { isString } from 'lodash';
4
4
  // Constants
5
5
  import { globalToken } from '@antscorp/antsomi-ui/es/constants';
6
- import { MIN_H_WRAPPER, READONLY_TAG, TAG_H } from './constants';
6
+ import { INVALID_TAG, MIN_H_WRAPPER, READONLY_TAG, TAG_H } from './constants';
7
7
  // Utils
8
8
  import { getBackgroundInputStatus, getStyledTags } from './utils';
9
9
  export const WrapperPlaceHolder = styled.div `
@@ -42,10 +42,12 @@ export const TagifyWrapper = styled.div `
42
42
  overflow-y: auto;
43
43
  `}
44
44
 
45
- ${$tagifyFullWidth &&
45
+ &:not(.tagify--empty) {
46
+ ${$tagifyFullWidth &&
46
47
  css `
47
- width: 100%;
48
- `}
48
+ width: 100%;
49
+ `}
50
+ }
49
51
  `}
50
52
 
51
53
  display: flex;
@@ -73,6 +75,32 @@ export const TagifyWrapper = styled.div `
73
75
  cursor: not-allowed;
74
76
  }
75
77
 
78
+ &[${INVALID_TAG}='true'] {
79
+ ${({ $tagInvalidIcon }) => $tagInvalidIcon &&
80
+ css `
81
+ > div {
82
+ padding-right: 22px;
83
+ position: relative;
84
+
85
+ > span {
86
+ &::after {
87
+ content: '';
88
+ position: absolute;
89
+ top: 50%;
90
+ right: 5px;
91
+ transform: translateY(calc(-50% - 1px));
92
+ width: 14px;
93
+ height: 14px;
94
+ display: inline-block;
95
+ background-image: url(${$tagInvalidIcon});
96
+ background-size: contain;
97
+ background-repeat: no-repeat;
98
+ }
99
+ }
100
+ }
101
+ `}
102
+ }
103
+
76
104
  height: ${TAG_H}px;
77
105
  cursor: pointer;
78
106
 
@@ -149,3 +149,18 @@ export interface PatternHandlerWrapper {
149
149
  acceptablePattern: AcceptablePattern;
150
150
  handler: PatternHandler;
151
151
  }
152
+ export interface URLOptions {
153
+ protocols?: string[];
154
+ requireTld?: boolean;
155
+ allowUnderscores?: boolean;
156
+ allowTrailingDot?: boolean;
157
+ allowNumericTld?: boolean;
158
+ allowIp?: boolean;
159
+ maxLength?: number;
160
+ minLength?: number;
161
+ requireValidPath?: boolean;
162
+ allowDataUrl?: boolean;
163
+ allowFragment?: boolean;
164
+ requireFragment?: boolean;
165
+ fragmentRegex?: RegExp;
166
+ }
@@ -94,7 +94,7 @@
94
94
  "_ACT_QUICK_TEST": "クイックテスト",
95
95
  "_ACT_REFINE_ATTRIBUTE": "属性で絞り込む",
96
96
  "_ACT_REMOVE": "取り除く",
97
- "_ACT_REMOVE_ALL": "すべて削除",
97
+ "_ACT_REMOVE_ALL": "すべて削除する",
98
98
  "_ACT_REPLACE": "交換する",
99
99
  "_ACT_REPORTS": "レポート",
100
100
  "_ACT_RESET": "リセット",
@@ -233,7 +233,7 @@
233
233
  "_BOX_TITL_REMOVE_EVENT_ATTRIBUTE": "イベント属性の削除",
234
234
  "_BOX_TITL_REMOVE_FIELD": "フィールドの削除",
235
235
  "_BOX_TITL_REMOVE_GROUP": "グループの削除",
236
- "_BOX_TITL_REMOVE_IMAGE": "画像を削除",
236
+ "_BOX_TITL_REMOVE_IMAGE": "画像を削除する",
237
237
  "_BOX_TITL_REMOVE_MODEL": "モデルの削除",
238
238
  "_BOX_TITL_REPLACE_FILTER": "フィルターセットを交換する",
239
239
  "_BOX_TITL_SAVE_FILTER": "フィルターセットに名前を付けます",
@@ -597,7 +597,7 @@
597
597
  "_INFO_STORY_EVERY_DAY": "日",
598
598
  "_INFO_STORY_EVERY_MONTH": "月",
599
599
  "_INFO_STORY_EVERY_WEEK": "週",
600
- "_INFO_STORY_EXE_BRANCH_NO": "他のブランチの条件がいずれも一致しない場合、オーディエンスはこのブランチに誘導されます。",
600
+ "_INFO_STORY_EXE_BRANCH_NO": "他のブランチの条件がどれも一致しない場合、オーディエンスはこのブランチに誘導されます。",
601
601
  "_INFO_STORY_FILTER_CONDITION": "状態",
602
602
  "_INFO_STORY_FILTER_TYPE": "フィルターの種類",
603
603
  "_INFO_STORY_FREQUENCY": "トリガージャーニー",
@@ -837,7 +837,7 @@
837
837
  "_OPERATOR_LESS_OR_EQUAL": "以下",
838
838
  "_OPERATOR_LESS_THAN": "未満",
839
839
  "_OPERATOR_MATCH_ANY": "のいずれかに一致します",
840
- "_OPERATOR_NOT_CONTAIN": "含まない",
840
+ "_OPERATOR_NOT_CONTAIN": "含まれていない",
841
841
  "_OPERATOR_NOT_END_WITH": "で終わらない",
842
842
  "_OPERATOR_NOT_EQUAL": "等しくない",
843
843
  "_OPERATOR_NOT_EQUAL_TIME_AGO": "同じ時間前ではない",
@@ -1948,7 +1948,7 @@
1948
1948
  "_WARN_TITLE_AM_CREATED_BY": "作成者",
1949
1949
  "_ERROR_MESS_AM_COMPUTED_LIMIT": "この時間内に構築される分析モデルの数の制限に達しました。",
1950
1950
  "_WARN_TITLE_AM_COMPUTATIONAL_LIMIT": "警告 分析モデルの計算制限",
1951
- "_WARN_AM_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間にこの分析モデルを計算します。",
1951
+ "_WARN_AM_COMPUTATIONAL_LIMIT": "現在、計算制限に達しているため、システムは次の有効な時間内にこの分析モデルを計算します。",
1952
1952
  "_WARN_TITLE_BO_WARN_TOTAL": "警告 ビジネス オブジェクトの合計制限",
1953
1953
  "_WARN_BO_WARN_TOTAL_CONTENT_CREATE": "ビジネス オブジェクトの数が制限に達しました。\n新しいビジネス オブジェクトを作成する場合は、未使用のビジネス オブジェクトをアーカイブしてください。",
1954
1954
  "_ACT_WARN_BO_GO_TO_LIST": "ビジネスオブジェクトリストに移動",
@@ -2284,11 +2284,11 @@
2284
2284
  "_BLCK_OTP_EVENT": "イベント",
2285
2285
  "_BLCK_OTP_EVENT_SOURCE": "イベントソース",
2286
2286
  "_CHANNEL_CUSTOM_API": "カスタムチャンネル",
2287
- "_CHANNEL_DES_WEB": "ユーザーの行動や好みに基づいて Web サイトのコンテンツを動的に調整し、エンゲージメントとコンバージョン率を最適化します。",
2287
+ "_CHANNEL_DES_WEB": "ユーザーの行動や好みに基づいて Web サイトのコンテンツを動的に調整し、エンゲージメント率とコンバージョン率を最適化します。",
2288
2288
  "_CHANNEL_DES_WEB_NOTI": "リアルタイムのメッセージを送信して Web サイト訪問者を引きつけ、タイムリーなインタラクションとコンバージョンを促進します",
2289
2289
  "_CHANNEL_DES_APP_NOTI": "即時通知をモバイル アプリのみに送信し、即時のエンゲージメントとインタラクションを促進します",
2290
2290
  "_CHANNEL_DES_EMAIL": "パーソナライズされたメッセージをユーザーの受信箱に直接配信し、ターゲットを絞ったコンテンツでのエンゲージメントとコンバージョンを促進します。",
2291
- "_CHANNEL_DES_SMS": "直接的かつ即時的なコミュニケーションを提供し、ユーザーのモバイルデバイスに到達して即時のエンゲージメントとインタラクションを実現します。",
2291
+ "_CHANNEL_DES_SMS": "直接的かつ即時のコミュニケーションを提供し、ユーザーのモバイル デバイスに到達して即時のエンゲージメントとインタラクションを実現します。",
2292
2292
  "_CHANNEL_DES_SMART_INB": "プッシュ通知のコンテンツを一元管理して管理とエンゲージメントを合理化",
2293
2293
  "_CHANNEL_DES_FB_MESS": "直接的な会話型のコミュニケーションを提供し、使い慣れたソーシャル メディア プラットフォームでユーザーを惹きつけます",
2294
2294
  "_CHANNEL_DES_VIBER": "ダイレクト メッセージング機能を提供し、安全で使い慣れたソーシャル メディア プラットフォームでユーザーを魅了します。",
@@ -2400,7 +2400,7 @@
2400
2400
  "_WEBPER_TEMP_OBJ_INLINE_5": "ソーシャルプルーフディスプレイ",
2401
2401
  "_WEBPER_TEMP_OBJ_INLINE_6": "教育コンテンツ",
2402
2402
  "_WEBPER_TEMP_OBJ_SLIDEIN_1": "リードマグネット",
2403
- "_WEBPER_TEMP_OBJ_SLIDEIN_2": "終了意図",
2403
+ "_WEBPER_TEMP_OBJ_SLIDEIN_2": "終了の意図",
2404
2404
  "_WEBPER_TEMP_OBJ_SLIDEIN_3": "コンテンツティーザー",
2405
2405
  "_WEBPER_TEMP_OBJ_SLIDEIN_4": "アンケートと投票",
2406
2406
  "_WEBPER_TEMP_OBJ_SLIDEIN_5": "ソーシャルプルーフディスプレイ",
@@ -2435,7 +2435,7 @@
2435
2435
  "_OBJ_DES_WEB_4": "それぞれの訪問者のインタラクションの価値を最大化するために、独自のパーソナライズされたオファーを提供します",
2436
2436
  "_OBJ_DES_WEB_5": "ユーザーインタラクションを分析してコンテンツを洗練し、戦略をセグメント化し、Web サイトのレイアウトを最適化します。",
2437
2437
  "_OBJ_DES_WEB_NOTI_1": "タイムリーな更新、プロモーション、アラートでユーザーに即座に連絡します",
2438
- "_OBJ_DES_WEB_NOTI_2": "新しいコンテンツ、製品リリース、または期間限定オファーをユーザーに通知することで、Web サイトへのトラフィックを促進します",
2438
+ "_OBJ_DES_WEB_NOTI_2": "新しいコンテンツ、製品リリース、または期間限定オファーをユーザーに通知することで、Web サイトへのトラフィックを促進します。",
2439
2439
  "_OBJ_DES_WEB_NOTI_3": "パーソナライズされたオファーやリマインダーを配信してユーザーの行動を促す",
2440
2440
  "_OBJ_DES_WEB_NOTI_4": "ユーザーの興味や好みに合わせた関連性の高い有益な通知を送信することで、ユーザーの関心とリピートを維持します。",
2441
2441
  "_OBJ_DES_WEB_NOTI_5": "アカウント、トランザクション更新などの関連情報をユーザーのブラウザに直接配信します。",
@@ -2456,7 +2456,7 @@
2456
2456
  "_OBJ_DES_SMS_4": "予定や予約のリマインダーと確認を送信してノーショーを減らします",
2457
2457
  "_OBJ_DES_SMS_5": "注文確認、出荷通知、アカウント更新をリアルタイムで提供します",
2458
2458
  "_OBJ_DES_SMART_INB_1": "通知を集約し、ユーザーがメッセージを 1 か所で簡単に表示および管理できるようにします。",
2459
- "_OBJ_DES_SMART_INB_2": "プラットフォーム間で通知にアクセスし、操作するためのシームレスで直感的なインターフェイスを提供します。",
2459
+ "_OBJ_DES_SMART_INB_2": "プラットフォーム間で通知にアクセスし、通知を操作するためのシームレスで直感的なインターフェイスを提供します。",
2460
2460
  "_OBJ_DES_SMART_INB_3": "通知によるタイムリーな応答と対話を促進し、ユーザー エンゲージメントと満足度を最大化します。",
2461
2461
  "_OBJ_DES_SMART_INB_4": "Web プッシュやアプリ プッシュなどのさまざまなチャネルからの通知を統合し、ユーザーとの一貫性のある一貫したコミュニケーションを確保します。",
2462
2462
  "_OBJ_DES_FB_MESS_1": "ターゲットを絞ったプロモーションやオファーをブロードキャストして、エンゲージメントと販売を促進します",
@@ -2500,11 +2500,11 @@
2500
2500
  "_WEBPER_TEMP_OBJ_DES_POP_1": "潜在的な顧客からの情報、または既存の顧客からのレビューやフィードバックを収集してデータを充実させます",
2501
2501
  "_WEBPER_TEMP_OBJ_DES_POP_2": "限定セール、期間限定プロモーション、見逃せないおすすめ商品を紹介することで、収益を飛躍的に高めます。",
2502
2502
  "_WEBPER_TEMP_OBJ_DES_POP_3": "追加購入を促すために補完的な製品やアップグレードを提案する",
2503
- "_WEBPER_TEMP_OBJ_DES_POP_4": "躊躇する訪問者をさらに滞在させ、さらに探索したくなる魅力的なオファーで出口をチャンスに変えます。",
2503
+ "_WEBPER_TEMP_OBJ_DES_POP_4": "ためらう訪問者をさらに滞在させ、さらに探索したくなる魅力的なオファーで出口をチャンスに変えます。",
2504
2504
  "_WEBPER_TEMP_OBJ_DES_POP_5": "重要なニュースやイベントを視聴者に直接ブロードキャストして最新情報を提供します",
2505
2505
  "_WEBPER_TEMP_OBJ_DES_POP_6": "Cookie の使用についてユーザーの同意を得ることで、視聴者の安心とプライバシー規制の遵守を確保します。",
2506
2506
  "_WEBPER_TEMP_OBJ_DES_POP_7": "CDP 365 からのデータを利用して、パーソナライズされた製品の推奨事項を表示し、各訪問者の興味や過去のやり取りに合わせて調整できます。",
2507
- "_WEBPER_TEMP_OBJ_DES_POP_8": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇している買い物客に購入を完了させるよう促します。",
2507
+ "_WEBPER_TEMP_OBJ_DES_POP_8": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇する買い物客を購入を完了させるよう促します。",
2508
2508
  "_WEBPER_TEMP_OBJ_DES_POP_9": "ソーシャル メディア プラットフォームでコミュニティを拡大し、ブランドの存在感を高めます",
2509
2509
  "_WEBPER_TEMP_OBJ_DES_POP_10": "参加者と興奮を促進する注目を集めるイベント プロモーションで成功への舞台を整えます。",
2510
2510
  "_WEBPER_TEMP_OBJ_DES_POP_11": "魅力的な運ゲーやインタラクティブなコンテンツで興奮を呼び起こし、エンゲージメントを高め、ユーザーを何度もリピートさせます。",
@@ -2535,7 +2535,7 @@
2535
2535
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_4": "アンケート、投票、またはフィードバック フォームを組み込んで、貴重な洞察を収集し、交流を促進します。",
2536
2536
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_5": "顧客のレビュー、評価、お客様の声などの社会的証明要素を紹介して、購入の意思決定に影響を与える信頼と信用を構築します。",
2537
2537
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_6": "期間限定のオファー、カウントダウンタイマー、またはフラッシュセール通知を提示することで、緊迫感を醸成し、即時行動を促します。",
2538
- "_WEBPER_TEMP_OBJ_DES_SLIDEIN_7": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇している買い物客に購入を完了させるよう促します。",
2538
+ "_WEBPER_TEMP_OBJ_DES_SLIDEIN_7": "ターゲットを絞ったオファー、インセンティブ、またはリマインダーを使用して、躊躇する買い物客を購入を完了させるよう促します。",
2539
2539
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_8": "顧客からの問い合わせの必要性を減らし、ショッピング体験の全体的な満足度を向上させるために、顧客が遭遇する可能性のある一般的な懸念事項や問題のトラブルシューティングに対処する",
2540
2540
  "_WEBPER_TEMP_OBJ_DES_SLIDEIN_9": "登録や出欠確認のオプションを提供して、ウェビナー、ワークショップ、イベントに参加するようユーザーを招待し、参加とエンゲージメントを促進します。",
2541
2541
  "_LINE_MESS_OBJ_DES_1": "各ユーザーの好み、行動、過去のやり取りに基づいてメッセージをカスタマイズする",
@@ -2626,7 +2626,7 @@
2626
2626
  "_LIFECYCLE_STAGE_OBJ_1": "ブランド認知度の向上",
2627
2627
  "_LIFECYCLE_STAGE_DES_1": "データに基づいた洞察を使用して、潜在的な顧客の注目を集める影響力のあるマーケティング キャンペーンを作成します。",
2628
2628
  "_LIFECYCLE_STAGE_OBJ_2": "リード育成の強化",
2629
- "_LIFECYCLE_STAGE_DES_2": "パーソナライズされたコンテンツとコミュニケーション戦略を開発し、見込み顧客を検討段階に導きます。",
2629
+ "_LIFECYCLE_STAGE_DES_2": "パーソナライズされたコンテンツとコミュニケーション戦略を開発し、見込み顧客を検討段階まで導きます。",
2630
2630
  "_LIFECYCLE_STAGE_OBJ_3": "コンバージョンの増加",
2631
2631
  "_LIFECYCLE_STAGE_DES_3": "ターゲットを絞ったプロモーションと合理化された購入プロセスにより販売目標到達プロセスを最適化し、見込み客を購入者に変えます。",
2632
2632
  "_LIFECYCLE_STAGE_OBJ_4": "忠誠心を育む",
@@ -2066,7 +2066,7 @@
2066
2066
  "_PREDICT_MODEL_PREPARE_DATA": "Chuẩn bị dữ liệu",
2067
2067
  "_PREDICT_MODEL_TRAIN_MODEL": "Mô hình tàu hỏa",
2068
2068
  "_PREDICT_MODEL_SCHEDULE_AND_UPDATE": "Lên lịch & Cập nhật",
2069
- "_PREDICT_MODEL_DATA_INPUTS": "Đầu vào dữ liệu",
2069
+ "_PREDICT_MODEL_DATA_INPUTS": "Dữ liệu đầu vào",
2070
2070
  "_PREDICT_MODEL_RFM_NAME": "Tên RFM",
2071
2071
  "_PREDICT_MODEL_RFM_DATA_SOURCE": "Nguồn dữ liệu RFM",
2072
2072
  "_PREDICT_MODEL_CUSTOMER_IDENTIFY": "Nhận dạng khách hàng",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antscorp/antsomi-ui",
3
- "version": "1.3.5-beta.819",
3
+ "version": "1.3.5-beta.820",
4
4
  "description": "An enterprise-class UI design language and React UI library.",
5
5
  "sideEffects": [
6
6
  "dist/*",