@dso-design-system/ui 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/esm2022/lib/alert/alert.component.mjs +54 -0
  2. package/esm2022/lib/badge/badge.component.mjs +22 -0
  3. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +29 -0
  4. package/esm2022/lib/checkbox/checkbox.component.mjs +82 -0
  5. package/esm2022/lib/datepicker/datepicker.component.mjs +161 -0
  6. package/esm2022/lib/dialog/dialog.component.mjs +25 -0
  7. package/esm2022/lib/directives/truncate.directive.mjs +71 -0
  8. package/esm2022/lib/dropdown-list/dropdown-list.component.mjs +89 -0
  9. package/esm2022/lib/file-upload-items/file-upload-items.component.mjs +65 -0
  10. package/esm2022/lib/file-upload-multiple/file-upload-multiple.component.mjs +232 -0
  11. package/esm2022/lib/file-upload-multiple/upload-item.model.mjs +2 -0
  12. package/esm2022/lib/file-upload-multiple/upload-simulator.service.mjs +76 -0
  13. package/esm2022/lib/file-upload-single/file-upload-single.component.mjs +100 -0
  14. package/esm2022/lib/input-text/input-text.component.mjs +93 -0
  15. package/esm2022/lib/pagination/pagination.component.mjs +115 -0
  16. package/esm2022/lib/progress-bar/progress-bar.component.mjs +25 -0
  17. package/esm2022/lib/radio/radio.component.mjs +41 -0
  18. package/esm2022/lib/select-dropdown/select-dropdown.component.mjs +228 -0
  19. package/esm2022/lib/service/toast.service.mjs +20 -0
  20. package/esm2022/lib/side-navigation-bar/side-navigation-bar.component.mjs +113 -0
  21. package/esm2022/lib/spinner/spinner.component.mjs +60 -0
  22. package/esm2022/lib/table/table.component.mjs +136 -0
  23. package/esm2022/lib/tabs/tab.component.mjs +20 -0
  24. package/esm2022/lib/tabs/tabs.component.mjs +40 -0
  25. package/esm2022/lib/tag/tag.component.mjs +27 -0
  26. package/esm2022/lib/text-area/text-area.component.mjs +74 -0
  27. package/esm2022/lib/toast/toast.component.mjs +36 -0
  28. package/esm2022/lib/tooltip/tooltip.component.mjs +38 -0
  29. package/esm2022/lib/tooltip/tooltip.directive.mjs +105 -0
  30. package/esm2022/lib/top-navigation-bar/top-navigation-bar.component.mjs +24 -0
  31. package/esm2022/public-api.mjs +27 -2
  32. package/fesm2022/dso-design-system-ui.mjs +2056 -3
  33. package/fesm2022/dso-design-system-ui.mjs.map +1 -1
  34. package/lib/alert/alert.component.d.ts +20 -0
  35. package/lib/badge/badge.component.d.ts +8 -0
  36. package/lib/breadcrumb/breadcrumb.component.d.ts +15 -0
  37. package/lib/checkbox/checkbox.component.d.ts +42 -0
  38. package/lib/datepicker/datepicker.component.d.ts +48 -0
  39. package/lib/dialog/dialog.component.d.ts +10 -0
  40. package/lib/directives/truncate.directive.d.ts +23 -0
  41. package/lib/dropdown-list/dropdown-list.component.d.ts +33 -0
  42. package/lib/file-upload-items/file-upload-items.component.d.ts +27 -0
  43. package/lib/file-upload-multiple/file-upload-multiple.component.d.ts +44 -0
  44. package/lib/file-upload-multiple/upload-item.model.d.ts +7 -0
  45. package/lib/file-upload-multiple/upload-simulator.service.d.ts +34 -0
  46. package/lib/file-upload-single/file-upload-single.component.d.ts +28 -0
  47. package/lib/input-text/input-text.component.d.ts +24 -0
  48. package/lib/pagination/pagination.component.d.ts +31 -0
  49. package/lib/progress-bar/progress-bar.component.d.ts +11 -0
  50. package/lib/radio/radio.component.d.ts +14 -0
  51. package/lib/select-dropdown/select-dropdown.component.d.ts +78 -0
  52. package/lib/service/toast.service.d.ts +16 -0
  53. package/lib/side-navigation-bar/side-navigation-bar.component.d.ts +74 -0
  54. package/lib/spinner/spinner.component.d.ts +23 -0
  55. package/lib/table/table.component.d.ts +43 -0
  56. package/lib/tabs/tab.component.d.ts +9 -0
  57. package/lib/tabs/tabs.component.d.ts +15 -0
  58. package/lib/tag/tag.component.d.ts +10 -0
  59. package/lib/text-area/text-area.component.d.ts +21 -0
  60. package/lib/toast/toast.component.d.ts +13 -0
  61. package/lib/tooltip/tooltip.component.d.ts +15 -0
  62. package/lib/tooltip/tooltip.directive.d.ts +19 -0
  63. package/lib/top-navigation-bar/top-navigation-bar.component.d.ts +16 -0
  64. package/package.json +1 -1
  65. package/public-api.d.ts +25 -0
