@sd-angular/core 19.0.0-beta.1 → 19.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/assets/scss/core/bootstrap.scss +25 -0
  2. package/assets/scss/core/form.scss +4 -10
  3. package/components/document-builder/src/document-builder.component.d.ts +23 -6
  4. package/components/document-builder/src/document-builder.config.d.ts +21 -0
  5. package/components/document-builder/src/document-builder.model.d.ts +1 -0
  6. package/components/document-builder/src/document-builder.utils.d.ts +10 -0
  7. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +4 -0
  8. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  9. package/components/document-builder/src/plugins/index.d.ts +6 -5
  10. package/components/table/src/models/table-item.model.d.ts +2 -1
  11. package/components/table/src/models/table-option.model.d.ts +2 -1
  12. package/components/workflow/src/models/index.d.ts +1 -0
  13. package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
  14. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  15. package/fesm2022/sd-angular-core-components-document-builder.mjs +721 -513
  16. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  17. package/fesm2022/sd-angular-core-components-table.mjs +366 -77
  18. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  19. package/fesm2022/sd-angular-core-components-workflow.mjs +23 -23
  20. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  21. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +24 -2
  22. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  23. package/fesm2022/sd-angular-core-forms-date.mjs +15 -3
  24. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  25. package/fesm2022/sd-angular-core-forms-datetime.mjs +17 -3
  26. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  27. package/fesm2022/sd-angular-core-forms-input-number.mjs +18 -3
  28. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  29. package/fesm2022/sd-angular-core-forms-input.mjs +20 -6
  30. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  31. package/fesm2022/sd-angular-core-forms-radio.mjs +17 -2
  32. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  33. package/fesm2022/sd-angular-core-forms-select.mjs +15 -2
  34. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  35. package/fesm2022/sd-angular-core-forms-textarea.mjs +21 -2
  36. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  37. package/fesm2022/sd-angular-core-modules-auth.mjs +137 -0
  38. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -0
  39. package/fesm2022/sd-angular-core-modules-layout.mjs +1 -1
  40. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  41. package/fesm2022/sd-angular-core-modules.mjs +1 -0
  42. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  43. package/fesm2022/sd-angular-core-pipes.mjs +21 -1
  44. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  45. package/fesm2022/sd-angular-core-services-confirm.mjs +60 -25
  46. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  47. package/fesm2022/sd-angular-core-utilities-extensions.mjs +66 -1
  48. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  49. package/fesm2022/sd-angular-core-utilities-models.mjs +12 -3
  50. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  51. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -1
  52. package/forms/date/src/date.component.d.ts +4 -1
  53. package/forms/datetime/src/datetime.component.d.ts +4 -1
  54. package/forms/input/src/input.component.d.ts +6 -4
  55. package/forms/input-number/src/input-number.component.d.ts +4 -1
  56. package/forms/radio/src/radio.component.d.ts +5 -1
  57. package/forms/select/src/select.component.d.ts +5 -1
  58. package/forms/textarea/src/textarea.component.d.ts +3 -1
  59. package/modules/auth/configurations/auth.configuration.d.ts +19 -0
  60. package/modules/auth/configurations/index.d.ts +1 -0
  61. package/modules/auth/guards/auth.guard.d.ts +11 -0
  62. package/modules/auth/guards/index.d.ts +2 -0
  63. package/modules/auth/guards/portal.guard.d.ts +11 -0
  64. package/modules/auth/index.d.ts +3 -0
  65. package/modules/auth/services/auth.model.d.ts +8 -0
  66. package/modules/auth/services/auth.service.d.ts +17 -0
  67. package/modules/auth/services/index.d.ts +2 -0
  68. package/modules/index.d.ts +1 -0
  69. package/package.json +56 -52
  70. package/pipes/index.d.ts +1 -0
  71. package/pipes/src/empty.pipe.d.ts +7 -0
  72. package/sd-angular-core-19.0.0-beta.10.tgz +0 -0
  73. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +8 -0
  74. package/services/confirm/src/lib/confirm.service.d.ts +14 -0
  75. package/utilities/extensions/index.d.ts +1 -0
  76. package/utilities/extensions/src/color.extension.d.ts +20 -0
  77. package/utilities/models/src/maybe-async.model.d.ts +1 -0
  78. package/utilities/models/src/pattern.model.d.ts +2 -2
  79. /package/components/document-builder/src/plugins/{comment.plugin.d.ts → comment/comment.plugin.d.ts} +0 -0
  80. /package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +0 -0
  81. /package/components/document-builder/src/plugins/{table-fit.plugin.d.ts → table-fit/table-fit.plugin.d.ts} +0 -0
  82. /package/components/document-builder/src/plugins/{variable.plugin.d.ts → variable/variable.plugin.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-modules-layout.mjs","sources":["../../../projects/sd-angular/modules/layout/components/page/page.component.ts","../../../projects/sd-angular/modules/layout/components/page/page.component.html","../../../projects/sd-angular/modules/layout/pipes/menu.pipe.ts","../../../projects/sd-angular/modules/layout/pipes/menu-focus.pipe.ts","../../../projects/sd-angular/modules/layout/pipes/high-light-search.pipe.ts","../../../projects/sd-angular/modules/layout/configurations/layout.configuration.ts","../../../projects/sd-angular/modules/layout/services/storage/storage.service.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/user/user.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/user/user.component.html","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.html","../../../projects/sd-angular/modules/layout/components/sidebar-v1/main.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/main.component.html","../../../projects/sd-angular/modules/layout/components/layout-main/layout-main.component.ts","../../../projects/sd-angular/modules/layout/components/layout-main/layout-main.component.html","../../../projects/sd-angular/modules/layout/modules/home/components/home-page/home-page.component.ts","../../../projects/sd-angular/modules/layout/modules/home/components/home-page/home-page.component.html","../../../projects/sd-angular/modules/layout/modules/home/guards/home-redirect.guard.ts","../../../projects/sd-angular/modules/layout/modules/home/home.routing.ts","../../../projects/sd-angular/modules/layout/modules/home/home.module.ts","../../../projects/sd-angular/modules/layout/modules/not-found/pages/root/root.component.ts","../../../projects/sd-angular/modules/layout/modules/not-found/pages/root/root.component.html","../../../projects/sd-angular/modules/layout/modules/not-found/not-found.routing.ts","../../../projects/sd-angular/modules/layout/modules/not-found/not-found.module.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/pages/root/root.component.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/pages/root/root.component.html","../../../projects/sd-angular/modules/layout/modules/forbidden/forbidden.routing.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/forbidden.module.ts","../../../projects/sd-angular/modules/layout/layout.routing.ts","../../../projects/sd-angular/modules/layout/layout.module.ts","../../../projects/sd-angular/modules/layout/sd-angular-core-modules-layout.ts"],"sourcesContent":["import { Component, ElementRef, Input } from '@angular/core';\r\n@Component({\r\n selector: 'sd-page',\r\n templateUrl: './page.component.html',\r\n styleUrls: ['./page.component.scss'],\r\n})\r\nexport class SdPageComponent {\r\n\r\n title?: string;\r\n @Input('title') set _title(val: string | undefined | null) {\r\n this.title = val || '';\r\n this.el.nativeElement.removeAttribute('title');\r\n }\r\n\r\n noHeader?: boolean;\r\n @Input('noHeader') set _noHeader(val: boolean | '' | undefined | null) {\r\n this.noHeader = val === '' || !!val;\r\n }\r\n constructor(private el: ElementRef) {}\r\n}\r\n","@if (!noHeader) {\r\n <div class=\"c-page-header bg-white\">\r\n <div class=\"p-16 d-flex align-items-center w-full justify-content-between\">\r\n <div class=\"d-flex\">\r\n <ng-content select=\"[headerLeft]\">\r\n <h4 class=\"font-weight-medium\">{{ title }}</h4>\r\n </ng-content>\r\n </div>\r\n <ng-content select=\"[headerRight]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n\r\n<div class=\"c-page-wrapper px-0\">\r\n <div class=\"c-page-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","import * as uuid from 'uuid';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutMenu, Menus } from '../services/menu/menu.model';\r\nimport { Params } from '@angular/router';\r\nimport { SdPermissionService } from '@sd-angular/core/modules/permission';\r\n// End\r\n@Pipe({\r\n name: 'menu',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MenuPipe implements PipeTransform {\r\n constructor(private permissionService: SdPermissionService) {}\r\n transform(menus: SdLayoutMenu[]): SdLayoutMenu[] {\r\n const results: Menus = [];\r\n const check = (menu: SdLayoutMenu): SdLayoutMenu | null => {\r\n if ('children' in menu) {\r\n const children: Menus = [];\r\n menu.children?.forEach(childMenu => {\r\n childMenu = check(childMenu) as SdLayoutMenu;\r\n if (childMenu) {\r\n children.push({ ...childMenu, id: this.#getHashIdMenu(childMenu) });\r\n }\r\n });\r\n\r\n if (!children.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...menu,\r\n children,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if ('permission' in menu) {\r\n const path = menu?.path?.includes('http') ? menu.path : menu.path;\r\n if (!menu.path) {\r\n return null;\r\n }\r\n\r\n if (\r\n (typeof menu.permission === 'string' || Array.isArray(menu.permission)) &&\r\n this.permissionService.hasPermission(menu.permission)\r\n ) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if (typeof menu.permission === 'boolean' && menu.permission) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if (typeof menu.permission === 'function' && menu.permission()) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n return {\r\n ...menu,\r\n id: uuid.v4(),\r\n };\r\n };\r\n\r\n menus?.forEach(menu => {\r\n menu = check(menu) as SdLayoutMenu;\r\n if (menu) {\r\n results.push(menu);\r\n }\r\n });\r\n return results;\r\n }\r\n\r\n #getHashIdMenu = (menu: SdLayoutMenu): string => {\r\n const extendedMenu = menu as SdLayoutMenu & { path?: string; permission?: string; queryParams?: Params };\r\n const hashKeys: (keyof typeof extendedMenu)[] = ['title', 'path', 'permission', 'queryParams', 'icon', 'level', 'tooltipTitle'];\r\n const hashData = hashKeys.reduce(\r\n (acc, key) => {\r\n const value = extendedMenu[key];\r\n if (value !== undefined && value !== null) {\r\n acc[key as string] = value;\r\n }\r\n return acc;\r\n },\r\n {} as Record<string, any>\r\n );\r\n\r\n return Object.keys(hashData).length > 0 ? SdUtilities.hash(hashData) : uuid.v4();\r\n };\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutMenu } from '../services';\r\n// End\r\n@Pipe({\r\n name: 'menuFocus',\r\n})\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuFocusPipe implements PipeTransform {\r\n transform(routePath: string, menuItem: SdLayoutMenu): boolean {\r\n if (!routePath) {\r\n return false;\r\n }\r\n if ('children' in menuItem && menuItem.children) {\r\n return menuItem.children.some(child => {\r\n return 'path' in child && child.path ? this.#match(routePath, child.path) : false;\r\n });\r\n }\r\n return 'path' in menuItem && this.#match(routePath, menuItem.path);\r\n }\r\n\r\n #match = (routePath: string, path: string): boolean => {\r\n if (!path) {\r\n return false;\r\n }\r\n if (routePath === path) {\r\n return true;\r\n }\r\n return this.#normalizePath(routePath).startsWith(this.#normalizePath(path));\r\n };\r\n\r\n #normalizePath = (p: string): string => {\r\n return p.endsWith('/') ? p : p + '/';\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Pipe({\r\n name: 'highLightSearch',\r\n})\r\nexport class HighlightSearchPipe implements PipeTransform {\r\n transform(\r\n value: string,\r\n keyword: string,\r\n agrs?: {\r\n color?: string;\r\n }\r\n ): string {\r\n const { color = '#ffff00' } = agrs ?? {};\r\n keyword = this.#normalizeValue(keyword);\r\n if (!keyword || keyword.length < 3) {\r\n return value;\r\n }\r\n value = value?.trim() || '';\r\n const regex = new RegExp(SdUtilities.changeAliasLowerCase(keyword), 'gi'); //'gi' for case insensitive and can use 'g' if you want the search to be case sensitive.\r\n const aliasLowerCaseStr = SdUtilities.changeAliasLowerCase(value);\r\n const strs: string[] = [];\r\n let previousOffset = 0;\r\n aliasLowerCaseStr.replace(regex, (_, offset) => {\r\n strs.push(value.substring(previousOffset, offset));\r\n strs.push(`<mark style=\"background-color: ${color}\">${value.substring(offset, offset + keyword.length)}</mark>`);\r\n previousOffset = offset + keyword.length;\r\n return `<mark style=\"background-color: ${color}\">${value.substring(offset, offset + keyword.length)}</mark>`;\r\n });\r\n strs.push(value.substring(previousOffset, value.length));\r\n return strs.join('');\r\n }\r\n\r\n #normalizeValue = (keyword: string) => {\r\n let str: string = keyword?.toString() ?? '';\r\n /* eslint-disable no-useless-escape */\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, '');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n };\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nexport interface ISdLayoutConfiguration {\r\n homeUrl?: string;\r\n sidebar: ISdSidebarConfiguration | (() => ISdSidebarConfiguration | Promise<ISdSidebarConfiguration>);\r\n signout: () => void | Promise<void>;\r\n changePassword?: () => void | Promise<void>;\r\n}\r\n\r\nexport type ISdSidebarConfiguration = ISidebarConfigurationV1;\r\n\r\nexport interface ISidebarConfigurationV1 {\r\n version: 1;\r\n brandColor?: string; // Nên sử dụng mã màu #HEX, rgb - để có hiệu ứng opacity khi hover\r\n brandLightColor?: string; // Nên sử dụng mã màu #HEX, rgb - để có hiệu ứng opacity khi hover\r\n logoUrl?: string;\r\n defaultTitle?: string;\r\n}\r\n\r\nexport const SD_LAYOUT_CONFIGURATION = new InjectionToken<ISdLayoutConfiguration>('sd.layout.configuration');\r\n","import { Injectable } from '@angular/core';\r\nimport { SdStorage, SdStorageService } from '@sd-angular/core/services';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdLayoutStorageService {\r\n // Thông tin của user\r\n email: SdStorage<string>;\r\n username: SdStorage<string>;\r\n fullName: SdStorage<string>;\r\n // End\r\n\r\n // Thông tin state của sidebar\r\n isShowSidebar: SdStorage<boolean>;\r\n menuLockStatus: SdStorage<boolean>;\r\n lastActiveMenuGroupId: SdStorage<string>;\r\n // End\r\n\r\n constructor(private sdStorageService: SdStorageService) {\r\n // User\r\n this.email = this.sdStorageService.create('38476432-958f-45d3-b94c-931f144c1255');\r\n this.username = this.sdStorageService.create('e0f30fa2-d96c-49b1-ac43-75215f991af6');\r\n this.fullName = this.sdStorageService.create('60676f2a-78e2-432f-a921-49af351d138a');\r\n // End\r\n\r\n // State sidebar\r\n this.isShowSidebar = this.sdStorageService.create('cb07c316-ed6d-4620-9e92-53dbef6aa983');\r\n this.menuLockStatus = this.sdStorageService.create('2c2f4816-18b3-4ec3-8177-7b90bff036c3');\r\n this.lastActiveMenuGroupId = this.sdStorageService.create('2e6961d0-3380-4a94-a6a1-38837560cd96');\r\n // End\r\n }\r\n}\r\n","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService } from '../../../../services';\r\nimport { ISdLayoutConfiguration, SD_LAYOUT_CONFIGURATION } from '../../../../configurations';\r\n// End\r\n@Component({\r\n selector: 'lib-layout-user',\r\n templateUrl: './user.component.html',\r\n styleUrls: ['./user.component.scss'],\r\n imports: [MatMenuModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class LayoutUserComponent {\r\n @Input() isMobileOrTablet!: boolean;\r\n @Input() isMenuLock!: boolean;\r\n @Input() isShowSidebar!: boolean;\r\n\r\n @Output() menuClosed = new EventEmitter<boolean>();\r\n @Output() menuOpened = new EventEmitter<boolean>();\r\n @Output() toggleMenuLock = new EventEmitter<Event>();\r\n\r\n // Public\r\n email: string;\r\n username: string;\r\n fullName: string;\r\n singoutLayoutConfig!: () => void | Promise<void>;\r\n changePasswordLayoutConfig?: () => void | Promise<void>;\r\n // End\r\n\r\n constructor(\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfig: ISdLayoutConfiguration,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.email = this.layoutStorageService.email.get() || '';\r\n this.username = this.layoutStorageService.username.get() || '';\r\n this.fullName = this.layoutStorageService.fullName.get() || '';\r\n \r\n this.singoutLayoutConfig = this.layoutConfig.signout;\r\n this.changePasswordLayoutConfig = this.layoutConfig?.changePassword;\r\n }\r\n\r\n onMenuOpened = (): void => {\r\n this.menuOpened.emit();\r\n };\r\n onMenuClosed = (): void => {\r\n this.menuClosed.emit();\r\n };\r\n\r\n keepOpenWhenClickInsideMenu = (event: Event): void => {\r\n event.stopPropagation();\r\n };\r\n\r\n logout = (): void => {\r\n this.singoutLayoutConfig();\r\n };\r\n\r\n changePassword = (): void => {\r\n this.changePasswordLayoutConfig && this.changePasswordLayoutConfig();\r\n };\r\n\r\n onToggleMenuLock = (event: Event): void => {\r\n this.toggleMenuLock.emit(event);\r\n };\r\n}\r\n","<div class=\"c-layout-user-wrapper\">\r\n <div class=\"c-layout-user-avatar\" [matMenuTriggerFor]=\"userMenu\" (menuClosed)=\"onMenuClosed()\" (menuOpened)=\"onMenuOpened()\">\r\n <img alt=\"avatar\" class=\"c-avatar\" />\r\n </div>\r\n\r\n @if (!isMobileOrTablet) {\r\n <div aria-hidden=\"true\" mat-mini-fab class=\"c-layout-icon-toggle\" (click)=\"onToggleMenuLock($event)\">\r\n <mat-icon style=\"color: #8c8c8c\"> {{ isShowSidebar ? 'keyboard_arrow_right' : 'keyboard_arrow_left' }}</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n\r\n<!-- Popup thông tin User -->\r\n<mat-menu #userMenu=\"matMenu\" xPosition=\"before\" backdropClass=\"c-user-menu-backdrop-f90ce131-fa4c-4f71-a49b-ab7fa374fdd0\">\r\n <div aria-hidden=\"true\" class=\"c-user-menu-wrapper\" (click)=\"keepOpenWhenClickInsideMenu($event)\">\r\n <div class=\"c-user-info-wrapper\">\r\n <div class=\"c-user-avatar\">\r\n <img alt=\"avatar\" class=\"c-avatar\" />\r\n </div>\r\n <span class=\"c-user-name\">{{ fullName || username }}</span>\r\n <span class=\"c-user-email\">{{ email }}</span>\r\n </div>\r\n\r\n @if (changePasswordLayoutConfig) {\r\n <div class=\"c-sign-button-wrapper\">\r\n <button class=\"c-account-options\" (click)=\"changePassword()\">\r\n <img alt=\"lock\" />\r\n <span>Đổi mật khẩu</span>\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"c-sign-button-wrapper\">\r\n <button class=\"c-sign-button\" mat-flat-button (click)=\"logout()\">Đăng xuất</button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n<!-- End -->\r\n","import { Subscription } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NestedTreeControl } from '@angular/cdk/tree';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdInput, SdSuffixDefDirective } from '@sd-angular/core/forms';\r\nimport { NavigationEnd, Params, Router, RouterModule } from '@angular/router';\r\nimport { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\r\nimport { Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService, SdLayoutMenu } from '../../../../services';\r\nimport { HighlightSearchPipe, MenuFocusPipe } from '../../../../pipes';\r\nimport { ISdLayoutConfiguration, ISidebarConfigurationV1, SD_LAYOUT_CONFIGURATION } from '../../../../configurations';\r\nimport { LayoutUserComponent } from '../user/user.component';\r\n// End\r\n\r\n@Component({\r\n selector: 'lib-layout-sidebar',\r\n standalone: true,\r\n imports: [\r\n SdInput,\r\n FormsModule,\r\n CommonModule,\r\n RouterModule,\r\n MatIconModule,\r\n MatTreeModule,\r\n SdSafeHtmlPipe,\r\n MatInputModule,\r\n MenuFocusPipe,\r\n MatTooltipModule,\r\n HighlightSearchPipe,\r\n SdSuffixDefDirective,\r\n LayoutUserComponent,\r\n ],\r\n templateUrl: './sidebar.component.html',\r\n styleUrl: './sidebar.component.scss',\r\n})\r\nexport class LayoutSidebarComponent implements OnDestroy, OnInit {\r\n @Input() isShowSidebar!: boolean;\r\n @Input('menus') set _menus(menus: SdLayoutMenu[]) {\r\n this.menusOrigin = menus;\r\n this.currentPath = window.location.pathname;\r\n const lastActiveMenuGroupId = this.layoutStorageService.lastActiveMenuGroupId.get();\r\n // Lần đầu tiên vào trang web, nếu user chưa thao tác gì sẽ mặc định hiện menuGroup đầu tiên\r\n if (!lastActiveMenuGroupId) {\r\n this.layoutStorageService.lastActiveMenuGroupId.set(this.menusOrigin?.[0]?.id ?? '');\r\n }\r\n this.#bindingMenuGroupByCurrentPath(this.menusOrigin);\r\n }\r\n\r\n @Output() expandSideBar = new EventEmitter<void>();\r\n @Output() popupUserMenuClosed = new EventEmitter<void>();\r\n @Output() popupUserMenuOpened = new EventEmitter<void>();\r\n @Output() showSideBar = new EventEmitter<boolean | null>();\r\n\r\n // Private\r\n #subscription: Subscription;\r\n // End\r\n\r\n // Lưu ý khi sử dụng biến này\r\n menusOrigin: SdLayoutMenu[] = []; // Không được thay đổi mảng này trực tiếp (không push/splice...)\r\n // Dữ liệu menus này do dev khai báo bên ngoài, khi cần biến này để xử lý logic thì clone hoặc return về mảng khác.\r\n\r\n // Public\r\n screenHeight = 0;\r\n searchText!: string;\r\n isMenuLock: boolean;\r\n currentPath!: string;\r\n titleMenuGroup!: string | undefined;\r\n isMobileOrTablet = false;\r\n sidebar!: ISidebarConfigurationV1;\r\n dataSource = new MatTreeNestedDataSource<SdLayoutMenu>();\r\n idMenuGroupActive!: string | undefined; // Id menu-group đang đc active\r\n menusByGroup: SdLayoutMenu[] = []; // data menus-group được active\r\n treeControl = new NestedTreeControl<SdLayoutMenu>(node => ('children' in node && node.children?.length ? node.children : []));\r\n // End\r\n\r\n constructor(\r\n private router: Router,\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfiguration: ISdLayoutConfiguration,\r\n private layoutStorageService: SdLayoutStorageService,\r\n private menuFocusPipe: MenuFocusPipe\r\n ) {\r\n this.screenHeight = window.innerHeight;\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.isMenuLock = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.#subscription = this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n if (this.currentPath !== window.location.pathname) {\r\n this.currentPath = window.location.pathname;\r\n this.#bindingMenuGroupByCurrentPath(this.menusOrigin);\r\n }\r\n }\r\n });\r\n }\r\n\r\n async ngOnInit(): Promise<void> {\r\n if (typeof this.layoutConfiguration.sidebar === 'function') {\r\n this.sidebar = (await this.layoutConfiguration.sidebar()) as ISidebarConfigurationV1;\r\n } else {\r\n this.sidebar = this.layoutConfiguration.sidebar as ISidebarConfigurationV1;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n hasChild = (_: number, node: SdLayoutMenu): boolean => 'children' in node && !!node.children?.length;\r\n\r\n onToggleMenuNode = (menu: SdLayoutMenu): void => {\r\n this.treeControl.toggle(menu);\r\n };\r\n\r\n #onExpandAllMenuNodes = (menus: SdLayoutMenu[]): void => {\r\n menus?.forEach(menu => {\r\n this.treeControl.expand(menu);\r\n if ('children' in menu && menu.children?.length) {\r\n this.#onExpandAllMenuNodes(menu.children);\r\n }\r\n });\r\n };\r\n\r\n #onCollapseAllMenuNodes = (menus: SdLayoutMenu[]): void => {\r\n menus?.forEach(menu => {\r\n this.treeControl.collapse(menu);\r\n if ('children' in menu && menu.children?.length) {\r\n this.#onCollapseAllMenuNodes(menu.children);\r\n }\r\n });\r\n };\r\n\r\n toggleMenuLock(event: Event): void {\r\n event.stopPropagation();\r\n this.isMenuLock = !this.isMenuLock;\r\n this.layoutStorageService.menuLockStatus?.set(this.isMenuLock);\r\n this.showSideBar.emit(this.isMenuLock);\r\n }\r\n\r\n openHomePage = (): void => {\r\n if (!this.isMobileOrTablet) {\r\n this.router.navigateByUrl('/layout/home');\r\n } else {\r\n window.location.href = '/layout/home';\r\n }\r\n this.searchText = '';\r\n this.layoutStorageService.lastActiveMenuGroupId.set('');\r\n };\r\n\r\n onUserMenuClosed = (): void => {\r\n this.popupUserMenuClosed.emit();\r\n };\r\n\r\n onUserMenuOpened = (): void => {\r\n this.popupUserMenuOpened.emit();\r\n };\r\n\r\n navigate = (args: { path: string; queryParams: Params }): void => {\r\n const { path, queryParams } = args;\r\n if (path.includes('http')) {\r\n window.open(path);\r\n return;\r\n }\r\n this.router.navigate([path.split('?')[0]], {\r\n queryParams,\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n\r\n if (this.isMobileOrTablet) {\r\n this.#closeMenu();\r\n }\r\n };\r\n\r\n onFilterSearchText = (event: string): void => {\r\n this.searchText = event;\r\n this.#filterMenuBySearchText(this.menusByGroup);\r\n };\r\n\r\n onClearSearchText = (): void => {\r\n this.searchText = '';\r\n this.#filterMenuBySearchText(this.menusByGroup);\r\n };\r\n\r\n expandMenuGroup = (menuGroupNode: SdLayoutMenu): void => {\r\n this.titleMenuGroup = menuGroupNode?.tooltipTitle || menuGroupNode?.title;\r\n // Case 1: Menu không có children\r\n if (!('children' in menuGroupNode && menuGroupNode.children?.length)) {\r\n if ('path' in menuGroupNode) {\r\n this.navigate({ path: menuGroupNode.path, queryParams: menuGroupNode?.queryParams ?? {} });\r\n return;\r\n }\r\n }\r\n\r\n // Case 2: Menu có children\r\n if ('children' in menuGroupNode && menuGroupNode.children?.length) {\r\n this.menusByGroup = menuGroupNode.children;\r\n this.dataSource.data = this.menusByGroup;\r\n this.searchText = '';\r\n this.onFilterSearchText(this.searchText);\r\n this.expandSideBar.emit();\r\n }\r\n this.idMenuGroupActive = menuGroupNode?.id;\r\n this.layoutStorageService.lastActiveMenuGroupId.set(menuGroupNode?.id || '');\r\n if (!this.currentPath) {\r\n this.currentPath = window.location.pathname;\r\n }\r\n };\r\n\r\n // Cụm Hover menuGroup\r\n onMouseOverMenuGroupNode = (event: MouseEvent, menuNode: SdLayoutMenu): void => {\r\n const isIconFocus = this.idMenuGroupActive === menuNode?.id;\r\n if (!isIconFocus) {\r\n const menuGroup = event.currentTarget as HTMLElement;\r\n const menuGroupIcon = menuGroup.querySelector('.c-menu-group-icon') as HTMLElement;\r\n const brandLightColorOpacity = this.#convertColor(this.sidebar?.brandLightColor, 0.6);\r\n if (menuGroupIcon) {\r\n menuGroupIcon.style.transition = 'all 0.15s';\r\n menuGroupIcon.style.color = this.sidebar?.brandColor || '#2962FF';\r\n menuGroupIcon.style.backgroundColor = brandLightColorOpacity || 'rgba(248, 249, 250, 0.6)';\r\n }\r\n }\r\n };\r\n\r\n onMouseLeaveMenuGroupNode = (event: MouseEvent, menuNode: SdLayoutMenu): void => {\r\n const isIconFocus = this.idMenuGroupActive === menuNode?.id;\r\n if (!isIconFocus) {\r\n const menuGroup = event.currentTarget as HTMLElement;\r\n const menuGroupIcon = menuGroup.querySelector('.c-menu-group-icon') as HTMLElement;\r\n\r\n if (menuGroupIcon) {\r\n menuGroupIcon.style.transition = 'all 0.15s';\r\n menuGroupIcon.style.color = '#8C8C8C';\r\n menuGroupIcon.style.backgroundColor = 'transparent';\r\n }\r\n }\r\n };\r\n // End\r\n\r\n // Cụm hover menu Node\r\n onMouseOverMenuNode = (event: MouseEvent, menuItem: SdLayoutMenu): void => {\r\n const isMenuFocus = this.menuFocusPipe.transform(this.currentPath, menuItem);\r\n if (!isMenuFocus) {\r\n const menuNode = event.currentTarget as HTMLElement;\r\n const iconMenu = menuNode.querySelector('.c-menu-node-icon') as HTMLElement;\r\n const content = menuNode.querySelector('.c-menu-node-description-content') as HTMLElement;\r\n const iconExpand = menuNode.querySelector('.c-menu-node-description-icon-expand') as HTMLElement;\r\n const brandLightColorOpacity = this.#convertColor(this.sidebar?.brandLightColor, 0.6);\r\n // Menu node\r\n if (menuNode) {\r\n menuNode.style.transition = 'all 0.15s';\r\n menuNode.style.backgroundColor = brandLightColorOpacity || 'rgba(248, 249, 250, 0.6)';\r\n\r\n if (iconMenu) {\r\n iconMenu.style.transition = 'all 0.15s';\r\n iconMenu.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n\r\n if (content) {\r\n content.style.transition = 'all 0.15s';\r\n content.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n\r\n if (iconExpand) {\r\n iconExpand.style.transition = 'all 0.15s';\r\n iconExpand.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n }\r\n }\r\n };\r\n\r\n onMouseLeaveMenuNode = (event: MouseEvent, menuItem: SdLayoutMenu): void => {\r\n const isMenuFocus = this.menuFocusPipe.transform(this.currentPath, menuItem);\r\n if (!isMenuFocus) {\r\n const menuNode = event.currentTarget as HTMLElement;\r\n const iconMenu = menuNode.querySelector('.c-menu-node-icon') as HTMLElement;\r\n const content = menuNode.querySelector('.c-menu-node-description-content') as HTMLElement;\r\n const iconExpand = menuNode.querySelector('.c-menu-node-description-icon-expand') as HTMLElement;\r\n\r\n // Menu node\r\n if (menuNode) {\r\n menuNode.style.transition = 'all 0.15s';\r\n menuNode.style.backgroundColor = 'transparent';\r\n\r\n if (iconMenu) {\r\n iconMenu.style.transition = 'all 0.15s';\r\n iconMenu.style.color = '#8C8C8C';\r\n }\r\n\r\n if (content) {\r\n content.style.transition = 'all 0.15s';\r\n content.style.color = '#1F1F1F';\r\n }\r\n\r\n if (iconExpand) {\r\n content.style.transition = 'all 0.15s';\r\n iconExpand.style.color = '#8C8C8C';\r\n }\r\n }\r\n }\r\n };\r\n // End\r\n\r\n #getMenuGroupByCurrentPath = (menus: SdLayoutMenu[], menuGroup?: SdLayoutMenu): SdLayoutMenu[] => {\r\n for (const menu of menus) {\r\n const matchesPath = 'path' in menu && this.#isMenuPathMatchByCurrentPath(menu.path);\r\n if (matchesPath) {\r\n return [menuGroup ?? menu];\r\n }\r\n\r\n // Nếu không tìm thấy thì xuống children, nếu children match thì return về menuGroup\r\n if ('children' in menu && menu.children?.length) {\r\n const result = this.#getMenuGroupByCurrentPath(menu.children, menuGroup ?? menu);\r\n if (result?.length) {\r\n return result;\r\n }\r\n }\r\n }\r\n return [];\r\n };\r\n\r\n #bindingMenuGroupByCurrentPath = (menus: SdLayoutMenu[]): void => {\r\n const normalizeSearchText = this.#normalizeSearchText(this.searchText);\r\n\r\n if (!normalizeSearchText || normalizeSearchText?.length < 3) {\r\n let menuGroupByPath = this.#getMenuGroupByCurrentPath(menus);\r\n // Nếu không tìm được path nào khớp với menu thì menuGroup lấy từ thao tác cuối cùng của người dùng\r\n if (!menuGroupByPath || !menuGroupByPath?.length) {\r\n const lastActiveMenuGroupId = this.layoutStorageService.lastActiveMenuGroupId.get() || '';\r\n const lastActiveMenuGroup = this.menusOrigin?.filter(menu => menu?.id === lastActiveMenuGroupId);\r\n menuGroupByPath = lastActiveMenuGroup || [];\r\n }\r\n if (menuGroupByPath?.length) {\r\n this.idMenuGroupActive = menuGroupByPath[0]?.id;\r\n this.layoutStorageService.lastActiveMenuGroupId.set(menuGroupByPath[0]?.id || '');\r\n this.titleMenuGroup = menuGroupByPath[0]?.tooltipTitle || menuGroupByPath[0]?.title;\r\n if ('children' in menuGroupByPath[0] && menuGroupByPath[0].children?.length) {\r\n this.menusByGroup = menuGroupByPath[0].children;\r\n this.#expandParentNodesByCurrentPath(this.menusByGroup);\r\n } else {\r\n this.menusByGroup = [];\r\n }\r\n } else {\r\n this.idMenuGroupActive = '';\r\n this.titleMenuGroup = '';\r\n this.menusByGroup = [];\r\n }\r\n this.dataSource.data = this.menusByGroup;\r\n }\r\n };\r\n\r\n #expandParentNodesByCurrentPath(menus: SdLayoutMenu[]): boolean {\r\n let shouldPropagate = false;\r\n for (const menu of menus) {\r\n if ('path' in menu && this.#isMenuPathMatchByCurrentPath(menu.path)) {\r\n shouldPropagate = true;\r\n }\r\n if ('children' in menu && menu.children?.length) {\r\n const childHasMatch = this.#expandParentNodesByCurrentPath(menu.children);\r\n if (childHasMatch) {\r\n this.treeControl.expand(menu);\r\n shouldPropagate = true;\r\n }\r\n }\r\n }\r\n return shouldPropagate;\r\n }\r\n\r\n #filterMenuBySearchText = (menus: SdLayoutMenu[]): void => {\r\n const normalizeSearchText = this.#normalizeSearchText(this.searchText);\r\n\r\n // Nếu normalizeSearchText không hợp lệ thì trả về nguyên bản menus được truyền vào\r\n if (!normalizeSearchText || normalizeSearchText.length < 3) {\r\n this.dataSource.data = menus;\r\n this.#onCollapseAllMenuNodes(menus);\r\n this.#expandParentNodesByCurrentPath(menus);\r\n } else {\r\n // Nếu normalizeSearchText hợp lệ thì trả ra menu được tìm thấy và auto expand\r\n const aliasSearchText = SdUtilities.changeAliasLowerCase(normalizeSearchText);\r\n this.dataSource.data = this.#getMenuByAliasSearchText(menus, aliasSearchText);\r\n if (this.dataSource.data?.length) {\r\n this.#onExpandAllMenuNodes(this.dataSource.data);\r\n }\r\n }\r\n };\r\n\r\n #getMenuByAliasSearchText = (menus: SdLayoutMenu[], aliasSearchText: string): SdLayoutMenu[] => {\r\n const result: SdLayoutMenu[] = [];\r\n for (const menu of menus) {\r\n const aliasTitle = SdUtilities.changeAliasLowerCase(menu.title as string);\r\n const isMatched = aliasTitle.includes(aliasSearchText);\r\n\r\n // Case 1: Nếu cha khớp trả về nguyên menu cha\r\n if (isMatched) {\r\n result.push(menu);\r\n continue;\r\n }\r\n\r\n // Case 2: Nếu cha không khớp tìm xuống children\r\n let matchedChildren: SdLayoutMenu[] = [];\r\n\r\n if ('children' in menu && menu.children?.length) {\r\n matchedChildren = this.#getMenuByAliasSearchText(menu.children, aliasSearchText);\r\n }\r\n\r\n // Nếu có child khớp vẫn trả về cha nhưng chỉ gồm children đã lọc\r\n // Phục vụ cho case node con trùng tên để biết thuộc node parent nào\r\n if (matchedChildren?.length) {\r\n result.push({\r\n ...menu,\r\n children: matchedChildren,\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n #isMenuPathMatchByCurrentPath = (path: string): boolean => {\r\n if (!path) {\r\n return false;\r\n }\r\n if (this.currentPath === path) {\r\n return true;\r\n }\r\n\r\n return this.#normalizePath(this.currentPath).startsWith(this.#normalizePath(path));\r\n };\r\n\r\n #normalizePath = (p: string): string => {\r\n return p.endsWith('/') ? p : p + '/';\r\n };\r\n\r\n #closeMenu(): void {\r\n this.showSideBar.emit(null);\r\n }\r\n\r\n #convertColor = (input: string | undefined, opacity = 1): string => {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n const hexRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\r\n const rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\r\n input = input.trim();\r\n\r\n // Mã màu #HEX\r\n if (hexRegex.test(input)) {\r\n let hex = input.slice(1);\r\n\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split('')\r\n .map(c => c + c)\r\n .join('');\r\n }\r\n\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\r\n }\r\n // End\r\n\r\n // Màu RGB\r\n const rgbMatch = input.match(rgbRegex);\r\n if (rgbMatch) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [_, r, g, b] = rgbMatch;\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\r\n }\r\n // End\r\n\r\n return input;\r\n };\r\n\r\n #normalizeSearchText = (searchText: string) => {\r\n let str: string = searchText?.toString() ?? '';\r\n /* eslint-disable no-useless-escape */\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, '');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n };\r\n}\r\n","@if (sidebar) {\r\n <div class=\"wrapper\" [style.height]=\"isMobileOrTablet ? screenHeight + 'px' : '100%'\">\r\n <div class=\"c-header\">\r\n @if (sidebar.logoUrl) {\r\n <div class=\"c-logo\">\r\n <a href=\"javascript:;\" (click)=\"openHomePage()\">\r\n <img alt=\"logo\" [src]=\"sidebar.logoUrl\" />\r\n </a>\r\n </div>\r\n }\r\n <div class=\"c-title-menu-group\">\r\n <span>{{ titleMenuGroup || sidebar.defaultTitle || 'Back Office' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"c-body\">\r\n <div class=\"c-menu\">\r\n <!-- Icon menu-group -->\r\n <div class=\"c-menu-group\">\r\n @for (nodeMenuGroup of menusOrigin; track nodeMenuGroup.id) {\r\n <button\r\n (mouseenter)=\"onMouseOverMenuGroupNode($event, nodeMenuGroup)\"\r\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, nodeMenuGroup)\"\r\n (click)=\"expandMenuGroup(nodeMenuGroup)\"\r\n [matTooltip]=\"nodeMenuGroup.tooltipTitle || nodeMenuGroup.title\"\r\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\r\n [matTooltipPosition]=\"'right'\"\r\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\r\n <mat-icon\r\n class=\"c-menu-group-icon\"\r\n [ngStyle]=\"{\r\n color: idMenuGroupActive === nodeMenuGroup?.id ? sidebar.brandColor || '#2962FF' : '#8C8C8C',\r\n backgroundColor: idMenuGroupActive === nodeMenuGroup?.id ? sidebar.brandLightColor || '#F8F9FA' : 'transparent',\r\n }\">\r\n {{ nodeMenuGroup.icon }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <!-- End -->\r\n\r\n <!-- Giá trị menu-group -->\r\n <div class=\"c-menu-tree\">\r\n @if (menusByGroup?.length) {\r\n <div style=\"padding: 0px 4px\" class=\"c-menu-tree-search\">\r\n <sd-input size=\"sm\" placeholder=\"Tìm kiếm\" [model]=\"searchText\" (sdChange)=\"onFilterSearchText($event)\">\r\n <ng-template sdSuffixDef>\r\n @if (searchText) {\r\n <mat-icon class=\"c-search-prefix-icon cancel\" (click)=\"onClearSearchText()\">cancel</mat-icon>\r\n } @else {\r\n <mat-icon class=\"c-search-prefix-icon search\">search</mat-icon>\r\n }\r\n </ng-template>\r\n </sd-input>\r\n </div>\r\n }\r\n <div class=\"c-menu-tree-container\">\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" [style.backgroundColor]=\"'transparent'\">\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: !hasChild\">\r\n <li\r\n class=\"c-menu-node\"\r\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\r\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\"\r\n [ngStyle]=\"{\r\n backgroundColor: (currentPath | menuFocus: node) ? sidebar.brandLightColor || '#F8F9FA' : 'transparent',\r\n }\">\r\n <div aria-hidden=\"true\" class=\"c-menu-node-description\" (click)=\"navigate(node)\" [class.d-none]=\"!isShowSidebar\">\r\n <div\r\n class=\"c-menu-node-description-content\"\r\n [ngStyle]=\"{\r\n color: (currentPath | menuFocus: node) ? sidebar.brandColor || '#2962FF' : '#1F1F1F',\r\n }\"\r\n [innerHTML]=\"node.title | highLightSearch: searchText | sdSafeHtml\"></div>\r\n </div>\r\n </li>\r\n </mat-nested-tree-node>\r\n\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n aria-hidden=\"true\"\r\n [class]=\"{ expanded: treeControl.isExpanded(node), isfocus: currentPath | menuFocus: node }\">\r\n <li>\r\n <div\r\n class=\"c-menu-node\"\r\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\r\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\">\r\n <div class=\"d-flex align-items-center\" style=\"gap: 10px; width: 100%\">\r\n <div [class.d-none]=\"!isShowSidebar\" class=\"c-menu-node-description\" (click)=\"onToggleMenuNode(node)\">\r\n <div\r\n class=\"c-menu-node-description-content\"\r\n [innerHTML]=\"node.title | highLightSearch: searchText | sdSafeHtml\"></div>\r\n <mat-icon class=\"c-menu-node-description-icon-expand\">\r\n {{ treeControl.isExpanded(node) ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"p-0\" [class.d-none]=\"!treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </li>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n <!-- End -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-footer\">\r\n <lib-layout-user\r\n [isMobileOrTablet]=\"isMobileOrTablet\"\r\n (menuOpened)=\"onUserMenuOpened()\"\r\n (menuClosed)=\"onUserMenuClosed()\"\r\n [isShowSidebar]=\"isShowSidebar\"\r\n (toggleMenuLock)=\"toggleMenuLock($event)\">\r\n </lib-layout-user>\r\n </div>\r\n\r\n <div class=\"c-vertical\"></div>\r\n </div>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService, SdLayoutMenu } from '../../services';\r\nimport { LayoutSidebarComponent } from './components/sidebar/sidebar.component';\r\n// End\r\n\r\n@Component({\r\n selector: 'lib-layout-sidebar-main-v1',\r\n templateUrl: './main.component.html',\r\n styleUrls: ['./main.component.scss'],\r\n imports: [MatSidenavModule, CommonModule, LayoutSidebarComponent],\r\n})\r\nexport class LayoutSideBarMainV1Component {\r\n constructor(private layoutStorageService: SdLayoutStorageService) {\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.isShowSidebar = !this.isMobileOrTablet;\r\n this.isShowSidebar = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.isMenuLock = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n\r\n @ViewChild('sidenav') sidenav!: MatSidenav;\r\n @Input() menus: SdLayoutMenu[] = [];\r\n\r\n onhover = false;\r\n isMenuLock = false;\r\n isShowSidebar = true;\r\n isMobileOrTablet = false;\r\n timerMouseInMenu: ReturnType<typeof setTimeout> | null = null;\r\n timerMouseOutMenu: ReturnType<typeof setTimeout> | null = null;\r\n\r\n #mouseLeave = (): void => {\r\n if (this.timerMouseInMenu) {\r\n clearTimeout(this.timerMouseInMenu);\r\n }\r\n\r\n if (this.onhover && this.isShowSidebar) {\r\n this.isShowSidebar = false;\r\n this.onhover = false;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n #handleMouseLeaveTransition = (): void => {\r\n if (!this.isShowSidebar) {\r\n const delayTime = 400;\r\n if (this.timerMouseInMenu) {\r\n clearTimeout(this.timerMouseInMenu);\r\n }\r\n this.timerMouseOutMenu = setTimeout(() => {\r\n this.#mouseLeave();\r\n }, delayTime);\r\n } else {\r\n this.#mouseLeave();\r\n }\r\n };\r\n\r\n openSidebar = (): void => {\r\n if (!this.isMobileOrTablet) {\r\n return;\r\n }\r\n\r\n if (!this.isShowSidebar) {\r\n this.isShowSidebar = true;\r\n this.onhover = true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n onPopupOfSideBarOpened = (): void => {\r\n this.onhover = false;\r\n this.isShowSidebar = true;\r\n };\r\n\r\n onPopupOfSideBarClosed = (): void => {\r\n const delayTime = 500;\r\n if (!this.isMenuLock) {\r\n this.onhover = true;\r\n this.timerMouseOutMenu = setTimeout(() => {\r\n this.#mouseLeave();\r\n }, delayTime);\r\n }\r\n };\r\n\r\n onExpandSideBar = (): void => {\r\n if (this.isMobileOrTablet) {\r\n return;\r\n }\r\n if (!this.isShowSidebar) {\r\n this.isShowSidebar = true;\r\n this.onhover = true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n onMouseleaveSideBar = (): void => {\r\n if (this.isMobileOrTablet) {\r\n return;\r\n }\r\n this.#mouseLeave();\r\n };\r\n\r\n onToggle = (data: boolean | null) => {\r\n if (data === null) {\r\n this.#handleMouseLeaveTransition();\r\n } else {\r\n this.#mouseLeave();\r\n this.isShowSidebar = data;\r\n this.isMenuLock = data;\r\n this.sidenav.toggle(this.isShowSidebar);\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n}\r\n","<mat-sidenav-container class=\"c-layout-wrapper\">\r\n <mat-sidenav\r\n #sidenav\r\n [(opened)]=\"isShowSidebar\"\r\n class=\"c-layout-sidebar\"\r\n (click)=\"openSidebar()\"\r\n (mouseleave)=\"onMouseleaveSideBar()\"\r\n [mode]=\"isMobileOrTablet ? 'over' : 'side'\"\r\n [fixedInViewport]=\"isMobileOrTablet\">\r\n <lib-layout-sidebar\r\n [menus]=\"menus\"\r\n [isShowSidebar]=\"isShowSidebar\"\r\n (showSideBar)=\"onToggle($event)\"\r\n (expandSideBar)=\"onExpandSideBar()\"\r\n (popupUserMenuOpened)=\"onPopupOfSideBarOpened()\"\r\n (popupUserMenuClosed)=\"onPopupOfSideBarClosed()\">\r\n </lib-layout-sidebar>\r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content class=\"c-layout-content\" [class.isShowSidebar]=\"isMenuLock\">\r\n <mat-drawer-container class=\"c-mat-drawer-container\">\r\n <mat-drawer-content>\r\n <ng-content></ng-content>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>\r\n","import { Component, Inject, Input, OnInit } from '@angular/core';\r\n\r\n// Import nội bộ trong module layout\r\nimport { SdLayoutMenu } from '../../services';\r\nimport { MenuPipe } from '../../pipes';\r\nimport { LayoutSideBarMainV1Component } from '../sidebar-v1/main.component';\r\nimport { ISdLayoutConfiguration, ISdSidebarConfiguration, ISidebarConfigurationV1, SD_LAYOUT_CONFIGURATION } from '../../configurations';\r\n// End\r\n\r\n@Component({\r\n selector: 'sd-layout',\r\n templateUrl: './layout-main.component.html',\r\n styleUrls: ['./layout-main.component.scss'],\r\n imports: [LayoutSideBarMainV1Component],\r\n})\r\nexport class SdLayoutComponent implements OnInit {\r\n constructor(\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfig: ISdLayoutConfiguration,\r\n private menuPipe: MenuPipe\r\n ) {}\r\n\r\n menus: SdLayoutMenu[] = [];\r\n @Input('menus') set _menus(menus: SdLayoutMenu[]) {\r\n this.menus = this.menuPipe.transform(menus || []);\r\n }\r\n\r\n sidebarConfiguration!: ISdSidebarConfiguration; // Config các version của sidebar sẽ được inject theo portal\r\n\r\n async ngOnInit() {\r\n if (typeof this.layoutConfig.sidebar === 'function') {\r\n this.sidebarConfiguration = await this.layoutConfig.sidebar();\r\n } else {\r\n this.sidebarConfiguration = this.layoutConfig.sidebar;\r\n }\r\n }\r\n}\r\n","@let sidebarVersion = sidebarConfiguration?.version;\r\n\r\n@if (sidebarVersion === 1) {\r\n <lib-layout-sidebar-main-v1 [menus]=\"menus\">\r\n <ng-content></ng-content>\r\n </lib-layout-sidebar-main-v1>\r\n}","import { Component } from '@angular/core';\r\nimport { SdTabComponent } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n selector: 'app-home-page',\r\n imports: [SdPageComponent],\r\n templateUrl: './home-page.component.html',\r\n styleUrls: ['./home-page.component.scss'],\r\n standalone: true,\r\n})\r\n@SdTabComponent({\r\n component: HomePageComponent,\r\n name: 'Trang chủ',\r\n icon: 'home',\r\n color: 'primary',\r\n})\r\nexport class HomePageComponent {\r\n fullName = '';\r\n constructor(private layoutStorageService: SdLayoutStorageService) {\r\n this.fullName = this.layoutStorageService.fullName.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTimezone() {\r\n const now = new Date();\r\n const timezoneOffset = now.getTimezoneOffset();\r\n const offsetHours = -timezoneOffset / 60;\r\n const sign = offsetHours >= 0 ? '+' : '';\r\n const simpleGmtString = `GMT${sign}${offsetHours}`;\r\n return simpleGmtString;\r\n }\r\n\r\n #getTodayInfo(date: Date) {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })} (${this.#getTimezone()})`;\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ fullName }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n <div class=\"wrapper\">\r\n <img alt=\"welcome-photo\" class=\"welcome-image\" />\r\n <span class=\"first-line\">Chúc bạn một ngày làm việc</span>\r\n <span class=\"second-line\">tràn đầy năng lượng & hiệu quả!</span>\r\n </div>\r\n</sd-page>\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { CanActivate, Router } from '@angular/router';\r\n\r\n// Giả sử bạn có một service để đọc config\r\nimport { ISdLayoutConfiguration, SD_LAYOUT_CONFIGURATION } from '../../../configurations';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HomeRedirectGuard implements CanActivate {\r\n constructor(\r\n private router: Router,\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfiguration: ISdLayoutConfiguration\r\n ) {}\r\n\r\n async canActivate() {\r\n const homeUrl = this.layoutConfiguration?.homeUrl;\r\n if (homeUrl) {\r\n // Nếu có config homeUrl, tạo một UrlTree để redirect\r\n // Đây là cách redirect chính thống từ trong guard\r\n return this.router.createUrlTree([homeUrl]);\r\n }\r\n // Nếu không có homeUrl, cho phép kích hoạt route\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { HomePageComponent } from './components/home-page/home-page.component';\r\nimport { HomeRedirectGuard } from './guards/home-redirect.guard';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n canActivate: [HomeRedirectGuard],\r\n component: HomePageComponent,\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class HomeRoutingModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HomeRoutingModule } from './home.routing';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [CommonModule, HomeRoutingModule],\r\n})\r\nexport class HomeModule {}\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SdButton } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n templateUrl: './root.component.html',\r\n styleUrls: ['./root.component.scss'],\r\n imports: [SdButton, SdPageComponent],\r\n})\r\nexport class RootComponent {\r\n url: string;\r\n email: string;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.url = this.route.snapshot.queryParams?.['url'];\r\n this.email = this.layoutStorageService.email.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTodayInfo(date: Date): string {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })}`;\r\n }\r\n\r\n reload() {\r\n window.location.href = '';\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ email }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n <div class=\"h-full d-flex flex-column align-items-center\">\r\n <div class=\"h-full d-flex flex-column align-items-center justify-content-center text-center wrapper\">\r\n <img alt=\"error-image\" class=\"error-image\" />\r\n <span class=\"T16M mt-24\">404 - Trang không tồn tại</span>\r\n <span class=\"T16R text-secondary mt-4\">\r\n Trang bạn tìm không tồn tại hoặc đã bị xóa. Vui lòng kiểm tra lại địa chỉ URL hoặc quay lại trang chủ để tiếp tục.\r\n </span>\r\n <sd-button class=\"mt-16\" type=\"fill\" color=\"primary\" (click)=\"reload()\" title=\"Quay trở lại\" prefixIcon=\"arrow_back\"> </sd-button>\r\n </div>\r\n </div>\r\n</sd-page>\r\n","import { Route } from '@angular/router';\r\nimport { RootComponent } from './pages/root/root.component';\r\n\r\nexport const Routes: Route[] = [{ path: '', component: RootComponent }];\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './not-found.routing';\r\n\r\n@NgModule({\r\n imports: [CommonModule, RouterModule.forChild(Routes)],\r\n exports: [],\r\n})\r\nexport class NotFoundModule {}\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SdButton } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n templateUrl: './root.component.html',\r\n styleUrls: ['./root.component.scss'],\r\n imports: [SdButton, SdPageComponent],\r\n})\r\nexport class RootComponent {\r\n url: string;\r\n email: string;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.url = this.route.snapshot.queryParams?.['url'];\r\n this.email = this.layoutStorageService.email.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTodayInfo(date: Date): string {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })}`;\r\n }\r\n\r\n reload() {\r\n window.location.href = '';\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ email }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n\r\n <div class=\"h-full d-flex flex-column align-items-center\">\r\n <div class=\"h-full d-flex flex-column align-items-center justify-content-center text-center wrapper\">\r\n <img alt=\"error-image\" class=\"error-image\" />\r\n <span class=\"T16M mt-24\">Không được phép truy cập</span>\r\n <span class=\"T14R text-secondary mt-4\"\r\n >Bạn không có quyền truy cập vào trang này. Liên hệ với quản trị viên hoặc quay lại trang chủ</span\r\n >\r\n <sd-button class=\"mt-16\" type=\"fill\" color=\"primary\" (click)=\"reload()\" title=\"Quay lại trang chủ\"> </sd-button>\r\n </div>\r\n </div>\r\n</sd-page>\r\n","import { Route } from '@angular/router';\r\nimport { RootComponent } from './pages/root/root.component';\r\n\r\nexport const Routes: Route[] = [{ path: '', component: RootComponent }];\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './forbidden.routing';\r\n\r\n@NgModule({\r\n imports: [CommonModule, RouterModule.forChild(Routes)],\r\n exports: [],\r\n})\r\nexport class ForbiddenModule {}\r\n","import { Route } from '@angular/router';\r\n\r\nexport const Routes: Route[] = [\r\n {\r\n path: '',\r\n pathMatch: 'full',\r\n redirectTo: 'not-found',\r\n },\r\n {\r\n path: 'home',\r\n loadChildren: () => import('./modules/home').then(m => m.HomeModule),\r\n },\r\n {\r\n path: 'not-found',\r\n loadChildren: () => import('./modules/not-found').then(m => m.NotFoundModule),\r\n },\r\n {\r\n path: 'forbidden',\r\n loadChildren: () => import('./modules/forbidden').then(m => m.ForbiddenModule),\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './layout.routing';\r\n@NgModule({\r\n declarations: [],\r\n imports: [RouterModule.forChild(Routes)],\r\n providers: [],\r\n})\r\nexport class SdLayoutModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.SdLayoutStorageService","i2.SdLayoutStorageService","i3.MenuFocusPipe","i4","i5","i2","i1.MenuPipe","RootComponent","Routes"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-modules-layout.mjs","sources":["../../../projects/sd-angular/modules/layout/components/page/page.component.ts","../../../projects/sd-angular/modules/layout/components/page/page.component.html","../../../projects/sd-angular/modules/layout/pipes/menu.pipe.ts","../../../projects/sd-angular/modules/layout/pipes/menu-focus.pipe.ts","../../../projects/sd-angular/modules/layout/pipes/high-light-search.pipe.ts","../../../projects/sd-angular/modules/layout/configurations/layout.configuration.ts","../../../projects/sd-angular/modules/layout/services/storage/storage.service.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/user/user.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/user/user.component.html","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.html","../../../projects/sd-angular/modules/layout/components/sidebar-v1/main.component.ts","../../../projects/sd-angular/modules/layout/components/sidebar-v1/main.component.html","../../../projects/sd-angular/modules/layout/components/layout-main/layout-main.component.ts","../../../projects/sd-angular/modules/layout/components/layout-main/layout-main.component.html","../../../projects/sd-angular/modules/layout/modules/home/components/home-page/home-page.component.ts","../../../projects/sd-angular/modules/layout/modules/home/components/home-page/home-page.component.html","../../../projects/sd-angular/modules/layout/modules/home/guards/home-redirect.guard.ts","../../../projects/sd-angular/modules/layout/modules/home/home.routing.ts","../../../projects/sd-angular/modules/layout/modules/home/home.module.ts","../../../projects/sd-angular/modules/layout/modules/not-found/pages/root/root.component.ts","../../../projects/sd-angular/modules/layout/modules/not-found/pages/root/root.component.html","../../../projects/sd-angular/modules/layout/modules/not-found/not-found.routing.ts","../../../projects/sd-angular/modules/layout/modules/not-found/not-found.module.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/pages/root/root.component.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/pages/root/root.component.html","../../../projects/sd-angular/modules/layout/modules/forbidden/forbidden.routing.ts","../../../projects/sd-angular/modules/layout/modules/forbidden/forbidden.module.ts","../../../projects/sd-angular/modules/layout/layout.routing.ts","../../../projects/sd-angular/modules/layout/layout.module.ts","../../../projects/sd-angular/modules/layout/sd-angular-core-modules-layout.ts"],"sourcesContent":["import { Component, ElementRef, Input } from '@angular/core';\r\n@Component({\r\n selector: 'sd-page',\r\n templateUrl: './page.component.html',\r\n styleUrls: ['./page.component.scss'],\r\n})\r\nexport class SdPageComponent {\r\n\r\n title?: string;\r\n @Input('title') set _title(val: string | undefined | null) {\r\n this.title = val || '';\r\n this.el.nativeElement.removeAttribute('title');\r\n }\r\n\r\n noHeader?: boolean;\r\n @Input('noHeader') set _noHeader(val: boolean | '' | undefined | null) {\r\n this.noHeader = val === '' || !!val;\r\n }\r\n constructor(private el: ElementRef) {}\r\n}\r\n","@if (!noHeader) {\r\n <div class=\"c-page-header bg-white\">\r\n <div class=\"p-16 d-flex align-items-center w-full justify-content-between\">\r\n <div class=\"d-flex\">\r\n <ng-content select=\"[headerLeft]\">\r\n <h4 class=\"font-weight-medium\">{{ title }}</h4>\r\n </ng-content>\r\n </div>\r\n <ng-content select=\"[headerRight]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n\r\n<div class=\"c-page-wrapper px-0\">\r\n <div class=\"c-page-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n","import * as uuid from 'uuid';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutMenu, Menus } from '../services/menu/menu.model';\r\nimport { Params } from '@angular/router';\r\nimport { SdPermissionService } from '@sd-angular/core/modules/permission';\r\n// End\r\n@Pipe({\r\n name: 'menu',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MenuPipe implements PipeTransform {\r\n constructor(private permissionService: SdPermissionService) {}\r\n transform(menus: SdLayoutMenu[]): SdLayoutMenu[] {\r\n const results: Menus = [];\r\n const check = (menu: SdLayoutMenu): SdLayoutMenu | null => {\r\n if ('children' in menu) {\r\n const children: Menus = [];\r\n menu.children?.forEach(childMenu => {\r\n childMenu = check(childMenu) as SdLayoutMenu;\r\n if (childMenu) {\r\n children.push({ ...childMenu, id: this.#getHashIdMenu(childMenu) });\r\n }\r\n });\r\n\r\n if (!children.length) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...menu,\r\n children,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if ('permission' in menu) {\r\n const path = menu?.path?.includes('http') ? menu.path : menu.path;\r\n if (!menu.path) {\r\n return null;\r\n }\r\n\r\n if (\r\n (typeof menu.permission === 'string' || Array.isArray(menu.permission)) &&\r\n this.permissionService.hasPermission(menu.permission)\r\n ) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if (typeof menu.permission === 'boolean' && menu.permission) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n if (typeof menu.permission === 'function' && menu.permission()) {\r\n return {\r\n ...menu,\r\n path,\r\n id: this.#getHashIdMenu(menu),\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n return {\r\n ...menu,\r\n id: uuid.v4(),\r\n };\r\n };\r\n\r\n menus?.forEach(menu => {\r\n menu = check(menu) as SdLayoutMenu;\r\n if (menu) {\r\n results.push(menu);\r\n }\r\n });\r\n return results;\r\n }\r\n\r\n #getHashIdMenu = (menu: SdLayoutMenu): string => {\r\n const extendedMenu = menu as SdLayoutMenu & { path?: string; permission?: string; queryParams?: Params };\r\n const hashKeys: (keyof typeof extendedMenu)[] = ['title', 'path', 'permission', 'queryParams', 'icon', 'level', 'tooltipTitle'];\r\n const hashData = hashKeys.reduce(\r\n (acc, key) => {\r\n const value = extendedMenu[key];\r\n if (value !== undefined && value !== null) {\r\n acc[key as string] = value;\r\n }\r\n return acc;\r\n },\r\n {} as Record<string, any>\r\n );\r\n\r\n return Object.keys(hashData).length > 0 ? SdUtilities.hash(hashData) : uuid.v4();\r\n };\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutMenu } from '../services';\r\n// End\r\n@Pipe({\r\n name: 'menuFocus',\r\n})\r\n@Injectable({ providedIn: 'root' })\r\nexport class MenuFocusPipe implements PipeTransform {\r\n transform(routePath: string, menuItem: SdLayoutMenu): boolean {\r\n if (!routePath) {\r\n return false;\r\n }\r\n if ('children' in menuItem && menuItem.children) {\r\n return menuItem.children.some(child => {\r\n return 'path' in child && child.path ? this.#match(routePath, child.path) : false;\r\n });\r\n }\r\n return 'path' in menuItem && this.#match(routePath, menuItem.path);\r\n }\r\n\r\n #match = (routePath: string, path: string): boolean => {\r\n if (!path) {\r\n return false;\r\n }\r\n if (routePath === path) {\r\n return true;\r\n }\r\n return this.#normalizePath(routePath).startsWith(this.#normalizePath(path));\r\n };\r\n\r\n #normalizePath = (p: string): string => {\r\n return p.endsWith('/') ? p : p + '/';\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Pipe({\r\n name: 'highLightSearch',\r\n})\r\nexport class HighlightSearchPipe implements PipeTransform {\r\n transform(\r\n value: string,\r\n keyword: string,\r\n agrs?: {\r\n color?: string;\r\n }\r\n ): string {\r\n const { color = '#ffff00' } = agrs ?? {};\r\n keyword = this.#normalizeValue(keyword);\r\n if (!keyword || keyword.length < 3) {\r\n return value;\r\n }\r\n value = value?.trim() || '';\r\n const regex = new RegExp(SdUtilities.changeAliasLowerCase(keyword), 'gi'); //'gi' for case insensitive and can use 'g' if you want the search to be case sensitive.\r\n const aliasLowerCaseStr = SdUtilities.changeAliasLowerCase(value);\r\n const strs: string[] = [];\r\n let previousOffset = 0;\r\n aliasLowerCaseStr.replace(regex, (_, offset) => {\r\n strs.push(value.substring(previousOffset, offset));\r\n strs.push(`<mark style=\"background-color: ${color}\">${value.substring(offset, offset + keyword.length)}</mark>`);\r\n previousOffset = offset + keyword.length;\r\n return `<mark style=\"background-color: ${color}\">${value.substring(offset, offset + keyword.length)}</mark>`;\r\n });\r\n strs.push(value.substring(previousOffset, value.length));\r\n return strs.join('');\r\n }\r\n\r\n #normalizeValue = (keyword: string) => {\r\n let str: string = keyword?.toString() ?? '';\r\n /* eslint-disable no-useless-escape */\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, '');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n };\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nexport interface ISdLayoutConfiguration {\r\n homeUrl?: string;\r\n sidebar: ISdSidebarConfiguration | (() => ISdSidebarConfiguration | Promise<ISdSidebarConfiguration>);\r\n signout: () => void | Promise<void>;\r\n changePassword?: () => void | Promise<void>;\r\n}\r\n\r\nexport type ISdSidebarConfiguration = ISidebarConfigurationV1;\r\n\r\nexport interface ISidebarConfigurationV1 {\r\n version: 1;\r\n brandColor?: string; // Nên sử dụng mã màu #HEX, rgb - để có hiệu ứng opacity khi hover\r\n brandLightColor?: string; // Nên sử dụng mã màu #HEX, rgb - để có hiệu ứng opacity khi hover\r\n logoUrl?: string;\r\n defaultTitle?: string;\r\n}\r\n\r\nexport const SD_LAYOUT_CONFIGURATION = new InjectionToken<ISdLayoutConfiguration>('sd.layout.configuration');\r\n","import { Injectable } from '@angular/core';\r\nimport { SdStorage, SdStorageService } from '@sd-angular/core/services';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdLayoutStorageService {\r\n // Thông tin của user\r\n email: SdStorage<string>;\r\n username: SdStorage<string>;\r\n fullName: SdStorage<string>;\r\n // End\r\n\r\n // Thông tin state của sidebar\r\n isShowSidebar: SdStorage<boolean>;\r\n menuLockStatus: SdStorage<boolean>;\r\n lastActiveMenuGroupId: SdStorage<string>;\r\n // End\r\n\r\n constructor(private sdStorageService: SdStorageService) {\r\n // User\r\n this.email = this.sdStorageService.create('38476432-958f-45d3-b94c-931f144c1255');\r\n this.username = this.sdStorageService.create('e0f30fa2-d96c-49b1-ac43-75215f991af6');\r\n this.fullName = this.sdStorageService.create('60676f2a-78e2-432f-a921-49af351d138a');\r\n // End\r\n\r\n // State sidebar\r\n this.isShowSidebar = this.sdStorageService.create('cb07c316-ed6d-4620-9e92-53dbef6aa983');\r\n this.menuLockStatus = this.sdStorageService.create('2c2f4816-18b3-4ec3-8177-7b90bff036c3');\r\n this.lastActiveMenuGroupId = this.sdStorageService.create('2e6961d0-3380-4a94-a6a1-38837560cd96');\r\n // End\r\n }\r\n}\r\n","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService } from '../../../../services';\r\nimport { ISdLayoutConfiguration, SD_LAYOUT_CONFIGURATION } from '../../../../configurations';\r\n// End\r\n@Component({\r\n selector: 'lib-layout-user',\r\n templateUrl: './user.component.html',\r\n styleUrls: ['./user.component.scss'],\r\n imports: [MatMenuModule, MatButtonModule, MatIconModule, MatTooltipModule],\r\n})\r\nexport class LayoutUserComponent {\r\n @Input() isMobileOrTablet!: boolean;\r\n @Input() isMenuLock!: boolean;\r\n @Input() isShowSidebar!: boolean;\r\n\r\n @Output() menuClosed = new EventEmitter<boolean>();\r\n @Output() menuOpened = new EventEmitter<boolean>();\r\n @Output() toggleMenuLock = new EventEmitter<Event>();\r\n\r\n // Public\r\n email: string;\r\n username: string;\r\n fullName: string;\r\n singoutLayoutConfig!: () => void | Promise<void>;\r\n changePasswordLayoutConfig?: () => void | Promise<void>;\r\n // End\r\n\r\n constructor(\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfig: ISdLayoutConfiguration,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.email = this.layoutStorageService.email.get() || '';\r\n this.username = this.layoutStorageService.username.get() || '';\r\n this.fullName = this.layoutStorageService.fullName.get() || '';\r\n \r\n this.singoutLayoutConfig = this.layoutConfig.signout;\r\n this.changePasswordLayoutConfig = this.layoutConfig?.changePassword;\r\n }\r\n\r\n onMenuOpened = (): void => {\r\n this.menuOpened.emit();\r\n };\r\n onMenuClosed = (): void => {\r\n this.menuClosed.emit();\r\n };\r\n\r\n keepOpenWhenClickInsideMenu = (event: Event): void => {\r\n event.stopPropagation();\r\n };\r\n\r\n logout = (): void => {\r\n this.singoutLayoutConfig();\r\n };\r\n\r\n changePassword = (): void => {\r\n this.changePasswordLayoutConfig && this.changePasswordLayoutConfig();\r\n };\r\n\r\n onToggleMenuLock = (event: Event): void => {\r\n this.toggleMenuLock.emit(event);\r\n };\r\n}\r\n","<div class=\"c-layout-user-wrapper\">\r\n <div class=\"c-layout-user-avatar\" [matMenuTriggerFor]=\"userMenu\" (menuClosed)=\"onMenuClosed()\" (menuOpened)=\"onMenuOpened()\">\r\n <img alt=\"avatar\" class=\"c-avatar\" />\r\n </div>\r\n\r\n @if (!isMobileOrTablet) {\r\n <div aria-hidden=\"true\" mat-mini-fab class=\"c-layout-icon-toggle\" (click)=\"onToggleMenuLock($event)\">\r\n <mat-icon style=\"color: #8c8c8c\"> {{ isShowSidebar ? 'keyboard_arrow_right' : 'keyboard_arrow_left' }}</mat-icon>\r\n </div>\r\n }\r\n</div>\r\n\r\n<!-- Popup thông tin User -->\r\n<mat-menu #userMenu=\"matMenu\" xPosition=\"before\" backdropClass=\"c-user-menu-backdrop-f90ce131-fa4c-4f71-a49b-ab7fa374fdd0\">\r\n <div aria-hidden=\"true\" class=\"c-user-menu-wrapper\" (click)=\"keepOpenWhenClickInsideMenu($event)\">\r\n <div class=\"c-user-info-wrapper\">\r\n <div class=\"c-user-avatar\">\r\n <img alt=\"avatar\" class=\"c-avatar\" />\r\n </div>\r\n <span class=\"c-user-name\">{{ fullName || username }}</span>\r\n <span class=\"c-user-email\">{{ email }}</span>\r\n </div>\r\n\r\n @if (changePasswordLayoutConfig) {\r\n <div class=\"c-sign-button-wrapper\">\r\n <button class=\"c-account-options\" (click)=\"changePassword()\">\r\n <img alt=\"lock\" />\r\n <span>Đổi mật khẩu</span>\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"c-sign-button-wrapper\">\r\n <button class=\"c-sign-button\" mat-flat-button (click)=\"logout()\">Đăng xuất</button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n<!-- End -->\r\n","import { Subscription } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NestedTreeControl } from '@angular/cdk/tree';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdInput, SdSuffixDefDirective } from '@sd-angular/core/forms';\r\nimport { NavigationEnd, Params, Router, RouterModule } from '@angular/router';\r\nimport { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\r\nimport { Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService, SdLayoutMenu } from '../../../../services';\r\nimport { HighlightSearchPipe, MenuFocusPipe } from '../../../../pipes';\r\nimport { ISdLayoutConfiguration, ISidebarConfigurationV1, SD_LAYOUT_CONFIGURATION } from '../../../../configurations';\r\nimport { LayoutUserComponent } from '../user/user.component';\r\n// End\r\n\r\n@Component({\r\n selector: 'lib-layout-sidebar',\r\n standalone: true,\r\n imports: [\r\n SdInput,\r\n FormsModule,\r\n CommonModule,\r\n RouterModule,\r\n MatIconModule,\r\n MatTreeModule,\r\n SdSafeHtmlPipe,\r\n MatInputModule,\r\n MenuFocusPipe,\r\n MatTooltipModule,\r\n HighlightSearchPipe,\r\n SdSuffixDefDirective,\r\n LayoutUserComponent,\r\n ],\r\n templateUrl: './sidebar.component.html',\r\n styleUrl: './sidebar.component.scss',\r\n})\r\nexport class LayoutSidebarComponent implements OnDestroy, OnInit {\r\n @Input() isShowSidebar!: boolean;\r\n @Input('menus') set _menus(menus: SdLayoutMenu[]) {\r\n this.menusOrigin = menus;\r\n this.currentPath = window.location.pathname;\r\n const lastActiveMenuGroupId = this.layoutStorageService.lastActiveMenuGroupId.get();\r\n // Lần đầu tiên vào trang web, nếu user chưa thao tác gì sẽ mặc định hiện menuGroup đầu tiên\r\n if (!lastActiveMenuGroupId) {\r\n this.layoutStorageService.lastActiveMenuGroupId.set(this.menusOrigin?.[0]?.id ?? '');\r\n }\r\n this.#bindingMenuGroupByCurrentPath(this.menusOrigin);\r\n }\r\n\r\n @Output() expandSideBar = new EventEmitter<void>();\r\n @Output() popupUserMenuClosed = new EventEmitter<void>();\r\n @Output() popupUserMenuOpened = new EventEmitter<void>();\r\n @Output() showSideBar = new EventEmitter<boolean | null>();\r\n\r\n // Private\r\n #subscription: Subscription;\r\n // End\r\n\r\n // Lưu ý khi sử dụng biến này\r\n menusOrigin: SdLayoutMenu[] = []; // Không được thay đổi mảng này trực tiếp (không push/splice...)\r\n // Dữ liệu menus này do dev khai báo bên ngoài, khi cần biến này để xử lý logic thì clone hoặc return về mảng khác.\r\n\r\n // Public\r\n screenHeight = 0;\r\n searchText!: string;\r\n isMenuLock: boolean;\r\n currentPath!: string;\r\n titleMenuGroup!: string | undefined;\r\n isMobileOrTablet = false;\r\n sidebar!: ISidebarConfigurationV1;\r\n dataSource = new MatTreeNestedDataSource<SdLayoutMenu>();\r\n idMenuGroupActive!: string | undefined; // Id menu-group đang đc active\r\n menusByGroup: SdLayoutMenu[] = []; // data menus-group được active\r\n treeControl = new NestedTreeControl<SdLayoutMenu>(node => ('children' in node && node.children?.length ? node.children : []));\r\n // End\r\n\r\n constructor(\r\n private router: Router,\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfiguration: ISdLayoutConfiguration,\r\n private layoutStorageService: SdLayoutStorageService,\r\n private menuFocusPipe: MenuFocusPipe\r\n ) {\r\n this.screenHeight = window.innerHeight;\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.isMenuLock = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.#subscription = this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n if (this.currentPath !== window.location.pathname) {\r\n this.currentPath = window.location.pathname;\r\n this.#bindingMenuGroupByCurrentPath(this.menusOrigin);\r\n }\r\n }\r\n });\r\n }\r\n\r\n async ngOnInit(): Promise<void> {\r\n if (typeof this.layoutConfiguration.sidebar === 'function') {\r\n this.sidebar = (await this.layoutConfiguration.sidebar()) as ISidebarConfigurationV1;\r\n } else {\r\n this.sidebar = this.layoutConfiguration.sidebar as ISidebarConfigurationV1;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n hasChild = (_: number, node: SdLayoutMenu): boolean => 'children' in node && !!node.children?.length;\r\n\r\n onToggleMenuNode = (menu: SdLayoutMenu): void => {\r\n this.treeControl.toggle(menu);\r\n };\r\n\r\n #onExpandAllMenuNodes = (menus: SdLayoutMenu[]): void => {\r\n menus?.forEach(menu => {\r\n this.treeControl.expand(menu);\r\n if ('children' in menu && menu.children?.length) {\r\n this.#onExpandAllMenuNodes(menu.children);\r\n }\r\n });\r\n };\r\n\r\n #onCollapseAllMenuNodes = (menus: SdLayoutMenu[]): void => {\r\n menus?.forEach(menu => {\r\n this.treeControl.collapse(menu);\r\n if ('children' in menu && menu.children?.length) {\r\n this.#onCollapseAllMenuNodes(menu.children);\r\n }\r\n });\r\n };\r\n\r\n toggleMenuLock(event: Event): void {\r\n event.stopPropagation();\r\n this.isMenuLock = !this.isMenuLock;\r\n this.layoutStorageService.menuLockStatus?.set(this.isMenuLock);\r\n this.showSideBar.emit(this.isMenuLock);\r\n }\r\n\r\n openHomePage = (): void => {\r\n if (!this.isMobileOrTablet) {\r\n this.router.navigateByUrl('/layout/home');\r\n } else {\r\n window.location.href = '/layout/home';\r\n }\r\n this.searchText = '';\r\n this.layoutStorageService.lastActiveMenuGroupId.set('');\r\n };\r\n\r\n onUserMenuClosed = (): void => {\r\n this.popupUserMenuClosed.emit();\r\n };\r\n\r\n onUserMenuOpened = (): void => {\r\n this.popupUserMenuOpened.emit();\r\n };\r\n\r\n navigate = (args: { path: string; queryParams: Params }): void => {\r\n const { path, queryParams } = args;\r\n if (path.includes('http')) {\r\n window.open(path);\r\n return;\r\n }\r\n this.router.navigate([path.split('?')[0]], {\r\n queryParams,\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n\r\n if (this.isMobileOrTablet) {\r\n this.#closeMenu();\r\n }\r\n };\r\n\r\n onFilterSearchText = (event: string): void => {\r\n this.searchText = event;\r\n this.#filterMenuBySearchText(this.menusByGroup);\r\n };\r\n\r\n onClearSearchText = (): void => {\r\n this.searchText = '';\r\n this.#filterMenuBySearchText(this.menusByGroup);\r\n };\r\n\r\n expandMenuGroup = (menuGroupNode: SdLayoutMenu): void => {\r\n this.titleMenuGroup = menuGroupNode?.tooltipTitle || menuGroupNode?.title;\r\n // Case 1: Menu không có children\r\n if (!('children' in menuGroupNode && menuGroupNode.children?.length)) {\r\n if ('path' in menuGroupNode) {\r\n this.navigate({ path: menuGroupNode.path, queryParams: menuGroupNode?.queryParams ?? {} });\r\n return;\r\n }\r\n }\r\n\r\n // Case 2: Menu có children\r\n if ('children' in menuGroupNode && menuGroupNode.children?.length) {\r\n this.menusByGroup = menuGroupNode.children;\r\n this.dataSource.data = this.menusByGroup;\r\n this.searchText = '';\r\n this.onFilterSearchText(this.searchText);\r\n this.expandSideBar.emit();\r\n }\r\n this.idMenuGroupActive = menuGroupNode?.id;\r\n this.layoutStorageService.lastActiveMenuGroupId.set(menuGroupNode?.id || '');\r\n if (!this.currentPath) {\r\n this.currentPath = window.location.pathname;\r\n }\r\n };\r\n\r\n // Cụm Hover menuGroup\r\n onMouseOverMenuGroupNode = (event: MouseEvent, menuNode: SdLayoutMenu): void => {\r\n const isIconFocus = this.idMenuGroupActive === menuNode?.id;\r\n if (!isIconFocus) {\r\n const menuGroup = event.currentTarget as HTMLElement;\r\n const menuGroupIcon = menuGroup.querySelector('.c-menu-group-icon') as HTMLElement;\r\n const brandLightColorOpacity = this.#convertColor(this.sidebar?.brandLightColor, 0.6);\r\n if (menuGroupIcon) {\r\n menuGroupIcon.style.transition = 'all 0.15s';\r\n menuGroupIcon.style.color = this.sidebar?.brandColor || '#2962FF';\r\n menuGroupIcon.style.backgroundColor = brandLightColorOpacity || 'rgba(248, 249, 250, 0.6)';\r\n }\r\n }\r\n };\r\n\r\n onMouseLeaveMenuGroupNode = (event: MouseEvent, menuNode: SdLayoutMenu): void => {\r\n const isIconFocus = this.idMenuGroupActive === menuNode?.id;\r\n if (!isIconFocus) {\r\n const menuGroup = event.currentTarget as HTMLElement;\r\n const menuGroupIcon = menuGroup.querySelector('.c-menu-group-icon') as HTMLElement;\r\n\r\n if (menuGroupIcon) {\r\n menuGroupIcon.style.transition = 'all 0.15s';\r\n menuGroupIcon.style.color = '#8C8C8C';\r\n menuGroupIcon.style.backgroundColor = 'transparent';\r\n }\r\n }\r\n };\r\n // End\r\n\r\n // Cụm hover menu Node\r\n onMouseOverMenuNode = (event: MouseEvent, menuItem: SdLayoutMenu): void => {\r\n const isMenuFocus = this.menuFocusPipe.transform(this.currentPath, menuItem);\r\n if (!isMenuFocus) {\r\n const menuNode = event.currentTarget as HTMLElement;\r\n const iconMenu = menuNode.querySelector('.c-menu-node-icon') as HTMLElement;\r\n const content = menuNode.querySelector('.c-menu-node-description-content') as HTMLElement;\r\n const iconExpand = menuNode.querySelector('.c-menu-node-description-icon-expand') as HTMLElement;\r\n const brandLightColorOpacity = this.#convertColor(this.sidebar?.brandLightColor, 0.6);\r\n // Menu node\r\n if (menuNode) {\r\n menuNode.style.transition = 'all 0.15s';\r\n menuNode.style.backgroundColor = brandLightColorOpacity || 'rgba(248, 249, 250, 0.6)';\r\n\r\n if (iconMenu) {\r\n iconMenu.style.transition = 'all 0.15s';\r\n iconMenu.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n\r\n if (content) {\r\n content.style.transition = 'all 0.15s';\r\n content.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n\r\n if (iconExpand) {\r\n iconExpand.style.transition = 'all 0.15s';\r\n iconExpand.style.color = this?.sidebar?.brandColor || '#2962FF';\r\n }\r\n }\r\n }\r\n };\r\n\r\n onMouseLeaveMenuNode = (event: MouseEvent, menuItem: SdLayoutMenu): void => {\r\n const isMenuFocus = this.menuFocusPipe.transform(this.currentPath, menuItem);\r\n if (!isMenuFocus) {\r\n const menuNode = event.currentTarget as HTMLElement;\r\n const iconMenu = menuNode.querySelector('.c-menu-node-icon') as HTMLElement;\r\n const content = menuNode.querySelector('.c-menu-node-description-content') as HTMLElement;\r\n const iconExpand = menuNode.querySelector('.c-menu-node-description-icon-expand') as HTMLElement;\r\n\r\n // Menu node\r\n if (menuNode) {\r\n menuNode.style.transition = 'all 0.15s';\r\n menuNode.style.backgroundColor = 'transparent';\r\n\r\n if (iconMenu) {\r\n iconMenu.style.transition = 'all 0.15s';\r\n iconMenu.style.color = '#8C8C8C';\r\n }\r\n\r\n if (content) {\r\n content.style.transition = 'all 0.15s';\r\n content.style.color = '#1F1F1F';\r\n }\r\n\r\n if (iconExpand) {\r\n content.style.transition = 'all 0.15s';\r\n iconExpand.style.color = '#8C8C8C';\r\n }\r\n }\r\n }\r\n };\r\n // End\r\n\r\n #getMenuGroupByCurrentPath = (menus: SdLayoutMenu[], menuGroup?: SdLayoutMenu): SdLayoutMenu[] => {\r\n for (const menu of menus) {\r\n const matchesPath = 'path' in menu && this.#isMenuPathMatchByCurrentPath(menu.path);\r\n if (matchesPath) {\r\n return [menuGroup ?? menu];\r\n }\r\n\r\n // Nếu không tìm thấy thì xuống children, nếu children match thì return về menuGroup\r\n if ('children' in menu && menu.children?.length) {\r\n const result = this.#getMenuGroupByCurrentPath(menu.children, menuGroup ?? menu);\r\n if (result?.length) {\r\n return result;\r\n }\r\n }\r\n }\r\n return [];\r\n };\r\n\r\n #bindingMenuGroupByCurrentPath = (menus: SdLayoutMenu[]): void => {\r\n const normalizeSearchText = this.#normalizeSearchText(this.searchText);\r\n\r\n if (!normalizeSearchText || normalizeSearchText?.length < 3) {\r\n let menuGroupByPath = this.#getMenuGroupByCurrentPath(menus);\r\n // Nếu không tìm được path nào khớp với menu thì menuGroup lấy từ thao tác cuối cùng của người dùng\r\n if (!menuGroupByPath || !menuGroupByPath?.length) {\r\n const lastActiveMenuGroupId = this.layoutStorageService.lastActiveMenuGroupId.get() || '';\r\n const lastActiveMenuGroup = this.menusOrigin?.filter(menu => menu?.id === lastActiveMenuGroupId);\r\n menuGroupByPath = lastActiveMenuGroup || [];\r\n }\r\n if (menuGroupByPath?.length) {\r\n this.idMenuGroupActive = menuGroupByPath[0]?.id;\r\n this.layoutStorageService.lastActiveMenuGroupId.set(menuGroupByPath[0]?.id || '');\r\n this.titleMenuGroup = menuGroupByPath[0]?.tooltipTitle || menuGroupByPath[0]?.title;\r\n if ('children' in menuGroupByPath[0] && menuGroupByPath[0].children?.length) {\r\n this.menusByGroup = menuGroupByPath[0].children;\r\n this.#expandParentNodesByCurrentPath(this.menusByGroup);\r\n } else {\r\n this.menusByGroup = [];\r\n }\r\n } else {\r\n this.idMenuGroupActive = '';\r\n this.titleMenuGroup = '';\r\n this.menusByGroup = [];\r\n }\r\n this.dataSource.data = this.menusByGroup;\r\n }\r\n };\r\n\r\n #expandParentNodesByCurrentPath(menus: SdLayoutMenu[]): boolean {\r\n let shouldPropagate = false;\r\n for (const menu of menus) {\r\n if ('path' in menu && this.#isMenuPathMatchByCurrentPath(menu.path)) {\r\n shouldPropagate = true;\r\n }\r\n if ('children' in menu && menu.children?.length) {\r\n const childHasMatch = this.#expandParentNodesByCurrentPath(menu.children);\r\n if (childHasMatch) {\r\n this.treeControl.expand(menu);\r\n shouldPropagate = true;\r\n }\r\n }\r\n }\r\n return shouldPropagate;\r\n }\r\n\r\n #filterMenuBySearchText = (menus: SdLayoutMenu[]): void => {\r\n const normalizeSearchText = this.#normalizeSearchText(this.searchText);\r\n\r\n // Nếu normalizeSearchText không hợp lệ thì trả về nguyên bản menus được truyền vào\r\n if (!normalizeSearchText || normalizeSearchText.length < 3) {\r\n this.dataSource.data = menus;\r\n this.#onCollapseAllMenuNodes(menus);\r\n this.#expandParentNodesByCurrentPath(menus);\r\n } else {\r\n // Nếu normalizeSearchText hợp lệ thì trả ra menu được tìm thấy và auto expand\r\n const aliasSearchText = SdUtilities.changeAliasLowerCase(normalizeSearchText);\r\n this.dataSource.data = this.#getMenuByAliasSearchText(menus, aliasSearchText);\r\n if (this.dataSource.data?.length) {\r\n this.#onExpandAllMenuNodes(this.dataSource.data);\r\n }\r\n }\r\n };\r\n\r\n #getMenuByAliasSearchText = (menus: SdLayoutMenu[], aliasSearchText: string): SdLayoutMenu[] => {\r\n const result: SdLayoutMenu[] = [];\r\n for (const menu of menus) {\r\n const aliasTitle = SdUtilities.changeAliasLowerCase(menu.title as string);\r\n const isMatched = aliasTitle.includes(aliasSearchText);\r\n\r\n // Case 1: Nếu cha khớp trả về nguyên menu cha\r\n if (isMatched) {\r\n result.push(menu);\r\n continue;\r\n }\r\n\r\n // Case 2: Nếu cha không khớp tìm xuống children\r\n let matchedChildren: SdLayoutMenu[] = [];\r\n\r\n if ('children' in menu && menu.children?.length) {\r\n matchedChildren = this.#getMenuByAliasSearchText(menu.children, aliasSearchText);\r\n }\r\n\r\n // Nếu có child khớp vẫn trả về cha nhưng chỉ gồm children đã lọc\r\n // Phục vụ cho case node con trùng tên để biết thuộc node parent nào\r\n if (matchedChildren?.length) {\r\n result.push({\r\n ...menu,\r\n children: matchedChildren,\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n #isMenuPathMatchByCurrentPath = (path: string): boolean => {\r\n if (!path) {\r\n return false;\r\n }\r\n if (this.currentPath === path) {\r\n return true;\r\n }\r\n\r\n return this.#normalizePath(this.currentPath).startsWith(this.#normalizePath(path));\r\n };\r\n\r\n #normalizePath = (p: string): string => {\r\n return p.endsWith('/') ? p : p + '/';\r\n };\r\n\r\n #closeMenu(): void {\r\n this.showSideBar.emit(null);\r\n }\r\n\r\n #convertColor = (input: string | undefined, opacity = 1): string => {\r\n if (!input) {\r\n return '';\r\n }\r\n\r\n const hexRegex = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\r\n const rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\r\n input = input.trim();\r\n\r\n // Mã màu #HEX\r\n if (hexRegex.test(input)) {\r\n let hex = input.slice(1);\r\n\r\n if (hex.length === 3) {\r\n hex = hex\r\n .split('')\r\n .map(c => c + c)\r\n .join('');\r\n }\r\n\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\r\n }\r\n // End\r\n\r\n // Màu RGB\r\n const rgbMatch = input.match(rgbRegex);\r\n if (rgbMatch) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [_, r, g, b] = rgbMatch;\r\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\r\n }\r\n // End\r\n\r\n return input;\r\n };\r\n\r\n #normalizeSearchText = (searchText: string) => {\r\n let str: string = searchText?.toString() ?? '';\r\n /* eslint-disable no-useless-escape */\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, '');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n };\r\n}\r\n","@if (sidebar) {\r\n <div class=\"wrapper\" [style.height]=\"isMobileOrTablet ? screenHeight + 'px' : '100%'\">\r\n <div class=\"c-header\">\r\n @if (sidebar.logoUrl) {\r\n <div class=\"c-logo\">\r\n <a href=\"javascript:;\" (click)=\"openHomePage()\">\r\n <img alt=\"logo\" [src]=\"sidebar.logoUrl\" />\r\n </a>\r\n </div>\r\n }\r\n <div class=\"c-title-menu-group\">\r\n <span>{{ titleMenuGroup || sidebar.defaultTitle || 'Back Office' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"c-body\">\r\n <div class=\"c-menu\">\r\n <!-- Icon menu-group -->\r\n <div class=\"c-menu-group\">\r\n @for (nodeMenuGroup of menusOrigin; track nodeMenuGroup.id) {\r\n <button\r\n (mouseenter)=\"onMouseOverMenuGroupNode($event, nodeMenuGroup)\"\r\n (mouseleave)=\"onMouseLeaveMenuGroupNode($event, nodeMenuGroup)\"\r\n (click)=\"expandMenuGroup(nodeMenuGroup)\"\r\n [matTooltip]=\"nodeMenuGroup.tooltipTitle || nodeMenuGroup.title\"\r\n [matTooltipClass]=\"'c-tooltip-menu-group-7a22ab15-0083-4d4c-9c0c-00a30bc8c140'\"\r\n [matTooltipPosition]=\"'right'\"\r\n style=\"padding: 0; margin: 0; border: none; background-color: transparent\">\r\n <mat-icon\r\n class=\"c-menu-group-icon\"\r\n [ngStyle]=\"{\r\n color: idMenuGroupActive === nodeMenuGroup?.id ? sidebar.brandColor || '#2962FF' : '#8C8C8C',\r\n backgroundColor: idMenuGroupActive === nodeMenuGroup?.id ? sidebar.brandLightColor || '#F8F9FA' : 'transparent',\r\n }\">\r\n {{ nodeMenuGroup.icon }}\r\n </mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <!-- End -->\r\n\r\n <!-- Giá trị menu-group -->\r\n <div class=\"c-menu-tree\">\r\n @if (menusByGroup?.length) {\r\n <div style=\"padding: 0px 4px\" class=\"c-menu-tree-search\">\r\n <sd-input size=\"sm\" placeholder=\"Tìm kiếm\" [model]=\"searchText\" (sdChange)=\"onFilterSearchText($event)\">\r\n <ng-template sdSuffixDef>\r\n @if (searchText) {\r\n <mat-icon class=\"c-search-prefix-icon cancel\" (click)=\"onClearSearchText()\">cancel</mat-icon>\r\n } @else {\r\n <mat-icon class=\"c-search-prefix-icon search\">search</mat-icon>\r\n }\r\n </ng-template>\r\n </sd-input>\r\n </div>\r\n }\r\n <div class=\"c-menu-tree-container\">\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" [style.backgroundColor]=\"'transparent'\">\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: !hasChild\">\r\n <li\r\n class=\"c-menu-node\"\r\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\r\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\"\r\n [ngStyle]=\"{\r\n backgroundColor: (currentPath | menuFocus: node) ? sidebar.brandLightColor || '#F8F9FA' : 'transparent',\r\n }\">\r\n <div aria-hidden=\"true\" class=\"c-menu-node-description\" (click)=\"navigate(node)\" [class.d-none]=\"!isShowSidebar\">\r\n <div\r\n class=\"c-menu-node-description-content\"\r\n [ngStyle]=\"{\r\n color: (currentPath | menuFocus: node) ? sidebar.brandColor || '#2962FF' : '#1F1F1F',\r\n }\"\r\n [innerHTML]=\"node.title | highLightSearch: searchText | sdSafeHtml\"></div>\r\n </div>\r\n </li>\r\n </mat-nested-tree-node>\r\n\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n aria-hidden=\"true\"\r\n [class]=\"{ expanded: treeControl.isExpanded(node), isfocus: currentPath | menuFocus: node }\">\r\n <li>\r\n <div\r\n class=\"c-menu-node\"\r\n (mouseenter)=\"onMouseOverMenuNode($event, node)\"\r\n (mouseleave)=\"onMouseLeaveMenuNode($event, node)\">\r\n <div class=\"d-flex align-items-center\" style=\"gap: 10px; width: 100%\">\r\n <div [class.d-none]=\"!isShowSidebar\" class=\"c-menu-node-description\" (click)=\"onToggleMenuNode(node)\">\r\n <div\r\n class=\"c-menu-node-description-content\"\r\n [innerHTML]=\"node.title | highLightSearch: searchText | sdSafeHtml\"></div>\r\n <mat-icon class=\"c-menu-node-description-icon-expand\">\r\n {{ treeControl.isExpanded(node) ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <ul class=\"p-0\" [class.d-none]=\"!treeControl.isExpanded(node)\">\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </li>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n <!-- End -->\r\n </div>\r\n </div>\r\n\r\n <div class=\"c-footer\">\r\n <lib-layout-user\r\n [isMobileOrTablet]=\"isMobileOrTablet\"\r\n (menuOpened)=\"onUserMenuOpened()\"\r\n (menuClosed)=\"onUserMenuClosed()\"\r\n [isShowSidebar]=\"isShowSidebar\"\r\n (toggleMenuLock)=\"toggleMenuLock($event)\">\r\n </lib-layout-user>\r\n </div>\r\n\r\n <div class=\"c-vertical\"></div>\r\n </div>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { Component, Input, ViewChild } from '@angular/core';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdLayoutStorageService, SdLayoutMenu } from '../../services';\r\nimport { LayoutSidebarComponent } from './components/sidebar/sidebar.component';\r\n// End\r\n\r\n@Component({\r\n selector: 'lib-layout-sidebar-main-v1',\r\n templateUrl: './main.component.html',\r\n styleUrls: ['./main.component.scss'],\r\n imports: [MatSidenavModule, CommonModule, LayoutSidebarComponent],\r\n})\r\nexport class LayoutSideBarMainV1Component {\r\n constructor(private layoutStorageService: SdLayoutStorageService) {\r\n this.isMobileOrTablet = SdUtilities.isMobile();\r\n this.isShowSidebar = !this.isMobileOrTablet;\r\n this.isShowSidebar = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.isMenuLock = this.layoutStorageService.menuLockStatus?.get() ?? true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n\r\n @ViewChild('sidenav') sidenav!: MatSidenav;\r\n @Input() menus: SdLayoutMenu[] = [];\r\n\r\n onhover = false;\r\n isMenuLock = false;\r\n isShowSidebar = true;\r\n isMobileOrTablet = false;\r\n timerMouseInMenu: ReturnType<typeof setTimeout> | null = null;\r\n timerMouseOutMenu: ReturnType<typeof setTimeout> | null = null;\r\n\r\n #mouseLeave = (): void => {\r\n if (this.timerMouseInMenu) {\r\n clearTimeout(this.timerMouseInMenu);\r\n }\r\n\r\n if (this.onhover && this.isShowSidebar) {\r\n this.isShowSidebar = false;\r\n this.onhover = false;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n #handleMouseLeaveTransition = (): void => {\r\n if (!this.isShowSidebar) {\r\n const delayTime = 400;\r\n if (this.timerMouseInMenu) {\r\n clearTimeout(this.timerMouseInMenu);\r\n }\r\n this.timerMouseOutMenu = setTimeout(() => {\r\n this.#mouseLeave();\r\n }, delayTime);\r\n } else {\r\n this.#mouseLeave();\r\n }\r\n };\r\n\r\n openSidebar = (): void => {\r\n if (!this.isMobileOrTablet) {\r\n return;\r\n }\r\n\r\n if (!this.isShowSidebar) {\r\n this.isShowSidebar = true;\r\n this.onhover = true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n onPopupOfSideBarOpened = (): void => {\r\n this.onhover = false;\r\n this.isShowSidebar = true;\r\n };\r\n\r\n onPopupOfSideBarClosed = (): void => {\r\n const delayTime = 500;\r\n if (!this.isMenuLock) {\r\n this.onhover = true;\r\n this.timerMouseOutMenu = setTimeout(() => {\r\n this.#mouseLeave();\r\n }, delayTime);\r\n }\r\n };\r\n\r\n onExpandSideBar = (): void => {\r\n if (this.isMobileOrTablet) {\r\n return;\r\n }\r\n if (!this.isShowSidebar) {\r\n this.isShowSidebar = true;\r\n this.onhover = true;\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n\r\n onMouseleaveSideBar = (): void => {\r\n if (this.isMobileOrTablet) {\r\n return;\r\n }\r\n this.#mouseLeave();\r\n };\r\n\r\n onToggle = (data: boolean | null) => {\r\n if (data === null) {\r\n this.#handleMouseLeaveTransition();\r\n } else {\r\n this.#mouseLeave();\r\n this.isShowSidebar = data;\r\n this.isMenuLock = data;\r\n this.sidenav.toggle(this.isShowSidebar);\r\n this.layoutStorageService.isShowSidebar.set(this.isShowSidebar);\r\n }\r\n };\r\n}\r\n","<mat-sidenav-container class=\"c-layout-wrapper\">\r\n <mat-sidenav\r\n #sidenav\r\n [(opened)]=\"isShowSidebar\"\r\n class=\"c-layout-sidebar\"\r\n (click)=\"openSidebar()\"\r\n (mouseleave)=\"onMouseleaveSideBar()\"\r\n [mode]=\"isMobileOrTablet ? 'over' : 'side'\"\r\n [fixedInViewport]=\"isMobileOrTablet\">\r\n <lib-layout-sidebar\r\n [menus]=\"menus\"\r\n [isShowSidebar]=\"isShowSidebar\"\r\n (showSideBar)=\"onToggle($event)\"\r\n (expandSideBar)=\"onExpandSideBar()\"\r\n (popupUserMenuOpened)=\"onPopupOfSideBarOpened()\"\r\n (popupUserMenuClosed)=\"onPopupOfSideBarClosed()\">\r\n </lib-layout-sidebar>\r\n </mat-sidenav>\r\n\r\n <mat-sidenav-content class=\"c-layout-content\" [class.isShowSidebar]=\"isMenuLock\">\r\n <mat-drawer-container class=\"c-mat-drawer-container\">\r\n <mat-drawer-content>\r\n <ng-content></ng-content>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n </mat-sidenav-content>\r\n</mat-sidenav-container>\r\n","import { Component, Inject, Input, OnInit } from '@angular/core';\r\n\r\n// Import nội bộ trong module layout\r\nimport { SdLayoutMenu } from '../../services';\r\nimport { MenuPipe } from '../../pipes';\r\nimport { LayoutSideBarMainV1Component } from '../sidebar-v1/main.component';\r\nimport { ISdLayoutConfiguration, ISdSidebarConfiguration, ISidebarConfigurationV1, SD_LAYOUT_CONFIGURATION } from '../../configurations';\r\n// End\r\n\r\n@Component({\r\n selector: 'sd-layout',\r\n templateUrl: './layout-main.component.html',\r\n styleUrls: ['./layout-main.component.scss'],\r\n imports: [LayoutSideBarMainV1Component],\r\n})\r\nexport class SdLayoutComponent implements OnInit {\r\n constructor(\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfig: ISdLayoutConfiguration,\r\n private menuPipe: MenuPipe\r\n ) {}\r\n\r\n menus: SdLayoutMenu[] = [];\r\n @Input('menus') set _menus(menus: SdLayoutMenu[]) {\r\n this.menus = this.menuPipe.transform(menus || []);\r\n }\r\n\r\n sidebarConfiguration!: ISdSidebarConfiguration; // Config các version của sidebar sẽ được inject theo portal\r\n\r\n async ngOnInit() {\r\n if (typeof this.layoutConfig.sidebar === 'function') {\r\n this.sidebarConfiguration = await this.layoutConfig.sidebar();\r\n } else {\r\n this.sidebarConfiguration = this.layoutConfig.sidebar;\r\n }\r\n }\r\n}\r\n","@let sidebarVersion = sidebarConfiguration?.version;\r\n\r\n@if (sidebarVersion === 1) {\r\n <lib-layout-sidebar-main-v1 [menus]=\"menus\">\r\n <ng-content></ng-content>\r\n </lib-layout-sidebar-main-v1>\r\n}","import { Component } from '@angular/core';\r\nimport { SdTabComponent } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n selector: 'app-home-page',\r\n imports: [SdPageComponent],\r\n templateUrl: './home-page.component.html',\r\n styleUrls: ['./home-page.component.scss'],\r\n standalone: true,\r\n})\r\n@SdTabComponent({\r\n component: HomePageComponent,\r\n name: 'Trang chủ',\r\n icon: 'home',\r\n color: 'primary',\r\n})\r\nexport class HomePageComponent {\r\n fullName = '';\r\n constructor(private layoutStorageService: SdLayoutStorageService) {\r\n this.fullName = this.layoutStorageService.fullName.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTimezone() {\r\n const now = new Date();\r\n const timezoneOffset = now.getTimezoneOffset();\r\n const offsetHours = -timezoneOffset / 60;\r\n const sign = offsetHours >= 0 ? '+' : '';\r\n const simpleGmtString = `GMT${sign}${offsetHours}`;\r\n return simpleGmtString;\r\n }\r\n\r\n #getTodayInfo(date: Date) {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })} (${this.#getTimezone()})`;\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ fullName }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n <div class=\"wrapper\">\r\n <img alt=\"welcome-photo\" class=\"welcome-image\" />\r\n <span class=\"first-line\">Chúc bạn một ngày làm việc</span>\r\n <span class=\"second-line\">tràn đầy năng lượng & hiệu quả!</span>\r\n </div>\r\n</sd-page>\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { CanActivate, Router } from '@angular/router';\r\n\r\n// Giả sử bạn có một service để đọc config\r\nimport { ISdLayoutConfiguration, SD_LAYOUT_CONFIGURATION } from '../../../configurations';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HomeRedirectGuard implements CanActivate {\r\n constructor(\r\n private router: Router,\r\n @Inject(SD_LAYOUT_CONFIGURATION) private layoutConfiguration: ISdLayoutConfiguration\r\n ) {}\r\n\r\n async canActivate() {\r\n const homeUrl = this.layoutConfiguration?.homeUrl;\r\n if (homeUrl) {\r\n // Nếu có config homeUrl, tạo một UrlTree để redirect\r\n // Đây là cách redirect chính thống từ trong guard\r\n return this.router.createUrlTree([homeUrl]);\r\n }\r\n // Nếu không có homeUrl, cho phép kích hoạt route\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { HomePageComponent } from './components/home-page/home-page.component';\r\nimport { HomeRedirectGuard } from './guards/home-redirect.guard';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n canActivate: [HomeRedirectGuard],\r\n component: HomePageComponent,\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class HomeRoutingModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HomeRoutingModule } from './home.routing';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [CommonModule, HomeRoutingModule],\r\n})\r\nexport class HomeModule {}\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SdButton } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n templateUrl: './root.component.html',\r\n styleUrls: ['./root.component.scss'],\r\n imports: [SdButton, SdPageComponent],\r\n})\r\nexport class RootComponent {\r\n url: string;\r\n email: string;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.url = this.route.snapshot.queryParams?.['url'];\r\n this.email = this.layoutStorageService.email.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTodayInfo(date: Date): string {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })}`;\r\n }\r\n\r\n reload() {\r\n window.location.href = '';\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ email }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n <div class=\"h-full d-flex flex-column align-items-center\">\r\n <div class=\"h-full d-flex flex-column align-items-center justify-content-center text-center wrapper\">\r\n <img alt=\"error-image\" class=\"error-image\" />\r\n <span class=\"T16M mt-24\">404 - Trang không tồn tại</span>\r\n <span class=\"T16R text-secondary mt-4\">\r\n Trang bạn tìm không tồn tại hoặc đã bị xóa. Vui lòng kiểm tra lại địa chỉ URL hoặc quay lại trang chủ để tiếp tục.\r\n </span>\r\n <sd-button class=\"mt-16\" type=\"fill\" color=\"primary\" (click)=\"reload()\" title=\"Quay trở lại\" prefixIcon=\"arrow_back\"> </sd-button>\r\n </div>\r\n </div>\r\n</sd-page>\r\n","import { Route } from '@angular/router';\r\nimport { RootComponent } from './pages/root/root.component';\r\n\r\nexport const Routes: Route[] = [{ path: '', component: RootComponent }];\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './not-found.routing';\r\n\r\n@NgModule({\r\n imports: [CommonModule, RouterModule.forChild(Routes)],\r\n exports: [],\r\n})\r\nexport class NotFoundModule {}\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SdButton } from '@sd-angular/core/components';\r\n\r\n// NOTE: Import nội bộ trong module layout thì dùng path tương đối\r\nimport { SdPageComponent } from '../../../../components';\r\nimport { SdLayoutStorageService } from '../../../../services';\r\n// End\r\n\r\n@Component({\r\n templateUrl: './root.component.html',\r\n styleUrls: ['./root.component.scss'],\r\n imports: [SdButton, SdPageComponent],\r\n})\r\nexport class RootComponent {\r\n url: string;\r\n email: string;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private layoutStorageService: SdLayoutStorageService\r\n ) {\r\n this.url = this.route.snapshot.queryParams?.['url'];\r\n this.email = this.layoutStorageService.email.get() || '';\r\n }\r\n\r\n todayInfo = this.#getTodayInfo(new Date());\r\n\r\n #getTodayInfo(date: Date): string {\r\n const mapping = {\r\n 0: 'Chủ Nhật',\r\n 1: 'Thứ 2',\r\n 2: 'Thứ 3',\r\n 3: 'Thứ 4',\r\n 4: 'Thứ 5',\r\n 5: 'Thứ 6',\r\n 6: 'Thứ 7',\r\n };\r\n\r\n return `${mapping[date.getDay() as keyof typeof mapping]}, ngày ${date.toLocaleDateString('vi-VN', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n })}`;\r\n }\r\n\r\n reload() {\r\n window.location.href = '';\r\n }\r\n}\r\n","<sd-page>\r\n <div class=\"d-flex flex-column\" headerLeft>\r\n <div class=\"font-weight-medium fs-20\">Xin chào, {{ email }}</div>\r\n <span class=\"T12R text-secondary\">{{ todayInfo }}</span>\r\n </div>\r\n\r\n\r\n <div class=\"h-full d-flex flex-column align-items-center\">\r\n <div class=\"h-full d-flex flex-column align-items-center justify-content-center text-center wrapper\">\r\n <img alt=\"error-image\" class=\"error-image\" />\r\n <span class=\"T16M mt-24\">Không được phép truy cập</span>\r\n <span class=\"T14R text-secondary mt-4\"\r\n >Bạn không có quyền truy cập vào trang này. Liên hệ với quản trị viên hoặc quay lại trang chủ</span\r\n >\r\n <sd-button class=\"mt-16\" type=\"fill\" color=\"primary\" (click)=\"reload()\" title=\"Quay lại trang chủ\"> </sd-button>\r\n </div>\r\n </div>\r\n</sd-page>\r\n","import { Route } from '@angular/router';\r\nimport { RootComponent } from './pages/root/root.component';\r\n\r\nexport const Routes: Route[] = [{ path: '', component: RootComponent }];\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './forbidden.routing';\r\n\r\n@NgModule({\r\n imports: [CommonModule, RouterModule.forChild(Routes)],\r\n exports: [],\r\n})\r\nexport class ForbiddenModule {}\r\n","import { Route } from '@angular/router';\r\n\r\nexport const Routes: Route[] = [\r\n {\r\n path: '',\r\n pathMatch: 'full',\r\n redirectTo: 'not-found',\r\n },\r\n {\r\n path: 'home',\r\n loadChildren: () => import('./modules/home').then(m => m.HomeModule),\r\n },\r\n {\r\n path: 'not-found',\r\n loadChildren: () => import('./modules/not-found').then(m => m.NotFoundModule),\r\n },\r\n {\r\n path: 'forbidden',\r\n loadChildren: () => import('./modules/forbidden').then(m => m.ForbiddenModule),\r\n },\r\n];\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Routes } from './layout.routing';\r\n@NgModule({\r\n declarations: [],\r\n imports: [RouterModule.forChild(Routes)],\r\n providers: [],\r\n})\r\nexport class SdLayoutModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.SdLayoutStorageService","i2.SdLayoutStorageService","i3.MenuFocusPipe","i4","i5","i2","i1.MenuPipe","RootComponent","Routes"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export * from '@sd-angular/core/modules/oidc';
2
2
  export * from '@sd-angular/core/modules/permission';
3
+ export * from '@sd-angular/core/modules/auth';
3
4
  export * from '@sd-angular/core/modules/layout';
4
5
 
5
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-modules.mjs","sources":["../../../projects/sd-angular/modules/sd-angular-core-modules.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;AAEG"}
1
+ {"version":3,"file":"sd-angular-core-modules.mjs","sources":["../../../projects/sd-angular/modules/sd-angular-core-modules.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAA;;AAEG"}
@@ -5,6 +5,7 @@ import { NumberUtilities, DateUtilities } from '@sd-angular/core/utilities/exten
5
5
  import * as i1 from '@angular/platform-browser';
6
6
  import { of, interval } from 'rxjs';
7
7
  import { map } from 'rxjs/operators';
8
+ import { SD_EMPTY_STR } from '@sd-angular/core/utilities/models';
8
9
 
9
10
  class SdFormatNumberPipe {
10
11
  coreConfiguration;
@@ -122,9 +123,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
122
123
  }]
123
124
  }] });
124
125
 
126
+ /* eslint-disable @typescript-eslint/no-explicit-any */
127
+ class SdEmptyPipe {
128
+ transform(value) {
129
+ if (value === undefined || value === null || value === '') {
130
+ return SD_EMPTY_STR;
131
+ }
132
+ return value;
133
+ }
134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
135
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: SdEmptyPipe, isStandalone: true, name: "sdEmpty" });
136
+ }
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SdEmptyPipe, decorators: [{
138
+ type: Pipe,
139
+ args: [{
140
+ name: 'sdEmpty',
141
+ standalone: true,
142
+ }]
143
+ }] });
144
+
125
145
  /**
126
146
  * Generated bundle index. Do not edit.
127
147
  */
128
148
 
129
- export { SdFormatNumberPipe, SdSafeHtmlPipe, SdTimeDifferentPipe };
149
+ export { SdEmptyPipe, SdFormatNumberPipe, SdSafeHtmlPipe, SdTimeDifferentPipe };
130
150
  //# sourceMappingURL=sd-angular-core-pipes.mjs.map