@sd-angular/core 19.0.36 → 19.0.39
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/README.md +2 -4
- package/components/index.d.ts +1 -0
- package/components/table/src/table.component.d.ts +1 -1
- package/components/timeline/index.d.ts +2 -0
- package/components/{history/models/history.model.d.ts → timeline/models/timeline.model.d.ts} +1 -1
- package/components/timeline/src/timeline.component.d.ts +7 -0
- package/configurations/src/sd-core.configuration.d.ts +0 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +10 -4
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +241 -101
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-timeline.mjs +49 -0
- package/fesm2022/sd-angular-core-components-timeline.mjs.map +1 -0
- package/fesm2022/sd-angular-core-components.mjs +1 -0
- package/fesm2022/sd-angular-core-components.mjs.map +1 -1
- package/fesm2022/sd-angular-core-configurations.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs +10 -10
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +4 -4
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/i18n/src/en.d.ts +1 -1
- package/package.json +13 -21
- package/components/base/index.d.ts +0 -1
- package/components/base/src/base-secure.component.d.ts +0 -8
- package/components/history/index.d.ts +0 -1
- package/components/history/src/history.component.d.ts +0 -7
- package/fesm2022/sd-angular-core-components-base.mjs +0 -23
- package/fesm2022/sd-angular-core-components-base.mjs.map +0 -1
- package/fesm2022/sd-angular-core-components-history.mjs +0 -51
- package/fesm2022/sd-angular-core-components-history.mjs.map +0 -1
- package/fesm2022/sd-angular-core-services-license.mjs +0 -97
- package/fesm2022/sd-angular-core-services-license.mjs.map +0 -1
- package/services/license/index.d.ts +0 -1
- package/services/license/src/license.service.d.ts +0 -9
- /package/components/{history → timeline}/pipes/view-date.pipe.d.ts +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Pipe, Injectable, input, Component } from '@angular/core';
|
|
3
|
+
import { SdBadge } from '@sd-angular/core/components/badge';
|
|
4
|
+
import { DateUtilities } from '@sd-angular/core/utilities';
|
|
5
|
+
import { EMPTY_STR } from '@sdcorejs/utils/constants';
|
|
6
|
+
import { TranslatePipe } from '@sd-angular/core/i18n';
|
|
7
|
+
|
|
8
|
+
class ViewDateTimePipe {
|
|
9
|
+
transform(value) {
|
|
10
|
+
if (!value || !DateUtilities.isDate(value)) {
|
|
11
|
+
return EMPTY_STR;
|
|
12
|
+
}
|
|
13
|
+
return DateUtilities.toFormat(value, 'HH:mm dd/MM/yyyy');
|
|
14
|
+
}
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ViewDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
16
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.21", ngImport: i0, type: ViewDateTimePipe, isStandalone: true, name: "viewDateTime" });
|
|
17
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ViewDateTimePipe, providedIn: 'root' });
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ViewDateTimePipe, decorators: [{
|
|
20
|
+
type: Pipe,
|
|
21
|
+
args: [{
|
|
22
|
+
name: 'viewDateTime',
|
|
23
|
+
standalone: true,
|
|
24
|
+
}]
|
|
25
|
+
}, {
|
|
26
|
+
type: Injectable,
|
|
27
|
+
args: [{
|
|
28
|
+
providedIn: 'root',
|
|
29
|
+
}]
|
|
30
|
+
}] });
|
|
31
|
+
|
|
32
|
+
class SdTimeline {
|
|
33
|
+
items = input.required({
|
|
34
|
+
transform: value => value ?? [],
|
|
35
|
+
});
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdTimeline, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdTimeline, isStandalone: true, selector: "sd-timeline", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"sd-timeline\">\n <div class=\"timeline-container\">\n <div class=\"timeline-line\"></div>\n @for (item of items(); track $index) {\n <div class=\"timeline-item\">\n <div class=\"dot\"></div>\n <div class=\"card\">\n <div class=\"header\">\n <div class=\"title-wrapper\">\n <span class=\"title\">{{ item.title }}</span>\n <span class=\"status\">\n @if (item.status) {\n <sd-badge\n [icon]=\"item.status.icon\"\n [title]=\"item.status.title\"\n [color]=\"item.status.color\"></sd-badge>\n }\n </span>\n </div>\n <span class=\"date\">{{ item.date | viewDateTime }}</span>\n </div>\n <div class=\"meta\">\n @if (item.actor) {\n <span>{{ 'core.component.timeline.by' | translate }} <strong>@{{ item.actor }}</strong></span>\n }\n @if (item.source) {\n <span> · {{ item.source }}</span>\n }\n </div>\n <div class=\"description\">\n {{ item.description }}\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".sd-timeline{padding:16px}.timeline-container{position:relative;padding-left:20px;font-size:14px;line-height:20px;min-width:470px;max-width:100%}.timeline-line{position:absolute;left:8px;top:0;bottom:0;width:2px;background-color:#94b0ff}.timeline-item{position:relative;margin-bottom:16px;padding-left:10px}.timeline-item .dot{position:absolute;left:-16px;top:12px;width:12px;height:12px;background-color:#94b0ff;border-radius:50%}.timeline-item .card{background:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;padding:8px 8px 8px 16px}.timeline-item .card .header{display:flex;justify-content:space-between;align-items:center}.timeline-item .card .header .title-wrapper{display:flex;align-items:flex-start;padding-right:8px}.timeline-item .card .header .title{margin-right:8px;color:#757575}.timeline-item .card .header .status{display:flex;align-items:center}.timeline-item .card .header .status mat-icon{margin-right:4px}.timeline-item .card .header .date{color:#757575;font-size:12px;line-height:16px}.timeline-item .card .meta{color:#757575;margin-top:4px}.timeline-item .card .meta strong{color:#000}.timeline-item .card .description{margin-top:4px;color:#000;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: SdBadge, selector: "sd-badge", inputs: ["type", "color", "primary", "secondary", "success", "info", "warning", "error", "fontSet", "title", "description", "tooltip", "icon", "size"], outputs: ["click"] }, { kind: "pipe", type: ViewDateTimePipe, name: "viewDateTime" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdTimeline, decorators: [{
|
|
40
|
+
type: Component,
|
|
41
|
+
args: [{ selector: 'sd-timeline', imports: [SdBadge, ViewDateTimePipe, TranslatePipe], template: "<div class=\"sd-timeline\">\n <div class=\"timeline-container\">\n <div class=\"timeline-line\"></div>\n @for (item of items(); track $index) {\n <div class=\"timeline-item\">\n <div class=\"dot\"></div>\n <div class=\"card\">\n <div class=\"header\">\n <div class=\"title-wrapper\">\n <span class=\"title\">{{ item.title }}</span>\n <span class=\"status\">\n @if (item.status) {\n <sd-badge\n [icon]=\"item.status.icon\"\n [title]=\"item.status.title\"\n [color]=\"item.status.color\"></sd-badge>\n }\n </span>\n </div>\n <span class=\"date\">{{ item.date | viewDateTime }}</span>\n </div>\n <div class=\"meta\">\n @if (item.actor) {\n <span>{{ 'core.component.timeline.by' | translate }} <strong>@{{ item.actor }}</strong></span>\n }\n @if (item.source) {\n <span> · {{ item.source }}</span>\n }\n </div>\n <div class=\"description\">\n {{ item.description }}\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".sd-timeline{padding:16px}.timeline-container{position:relative;padding-left:20px;font-size:14px;line-height:20px;min-width:470px;max-width:100%}.timeline-line{position:absolute;left:8px;top:0;bottom:0;width:2px;background-color:#94b0ff}.timeline-item{position:relative;margin-bottom:16px;padding-left:10px}.timeline-item .dot{position:absolute;left:-16px;top:12px;width:12px;height:12px;background-color:#94b0ff;border-radius:50%}.timeline-item .card{background:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;padding:8px 8px 8px 16px}.timeline-item .card .header{display:flex;justify-content:space-between;align-items:center}.timeline-item .card .header .title-wrapper{display:flex;align-items:flex-start;padding-right:8px}.timeline-item .card .header .title{margin-right:8px;color:#757575}.timeline-item .card .header .status{display:flex;align-items:center}.timeline-item .card .header .status mat-icon{margin-right:4px}.timeline-item .card .header .date{color:#757575;font-size:12px;line-height:16px}.timeline-item .card .meta{color:#757575;margin-top:4px}.timeline-item .card .meta strong{color:#000}.timeline-item .card .description{margin-top:4px;color:#000;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
42
|
+
}] });
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Generated bundle index. Do not edit.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
export { SdTimeline };
|
|
49
|
+
//# sourceMappingURL=sd-angular-core-components-timeline.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sd-angular-core-components-timeline.mjs","sources":["../../../projects/sd-angular/components/timeline/pipes/view-date.pipe.ts","../../../projects/sd-angular/components/timeline/src/timeline.component.ts","../../../projects/sd-angular/components/timeline/src/timeline.component.html","../../../projects/sd-angular/components/timeline/sd-angular-core-components-timeline.ts"],"sourcesContent":["import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { DateUtilities } from '@sd-angular/core/utilities';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\n\n@Pipe({\n name: 'viewDateTime',\n standalone: true,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewDateTimePipe implements PipeTransform {\n transform(value: any): string {\n if (!value || !DateUtilities.isDate(value)) {\n return EMPTY_STR;\n }\n return DateUtilities.toFormat(value, 'HH:mm dd/MM/yyyy');\n }\n}\n","import { Component, input } from '@angular/core';\nimport { SdBadge } from '@sd-angular/core/components/badge';\nimport { SdTimelineItem } from '../models/timeline.model';\nimport { ViewDateTimePipe } from '../pipes/view-date.pipe';\nimport { TranslatePipe } from '@sd-angular/core/i18n';\n\n@Component({\n selector: 'sd-timeline',\n imports: [SdBadge, ViewDateTimePipe, TranslatePipe],\n templateUrl: './timeline.component.html',\n styleUrl: './timeline.component.scss',\n})\nexport class SdTimeline {\n readonly items = input.required<SdTimelineItem[], SdTimelineItem[] | null | undefined>({\n transform: value => value ?? [],\n });\n}\n","<div class=\"sd-timeline\">\n <div class=\"timeline-container\">\n <div class=\"timeline-line\"></div>\n @for (item of items(); track $index) {\n <div class=\"timeline-item\">\n <div class=\"dot\"></div>\n <div class=\"card\">\n <div class=\"header\">\n <div class=\"title-wrapper\">\n <span class=\"title\">{{ item.title }}</span>\n <span class=\"status\">\n @if (item.status) {\n <sd-badge\n [icon]=\"item.status.icon\"\n [title]=\"item.status.title\"\n [color]=\"item.status.color\"></sd-badge>\n }\n </span>\n </div>\n <span class=\"date\">{{ item.date | viewDateTime }}</span>\n </div>\n <div class=\"meta\">\n @if (item.actor) {\n <span>{{ 'core.component.timeline.by' | translate }} <strong>@{{ item.actor }}</strong></span>\n }\n @if (item.source) {\n <span> · {{ item.source }}</span>\n }\n </div>\n <div class=\"description\">\n {{ item.description }}\n </div>\n </div>\n </div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAWa,gBAAgB,CAAA;AAC3B,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,OAAO,SAAS;QAClB;QACA,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IAC1D;wGANW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;kBACA,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCEY,UAAU,CAAA;AACZ,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAwD;AACrF,QAAA,SAAS,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE;AAChC,KAAA,CAAC;wGAHS,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,0MCZvB,2vCAqCA,EAAA,MAAA,EAAA,CAAA,owCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7BY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,gDAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAIvC,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,2vCAAA,EAAA,MAAA,EAAA,CAAA,owCAAA,CAAA,EAAA;;;AERrD;;AAEG;;;;"}
|
|
@@ -26,6 +26,7 @@ export * from '@sd-angular/core/components/splitter';
|
|
|
26
26
|
export * from '@sd-angular/core/components/preview';
|
|
27
27
|
export * from '@sd-angular/core/components/autoid-inspector';
|
|
28
28
|
export * from '@sd-angular/core/components/data-state';
|
|
29
|
+
export * from '@sd-angular/core/components/timeline';
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-components.mjs","sources":["../../../projects/sd-angular/components/sd-angular-core-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sd-angular-core-components.mjs","sources":["../../../projects/sd-angular/components/sd-angular-core-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-configurations.mjs","sources":["../../../projects/sd-angular/configurations/src/sd-core.configuration.ts","../../../projects/sd-angular/configurations/sd-angular-core-configurations.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { Language } from \"@sd-angular/core/models\";\n\nexport interface ISdCoreConfiguration {\n
|
|
1
|
+
{"version":3,"file":"sd-angular-core-configurations.mjs","sources":["../../../projects/sd-angular/configurations/src/sd-core.configuration.ts","../../../projects/sd-angular/configurations/sd-angular-core-configurations.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { Language } from \"@sd-angular/core/models\";\n\nexport interface ISdCoreConfiguration {\n format?: {\n number?: '1,234,567.89' | '1.234.567,89'; // Default: '1,234,567.89'\n };\n // Ngôn ngữ mặc định cho các message của Core UI.\n // - Language enum ('vi' | 'en' | 'ja' | 'ko' | 'zh') — dùng catalog built-in.\n // - Function () => Record<string, string> — custom catalog do portal tự định nghĩa.\n // Có thể bị override bởi localStorage (chỉ Language enum). Default: 'vi'.\n language?: Language | (() => Record<string, string>);\n}\n\nexport const SD_CORE_CONFIGURATION = new InjectionToken<ISdCoreConfiguration>('sd-core.configuration');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;MAca,qBAAqB,GAAG,IAAI,cAAc,CAAuB,uBAAuB;;ACdrG;;AAEG;;;;"}
|
|
@@ -327,8 +327,8 @@ const EN_MESSAGES = {
|
|
|
327
327
|
// ---- Component: code-editor ----
|
|
328
328
|
'core.component.code-editor.copied': 'Copied!',
|
|
329
329
|
'core.component.code-editor.copy': 'Copy code',
|
|
330
|
-
// ---- Component:
|
|
331
|
-
'core.component.
|
|
330
|
+
// ---- Component: timeline ----
|
|
331
|
+
'core.component.timeline.by': 'By',
|
|
332
332
|
// ---- Component: import-excel ----
|
|
333
333
|
'core.component.import-excel.choose-hint': 'Choose an .xlsx template file with up to {limit} rows.',
|
|
334
334
|
'core.component.import-excel.choose-file': 'Choose Excel file',
|
|
@@ -860,8 +860,8 @@ const JA_MESSAGES = {
|
|
|
860
860
|
// ---- Component: code-editor ----
|
|
861
861
|
'core.component.code-editor.copied': 'コピーしました!',
|
|
862
862
|
'core.component.code-editor.copy': 'コードをコピー',
|
|
863
|
-
// ---- Component:
|
|
864
|
-
'core.component.
|
|
863
|
+
// ---- Component: timeline ----
|
|
864
|
+
'core.component.timeline.by': '実行者',
|
|
865
865
|
// ---- Component: import-excel ----
|
|
866
866
|
'core.component.import-excel.choose-hint': 'テンプレートに沿った .xlsx ファイルを選択してください(最大 {limit} 行)。',
|
|
867
867
|
'core.component.import-excel.choose-file': 'Excel ファイルを選択',
|
|
@@ -1393,8 +1393,8 @@ const KO_MESSAGES = {
|
|
|
1393
1393
|
// ---- Component: code-editor ----
|
|
1394
1394
|
'core.component.code-editor.copied': '복사되었습니다!',
|
|
1395
1395
|
'core.component.code-editor.copy': '코드 복사',
|
|
1396
|
-
// ---- Component:
|
|
1397
|
-
'core.component.
|
|
1396
|
+
// ---- Component: timeline ----
|
|
1397
|
+
'core.component.timeline.by': '작성자',
|
|
1398
1398
|
// ---- Component: import-excel ----
|
|
1399
1399
|
'core.component.import-excel.choose-hint': '양식에 맞는 .xlsx 파일을 선택하세요. 최대 {limit}행까지 가능합니다.',
|
|
1400
1400
|
'core.component.import-excel.choose-file': 'Excel 파일 선택',
|
|
@@ -1926,8 +1926,8 @@ const VI_MESSAGES = {
|
|
|
1926
1926
|
// ---- Component: code-editor ----
|
|
1927
1927
|
'core.component.code-editor.copied': 'Đã copy!',
|
|
1928
1928
|
'core.component.code-editor.copy': 'Copy code',
|
|
1929
|
-
// ---- Component:
|
|
1930
|
-
'core.component.
|
|
1929
|
+
// ---- Component: timeline ----
|
|
1930
|
+
'core.component.timeline.by': 'Bởi',
|
|
1931
1931
|
// ---- Component: import-excel ----
|
|
1932
1932
|
'core.component.import-excel.choose-hint': 'Chọn tệp .xlsx theo mẫu, tối đa {limit} dòng.',
|
|
1933
1933
|
'core.component.import-excel.choose-file': 'Chọn tệp Excel',
|
|
@@ -2459,8 +2459,8 @@ const ZH_MESSAGES = {
|
|
|
2459
2459
|
// ---- Component: code-editor ----
|
|
2460
2460
|
'core.component.code-editor.copied': '已复制!',
|
|
2461
2461
|
'core.component.code-editor.copy': '复制代码',
|
|
2462
|
-
// ---- Component:
|
|
2463
|
-
'core.component.
|
|
2462
|
+
// ---- Component: timeline ----
|
|
2463
|
+
'core.component.timeline.by': '操作人',
|
|
2464
2464
|
// ---- Component: import-excel ----
|
|
2465
2465
|
'core.component.import-excel.choose-hint': '请选择符合模板的 .xlsx 文件,最多 {limit} 行。',
|
|
2466
2466
|
'core.component.import-excel.choose-file': '选择 Excel 文件',
|