@sdcorejs/angular 20.2.0 → 20.2.2
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/components/api-contract-builder/index.d.ts +694 -0
- package/components/badge/index.d.ts +1 -0
- package/components/index.d.ts +1 -0
- package/components/section/index.d.ts +2 -0
- package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs +3417 -0
- package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs.map +1 -0
- package/fesm2022/sdcorejs-angular-components-badge.mjs +14 -2
- package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-operator.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-section.mjs +22 -5
- package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-table.mjs +14 -13
- package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components.mjs +1 -0
- package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-i18n.mjs +405 -0
- package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-layout.mjs +146 -83
- package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
- package/i18n/index.d.ts +80 -0
- package/modules/layout/index.d.ts +23 -3
- package/package.json +5 -1
package/i18n/index.d.ts
CHANGED
|
@@ -139,6 +139,8 @@ declare const EN_MESSAGES: {
|
|
|
139
139
|
readonly 'core.form.tree-select.cancel': "Cancel";
|
|
140
140
|
readonly 'core.form.tree-select.apply': "Apply";
|
|
141
141
|
readonly 'core.component.tree.retry': "Retry";
|
|
142
|
+
readonly 'core.component.section.expand': "Expand {title}";
|
|
143
|
+
readonly 'core.component.section.collapse': "Collapse {title}";
|
|
142
144
|
readonly 'core.service.unsaved-changes.message': "You have unsaved changes. Discard them and continue?";
|
|
143
145
|
readonly 'core.component.job-progress.status.idle': "Ready";
|
|
144
146
|
readonly 'core.component.job-progress.status.queued': "Queued";
|
|
@@ -587,6 +589,84 @@ declare const EN_MESSAGES: {
|
|
|
587
589
|
readonly 'core.component.query-builder.to': "To";
|
|
588
590
|
readonly 'core.component.query-builder.boolean.true': "Yes";
|
|
589
591
|
readonly 'core.component.query-builder.boolean.false': "No";
|
|
592
|
+
readonly 'core.component.api-contract-builder.steps': "Contract steps";
|
|
593
|
+
readonly 'core.component.api-contract-builder.step.general': "General";
|
|
594
|
+
readonly 'core.component.api-contract-builder.step.input': "Input schema";
|
|
595
|
+
readonly 'core.component.api-contract-builder.step.request': "Request";
|
|
596
|
+
readonly 'core.component.api-contract-builder.step.response': "Response";
|
|
597
|
+
readonly 'core.component.api-contract-builder.step.output': "Output";
|
|
598
|
+
readonly 'core.component.api-contract-builder.step.review': "Review";
|
|
599
|
+
readonly 'core.component.api-contract-builder.empty.contract': "No contract yet";
|
|
600
|
+
readonly 'core.component.api-contract-builder.create-contract': "Create a contract";
|
|
601
|
+
readonly 'core.component.api-contract-builder.contract.code': "Contract code";
|
|
602
|
+
readonly 'core.component.api-contract-builder.contract.name': "Name";
|
|
603
|
+
readonly 'core.component.api-contract-builder.contract.description': "Description";
|
|
604
|
+
readonly 'core.component.api-contract-builder.contract.version': "Contract version";
|
|
605
|
+
readonly 'core.component.api-contract-builder.node.name': "Name";
|
|
606
|
+
readonly 'core.component.api-contract-builder.node.type': "Type";
|
|
607
|
+
readonly 'core.component.api-contract-builder.node.required': "Required";
|
|
608
|
+
readonly 'core.component.api-contract-builder.node.label': "Label";
|
|
609
|
+
readonly 'core.component.api-contract-builder.node.description': "Description";
|
|
610
|
+
readonly 'core.component.api-contract-builder.node.transform': "Temporal transform";
|
|
611
|
+
readonly 'core.component.api-contract-builder.node.items': "Item schema";
|
|
612
|
+
readonly 'core.component.api-contract-builder.node.remove': "Remove";
|
|
613
|
+
readonly 'core.component.api-contract-builder.node.empty': "No properties yet";
|
|
614
|
+
readonly 'core.component.api-contract-builder.node.add-property': "Add property";
|
|
615
|
+
readonly 'core.component.api-contract-builder.node.duplicate-key': "This name is already used by a sibling";
|
|
616
|
+
readonly 'core.component.api-contract-builder.node.confirm-remove': "Remove \"{name}\" and every field inside it?";
|
|
617
|
+
readonly 'core.component.api-contract-builder.node.confirm-type': "Changing the type discards the nested fields. Continue?";
|
|
618
|
+
readonly 'core.component.api-contract-builder.confirm.yes': "Yes";
|
|
619
|
+
readonly 'core.component.api-contract-builder.confirm.no': "No";
|
|
620
|
+
readonly 'core.component.api-contract-builder.required.true': "Yes";
|
|
621
|
+
readonly 'core.component.api-contract-builder.required.false': "No";
|
|
622
|
+
readonly 'core.component.api-contract-builder.field.required': "Required";
|
|
623
|
+
readonly 'core.component.api-contract-builder.transform.none': "None";
|
|
624
|
+
readonly 'core.component.api-contract-builder.mapping.mode': "Value";
|
|
625
|
+
readonly 'core.component.api-contract-builder.mapping.mode.source': "From source";
|
|
626
|
+
readonly 'core.component.api-contract-builder.mapping.mode.static': "Static value";
|
|
627
|
+
readonly 'core.component.api-contract-builder.mapping.mode.advanced': "Advanced";
|
|
628
|
+
readonly 'core.component.api-contract-builder.mapping.mode.nested': "Map each field";
|
|
629
|
+
readonly 'core.component.api-contract-builder.mapping.source': "Source expression";
|
|
630
|
+
readonly 'core.component.api-contract-builder.mapping.value': "Static value";
|
|
631
|
+
readonly 'core.component.api-contract-builder.mapping.sensitive': "sensitive";
|
|
632
|
+
readonly 'core.component.api-contract-builder.drawer.add-title': "Add field";
|
|
633
|
+
readonly 'core.component.api-contract-builder.drawer.edit-title': "Edit field";
|
|
634
|
+
readonly 'core.component.api-contract-builder.drawer.save': "Save";
|
|
635
|
+
readonly 'core.component.api-contract-builder.drawer.cancel': "Cancel";
|
|
636
|
+
readonly 'core.component.api-contract-builder.drawer.discard-confirm': "Discard unsaved changes?";
|
|
637
|
+
readonly 'core.component.api-contract-builder.summary.unmapped': "unmapped";
|
|
638
|
+
readonly 'core.component.api-contract-builder.summary.field-count': "{count} field(s)";
|
|
639
|
+
readonly 'core.component.api-contract-builder.node.name-required': "The field name cannot be empty";
|
|
640
|
+
readonly 'core.component.api-contract-builder.boolean.true': "True";
|
|
641
|
+
readonly 'core.component.api-contract-builder.boolean.false': "False";
|
|
642
|
+
readonly 'core.component.api-contract-builder.request.method': "Method";
|
|
643
|
+
readonly 'core.component.api-contract-builder.request.url': "URL";
|
|
644
|
+
readonly 'core.component.api-contract-builder.request.path': "Path parameters";
|
|
645
|
+
readonly 'core.component.api-contract-builder.request.query': "Query parameters";
|
|
646
|
+
readonly 'core.component.api-contract-builder.request.headers': "Headers";
|
|
647
|
+
readonly 'core.component.api-contract-builder.request.body': "Body";
|
|
648
|
+
readonly 'core.component.api-contract-builder.request.add-body': "Add a body";
|
|
649
|
+
readonly 'core.component.api-contract-builder.request.remove-body': "Remove the body";
|
|
650
|
+
readonly 'core.component.api-contract-builder.request.add-entry': "Add";
|
|
651
|
+
readonly 'core.component.api-contract-builder.response.status': "Success status codes";
|
|
652
|
+
readonly 'core.component.api-contract-builder.response.status-hint': "Comma separated, for example 200, 201";
|
|
653
|
+
readonly 'core.component.api-contract-builder.response.headers': "Response headers";
|
|
654
|
+
readonly 'core.component.api-contract-builder.response.body': "Response body";
|
|
655
|
+
readonly 'core.component.api-contract-builder.response.add-body': "Add a body";
|
|
656
|
+
readonly 'core.component.api-contract-builder.response.remove-body': "Remove the body";
|
|
657
|
+
readonly 'core.component.api-contract-builder.output.schema': "Output schema";
|
|
658
|
+
readonly 'core.component.api-contract-builder.output.use-response': "Use a response field as the output";
|
|
659
|
+
readonly 'core.component.api-contract-builder.output.fields': "Fields available to consumers";
|
|
660
|
+
readonly 'core.component.api-contract-builder.output.no-fields': "No leaf field yet";
|
|
661
|
+
readonly 'core.component.api-contract-builder.review.valid': "The contract is valid";
|
|
662
|
+
readonly 'core.component.api-contract-builder.review.errors': "{count} error(s)";
|
|
663
|
+
readonly 'core.component.api-contract-builder.review.warnings': "{count} warning(s)";
|
|
664
|
+
readonly 'core.component.api-contract-builder.review.json': "Contract JSON";
|
|
665
|
+
readonly 'core.component.api-contract-builder.empty.path': "No path parameter yet";
|
|
666
|
+
readonly 'core.component.api-contract-builder.empty.query': "No query parameter yet";
|
|
667
|
+
readonly 'core.component.api-contract-builder.empty.headers': "No header yet";
|
|
668
|
+
readonly 'core.component.api-contract-builder.empty.body': "No body declared";
|
|
669
|
+
readonly 'core.component.api-contract-builder.empty.section': "This section is missing from the contract";
|
|
590
670
|
readonly 'core.component.tree.selected-count': "{count} item(s) selected";
|
|
591
671
|
readonly 'core.component.tree.expand': "Expand tree item";
|
|
592
672
|
readonly 'core.component.tree.collapse': "Collapse tree item";
|
|
@@ -588,6 +588,22 @@ declare class SdSidebarMobileV3 {
|
|
|
588
588
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdSidebarMobileV3, "sd-sidebar-mobile-v3", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
589
589
|
}
|
|
590
590
|
|
|
591
|
+
/** Thêm '/' ở cuối để so khớp theo segment: '/appointment' không khớp nhầm '/appointments'. */
|
|
592
|
+
declare const normalizeMenuPath: (path: string) => string;
|
|
593
|
+
/** Route hiện tại có nằm trong nhánh của `path` không (khớp chính xác hoặc khớp phần đầu). */
|
|
594
|
+
declare const isMenuPathMatch: (routePath: string, path: string) => boolean;
|
|
595
|
+
/** Mọi path trong cây menu khớp với route hiện tại. */
|
|
596
|
+
declare const collectMatchedMenuPaths: (menus: SdLayoutMenu[] | null | undefined, routePath: string) => string[];
|
|
597
|
+
/**
|
|
598
|
+
* Path khớp sát nhất với route hiện tại trong cả cây menu.
|
|
599
|
+
* Khi cả '/appointment' và '/appointment/cs' cùng khớp route '/appointment/cs',
|
|
600
|
+
* chỉ path dài nhất được coi là active — path còn lại không được highlight.
|
|
601
|
+
* Hoà nhau thì lấy path xuất hiện trước theo thứ tự khai báo.
|
|
602
|
+
*/
|
|
603
|
+
declare const resolveActiveMenuPath: (menus: SdLayoutMenu[] | null | undefined, routePath: string) => string | null;
|
|
604
|
+
/** Chính menu này, hoặc bất kỳ menu con nào ở mọi cấp, có đúng path đó. */
|
|
605
|
+
declare const containsMenuPath: (menuItem: SdLayoutMenu, path: string) => boolean;
|
|
606
|
+
|
|
591
607
|
/**
|
|
592
608
|
* Resolve a translated tab name for `@SdTabComponent`.
|
|
593
609
|
*
|
|
@@ -609,8 +625,12 @@ declare class MenuPipe implements PipeTransform {
|
|
|
609
625
|
}
|
|
610
626
|
|
|
611
627
|
declare class MenuFocusPipe implements PipeTransform {
|
|
612
|
-
|
|
613
|
-
|
|
628
|
+
/**
|
|
629
|
+
* @param activeMenuPath Path khớp sát nhất với route hiện tại (xem `resolveActiveMenuPath`).
|
|
630
|
+
* Truyền vào thì chỉ menu chứa đúng path đó mới focus, nên '/appointment' không sáng khi đang ở
|
|
631
|
+
* '/appointment/cs'. Bỏ trống thì giữ cách khớp phần đầu cũ.
|
|
632
|
+
*/
|
|
633
|
+
transform(routePath: string, menuItem: SdLayoutMenu, activeMenuPath?: string | null): boolean;
|
|
614
634
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuFocusPipe, never>;
|
|
615
635
|
static ɵpipe: _angular_core.ɵɵPipeDeclaration<MenuFocusPipe, "menuFocus", true>;
|
|
616
636
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MenuFocusPipe>;
|
|
@@ -631,5 +651,5 @@ declare class SdLayoutModule {
|
|
|
631
651
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<SdLayoutModule>;
|
|
632
652
|
}
|
|
633
653
|
|
|
634
|
-
export { DEFAULT_LAYOUT_MOBILE_BREAKPOINT, ForbiddenModule, HighlightSearchPipe, HomeModule, MenuFocusPipe, MenuPipe, NotFoundModule, SD_LAYOUT_CONFIGURATION, SD_LAYOUT_DEMO_FALLBACK, SD_LAYOUT_STORAGE_NAMESPACE, SD_LAYOUT_VIEWPORT, SdLayoutComponent, SdLayoutMenuTreeComponent, SdLayoutModule, SdLayoutNavigationStateService, SdLayoutResponsiveService, SdLayoutService, SdLayoutStorageService, SdLayoutUserMenuComponent, SdPageComponent, SdSidebarMobileOverlay, SdSidebarMobileV1, SdSidebarMobileV2, SdSidebarMobileV3, SdSidebarV2, SdSidebarV3, flattenMenuLeaves, getMenuStableKey, normalizeLayoutMobileBreakpoint, normalizeSidebarConfiguration, resolveMenuKeys, resolveSidebarV2Interaction, resolveSidebarV3Recent, resolveTabName, searchMenuLeaves, selectPrimaryMenuGroups };
|
|
654
|
+
export { DEFAULT_LAYOUT_MOBILE_BREAKPOINT, ForbiddenModule, HighlightSearchPipe, HomeModule, MenuFocusPipe, MenuPipe, NotFoundModule, SD_LAYOUT_CONFIGURATION, SD_LAYOUT_DEMO_FALLBACK, SD_LAYOUT_STORAGE_NAMESPACE, SD_LAYOUT_VIEWPORT, SdLayoutComponent, SdLayoutMenuTreeComponent, SdLayoutModule, SdLayoutNavigationStateService, SdLayoutResponsiveService, SdLayoutService, SdLayoutStorageService, SdLayoutUserMenuComponent, SdPageComponent, SdSidebarMobileOverlay, SdSidebarMobileV1, SdSidebarMobileV2, SdSidebarMobileV3, SdSidebarV2, SdSidebarV3, collectMatchedMenuPaths, containsMenuPath, flattenMenuLeaves, getMenuStableKey, isMenuPathMatch, normalizeLayoutMobileBreakpoint, normalizeMenuPath, normalizeSidebarConfiguration, resolveActiveMenuPath, resolveMenuKeys, resolveSidebarV2Interaction, resolveSidebarV3Recent, resolveTabName, searchMenuLeaves, selectPrimaryMenuGroups };
|
|
635
655
|
export type { ISdLayoutConfiguration, ISdSidebarConfiguration, Menus, ResolvedSidebarRecentConfiguration, SdLayoutAccountAction, SdLayoutChildrenMenu, SdLayoutMenu, SdLayoutNotificationConfiguration, SdLayoutRootMenu, SdLayoutStorageNamespace, SdLayoutUserInfo, SdLayoutUserRole, SdLayoutVersionState, SdLayoutViewport, SidebarConfigurationBase, SidebarConfigurationV1, SidebarConfigurationV2, SidebarConfigurationV3 };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdcorejs/angular",
|
|
3
|
-
"version": "20.2.
|
|
3
|
+
"version": "20.2.2",
|
|
4
4
|
"description": "Angular component library: data table, query bar/builder, 20+ signal-based form controls, layout, auth and workflow services. Standalone, OnPush, signals-first. Published in parallel lines for Angular 19, 20 and 21.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -78,6 +78,10 @@
|
|
|
78
78
|
"types": "./components/anchor/index.d.ts",
|
|
79
79
|
"default": "./fesm2022/sdcorejs-angular-components-anchor.mjs"
|
|
80
80
|
},
|
|
81
|
+
"./components/api-contract-builder": {
|
|
82
|
+
"types": "./components/api-contract-builder/index.d.ts",
|
|
83
|
+
"default": "./fesm2022/sdcorejs-angular-components-api-contract-builder.mjs"
|
|
84
|
+
},
|
|
81
85
|
"./components/audit-diff": {
|
|
82
86
|
"types": "./components/audit-diff/index.d.ts",
|
|
83
87
|
"default": "./fesm2022/sdcorejs-angular-components-audit-diff.mjs"
|