@@ -1 +1 @@
1
- {"version":3,"file":"dso-design-system-ui.mjs","sources":["../../../projects/ui/src/lib/icon/icon.component.ts","../../../projects/ui/src/lib/icon/icon.component.html","../../../projects/ui/src/lib/button/button.component.ts","../../../projects/ui/src/lib/button/button.component.html","../../../projects/ui/src/dso-design-system-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-icon',\r\n standalone: true,\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\nexport class IconComponent implements OnChanges {\r\n \r\n /** Name of the icon to display (matches sprite ID) */\r\n @Input() iconName: string = '';\r\n\r\n /** Size of the icon: 'small', 'medium', 'large' */\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n\r\n /** Full SVG path reference for <use> element */\r\n iconPath: string = '';\r\n\r\n /** CSS class for icon size (small/medium/large) */\r\n sizeClass: string = '';\r\n\r\n /** Inline styles for width and height based on size */\r\n sizeStyles = { width: '', height: '' };\r\n\r\n /** Detect changes to inputs and update icon path or size */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['iconName'] && this.iconName) {\r\n // Update the sprite path when iconName changes\r\n this.iconPath = `/assets/icons/sprite.svg#${this.iconName}`;\r\n }\r\n\r\n if (changes['size']) {\r\n // Update size class and inline styles\r\n this.setSize(this.size);\r\n }\r\n }\r\n\r\n /** Set size-related CSS class and inline width/height */\r\n setSize(size: 'small' | 'medium' | 'large') {\r\n switch (size) {\r\n case 'small':\r\n this.sizeClass = 'small';\r\n this.sizeStyles = { width: '16px', height: '16px' };\r\n break;\r\n case 'medium':\r\n this.sizeClass = 'medium';\r\n this.sizeStyles = { width: '24px', height: '24px' };\r\n break;\r\n case 'large':\r\n this.sizeClass = 'large';\r\n this.sizeStyles = { width: '48px', height: '48px' };\r\n break;\r\n default:\r\n // Fallback to medium if input is invalid\r\n this.sizeClass = 'medium';\r\n this.sizeStyles = { width: '24px', height: '24px' };\r\n break;\r\n }\r\n }\r\n}\r\n","<!-- SVG container for the icon -->\r\n<!-- sizeClass adds a CSS class (small, medium, large) for styling -->\r\n<!-- sizeStyles.width and height set the inline dimensions -->\r\n<svg \r\n [ngClass]=\"sizeClass\" \r\n [attr.width]=\"sizeStyles.width\" \r\n [attr.height]=\"sizeStyles.height\">\r\n\r\n <!-- <use> references the sprite icon by href (updated in TS based on iconName) -->\r\n <use [attr.href]=\"iconPath\"></use>\r\n</svg>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/**\r\n * Configuration options for a button.\r\n */\r\nexport interface ButtonConfig {\r\n btnLabel: string;\r\n btnType?: 'filled' | 'outlined' | 'ghost' | 'text' | 'contrast' | 'link';\r\n btnSize?: 'lgBtn' | 'mdBtn' | 'smBtn';\r\n btnIconName?: string | null;\r\n isDisabled?: boolean;\r\n}\r\n\r\n/**\r\n * A reusable button component with configurable label, type, size, icon, and active/disabled state.\r\n * Can be used standalone or in forms, tables, toolbars, etc.\r\n */\r\n@Component({\r\n selector: 'dso-button',\r\n standalone: true,\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n imports: [CommonModule, IconComponent]\r\n})\r\nexport class ButtonComponent {\r\n\r\n /** Label displayed on the button */\r\n @Input() btnLabel: string = 'Default';\r\n\r\n /** Button type / style variant */\r\n @Input() btnType: 'filled' | 'outlined' | 'ghost' | 'text' | 'contrast' | 'link' = 'filled';\r\n\r\n /** Button size */\r\n @Input() btnSize: 'lgBtn' | 'mdBtn' | 'smBtn' = 'mdBtn';\r\n\r\n /** Optional icon name to display on the button */\r\n @Input() btnIconName: string | null = null;\r\n\r\n /** Whether the button is disabled */\r\n @Input() isDisabled: boolean = false;\r\n\r\n /** Whether the button is active (for toggle or selected states) */\r\n @Input() isActive: boolean = false;\r\n\r\n /** Event emitted when button is clicked */\r\n @Output() onClick = new EventEmitter<MouseEvent>();\r\n\r\n /**\r\n * Handles click events on the button.\r\n * If the button is disabled, the click is ignored.\r\n * Otherwise, emits the onClick event to the parent.\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.isDisabled) return;\r\n this.onClick.emit(event);\r\n }\r\n\r\n /**\r\n * Maps the button's size to a corresponding icon size.\r\n * Useful when displaying an icon alongside the label.\r\n */\r\n getIconSize(): 'small' | 'medium' | 'large' {\r\n switch (this.btnSize) {\r\n case 'lgBtn': return 'large';\r\n case 'mdBtn': return 'medium';\r\n case 'smBtn': return 'small';\r\n default: return 'medium';\r\n }\r\n }\r\n}\r\n","<!-- \r\n Reusable Button Template\r\n\r\n Dynamically applies classes based on:\r\n - btnType: button style variant\r\n - btnSize: button size\r\n - isActive: active/selected state\r\n Also disables button if isDisabled is true.\r\n\r\n Displays an optional icon and label.\r\n-->\r\n\r\n<button \r\n [ngClass]=\"{\r\n 'filled': btnType === 'filled', \r\n 'outlined': btnType === 'outlined', \r\n 'text': btnType === 'text', \r\n 'ghost': btnType === 'ghost',\r\n 'link': btnType === 'link',\r\n 'contrast': btnType === 'contrast',\r\n 'lgBtn': btnSize === 'lgBtn',\r\n 'mdBtn': btnSize === 'mdBtn',\r\n 'smBtn': btnSize === 'smBtn',\r\n 'active': isActive\r\n }\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <!-- Optional icon rendered before label -->\r\n <dso-icon \r\n *ngIf=\"btnIconName\" \r\n [iconName]=\"btnIconName\" \r\n [size]=\"getIconSize()\">\r\n </dso-icon>\r\n\r\n <!-- Button label -->\r\n <span *ngIf=\"btnLabel\">{{ btnLabel }}</span>\r\n</button>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAUa,aAAa,CAAA;;IAGf,QAAQ,GAAW,EAAE,CAAC;;IAGtB,IAAI,GAAiC,QAAQ,CAAC;;IAGvD,QAAQ,GAAW,EAAE,CAAC;;IAGtB,SAAS,GAAW,EAAE,CAAC;;IAGvB,UAAU,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;AAGvC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;;YAExC,IAAI,CAAC,QAAQ,GAAG,CAAA,yBAAA,EAA4B,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC7D;AAED,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;;AAEnB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;KACF;;AAGD,IAAA,OAAO,CAAC,IAAkC,EAAA;QACxC,QAAQ,IAAI;AACV,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AACzB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpD,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpD,MAAM;AACR,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AACzB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpD,MAAM;AACR,YAAA;;AAEE,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpD,MAAM;SACT;KACF;wGAnDU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECV1B,2bAUM,EAAA,MAAA,EAAA,CAAA,yRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFO,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEZ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EACR,UAAA,EAAA,IAAI,EAGP,OAAA,EAAA,CAAE,YAAY,CAAE,EAAA,QAAA,EAAA,2bAAA,EAAA,MAAA,EAAA,CAAA,yRAAA,CAAA,EAAA,CAAA;8BAKhB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;AEDR;;;AAGG;MAQU,eAAe,CAAA;;IAGjB,QAAQ,GAAW,SAAS,CAAC;;IAG7B,OAAO,GAAmE,QAAQ,CAAC;;IAGnF,OAAO,GAAgC,OAAO,CAAC;;IAG/C,WAAW,GAAkB,IAAI,CAAC;;IAGlC,UAAU,GAAY,KAAK,CAAC;;IAG5B,QAAQ,GAAY,KAAK,CAAC;;AAGzB,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc,CAAC;AAEnD;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED;;;AAGG;IACH,WAAW,GAAA;AACT,QAAA,QAAQ,IAAI,CAAC,OAAO;AAClB,YAAA,KAAK,OAAO,EAAE,OAAO,OAAO,CAAC;AAC7B,YAAA,KAAK,OAAO,EAAE,OAAO,QAAQ,CAAC;AAC9B,YAAA,KAAK,OAAO,EAAE,OAAO,OAAO,CAAC;AAC7B,YAAA,SAAS,OAAO,QAAQ,CAAC;SAC1B;KACF;wGA5CU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EC1B5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2iCAsCA,EDdY,MAAA,EAAA,CAAA,m8DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,iOAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAE1B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EAGP,CAAC,YAAY,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,2iCAAA,EAAA,MAAA,EAAA,CAAA,m8DAAA,CAAA,EAAA,CAAA;8BAK7B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGI,OAAO,EAAA,CAAA;sBAAhB,MAAM;;;AE/CT;;AAEG;;;;"}
1
+ {"version":3,"file":"dso-design-system-ui.mjs","sources":["../../../projects/ui/src/lib/icon/icon.component.ts","../../../projects/ui/src/lib/icon/icon.component.html","../../../projects/ui/src/lib/button/button.component.ts","../../../projects/ui/src/lib/button/button.component.html","../../../projects/ui/src/lib/alert/alert.component.ts","../../../projects/ui/src/lib/alert/alert.component.html","../../../projects/ui/src/lib/badge/badge.component.ts","../../../projects/ui/src/lib/badge/badge.component.html","../../../projects/ui/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/ui/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/ui/src/lib/checkbox/checkbox.component.ts","../../../projects/ui/src/lib/checkbox/checkbox.component.html","../../../projects/ui/src/lib/datepicker/datepicker.component.ts","../../../projects/ui/src/lib/datepicker/datepicker.component.html","../../../projects/ui/src/lib/dialog/dialog.component.ts","../../../projects/ui/src/lib/dialog/dialog.component.html","../../../projects/ui/src/lib/directives/truncate.directive.ts","../../../projects/ui/src/lib/dropdown-list/dropdown-list.component.ts","../../../projects/ui/src/lib/dropdown-list/dropdown-list.component.html","../../../projects/ui/src/lib/progress-bar/progress-bar.component.ts","../../../projects/ui/src/lib/progress-bar/progress-bar.component.html","../../../projects/ui/src/lib/file-upload-items/file-upload-items.component.ts","../../../projects/ui/src/lib/file-upload-items/file-upload-items.component.html","../../../projects/ui/src/lib/file-upload-multiple/upload-simulator.service.ts","../../../projects/ui/src/lib/file-upload-multiple/file-upload-multiple.component.ts","../../../projects/ui/src/lib/file-upload-multiple/file-upload-multiple.component.html","../../../projects/ui/src/lib/file-upload-single/file-upload-single.component.ts","../../../projects/ui/src/lib/file-upload-single/file-upload-single.component.html","../../../projects/ui/src/lib/input-text/input-text.component.ts","../../../projects/ui/src/lib/input-text/input-text.component.html","../../../projects/ui/src/lib/pagination/pagination.component.ts","../../../projects/ui/src/lib/pagination/pagination.component.html","../../../projects/ui/src/lib/radio/radio.component.ts","../../../projects/ui/src/lib/radio/radio.component.html","../../../projects/ui/src/lib/select-dropdown/select-dropdown.component.ts","../../../projects/ui/src/lib/select-dropdown/select-dropdown.component.html","../../../projects/ui/src/lib/side-navigation-bar/side-navigation-bar.component.ts","../../../projects/ui/src/lib/side-navigation-bar/side-navigation-bar.component.html","../../../projects/ui/src/lib/spinner/spinner.component.ts","../../../projects/ui/src/lib/spinner/spinner.component.html","../../../projects/ui/src/lib/tooltip/tooltip.directive.ts","../../../projects/ui/src/lib/table/table.component.ts","../../../projects/ui/src/lib/table/table.component.html","../../../projects/ui/src/lib/tabs/tab.component.ts","../../../projects/ui/src/lib/tabs/tab.component.html","../../../projects/ui/src/lib/tabs/tabs.component.ts","../../../projects/ui/src/lib/tabs/tabs.component.html","../../../projects/ui/src/lib/tag/tag.component.ts","../../../projects/ui/src/lib/tag/tag.component.html","../../../projects/ui/src/lib/text-area/text-area.component.ts","../../../projects/ui/src/lib/text-area/text-area.component.html","../../../projects/ui/src/lib/service/toast.service.ts","../../../projects/ui/src/lib/toast/toast.component.ts","../../../projects/ui/src/lib/toast/toast.component.html","../../../projects/ui/src/lib/tooltip/tooltip.component.ts","../../../projects/ui/src/lib/tooltip/tooltip.component.html","../../../projects/ui/src/lib/top-navigation-bar/top-navigation-bar.component.ts","../../../projects/ui/src/lib/top-navigation-bar/top-navigation-bar.component.html","../../../projects/ui/src/dso-design-system-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-icon',\r\n standalone: true,\r\n templateUrl: './icon.component.html',\r\n styleUrls: ['./icon.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\nexport class IconComponent implements OnChanges {\r\n \r\n /** Name of the icon to display (matches sprite ID) */\r\n @Input() iconName: string = '';\r\n\r\n /** Size of the icon: 'small', 'medium', 'large' */\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n\r\n /** Full SVG path reference for <use> element */\r\n iconPath: string = '';\r\n\r\n /** CSS class for icon size (small/medium/large) */\r\n sizeClass: string = '';\r\n\r\n /** Inline styles for width and height based on size */\r\n sizeStyles = { width: '', height: '' };\r\n\r\n /** Detect changes to inputs and update icon path or size */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['iconName'] && this.iconName) {\r\n // Update the sprite path when iconName changes\r\n this.iconPath = `/assets/icons/sprite.svg#${this.iconName}`;\r\n }\r\n\r\n if (changes['size']) {\r\n // Update size class and inline styles\r\n this.setSize(this.size);\r\n }\r\n }\r\n\r\n /** Set size-related CSS class and inline width/height */\r\n setSize(size: 'small' | 'medium' | 'large') {\r\n switch (size) {\r\n case 'small':\r\n this.sizeClass = 'small';\r\n this.sizeStyles = { width: '16px', height: '16px' };\r\n break;\r\n case 'medium':\r\n this.sizeClass = 'medium';\r\n this.sizeStyles = { width: '24px', height: '24px' };\r\n break;\r\n case 'large':\r\n this.sizeClass = 'large';\r\n this.sizeStyles = { width: '48px', height: '48px' };\r\n break;\r\n default:\r\n // Fallback to medium if input is invalid\r\n this.sizeClass = 'medium';\r\n this.sizeStyles = { width: '24px', height: '24px' };\r\n break;\r\n }\r\n }\r\n}\r\n","<!-- SVG container for the icon -->\r\n<!-- sizeClass adds a CSS class (small, medium, large) for styling -->\r\n<!-- sizeStyles.width and height set the inline dimensions -->\r\n<svg \r\n [ngClass]=\"sizeClass\" \r\n [attr.width]=\"sizeStyles.width\" \r\n [attr.height]=\"sizeStyles.height\">\r\n\r\n <!-- <use> references the sprite icon by href (updated in TS based on iconName) -->\r\n <use [attr.href]=\"iconPath\"></use>\r\n</svg>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/**\r\n * Configuration options for a button.\r\n */\r\nexport interface ButtonConfig {\r\n btnLabel: string;\r\n btnType?: 'filled' | 'outlined' | 'ghost' | 'text' | 'contrast' | 'link';\r\n btnSize?: 'lgBtn' | 'mdBtn' | 'smBtn';\r\n btnIconName?: string | null;\r\n isDisabled?: boolean;\r\n}\r\n\r\n/**\r\n * A reusable button component with configurable label, type, size, icon, and active/disabled state.\r\n * Can be used standalone or in forms, tables, toolbars, etc.\r\n */\r\n@Component({\r\n selector: 'dso-button',\r\n standalone: true,\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n imports: [CommonModule, IconComponent]\r\n})\r\nexport class ButtonComponent {\r\n\r\n /** Label displayed on the button */\r\n @Input() btnLabel: string = 'Default';\r\n\r\n /** Button type / style variant */\r\n @Input() btnType: 'filled' | 'outlined' | 'ghost' | 'text' | 'contrast' | 'link' = 'filled';\r\n\r\n /** Button size */\r\n @Input() btnSize: 'lgBtn' | 'mdBtn' | 'smBtn' = 'mdBtn';\r\n\r\n /** Optional icon name to display on the button */\r\n @Input() btnIconName: string | null = null;\r\n\r\n /** Whether the button is disabled */\r\n @Input() isDisabled: boolean = false;\r\n\r\n /** Whether the button is active (for toggle or selected states) */\r\n @Input() isActive: boolean = false;\r\n\r\n /** Event emitted when button is clicked */\r\n @Output() onClick = new EventEmitter<MouseEvent>();\r\n\r\n /**\r\n * Handles click events on the button.\r\n * If the button is disabled, the click is ignored.\r\n * Otherwise, emits the onClick event to the parent.\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.isDisabled) return;\r\n this.onClick.emit(event);\r\n }\r\n\r\n /**\r\n * Maps the button's size to a corresponding icon size.\r\n * Useful when displaying an icon alongside the label.\r\n */\r\n getIconSize(): 'small' | 'medium' | 'large' {\r\n switch (this.btnSize) {\r\n case 'lgBtn': return 'large';\r\n case 'mdBtn': return 'medium';\r\n case 'smBtn': return 'small';\r\n default: return 'medium';\r\n }\r\n }\r\n}\r\n","<!-- \r\n Reusable Button Template\r\n\r\n Dynamically applies classes based on:\r\n - btnType: button style variant\r\n - btnSize: button size\r\n - isActive: active/selected state\r\n Also disables button if isDisabled is true.\r\n\r\n Displays an optional icon and label.\r\n-->\r\n\r\n<button \r\n [ngClass]=\"{\r\n 'filled': btnType === 'filled', \r\n 'outlined': btnType === 'outlined', \r\n 'text': btnType === 'text', \r\n 'ghost': btnType === 'ghost',\r\n 'link': btnType === 'link',\r\n 'contrast': btnType === 'contrast',\r\n 'lgBtn': btnSize === 'lgBtn',\r\n 'mdBtn': btnSize === 'mdBtn',\r\n 'smBtn': btnSize === 'smBtn',\r\n 'active': isActive\r\n }\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <!-- Optional icon rendered before label -->\r\n <dso-icon \r\n *ngIf=\"btnIconName\" \r\n [iconName]=\"btnIconName\" \r\n [size]=\"getIconSize()\">\r\n </dso-icon>\r\n\r\n <!-- Button label -->\r\n <span *ngIf=\"btnLabel\">{{ btnLabel }}</span>\r\n</button>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ButtonComponent, ButtonConfig } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n\r\nexport interface AlertAction extends ButtonConfig {\r\n onClick?: () => void;\r\n}\r\n\r\n@Component({\r\n selector: 'dso-alert',\r\n standalone: true,\r\n imports: [ CommonModule, ButtonComponent, IconComponent ],\r\n templateUrl: './alert.component.html',\r\n styleUrl: './alert.component.scss'\r\n})\r\n\r\nexport class AlertComponent {\r\n @Input() type: 'success' | 'error' | 'info' | 'warning' = 'info';\r\n @Input() message = '';\r\n @Input() showActions = false;\r\n @Input() isDismissable = true;\r\n @Input() actions: AlertAction[] = [];\r\n\r\n\r\n isVisible = true;\r\n isHiding = false;\r\n\r\n close() {\r\n this.isHiding = true;\r\n // Wait for fadeOut animation to finish before removing the alert\r\n setTimeout(() => {\r\n this.isVisible = false;\r\n }, 300); // match duration in CSS\r\n }\r\n\r\n // Pick the icon name based on alert type\r\n get iconName(): string {\r\n switch (this.type) {\r\n case 'success': return 'icon-slanted-check';\r\n case 'error': return 'icon-left-align';\r\n case 'warning': return 'icon-van';\r\n default: return 'icon-notification';\r\n }\r\n }\r\n\r\n /** Handle when a button inside the alert is clicked */\r\n handleAction(action: AlertAction) {\r\n if (action.onClick) {\r\n action.onClick();\r\n }\r\n }\r\n\r\n}","\r\n<div\r\n*ngIf=\"isVisible\"\r\nclass=\"alert\"\r\n[ngClass]=\"[type, isHiding ? 'hide' : '']\"> \r\n <div class=\"positioning\">\r\n <dso-icon [iconName]=\"iconName\" [size]=\"'medium'\"></dso-icon>\r\n </div>\r\n <span [innerHTML]=\"message\"></span>\r\n\r\n <div class=\"positioning\" *ngIf=\"actions && actions.length > 0 || isDismissable\">\r\n <div class=\"button-wrapper\">\r\n <dso-button\r\n *ngFor=\"let action of actions\"\r\n [btnLabel]=\"action.btnLabel\"\r\n [btnType]=\"action.btnType || 'contrast'\" \r\n [btnSize]=\"action.btnSize || 'mdBtn'\"\r\n [btnIconName]=\"action.btnIconName ?? null\"\r\n [isDisabled]=\"action.isDisabled || false\"\r\n (click)=\"handleAction(action)\">\r\n </dso-button>\r\n </div>\r\n <button (click)=\"close()\" *ngIf=\"isDismissable\" class=\"close-btn\">&times;</button>\r\n </div>\r\n \r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-badge',\r\n standalone: true,\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.scss'],\r\n imports: [CommonModule]\r\n\r\n})\r\nexport class BadgeComponent {\r\n \r\n @Input() label: string | number | null = null;\r\n @Input() color: 'primary' | 'success' | 'warning' | 'danger' = 'primary';\r\n\r\n get isDot(): boolean {\r\n return this.label === null || this.label === '' || this.label === undefined;\r\n }\r\n\r\n}\r\n","<span class=\"badge\" [ngClass]=\"[color, isDot ? 'dot' : '']\">\r\n <ng-container *ngIf=\"!isDot\">{{ label }}</ng-container>\r\n</span>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\nexport interface BreadcrumbItem {\r\n label: string;\r\n url?: string;\r\n icon?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'dso-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n standalone: true,\r\n imports: [ CommonModule, RouterLink, ButtonComponent ]\r\n})\r\nexport class BreadcrumbComponent {\r\n @Input() items: BreadcrumbItem[] = [];\r\n @Output() itemSelected = new EventEmitter<BreadcrumbItem>();\r\n\r\n // Default separator → you can allow this to be set via @Input() later\r\n @Input() separator: string = '/';\r\n\r\n onItemClicked(item: BreadcrumbItem) {\r\n this.itemSelected.emit(item);\r\n console.log('breadcrumb emitted -> ', item);\r\n }\r\n}\r\n","<nav aria-label=\"Breadcrumb\" class=\"breadcrumb\">\r\n <ol>\r\n <li *ngFor=\"let item of items; let last = last\" class=\"crumb\">\r\n\r\n <!-- Normal breadcrumb link -->\r\n <ng-container *ngIf=\"!last && item.url; else lastItem\">\r\n\r\n <dso-button\r\n btnType=\"text\"\r\n btnSize=\"smBtn\"\r\n [btnLabel]=\"item.label\"\r\n [isDisabled]=\"false\"\r\n (onClick)=\"onItemClicked(item)\"\r\n [routerLink]=\"item.url\">\r\n </dso-button>\r\n\r\n </ng-container>\r\n\r\n <!-- Last breadcrumb item (non-clickable) -->\r\n <ng-template #lastItem>\r\n <span class=\"current\" aria-current=\"page\">\r\n {{ item.label }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Separator -->\r\n <span class=\"separator\" *ngIf=\"!last\">{{ separator }}</span>\r\n\r\n </li>\r\n </ol>\r\n <!-- <dso-button btnType=\"text\" btnLabel=\"Go Home\" [routerLink]=\"['/page1']\"></dso-button> -->\r\n\r\n</nav>\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Reusable Checkbox Component\r\n * \r\n * Features:\r\n * - Optional label\r\n * - Configurable size, error state, and disabled state\r\n * - Emits changes to parent component\r\n * - Supports custom icons\r\n */\r\n@Component({\r\n selector: 'dso-checkbox',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, FormsModule],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss'],\r\n})\r\nexport class CheckboxComponent {\r\n\r\n /** Text label displayed next to the checkbox */\r\n @Input() label?: string;\r\n\r\n /** Whether the checkbox is checked */\r\n @Input() isChecked: boolean = true;\r\n\r\n /** Whether the checkbox is disabled */\r\n @Input() disabled: boolean = false;\r\n\r\n /** Size of the checkbox: small, medium, or large */\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n\r\n /** Error state for styling purposes */\r\n @Input() error: boolean = false;\r\n\r\n /** Whether the checkbox is required */\r\n @Input() required: boolean = false;\r\n\r\n /** Error message to display when error is true */\r\n @Input() errorMessage: string = '';\r\n\r\n /** Icon name for the checkbox (default is a checkmark) */\r\n @Input() iconName: string = 'icon-slanted-check';\r\n\r\n /** Emits the updated checked state whenever the checkbox is toggled */\r\n @Output() change = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Toggles the checked state of the checkbox\r\n * and emits the new value to the parent component\r\n */\r\n toggleCheckbox() {\r\n if (!this.disabled) {\r\n this.isChecked = !this.isChecked;\r\n this.change.emit(this.isChecked);\r\n }\r\n }\r\n\r\n /**\r\n * Maps the checkbox size to icon size\r\n */\r\n getIconSize(): 'small' | 'medium' | 'large' {\r\n switch (this.size) {\r\n case 'large': return 'large';\r\n case 'medium': return 'medium';\r\n case 'small': return 'small';\r\n default: return 'medium'; // fallback to medium\r\n }\r\n }\r\n}\r\n","<!--\r\n Checkbox Component Template\r\n --------------------------\r\n Features:\r\n - Clickable wrapper to toggle checkbox (disabled-safe)\r\n - Custom checkbox with icon\r\n - Label support\r\n - Error state styling\r\n - Size-based styling: small, medium, large\r\n-->\r\n\r\n<div \r\n class=\"checkbox-wrapper\"\r\n (click)=\"!disabled && toggleCheckbox()\"\r\n [ngClass]=\"{\r\n 'small': size === 'small', \r\n 'medium': size === 'medium', \r\n 'large': size === 'large',\r\n 'disabled': disabled\r\n }\">\r\n\r\n <!-- Hidden native checkbox for accessibility and form integration -->\r\n <input\r\n class=\"checkbox-input\"\r\n type=\"checkbox\"\r\n [ngModel]=\"isChecked\"\r\n [disabled]=\"disabled\"/>\r\n\r\n <!-- Custom checkbox UI -->\r\n <span \r\n class=\"custom-checkbox\" \r\n [class.checked]=\"isChecked\" \r\n [class.error]=\"error\">\r\n \r\n <!-- Display check icon only when checked -->\r\n <dso-icon \r\n *ngIf=\"isChecked\" \r\n [iconName]=\"iconName\" \r\n [size]=\"getIconSize()\">\r\n </dso-icon>\r\n\r\n </span> \r\n\r\n <!-- Optional label -->\r\n <span class=\"checkbox-label\">\r\n {{ label }}\r\n </span>\r\n\r\n</div>\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport { Component, ElementRef, ViewChild, HostListener, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-datepicker',\r\n standalone: true,\r\n templateUrl: './datepicker.component.html',\r\n styleUrls: ['./datepicker.component.scss'],\r\n imports: [CommonModule, DatePipe]\r\n})\r\nexport class DatepickerComponent {\r\n\r\n /** Label displayed above the input */\r\n @Input() inputTextLabel: string = 'Datepicker Title';\r\n\r\n /** Disable the datepicker input */\r\n @Input() isDisabled: boolean = false;\r\n\r\n /** Currently selected date */\r\n selectedDate: Date | null = null;\r\n\r\n /** Whether the calendar popup is visible */\r\n calendarVisible: boolean = false;\r\n\r\n /** Current month displayed in the calendar */\r\n currentMonth: Date = new Date();\r\n\r\n /** View mode: day, month, or year */\r\n viewMode: 'day' | 'month' | 'year' = 'day';\r\n\r\n /** Minimum and maximum year range */\r\n minYear = 1990;\r\n maxYear = 2099;\r\n\r\n /** Month names for display */\r\n months = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n ];\r\n\r\n @ViewChild('yearList') yearListRef!: ElementRef<HTMLDivElement>;\r\n @ViewChild('calendarWrapper', { static: false }) calendarWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n // --------------------------\r\n // Calendar Visibility & Toggle\r\n // --------------------------\r\n\r\n /** Toggle the calendar popup */\r\n toggleCalendar() {\r\n this.calendarVisible = !this.calendarVisible;\r\n this.viewMode = 'day';\r\n }\r\n\r\n /** Close calendar if clicking outside */\r\n @HostListener('document:click', ['$event'])\r\n handleClickOutside(event: Event) {\r\n if (!this.calendarWrapper) return;\r\n const target = event.target as HTMLElement;\r\n if (this.calendarVisible && !this.calendarWrapper.nativeElement.contains(target)) {\r\n this.calendarVisible = false;\r\n }\r\n }\r\n\r\n // --------------------------\r\n // View Switching\r\n // --------------------------\r\n\r\n switchToMonthView() {\r\n this.viewMode = 'month';\r\n }\r\n\r\n switchToYearView() {\r\n this.viewMode = 'year';\r\n setTimeout(() => this.scrollToCurrentYear(), 50);\r\n }\r\n\r\n // --------------------------\r\n // Navigation (Month / Year)\r\n // --------------------------\r\n\r\n changeMonth(direction: number) {\r\n this.currentMonth = new Date(\r\n this.currentMonth.getFullYear(),\r\n this.currentMonth.getMonth() + direction,\r\n 1\r\n );\r\n }\r\n\r\n changeYear(direction: number) {\r\n const newYear = this.currentMonth.getFullYear() + direction;\r\n if (newYear >= this.minYear && newYear <= this.maxYear) {\r\n this.currentMonth = new Date(newYear, this.currentMonth.getMonth(), 1);\r\n setTimeout(() => this.scrollToCurrentYear(), 0);\r\n }\r\n }\r\n\r\n // --------------------------\r\n // Helpers\r\n // --------------------------\r\n\r\n /** Returns array of days in the current month, with leading nulls for empty grid cells */\r\n getDaysInMonth(): (number | null)[] {\r\n const month = this.currentMonth.getMonth();\r\n const year = this.currentMonth.getFullYear();\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n\r\n const daysArray = Array.from({ length: daysInMonth }, (_, i) => i + 1);\r\n return Array(firstDay).fill(null).concat(daysArray);\r\n }\r\n\r\n /** Returns array of years in the defined range */\r\n getYearsRange(): number[] {\r\n const years: number[] = [];\r\n for (let y = this.minYear; y <= this.maxYear; y++) years.push(y);\r\n return years;\r\n }\r\n\r\n /** Scroll the year list to show the current year */\r\n scrollToCurrentYear() {\r\n if (!this.yearListRef) return;\r\n\r\n const container = this.yearListRef.nativeElement;\r\n const currentYear = this.currentMonth.getFullYear();\r\n const yearIndex = currentYear - this.minYear;\r\n const columns = 4; // 4 columns grid layout\r\n const rowIndex = Math.floor(yearIndex / columns);\r\n\r\n const yearCell = container.querySelector('.year-cell') as HTMLElement;\r\n if (!yearCell) return;\r\n\r\n const scrollTop = rowIndex * yearCell.offsetHeight;\r\n container.scrollTop = scrollTop;\r\n }\r\n\r\n // --------------------------\r\n // Selection Handlers\r\n // --------------------------\r\n\r\n selectDate(day: number | null) {\r\n if (day === null) return;\r\n this.selectedDate = new Date(this.currentMonth.getFullYear(), this.currentMonth.getMonth(), day);\r\n this.calendarVisible = false;\r\n }\r\n\r\n selectMonth(monthIndex: number) {\r\n this.currentMonth = new Date(this.currentMonth.getFullYear(), monthIndex, 1);\r\n this.viewMode = 'day';\r\n }\r\n\r\n selectYear(year: number) {\r\n this.currentMonth = new Date(year, this.currentMonth.getMonth(), 1);\r\n this.viewMode = 'month';\r\n }\r\n\r\n /** Check if a day is currently selected */\r\n isSelected(day: number | null): boolean {\r\n if (!this.selectedDate || day === null) return false;\r\n return (\r\n this.selectedDate.getDate() === day &&\r\n this.selectedDate.getMonth() === this.currentMonth.getMonth() &&\r\n this.selectedDate.getFullYear() === this.currentMonth.getFullYear()\r\n );\r\n }\r\n\r\n // --------------------------\r\n // Footer Actions\r\n // --------------------------\r\n\r\n /** Set today’s date */\r\n setToday() {\r\n const today = new Date();\r\n this.selectedDate = today;\r\n this.currentMonth = new Date(today.getFullYear(), today.getMonth(), 1);\r\n this.calendarVisible = false;\r\n }\r\n\r\n /** Clear the selected date */\r\n clearDate() {\r\n this.selectedDate = null;\r\n }\r\n}\r\n","<div class=\"datepicker-wrapper\" #calendarWrapper>\r\n \r\n <!-- Label above the input -->\r\n <div *ngIf=\"inputTextLabel\" class=\"datepicker-label\">{{ inputTextLabel }}</div>\r\n\r\n <!-- Input field (readonly) -->\r\n <input\r\n type=\"text\"\r\n class=\"datepicker-input\"\r\n [value]=\"selectedDate ? (selectedDate | date:'MMM d, y') : ''\"\r\n placeholder=\"Select a date\"\r\n readonly\r\n (click)=\"toggleCalendar()\"\r\n [disabled]=\"isDisabled\"\r\n [class.disabled]=\"isDisabled\"\r\n />\r\n\r\n <!-- Calendar popup -->\r\n <div class=\"calendar\" *ngIf=\"calendarVisible\">\r\n\r\n <!-- Header -->\r\n <div class=\"calendar-header\">\r\n <div class=\"header-row\">\r\n\r\n <!-- Year & Month Navigation Buttons -->\r\n <button *ngIf=\"viewMode === 'day' || viewMode === 'month'\" \r\n (click)=\"changeYear(-1)\" class=\"nav-btn\">«</button>\r\n <button *ngIf=\"viewMode === 'day'\" \r\n (click)=\"changeMonth(-1)\" class=\"nav-btn\">‹</button>\r\n\r\n <!-- Calendar Title (Month / Year display) -->\r\n <span class=\"calendar-title\">\r\n\r\n <!-- Day view: show Month + Year -->\r\n <ng-container *ngIf=\"viewMode === 'day'\">\r\n <span class=\"month-label\" (click)=\"switchToMonthView()\">\r\n {{ currentMonth | date:'MMMM' }}\r\n </span>\r\n <span class=\"year-label\" (click)=\"switchToYearView()\">\r\n {{ currentMonth | date:'yyyy' }}\r\n </span>\r\n </ng-container>\r\n\r\n <!-- Month view: show Year -->\r\n <ng-container *ngIf=\"viewMode === 'month'\">\r\n <span class=\"year-label\" (click)=\"switchToYearView()\">\r\n {{ currentMonth | date:'yyyy' }}\r\n </span>\r\n </ng-container>\r\n\r\n <!-- Year view: show Year only -->\r\n <ng-container *ngIf=\"viewMode === 'year'\">\r\n {{ currentMonth | date:'yyyy' }}\r\n </ng-container>\r\n\r\n </span>\r\n\r\n <!-- Forward navigation buttons -->\r\n <button *ngIf=\"viewMode === 'day'\" (click)=\"changeMonth(1)\" class=\"nav-btn\">›</button>\r\n <button *ngIf=\"viewMode === 'day' || viewMode === 'month'\" \r\n (click)=\"changeYear(1)\" class=\"nav-btn\">»</button>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- ----------------------\r\n DAY VIEW\r\n ---------------------- -->\r\n <div *ngIf=\"viewMode === 'day'\">\r\n\r\n <!-- Weekday Labels -->\r\n <div class=\"calendar-weekdays\">\r\n <div *ngFor=\"let day of ['S','M','T','W','T','F','S']\">{{ day }}</div>\r\n </div>\r\n\r\n <!-- Days Grid -->\r\n <div class=\"calendar-grid days-grid\">\r\n <div\r\n *ngFor=\"let day of getDaysInMonth()\"\r\n [class.empty]=\"day === null\"\r\n [class.selected]=\"isSelected(day)\"\r\n (click)=\"selectDate(day)\"\r\n >\r\n {{ day }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ----------------------\r\n MONTH VIEW\r\n ---------------------- -->\r\n <div *ngIf=\"viewMode === 'month'\" class=\"calendar-grid months-grid\">\r\n <div *ngFor=\"let m of months; let i = index\" \r\n (click)=\"selectMonth(i)\" \r\n class=\"month-cell\">\r\n {{ m }}\r\n </div>\r\n </div>\r\n\r\n <!-- ----------------------\r\n YEAR VIEW\r\n ---------------------- -->\r\n <div *ngIf=\"viewMode === 'year'\" \r\n class=\"calendar-grid years-grid scrollable\" \r\n #yearList>\r\n <div\r\n *ngFor=\"let y of getYearsRange()\"\r\n (click)=\"selectYear(y)\"\r\n class=\"year-cell\"\r\n [class.current-year]=\"y === currentMonth.getFullYear()\"\r\n >\r\n {{ y }}\r\n </div>\r\n </div>\r\n\r\n <!-- ----------------------\r\n Footer Buttons\r\n ---------------------- -->\r\n <div class=\"calendar-footer\">\r\n <button class=\"footer-btn clear-btn\" (click)=\"clearDate()\">Clear</button>\r\n <button class=\"footer-btn today-btn\" (click)=\"setToday()\">Today</button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-dialog',\r\n standalone: true,\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\nexport class DialogComponent {\r\n @Input() visible: boolean = false;\r\n @Input() title: string = 'Dialog Title';\r\n\r\n @Output() close = new EventEmitter<void>();\r\n\r\n onClose() {\r\n this.close.emit();\r\n }\r\n}\r\n","<div class=\"dialog-overlay\" *ngIf=\"visible\" (click)=\"onClose()\">\r\n <div class=\"dialog\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"dialog-header\">{{ title }}</div>\r\n <div class=\"dialog-body\">\r\n <ng-content></ng-content> <!-- Projected content -->\r\n </div>\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, Input, AfterViewInit, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[dsoTruncate]',\r\n standalone: true\r\n})\r\nexport class DsoTruncateDirective implements AfterViewInit {\r\n\r\n /** \r\n * Enable or disable truncation. \r\n * Can be used as `<div dsoTruncate>` (enabled by default) or `[dsoTruncate]=\"false\"`.\r\n */\r\n @Input('dsoTruncate') enableTruncate: boolean | '' = true;\r\n\r\n /** Optional: override tooltip text when text is truncated */\r\n @Input() truncateTooltipText?: string;\r\n\r\n constructor(private el: ElementRef<HTMLElement>) {}\r\n\r\n /** Initialize truncation after the view is loaded */\r\n ngAfterViewInit() {\r\n if (this.enableTruncate) {\r\n this.applyTruncationStyles();\r\n this.updateTooltip();\r\n }\r\n }\r\n\r\n /** Re-check overflow and update tooltip on window resize */\r\n @HostListener('window:resize')\r\n onResize() {\r\n if (this.enableTruncate) {\r\n this.updateTooltip();\r\n }\r\n }\r\n\r\n // -------------------------\r\n // PRIVATE METHODS\r\n // -------------------------\r\n\r\n /** Apply CSS styles necessary for truncation */\r\n private applyTruncationStyles() {\r\n const element = this.el.nativeElement;\r\n element.style.whiteSpace = 'nowrap';\r\n element.style.overflow = 'hidden';\r\n element.style.textOverflow = 'ellipsis';\r\n element.style.display = 'inline-block';\r\n element.style.maxWidth = '100%';\r\n }\r\n\r\n /** Update tooltip based on overflow state */\r\n private updateTooltip() {\r\n const el = this.el.nativeElement;\r\n\r\n const isOverflowing = el.scrollWidth > el.clientWidth;\r\n\r\n if (isOverflowing) {\r\n // Add or update tooltip with either the provided text or element content\r\n el.setAttribute('dsoDirectiveTooltip', this.truncateTooltipText || el.textContent || '');\r\n } else {\r\n // Remove tooltip if content fits\r\n el.removeAttribute('dsoDirectiveTooltip');\r\n }\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, ElementRef, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-dropdown-list',\r\n templateUrl: './dropdown-list.component.html',\r\n styleUrls: ['./dropdown-list.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\nexport class DropdownListComponent {\r\n\r\n // -------------------------------\r\n // ELEMENT REFERENCE\r\n // -------------------------------\r\n /** Reference to the root <div> to detect clicks inside/outside dropdown */\r\n @ViewChild('root', { static: true }) root!: ElementRef;\r\n\r\n // -------------------------------\r\n // INPUT PROPERTIES\r\n // -------------------------------\r\n /** Options to display in the dropdown. Each option has a label and a value */\r\n @Input() options: { label: string; value: any }[] = [];\r\n\r\n /** Placeholder text when no option is selected */\r\n @Input() placeholder = 'Select';\r\n\r\n /** Currently selected value */\r\n @Input() value: any = null;\r\n\r\n /** Disable dropdown interaction */\r\n @Input() disabled = false;\r\n\r\n // -------------------------------\r\n // OUTPUT EVENTS\r\n // -------------------------------\r\n /** Emits the selected value when user clicks an option */\r\n @Output() selectionChange = new EventEmitter<any>();\r\n\r\n // -------------------------------\r\n // INTERNAL STATE\r\n // -------------------------------\r\n /** Tracks whether the dropdown list is open or closed */\r\n isOpen = false;\r\n\r\n // -------------------------------\r\n // METHODS\r\n // -------------------------------\r\n\r\n /** Toggle dropdown open/close when trigger is clicked */\r\n toggle(): void {\r\n if (!this.disabled) {\r\n this.isOpen = !this.isOpen;\r\n }\r\n }\r\n\r\n /** Handle option selection */\r\n select(option: { label: string; value: any }): void {\r\n this.value = option.value; // Update internal state\r\n this.selectionChange.emit(this.value); // Notify parent component\r\n this.isOpen = false; // Close dropdown\r\n }\r\n\r\n // -------------------------------\r\n // HANDLE CLICKS OUTSIDE DROPDOWN\r\n // -------------------------------\r\n @HostListener('document:click', ['$event'])\r\n handleOutsideClick(event: Event): void {\r\n if (!this.isOpen) return;\r\n\r\n const target = event.target as HTMLElement;\r\n if (!this.root.nativeElement.contains(target)) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n // -------------------------------\r\n // HELPER GETTER\r\n // -------------------------------\r\n /** Returns label of selected value or placeholder if none selected */\r\n get selectedLabel(): string {\r\n const found = this.options.find(o => o.value === this.value);\r\n return found ? found.label : this.placeholder;\r\n }\r\n}\r\n","<div class=\"dropdown\" #root [class.disabled]=\"disabled\">\r\n <!--\r\n #root: Linked to ViewChild in TS for detecting outside clicks\r\n [class.disabled]: Adds CSS class when dropdown is disabled\r\n -->\r\n\r\n <!-- Trigger area: clicking toggles dropdown open/close -->\r\n <div class=\"dropdown-trigger\" (click)=\"toggle()\">\r\n <!-- Display selected label or placeholder -->\r\n <span>{{ selectedLabel }}</span>\r\n <!-- Arrow icon that rotates when dropdown is open -->\r\n <span class=\"icon\" [class.open]=\"isOpen\">▾</span>\r\n </div>\r\n\r\n <!-- Dropdown menu: visible only when isOpen is true -->\r\n <ul class=\"dropdown-menu\" *ngIf=\"isOpen\">\r\n <!-- Render each option -->\r\n <li \r\n *ngFor=\"let option of options\"\r\n (click)=\"select(option)\"\r\n [class.selected]=\"option.value === value\"> <!-- Highlight selected option -->\r\n {{ option.label }}\r\n </li>\r\n </ul>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-progress-bar',\r\n templateUrl: './progress-bar.component.html',\r\n styleUrls: ['./progress-bar.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\nexport class ProgressBarComponent {\r\n /** Progress value (0–100). If null, shows indeterminate animation. */\r\n @Input() value: number | null = null;\r\n\r\n /** Color variants */\r\n @Input() color: 'primary' | 'success' | 'warning' | 'danger' = 'primary';\r\n\r\n /** Optional animation toggle */\r\n @Input() animated: boolean = true;\r\n}","<div class=\"progress-bar-container\">\r\n <div\r\n class=\"progress-bar-fill\"\r\n [ngClass]=\"[\r\n color,\r\n animated ? 'animated' : '',\r\n value === null ? 'indeterminate' : ''\r\n ]\"\r\n [style.width.%]=\"value !== null ? value : 50\"\r\n ></div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UploadItem } from '../file-upload-multiple/upload-item.model';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ProgressBarComponent } from '../progress-bar/progress-bar.component';\r\n\r\n@Component({\r\n selector: 'dso-file-item',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent, ProgressBarComponent],\r\n templateUrl: './file-upload-items.component.html',\r\n styleUrls: ['./file-upload-items.component.scss']\r\n})\r\nexport class FileUploadItemComponent {\r\n\r\n /** The file upload item to display */\r\n @Input() item!: UploadItem;\r\n\r\n /** Emitted when the user retries a failed upload */\r\n @Output() retry = new EventEmitter<void>();\r\n \r\n /** Emitted when the user removes the file from the list */\r\n @Output() remove = new EventEmitter<void>();\r\n \r\n /** Emitted when the user cancels an ongoing upload */\r\n @Output() cancel = new EventEmitter<void>();\r\n\r\n /**\r\n * Format the file size into a human-readable string\r\n * @param size - size in bytes\r\n * @returns formatted string like '12.3 KB', '1.5 MB'\r\n */\r\n formatSize(size: number): string {\r\n if (size < 1024) return size + ' B';\r\n if (size < 1024 * 1024) return (size / 1024).toFixed(1) + ' KB';\r\n return (size / (1024 * 1024)).toFixed(1) + ' MB';\r\n }\r\n\r\n /**\r\n * Get an icon name for the file based on its type or extension\r\n * @param item - the UploadItem\r\n * @returns icon name string\r\n */\r\n getFileIcon(item: UploadItem): string {\r\n const file = item.file;\r\n const type = file.type.toLowerCase();\r\n const name = file.name.toLowerCase();\r\n\r\n // Image MIME types\r\n if (type.startsWith('image/')) {\r\n return 'icon-gallery';\r\n }\r\n\r\n // Image file extensions fallback\r\n const imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg'];\r\n if (imageExtensions.some(ext => name.endsWith(ext))) {\r\n return 'icon-gallery';\r\n }\r\n\r\n // Default icon for non-image files\r\n return 'icon-van';\r\n }\r\n}\r\n","<div class=\"file-row\">\r\n\r\n <!-- LEFT SECTION: Thumbnail + filename -->\r\n <div class=\"thumbnail-filename-wrapper\">\r\n <div class=\"file-thumb\">\r\n <dso-icon \r\n [iconName]=\"getFileIcon(item)\"\r\n size=\"small\"\r\n class=\"thumb-icon\">\r\n </dso-icon>\r\n </div>\r\n\r\n <div class=\"file-info\">\r\n <div class=\"file-name\">{{ item.file.name }}</div>\r\n <div class=\"file-size\">{{ formatSize(item.file.size) }}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- MIDDLE SECTION: Progress or status -->\r\n <div class=\"filecontent-loader-wrapper\">\r\n \r\n <!-- Progress bar -->\r\n <div class=\"file-progress\" *ngIf=\"!item.hideProgressBar\">\r\n <dso-progress-bar\r\n [value]=\"\r\n item.status === 'uploading' ? item.progress :\r\n item.status === 'completed' ? 100 :\r\n null\r\n \"\r\n [color]=\"item.status === 'completed' ? 'success' : 'primary'\"\r\n ></dso-progress-bar>\r\n </div>\r\n\r\n <!-- Status text -->\r\n <div class=\"file-status\" *ngIf=\"item.hideProgressBar\">\r\n\r\n <!-- Success -->\r\n <div *ngIf=\"item.status === 'completed'\" class=\"status success\">\r\n <dso-icon iconName=\"icon-van\" size=\"small\"></dso-icon>\r\n <span>Uploaded</span>\r\n </div>\r\n\r\n <!-- Failed -->\r\n <div *ngIf=\"item.status === 'failed'\" class=\"status error\">\r\n <dso-icon iconName=\"icon-center-align\" size=\"small\"></dso-icon>\r\n <span>Upload failed</span>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- RIGHT SECTION: Action buttons -->\r\n <div class=\"file-actions\">\r\n\r\n <!-- Uploading -->\r\n <ng-container *ngIf=\"item.status === 'uploading'\">\r\n <dso-button\r\n btnLabel=\"Cancel\"\r\n btnType=\"text\"\r\n (onClick)=\"cancel.emit()\">\r\n </dso-button>\r\n </ng-container>\r\n\r\n <!-- Failed -->\r\n <ng-container *ngIf=\"item.status === 'failed'\">\r\n <dso-button\r\n btnLabel=\"Retry\"\r\n btnType=\"text\"\r\n (onClick)=\"retry.emit()\">\r\n </dso-button>\r\n\r\n <dso-button\r\n btnLabel=\"Remove\"\r\n btnType=\"text\"\r\n (onClick)=\"remove.emit()\">\r\n </dso-button>\r\n </ng-container>\r\n\r\n <!-- Completed -->\r\n <ng-container *ngIf=\"item.status === 'completed'\">\r\n <dso-button\r\n btnLabel=\"Remove\"\r\n btnType=\"text\"\r\n (onClick)=\"remove.emit()\">\r\n </dso-button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n</div>\r\n","// upload-simulator.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { UploadItem } from './upload-item.model';\r\n\r\n/**\r\n * UploadSimulatorService\r\n * -----------------------\r\n * This service simulates an upload process.\r\n * It is ONLY for demo and UI development. Later, it can\r\n * be replaced with a real HTTP upload service without\r\n * changing the UI components.\r\n *\r\n * How it works:\r\n * - Every 300ms, a timer increases the upload progress.\r\n * - Progress increases by a random amount (to look realistic).\r\n * - When it reaches 100%, the upload is marked complete.\r\n * - There is a 10% chance the upload \"fails\" to simulate errors.\r\n * - If an upload is cancelled, the interval stops immediately.\r\n *\r\n * This pattern mimics:\r\n * - progress events (like HttpClient upload events)\r\n * - cancellation (AbortController / unsubscribe)\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UploadSimulatorService {\r\n\r\n /**\r\n * Simulates uploading a single file.\r\n *\r\n * @param item The UploadItem being uploaded\r\n * @param onProgress Callback fired whenever progress changes\r\n * @param onComplete Callback fired when upload reaches 100%\r\n * @param onError Callback fired when upload \"fails\"\r\n */\r\n simulateUpload(\r\n item: UploadItem,\r\n onProgress: (value: number) => void,\r\n onComplete: () => void,\r\n onError: () => void\r\n ) {\r\n console.log('%c[SIMULATOR] Starting upload:', 'color: green;', item.file.name);\r\n\r\n let progress = 0;\r\n\r\n // This interval simulates a real upload stream\r\n const interval = setInterval(() => {\r\n\r\n // If cancelled externally, we stop updating\r\n if (item.status === 'cancelled') {\r\n console.log('%c[SIMULATOR] Upload CANCELLED:', 'color: orange;', item.file.name);\r\n clearInterval(interval);\r\n return;\r\n }\r\n\r\n // 🔼 Simulate uploading by adding random progress increments\r\n const increment = Math.random() * 15 + 5;\r\n progress += increment;\r\n\r\n console.log(`%c[SIMULATOR] ${item.file.name} +${increment.toFixed(1)}% → ${progress.toFixed(1)}%`,\r\n 'color: #1e90ff;');\r\n\r\n // 🟦 If progress reaches 100%, finalize upload\r\n if (progress >= 100) {\r\n progress = 100;\r\n onProgress(progress);\r\n clearInterval(interval);\r\n\r\n console.log('%c[SIMULATOR] Upload reached 100% for ' + item.file.name,\r\n 'color: green; font-weight: bold;');\r\n\r\n // 🔥 50% chance to simulate failure\r\n const randomFail = Math.random() < 0.5;\r\n\r\n if (randomFail) {\r\n console.log('%c[SIMULATOR] Simulated FAILURE for ' + item.file.name,\r\n 'color: red; font-weight: bold;');\r\n onError();\r\n } else {\r\n console.log('%c[SIMULATOR] Upload SUCCESS for ' + item.file.name,\r\n 'color: limegreen; font-weight: bold;');\r\n onComplete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Emit progress update\r\n onProgress(progress);\r\n\r\n }, 300); // runs every 300ms like a real upload tick\r\n }\r\n}\r\n","// file-upload-multi.component.ts\r\nimport { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UploadItem } from './upload-item.model';\r\nimport { UploadSimulatorService } from './upload-simulator.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { FileUploadItemComponent } from '../file-upload-items/file-upload-items.component';\r\n\r\n/**\r\n * FileUploadMultiComponent\r\n * -------------------------\r\n * This component handles:\r\n * - Drag & drop file uploads\r\n * - Selecting multiple files through <input type=\"file\">\r\n * - Upload progress per file\r\n * - Cancelling an upload\r\n * - Retrying failed uploads\r\n * - Removing items from the queue\r\n *\r\n * UploadSimulatorService is used to mimic real upload behavior.\r\n * Later, you can replace it with a real HTTP upload service.\r\n */\r\n@Component({\r\n selector: 'dso-file-upload-multi',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent, FileUploadItemComponent],\r\n templateUrl: './file-upload-multiple.component.html',\r\n styleUrls: ['./file-upload-multiple.component.scss']\r\n})\r\nexport class FileUploadMultiComponent {\r\n\r\n // ngOnInit() {\r\n // // Fake completed file\r\n // this.uploadQueue.push({\r\n // file: new File([\"\"], \"example-image.jpg\", { type: \"image/jpeg\" }),\r\n // progress: 100,\r\n // status: \"completed\",\r\n // hideProgressBar: true\r\n // });\r\n\r\n // // Fake failed file\r\n // this.uploadQueue.push({\r\n // file: new File([\"\"], \"broken-file.pdf\", { type: \"application/pdf\" }),\r\n // progress: null,\r\n // status: \"failed\",\r\n // hideProgressBar: true\r\n // });\r\n\r\n // // Fake uploading file\r\n // this.uploadQueue.push({\r\n // file: new File([\"\"], \"uploading.png\", { type: \"image/png\" }),\r\n // progress: 40,\r\n // status: \"uploading\",\r\n // hideProgressBar: false\r\n // });\r\n // }\r\n\r\n\r\n /** All files being managed (uploaded, uploading, failed, completed). */\r\n uploadQueue: UploadItem[] = [];\r\n\r\n /** True while user drags a file over the drop zone. */\r\n isDragOver = false;\r\n\r\n constructor(private sim: UploadSimulatorService) {\r\n // console.log('%c[COMPONENT] FileUploadMultiComponent initialized', 'color: purple;');\r\n }\r\n\r\n /* ===========================================================\r\n * DRAG & DROP EVENTS\r\n * =========================================================== */\r\n\r\n onDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n this.isDragOver = true;\r\n // console.log('%c[DRAG] Dragging over drop zone...', 'color: #00aaff;');\r\n }\r\n\r\n onDragLeave(event: DragEvent) {\r\n this.isDragOver = false;\r\n // console.log('%c[DRAG] Drag left drop zone', 'color: #888;');\r\n }\r\n\r\n onDrop(event: DragEvent) {\r\n event.preventDefault();\r\n this.isDragOver = false;\r\n\r\n // console.log('%c[DRAG] Files dropped', 'color: #00cc66;');\r\n\r\n if (event.dataTransfer?.files) {\r\n // console.log('[DRAG] Dropped files:', event.dataTransfer.files);\r\n this.handleFiles(event.dataTransfer.files);\r\n }\r\n }\r\n\r\n /* ===========================================================\r\n * FILE INPUT SELECT\r\n * =========================================================== */\r\n\r\n onFileSelected(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n\r\n if (input.files) {\r\n // console.log('%c[INPUT] Files selected:', 'color: #0099ff;', input.files);\r\n this.handleFiles(input.files);\r\n\r\n // Clears <input> so user can re-select same file\r\n input.value = '';\r\n }\r\n }\r\n\r\n /* ===========================================================\r\n * PROCESSING NEWLY ADDED FILES\r\n * =========================================================== */\r\n\r\n handleFiles(fileList: FileList) {\r\n // console.log('%c[FILES] Processing new files...', 'color: #ffaa00;');\r\n\r\n Array.from(fileList).forEach(file => {\r\n // console.log(`%c[FILES] Added: ${file.name} (${file.size} bytes)`, 'color: #ffaa00;');\r\n\r\n const item: UploadItem = {\r\n file,\r\n progress: 0,\r\n status: 'queued'\r\n };\r\n\r\n this.uploadQueue.push(item);\r\n\r\n this.startUpload(item);\r\n });\r\n }\r\n\r\n /* ===========================================================\r\n * UPLOAD LOGIC\r\n * =========================================================== */\r\n\r\n startUpload(item: UploadItem) {\r\n // console.log(`%c[UPLOAD] Starting upload for ${item.file.name}`, 'color: #00cc99;');\r\n\r\n item.status = 'uploading';\r\n item.progress = 0;\r\n\r\n this.sim.simulateUpload(\r\n item,\r\n\r\n // ---- onProgress callback ----\r\n (progress) => {\r\n item.progress = progress;\r\n // console.log(`%c[UPLOAD] ${item.file.name}: ${progress.toFixed(1)}%`, 'color: #0099ff;');\r\n },\r\n\r\n // ---- onComplete callback ----\r\n () => {\r\n item.status = 'completed';\r\n item.progress = 100;\r\n \r\n // Hide progress bar after a very small delay (100–300ms)\r\n setTimeout(() => item.hideProgressBar = true, 300);\r\n // console.log(`%c[UPLOAD] COMPLETED: ${item.file.name}`, 'color: green; font-weight: bold;');\r\n },\r\n\r\n // ---- onError callback ----\r\n () => {\r\n item.status = 'failed';\r\n item.progress = null;\r\n\r\n // Hide progress bar so status text can show\r\n setTimeout(() => item.hideProgressBar = true, 300);\r\n // console.log(`%c[UPLOAD] FAILED: ${item.file.name}`, 'color: red; font-weight: bold;');\r\n }\r\n );\r\n }\r\n\r\n onDropZoneClick(fileInput: HTMLInputElement) {\r\n // Prevent click if user is dragging files over the drop-zone\r\n if (this.isDragOver) return;\r\n\r\n console.log('%c[CLICK] Drop zone clicked → opening file dialog', 'color: #0077ff;');\r\n fileInput.click();\r\n}\r\n\r\nonBrowseButtonClick(event: Event, fileInput: HTMLInputElement) {\r\n event.stopPropagation(); // stops click from bubbling to drop-zone\r\n // console.log('%c[BUTTON] Browse clicked → opening file dialog', 'color: #8844ff;');\r\n fileInput.click();\r\n}\r\n\r\n /* ===========================================================\r\n * BUTTON ACTIONS (CANCEL / RETRY / REMOVE)\r\n * =========================================================== */\r\n\r\n cancelUpload(item: UploadItem) {\r\n // console.log(`%c[CANCEL] Cancelling ${item.file.name}`, 'color: orange; font-weight: bold;');\r\n // item.status = 'cancelled';\r\n // item.progress = null;\r\n this.removeItem(item);\r\n\r\n }\r\n\r\n retryUpload(item: UploadItem) {\r\n // console.log('[RETRY] Restarting upload for', item.file.name);\r\n\r\n // Reset state\r\n item.status = 'queued';\r\n item.progress = 0;\r\n item.hideProgressBar = false; // <-- IMPORTANT\r\n\r\n // Start upload again\r\n this.startUpload(item);\r\n }\r\n\r\n removeItem(item: UploadItem) {\r\n // console.log(`%c[REMOVE] Removing ${item.file.name}`, 'color: gray;');\r\n this.uploadQueue = this.uploadQueue.filter(i => i !== item);\r\n }\r\n\r\n /* ===========================================================\r\n * UTILITY FUNCTIONS\r\n * =========================================================== */\r\n\r\n /**\r\n * Converts bytes → human readable sizes.\r\n */\r\n formatSize(size: number): string {\r\n if (size < 1024) return size + ' B';\r\n if (size < 1024 * 1024) return (size / 1024).toFixed(1) + ' KB';\r\n return (size / (1024 * 1024)).toFixed(1) + ' MB';\r\n }\r\n\r\n // getThumbnail(item: UploadItem): string | null {\r\n // const file = item.file;\r\n\r\n // // If actual image → return preview URL\r\n // if (file.type.startsWith('image/')) {\r\n // return URL.createObjectURL(file);\r\n // }\r\n\r\n // // Otherwise return an icon path depending on type\r\n // if (file.type === 'application/pdf') return 'assets/icons/pdf.svg';\r\n // if (file.type.includes('word')) return 'assets/icons/doc.svg';\r\n // if (file.type.includes('spreadsheet')) return 'assets/icons/xlsx.svg';\r\n\r\n // // default icon\r\n // return 'assets/icons/file.svg';\r\n // }\r\n\r\n getThumbnail(item: UploadItem): string | null {\r\n const file = item.file;\r\n\r\n // Image preview for image file types\r\n if (file.type.startsWith('image/')) {\r\n return URL.createObjectURL(file);\r\n }\r\n\r\n // Not an image → no thumbnail\r\n return null;\r\n}\r\n\r\n getFileIcon(item: UploadItem): string {\r\n const file = item.file;\r\n const type = file.type.toLowerCase();\r\n const name = file.name.toLowerCase();\r\n\r\n console.log('%c[DEBUG] File name:', 'color: blue;', file.name);\r\n console.log('%c[DEBUG] File type:', 'color: green;', file.type);\r\n\r\n // Check MIME type first\r\n if (type.startsWith('image/')) {\r\n console.log('%c[DEBUG] Detected as image by MIME type', 'color: purple;');\r\n return 'icon-gallery';\r\n }\r\n\r\n // Fallback: check extension for image types including SVG\r\n const imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg'];\r\n if (imageExtensions.some(ext => name.endsWith(ext))) {\r\n console.log('%c[DEBUG] Detected as image by extension', 'color: orange;');\r\n return 'icon-gallery';\r\n }\r\n\r\n console.log('%c[DEBUG] Defaulting to document icon', 'color: red;');\r\n return 'icon-van';\r\n }\r\n}\r\n","<div class=\"upload-container\">\r\n\r\n <!-- DRAG & DROP AREA -->\r\n <div\r\n class=\"drop-zone\"\r\n [class.drag-over]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n (click)=\"onDropZoneClick(fileInput)\"\r\n >\r\n\r\n <dso-button \r\n style=\"padding: 0; \"\r\n btnLabel=\"Select files\"\r\n btnType=\"link\"\r\n (onClick)=\"onBrowseButtonClick($event, fileInput)\">\r\n </dso-button>\r\n or drag & drop files \r\n <input \r\n type=\"file\" \r\n multiple \r\n hidden \r\n #fileInput \r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </div>\r\n\r\n <!-- FILE LIST -->\r\n <div class=\"file-list\" *ngIf=\"uploadQueue.length > 0\">\r\n\r\n <dso-file-item\r\n *ngFor=\"let item of uploadQueue\"\r\n [item]=\"item\"\r\n (retry)=\"retryUpload(item)\"\r\n (remove)=\"removeItem(item)\"\r\n (cancel)=\"cancelUpload(item)\"\r\n ></dso-file-item>\r\n\r\n\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { UploadItem } from '../file-upload-multiple/upload-item.model';\r\nimport { UploadSimulatorService } from '../file-upload-multiple/upload-simulator.service';\r\nimport { FileUploadItemComponent } from '../file-upload-items/file-upload-items.component';\r\n\r\n@Component({\r\n selector: 'dso-file-upload-single',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ButtonComponent,\r\n FileUploadItemComponent\r\n ],\r\n templateUrl: './file-upload-single.component.html',\r\n styleUrls: ['./file-upload-single.component.scss']\r\n})\r\nexport class FileUploadSingleComponent {\r\n\r\n /** Button label text */\r\n @Input() btnLabel: string = 'Choose File';\r\n \r\n /** Allowed file types, e.g. \".png,.jpg,.pdf\" */\r\n @Input() accept: string = '';\r\n \r\n /** Emit the selected file to parent component */\r\n @Output() fileSelected = new EventEmitter<File>();\r\n\r\n /** The currently uploaded file shown in the UI */\r\n item: UploadItem | null = null;\r\n\r\n constructor(private sim: UploadSimulatorService) {}\r\n\r\n /** Trigger the hidden file input click */\r\n onButtonClick(input: HTMLInputElement) {\r\n input.click();\r\n }\r\n\r\n /** Handle file selection from input */\r\n onFileChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) return;\r\n\r\n const file = input.files[0];\r\n\r\n // Wrap file in UploadItem structure (same as multi-upload)\r\n this.item = {\r\n file,\r\n progress: 0,\r\n status: 'queued',\r\n hideProgressBar: false\r\n };\r\n\r\n // Emit file to parent\r\n this.fileSelected.emit(file);\r\n\r\n // Start simulated upload\r\n this.startUpload();\r\n\r\n // Reset input so user can pick same file again\r\n input.value = '';\r\n }\r\n\r\n /** Start upload simulation */\r\n startUpload() {\r\n if (!this.item) return;\r\n\r\n const item = this.item;\r\n item.status = 'uploading';\r\n item.progress = 0;\r\n\r\n this.sim.simulateUpload(\r\n item,\r\n\r\n // onProgress callback\r\n (progress) => {\r\n item.progress = progress;\r\n },\r\n\r\n // onComplete callback\r\n () => {\r\n item.status = 'completed';\r\n item.progress = 100;\r\n setTimeout(() => item.hideProgressBar = true, 300);\r\n },\r\n\r\n // onError callback\r\n () => {\r\n item.status = 'failed';\r\n item.progress = null;\r\n setTimeout(() => item.hideProgressBar = true, 300);\r\n }\r\n );\r\n }\r\n\r\n /** Retry failed upload */\r\n retry() {\r\n if (!this.item) return;\r\n\r\n this.item.status = 'queued';\r\n this.item.progress = 0;\r\n this.item.hideProgressBar = false;\r\n this.startUpload();\r\n }\r\n\r\n /** Cancel or remove the file from UI */\r\n clearFile() {\r\n this.item = null;\r\n }\r\n}\r\n","<div class=\"file-upload-single\">\r\n\r\n <!-- Hidden file input -->\r\n <input\r\n type=\"file\"\r\n #fileInput\r\n [accept]=\"accept\"\r\n (change)=\"onFileChange($event)\"\r\n hidden\r\n />\r\n\r\n <!-- Main button -->\r\n <dso-button\r\n [btnLabel]=\"btnLabel\"\r\n btnType=\"filled\"\r\n (onClick)=\"onButtonClick(fileInput)\"\r\n ></dso-button>\r\n\r\n <!-- Render file info using shared reusable component -->\r\n <dso-file-item\r\n *ngIf=\"item\"\r\n [item]=\"item\"\r\n (cancel)=\"clearFile()\"\r\n (remove)=\"clearFile()\"\r\n (retry)=\"retry()\"\r\n ></dso-file-item>\r\n\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dso-input-text',\r\n standalone: true,\r\n templateUrl: './input-text.component.html',\r\n styleUrls: ['./input-text.component.scss'],\r\n imports: [ CommonModule, FormsModule ]\r\n})\r\nexport class TextInputComponent {\r\n // -------------------------------\r\n // INPUT PROPERTIES\r\n // -------------------------------\r\n @Input() inputLabel: string = ''; // Optional label displayed above input\r\n @Input() value: string = ''; // Two-way bound input value\r\n @Input() placeholder: string = 'Input value'; // Placeholder text\r\n @Input() type: string = ''; // Input type (text, email, etc.)\r\n @Input() isDisabled: boolean = false; // Disable the input\r\n @Input() helperText: string = ''; // Optional helper text below input\r\n @Input() errorText: string = ''; // Optional error message\r\n @Input() enableValidation: boolean = true; // Flag to enable/disable validation\r\n @Input() maxLength: number = 80; // Maximum characters allowed\r\n\r\n // -------------------------------\r\n // OUTPUT EVENTS\r\n // -------------------------------\r\n @Output() valueChange = new EventEmitter<string>(); // Emit input changes to parent\r\n\r\n // -------------------------------\r\n // INTERNAL STATE\r\n // -------------------------------\r\n isTouched: boolean = false; // Tracks if user has interacted with input\r\n isInvalid: boolean = false; // True if validation fails\r\n charCount: number = 0; // Tracks current character count\r\n isExceeded: boolean = false; // True if charCount exceeds maxLength\r\n\r\n // -------------------------------\r\n // EVENT HANDLERS\r\n // -------------------------------\r\n onInputChange(event: any): void {\r\n this.value = event.target.value; // Update value\r\n const inputValue = (event.target as HTMLTextAreaElement).value;\r\n const charCount = inputValue.length;\r\n\r\n // Track if max length exceeded\r\n this.isExceeded = charCount > this.maxLength;\r\n\r\n this.isTouched = true; // Mark input as touched\r\n this.valueChange.emit(this.value); // Notify parent\r\n this.checkValidity(); // Validate input\r\n }\r\n\r\n onBlur(): void {\r\n this.isTouched = true; // Input lost focus → mark as touched\r\n this.checkValidity(); // Validate when blurred\r\n }\r\n\r\n // -------------------------------\r\n // HELPER METHODS\r\n // -------------------------------\r\n getCharCountStyle() {\r\n const charCount = this.value.length;\r\n\r\n if (this.isExceeded) {\r\n return 'char-count-error'; // Apply error style if limit exceeded\r\n }\r\n\r\n // Optional: style differently if more than 50% of maxLength used\r\n if (charCount > this.maxLength / 2) {\r\n return '';\r\n }\r\n\r\n return ''; // Default style\r\n }\r\n\r\n checkValidity(): void {\r\n // If touched and value is empty, mark as invalid\r\n this.isInvalid = this.isTouched && !this.value.trim();\r\n }\r\n}\r\n","<div class=\"input-container\">\r\n <!-- Optional label -->\r\n <div class=\"text-wrapper\">\r\n <!-- Optional label -->\r\n <label *ngIf=\"inputLabel\">\r\n {{ inputLabel }}\r\n </label> \r\n <!-- Character count inside the container -->\r\n <div class=\"char-count\" [ngClass]=\"getCharCountStyle()\" *ngIf=\"maxLength\">\r\n <span>\r\n {{ value.length }} \r\n </span>\r\n / {{ maxLength }}\r\n </div>\r\n </div> \r\n <input\r\n [type]=\"type\" \r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"onInputChange($event)\" \r\n (blur)=\"onBlur()\"\r\n [disabled]=\"isDisabled\"\r\n [class.disabled]=\"isDisabled\"\r\n [class.invalid]=\"(isInvalid && isTouched && enableValidation) || isExceeded\" \r\n />\r\n\r\n <!-- Helper Text \r\n This condition checks if the helper text should be displayed:\r\n - If the character limit is **not exceeded** and validation is **not enabled**, show the helper text.\r\n - If validation **is enabled**, show the helper text only if the input is **not invalid** and `helperText` is provided.\r\n - If the character limit is exceeded, the helper text will be replaced with an error message. -->\r\n <div *ngIf=\"!isExceeded && !enableValidation || ((!isInvalid && helperText) && !isExceeded)\" class=\"helper-text\">\r\n {{ helperText }}\r\n </div>\r\n\r\n <!-- Specified Error Text -->\r\n <div *ngIf=\"isInvalid && isTouched && enableValidation\" class=\"error-message\">\r\n {{ errorText }}\r\n </div>\r\n\r\n <!-- Error message if character limit exceeded -->\r\n <div *ngIf=\"isExceeded\" class=\"error-message\">\r\n Character limit exceeded.\r\n </div>\r\n</div>\r\n\r\n","import { Component, Input, Output, EventEmitter, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { DropdownListComponent } from '../dropdown-list/dropdown-list.component';\r\n\r\n@Component({\r\n selector: 'dso-pagination',\r\n standalone: true,\r\n imports: [ButtonComponent, CommonModule, DropdownListComponent, FormsModule],\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss']\r\n})\r\nexport class PaginationComponent implements OnChanges {\r\n\r\n /* =======================\r\n Inputs (controlled state)\r\n ======================= */\r\n\r\n @Input() page = 1;\r\n @Input() pageSize = 10;\r\n @Input() totalItems = 0;\r\n @Input() pageSizes: number[] = [10, 20, 50, 100];\r\n\r\n /* =======================\r\n Outputs (user intent)\r\n ======================= */\r\n\r\n @Output() pageChange = new EventEmitter<number>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /* =======================\r\n Internal UI state\r\n ======================= */\r\n\r\n pageNumbers: number[] = [];\r\n jumpPageNumber: number | null = null;\r\n pageSizeOptions: { label: string; value: number }[] = [];\r\n\r\n /* =======================\r\n Lifecycle\r\n ======================= */\r\n\r\n ngOnChanges(): void {\r\n this.buildPageSizeOptions();\r\n this.generatePageNumbers();\r\n }\r\n\r\n /* =======================\r\n Derived values\r\n ======================= */\r\n\r\n get totalPages(): number {\r\n return Math.max(Math.ceil(this.totalItems / this.pageSize), 1);\r\n }\r\n\r\n get startItem(): number {\r\n return this.totalItems === 0 ? 0 : (this.page - 1) * this.pageSize + 1;\r\n }\r\n\r\n get endItem(): number {\r\n return Math.min(this.page * this.pageSize, this.totalItems);\r\n }\r\n\r\n /* =======================\r\n UI helpers\r\n ======================= */\r\n\r\n private buildPageSizeOptions(): void {\r\n this.pageSizeOptions = this.pageSizes.map(size => ({\r\n label: `${size} per page`,\r\n value: size\r\n }));\r\n }\r\n\r\n private generatePageNumbers(): void {\r\n const total = this.totalPages;\r\n let start = Math.max(this.page - 2, 1);\r\n let end = Math.min(start + 4, total);\r\n\r\n start = Math.max(end - 4, 1);\r\n\r\n this.pageNumbers = [];\r\n for (let i = start; i <= end; i++) {\r\n this.pageNumbers.push(i);\r\n }\r\n }\r\n\r\n /* =======================\r\n Navigation (emit only)\r\n ======================= */\r\n\r\n goToPage(page: number): void {\r\n if (page >= 1 && page <= this.totalPages && page !== this.page) {\r\n this.pageChange.emit(page);\r\n }\r\n }\r\n\r\n goFirst(): void {\r\n this.goToPage(1);\r\n }\r\n\r\n goPrevious(): void {\r\n this.goToPage(this.page - 1);\r\n }\r\n\r\n goNext(): void {\r\n this.goToPage(this.page + 1);\r\n }\r\n\r\n goLast(): void {\r\n this.goToPage(this.totalPages);\r\n }\r\n\r\n onPageSizeChange(newSize: number): void {\r\n this.pageSizeChange.emit(newSize);\r\n }\r\n\r\n jumpToPage(): void {\r\n if (!this.jumpPageNumber) return;\r\n\r\n const page = Math.max(1, Math.min(this.jumpPageNumber, this.totalPages));\r\n this.pageChange.emit(page);\r\n this.jumpPageNumber = null;\r\n }\r\n}\r\n","<div class=\"pagination-container\">\r\n\r\n <!-- First / Previous -->\r\n <dso-button\r\n btnLabel=\"«\"\r\n btnType=\"outlined\"\r\n [isDisabled]=\"page === 1\"\r\n (onClick)=\"goFirst()\">\r\n </dso-button>\r\n\r\n <dso-button\r\n btnLabel=\"‹\"\r\n btnType=\"outlined\"\r\n [isDisabled]=\"page === 1\"\r\n (onClick)=\"goPrevious()\">\r\n </dso-button>\r\n\r\n <!-- Page numbers -->\r\n <div class=\"page-buttons\">\r\n <ng-container *ngFor=\"let p of pageNumbers\">\r\n <dso-button\r\n [btnLabel]=\"p.toString()\"\r\n btnType=\"ghost\"\r\n btnSize=\"mdBtn\"\r\n [isDisabled]=\"page === p\"\r\n [isActive]=\"page === p\"\r\n (onClick)=\"goToPage(p)\">\r\n </dso-button>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Next / Last -->\r\n <dso-button\r\n btnLabel=\"›\"\r\n btnType=\"outlined\"\r\n [isDisabled]=\"page === totalPages\"\r\n (onClick)=\"goNext()\">\r\n </dso-button>\r\n\r\n <dso-button\r\n btnLabel=\"»\"\r\n btnType=\"outlined\"\r\n [isDisabled]=\"page === totalPages\"\r\n (onClick)=\"goLast()\">\r\n </dso-button>\r\n\r\n <!-- Page size -->\r\n <dso-dropdown-list\r\n [options]=\"pageSizeOptions\"\r\n [value]=\"pageSize\"\r\n (selectionChange)=\"onPageSizeChange($event)\">\r\n </dso-dropdown-list>\r\n\r\n <!-- Range info -->\r\n <span class=\"range-info\">\r\n Showing {{ startItem }}–{{ endItem }} of {{ totalItems }} results\r\n </span>\r\n\r\n <!-- Jump to page -->\r\n <div class=\"jump-to-page\">\r\n <input\r\n type=\"number\"\r\n min=\"1\"\r\n [(ngModel)]=\"jumpPageNumber\"\r\n (keydown.enter)=\"jumpToPage()\" />\r\n\r\n <dso-button\r\n btnLabel=\"Go\"\r\n btnType=\"ghost\"\r\n btnSize=\"mdBtn\"\r\n [isDisabled]=\"!jumpPageNumber\"\r\n (onClick)=\"jumpToPage()\">\r\n </dso-button>\r\n </div>\r\n\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dso-radio',\r\n standalone: true,\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n imports: [ FormsModule, CommonModule ]\r\n})\r\nexport class RadioComponent {\r\n @Input() label?: string = 'Radio label';\r\n @Input() value!: string;\r\n @Input() name!: string; // for grouping radios\r\n @Input() disabled = false;\r\n @Input() error = false;\r\n @Input() isChecked: boolean = false;\r\n\r\n @Output() change = new EventEmitter<string>();\r\n\r\n \r\n // Method to handle change in radio state\r\n toggleRadio(event: Event) {\r\n // console.log(this.value);\r\n event.stopPropagation(); \r\n this.change.emit(this.value); // Emit the updated value to the parent\r\n }\r\n\r\n}\r\n","<label class=\"radio-wrapper\" \r\n[class.disabled]=\"disabled\" \r\n[class.error]=\"error\">\r\n <input\r\n class=\"radio-input\"\r\n type=\"radio\"\r\n [attr.name]=\"name\"\r\n [value]=\"value\"\r\n [checked]=\"isChecked\"\r\n [disabled]=\"disabled\"\r\n (change)=\"toggleRadio($event)\"\r\n />\r\n <span class=\"custom-radio\"></span>\r\n <span *ngIf=\"label\" class=\"radio-label\">{{ label }}</span>\r\n</label>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'dso-single-select',\r\n standalone: true,\r\n templateUrl: './select-dropdown.component.html',\r\n styleUrls: ['./select-dropdown.component.scss'],\r\n imports: [FormsModule, CommonModule, ButtonComponent, IconComponent],\r\n})\r\nexport class SingleSelectComponent implements OnInit, OnDestroy {\r\n // Reference to the dropdown <ul> for scroll management\r\n @ViewChild('dropdownList') dropdownListRef!: ElementRef<HTMLUListElement>;\r\n\r\n // Inputs for configuration & data binding\r\n @Input() options: { value: string; label: string }[] = [];\r\n @Input() dropdownPosition: 'top' | 'bottom' = 'bottom';\r\n @Input() placeholder: string = 'Select an option';\r\n @Input() inputTextLabel: string = 'Dropdown Title'; // Optional input label\r\n @Input() isDisabled: boolean = false; // Controls disabled state\r\n @Input() enableValidation: boolean = true; // Enables validation checks\r\n @Input() helperText?: string; // Optional helper text\r\n @Input() selectIconName: string | null = null; // Icon name/class for clear button\r\n @Input() errorText: string = 'This field is required'; // Validation error text\r\n\r\n // Output event emitter to notify selection changes\r\n @Output() selectionChange: EventEmitter<any> = new EventEmitter();\r\n\r\n // Internal state properties\r\n selectedOption: any = null; // Currently selected option object\r\n searchQuery: string = ''; // Search input value\r\n filteredOptions: any[] = []; // Options filtered based on search\r\n isOpen: boolean = false; // Dropdown open/close state\r\n isInvalid: boolean = false; // Validation invalid flag\r\n isExceeded: boolean = false; // (Optional) exceeded limit flag, currently unused\r\n hasOpened: boolean = false;\r\n hasInteracted: boolean = false; // (Optional) touched flag, currently unused\r\n\r\n lastScrollTop: number = 0; // Stores last scroll position of dropdown list\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n /**\r\n * //Handles dropdown scroll events to persist scroll position\r\n */\r\n onDropdownScroll() {\r\n if (this.dropdownListRef) {\r\n this.lastScrollTop = this.dropdownListRef.nativeElement.scrollTop;\r\n console.log(`Dropdown scrollTop updated to: ${this.lastScrollTop}`);\r\n } else {\r\n console.warn('dropdownListRef is undefined on scroll');\r\n }\r\n }\r\n\r\n /**\r\n * Detects clicks outside of the component to close the dropdown if open\r\n */\r\n @HostListener('document:click', ['$event'])\r\n onOutsideClick(event: MouseEvent) {\r\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n if (this.isOpen) {\r\n this.isOpen = false; // Close dropdown if clicked outside\r\n console.log('Dropdown closed via outside click');\r\n this.hasInteracted = true;\r\n\r\n // Validate only if nothing is selected\r\n if (this.enableValidation && !this.selectedOption) {\r\n this.isInvalid = true;\r\n \r\n console.log('Validation failed: no option selected after outside click');\r\n } else {\r\n this.isInvalid = false;\r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n /**\r\n * Initialize component data on creation\r\n */\r\n ngOnInit() {\r\n // Sample hardcoded options (can be overridden via @Input)\r\n this.options = [\r\n { value: '1', label: 'Apple' },\r\n { value: '2', label: 'Banana' },\r\n { value: '3', label: 'Cherry' },\r\n { value: '4', label: 'Date' },\r\n { value: '5', label: 'Grapes' },\r\n { value: '6', label: 'AAAA' },\r\n { value: '7', label: 'BBBB' },\r\n { value: '8', label: 'CCCC' },\r\n { value: '9', label: 'DDDD' },\r\n ];\r\n\r\n // Show all options initially\r\n this.filteredOptions = this.options;\r\n }\r\n\r\n ngOnDestroy() {\r\n // Placeholder for any cleanup logic if needed\r\n }\r\n\r\n /**\r\n * Handles click on the main select box\r\n * Prevents opening if disabled\r\n */\r\n onSelectClick(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.isDisabled) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this.toggleDropdown(event);\r\n }\r\n\r\n /**\r\n * Toggles dropdown open/close state and restores scroll position if opening\r\n */\r\n toggleDropdown(event: MouseEvent) {\r\n if (this.isDisabled) {\r\n event.stopPropagation();\r\n // console.warn('Dropdown is disabled, toggle prevented.');\r\n return;\r\n }\r\n\r\n this.isOpen = !this.isOpen;\r\n this.hasInteracted = true;\r\n // console.log(`Dropdown toggled. isOpen: ${this.isOpen}`);\r\n\r\n if (this.isOpen) {\r\n this.hasOpened = true;\r\n setTimeout(() => {\r\n if (this.dropdownListRef) {\r\n // console.log(`Restoring scrollTop to: ${this.lastScrollTop}`);\r\n this.dropdownListRef.nativeElement.scrollTop = this.lastScrollTop;\r\n console.log('Scroll Restored');\r\n } \r\n });\r\n }\r\n else {\r\n // Validate on close\r\n this.hasInteracted = true;\r\n console.log('User has interacted and closed the dropdown');\r\n \r\n if (this.enableValidation && !this.selectedOption) {\r\n this.isInvalid = true;\r\n console.log('No option selected — validation failed');\r\n } else {\r\n this.isInvalid = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Filters dropdown options based on current search query\r\n */\r\n filterOptions() {\r\n const query = this.searchQuery.toLowerCase();\r\n this.filteredOptions = this.options.filter((option) =>\r\n option.label.toLowerCase().includes(query)\r\n );\r\n }\r\n\r\n /**\r\n * Handles option selection:\r\n * - Updates selected option\r\n * - Validates\r\n * - Emits selection change event\r\n * - Closes dropdown\r\n */\r\n selectOption(event: Event, option: any) {\r\n event.stopPropagation();\r\n this.selectedOption = option;\r\n this.isInvalid = false;\r\n this.selectionChange.emit(this.selectedOption);\r\n this.isOpen = false;\r\n }\r\n\r\n /**\r\n * Clears the selected option and resets validation and scroll\r\n */\r\n clearSelection(event: MouseEvent) {\r\n // console.log('Clear selection triggered');\r\n // this.hasInteracted = false;\r\n this.selectedOption = null;\r\n this.searchQuery = ''; // Clear the search input field as well\r\n this.filteredOptions = this.options; // Show all options again\r\n this.isInvalid = false;\r\n this.lastScrollTop = 0;\r\n this.selectionChange.emit(this.selectedOption);\r\n }\r\n\r\n /**\r\n * Checks validity based on current selection if validation is enabled\r\n */\r\n checkValidity() {\r\n if (this.enableValidation) {\r\n this.isInvalid = !this.selectedOption;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the icon path if icon name is provided\r\n */\r\n getIconPath(): string {\r\n if (this.selectIconName) {\r\n return `./assets/icons/${this.selectIconName}.svg`;\r\n }\r\n return '';\r\n }\r\n\r\n showError(): boolean {\r\n return this.enableValidation && this.hasInteracted && !this.selectedOption;\r\n }\r\n\r\n\r\n \r\n}\r\n","<div class=\"select-wrapper\">\r\n<!-- Label (optional) -->\r\n<div *ngIf=\"inputTextLabel\" class=\"select-label\">{{ inputTextLabel }}</div>\r\n \r\n<!-- <div class=\"select-container\" (click)=\"toggleDropdown($event)\" [class.disabled]=\"isDisabled\"> -->\r\n<div class=\"select-container\" [class.disabled]=\"isDisabled\" [class.error]=\"enableValidation && hasInteracted && isInvalid\" [class.focused]=\"isOpen\"\r\n > \r\n <div class=\"selected-option\"\r\n (click)=\"onSelectClick($event)\" \r\n [ngClass]=\"{'placeholder': !selectedOption, \r\n 'selected': selectedOption }\">\r\n <span>{{ selectedOption?.label || placeholder }}</span>\r\n <div class=\"clearbtn-wrapper\"> \r\n <dso-button \r\n btnLabel=\"Clear\" \r\n btnType=\"ghost\" \r\n btnSize='smBtn'\r\n *ngIf=\"selectedOption && !isDisabled\" \r\n (click)=\"clearSelection($event)\"></dso-button>\r\n <dso-icon *ngIf=\"selectIconName\" [iconName]=\"selectIconName\" [size]=\"'small'\"></dso-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div class=\"dropdown\" *ngIf=\"isOpen\" \r\n (click)=\"$event.stopPropagation()\" \r\n [ngClass]=\"{'dropdown-bottom': dropdownPosition === 'bottom', 'dropdown-top': dropdownPosition === 'top'}\" >\r\n <input type=\"text\" \r\n [(ngModel)]=\"searchQuery\" \r\n (input)=\"filterOptions()\" \r\n placeholder=\"Search...\" />\r\n <ul #dropdownList \r\n (scroll)=\"onDropdownScroll()\" \r\n class=\"dropdown-list\">\r\n <li *ngFor=\"let option of filteredOptions\" (click)=\"selectOption($event, option)\" [ngClass]=\"{'active': option.value === selectedOption?.value}\">\r\n {{ option.label }}\r\n </li>\r\n </ul>\r\n </div>\r\n</div>\r\n\r\n\r\n<!-- Helper Text (when validation is disabled) -->\r\n<div *ngIf=\"enableValidation && helperText && !(hasInteracted && isInvalid)\" class=\"helper-text\">\r\n {{ helperText }}\r\n</div>\r\n\r\n<!-- Error Message (when validation is enabled) -->\r\n<div *ngIf=\"enableValidation && hasInteracted && isInvalid\" class=\"error-message\">\r\n {{ errorText }}\r\n</div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/**\r\n * Interface defining a single sidebar menu item.\r\n * \r\n * - `label`: The text to display for the menu item.\r\n * - `iconName`: Optional icon to display using <dso-icon>.\r\n * - `route`: Optional router path to navigate when clicked.\r\n * - `isActive`: Whether this menu item is currently active.\r\n */\r\nexport interface SideNavItem {\r\n label: string;\r\n iconName?: string;\r\n route?: string;\r\n isActive?: boolean;\r\n}\r\n\r\n/**\r\n * DSO Side Navigation Component\r\n * \r\n * Features:\r\n * - Configurable title/logo area.\r\n * - Dynamic menu items with icons and routing.\r\n * - Supports default active item by route or index.\r\n * - Click-outside detection to close the sidebar.\r\n * - Optional overlay for dimming the background.\r\n */\r\n@Component({\r\n selector: 'dso-side-nav',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, IconComponent],\r\n templateUrl: './side-navigation-bar.component.html',\r\n styleUrls: ['./side-navigation-bar.component.scss'],\r\n})\r\nexport class SideNavComponent {\r\n /** Title displayed next to the logo */\r\n @Input() title: string = '';\r\n\r\n /** List of navigation items */\r\n @Input() items: SideNavItem[] = [];\r\n\r\n /** Controls whether the sidebar is visible */\r\n @Input() open: boolean = true;\r\n\r\n /** Enable/disable background overlay when sidebar is open */\r\n @Input() overlay: boolean = true;\r\n\r\n /** Optional: default active menu item by route */\r\n @Input() defaultActiveRoute?: string;\r\n\r\n /** Optional: default active menu item by index */\r\n @Input() defaultActiveIndex?: number;\r\n\r\n /** Event emitted when sidebar is closed */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * ElementRef to the component host element.\r\n * Used for detecting click-outside events.\r\n */\r\n constructor(private host: ElementRef) {}\r\n\r\n /**\r\n * Lifecycle hook: initialize default active menu item.\r\n */\r\nngOnInit() {\r\n // Reset all items to inactive first\r\n this.items.forEach(item => item.isActive = false);\r\n\r\n // Set default active item\r\n const defaultItem = this.defaultActiveRoute\r\n ? this.items.find(item => item.route === this.defaultActiveRoute)\r\n : this.items[this.defaultActiveIndex ?? 0]; // fallback to first item if no index\r\n\r\n if (defaultItem) {\r\n defaultItem.isActive = true;\r\n }\r\n}\r\n\r\n /**\r\n * Close the sidebar and emit the `closed` event.\r\n * Can be called manually or via click-outside detection.\r\n */\r\n closeSidebar() {\r\n this.open = false;\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * HostListener to detect clicks anywhere in the document.\r\n * If the click happens outside the sidebar while it's open, it triggers closeSidebar().\r\n * \r\n * @param event MouseEvent triggered on document click\r\n */\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (!this.open) return;\r\n\r\n // Check if click was inside the sidebar\r\n const clickedInside = this.host.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.closeSidebar();\r\n }\r\n }\r\n\r\n /**\r\n * Called when a sidebar menu item is clicked.\r\n * - Marks the clicked item as active.\r\n * - Optionally, navigation can be handled via `[routerLink]`.\r\n * \r\n * @param item The menu item that was clicked\r\n */\r\n onItemClick(item: SideNavItem) {\r\n this.items.forEach(i => i.isActive = false);\r\n item.isActive = true;\r\n }\r\n}\r\n","<!-- Optional overlay -->\r\n<div \r\n class=\"sidebar-overlay\" \r\n *ngIf=\"open && overlay\"\r\n (click)=\"closeSidebar()\">\r\n</div>\r\n\r\n<nav class=\"dso-side-nav\" [class.open]=\"open\">\r\n\r\n <!-- Logo and Title -->\r\n <div class=\"side-nav-header\">\r\n <ng-content select=\"[dso-side-logo]\"></ng-content>\r\n <span class=\"side-nav-title\">{{ title }}</span>\r\n </div>\r\n\r\n <!-- Navigation list -->\r\n <ul class=\"side-nav-list\">\r\n <li *ngFor=\"let item of items\" [class.active]=\"item.isActive\">\r\n <a\r\n class=\"nav-item\"\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"active\"\r\n (click)=\"onItemClick(item)\"\r\n >\r\n <!-- <i class=\"nav-icon\" [class]=\"item.icon\"></i> -->\r\n <dso-icon *ngIf=\"item.iconName\" [iconName]=\"item.iconName\" size=\"small\"></dso-icon>\r\n\r\n <span class=\"nav-label\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <!-- Footer slot (optional) -->\r\n <div class=\"side-nav-footer\">\r\n <ng-content select=\"[dso-side-footer]\"></ng-content>\r\n </div>\r\n\r\n</nav>\r\n","import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport lottie from 'lottie-web';\r\n\r\n@Component({\r\n selector: 'dso-spinner',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements AfterViewInit {\r\n /** Size presets */\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n\r\n /** Color variants */\r\n @Input() color: 'primary' | 'success' | 'warning' | 'danger' = 'primary';\r\n\r\n /** Overlay background toggle */\r\n @Input() overlay: boolean = false;\r\n\r\n /** Custom overlay background color */\r\n @Input() overlayColor: string = 'rgba(0,0,0,0.4)';\r\n\r\n /** Optional illustration (inside spinner) */\r\n @Input() illustrationSrc?: string | null;\r\n\r\n /** Optional label text (below spinner) */\r\n @Input() label?: string;\r\n\r\n\r\n // NEW: optional Lottie animation\r\n @Input() animationSrc?: string;\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n if (this.animationSrc) {\r\n lottie.loadAnimation({\r\n container: this.el.nativeElement.querySelector('.spinner-lottie'),\r\n renderer: 'svg',\r\n loop: true,\r\n autoplay: true,\r\n path: this.animationSrc, // path to your JSON animation\r\n });\r\n }\r\n }\r\n \r\n get isIllustrated(): boolean {\r\n return !!this.illustrationSrc;\r\n }\r\n}\r\n","<div *ngIf=\"overlay\" class=\"spinner-overlay\" [ngStyle]=\"{'background-color': overlayColor}\">\r\n <div class=\"spinner-wrapper\">\r\n \r\n <!-- Static spinner / illustration -->\r\n <div \r\n class=\"spinner\" \r\n *ngIf=\"!animationSrc\"\r\n [ngClass]=\"[isIllustrated ? 'illustrated' : size, color]\">\r\n <img *ngIf=\"illustrationSrc\" [src]=\"illustrationSrc\" class=\"spinner-illustration\" alt=\"Loading illustration\" />\r\n </div>\r\n\r\n <!-- Lottie animation -->\r\n <div *ngIf=\"animationSrc\" class=\"spinner-lottie\"></div>\r\n\r\n <!-- Optional label -->\r\n <p *ngIf=\"label\" class=\"spinner-label\">{{ label }}</p>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"!overlay\" class=\"spinner-wrapper\">\r\n \r\n <!-- Static spinner / illustration -->\r\n <div \r\n class=\"spinner\" \r\n *ngIf=\"!animationSrc\"\r\n [ngClass]=\"[isIllustrated ? 'illustrated' : size, color]\">\r\n <img *ngIf=\"illustrationSrc\" [src]=\"illustrationSrc\" class=\"spinner-illustration\" alt=\"Loading illustration\" />\r\n </div>\r\n\r\n <!-- Lottie animation -->\r\n <div *ngIf=\"animationSrc\" class=\"spinner-lottie\"></div>\r\n\r\n <!-- Optional label -->\r\n <p *ngIf=\"label\" class=\"spinner-label\">{{ label }}</p>\r\n</div>\r\n","import { Directive, ElementRef, Input, Renderer2, HostListener, OnDestroy } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[dsoDirectiveTooltip]', // This directive will be used with the attribute dsoTooltip\r\n standalone: true\r\n})\r\n\r\nexport class TooltipDirective implements OnDestroy {\r\n\r\n private tooltipElement: HTMLElement | null = null;\r\n\r\n // Make input reactive so it updates dynamically\r\n private _tooltipText = '';\r\n @Input() set dsoDirectiveTooltip(value: string) {\r\n this._tooltipText = value;\r\n if (this.tooltipElement) {\r\n this.tooltipElement.textContent = value;\r\n }\r\n }\r\n get dsoDirectiveTooltip(): string {\r\n return this._tooltipText;\r\n }\r\n\r\n @Input() position: 'top' | 'bottom' | 'left' | 'right' = 'top';\r\n @Input() tooltipWidth: string = 'auto';\r\n\r\n private readonly gap = 4; // distance from the element\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter() {\r\n if (!this.dsoDirectiveTooltip) return;\r\n\r\n // Create tooltip element if not exists\r\n if (!this.tooltipElement) {\r\n this.tooltipElement = this.renderer.createElement('div');\r\n this.renderer.addClass(this.tooltipElement, 'tooltip-directive');\r\n\r\n // Style\r\n this.renderer.setStyle(this.tooltipElement, 'position', 'fixed'); // fixed so it won't be clipped\r\n this.renderer.setStyle(this.tooltipElement, 'background', '#333');\r\n this.renderer.setStyle(this.tooltipElement, 'color', '#fff');\r\n this.renderer.setStyle(this.tooltipElement, 'padding', '4px 8px');\r\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '4px');\r\n this.renderer.setStyle(this.tooltipElement, 'font-size', '12px');\r\n this.renderer.setStyle(this.tooltipElement, 'z-index', '1000');\r\n this.renderer.setStyle(this.tooltipElement, 'max-width', this.tooltipWidth);\r\n this.renderer.setStyle(this.tooltipElement, 'white-space', 'normal'); // allow wrapping\r\n this.renderer.setStyle(this.tooltipElement, 'word-break', 'break-word'); // break long words\r\n\r\n\r\n this.renderer.appendChild(document.body, this.tooltipElement);\r\n }\r\n\r\n // Step 3: set tooltip text\r\n if (this.tooltipElement) {\r\n this.tooltipElement.textContent = this.dsoDirectiveTooltip;\r\n\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n const tooltipHeight = this.tooltipElement.offsetHeight;\r\n const tooltipWidth = this.tooltipElement.offsetWidth;\r\n\r\n // Step 4: position tooltip based on input\r\n switch (this.position) {\r\n case 'top':\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${rect.top - tooltipHeight - this.gap}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${rect.left + (rect.width - tooltipWidth)/2}px`);\r\n break;\r\n case 'bottom':\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${rect.bottom + this.gap}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${rect.left + (rect.width - tooltipWidth)/2}px`);\r\n break;\r\n case 'left':\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${rect.top + (rect.height - tooltipHeight)/2}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${rect.left - tooltipWidth - this.gap}px`);\r\n break;\r\n case 'right':\r\n this.renderer.setStyle(this.tooltipElement, 'top', `${rect.top + (rect.height - tooltipHeight)/2}px`);\r\n this.renderer.setStyle(this.tooltipElement, 'left', `${rect.right + this.gap}px`);\r\n break;\r\n }\r\n\r\n this.renderer.setStyle(this.tooltipElement, 'visibility', 'visible');\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave() {\r\n if (this.tooltipElement) {\r\n this.renderer.setStyle(this.tooltipElement, 'visibility', 'hidden');\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.tooltipElement) {\r\n this.renderer.removeChild(document.body, this.tooltipElement);\r\n }\r\n }\r\n}","import { Component, Input, Output, OnChanges, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\nexport interface TableColumn {\r\n key: string;\r\n label: string;\r\n minWidth?: string;\r\n maxWidth?: string;\r\n truncate?: boolean;\r\n type?: 'text' | 'checkbox' | 'action';\r\n sortable?: boolean;\r\n sticky?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'dso-table',\r\n standalone: true,\r\n imports: [\r\n ButtonComponent,\r\n CheckboxComponent,\r\n CommonModule,\r\n IconComponent,\r\n TooltipDirective\r\n ],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss']\r\n})\r\nexport class TableComponent implements OnChanges {\r\n\r\n /* =====================\r\n Inputs\r\n ===================== */\r\n\r\n @Input() columns: TableColumn[] = [];\r\n @Input() rows: any[] = [];\r\n @Input() defaultSortColumn?: string;\r\n @Input() defaultSortDirection: 'asc' | 'desc' = 'asc';\r\n @Input() stickyHeader = false;\r\n @Input() maxTableHeight?: string;\r\n\r\n /* =====================\r\n Outputs\r\n ===================== */\r\n\r\n @Output() sortChange = new EventEmitter<{\r\n column: string;\r\n direction: 'asc' | 'desc';\r\n }>();\r\n\r\n /* =====================\r\n UI state only\r\n ===================== */\r\n\r\n sortColumn: string | null = null;\r\n sortDirection: 'asc' | 'desc' = 'asc';\r\n\r\n /* =====================\r\n Lifecycle\r\n ===================== */\r\n\r\n ngOnChanges() {\r\n // Initialize visual sort state ONLY\r\n if (this.defaultSortColumn && !this.sortColumn) {\r\n this.sortColumn = this.defaultSortColumn;\r\n this.sortDirection = this.defaultSortDirection;\r\n\r\n // Emit once so parent applies default sort\r\n this.sortChange.emit({\r\n column: this.sortColumn,\r\n direction: this.sortDirection\r\n });\r\n }\r\n }\r\n\r\n /* =====================\r\n Sorting (emit only)\r\n ===================== */\r\n\r\n sort(colKey: string) {\r\n let direction: 'asc' | 'desc' = 'asc';\r\n\r\n if (this.sortColumn === colKey) {\r\n direction = this.sortDirection === 'asc' ? 'desc' : 'asc';\r\n }\r\n\r\n this.sortColumn = colKey;\r\n this.sortDirection = direction;\r\n\r\n this.sortChange.emit({ column: colKey, direction });\r\n }\r\n\r\n /* =====================\r\n Column sizing\r\n ===================== */\r\n\r\n getColumnStyle(col: TableColumn) {\r\n return {\r\n 'min-width': col.minWidth || null,\r\n 'max-width': col.maxWidth || null,\r\n 'width': !col.minWidth && !col.maxWidth ? 'auto' : null,\r\n };\r\n }\r\n\r\n /* =====================\r\n Truncation\r\n ===================== */\r\n\r\n shouldTruncateNative(cell: HTMLElement): boolean {\r\n if (!cell) return false;\r\n\r\n const content = cell.querySelector('.cell-text') as HTMLElement;\r\n if (!content) return false;\r\n\r\n return content.scrollWidth > content.clientWidth;\r\n }\r\n\r\n /* =====================\r\n Selection (unchanged)\r\n ===================== */\r\n\r\n selectedRows = new Set<any>();\r\n\r\n toggleRow(row: any) {\r\n if (this.selectedRows.has(row)) {\r\n this.selectedRows.delete(row);\r\n } else {\r\n this.selectedRows.add(row);\r\n }\r\n }\r\n\r\n isRowSelected(row: any): boolean {\r\n return this.selectedRows.has(row);\r\n }\r\n\r\n get allSelected(): boolean {\r\n return this.rows.length > 0 &&\r\n this.selectedRows.size === this.rows.length;\r\n }\r\n\r\n toggleSelectAll() {\r\n if (this.allSelected) {\r\n this.selectedRows.clear();\r\n } else {\r\n this.rows.forEach(row => this.selectedRows.add(row));\r\n }\r\n }\r\n\r\n onEditRow(row: any) {\r\n console.log('Edit clicked for row:', row);\r\n }\r\n\r\n onDeleteRow(row: any) {\r\n console.log('Delete clicked for row:', row);\r\n }\r\n}\r\n","<div #tableContainer class=\"dso-table-container\" [class.sticky-header]=\"stickyHeader\" [style.max-height]=\"maxTableHeight\">\r\n <table class=\"dso-table\">\r\n<thead>\r\n <tr>\r\n <th *ngFor=\"let col of columns\"\r\n [class.sticky]=\"stickyHeader || col.sticky\"\r\n [class.sticky-left]=\"stickyHeader && col.type === 'checkbox'\"\r\n [class.sticky-right]=\"stickyHeader && col.type === 'action'\"\r\n [ngStyle]=\"getColumnStyle(col)\"\r\n [class.active]=\"sortColumn === col.key\"\r\n class=\"sortable\"\r\n (click)=\"col.sortable !== false && col.type !== 'checkbox' && sort(col.key)\">\r\n\r\n <!-- If this column is a checkbox column -->\r\n <ng-container *ngIf=\"col.type === 'checkbox'; else normalHeader\">\r\n <dso-checkbox\r\n size=\"small\"\r\n [isChecked]=\"allSelected\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleSelectAll()\">\r\n </dso-checkbox>\r\n </ng-container>\r\n\r\n <!-- Your original header stays EXACTLY as-is -->\r\n <ng-template #normalHeader>\r\n <div class=\"header-content\">\r\n {{ col.label }}\r\n\r\n <dso-icon\r\n *ngIf=\"col.sortable !== false && sortColumn === col.key\"\r\n [iconName]=\"sortDirection === 'asc'\r\n ? 'icon-van'\r\n : 'icon-chevron_down'\"\r\n size=\"small\"\r\n class=\"sort-icon\">\r\n </dso-icon>\r\n\r\n <dso-icon\r\n *ngIf=\"col.sortable !== false && sortColumn !== col.key\"\r\n iconName=\"icon-chevron_up\"\r\n size=\"small\"\r\n class=\"hover-indicator\">\r\n </dso-icon>\r\n </div>\r\n </ng-template>\r\n\r\n </th>\r\n </tr>\r\n</thead>\r\n\r\n\r\n<tbody>\r\n <tr *ngFor=\"let row of rows\">\r\n <td\r\n #cell\r\n *ngFor=\"let col of columns\"\r\n [class.sticky-left]=\"stickyHeader && col.type === 'checkbox'\"\r\n [class.sticky-right]=\"stickyHeader && col.type === 'action'\"\r\n [ngStyle]=\"getColumnStyle(col)\"\r\n [dsoDirectiveTooltip]=\"shouldTruncateNative(cell) ? row[col.key] : ''\">\r\n <div class=\"cell-wrapper\" style=\"display:flex; align-items:center;\">\r\n <dso-checkbox\r\n *ngIf=\"col.type==='checkbox'\"\r\n size=\"small\"\r\n [isChecked]=\"isRowSelected(row)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleRow(row)\">\r\n </dso-checkbox>\r\n\r\n <!-- Action button cell -->\r\n <ng-container *ngIf=\"col.type==='action'\">\r\n <dso-button\r\n btnType=\"filled\"\r\n btnSize=\"smBtn\"\r\n btnLabel=\"Edit\"\r\n (click)=\"onEditRow(row)\">\r\n </dso-button>\r\n <dso-button\r\n btnType=\"outlined\"\r\n btnSize=\"smBtn\"\r\n btnLabel=\"Delete\"\r\n (click)=\"onDeleteRow(row)\">\r\n </dso-button>\r\n </ng-container>\r\n\r\n <!-- Normal text cell -->\r\n <span *ngIf=\"!col.type || (col.type !== 'checkbox' && col.type !== 'action')\" class=\"cell-text\">\r\n {{ row[col.key] }}\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n</tbody>\r\n\r\n </table>\r\n</div>\r\n","// tab.component.ts\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-tab',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n imports: [ CommonModule ],\r\n standalone: true\r\n})\r\nexport class TabComponent {\r\n /** Label for the tab shown in the tabs header */\r\n @Input() label: string = '';\r\n\r\n /** Is this tab currently active? Controlled by TabsComponent */\r\n active: boolean = false;\r\n}\r\n","<!-- tab.component.html -->\r\n<!-- Only display the tab content if it is active -->\r\n<div *ngIf=\"active\" class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n","// tabs.component.ts\r\nimport { Component, ContentChildren, QueryList, AfterContentInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { TabComponent } from './tab.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'dso-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, TabComponent]\r\n})\r\nexport class TabsComponent implements AfterContentInit {\r\n /** Query all child tabs inside <dso-tabs> */\r\n @ContentChildren(TabComponent) tabs!: QueryList<TabComponent>;\r\n\r\n /** Optional: two-way binding for active tab index */\r\n @Input() tabIndex: number = 0;\r\n @Output() tabIndexChange = new EventEmitter<number>();\r\n\r\n ngAfterContentInit() {\r\n // Activate the default tab\r\n this.selectTab(this.tabIndex);\r\n }\r\n\r\n /** When a tab header is clicked */\r\n selectTab(index: number) {\r\n if (!this.tabs) return;\r\n\r\n this.tabs.forEach((tab, i) => tab.active = i === index);\r\n\r\n // Update internal tabIndex and emit event for two-way binding\r\n this.tabIndex = index;\r\n this.tabIndexChange.emit(this.tabIndex);\r\n }\r\n}\r\n","<!-- tabs.component.html -->\r\n<div class=\"tabs-container\">\r\n <!-- Tab headers -->\r\n <div class=\"tab-headers\">\r\n <button\r\n *ngFor=\"let tab of tabs; let i = index\"\r\n [class.active]=\"tab.active\"\r\n (click)=\"selectTab(i)\">\r\n {{ tab.label }}\r\n </button>\r\n </div>\r\n\r\n <!-- Tab content will render via ng-content inside TabComponent -->\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\n\r\n@Component({\r\n selector: 'dso-tag',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent],\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.scss']\r\n})\r\nexport class TagComponent {\r\n @Input() variant: 'neutral' | 'success' | 'info' | 'warning' | 'danger' = 'neutral';\r\n @Input() removable: boolean = false;\r\n @Input() label: string = '';\r\n\r\n removed = false;\r\n\r\n removeTag() {\r\n this.removed = true;\r\n }\r\n}\r\n","<div\r\n *ngIf=\"!removed\"\r\n class=\"tag\"\r\n [ngClass]=\"'tag-' + variant\"\r\n>\r\n <span class=\"tag-label\">{{ label }}</span>\r\n <!-- <dso-button></dso-button> -->\r\n <button \r\n *ngIf=\"removable\" \r\n class=\"tag-remove-btn\" \r\n (click)=\"removeTag()\"\r\n aria-label=\"Remove tag\"\r\n >\r\n &times;\r\n </button>\r\n</div>\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dso-text-area',\r\n standalone: true,\r\n templateUrl: './text-area.component.html',\r\n styleUrls: ['./text-area.component.scss'],\r\n imports: [ CommonModule, FormsModule ]\r\n})\r\nexport class TextAreaComponent {\r\n @Input() inputLabel: string = ''; // Optional label for the textarea\r\n @Input() placeholder: string = '';\r\n @Input() value: string = ''; // Two-way binding for value\r\n @Input() helperText: string = 'helpering '; // Optional helper text\r\n @Input() errorText: string = 'tes test'; // Optional error text\r\n @Input() isDisabled: boolean = false; // Optional disabled state\r\n @Input() enableValidation: boolean = true; // Toggle validation\r\n @Input() maxLength: number = 300; // Maximum character length (for example)\r\n\r\n isTouched: boolean = false;\r\n isInvalid: boolean = false; // Error state\r\n charCount: number = 0; // To track character count\r\n isExceeded: boolean = false; // To track if the limit is exceeded\r\n\r\n onInputChange(event: Event): void {\r\n const inputValue = (event.target as HTMLTextAreaElement).value;\r\n console.log(inputValue);\r\n const charCount = inputValue.length;\r\n\r\n // Check if the limit has been exceeded\r\n this.isExceeded = charCount > this.maxLength;\r\n \r\n this.isTouched = true;\r\n this.checkValidity();\r\n }\r\n\r\n // Method to determine the style of the character count\r\n getCharCountStyle() {\r\n const charCount = this.value.length;\r\n\r\n if (this.isExceeded) {\r\n // this.isExceeded = true;\r\n return 'char-count-error';\r\n }\r\n // If character count exceeds 50% of maxLength, change color to black\r\n if (charCount > this.maxLength / 2) {\r\n return '';\r\n }\r\n\r\n // Otherwise, keep it grey\r\n return '';\r\n }\r\n\r\n onBlur(): void {\r\n this.isTouched = true;\r\n this.checkValidity();\r\n }\r\n\r\n checkValidity(): void {\r\n // Set to invalid if it's required and empty\r\n this.isInvalid = this.isTouched && !this.value.trim();\r\n }\r\n}\r\n","<div class=\"text-area-container\">\r\n <div class=\"text-wrapper\">\r\n <!-- Optional label -->\r\n <label *ngIf=\"inputLabel\">\r\n {{ inputLabel }}\r\n </label> \r\n <!-- Character count inside the container -->\r\n <div class=\"char-count\" [ngClass]=\"getCharCountStyle()\" *ngIf=\"maxLength\">\r\n <span>\r\n {{ value.length }}\r\n </span>\r\n / {{ maxLength }}\r\n </div>\r\n </div>\r\n\r\n <textarea\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"value\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onBlur()\"\r\n [disabled]=\"isDisabled\"\r\n [class.invalid]=\"(isInvalid && isTouched && enableValidation) || isExceeded\"\r\n [class.disabled]=\"isDisabled\"\r\n >\r\n </textarea>\r\n\r\n <!-- Helper Text \r\n This condition checks if the helper text should be displayed:\r\n - If the character limit is **not exceeded** and validation is **not enabled**, show the helper text.\r\n - If validation **is enabled**, show the helper text only if the input is **not invalid** and `helperText` is provided.\r\n - If the character limit is exceeded, the helper text will be replaced with an error message. -->\r\n <div *ngIf=\"!isExceeded && !enableValidation || ((!isInvalid && helperText) && !isExceeded)\" class=\"helper-text\">\r\n {{ helperText }}\r\n </div>\r\n\r\n <!-- Specified Error Text -->\r\n <div *ngIf=\"isInvalid && isTouched && enableValidation\" class=\"error-message\">\r\n {{ errorText }}\r\n </div>\r\n\r\n <!-- Error message if character limit exceeded -->\r\n <div *ngIf=\"isExceeded\" class=\"error-message\">\r\n Character limit exceeded.\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\n// import { Subject } from 'rxjs';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n\r\nexport type ToastVariant = 'success' | 'info' | 'warning' | 'danger' | 'neutral';\r\nexport type ToastPosition =\r\n | 'top-left'\r\n | 'top-right'\r\n | 'bottom-left'\r\n | 'bottom-right'\r\n | 'top-center'\r\n | 'bottom-center';\r\n\r\nexport interface ToastMessage {\r\n header?: string;\r\n message: string;\r\n variant?: ToastVariant;\r\n duration?: number;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n // private toastSubject = new Subject<ToastMessage>();\r\n private toastSubject = new ReplaySubject<ToastMessage>; // keep last message\r\n toast$ = this.toastSubject.asObservable();\r\n\r\n\r\n show(\r\n header: string,\r\n message: string,\r\n variant: ToastVariant = 'neutral',\r\n duration: 3000\r\n ) {\r\n this.toastSubject.next({ header, message, variant, duration });\r\n console.log('Toast Service Broadcasting:', { header, message, variant, duration }); // <-- debug\r\n\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { ToastService, ToastMessage } from '../service/toast.service';\r\n\r\n@Component({\r\n selector: 'dso-toast', // Component selector used in HTML\r\n standalone: true, // Standalone component, no module needed\r\n templateUrl: './toast.component.html', \r\n styleUrls: ['./toast.component.scss'], \r\n imports: [ CommonModule ] // Import CommonModule for ngIf, ngFor etc.\r\n})\r\n\r\n\r\nexport class ToastComponent implements OnInit {\r\n toasts: ToastMessage[] = []; \r\n @Input() position: 'top-right' | 'bottom-right' | 'top-left' | 'bottom-left' | 'top-center' | 'bottom-center' = 'top-right';\r\n\r\n toastData!: ToastMessage; // Stores the current toast being displayed\r\n\r\n constructor(private toastService: ToastService) {} // Inject toast service\r\n\r\n ngOnInit() {\r\n // Subscribe to toast messages from the service\r\n this.toastService.toast$.subscribe((toast: ToastMessage) => {\r\n console.log('Toast Child Listening:', toast); // Add this debug log!\r\n\r\n this.toasts.push(toast); // Add the new toast to the array for display\r\n\r\n // Auto-hide after specified duration (default 3000ms)\r\n setTimeout(() => {\r\n // this.visible = false; // Hide toast\r\n this.toasts.shift(); // Remove first toast from the array\r\n }, toast.duration || 3000);\r\n });\r\n }\r\n\r\n\r\n}\r\n","<div class=\"toast-wrapper\" \r\n [ngClass]=\"['toast-' + (position || 'top-right')]\">\r\n <div\r\n *ngFor=\"let toast of toasts; let i = index\"\r\n class=\"toast-container\"\r\n [ngClass]=\"['toast-' + (toast.variant || 'neutral')]\"\r\n >\r\n \r\n <div class=\"toast-header\" *ngIf=\"toast.header\">{{ toast.header }}</div>\r\n <div class=\"toast-body\">\r\n <div class=\"toast-message\">{{ toast.message }}</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n[ngStyle]=\"{\r\n animation: 'fadeInOut ' + (toast.duration || 3000) + 'ms ease forwards'}\"> -->","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'dso-tooltip',\r\n standalone: true,\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\n export class TooltipComponent {\r\n @Input() text!: string; // Tooltip text to display\r\n @Input() position: string = 'top'; // Position of the tooltip (default is 'top')\r\n @Input() tooltipWidth: string = '300px'; // Default width, can be overridden\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n\r\n\r\n showTooltip = false; // This flag controls the visibility of the tooltip\r\n isHovered = false; // This flag checks if the mouse is over the tooltip\r\n\r\n // Triggered when the mouse enters the wrapper area (button + tooltip)\r\n onMouseEnter() {\r\n // console.log('Mouse entered');\r\n this.showTooltip = true; // Show tooltip\r\n }\r\n\r\n // Triggered when the mouse leaves the wrapper area (button + tooltip)\r\n onMouseLeave() {\r\n // console.log('Mouse left');\r\n this.showTooltip = false; // Hide tooltip\r\n }\r\n\r\n\r\n}\r\n","<!-- Tooltip wrapper: listens for mouse enter/leave -->\r\n<div class=\"tooltip-wrapper\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\r\n <ng-content></ng-content> <!-- This will allow the button or other content to be passed inside -->\r\n\r\n <!-- Tooltip box -->\r\n <div \r\n class=\"tooltip\" \r\n *ngIf=\"showTooltip\" \r\n [ngClass]=\"position\"\r\n [ngStyle]=\"{ 'width': tooltipWidth }\"\r\n >\r\n {{ text }}\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n/** Interface defining a single top nav menu item */\r\nexport interface TopNavItem {\r\n label: string; // Text for the menu item\r\n iconName?: string; // Optional icon\r\n route?: string; // Optional router link\r\n click?: () => void; // Optional click handler\r\n}\r\n\r\n@Component({\r\n selector: 'dso-top-nav',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule, IconComponent],\r\n templateUrl: './top-navigation-bar.component.html',\r\n styleUrls: ['./top-navigation-bar.component.scss']\r\n})\r\nexport class TopNavComponent {\r\n /** App name displayed next to logo */\r\n @Input() appName: string = '';\r\n\r\n /** Dynamic menu items */\r\n @Input() menuItems: TopNavItem[] = [];\r\n}\r\n","<nav class=\"dso-top-nav\">\r\n\r\n <!-- Left section: menu+logo -->\r\n <div class=\"nav-left\">\r\n <div class=\"nav-left-group menu-logo\">\r\n <ng-content select=\"[dso-menu-logo]\"></ng-content>\r\n <span class=\"top-nav-app-name\" *ngIf=\"appName\">{{ appName }}</span>\r\n </div>\r\n\r\n <div class=\"nav-left-group menu-buttons\">\r\n <ng-container *ngFor=\"let item of menuItems\">\r\n <!-- Router link item -->\r\n <a \r\n *ngIf=\"item.route; else clickItem\" \r\n [routerLink]=\"item.route\" \r\n class=\"top-nav-item\"\r\n >\r\n <dso-icon *ngIf=\"item.iconName\" [iconName]=\"item.iconName\" size=\"small\"></dso-icon>\r\n <span>{{ item.label }}</span>\r\n </a>\r\n\r\n <!-- Click handler item -->\r\n <ng-template #clickItem>\r\n <button class=\"top-nav-item\" (click)=\"item.click?.()\">\r\n <dso-icon *ngIf=\"item.iconName\" [iconName]=\"item.iconName\" size=\"small\"></dso-icon>\r\n <span>{{ item.label }}</span>\r\n </button>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Right section -->\r\n <div class=\"nav-right\">\r\n <!-- ✅ Project each element individually with dso-nav-right -->\r\n <ng-content select=\"[dso-nav-right]\"></ng-content>\r\n </div>\r\n\r\n</nav>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UploadSimulatorService","i2","i1.ToastService"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ButtonConfig } from '../button/button.component';
2
+ import * as i0 from "@angular/core";
3
+ export interface AlertAction extends ButtonConfig {
4
+ onClick?: () => void;
5
+ }
6
+ export declare class AlertComponent {
7
+ type: 'success' | 'error' | 'info' | 'warning';
8
+ message: string;
9
+ showActions: boolean;
10
+ isDismissable: boolean;
11
+ actions: AlertAction[];
12
+ isVisible: boolean;
13
+ isHiding: boolean;
14
+ close(): void;
15
+ get iconName(): string;
16
+ /** Handle when a button inside the alert is clicked */
17
+ handleAction(action: AlertAction): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<AlertComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlertComponent, "dso-alert", never, { "type": { "alias": "type"; "required": false; }; "message": { "alias": "message"; "required": false; }; "showActions": { "alias": "showActions"; "required": false; }; "isDismissable": { "alias": "isDismissable"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, {}, never, never, true, never>;
20
+ }
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class BadgeComponent {
3
+ label: string | number | null;
4
+ color: 'primary' | 'success' | 'warning' | 'danger';
5
+ get isDot(): boolean;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "dso-badge", never, { "label": { "alias": "label"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, {}, never, never, true, never>;
8
+ }
@@ -0,0 +1,15 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface BreadcrumbItem {
4
+ label: string;
5
+ url?: string;
6
+ icon?: string;
7
+ }
8
+ export declare class BreadcrumbComponent {
9
+ items: BreadcrumbItem[];
10
+ itemSelected: EventEmitter<BreadcrumbItem>;
11
+ separator: string;
12
+ onItemClicked(item: BreadcrumbItem): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbComponent, "dso-breadcrumb", never, { "items": { "alias": "items"; "required": false; }; "separator": { "alias": "separator"; "required": false; }; }, { "itemSelected": "itemSelected"; }, never, never, true, never>;
15
+ }