@haloduck/ui 2.0.31 → 2.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/haloduck-ui.mjs +18 -14
- package/fesm2022/haloduck-ui.mjs.map +1 -1
- package/index.d.ts +4 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"haloduck-ui.mjs","sources":["../../../../projects/haloduck/ui/src/lib/layout/notification/notification.service.ts","../../../../projects/haloduck/ui/src/lib/control/button/button.component.ts","../../../../projects/haloduck/ui/src/lib/control/button/button.component.html","../../../../projects/haloduck/ui/src/lib/control/input/input.component.ts","../../../../projects/haloduck/ui/src/lib/control/input/input.component.html","../../../../projects/haloduck/ui/src/lib/component/authenticate/authenticate.component.ts","../../../../projects/haloduck/ui/src/lib/component/authenticate/authenticate.component.html","../../../../projects/haloduck/ui/src/lib/control/select/select-dropdown/select-dropdown.component.ts","../../../../projects/haloduck/ui/src/lib/control/select/select-dropdown/select-dropdown.component.html","../../../../projects/haloduck/ui/src/lib/control/select/select.component.ts","../../../../projects/haloduck/ui/src/lib/control/select/select.component.html","../../../../projects/haloduck/ui/src/lib/control/calendar/calendar.component.ts","../../../../projects/haloduck/ui/src/lib/control/calendar/calendar.component.html","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog-container.component.ts","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog-container.component.html","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog.service.ts","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.component.ts","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.component.html","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.service.ts","../../../../projects/haloduck/ui/src/lib/control/copy-button/copy-button.component.ts","../../../../projects/haloduck/ui/src/lib/control/copy-button/copy-button.component.html","../../../../projects/haloduck/ui/src/lib/control/date-picker/date-picker.component.ts","../../../../projects/haloduck/ui/src/lib/control/date-picker/date-picker.component.html","../../../../projects/haloduck/ui/src/lib/control/date-range/date-range.component.ts","../../../../projects/haloduck/ui/src/lib/control/date-range/date-range.component.html","../../../../projects/haloduck/ui/src/lib/control/draw-canvas/draw-canvas.component.ts","../../../../projects/haloduck/ui/src/lib/control/draw-canvas/draw-canvas.component.html","../../../../projects/haloduck/ui/src/lib/control/file-uploader/file-uploader.component.ts","../../../../projects/haloduck/ui/src/lib/control/file-uploader/file-uploader.component.html","../../../../projects/haloduck/ui/src/lib/control/flip/flip.component.ts","../../../../projects/haloduck/ui/src/lib/control/flip/flip.component.html","../../../../projects/haloduck/ui/src/lib/control/image-viewer/image-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/image-viewer/image-viewer.component.html","../../../../projects/haloduck/ui/src/lib/control/image-uploader/image-uploader.component.ts","../../../../projects/haloduck/ui/src/lib/control/image-uploader/image-uploader.component.html","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector-option/language-selector-option.component.ts","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector-option/language-selector-option.component.html","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector.component.ts","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector.component.html","../../../../projects/haloduck/ui/src/lib/control/map-to-address/map-to-address.component.ts","../../../../projects/haloduck/ui/src/lib/control/map-to-address/map-to-address.component.html","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu-item/side-menu-item.component.ts","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu-item/side-menu-item.component.html","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu.component.ts","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu.component.html","../../../../projects/haloduck/ui/src/lib/control/stl-viewer/stl-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/stl-viewer/stl-viewer.component.html","../../../../projects/haloduck/ui/src/lib/directive/auto-load.directive.ts","../../../../projects/haloduck/ui/src/lib/control/table/table.component.ts","../../../../projects/haloduck/ui/src/lib/control/table/table.component.html","../../../../projects/haloduck/ui/src/lib/control/toggle/toggle.component.ts","../../../../projects/haloduck/ui/src/lib/control/toggle/toggle.component.html","../../../../projects/haloduck/ui/src/lib/control/tabs/tabs.component.ts","../../../../projects/haloduck/ui/src/lib/control/tabs/tabs.component.html","../../../../projects/haloduck/ui/src/lib/control/tag-input/tag-input.component.ts","../../../../projects/haloduck/ui/src/lib/control/tag-input/tag-input.component.html","../../../../projects/haloduck/ui/src/lib/control/tag-viewer/tag-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/tag-viewer/tag-viewer.component.html","../../../../projects/haloduck/ui/src/lib/control/grouped/grouped.directive.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.service.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.component.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.component.html","../../../../projects/haloduck/ui/src/lib/layout/notification/notification.component.ts","../../../../projects/haloduck/ui/src/lib/layout/notification/notification.component.html","../../../../projects/haloduck/ui/src/lib/widget/picture-name/picture-name.component.ts","../../../../projects/haloduck/ui/src/lib/widget/picture-name/picture-name.component.html","../../../../projects/haloduck/ui/src/transloco/transloco.scope.ts","../../../../projects/haloduck/ui/src/haloduck-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { ulid } from 'ulid';\n\n// Flutter 앱과의 통신을 위한 전역 인터페이스 선언\ndeclare global {\n interface Window {\n FlutterApp?: {\n postMessage: (message: string) => void;\n };\n }\n}\n\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info';\nexport interface Notification {\n id: string;\n type: NotificationType;\n message: string;\n timeOut?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private listNotification$ = new BehaviorSubject<Notification[]>([]);\n private listNotification: Notification[] = [];\n\n showNotification(\n title: string,\n body: string,\n payload: any = null,\n timeout?: number,\n ) {\n if (window.FlutterApp) {\n window.FlutterApp.postMessage(\n JSON.stringify({\n action: 'showNotification',\n title: title,\n body: body,\n payload: payload,\n timeout: timeout,\n }),\n );\n } else if (\n 'Notification' in window &&\n Notification.permission === 'granted'\n ) {\n // 웹브라우저에서 실행될 때는 기본 브라우저 알림 사용\n new Notification(title, { body: body });\n } else {\n // 기본 내부 알림 시스템 사용\n this._showNotification('info', body, timeout ? timeout : undefined);\n }\n }\n\n _showNotification(\n type: NotificationType,\n message: string,\n timeOut?: number,\n ): string {\n const id = ulid();\n const notification: Notification = { id, type, message, timeOut };\n this.listNotification.push(notification);\n this.listNotification$.next(this.listNotification);\n\n if (timeOut) {\n setTimeout(() => {\n this.listNotification = this.listNotification.filter(\n (n) => n.id !== id,\n );\n\n this.listNotification$.next(this.listNotification);\n }, timeOut);\n }\n\n return id;\n }\n\n getListNotification(): Observable<Notification[]> {\n return this.listNotification$.asObservable();\n }\n\n removeNotificationById(id: string) {\n this.listNotification = this.listNotification.filter((n) => n.id !== id);\n this.listNotification$.next(this.listNotification);\n }\n\n constructor() {}\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'none';\n\n@Component({\n selector: 'haloduck-button',\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrl: './button.component.css'\n})\nexport class ButtonComponent {\n @Input() disabled: boolean | null = false;\n @Input() variant: ButtonVariant = 'primary'\n\n}\n","<button type=\"button\"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'bg-light-primary text-light-on-primary dark:bg-dark-primary dark:text-dark-on-primary': variant === 'primary' && !disabled,\n 'bg-light-primary-light text-light-on-primary-light dark:bg-dark-primary-light dark:text-dark-on-primary-light': variant === 'secondary' && !disabled,\n 'bg-light-danger text-light-on-danger dark:bg-dark-danger dark:text-dark-on-danger': variant === 'danger' && !disabled,\n 'bg-light-background text-light-on-background dark:bg-dark-background dark:text-dark-on-background border border-light-on-background dark:border-dark-on-background' : variant === 'none' && !disabled,\n 'bg-light-inactive text-light-on-inactive dark:bg-dark-inactive dark:text-dark-on-inactive active:animate-bounce hover:cursor-not-allowed': disabled,\n 'active:scale-95 transition-transform': !disabled,\n 'hover:cursor-pointer': !disabled\n }\"\n class=\"px-4 py-1.5 rounded-lg text-sm/6 w-full text-nowrap\">\n <ng-content></ng-content>\n</button>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n forwardRef,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class InputComponent implements ControlValueAccessor, AfterViewInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @ViewChild('label') label!: ElementRef;\n @ViewChild('input') private inputElement!: ElementRef<HTMLElement>;\n\n @Input() placeholder: string = '';\n @Input() type: string = 'text';\n @Input() disabled: boolean = false;\n @Input() rows: number = 1;\n @Input() autofocus: boolean = false;\n @Input() value: string = '';\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n focus() {\n this.inputElement?.nativeElement?.focus();\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n this.onTouched();\n\n if (this.rows > 1) {\n input.style.height = 'auto';\n input.style.height = input.scrollHeight + 'px';\n }\n }\n\n onKeydown($event: KeyboardEvent) {\n if (this.rows === 1 && $event.key === 'Enter') {\n $event.preventDefault();\n $event.stopPropagation();\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (!this.label.nativeElement.innerText.trim()) {\n this.label.nativeElement.style.display = 'none';\n }\n\n if (this.autofocus) {\n // Ensure change detection is complete and view is stable\n this.cdr.detectChanges();\n setTimeout(() => {\n if (this.inputElement?.nativeElement instanceof HTMLElement) {\n this.inputElement.nativeElement.focus();\n }\n }, 100);\n }\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n @if (rows > 1) {\n <textarea #input\n [value]=\"value\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n (keydown)=\"onKeydown($event)\"\n class=\"block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-3 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary sm:text-sm/6\"></textarea>\n }\n @else {\n <input #input\n [type]=\"type\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"onKeydown($event)\"\n class=\"block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-3 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary sm:text-sm/6\">\n }\n</div>\n","// auth.component.ts\nimport { Component, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { signIn, resetPassword, confirmResetPassword, confirmSignIn } from 'aws-amplify/auth';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { NotificationService } from '../../layout/notification/notification.service';\nimport { ButtonComponent } from '../../control/button/button.component';\nimport { InputComponent } from '../../control/input/input.component';\n\n@Component({\n selector: 'haloduck-authenticate',\n imports: [FormsModule, ReactiveFormsModule, InputComponent, ButtonComponent],\n templateUrl: './authenticate.component.html',\n styleUrl: './authenticate.component.css',\n})\nexport class AuthenticateComponent {\n private notificationService = inject(NotificationService);\n loginForm: FormGroup;\n signupForm: FormGroup;\n resetForm: FormGroup;\n newPasswordForm: FormGroup;\n otpForm: FormGroup;\n\n stage: 'login' | 'signup' | 'reset' | 'newPassword' | 'otpVerify' = 'login';\n emailForReset: string = '';\n\n constructor(\n private fb: FormBuilder,\n private http: HttpClient,\n ) {\n this.loginForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n });\n\n this.signupForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n });\n\n this.resetForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n });\n\n this.newPasswordForm = fb.group({\n newPassword: ['', Validators.required],\n });\n\n this.otpForm = fb.group({\n code: ['', Validators.required],\n newPassword: ['', Validators.required],\n });\n }\n\n switchStage(\n stage: 'login' | 'signup' | 'reset' | 'newPassword' | 'otpVerify',\n ) {\n this.stage = stage;\n }\n\n login() {\n signIn({\n username: this.loginForm.value.email,\n password: this.loginForm.value.password,\n options: {\n authFlowType: 'USER_PASSWORD_AUTH',\n },\n })\n .then((res: any) => {\n // console.log('res', res);\n // console.log('res.nextStep.signInStep', res.nextStep.signInStep);\n if (res.nextStep.signInStep === 'CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED') {\n this.switchStage('newPassword');\n } else {\n this.notificationService.showNotification(\n 'success',\n 'Successfully signed in.',\n 3000,\n );\n }\n })\n .catch((err) => {\n if (err.code === 'NotAuthorizedException') {\n this.switchStage('reset');\n } else {\n this.notificationService.showNotification(\n 'error',\n 'Failed to sign in.',\n );\n }\n });\n }\n\n confirmNewPassword() {\n confirmSignIn({\n challengeResponse: this.newPasswordForm.value.newPassword,\n })\n .then(() => {\n this.notificationService.showNotification(\n 'success',\n 'Successfully signed in.',\n 3000,\n );\n })\n .catch((err) => {\n if (err.code === 'NotAuthorizedException') {\n this.notificationService.showNotification(\n 'error',\n 'Failed to sign in.',\n );\n } else if (err.code === 'InvalidPasswordException') {\n this.notificationService.showNotification(\n 'error',\n 'Invalid password.',\n );\n } else {\n this.notificationService.showNotification(\n 'error',\n 'Failed to confirm new password.',\n );\n }\n });\n }\n\n signup() {\n this.http.post('/api/signup', this.signupForm.value).subscribe(console.log);\n }\n\n reset() {\n resetPassword({ username: this.resetForm.value.email })\n .then(() => {\n this.switchStage('otpVerify');\n })\n .catch((err) => {\n this.notificationService.showNotification(\n 'error',\n 'Failed to request verification code.',\n );\n });\n }\n\n verifyOtp() {\n confirmResetPassword({\n username: this.resetForm.value.email,\n confirmationCode: this.otpForm.value.code,\n newPassword: this.otpForm.value.newPassword,\n })\n .then(() => {\n this.notificationService.showNotification(\n 'success',\n 'Successfully reset password.',\n 3000,\n );\n this.switchStage('login');\n })\n .catch((err) => {\n this.notificationService.showNotification(\n 'error',\n 'Failed to reset password.',\n );\n });\n }\n\n get passwordValue(): string {\n return this.newPasswordForm.get('newPassword')?.value || '';\n }\n\n get isMinLength(): boolean {\n return this.passwordValue.length >= 8;\n }\n get hasUppercase(): boolean {\n return /[A-Z]/.test(this.passwordValue);\n }\n get hasLowercase(): boolean {\n return /[a-z]/.test(this.passwordValue);\n }\n get hasNumber(): boolean {\n return /[0-9]/.test(this.passwordValue);\n }\n get hasSpecialChar(): boolean {\n return /[^A-Za-z0-9]/.test(this.passwordValue);\n }\n get isPasswordValid(): boolean {\n return this.isMinLength && this.hasUppercase && this.hasLowercase && this.hasNumber && this.hasSpecialChar;\n }\n\n get passwordRules() {\n return [\n { label: 'minimum of 8 characters', valid: this.isMinLength },\n { label: 'one uppercase letter', valid: this.hasUppercase },\n { label: 'one lowercase letter', valid: this.hasLowercase },\n { label: 'one numeric digit', valid: this.hasNumber },\n { label: 'one special character', valid: this.hasSpecialChar },\n ];\n }\n}\n","<div class=\"flex flex-col items-center justify-center h-full\">\n <!-- auth.component.html -->\n <div class=\"w-full max-w-md mx-auto mt-20 p-8 shadow-lg rounded-2xl bg-light-background dark:bg-dark-background\">\n\n @switch (stage) {\n @case ('login') {\n <!-- 로그인 -->\n <form [formGroup]=\"loginForm\"\n (ngSubmit)=\"login()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-login-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-input data-testid=\"authenticate-login-password\"\n type=\"password\"\n formControlName=\"password\"\n placeholder=\"Password\" />\n <haloduck-button data-testid=\"authenticate-login-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"login()\">Sign In</haloduck-button>\n </form>\n }\n @case ('signup') {\n <!-- 회원가입 -->\n <form [formGroup]=\"signupForm\"\n (ngSubmit)=\"signup()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-signup-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-input data-testid=\"authenticate-signup-password\"\n type=\"password\"\n formControlName=\"password\"\n placeholder=\"Password\" />\n <haloduck-button data-testid=\"authenticate-signup-submit\"\n type=\"submit\"\n variant=\"primary\">Sign Up</haloduck-button>\n </form>\n }\n @case ('reset') {\n <!-- 비밀번호 재설정 요청 -->\n <form [formGroup]=\"resetForm\"\n (ngSubmit)=\"reset()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-reset-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-button data-testid=\"authenticate-reset-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"reset()\">Send Verification Code</haloduck-button>\n </form>\n }\n @case ('otpVerify') {\n <!-- OTP 인증 후 새 비밀번호 입력 -->\n <form [formGroup]=\"otpForm\"\n (ngSubmit)=\"verifyOtp()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-otp-code\"\n type=\"text\"\n formControlName=\"code\"\n placeholder=\"Verification Code\" />\n <haloduck-input data-testid=\"authenticate-otp-password\"\n type=\"password\"\n formControlName=\"newPassword\"\n placeholder=\"New password\" />\n <haloduck-button data-testid=\"authenticate-otp-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"verifyOtp()\">Reset Password</haloduck-button>\n </form>\n\n }\n @case ('newPassword') {\n <!-- 임시 비밀번호 → 새 비밀번호 변경 -->\n <form [formGroup]=\"newPasswordForm\"\n (ngSubmit)=\"confirmNewPassword()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-new-password-password\"\n type=\"password\"\n formControlName=\"newPassword\"\n placeholder=\"New password\">\n </haloduck-input>\n <div class=\"text-sm flex flex-col\">\n @for (rule of passwordRules; track rule.label) {\n <span [class.text-light-secondary]=\"rule.valid && passwordValue !== ''\"\n [class.line-through]=\"rule.valid && passwordValue !== ''\"\n [class.text-light-danger]=\"!rule.valid && passwordValue !== ''\"\n [class.text-light-inactive]=\"passwordValue === ''\">\n {{ rule.valid ? '✔' : '✗' }} {{ rule.label }}\n </span>\n }\n </div>\n <haloduck-button data-testid=\"authenticate-new-password-submit\"\n type=\"submit\"\n (click)=\"confirmNewPassword()\"\n variant=\"primary\"\n [disabled]=\"!isPasswordValid\">Change Password</haloduck-button>\n </form>\n }\n }\n\n <!-- 단계 전환 탭 -->\n <div class=\"flex justify-center mt-6 gap-4\">\n @if (stage !== 'login') {\n <haloduck-button data-testid=\"authenticate-to-signin\"\n variant=\"none\"\n (click)=\"switchStage('login')\">to Sign In</haloduck-button>\n }\n <!-- <haloduck-button class=\"text-sm text-blue-600 hover:underline\"\n (click)=\"switchStage('signup')\">회원가입</haloduck-button> -->\n @if (stage !== 'reset' && stage !== 'otpVerify' && stage !== 'newPassword') {\n <haloduck-button data-testid=\"authenticate-to-reset-password\"\n variant=\"secondary\"\n (click)=\"switchStage('reset')\">Reset Password</haloduck-button>\n }\n </div>\n\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, signal } from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { FormsModule } from '@angular/forms';\n\nexport interface Option {\n id?: string;\n value: string;\n isSticky?: boolean;\n isExclusive?: boolean;\n shouldManualInput?: boolean;\n manualPrefix?: string;\n}\n\n@Component({\n selector: 'haloduck-select-dropdown',\n imports: [TranslocoModule, FormsModule],\n templateUrl: './select-dropdown.component.html',\n styleUrl: './select-dropdown.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class SelectDropdownComponent {\n protected _filteredOptions = signal([] as Option[]);\n protected _options: Option[] = [];\n protected _selectedOptionIds: string[] = [];\n protected manualInputValues: Record<string, string> = {};\n protected activeManualKey: string | null = null;\n\n @Output() selectedChange = new EventEmitter<string[]>();\n @Output() closeDropdown = new EventEmitter<void>();\n @Input() useFilter: boolean = false;\n @Input() multiselect: boolean = true;\n @Input() atLeastOne: boolean = false;\n @Input() asButton: boolean = false;\n @Input() set options(value: Option[] | null) {\n this._options = value || [];\n this._filteredOptions.set(this._options);\n this.seedManualInputs();\n }\n get options(): Option[] | null {\n return this._filteredOptions();\n }\n @Input() set selectedOptionIds(value: string[] | null) {\n this._selectedOptionIds = value || [];\n this.seedManualInputs();\n }\n get selectedOptions(): string[] | null {\n return this._selectedOptionIds;\n }\n\n onFilterInput(event: Event) {\n const value = (event.target as HTMLInputElement).value.toLowerCase();\n this._filteredOptions.set(\n this._options.filter(\n (opt) => opt.value.toLowerCase().includes(value) || opt.isSticky === true,\n ),\n );\n }\n\n onToggleOption(option: Option) {\n if (this.asButton) {\n this.setSelected([option.id || option.value]);\n return;\n }\n\n // Handle manual input option\n if (option.shouldManualInput) {\n const key = this.getManualKey(option);\n const prefix = option.manualPrefix || '';\n const typed = (this.manualInputValues[key] || '').trim();\n const isSelected = this.isOptionSelected(option);\n\n if (isSelected) {\n // Deselect current manual value\n if (this.multiselect) {\n let next: string[];\n if (prefix) {\n next = this._selectedOptionIds.filter((id) => !id.startsWith(prefix));\n } else {\n next = this._selectedOptionIds.filter((id) => id !== typed);\n }\n this.setSelected(next);\n } else {\n this.setSelected([]);\n }\n // Clear input text when deselected\n this.manualInputValues[key] = '';\n // Hide input\n this.activeManualKey = null;\n } else {\n // open manual input and handle selection based on mode\n this.activeManualKey = key;\n \n // In single select mode, clear existing selections first\n if (!this.multiselect) {\n const sentinel = option.id || option.value;\n this.setSelected([sentinel]);\n }\n \n // ensure there is an entry in manualInputValues\n if (this.manualInputValues[key] === undefined) {\n this.manualInputValues[key] = '';\n }\n // focus input on next tick\n setTimeout(() => {\n const selector = `input[data-manual-key=\"${key}\"]`;\n const el = document.querySelector(selector) as HTMLInputElement | null;\n el?.focus();\n el?.select();\n });\n }\n return;\n }\n\n // Non-manual options\n if (this.multiselect) {\n const id = option.id || option.value;\n if (option.isExclusive) {\n if (this._selectedOptionIds.includes(id)) {\n this.setSelected([]);\n } else {\n this.setSelected([id]);\n }\n } else {\n // remove any exclusive selections\n let next = this._selectedOptionIds.filter((selectedId) => !this.isIdExclusive(selectedId));\n if (!next.includes(id)) {\n next = [id, ...next];\n } else {\n next = next.filter((x) => x !== id);\n }\n this.setSelected(next);\n }\n } else {\n const id = option.id || option.value;\n if (this.atLeastOne) {\n this.setSelected([id]);\n } else {\n if (this._selectedOptionIds.includes(id)) {\n this.setSelected([]);\n } else {\n this.setSelected([id]);\n }\n }\n }\n }\n\n isOptionSelected(option: Option): boolean {\n const id = option.id || option.value;\n if (option.shouldManualInput) {\n const key = this.getManualKey(option);\n const prefix = option.manualPrefix;\n \n // Check if this manual input option is currently active\n const isActive = this.activeManualKey === key;\n \n if (prefix) {\n // selected if there exists a value with more than prefix, OR if it's currently active\n const hasValueWithPrefix = this._selectedOptionIds.some((selectedId) =>\n typeof selectedId === 'string' && selectedId.startsWith(prefix) && selectedId.length > prefix.length,\n );\n return hasValueWithPrefix || isActive;\n }\n // no prefix: consider selected if any selected id equals current typed value (non-empty) OR if it's active\n const typed = (this.manualInputValues[key] || '').trim();\n const hasTypedValue = typed !== '' && this._selectedOptionIds.includes(typed);\n return hasTypedValue || isActive;\n }\n return this._selectedOptionIds.includes(id);\n }\n\n private isIdExclusive(id: string): boolean {\n for (const o of this._options) {\n if (!o.isExclusive) continue;\n const refId = o.id || o.value;\n if (refId === id) return true;\n if (o.shouldManualInput && o.manualPrefix && id?.startsWith(o.manualPrefix)) {\n return true;\n }\n }\n return false;\n }\n\n private getManualKey(option: Option): string {\n return option.manualPrefix || (option.id || option.value);\n }\n\n private seedManualInputs(): void {\n const manualOptions = this._options.filter((o) => o.shouldManualInput);\n for (const opt of manualOptions) {\n const prefix = opt.manualPrefix || '';\n const key = this.getManualKey(opt);\n const existingWithPrefix = this._selectedOptionIds.find((id) =>\n prefix ? id?.startsWith(prefix) : false,\n );\n const value = existingWithPrefix\n ? existingWithPrefix.substring(prefix.length)\n : '';\n this.manualInputValues[key] = value;\n }\n }\n\n onManualInputChange(option: Option, value: string) {\n const key = this.getManualKey(option);\n this.manualInputValues[key] = value;\n // Dynamically reflect selection as user types\n const prefix = option.manualPrefix || '';\n const sentinel = option.id || option.value;\n const trimmed = (value || '').trim();\n\n if (this.multiselect) {\n if (option.isExclusive) {\n if (trimmed === '') {\n // Keep the sentinel selected to maintain the manual input option as \"active\"\n this.setSelected([sentinel]);\n } else {\n this.setSelected([`${prefix}${trimmed}`]);\n }\n } else {\n let next = this._selectedOptionIds.filter((id) => !this.isIdExclusive(id));\n // remove same prefix or sentinel\n next = next.filter((id) => (prefix ? !id.startsWith(prefix) : id !== sentinel));\n if (trimmed !== '') {\n const toAdd = `${prefix}${trimmed}`;\n if (!next.includes(toAdd)) {\n next = [toAdd, ...next];\n }\n } else {\n // Keep the sentinel to maintain selection state when text is empty\n if (!next.includes(sentinel)) {\n next = [sentinel, ...next];\n }\n }\n this.setSelected(next);\n }\n } else {\n // single select\n if (trimmed === '') {\n // Keep the sentinel selected to maintain the manual input option as \"active\"\n this.setSelected([sentinel]);\n } else {\n this.setSelected([`${prefix}${trimmed}`]);\n }\n }\n }\n\n onManualInputConfirm(option: Option) {\n const key = this.getManualKey(option);\n const raw = (this.manualInputValues[key] || '').trim();\n // Use same logic as onManualInputChange\n this.onManualInputChange(option, raw);\n \n // Close dropdown in single select mode after confirming input\n if (!this.multiselect) {\n this.closeDropdown.emit();\n }\n }\n\n onManualInputBlur(option: Option) {\n const key = this.getManualKey(option);\n const raw = (this.manualInputValues[key] || '').trim();\n if (raw === '') {\n // hide input on blur when empty\n this.activeManualKey = null;\n \n // Also deselect the manual input option completely\n const prefix = option.manualPrefix || '';\n const sentinel = option.id || option.value;\n \n if (this.multiselect) {\n let next = [...this._selectedOptionIds];\n // Remove sentinel and any values with the prefix\n next = next.filter((id) => {\n if (id === sentinel) return false;\n if (prefix && id.startsWith(prefix)) return false;\n return true;\n });\n this.setSelected(next);\n } else {\n // Single select: deselect completely\n this.setSelected([]);\n }\n }\n }\n\n private emitSelectedChange(): void {\n const payload = [...this._selectedOptionIds];\n setTimeout(() => this.selectedChange.emit(payload));\n }\n\n private setSelected(next: string[]): void {\n const sanitized = next.filter((id) => id != null);\n setTimeout(() => {\n this._selectedOptionIds = sanitized;\n this.emitSelectedChange();\n });\n }\n\n\n}\n","<div id=\"dropdown\"\n class=\"max-w-full mt-2 absolute z-40 bg-light-background dark:bg-dark-background text-light-on-background dark:text-dark-on-background border border-light-inactive dark:border-dark-inactive rounded max-h-60 flex flex-col gap-2\">\n @if (useFilter && _options.length >= 5) {\n <input #inputFilter\n id=\"inputFilter\"\n type=\"text\"\n [placeholder]=\"'haloduck.ui.select.Keyword...' | transloco\"\n (input)=\"onFilterInput($event)\"\n class=\"text-light-inactive dark:text-dark-inactive rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary px-3 py-1.5 text-sm/6 bg-light-control dark:bg-dark-control m-2\" />\n }\n <div class=\"overflow-y-auto\">\n @for ( option of _filteredOptions(); track (option.id) ? option.id : option.value) {\n <div class=\"px-3 py-2 text-sm/6 hover:bg-light-secondary/60 dark:hover:bg-dark-secondary/60 flex items-center justify-start whitespace-nowrap\"\n [class.cursor-pointer]=\"!option.shouldManualInput\"\n (click)=\"onToggleOption(option)\">\n @if(!asButton) {\n @if( isOptionSelected(option)) {\n <svg class=\"w-4 h-4 text-light-primary dark:text-dark-primary inline-block mr-2\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 00-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <div class=\"w-4 h-4 inline-block mr-2\"></div>\n }\n }\n @if(option.shouldManualInput && (isOptionSelected(option) || (activeManualKey === (option.manualPrefix ? option.manualPrefix : (option.id || option.value))))) {\n <input type=\"text\"\n [(ngModel)]=\"manualInputValues[option.manualPrefix ? option.manualPrefix : (option.id || option.value)]\"\n [attr.data-manual-key]=\"option.manualPrefix ? option.manualPrefix : (option.id || option.value)\"\n (ngModelChange)=\"onManualInputChange(option, $event)\"\n (click)=\"$event.stopPropagation()\"\n (blur)=\"onManualInputBlur(option)\"\n (keydown.enter)=\"onManualInputConfirm(option)\"\n class=\"text-light-on-control dark:text-dark-on-control rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary px-2 py-1 text-sm/6 bg-light-control dark:bg-dark-control w-full\" />\n } @else {\n {{ option.value }}\n }\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n Output,\n signal,\n ViewChild,\n ChangeDetectorRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope, TranslocoService } from '@jsverse/transloco';\nimport { Option } from './select-dropdown/select-dropdown.component';\nimport { CommonModule } from '@angular/common';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\nimport { SelectDropdownComponent } from './select-dropdown/select-dropdown.component';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\n@Component({\n selector: 'haloduck-select',\n imports: [CommonModule],\n templateUrl: './select.component.html',\n styleUrl: './select.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class SelectComponent implements ControlValueAccessor, AfterViewInit, OnChanges {\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private overlayRef: OverlayRef | null = null;\n\n @Output() selectedChange = new EventEmitter<string[] | string>();\n @Input() disabled: boolean | null = false;\n @Input() loading: boolean = false;\n @Input() variant: 'primary' | 'secondary' | 'danger' | 'none' = 'none';\n @Input() asButton: boolean = false;\n @Input() useIcon: boolean = false;\n @Input() useFilter: boolean = false;\n @Input() multiselect: boolean = true;\n @Input() placeholder: string = '';\n @Input() atLeastOne: boolean = false;\n @Input() showAll: boolean = false;\n @Input() options: Option[] | null = null;\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() labelWidth: string = '';\n @Input() set value(value: string[] | string) {\n this.writeValue(value);\n this.onChange(this.getSelectedValue());\n }\n get value(): string | string[] | null {\n if (this.multiselect) {\n return this.selectedOptionIds;\n } else {\n if (this.selectedOptionIds.length === 0) {\n return null;\n }\n return this.selectedOptionIds[0];\n }\n }\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n @ViewChild('label') label!: ElementRef;\n\n isDropdownOpen = signal(false);\n\n selectedOptionIds: string[] = [];\n displayedSelectedOptions: Option[] = [];\n private selectedIdToDisplayOption: Record<string, Option> = {};\n\n onClick(event: MouseEvent) {\n if (this.disabled) {\n return;\n }\n\n const originWidth = this.origin?.nativeElement?.offsetWidth || 0;\n\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n minWidth: originWidth,\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n });\n }\n\n if (!this.overlayRef.hasAttached()) {\n const portal = new ComponentPortal(\n SelectDropdownComponent,\n this.viewContainerRef,\n );\n const componentRef: ComponentRef<SelectDropdownComponent> =\n this.overlayRef.attach(portal);\n componentRef.instance.options = this.options;\n componentRef.instance.selectedOptionIds = this.selectedOptionIds;\n componentRef.instance.useFilter = this.useFilter;\n componentRef.instance.multiselect = this.multiselect;\n componentRef.instance.atLeastOne = this.atLeastOne;\n componentRef.instance.asButton = this.asButton;\n\n componentRef.instance.selectedChange.subscribe((selectedOptionIds) => {\n const payload = Array.isArray(selectedOptionIds)\n ? [...selectedOptionIds]\n : selectedOptionIds;\n setTimeout(() => {\n this.selectedOptionIds = payload as string[];\n this.recomputeSelectedOptions();\n this.onChange(this.getSelectedValue());\n this.selectedChange.emit(payload);\n this.cdr.markForCheck();\n\n // Keep dropdown open if a manual-input option is selected (to allow typing)\n const shouldKeepOpenForManual = this.isManualSelection(this.selectedOptionIds);\n if (!this.multiselect && !shouldKeepOpenForManual) {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n }\n });\n });\n\n componentRef.instance.closeDropdown.subscribe(() => {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n });\n\n this.isDropdownOpen.set(true);\n } else {\n this.isDropdownOpen.set(false);\n this.overlayRef.detach();\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n return;\n }\n\n if (event.key === 'Enter') {\n }\n }\n\n onDeselectOption(event: Event, option: Option) {\n if (this.disabled) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n this.selectedOptionIds = this.selectedOptionIds.filter(\n (selected) => selected !== (option.id || option.value),\n );\n this.recomputeSelectedOptions();\n this.onChange(this.getSelectedValue());\n this.selectedChange.emit(this.selectedOptionIds);\n\n this.isDropdownOpen.set(false);\n }\n\n getSelectedValue(): string | string[] | null {\n if (!this.multiselect) {\n if (this.selectedOptionIds.length > 0) {\n return this.selectedOptionIds[0];\n } else {\n return null;\n }\n } else {\n return this.selectedOptionIds;\n }\n }\n\n onChange = (_value: any) => {};\n onTouched = () => {};\n\n writeValue(value: string[] | string): void {\n if (Array.isArray(value)) {\n this.selectedOptionIds = value.filter(id => id !== null && id !== undefined && id !== '');\n } else {\n this.selectedOptionIds = (value !== null && value !== undefined && value !== '') ? [value] : [];\n }\n this.recomputeSelectedOptions();\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.select.Select...', {}, 'haloduck')\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options']) {\n this.recomputeSelectedOptions();\n }\n }\n\n private recomputeSelectedOptions(): void {\n const options = this.options || [];\n const result: Option[] = [];\n const nextMap: Record<string, Option> = {};\n\n const selectedIds = [...this.selectedOptionIds];\n const consumed = new Set<string>();\n\n const resolveDisplayForId = (selectedId: string): Option => {\n // 1) exact match by id or value\n const exact = options.find((opt) => (opt.id || opt.value) === selectedId);\n if (exact) {\n return exact;\n }\n // 2) manual prefix match → create synthetic option for display\n const manual = options.find((opt) => {\n if (!opt.shouldManualInput) return false;\n if (opt.manualPrefix) {\n return selectedId.startsWith(opt.manualPrefix);\n }\n // when no prefix, match by sentinel id/value\n return (opt.id || opt.value) === selectedId;\n });\n if (manual) {\n const cached = this.selectedIdToDisplayOption[selectedId];\n return cached || { ...manual, id: selectedId, value: selectedId };\n }\n // 3) fallback when options array is missing the corresponding option definition\n const cached = this.selectedIdToDisplayOption[selectedId];\n return cached || { id: selectedId, value: selectedId };\n };\n\n if (this.multiselect) {\n // Order by options sequence first\n for (const opt of options) {\n if (opt.shouldManualInput) {\n const manualId = opt.manualPrefix\n ? selectedIds.find((id) => id.startsWith(opt.manualPrefix as string))\n : selectedIds.find((id) => id === (opt.id || opt.value));\n if (manualId) {\n const display = resolveDisplayForId(manualId);\n result.push(display);\n nextMap[manualId] = display;\n consumed.add(manualId);\n }\n } else {\n const id = opt.id || opt.value;\n if (selectedIds.includes(id)) {\n const display = resolveDisplayForId(id);\n result.push(display);\n nextMap[id] = display;\n consumed.add(id);\n }\n }\n }\n // Append any remaining selected ids in their existing order\n for (const selectedId of selectedIds) {\n if (consumed.has(selectedId)) continue;\n const display = resolveDisplayForId(selectedId);\n result.push(display);\n nextMap[selectedId] = display;\n }\n } else {\n // Single select: keep as-is (only one item), but still resolve display\n for (const selectedId of selectedIds) {\n const display = resolveDisplayForId(selectedId);\n result.push(display);\n nextMap[selectedId] = display;\n }\n }\n\n this.displayedSelectedOptions = result;\n this.selectedIdToDisplayOption = nextMap;\n }\n\n private isManualSelection(selectedIds: string[]): boolean {\n const options = this.options || [];\n for (const id of selectedIds) {\n const manual = options.find((opt) => opt.shouldManualInput);\n if (!manual) continue;\n if (manual.manualPrefix) {\n if (id.startsWith(manual.manualPrefix)) return true;\n // allow initial sentinel selection to keep open\n if ((manual.id || manual.value) === id) return true;\n } else {\n if ((manual.id || manual.value) === id) return true;\n }\n }\n return false;\n }\n}\n","<div class=\"flex gap-2 items-center w-full\"\n [ngClass]=\"{'flex-col items-start': layout === 'vertical'}\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control {{ labelWidth }}\"\n [ngClass]=\"{'w-full': layout === 'vertical'}\">\n <!-- <ng-content select=\"[slot=label]\"></ng-content> -->\n <ng-content></ng-content>\n </label>\n <div #origin\n class=\"w-full flex-1 relative overflow-visible rounded-md outline outline-light-inactive dark:outline-dark-inactive text-sm/6\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary focus:dark:outline-dark-primary': !disabled,\n 'bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary' : variant === 'primary' && !disabled,\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary' : variant === 'secondary' && !disabled,\n 'bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger' : variant === 'danger' && !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\">\n <div class=\"px-3 py-1.5 text-sm/6 cursor-pointer flex flex-nowrap items-center justify-between overflow-hidden\">\n @if(loading){\n <div class=\"flex-1 flex items-center gap-2 w-full h-3\">\n <div class=\"animate-pulse bg-light-inactive dark:bg-dark-inactive rounded-md h-5 w-full\"> </div>\n </div>\n }\n @else{\n <div class=\"flex-1\">\n @if (!asButton && displayedSelectedOptions && displayedSelectedOptions.length > 0) {\n @if (multiselect) {\n <div class=\"flex flex-wrap gap-x-2 gap-y-1 items-start\">\n @for (option of displayedSelectedOptions; track option; let i = $index) {\n @if (showAll || i === 0) {\n <span class=\"bg-light-secondary dark:bg-dark-secondary rounded-md flex items-center text-xs/6 text-light-on-secondary dark:text-dark-on-secondary\"\n [ngClass]=\"{'w-full h-full px-4': !multiselect, 'px-1': multiselect}\">\n {{ option.value }}\n @if (showAll || i === 0) {\n <div (click)=\"onDeselectOption($event, option)\"\n class=\"ml-2 text-light-danger dark:text-dark-danger hover:cursor-pointer\">\n <svg class=\"w-3 h-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M10 8.586l-2.293-2.293a1 1 0 00-1.414 1.414L8.586 10l-2.293 2.293a1 1 0 001.414 1.414L10 11.414l2.293 2.293a1 1 0 001.414-1.414L11.414 10l2.293-2.293a1 1 0 00-1.414-1.414L10 8.586z\"\n clip-rule=\"evenodd\" />\n </svg>\n </div>\n }\n </span>\n @if (!showAll && displayedSelectedOptions.length > 1) {\n <span class=\"text-light-on-control/80 dark:text-dark-on-control/80 text-xs/6\">\n +{{ displayedSelectedOptions.length - 1 }}\n </span>\n }\n }\n }\n </div>\n } @else {\n <span class=\"text-light-on-control dark:text-dark-on-control overflow-hidden overflow-ellipsis\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary dark:text-dark-on-primary': variant === 'primary' && !disabled,\n 'text-light-on-secondary dark:text-dark-on-secondary': variant === 'secondary' && !disabled,\n 'text-light-on-danger dark:text-dark-on-danger': variant === 'danger' && !disabled,\n }\">{{ displayedSelectedOptions[0].value }}</span>\n }\n } @else {\n <span class=\"text-light-inactive dark:text-dark-inactive overflow-hidden overflow-ellipsis\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary/80 dark:text-dark-on-primary/80': variant === 'primary' && !disabled,\n 'text-light-on-secondary/80 dark:text-dark-on-secondary/80': variant === 'secondary' && !disabled,\n 'text-light-on-danger/80 dark:text-dark-on-danger/80': variant === 'danger' && !disabled,\n }\">\n @if (useIcon) {\n <ng-content select=\"buttonIcon\"></ng-content>\n } @else {\n {{ placeholder }}\n }\n </span>\n }\n </div>\n }\n <div class=\"text-light-on-control dark:text-dark-on-control\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary/80 dark:text-dark-on-primary/80': variant === 'primary' && !disabled,\n 'text-light-on-secondary/80 dark:text-dark-on-secondary/80': variant === 'secondary' && !disabled,\n 'text-light-on-danger/80 dark:text-dark-on-danger/80': variant === 'danger' && !disabled,\n }\">\n @if (isDropdownOpen()) {\n <svg class=\"w-4 h-4 ml-2 inline-block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <svg class=\"w-4 h-4 ml-2 inline-block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n }\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { SelectComponent } from '../select/select.component';\nimport { Option } from '../select/select-dropdown/select-dropdown.component';\nimport { FormsModule } from '@angular/forms';\nimport {\n provideTranslocoScope,\n TranslocoModule,\n TranslocoService,\n} from '@jsverse/transloco';\nimport { zip } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface DateRange {\n from: string;\n to: string;\n}\n\nexport interface DateRangeDropdown {\n currentYear: number;\n currentMonth: number;\n from?: string;\n listCalendarDate: CalendarDate[];\n}\n\nexport interface CalendarDate {\n datetime: string;\n date: string;\n isToday: boolean;\n isTheDate: boolean;\n isCurrentMonth: boolean;\n}\n\n@Component({\n selector: 'haloduck-calendar',\n imports: [CommonModule, SelectComponent, FormsModule, TranslocoModule],\n templateUrl: './calendar.component.html',\n styleUrl: './calendar.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class CalendarComponent implements OnInit {\n private readonly translateService = inject(TranslocoService);\n @ViewChild('monthSelect', { static: false })\n monthSelect!: SelectComponent;\n @Input() singleDate: boolean = false;\n @Input() firstDayOfWeek: number = 1; // monday\n @Input() selectedDate?: string;\n @Input() selectedDateRange?: DateRange;\n @Output() dateChange = new EventEmitter<CalendarDate>();\n @Output() dateRangeChange = new EventEmitter<DateRange>();\n currentYear: number = new Date().getFullYear();\n currentMonth: number = new Date().getMonth();\n listCalendarDate: CalendarDate[] = [];\n isFromSelected: boolean = false;\n\n yearList: Option[] = [];\n monthList: Option[] = [];\n\n onAdjustYear(amount: number) {\n this.currentYear += amount;\n this.calculateDateRangeDropdown();\n }\n\n onAdjustMonth(amount: number) {\n this.currentMonth += amount;\n\n if (this.currentMonth < 0) {\n this.currentYear--;\n this.currentMonth = 11;\n } else if (this.currentMonth > 11) {\n this.currentYear++;\n this.currentMonth = 0;\n }\n\n this.calculateDateRangeDropdown();\n }\n\n onSelectCalendarDate(date: CalendarDate) {\n if (this.singleDate) {\n this.dateChange.emit(date);\n } else {\n if (!this.isFromSelected) {\n this.selectedDateRange = {\n from: date.datetime,\n to: date.datetime,\n };\n this.isFromSelected = true;\n } else {\n if (this.selectedDateRange?.from) {\n const from =\n this.selectedDateRange.from < date.datetime\n ? this.selectedDateRange.from\n : date.datetime;\n const to =\n this.selectedDateRange.from < date.datetime\n ? date.datetime\n : this.selectedDateRange.from;\n\n this.dateRangeChange.emit({\n from,\n to,\n });\n\n this.isFromSelected = false;\n }\n }\n }\n }\n\n onCalenderOpen(value: string | DateRange) {\n // const currentDate = (this.singleDate) ? () : ( value && value.from && value.to ? value.from :dateToString(new Date()));\n let currentDate: string;\n if (this.singleDate) {\n const date = value as string;\n currentDate = date ? date : dateToString(new Date());\n } else {\n const dateRange = value as DateRange;\n currentDate =\n dateRange && dateRange.from && dateRange.to\n ? dateRange.from\n : dateToString(new Date());\n }\n\n this.currentYear = parseInt(currentDate.slice(0, 4), 10);\n this.currentMonth = parseInt(currentDate.slice(5, 7), 10) - 1;\n\n this.calculateDateRangeDropdown();\n }\n\n calculateDateRangeDropdown() {\n const weekdayOfFirstOfMonth = new Date(\n this.currentYear,\n this.currentMonth,\n 1\n ).getDay();\n const firstOfCalendar = new Date(\n this.currentYear,\n this.currentMonth,\n 1 - weekdayOfFirstOfMonth + this.firstDayOfWeek\n );\n if (firstOfCalendar > new Date(this.currentYear, this.currentMonth, 1)) {\n firstOfCalendar.setDate(firstOfCalendar.getDate() - 7);\n }\n const lastOfCalendar = new Date(firstOfCalendar);\n lastOfCalendar.setDate(lastOfCalendar.getDate() + 41);\n if (lastOfCalendar.getDate() > 6) {\n lastOfCalendar.setDate(lastOfCalendar.getDate() - 7);\n }\n const dateDiff =\n Math.ceil(\n (lastOfCalendar.getTime() - firstOfCalendar.getTime()) /\n (1000 * 60 * 60 * 24)\n ) + 1;\n\n this.listCalendarDate = [];\n\n for (let i = 0; i < dateDiff; i++) {\n const datetime = dateToString(firstOfCalendar);\n const date = firstOfCalendar.getDate().toString();\n const isToday =\n firstOfCalendar.toDateString() === new Date().toDateString();\n const isCurrentMonth = firstOfCalendar.getMonth() === this.currentMonth;\n const isTheDate =\n (this.singleDate && this.selectedDate\n ? datetime === this.selectedDate\n : this.selectedDateRange &&\n this.selectedDateRange.from &&\n this.selectedDateRange.to &&\n datetime >= this.selectedDateRange.from &&\n datetime <= this.selectedDateRange.to) || false;\n\n this.listCalendarDate.push({\n datetime,\n date,\n isToday,\n isTheDate,\n isCurrentMonth,\n });\n\n firstOfCalendar.setDate(firstOfCalendar.getDate() + 1);\n }\n }\n\n onSelectYear(year: string | string[]) {\n year = year as string;\n this.currentYear = parseInt(year, 10);\n this.calculateDateRangeDropdown();\n }\n\n onSelectMonth(month: string | string[]) {\n month = month as string;\n this.currentMonth = parseInt(month, 10);\n this.calculateDateRangeDropdown();\n }\n\n ngOnInit(): void {\n if (this.singleDate) {\n this.onCalenderOpen(this.selectedDate ?? dateToString(new Date()));\n } else {\n this.onCalenderOpen(\n this.selectedDateRange ?? {\n from: dateToString(new Date()),\n to: dateToString(new Date()),\n }\n );\n }\n }\n\n constructor() {\n const currentYear = new Date().getFullYear();\n this.translateService\n .selectTranslate('ui.calendar._year_', { year: '_year_' }, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n this.yearList = [];\n for (let i = currentYear; i >= currentYear - 150; i--) {\n this.yearList.push({\n id: i.toString(),\n value: translation.replace('_year_', i.toString()),\n });\n }\n });\n\n zip(\n this.translateService.selectTranslate('ui.calendar.January', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.February', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.March', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.April', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.May', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.June', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.July', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.August', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.September', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.October', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.November', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.December', {}, 'haloduck')\n )\n .pipe(takeUntilDestroyed())\n .subscribe((translations) => {\n this.monthList = [\n {\n id: '0',\n value: translations[0],\n },\n {\n id: '1',\n value: translations[1],\n },\n {\n id: '2',\n value: translations[2],\n },\n {\n id: '3',\n value: translations[3],\n },\n {\n id: '4',\n value: translations[4],\n },\n {\n id: '5',\n value: translations[5],\n },\n {\n id: '6',\n value: translations[6],\n },\n {\n id: '7',\n value: translations[7],\n },\n {\n id: '8',\n value: translations[8],\n },\n {\n id: '9',\n value: translations[9],\n },\n {\n id: '10',\n value: translations[10],\n },\n {\n id: '11',\n value: translations[11],\n },\n ];\n });\n }\n}\n\n// return yyyy-mm-dd\nexport function dateToString(date: Date): string {\n return (\n date.getFullYear() +\n '-' +\n (date.getMonth() + 1).toString().padStart(2, '0') +\n '-' +\n date.getDate().toString().padStart(2, '0')\n );\n}\n","<div id=\"dateRangeCalendar\"\n class=\"min-w-96 brightness-125 bg-light-background dark:bg-dark-background border border-light-inactive dark:border-dark-inactive rounded text-center p-4 flex flex-col gap-4\"\n tabindex=\"1\">\n\n <div class=\"flex items-center\">\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\"\n (click)=\"onAdjustYear(-1)\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold flex justify-center\">\n <div class=\"w-32\">\n <haloduck-select [multiselect]=\"false\"\n [atLeastOne]=\"true\"\n [options]=\"yearList\"\n [value]=\"currentYear + ''\"\n (selectedChange)=\"onSelectYear($event)\">\n </haloduck-select>\n </div>\n </div>\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\"\n (click)=\"onAdjustYear(1)\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <div class=\"flex items-center\">\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\n\"\n (click)=\"onAdjustMonth(-1)\">\n <span class=\"sr-only\">이전 달</span>\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold flex justify-center\">\n <div class=\"w-32\">\n <haloduck-select [multiselect]=\"false\"\n [atLeastOne]=\"true\"\n [options]=\"monthList\"\n [value]=\"currentMonth + ''\"\n (selectedChange)=\"onSelectMonth($event)\">\n </haloduck-select>\n </div>\n </div>\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\n\"\n (click)=\"onAdjustMonth(1)\">\n <span class=\"sr-only\">다음 달</span>\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <div>\n <div\n class=\"grid grid-cols-7 gap-[1px] text-xs/6 font-semibold text-light-on-background dark:text-dark-on-background\">\n <div>{{ 'haloduck.ui.calendar.Mon' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Tue' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Wed' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Thu' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Fri' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Sat' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Sun' | transloco }}</div>\n </div>\n\n <div class=\"isolate mt-2 grid grid-cols-7 gap-[1px] rounded-lg text-sm shadow overflow-hidden\">\n @for (date of listCalendarDate; track date.datetime) {\n <button type=\"button\"\n (click)=\"onSelectCalendarDate(date)\"\n class=\"py-1.5 hover:cursor-pointer bg-light-alternative dark:bg-dark-alternative text-light-on-alternative dark:text-dark-on-alternative\"\n [ngClass]=\"{'bg-light-control dark:bg-dark-control text-light-on-control dark:text-dark-on-control' : date.isCurrentMonth}\">\n <time [ngClass]=\"{'font-semibold bg-light-primary-light dark:bg-dark-primary-light text-on-light-primary-light dark:text-dark-on-primary-light': date.isToday && date.datetime !== selectedDateRange?.from,\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary': date.datetime === selectedDateRange?.from,\n 'bg-gray-500 font-semibold text-white' : date.isTheDate}\"\n class=\"mx-auto flex size-7 items-center justify-center rounded-full hover:font-bold\">{{date.date}}</time>\n </button>\n }\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'haloduck-dialog-container',\n templateUrl: './dialog-container.component.html',\n styleUrl: './dialog-container.component.css',\n})\nexport class DialogContainerComponent implements OnInit, AfterViewInit {\n @Input() childComponent!: Type<any>;\n @Input() data: any;\n @Output() close = new EventEmitter<void>();\n @ViewChild('dialogContainer', { read: ViewContainerRef })\n dialogContainer!: ViewContainerRef;\n\n ngAfterViewInit(): void {\n if (this.childComponent) {\n const componentRef: ComponentRef<any> =\n this.dialogContainer.createComponent(this.childComponent);\n if (this.data) {\n Object.assign(componentRef.instance, { context: this.data });\n }\n\n if (this.data.classList) {\n this.data.classList.forEach((className: string) => {\n componentRef.location.nativeElement.classList.add(className);\n });\n }\n\n componentRef.location.nativeElement.classList.add('max-w-full');\n componentRef.location.nativeElement.classList.add('max-h-full');\n componentRef.location.nativeElement.classList.add('text-light-on-background');\n componentRef.location.nativeElement.classList.add('dark:text-dark-on-background');\n componentRef.location.nativeElement.classList.add('bg-light-background');\n componentRef.location.nativeElement.classList.add('dark:bg-dark-background');\n componentRef.location.nativeElement.classList.add('p-4');\n componentRef.location.nativeElement.classList.add('rounded-lg');\n componentRef.location.nativeElement.classList.add('overflow-auto');\n }\n }\n\n ngOnInit(): void {}\n\n closeDialog() {\n this.close.emit();\n }\n}\n","<div class=\"h-full w-full max-h-full max-w-full fixed inset-0 bg-black/50 flex items-center justify-center overflow-hidden\">\n <!-- <div class=\"w-full h-full max-w-full max-h-full bg-white p-5 rounded-lg overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"> -->\n <ng-container id=\"dialogContainer\"\n #dialogContainer></ng-container>\n <!-- </div> -->\n</div>\n","import { Injectable, Injector, TemplateRef, Type } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DialogContainerComponent } from './dialog-container.component';\n\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private dialogStack: OverlayRef[] = []; // 다이얼로그 스택\n\n constructor(private overlay: Overlay, private injector: Injector) {}\n\n open<T>(component: Type<T> | TemplateRef<any>, data?: any, classList?: string[]): OverlayRef {\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n panelClass: 'custom-dialog-panel',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n const portal = new ComponentPortal(DialogContainerComponent);\n const containerRef = overlayRef.attach(portal);\n\n containerRef.instance.childComponent = component as Type<T>;\n containerRef.instance.data = { ...data, overlayRef, classList };\n containerRef.instance.close.subscribe(() => this.close(overlayRef));\n\n this.dialogStack.push(overlayRef);\n\n return overlayRef;\n }\n\n close(overlayRef?: OverlayRef): void {\n if (overlayRef) {\n overlayRef.dispose();\n this.dialogStack = this.dialogStack.filter(ref => ref !== overlayRef);\n } else {\n // 마지막 다이얼로그 닫기\n const lastOverlay = this.dialogStack.pop();\n lastOverlay?.dispose();\n }\n }\n\n closeAll(): void {\n while (this.dialogStack.length) {\n this.dialogStack.pop()?.dispose();\n }\n }\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { ButtonComponent, ButtonVariant } from '../button/button.component';\n\nexport interface Button {\n id: string;\n label: string;\n variant: ButtonVariant;\n}\n\n@Component({\n selector: 'haloduck-confirm-dialog',\n imports: [ButtonComponent],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.css',\n})\nexport class ConfirmDialogComponent implements OnInit{\n private readonly dialogService = inject(DialogService);\n @Input() context!: { title: string; message: string; buttons: Button[], clickedButton$: any, overlayRef: any };\n\n onButtonClicked(id: string) {\n this.context.clickedButton$.next(id);\n this.context.clickedButton$.complete();\n\n this.dialogService.close(this.context.overlayRef);\n }\n\n ngOnInit(): void {\n }\n\n constructor() {\n }\n}\n\n","<div class=\"w-120 max-w-full flex flex-col gap-4 text-light-on-background dark:text-dark-on-background bg-light-background dark:bg-dark-background\">\n <div class=\"font-bold\">{{ context.title }}</div>\n <p>{{ context.message }}</p>\n <div class=\"flex items-center justify-center gap-4\">\n @for (button of context.buttons; track button.id) {\n <haloduck-button [variant]=\"button.variant\"\n (click)=\"onButtonClicked(button.id)\">{{ button.label }}</haloduck-button>\n }\n </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { Button, ConfirmDialogComponent } from './confirm-dialog.component';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfirmDialogService {\n private readonly dialogService = inject(DialogService);\n private clickedButton$!: Subject<string>;\n\n public confirm(\n title: string,\n message: string,\n buttons: Button[]\n ): Observable<string> {\n this.clickedButton$ = new Subject<string>();\n\n const dialogRef = this.dialogService.open<ConfirmDialogComponent>(\n ConfirmDialogComponent,\n {\n title,\n message,\n buttons,\n clickedButton$: this.clickedButton$,\n }\n );\n\n return this.clickedButton$.asObservable();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-copy-button',\n imports: [TranslocoModule],\n templateUrl: './copy-button.component.html',\n styleUrl: './copy-button.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class CopyButtonComponent {\n @Input() text: string = '';\n isAnimating = false;\n\n copyToClipboard($event: Event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n this.isAnimating = true;\n setTimeout(() => {\n this.isAnimating = false;\n }, 500); // Animation duration\n\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(this.text)\n // .then(() => {\n // console.log('Text copied to clipboard');\n // })\n // .catch((err) => {\n // console.error('Failed to copy text: ', err);\n // });\n } else {\n const textArea = document.createElement('textarea');\n textArea.value = this.text;\n textArea.style.position = 'fixed'; // Avoid scrolling to bottom\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n try {\n document.execCommand('copy');\n // console.log('Text copied to clipboard');\n } catch (err) {\n // console.error('Failed to copy text: ', err);\n }\n document.body.removeChild(textArea);\n }\n }\n}\n","<ng-container *transloco=\"let _ts; read: 'haloduck'\">\n <button type=\"button\"\n class=\"group inline-flex items-center px-2 py-1 bg-light-alternative dark:bg-dark-alternative hover:brightness-125 rounded text-xs text-light-on-alternative dark:text-dark-on-alternative hover:cursor-pointer active:scale-95 transition-transform\"\n (click)=\"copyToClipboard($event)\"\n title=\"Copy to clipboard\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n [class]=\"'h-4 w-4 mr-1 transition-all duration-500 ' + (isAnimating ? 'scale-150 opacity-0' : 'scale-100 opacity-100')\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <rect x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n fill=\"none\" />\n <rect x=\"3\"\n y=\"3\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n fill=\"none\" />\n </svg>\n <span class=\"hidden group-hover:inline\">\n @if (isAnimating) {\n {{ _ts('ui.button.Copied') }}\n } @else {\n {{ _ts('ui.button.Copy') }}\n }\n </span>\n </button>\n</ng-container>\n","import {\n Component,\n ComponentRef,\n ElementRef,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { Subject, takeUntil } from 'rxjs';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { provideTranslocoScope, TranslocoService } from '@jsverse/transloco';\n\nimport {\n CalendarComponent,\n CalendarDate,\n} from '../calendar/calendar.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'haloduck-date-picker',\n imports: [CommonModule, FormsModule],\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class DatePickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n\n @Input() disabled: boolean = false;\n @Input() placeholder: string = '';\n @Input() firstDayOfWeek: number = 1;\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n selectedDate?: string;\n\n private overlayRef?: OverlayRef;\n\n onClick() {\n if (this.disabled) {\n return;\n }\n\n this.openCalendar();\n }\n\n onDateChange(date: CalendarDate) {\n this.selectedDate = date.datetime;\n this.onChange(this.selectedDate);\n }\n\n openCalendar() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(CalendarComponent);\n const componentRef: ComponentRef<CalendarComponent> =\n this.overlayRef.attach(calendarPortal);\n\n // Pass values directly to the CalendarComponent instance\n componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n componentRef.instance.singleDate = true;\n componentRef.instance.selectedDate = this.selectedDate;\n\n // Subscribe to events emitted by the CalendarComponent\n componentRef.instance.dateChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n this.onDateChange(date);\n this.closeCalendar();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.closeCalendar();\n });\n }\n }\n\n closeCalendar() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: string): void {\n this.selectedDate = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.calendar.Pick a date.', {}, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n }\n}\n","<label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n</label>\n<div #origin\n class=\"py-1.5 relative mt-2 gap-2 rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary': !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick()\">\n <div class=\"flex items-center\">\n <div class=\"flex-1 text-light-on-control dark:text-dark-on-control sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-inactive dark:text-dark-inactive': !selectedDate && !disabled,\n 'text-light-on-control dark:text-dark-on-control': selectedDate && !disabled,\n }\"> {{ selectedDate || placeholder }}</div>\n </div>\n</div>\n","import {\n Component,\n forwardRef,\n Input,\n OnDestroy,\n ComponentRef,\n ViewChild,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subject, zip, takeUntil } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n TranslocoModule,\n TranslocoService,\n provideTranslocoScope,\n} from '@jsverse/transloco';\nimport { SelectComponent } from '../select/select.component';\nimport { Option } from '../select/select-dropdown/select-dropdown.component';\nimport {\n DateRange,\n dateToString,\n CalendarComponent,\n} from '../calendar/calendar.component';\n\n@Component({\n selector: 'haloduck-date-range',\n imports: [SelectComponent, CommonModule, FormsModule, TranslocoModule],\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class DateRangeComponent\n implements ControlValueAccessor, OnDestroy\n{\n destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n\n @Input() dateRangeOptions: Option[] = [];\n @Input() disabled: boolean = false;\n @Input() placeholder: string = '';\n @Input() firstDayOfWeek: number = 1;\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n selectedDateRangeOptionId?: string;\n dateRange?: DateRange = undefined;\n\n private overlayRef?: OverlayRef;\n\n getSelectedDateRangeString(): any {\n return (\n this.dateRange &&\n this.dateRange.from &&\n this.dateRange.to &&\n this.dateRange.from + ' ~ ' + this.dateRange.to\n );\n }\n\n onClick() {\n if (this.disabled) {\n return;\n }\n\n this.openCalendar();\n }\n\n onDateRangeOptionChange(selectedOptionId: string) {\n this.selectedDateRangeOptionId = selectedOptionId;\n if (this.selectedDateRangeOptionId !== 'custom') {\n this.calculateDateRange();\n } else {\n this.openCalendar();\n }\n }\n\n onDateRangeChange(dateRange: DateRange) {\n this.dateRange = dateRange;\n this.selectedDateRangeOptionId = 'custom';\n this.onChange(this.dateRange);\n }\n\n calculateDateRange() {\n if (!this.selectedDateRangeOptionId) {\n } else if (this.selectedDateRangeOptionId !== 'custom') {\n const unit = this.selectedDateRangeOptionId.charAt(0);\n const amount = parseInt(this.selectedDateRangeOptionId.slice(1), 10);\n let from = new Date();\n let to = new Date();\n\n switch (unit) {\n case 'd':\n from = new Date(to);\n from.setDate(to.getDate() - amount);\n break;\n case 'm':\n from = new Date(to);\n from.setMonth(to.getMonth() - amount);\n break;\n case 'y':\n from = new Date(to);\n from.setFullYear(to.getFullYear() - amount);\n break;\n default:\n break;\n }\n\n this.dateRange = {\n from: dateToString(from),\n to: dateToString(to),\n };\n\n this.onChange(this.dateRange);\n }\n }\n\n getDateRangeOptionId(dateRange: DateRange): string {\n const selectedOption = this.dateRangeOptions.find((option) => {\n const unit = (option.id || option.value).charAt(0);\n const amount = parseInt((option.id || option.value).slice(1), 10);\n let from = new Date();\n let to = new Date();\n\n switch (unit) {\n case 'd':\n from = new Date(to);\n from.setDate(to.getDate() - amount);\n break;\n case 'm':\n from = new Date(to);\n from.setMonth(to.getMonth() - amount);\n break;\n case 'y':\n from = new Date(to);\n from.setFullYear(to.getFullYear() - amount);\n break;\n default:\n break;\n }\n\n return (\n dateRange.from === dateToString(from) &&\n dateRange.to === dateToString(to)\n );\n });\n\n if (selectedOption) {\n return selectedOption.id || selectedOption.value;\n }\n\n return 'custom';\n }\n\n openCalendar() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(CalendarComponent);\n const componentRef: ComponentRef<CalendarComponent> =\n this.overlayRef.attach(calendarPortal);\n\n componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n componentRef.instance.selectedDateRange = this.dateRange;\n\n // Subscribe to events emitted by the CalendarComponent\n componentRef.instance.dateRangeChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n this.onDateRangeChange(date);\n this.closeCalendar();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.closeCalendar();\n });\n }\n }\n\n closeCalendar() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: DateRange): void {\n this.dateRange = value;\n\n if (!value) {\n this.selectedDateRangeOptionId = undefined;\n } else {\n this.selectedDateRangeOptionId = this.getDateRangeOptionId(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.calendar.Pick a period.', {}, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n\n zip(\n this.translateService.selectTranslate(\n 'ui.calendar.today',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.yesterday',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.2 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.3 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a week ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.15 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a month ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.2 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.3 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.6 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a year ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.pick manually',\n {},\n 'haloduck',\n ),\n )\n .pipe(takeUntilDestroyed())\n .subscribe(\n ([\n today,\n yesterday,\n twoDaysAgo,\n threeDaysAgo,\n aWeekAgo,\n fifteenDaysAgo,\n aMonthAgo,\n twoMonthsAgo,\n threeMonthsAgo,\n sixMonthsAgo,\n aYearAgo,\n pickManually,\n ]) => {\n if (this.dateRangeOptions.length === 0) {\n this.dateRangeOptions = [\n {\n id: 'd0',\n value: today,\n },\n {\n id: 'd1',\n value: yesterday,\n },\n {\n id: 'd2',\n value: twoDaysAgo,\n },\n {\n id: 'd3',\n value: threeDaysAgo,\n },\n {\n id: 'd7',\n value: aWeekAgo,\n },\n {\n id: 'd15',\n value: fifteenDaysAgo,\n },\n {\n id: 'm1',\n value: aMonthAgo,\n },\n {\n id: 'm2',\n value: twoMonthsAgo,\n },\n {\n id: 'm3',\n value: threeMonthsAgo,\n },\n {\n id: 'm6',\n value: sixMonthsAgo,\n },\n {\n id: 'y1',\n value: aYearAgo,\n },\n {\n id: 'custom',\n value: pickManually,\n },\n ];\n }\n },\n );\n }\n}\n","<label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n</label>\n<div #origin\n class=\"relative mt-2 gap-2 rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary': !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick()\">\n <div class=\"flex items-center\">\n <haloduck-select [multiselect]=\"false\"\n [disabled]=\"disabled\"\n [options]=\"dateRangeOptions\"\n [atLeastOne]=\"true\"\n (click)=\"$event.stopPropagation()\"\n variant=\"primary\"\n placeholder=\"{{ 'haloduck.ui.calendar.Period' | transloco }}\"\n [(ngModel)]=\"selectedDateRangeOptionId\"\n (ngModelChange)=\"onDateRangeOptionChange($event)\">\n </haloduck-select>\n @if (getSelectedDateRangeString()) {\n <div class=\"flex-1 sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-on-control dark:text-dark-on-control': !disabled,\n 'text-light-on-control/60 dark:text-light-on-control/60': disabled,\n }\"> {{ getSelectedDateRangeString() }}</div>\n } @else {\n <div class=\"flex-1 sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-inactive dark:text-dark-inactive': !disabled,\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n }\"> {{ placeholder }}</div>\n }\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n Input,\n ViewChild,\n AfterViewInit,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ButtonComponent } from '../button/button.component';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-draw-canvas',\n templateUrl: './draw-canvas.component.html',\n styleUrl: './draw-canvas.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DrawCanvasComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n imports: [ButtonComponent, TranslocoModule],\n})\nexport class DrawCanvasComponent\n implements AfterViewInit, ControlValueAccessor\n{\n @Input() imagePath!: string;\n @Input() lineColor: string = '#DD0000'; // Default color is black\n @ViewChild('canvas', { static: true })\n canvasRef!: ElementRef<HTMLCanvasElement>;\n\n private ctx!: CanvasRenderingContext2D;\n private isDrawing = false;\n private onChange: (file: File | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n ngAfterViewInit(): void {\n const canvas = this.canvasRef.nativeElement;\n this.ctx = canvas.getContext('2d')!;\n this.ctx.strokeStyle = this.lineColor; // Set the initial line color\n this.loadImage();\n this.setupCanvas();\n }\n\n private loadImage(): void {\n const image = new Image();\n image.src = this.imagePath;\n image.onload = () => {\n this.ctx.drawImage(\n image,\n 0,\n 0,\n this.canvasRef.nativeElement.width,\n this.canvasRef.nativeElement.height,\n );\n };\n }\n\n private setupCanvas(): void {\n const canvas = this.canvasRef.nativeElement;\n\n // Mouse events\n canvas.addEventListener('mousedown', (event: MouseEvent) =>\n this.startMouseDrawing(event),\n );\n canvas.addEventListener('mousemove', (event: MouseEvent) =>\n this.mouseDraw(event),\n );\n canvas.addEventListener('mouseup', () => this.stopDrawing());\n canvas.addEventListener('mouseleave', () => this.stopDrawing());\n\n // Touch events\n canvas.addEventListener('touchstart', (event: TouchEvent) =>\n this.startTouchDrawing(event),\n );\n canvas.addEventListener('touchmove', (event: TouchEvent) => {\n event.preventDefault(); // Prevent scrolling\n this.touchDraw(event);\n });\n canvas.addEventListener('touchend', () => this.stopDrawing());\n canvas.addEventListener('touchcancel', () => this.stopDrawing());\n }\n\n private startMouseDrawing(event: MouseEvent): void {\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.isDrawing = true;\n this.ctx.beginPath();\n this.ctx.moveTo(\n event.offsetX * (this.canvasRef.nativeElement.width / rect.width),\n event.offsetY * (this.canvasRef.nativeElement.height / rect.height),\n );\n }\n\n private mouseDraw(event: MouseEvent): void {\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n if (!this.isDrawing) return;\n this.ctx.lineTo(\n event.offsetX * (this.canvasRef.nativeElement.width / rect.width),\n event.offsetY * (this.canvasRef.nativeElement.height / rect.height),\n );\n this.ctx.stroke();\n }\n\n private startTouchDrawing(event: TouchEvent): void {\n this.isDrawing = true;\n const touch = event.touches[0];\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.ctx.beginPath();\n this.ctx.moveTo(\n (touch.clientX - rect.left) *\n (this.canvasRef.nativeElement.width / rect.width),\n (touch.clientY - rect.top) *\n (this.canvasRef.nativeElement.height / rect.height),\n );\n }\n\n private touchDraw(event: TouchEvent): void {\n if (!this.isDrawing) return;\n const touch = event.touches[0];\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.ctx.lineTo(\n (touch.clientX - rect.left) *\n (this.canvasRef.nativeElement.width / rect.width),\n (touch.clientY - rect.top) *\n (this.canvasRef.nativeElement.height / rect.height),\n );\n this.ctx.stroke();\n }\n\n private stopDrawing(): void {\n this.isDrawing = false;\n this.ctx.closePath();\n\n this.saveDrawing();\n }\n\n saveDrawing(): void {\n const canvas = this.canvasRef.nativeElement;\n const dataUrl = canvas.toDataURL('image/png');\n\n // Convert data URL to Blob\n const blob = this.dataURLToBlob(dataUrl);\n const file = new File([blob], 'teeth.png', { type: 'image/png' });\n\n // Emit the file value to the form control\n this.onChange(file);\n }\n\n private dataURLToBlob(dataUrl: string): Blob {\n const byteString = atob(dataUrl.split(',')[1]);\n const mimeString = dataUrl.split(',')[0].split(':')[1].split(';')[0];\n const buffer = new ArrayBuffer(byteString.length);\n const dataView = new Uint8Array(buffer);\n\n for (let i = 0; i < byteString.length; i++) {\n dataView[i] = byteString.charCodeAt(i);\n }\n\n return new Blob([buffer], { type: mimeString });\n }\n\n // ControlValueAccessor methods\n writeValue(file: File | null): void {\n // No-op: The component does not need to set the file value directly\n }\n\n registerOnChange(fn: (file: File | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n const canvas = this.canvasRef.nativeElement;\n canvas.style.pointerEvents = isDisabled ? 'none' : 'auto';\n }\n\n onReset() {\n this.loadImage();\n }\n}\n","<div class=\"draw-canvas-container flex flex-col gap-2\">\n <canvas #canvas width=\"800\" height=\"400\" class=\"max-w-full draw-canvas select-none\"></canvas>\n <haloduck-button variant=\"danger\" (click)=\"onReset()\">{{ 'haloduck.ui.draw.Clear' | transloco }}</haloduck-button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n inject,\n ChangeDetectorRef,\n NgZone,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { combineLatest, Observable, of, switchMap, tap } from 'rxjs';\n\nexport const ERROR_NOT_ACCEPTABLE_FILE_TYPE = 'NOT_ACCEPTABLE_FILE_TYPE';\nexport const ERROR_OVER_SIZE = 'OVER_SIZE';\nexport const ERROR_OVER_COUNT = 'OVER_COUNT';\nexport const ERROR_UPLOAD = 'UPLOAD';\n\nexport interface FileEx extends File {\n isUploading: boolean;\n isUploaded: boolean;\n key: string;\n name: string;\n size: number;\n type: string;\n tag: string[];\n previewUrl?: string; // Add a property for the preview URL\n}\n\n@Component({\n selector: 'haloduck-file-uploader',\n imports: [CommonModule, TranslocoModule],\n templateUrl: './file-uploader.component.html',\n styleUrls: ['./file-uploader.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploaderComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class FileUploaderComponent implements ControlValueAccessor {\n @Input() disabled: boolean = false;\n @Input() urlPrefix!: string;\n @Input() keyPrefix!: string;\n @Input() uploadApi!: (file: File, keyPrefix: string) => Observable<string>;\n @Input() multiple: boolean = true;\n @Input() maxCount: number = 0;\n @Input() maxSize: number = 0;\n @Input() accept: string[] = [''];\n @Output() filesAdded = new EventEmitter<FileEx[]>();\n @Output() fileRemoved = new EventEmitter<FileEx>();\n @Output() error = new EventEmitter<{ error: string; file: FileEx }[]>();\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly zone = inject(NgZone);\n\n files: FileEx[] = [];\n isUploading: boolean = false;\n isDragOver: boolean = false;\n\n private onChange: (files: FileEx[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(files: FileEx[]): void {\n this.files = files || [];\n }\n\n registerOnChange(fn: (files: FileEx[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n const selectedFiles = this.multiple\n ? Array.from(input.files)\n : [input.files[0]];\n this.addFiles(selectedFiles as FileEx[]);\n }\n this.onTouched();\n }\n\n removeFile(index: number): void {\n const removedFile = this.files[index];\n this.files.splice(index, 1);\n this.fileRemoved.emit(removedFile);\n this.onChange(this.files);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n if (event.dataTransfer?.files) {\n const droppedFiles = this.multiple\n ? Array.from(event.dataTransfer.files)\n : [event.dataTransfer.files[0]];\n this.addFiles(droppedFiles as FileEx[]);\n }\n this.onTouched();\n }\n\n getFilePreview(file: FileEx): string {\n return file.previewUrl || ''; // Return the precomputed preview URL\n }\n\n addFiles(addedFiles: FileEx[]): void {\n const notAcceptedFiles: { error: string; file: FileEx }[] = [];\n\n let filteredFiles = addedFiles.filter((file) => {\n const acceptableFileType = this.isAcceptableFileType(file);\n const acceptableFileSize =\n this.maxSize > 0 ? file.size <= this.maxSize : true;\n\n if (!acceptableFileType) {\n notAcceptedFiles.push({ error: ERROR_NOT_ACCEPTABLE_FILE_TYPE, file });\n }\n if (!acceptableFileSize) {\n notAcceptedFiles.push({ error: ERROR_OVER_SIZE, file });\n }\n\n return acceptableFileType && acceptableFileSize;\n });\n\n if (\n this.maxCount > 0 &&\n this.files.length + filteredFiles.length > this.maxCount\n ) {\n for (\n let i = this.maxCount;\n i < this.files.length + filteredFiles.length;\n i++\n ) {\n notAcceptedFiles.push({\n error: ERROR_OVER_COUNT,\n file: filteredFiles[i - this.files.length],\n });\n }\n\n filteredFiles = filteredFiles.splice(\n this.files.length + filteredFiles.length - this.maxCount,\n );\n }\n\n if (notAcceptedFiles.length > 0) {\n this.error.emit(notAcceptedFiles);\n }\n\n // Compute preview URLs for the new files\n filteredFiles.forEach((file) => {\n if (file.type.startsWith('image')) {\n file.previewUrl = URL.createObjectURL(file);\n }\n });\n\n this.files = this.files.concat(filteredFiles);\n this.filesAdded.emit(filteredFiles);\n this.onChange(this.files);\n }\n\n isAcceptableFileType(file: File): boolean {\n // Check if the file type is acceptable\n return this.accept.some((type) => {\n if (type.startsWith('.')) {\n // Check if the file type matches any of the accepted types\n return file.name.endsWith(type);\n } else if (type.includes('/')) {\n if (type.includes('/*')) {\n // Check if the file type matches the wildcard MIME type\n return file.type.startsWith(type.split('/')[0]);\n } else {\n // Check if the file type matches the specific MIME type\n return file.type === type;\n }\n } else {\n return file.type === type;\n }\n });\n }\n\n startUpload(): Observable<FileEx[]> {\n // Placeholder for upload logic\n this.isUploading = true;\n const uploadTrigger$: Observable<string>[] = [];\n\n this.files.forEach((file) => {\n file.isUploading = true;\n file.isUploaded = false;\n\n uploadTrigger$.push(\n this.uploadApi(file, this.keyPrefix).pipe(\n // Handle the upload API response\n tap((key) => {\n file.isUploading = false;\n file.isUploaded = true;\n file.key = key;\n }),\n ),\n );\n });\n\n // Wait for all uploads to complete\n return combineLatest(uploadTrigger$).pipe(\n switchMap((keys) => {\n this.files.forEach((file) => {\n if ('' === file.key) {\n this.isUploading = false;\n file.isUploaded = false;\n\n this.error.emit([{ error: ERROR_UPLOAD, file }]);\n }\n });\n\n this.onChange(this.files);\n this.onTouched();\n\n return of(this.files);\n }),\n );\n }\n}\n","<div class=\"p-4 border border-light-inactive dark:border-dark-inactive rounded-md\"\n [class.drag-over]=\"isDragOver\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n @if (!isUploading) {\n <label for=\"file-upload\"\n class=\"flex flex-col items-center justify-center w-full border-2 border-dashed border-light-inactive dark:border-dark-inactive rounded-md cursor-pointer hover:border-light-secondary dark:border-dark-secondary p-4\">\n <span class=\"text-light-inactive dark:text-dark-inactive\">{{ 'haloduck.ui.file.Drag and drop files here, or click to select files' | transloco }}</span>\n <input id=\"file-upload\"\n type=\"file\"\n class=\"hidden\"\n [attr.accept]=\"accept ? accept.join(',') : null\"\n [attr.multiple]=\"multiple ? '' : null\"\n (cancel)=\"$event.stopPropagation()\"\n (change)=\"onFileSelected($event)\" />\n </label>\n }\n <!-- Display file list -->\n @if (files.length > 0) {\n <ul class=\"mt-4 space-y-2\">\n @for (file of files; track file.name; let i = $index) {\n <li class=\"flex items-center justify-between p-2 border border-light-inactive dark:border-dark-inactive rounded-md\">\n <!-- Check if the file is an image -->\n <div class=\"flex items-center space-x-4\">\n @if (file.previewUrl){\n <img [src]=\"file.previewUrl\"\n alt=\"{{ file.name }}\"\n class=\"w-12 h-12 object-cover rounded-md\" />\n }\n <span class=\"text-sm text-light-inactive dark:text-dark-inactive\">{{ file.name }}</span>\n </div>\n @if (isUploading) {\n @if (file.isUploaded) {\n <span class=\"text-sm text-light-secondary dark:text-dark-secondary\">{{ 'haloduck.ui.file.Uploaded' | transloco }}</span>\n }@else{\n <span class=\"text-sm text-light-primary dark:text-dark-primary\">{{ 'haloduck.ui.file.Uploading...' | transloco }}</span>\n }\n }@else{\n <button type=\"button\"\n class=\"text-light-danger dark:text-dark-danger hover:brightness-125\"\n (click)=\"removeFile(i)\">\n {{ 'haloduck.ui.file.Remove' | transloco }}\n </button>\n }\n </li>\n }\n </ul>\n }\n</div>\n","import { Component, Input, signal } from '@angular/core';\n\n@Component({\n selector: 'haloduck-flip',\n imports: [],\n templateUrl: './flip.component.html',\n styleUrl: './flip.component.css',\n})\nexport class FlipComponent {\n @Input() title: string = '';\n @Input() set isOpen(value: boolean) {\n this._isOpen.set(value);\n }\n _isOpen = signal(false);\n\n toggle() {\n this._isOpen.set(!this._isOpen());\n }\n}\n","<div class=\"relative w-full shadow ring-1 ring-light-inactive/50 dark:ring-dark-inactive/80 sm:rounded-lg bg-light-alternative dark:bg-dark-alternative p-2 flex flex-col gap-2\">\n <label class=\"text-sm text-light-on-alternative dark:text-dark-on-alternative\">{{ title }}</label>\n @if(_isOpen()) {\n <ng-content></ng-content>\n }\n <button variant=\"secondary\"\n class=\"absolute rounded-md border border-inactive px-1 py-0.5 top-1 right-1 hover:cursor-pointer bg-light-inactive dark:bg-dark-inactive text-light-on-inactive dark:text-dark-on-inactive\"\n (click)=\"toggle()\">\n @if(_isOpen()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M18 15l-6-6-6 6\" />\n </svg>\n }\n @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M6 9l6 6 6-6\" />\n </svg>\n }\n </button>\n</div>\n","import { Component, inject, Input } from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\n\n@Component({\n selector: 'haloduck-image-viewer',\n imports: [],\n templateUrl: './image-viewer.component.html',\n styleUrl: './image-viewer.component.css',\n})\nexport class ImageViewerComponent {\n @Input() context: any;\n @Input() imageUrl: string = '';\n @Input() imageAlt: string = '';\n\n private readonly dialogService = inject(DialogService);\n\n onClose() {\n if (this.context?.overlayRef) {\n this.dialogService.close(this.context.overlayRef);\n }\n }\n}\n","<img class=\"max-w-full max-h-full object-cover cursor-pointer\"\n [src]=\"context?.imageUrl\"\n [alt]=\"context?.imageAlt\"\n (click)=\"onClose()\" />","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { Observable, of, switchMap } from 'rxjs';\nimport { ImageViewerComponent } from '../image-viewer/image-viewer.component';\nimport { FileEx } from '../file-uploader/file-uploader.component';\nimport { CommonModule } from '@angular/common';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n// 전역 변수로 드래그 데이터를 임시 저장\nlet draggedBase64File: string | null = null;\nlet originDrag: ImageUploaderComponent | null = null;\n\n@Component({\n selector: 'haloduck-image-uploader',\n imports: [CommonModule, TranslocoModule],\n templateUrl: './image-uploader.component.html',\n styleUrls: ['./image-uploader.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ImageUploaderComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class ImageUploaderComponent implements ControlValueAccessor, OnInit {\n @Input() disabled: boolean = false;\n @Input() id!: string;\n @Input() alt!: string;\n @Input() urlPrefix!: string;\n @Input() keyPrefix!: string;\n @Input() uploadApi!: (file: File, keyPrefix: string) => Observable<string>;\n @Input() backgroundImage!: string;\n @Input() shouldPassToSibling: boolean = false;\n @Output() passToSibling: EventEmitter<FileEx[]> = new EventEmitter<\n FileEx[]\n >();\n @Output() fileAdded = new EventEmitter<FileEx>();\n @Output() fileRemoved = new EventEmitter<FileEx>();\n @Output() error = new EventEmitter<{ error: string; file: FileEx }[]>();\n imageUrl: string | null = null;\n file: FileEx | null = null;\n isDragOver: boolean = false;\n isUploading: boolean = false;\n\n private readonly dialogService = inject(DialogService);\n\n private onChange: (url: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(key: string | null): void {\n if (!key) {\n this.imageUrl = null;\n return;\n }\n\n this.imageUrl = `${this.urlPrefix}/${key}`;\n this.file = null;\n }\n\n registerOnChange(fn: (url: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n startUpload(): Observable<FileEx> {\n // Placeholder for upload logic\n if (!this.file) {\n return new Observable<never>();\n }\n\n this.isUploading = true;\n this.file.isUploading = true;\n this.file.isUploaded = false;\n\n return this.uploadApi(this.file, this.keyPrefix).pipe(\n switchMap((key) => {\n if (this.file) {\n this.file.isUploading = false;\n this.file.isUploaded = true;\n this.file.key = key;\n }\n\n return of(this.file as FileEx);\n }),\n );\n }\n\n onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n\n if (input.files && input.files[0]) {\n const listFile: FileEx[] = Array.from(input.files) as FileEx[];\n this.setFiles(listFile);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n\n this.isDragOver = false;\n\n if (event.dataTransfer?.files && event.dataTransfer.files[0]) {\n const listFile: FileEx[] = Array.from(\n event.dataTransfer.files,\n ) as FileEx[];\n this.setFiles(listFile);\n } else if (draggedBase64File) {\n if (this.file) {\n originDrag?.setFiles([this.file]); // 타켓에 파일이 있을 경우 원래 드래그한 컴포넌트에 파일 전달\n } else {\n originDrag?.removeImage();\n }\n\n fetch(draggedBase64File)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], 'dropped-file', { type: blob.type });\n this.setFiles([file] as FileEx[]);\n });\n\n draggedBase64File = null; // 전역 변수 초기화\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDragStart(event: DragEvent): void {\n if (event.target instanceof HTMLImageElement) {\n const img = event.target as HTMLImageElement;\n\n if (img.id && this.file) {\n const reader = new FileReader();\n reader.onload = () => {\n const base64File = reader.result as string;\n draggedBase64File = base64File; // 전역 변수에 저장\n originDrag = this; // 드래그 시작한 컴포넌트 저장\n\n if (event.dataTransfer) {\n event.dataTransfer.setData('text/plain', 'dragged-file'); // 최소한의 데이터 설정\n }\n };\n reader.readAsDataURL(this.file);\n }\n }\n }\n\n onDragEnd(event: DragEvent): void {\n draggedBase64File = null;\n originDrag = null;\n }\n\n removeImage(): void {\n const removedFile = this.file;\n this.imageUrl = null;\n this.file = null;\n\n this.fileRemoved.emit(removedFile as FileEx);\n this.onChange(null); // Notify form control\n }\n\n setFiles(listFile: FileEx[]): void {\n listFile = listFile.filter((file) => {\n const isValid = file.type.startsWith('image/');\n if (!isValid) {\n console.error('Invalid file type:', file.type);\n }\n return isValid;\n });\n\n this.file = listFile[0];\n this.imageUrl = URL.createObjectURL(listFile[0]);\n\n if (listFile.length > 1 && this.shouldPassToSibling) {\n listFile.shift();\n this.passToSibling.emit(listFile);\n }\n\n this.fileAdded.emit(this.file);\n this.onChange(this.file.name);\n this.onTouched();\n }\n\n previewImage(imageUrl: string) {\n this.dialogService.open(ImageViewerComponent, {\n imageUrl,\n imageAlt: this.alt,\n });\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"w-full h-full flex flex-col gap-1\">\n <label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n </label>\n <div class=\"h-full w-full p-2 border border-light-inactive dark:border-dark-inactive rounded-md\"\n [class.drag-over]=\"isDragOver\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <!-- Show image preview if available -->\n @if (imageUrl) {\n @if (!disabled) {\n <div class=\"relative\">\n <button type=\"button\"\n class=\"absolute -top-1 -right-1 bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger rounded-full px-1 text-xs\"\n (click)=\"removeImage()\">\n x\n </button>\n </div>\n }\n <img [src]=\"imageUrl\"\n [id]=\"id + '-image'\"\n [alt]=\"alt || ''\"\n class=\"w-full h-full rounded-md aspect-square\"\n [ngClass]=\"{\n 'filter grayscale': disabled,\n }\"\n (click)=\"previewImage(imageUrl)\" />\n } @else {\n <!-- Show upload area -->\n <label for=\"{{id + '-input'}}\"\n class=\"flex flex-col items-center justify-center w-full h-full border-2 border-dashed border-light-inactive dark:border-dark-inactive rounded-md\"\n [ngClass]=\"{'cursor-pointer hover:border-light-primary dark:hover:border-dark-primary': !disabled}\">\n @if (backgroundImage) {\n <img [src]=\"backgroundImage\"\n [alt]=\"alt || ''\"\n class=\"w-full h-full rounded-md aspect-square\" />\n }@else {\n <span class=\"text-light-inactive dark:text-dark-inactive text-sm p-2\">{{ 'haloduck.ui.file.Drag and drop an image here, or click to select' | transloco }}</span>\n }\n\n @if(!disabled){\n <input [id]=\"id + '-input'\"\n type=\"file\"\n class=\"hidden\"\n accept=\"image/*\"\n [multiple]=\"passToSibling\"\n (cancel)=\"$event.stopPropagation()\"\n (change)=\"onFileSelected($event)\" />\n }\n </label>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Output } from '@angular/core';\nimport { LangDefinition, TranslocoService } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-language-selector-option',\n imports: [CommonModule],\n providers: [TranslocoService],\n templateUrl: './language-selector-option.component.html',\n styleUrl: './language-selector-option.component.css',\n})\nexport class LanguageSelectorOptionComponent {\n @Output() languageSelected : EventEmitter<string> = new EventEmitter<string>();\n protected readonly translateService = inject(TranslocoService);\n\n selectLanguage(language: string | LangDefinition) {\n this.languageSelected.emit(language as string);\n }\n}\n","<div class=\"right-0 z-10 mt-2.5 origin-top-right rounded-md bg-light-background dark:bg-dark-background py-2 shadow-lg ring-1 ring-light-inactive dark:ring-dark-inactive\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby=\"user-menu-button\"\n tabindex=\"0\">\n @for (language of translateService.getAvailableLangs(); track language) {\n <a href=\"javascript:void(0)\"\n class=\"px-3 py-2 flex items-center flex-nowrap gap-2\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"language-item-{{language}}\"\n (click)=\"selectLanguage(language)\">\n <img class=\"w-6 h-6\"\n [src]=\"'i18n/icons/' + language + '.png'\">\n </a>\n }\n</div>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n inject,\n OnInit,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { LanguageSelectorOptionComponent } from './language-selector-option/language-selector-option.component';\nimport { distinctUntilChanged, Subject, takeUntil } from 'rxjs';\nimport { TranslocoService } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-language-selector',\n imports: [],\n templateUrl: './language-selector.component.html',\n styleUrl: './language-selector.component.css',\n})\nexport class LanguageSelectorComponent implements OnInit {\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n private readonly destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n language = signal<string>(this.translateService.getActiveLang());\n private overlayRef?: OverlayRef;\n\n showLanguageOptions() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(\n LanguageSelectorOptionComponent,\n );\n const componentRef: ComponentRef<LanguageSelectorOptionComponent> =\n this.overlayRef.attach(calendarPortal);\n\n // Pass values directly to the CalendarComponent instance\n // componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n // componentRef.instance.singleDate = true;\n // componentRef.instance.selectedDate = this.selectedDate;\n\n // Subscribe to events emitted\n componentRef.instance.languageSelected\n .pipe(takeUntil(this.destroy$))\n .subscribe((language) => {\n this.translateService.setActiveLang(language);\n this.hideLanguageOptions();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.hideLanguageOptions();\n });\n }\n }\n\n hideLanguageOptions() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n ngOnInit(): void {\n this.translateService.langChanges$\n .pipe(distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((lang) => {\n this.language.set(lang);\n });\n }\n}\n","<button #origin\n type=\"button\"\n (click)=\"showLanguageOptions()\"\n class=\"-m-1.5 flex items-center p-1.5 hover:cursor-pointer\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"max-lg:hidden flex lg:items-center\">\n <img class=\"w-6 h-6\"\n [src]=\"'i18n/icons/' + language() + '.png'\">\n </span>\n</button>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n AfterViewInit,\n Input,\n isDevMode,\n EventEmitter,\n Output,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { LngLat } from '@haloduck/core';\nimport { CoreService } from '@haloduck/core';\n\nexport declare const google: any;\n\nexport interface Location {\n plusCode: string;\n postalCode: string;\n countryCode: string;\n country: string;\n area1: string;\n area2: string;\n area3: string;\n formatted: string;\n lat: number;\n lng: number;\n}\n\n@Component({\n selector: 'haloduck-map-to-address',\n imports: [CommonModule, FormsModule],\n templateUrl: './map-to-address.component.html',\n styleUrl: './map-to-address.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: MapToAddressComponent,\n multi: true,\n },\n ],\n})\nexport class MapToAddressComponent implements OnInit, ControlValueAccessor {\n private readonly coreService = inject(CoreService);\n mapId = this.coreService.getMapId();\n defaultLngLat = this.coreService.getDefaultLngLat();\n @Input() disabled: boolean = false;\n @Input() language: string = 'en';\n @Input() currentLngLat?: LngLat;\n private _currentAddress?: string;\n private _isGoogleLoaded = false;\n private _loadError?: string;\n\n get isGoogleLoaded(): boolean {\n return this._isGoogleLoaded;\n }\n\n get loadError(): string | undefined {\n return this._loadError;\n }\n\n @Input()\n set currentAddress(value: string) {\n if (value) {\n this._currentAddress = value;\n // Google Maps API가 로드된 후에만 실행\n if (this._isGoogleLoaded) {\n this.setMapToAddress();\n }\n }\n }\n @Output() locationChanged = new EventEmitter<Location>();\n map: any;\n marker: any;\n location!: Location;\n\n private onChange: (value: Location) => void = () => {};\n private onTouched: () => void = () => {};\n\n async ngOnInit() {\n try {\n await this.initScript();\n this._isGoogleLoaded = true;\n this.initMap();\n\n // API 로드 완료 후 pending된 주소 설정 실행\n if (this._currentAddress) {\n this.setMapToAddress();\n }\n } catch (error) {\n this._loadError = 'Unable to load Google Maps API.';\n isDevMode() && console.error('Failed to load Google Maps API:', error);\n }\n }\n\n initScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof google !== 'undefined') {\n this._isGoogleLoaded = true;\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${this.coreService.getGoogleApiKey()}&libraries=places,marker&loading=sync&language=${this.language}`;\n script.async = false;\n script.defer = true;\n script.onload = () => {\n this._isGoogleLoaded = true;\n resolve();\n };\n script.onerror = (error) => reject(error);\n document.head.appendChild(script);\n isDevMode() && console.log('Google Maps script loaded', script);\n });\n }\n\n initMap() {\n if (this.currentLngLat) {\n isDevMode() &&\n console.log('Using provided location:', this.currentLngLat);\n this.initializeMap(this.currentLngLat);\n } else {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n const currentLocation = {\n lat: position.coords.latitude,\n lng: position.coords.longitude,\n };\n isDevMode() &&\n console.log('Using current location:', currentLocation);\n this.initializeMap(currentLocation);\n },\n (error) => {\n if (error.code === error.PERMISSION_DENIED) {\n isDevMode() &&\n console.log(\n 'Location permission denied. Using default location.:',\n this.defaultLngLat,\n );\n } else if (\n error.code === error.POSITION_UNAVAILABLE ||\n error.code === error.TIMEOUT\n ) {\n isDevMode() &&\n console.log(\n 'Unable to determine location. Using default location.:',\n this.defaultLngLat,\n );\n }\n this.initializeMap(this.defaultLngLat);\n },\n );\n }\n }\n\n initializeMap(lngLat: LngLat) {\n this.map = new google.maps.Map(\n document.getElementById('map') as HTMLElement,\n {\n center: lngLat,\n zoom: 15,\n mapId: this.mapId,\n },\n );\n\n this.marker = new google.maps.marker.AdvancedMarkerElement({\n position: lngLat,\n map: this.map,\n draggable: true,\n });\n\n // Listen for marker drag end to update address immediately\n this.marker.addListener('dragend', () => {\n const position = this.marker.position;\n if (position) {\n isDevMode() && console.log('Marker dragged to:', position.toJSON());\n this.getAddress(); // Fetch address after dragging\n }\n });\n\n this.map.addListener('click', (event: any) => this.onClick(event));\n\n if (!this.currentLngLat) {\n this.getAddress();\n }\n }\n\n onClick(event: any) {\n isDevMode() && console.log('Map clicked at:', event.latLng);\n if (event.latLng) {\n // Explicitly update marker position\n this.marker.position = event.latLng;\n this.marker.map = this.map; // Ensure marker is attached to the map\n isDevMode() &&\n console.log('Marker position updated to:', event.latLng.toJSON());\n this.getAddress(); // Fetch address immediately after click\n this.onTouched(); // Mark as touched\n } else {\n isDevMode() &&\n console.error(\n 'Failed to update marker position: event.latLng is undefined',\n );\n }\n }\n\n setMapToAddress() {\n if (!this._isGoogleLoaded) {\n isDevMode() && console.warn('Google Maps API not loaded yet');\n return;\n }\n\n const geocoder = new google.maps.Geocoder();\n geocoder.geocode(\n { address: this._currentAddress },\n (results: any, status: string) => {\n if (status === 'OK' && results[0]) {\n const location = results[0].geometry.location;\n isDevMode() && console.log('Geocoded location:', location.toJSON());\n this.initializeMap(location.toJSON());\n } else {\n isDevMode() && console.error('Geocoding failed:', status);\n }\n },\n );\n }\n\n getAddress() {\n if (!this._isGoogleLoaded) {\n isDevMode() && console.warn('Google Maps API not loaded yet');\n return;\n }\n\n const geocoder = new google.maps.Geocoder();\n const position = this.marker.position;\n\n if (!position) {\n isDevMode() && console.error('Position update is unavailable');\n return;\n }\n\n geocoder.geocode({ location: position }, (results: any, status: string) => {\n isDevMode() && console.log('Geocoded results:', status, results);\n\n if (status === 'OK' && results[0]) {\n this.location = this.parseAddress(results);\n this.locationChanged.emit(this.location);\n this.onChange(this.location); // Notify the form control\n }\n });\n }\n\n parseAddress(results: any): Location {\n return {\n plusCode: this.getComponentLongName(results, 'plus_code'),\n postalCode: this.getComponentLongName(results, 'postal_code'),\n countryCode: this.getComponentShortName(results, 'country').toUpperCase(),\n country: this.getComponentLongName(results, 'country'),\n area1: this.getComponentLongName(results, 'administrative_area_level_1'),\n area2: this.getComponentLongName(results, 'sublocality_level_1'),\n area3: this.getComponentLongName(results, 'sublocality_level_2'),\n formatted: results[0]?.formatted_address,\n lat: results[0]?.geometry?.location?.lat(),\n lng: results[0]?.geometry?.location?.lng(),\n };\n }\n\n getComponentLongName(results: any[], type: string): string {\n for (let i = 0; i < results.length; i++) {\n const component = (results[i].address_components as any[]).find((c) =>\n c.types.includes(type),\n );\n if (component) {\n return component.long_name;\n }\n }\n return '';\n }\n\n getComponentShortName(results: any[], type: string): string {\n for (let i = 0; i < results.length; i++) {\n const component = (results[i].address_components as any[]).find((c) =>\n c.types.includes(type),\n );\n if (component) {\n return component.short_name;\n }\n }\n return '';\n }\n\n writeValue(value: Location): void {\n if (value) {\n this.location = value;\n this.currentLngLat = { lat: value.lat, lng: value.lng };\n // Google Maps API가 로드된 후에만 맵 초기화\n if (this._isGoogleLoaded) {\n this.initializeMap(this.currentLngLat);\n }\n }\n }\n\n registerOnChange(fn: (value: Location) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div class=\"w-full h-full relative\">\n <!-- 로딩 상태 -->\n @if(!isGoogleLoaded && !loadError) {\n <div class=\"absolute inset-0 flex items-center justify-center bg-gray-100 z-10\">\n <div class=\"text-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-2\"></div>\n <p class=\"text-gray-600 text-sm\">지도를 로딩 중입니다...</p>\n </div>\n </div>\n }\n\n <!-- 에러 상태 -->\n @if(loadError) {\n <div class=\"absolute inset-0 flex items-center justify-center bg-red-50 z-10\">\n <div class=\"text-center p-4\">\n <div class=\"text-red-500 text-2xl mb-2\">⚠️</div>\n <p class=\"text-red-700 text-sm font-medium\">{{ loadError }}</p>\n <p class=\"text-red-600 text-xs mt-1\">Please check your internet connection and refresh the page.</p>\n </div>\n </div>\n }\n\n <div id=\"map\"\n class=\"w-full h-full\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { MenuItemEx } from '@haloduck/core';\n\n@Component({\n selector: 'haloduck-side-menu-item',\n imports: [CommonModule],\n templateUrl: './side-menu-item.component.html',\n styleUrl: './side-menu-item.component.css'\n})\nexport class SideMenuItemComponent implements OnInit{\n private readonly router = inject(Router)\n @Input() menuItem!: MenuItemEx;\n @Input() depth = 0;\n @Input() menuItemSelectHandler?: EventEmitter<MenuItemEx>;\n\n iconSvg!: SafeHtml;\n\n constructor(private sanitizer: DomSanitizer) { }\n\n ngOnInit(): void {\n if (this.menuItem.iconType === 'svg') {\n fetch(this.menuItem.icon || '')\n .then(response => { return response.ok ? response : Promise.reject(response); })\n .then(response => response.text())\n .then(svg => this.iconSvg = this.sanitizer.bypassSecurityTrustHtml(svg));\n }\n }\n\n onMenuItemSelected(menuItem: MenuItemEx): void {\n if (this.menuItem.link) {\n this.navigateTo([this.menuItem.link]);\n }\n if (this.menuItemSelectHandler) {\n this.menuItemSelectHandler.emit(this.menuItem);\n }\n }\n\n navigateTo(link: string[]): void {\n this.router.navigate(link);\n }\n}\n","<a href=\"javascript:void(0)\"\n (click)=\"onMenuItemSelected(menuItem)\"\n class=\"flex items-center gap-2 px-4 py-2 rounded-md cursor-pointer hover:text-light-on-primary dark:hover:text-dark-on-primary hover:bg-light-primary dark:hover:bg-dark-primary hover:cursor-pointer\"\n [ngClass]=\"{\n 'font-bold text-light-on-secondary dark:bg-dark-on-secondary bg-light-secondary dark:bg-dark-secondary': menuItem.isSelected,\n }\">\n @if (menuItem.iconType === 'svg') {\n <div [innerHTML]=\"iconSvg\"></div>\n } @else {\n @if (menuItem.icon) {\n <img class=\"w-5 h-5\"\n [src]=\"menuItem.icon\"\n [alt]=\"menuItem.title\"\n [title]=\"menuItem.title\"\n [loading]=\"'lazy'\" />\n }\n }\n <span class=\"overflow-hidden text-ellipsis whitespace-nowrap\"\n title=\"{{ menuItem.title }}\"\n [ngStyle]=\"{'margin-left.px': depth ? depth * 16 : 0}\">\n {{ menuItem.title }}\n </span>\n</a>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MenuItemEx } from '@haloduck/core';\nimport { SideMenuItemComponent } from './side-menu-item/side-menu-item.component';\n\n@Component({\n selector: 'haloduck-side-menu',\n imports: [SideMenuItemComponent ],\n templateUrl: './side-menu.component.html',\n styleUrl: './side-menu.component.css'\n})\nexport class SideMenuComponent {\n @Input() menuItems: Array<MenuItemEx> = [];\n @Input() depth: number = 0;\n\n @Output() menuItemSelected = new EventEmitter<MenuItemEx>();\n}\n","<div class=\"flex flex-col text-sm text-light-on-background dark:text-dark-on-background\">\n @for (menuItem of menuItems; track menuItem.link) {\n <haloduck-side-menu-item [menuItemSelectHandler]=\"menuItemSelected\"\n [menuItem]=\"menuItem\"\n [depth]=\"depth\"></haloduck-side-menu-item>\n @if (menuItem.children && menuItem.children.length > 0) {\n <haloduck-side-menu [menuItems]=\"menuItem.children\"\n [depth]=\"depth + 1\"\n (menuItemSelected)=\"menuItemSelected.emit($event)\"></haloduck-side-menu>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n Input,\n inject,\n OnInit,\n isDevMode,\n} from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\n\nimport * as THREE from 'three';\nimport { STLLoader } from 'three-stdlib';\nimport { OrbitControls } from 'three-stdlib';\nimport { ButtonComponent } from '../button/button.component';\nimport { download } from '@haloduck/util';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-stl-viewer',\n imports: [CommonModule, ButtonComponent, TranslocoModule],\n templateUrl: './stl-viewer.component.html',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class StlViewerComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() fileUrl!: string;\n @Input() filename!: string;\n @Input() context: any;\n @ViewChild('viewerContainer') containerRef!: ElementRef;\n\n private readonly dialogService = inject(DialogService);\n\n isPopup = false;\n scene!: THREE.Scene;\n camera!: THREE.PerspectiveCamera;\n renderer!: THREE.WebGLRenderer;\n loader = new STLLoader();\n controls!: OrbitControls;\n loadingPercentage = 0;\n\n showStl() {\n if (this.isPopup) {\n return;\n }\n\n this.dialogService.open(\n StlViewerComponent,\n {\n fileUrl: this.fileUrl,\n filename: this.filename,\n },\n ['w-full', 'h-full'],\n );\n }\n\n download() {\n download(this.fileUrl);\n }\n\n closeDialog() {\n this.dialogService.close(this.context.overlayRef);\n }\n\n animate = () => {\n requestAnimationFrame(this.animate);\n this.controls.update();\n this.renderer.render(this.scene, this.camera);\n };\n\n ngAfterViewInit() {\n const container = this.containerRef.nativeElement;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0xffffff);\n\n this.camera = new THREE.PerspectiveCamera(\n 50,\n container.clientWidth / container.clientHeight,\n 0.1,\n 1000,\n );\n this.camera.position.z = 100;\n\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.renderer.setSize(container.clientWidth, container.clientHeight);\n container.appendChild(this.renderer.domElement);\n\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.05;\n\n // Adjust lighting\n const light = new THREE.DirectionalLight(0xffffff, 1.5); // Increased intensity\n light.position.set(0, 0, 1).normalize();\n const light2 = new THREE.DirectionalLight(0xffffff, 1.5); // Increased intensity\n light2.position.set(0, 0, -1).normalize();\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.5); // Added ambient light\n this.scene.add(light, light2, ambientLight);\n\n this.loader.load(\n this.fileUrl || this.context?.fileUrl,\n (geometry) => {\n // Use MeshStandardMaterial with DoubleSide to render both sides\n const material = new THREE.MeshStandardMaterial({\n color: 0xffffff,\n metalness: 0.3,\n roughness: 0.5,\n side: THREE.DoubleSide, // Render both front and back faces\n });\n const mesh = new THREE.Mesh(geometry, material);\n\n geometry.computeBoundingBox();\n const boundingBox = geometry.boundingBox;\n const center = new THREE.Vector3();\n boundingBox?.getCenter(center);\n mesh.geometry.translate(-center.x, -center.y, -center.z);\n\n this.scene.add(mesh);\n\n const size = new THREE.Vector3();\n boundingBox?.getSize(size);\n const maxDim = Math.max(size.x, size.y, size.z);\n this.camera.position.z = maxDim * 2;\n },\n (xhr) => {\n this.loadingPercentage = (xhr.loaded / xhr.total) * 100;\n isDevMode() && console.log(this.loadingPercentage + '% loaded');\n },\n (error) => {\n isDevMode() && console.error('Error loading STL:', error);\n },\n );\n\n this.animate();\n }\n\n ngOnDestroy() {\n this.renderer.dispose();\n this.controls.dispose();\n }\n\n ngOnInit(): void {\n if (this.context) {\n this.isPopup = true;\n this.fileUrl = this.context.fileUrl;\n this.filename = this.context.filename;\n }\n }\n}\n","<div class=\"relative w-full h-full flex flex-col items-end\">\n <div class=\"w-full h-full flex items-start flex-col\">\n <div #viewerContainer\n class=\"w-full h-full rounded-md\"></div>\n @if (loadingPercentage < 100)\n {\n <div\n class=\"h-2 bg-light-primary-light dark:bg-dark-primary-light\"\n [ngStyle]=\"{ 'width': loadingPercentage + '%' }\">\n </div>\n }\n</div>\n<div class=\"absolute bottom-2 right-0 flex justify-end gap-2\">\n @if (context) {\n <haloduck-button variant=\"primary\"\n (click)=\"download()\">{{ 'haloduck.ui.button.Download' | transloco }}</haloduck-button>\n <haloduck-button variant=\"danger\"\n (click)=\"closeDialog()\">{{ 'haloduck.ui.button.Close' | transloco }}</haloduck-button>\n } @else {\n <haloduck-button variant=\"primary\"\n (click)=\"download()\">{{ 'haloduck.ui.button.Download' | transloco }}</haloduck-button>\n <haloduck-button variant=\"secondary\"\n (click)=\"showStl()\">{{ 'haloduck.ui.button.View' | transloco }}</haloduck-button>\n }\n</div>\n</div>\n","import {\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ElementRef,\n NgZone,\n inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[haloduckAutoLoad]',\n standalone: true,\n})\nexport class AutoLoadDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n private observer?: IntersectionObserver;\n private isLoading = false;\n private hasTriggeredOnce = false;\n\n @Input() autoLoadEnabled: boolean = true;\n @Input() autoLoadThreshold: number = 0.1;\n @Input() autoLoadRootMargin: string = '0px';\n @Output() autoLoadTrigger = new EventEmitter<void>();\n\n ngOnInit(): void {\n if (this.autoLoadEnabled && 'IntersectionObserver' in window) {\n this.initializeObserver();\n }\n }\n\n ngOnDestroy(): void {\n this.disconnect();\n }\n\n private initializeObserver(): void {\n this.ngZone.runOutsideAngular(() => {\n this.observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !this.isLoading) {\n this.ngZone.run(() => {\n this.triggerLoad();\n });\n }\n });\n },\n {\n threshold: this.autoLoadThreshold,\n rootMargin: this.autoLoadRootMargin,\n }\n );\n\n this.observer.observe(this.elementRef.nativeElement);\n });\n }\n\n private triggerLoad(): void {\n if (this.isLoading || !this.autoLoadEnabled) {\n return;\n }\n\n // 첫 번째 로드는 건너뛰고, 이후부터는 보일 때마다 자동 로드\n // if (this.hasTriggeredOnce) {\n this.isLoading = true;\n this.autoLoadTrigger.emit();\n\n // 옵저버를 일시적으로 해제하여 연속 트리거 방지\n this.temporarilyDisableObserver();\n // } else {\n // this.hasTriggeredOnce = true;\n // }\n }\n\n private temporarilyDisableObserver(): void {\n if (this.observer) {\n this.observer.disconnect();\n\n // 1초 후 옵저버 재연결\n setTimeout(() => {\n if (this.autoLoadEnabled && this.observer) {\n this.isLoading = false;\n this.observer.observe(this.elementRef.nativeElement);\n }\n }, 1000);\n }\n }\n\n private disconnect(): void {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n // 외부에서 로딩 상태를 제어할 수 있는 메서드\n public setLoadingState(loading: boolean): void {\n this.isLoading = loading;\n }\n\n // 자동 로드를 재활성화하는 메서드\n public resetAutoLoad(): void {\n this.hasTriggeredOnce = false;\n this.isLoading = false;\n }\n}\n","import { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n ElementRef,\n AfterViewInit,\n} from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { map, Observable, of, take } from 'rxjs';\nimport { SearchParams, TableRowProperty, CoreService } from '@haloduck/core';\nimport { AutoLoadDirective } from '../../directive/auto-load.directive';\n\nexport interface TableColumn {\n key: string | string[];\n label: string;\n width?: string;\n align?: 'text-left' | 'text-center' | 'text-right';\n sortable?: boolean;\n sort?: SearchParams.Sort;\n type?: 'number' | 'date' | 'datetime' | 'time' | 'custom';\n breakpoint?: string;\n hidden?: Observable<boolean>;\n customRenderFn?: (data: any) => Observable<string>;\n customRenderTemplate?: string; // Updated to string\n}\n\nexport interface TableRow extends TableRowProperty {\n [key: string]: any;\n}\n\n@Component({\n selector: 'haloduck-table',\n imports: [CommonModule, TranslocoModule, AutoLoadDirective],\n templateUrl: './table.component.html',\n styleUrl: './table.component.css',\n providers: [provideTranslocoScope('haloduck')],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent implements OnInit, AfterViewInit {\n private readonly coreService = inject(CoreService);\n @ViewChild('loadMoreRow', { read: ElementRef }) loadMoreRowRef?: ElementRef;\n\n @Input() tableLayout: 'fixed' | 'auto' = 'auto';\n @Input() autoLoad: boolean = true;\n @Input() showHeader: boolean = true;\n @Input() useLoadMore: boolean = true;\n @Input() columns: TableColumn[] = [];\n @Input() rows: Observable<TableRow[]> = new Observable<TableRow[]>();\n @Input() isLoading: Observable<boolean> = new Observable<boolean>();\n @Input() isPaging: Observable<boolean> = new Observable<boolean>();\n @Input() sort: Observable<SearchParams.Sort[]> = new Observable<\n SearchParams.Sort[]\n >();\n @Input() expandedTemplate?: any; // TODO\n @Input() customTemplates: { [key: string]: any } = {}; // Add this line\n @Output() onSortChange = new EventEmitter<SearchParams.Sort>();\n @Input() lastEvaluatedKey: Observable<any> = new Observable<any>();\n @Output() onLoadMore = new EventEmitter<any>();\n @Output() onRowClick = new EventEmitter<TableRow>();\n @Output() onRowDblClick = new EventEmitter<TableRow>();\n\n getColumnValue(row: TableRow, column: TableColumn): Observable<string> {\n const value = this.getColumnValueRaw(row, column);\n\n if (column.customRenderFn) {\n return column.customRenderFn(value);\n }\n\n switch (column.type) {\n case 'date':\n return this.getDate(value);\n case 'datetime':\n return this.getDateTime(value);\n case 'time':\n return this.getTime(value);\n default:\n return of(value);\n }\n }\n\n getColumnValueRaw(row: TableRow, column: TableColumn): any {\n if (Array.isArray(column.key)) {\n const value = this.getColumnValueRawWithArrayKey(row, column);\n return value;\n } else {\n return row[column.key];\n }\n }\n\n getColumnValueRawWithArrayKey(row: TableRow, column: TableColumn): any {\n let value: any = row;\n let invalidKey = false;\n\n for (const key of column.key as string[]) {\n if (Array.isArray(column.key) && column.key.length > 1) {\n const [first, ...remainingKeys] = column.key as string[];\n return this.getColumnValueRawWithArrayKey(value[first], {\n ...column,\n key: remainingKeys,\n });\n } else {\n if (invalidKey || value[key] === undefined) {\n invalidKey = true;\n break;\n }\n value = value[key];\n }\n }\n\n if (invalidKey) {\n value = '-';\n }\n return value;\n }\n\n getNumber(data: any): Observable<string> {\n const numberPipe = new DecimalPipe('en-US');\n return of(numberPipe.transform(data) || '');\n }\n\n getDate(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(datePipe.transform(data, 'shortDate') || '');\n }\n\n getDateTime(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(\n datePipe.transform(data, this.coreService.getDateFormatLong()) || '',\n );\n }\n\n getTime(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(datePipe.transform(data, 'Time') || '');\n }\n\n onUpdateSort(\n field: string | string[],\n direction: SearchParams.SortDirection,\n ): void {\n this.onSortChange.emit({ field, direction });\n }\n\n getSortDirection(field: string | string[]): Observable<string | undefined> {\n return this.sort.pipe(\n map((sort) => {\n const sortField = sort.find((s) => s.field === field);\n return sortField?.direction;\n }),\n );\n }\n\n onLoadMoreClicked(): void {\n this.lastEvaluatedKey.pipe(take(1)).subscribe((lastEvaluatedKey) => {\n this.onLoadMore.emit(lastEvaluatedKey);\n });\n }\n\n onAutoLoadTriggered(): void {\n if (this.autoLoad) {\n this.lastEvaluatedKey.pipe(take(1)).subscribe((lastEvaluatedKey) => {\n this.onLoadMore.emit(lastEvaluatedKey);\n });\n }\n }\n\n onRowClicked(row: TableRow) {\n this.onRowClick.emit(row);\n }\n\n onRowDblClicked(row: TableRow) {\n this.onRowDblClick.emit(row);\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit(): void {}\n\n constructor() {}\n}\n","<div class=\"w-full h-full shadow border border-light-inactive dark:border-dark-inactive rounded-lg overflow-auto\">\n <table class=\"w-full h-full\"\n [ngClass]=\"{\n 'table-fixed': tableLayout === 'fixed',\n 'table-auto': tableLayout === 'auto',\n }\">\n <colgroup>\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <col class=\"{{ column.width || '' }}\" />\n }\n }\n </colgroup>\n @if (showHeader) {\n <thead class=\"bg-light-inactive/50 dark:bg-dark-inactive/50 rounded-tl-lg rounded-tr-lg\">\n <tr>\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <th scope=\"col\"\n class=\"{{ column.align || '' }} py-3.5 pl-4 pr-3 text-sm font-semibold text-light-on-background dark:text-dark-on-background whitespace-nowrap\">\n <span class=\"group inline-flex\">\n {{ column.label }}\n @if (column.sortable) {\n @switch (getSortDirection(column.sort?.field || column.key) | async)\n {\n @case('desc') {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'asc')\"\n class=\"ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n @case('asc') {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'desc')\"\n class=\"ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M14.78 11.78a.75.75 0 0 1-1.06 0L10 8.06l-3.72 3.72a.75.75 0 1 1-1.06-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n @default {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'asc')\"\n class=\"invisible ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive group-hover:visible group-focus:visible\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M14.78 11.78a.75.75 0 0 1-1.06 0L10 8.06l-3.72 3.72a.75.75 0 1 1-1.06-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n }\n }\n </span>\n </th>\n }\n }\n </tr>\n </thead>\n }\n <tbody class=\"overflow-scroll\">\n @for (row of rows | async; track row['id']; let lastRow = $last) {\n <tr class=\"border-t border-light-inactive dark:border-dark-inactive {{ row.bgColor || '' }}\"\n (click)=\"onRowClicked(row)\"\n (dblclick)=\"onRowDblClicked(row)\"\n [ngClass]=\"{'rounded-b-lg': lastRow && (lastEvaluatedKey | async) === null, 'even:bg-light-alternative dark:even:bg-dark-alternative odd:bg-light-background dark:odd:bg-dark-background': !row.bgColor }\"\n [ngStyle]=\"{ 'background-color': row.bgColor || '' }\">\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <td class=\"relative overflow-visible {{ column.align || '' }} whitespace-nowrap px-3 text-sm text-light-on-background dark:text-dark-on-background\"\n [ngClass]=\"{\n 'first:rounded-bl-lg last:rounded-br-lg': lastRow && (lastEvaluatedKey | async) === null,\n 'text-wrap': row.isExpanded && column.type !== 'custom',\n 'overflow-x-hidden text-ellipsis' : !row.isExpanded && column.type !== 'custom',\n 'py-2': column.type === 'custom',\n 'py-4': column.type !== 'custom'\n }\">\n @if (column.type === 'custom') {\n @if (column.customRenderTemplate) {\n <ng-container [ngTemplateOutlet]=\"customTemplates[column.customRenderTemplate]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"></ng-container>\n }\n }\n @else {\n {{ getColumnValue(row, column) | async }}\n }\n </td>\n }\n }\n </tr>\n\n @if (row.isExpanded && expandedTemplate) {\n <tr>\n <td [attr.colspan]=\"columns.length\">\n </td>\n </tr>\n <tr class=\"even:bg-light-alternative dark:even:bg-dark-alternative odd:bg-light-background dark:odd:bg-dark-background\">\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 pb-4 text-sm text-center\">\n <ng-container [ngTemplateOutlet]=\"expandedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n\n @if (lastRow && (lastEvaluatedKey | async) && !(isLoading | async) && useLoadMore) {\n <tr #loadMoreRow \n class=\"border-t border-light-inactive dark:border-dark-inactive bg-light-background dark:bg-dark-background\"\n haloduckAutoLoad\n [autoLoadEnabled]=\"autoLoad\"\n [autoLoadThreshold]=\"0.1\"\n (autoLoadTrigger)=\"onAutoLoadTriggered()\">\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 py-4 text-sm text-light-on-background dark:text-dark-on-background text-center h-16 bg-light-background dark:bg-dark-background rounded-bl-lg rounded-br-lg\">\n <div (click)=\"onLoadMoreClicked()\"\n class=\"cursor-pointer\">\n {{ 'haloduck.ui.table.Load More...' | transloco }}\n </div>\n </td>\n </tr>\n }\n\n } @empty {\n @if(!(isLoading | async)) {\n <tr>\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 py-4 text-sm text-light-on-background dark:text-dark-on-background text-center h-16 bg-light-background dark:bg-dark-background rounded-bl-lg rounded-br-lg\">\n {{ 'haloduck.ui.table.No data available.' | transloco }}\n </td>\n </tr>\n }\n }\n\n @if(isLoading | async) {\n @for ( i of [0,1,2,3,4]; track i; let lastRow = $last)\n {\n <tr class=\"bg-light-background dark:bg-dark-background border-t border-light-inactive/50 dark:border-dark-inactive/50\">\n @for (column of columns; track column.key) {\n <td class=\"whitespace-nowrap py-4 pl-4 pr-3 text-sm\"\n [ngClass]=\"{'first:rounded-bl-lg last:rounded-br-lg': lastRow}\">\n <div class=\"h-4 bg-light-inactive/50 dark:bg-dark-inactive/50 rounded-md animate-pulse\"></div>\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n isDevMode,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'haloduck-toggle',\n imports: [CommonModule],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor, AfterViewInit {\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() value: boolean | null = false;\n @Input() disabled: boolean = false;\n @Input() nullable: boolean = false;\n @Output() toggled: EventEmitter<boolean | null> = new EventEmitter();\n @ViewChild('label') label!: ElementRef;\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: any): void {\n if (!this.nullable && (value === null || value === undefined)) {\n value = false;\n }\n\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onToggle(): void {\n if (this.nullable) {\n this.value = this.value ? false : this.value === null ? true : null;\n } else {\n this.value = !this.value;\n }\n\n this.onChange(this.value);\n this.onTouched();\n\n this.toggled.emit(this.value);\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (!this.label.nativeElement.innerText.trim()) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n}\n","<div class=\"flex gap-2\"\n [ngClass]=\"{'items-center justify-start': 'horizontal' === layout, 'flex-col items-start justify-center ': 'vertical' === layout}\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n <button class=\"w-12 p-1 rounded-l-full rounded-r-full outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-light-primary dark:foucs:outline-dark-primary bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/60 flex hover:cursor-pointer\"\n (click)=\"onToggle()\"\n [disabled]=\"disabled\"\n [ngClass]=\"{'justify-end': true === value, 'justify-center': null === value, 'justify-start': false === value}\">\n <div class=\"shrink-0 h-[1.5rem] rounded-l-full rounded-r-full\"\n [ngClass]=\"{'bg-light-primary dark:bg-dark-primary disabled:bg-light-primary/60 dark:disabled:bg-dark-primary/60': true === value, 'bg-light-inactive dark:bg-dark-inactive disabled:bg-light-inactive/60 dark:disabled:bg-dark-inactive/60': false === value,\n 'w-[1.5rem]': true === value || false === value, 'bg-light-primary-light dark:bg-dark-primary-light disabled:bg-light-primary-light/60 dark:disabled:bg-dark-primary-light/60 w-[2.4rem]': null === value}\">\n </div>\n </button>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TabItem {\n id?: string;\n label: string;\n component: Type<any>;\n inputs?: Record<string, any>;\n}\n\n@Component({\n selector: 'haloduck-tabs',\n imports: [CommonModule],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.css',\n})\nexport class TabsComponent implements OnChanges, AfterViewInit {\n @Input() tabs: TabItem[] = [];\n @Input() selectedIndex: number = 0;\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() labelWidth: string = '';\n\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n @ViewChild('label') label!: ElementRef;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['tabs']) {\n this.ensureSelectedInRange();\n }\n if (changes['selectedIndex']) {\n this.ensureSelectedInRange();\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n get current(): TabItem | null {\n if (!this.tabs || this.tabs.length === 0) return null;\n const idx = Math.min(Math.max(this.selectedIndex, 0), this.tabs.length - 1);\n return this.tabs[idx];\n }\n\n select(index: number) {\n if (index < 0 || index >= this.tabs.length) return;\n this.selectedIndex = index;\n this.selectedIndexChange.emit(this.selectedIndex);\n }\n\n private ensureSelectedInRange() {\n if (!this.tabs || this.tabs.length === 0) {\n this.selectedIndex = 0;\n return;\n }\n if (this.selectedIndex < 0) this.selectedIndex = 0;\n if (this.selectedIndex > this.tabs.length - 1)\n this.selectedIndex = this.tabs.length - 1;\n }\n}\n","<div class=\"flex gap-2 items-start w-full\" [ngClass]=\"{'flex-col': layout === 'vertical'}\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control {{ labelWidth }}\" [ngClass]=\"{'w-full': layout === 'vertical'}\">\n <ng-content select=\"[slot=label]\"></ng-content>\n </label>\n\n <div class=\"flex-1 w-full\">\n <div class=\"flex items-center gap-1 border-b border-light-inactive dark:border-dark-inactive text-sm/6\">\n @for (tab of tabs; track tab; let i = $index) {\n <button type=\"button\"\n class=\"px-3 py-2 rounded-t-md\"\n [ngClass]=\"{\n 'text-light-on-control dark:text-dark-on-control': i !== selectedIndex,\n 'text-light-primary dark:text-dark-primary border-b-2 border-light-primary dark:border-dark-primary': i === selectedIndex\n }\"\n (click)=\"select(i)\">\n {{ tab.label }}\n </button>\n }\n </div>\n\n <div class=\"mt-3\">\n @if (current) {\n <ng-container *ngComponentOutlet=\"current!.component; inputs: current!.inputs || {}\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-tag-input',\n imports: [CommonModule],\n templateUrl: './tag-input.component.html',\n styleUrl: './tag-input.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TagInputComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class TagInputComponent implements ControlValueAccessor, AfterViewInit {\n @ViewChild('label') label!: ElementRef;\n @ViewChild('inputEl') inputEl!: ElementRef<HTMLInputElement>;\n\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Input() allowDuplicates: boolean = false;\n\n // Two-way binding support independent of CVA\n @Input() set value(tags: string[] | null) {\n if (Array.isArray(tags)) {\n this.tags = tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n @Output() valueChange = new EventEmitter<string[]>();\n\n tags: string[] = [];\n inputValue: string = '';\n\n onChange: (value: any) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(value: string[] | null): void {\n if (Array.isArray(value)) {\n this.tags = value\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngAfterViewInit(): void {\n // hide label if no projected content\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n focus(): void {\n this.inputEl?.nativeElement?.focus();\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.inputValue = input.value;\n this.onTouched();\n }\n\n onBlur(): void {\n if (this.disabled) return;\n this.inputValue = '';\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n // Commit on comma or Enter\n if (event.key === ',' || event.key === 'Enter') {\n event.preventDefault();\n this.commitCurrentInput();\n return;\n }\n\n // Backspace behavior\n if (event.key === 'Backspace') {\n if (this.inputValue.length > 0) {\n return; // default backspace in input\n }\n if (this.tags.length > 0) {\n event.preventDefault();\n this.removeTag(this.tags.length - 1);\n return;\n }\n }\n }\n\n removeTag(index: number): void {\n if (this.disabled) return;\n if (index < 0 || index >= this.tags.length) return;\n this.tags = this.tags.filter((_, i) => i !== index);\n this.emitChanges();\n }\n\n private commitCurrentInput(): void {\n const raw = this.inputValue.trim();\n if (!raw) {\n this.inputValue = '';\n return;\n }\n\n // If user pasted multiple comma-separated values, split and add all\n const parts = raw.split(',').map((p) => p.trim()).filter((p) => p.length > 0);\n for (const part of parts) {\n this.addTag(part);\n }\n\n this.inputValue = '';\n }\n\n private addTag(tag: string): void {\n if (!this.allowDuplicates) {\n const exists = this.tags.some((t) => t.toLowerCase() === tag.toLowerCase());\n if (exists) {\n return;\n }\n }\n this.tags = [...this.tags, tag];\n this.emitChanges();\n }\n\n private emitChanges(): void {\n const cleaned = this.tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n if (cleaned.length !== this.tags.length || cleaned.some((t, i) => t !== this.tags[i])) {\n this.tags = cleaned;\n }\n this.onChange(this.tags);\n this.valueChange.emit(this.tags);\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n\n <div class=\"tag-input-wrapper block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-2 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive sm:text-sm/6\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <ng-container *ngFor=\"let tag of tags; let i = index\">\n <span class=\"inline-flex items-center gap-1 rounded-md bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary px-2 py-0.5 text-xs\">\n {{ tag }}\n @if (!disabled) {\n <button type=\"button\" (click)=\"removeTag(i)\" class=\"text-light-on-secondary/80 hover:text-light-on-secondary dark:text-dark-on-secondary/80 dark:hover:text-dark-on-secondary hover:cursor-pointer\">\n ×\n </button>\n }\n </span>\n </ng-container>\n\n <input #inputEl\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n class=\"flex-1 min-w-[8rem] bg-transparent outline-none placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-tag-viewer',\n imports: [CommonModule],\n templateUrl: './tag-viewer.component.html',\n styleUrl: './tag-viewer.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class TagViewerComponent implements AfterViewInit {\n @ViewChild('label') label!: ElementRef;\n\n tags: string[] = [];\n\n @Input() shouldWrap: boolean = true;\n\n // Accept input as `value` for consistency with tag-input\n @Input() set value(tags: string[] | null) {\n if (Array.isArray(tags)) {\n this.tags = tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no projected content\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n\n <div\n class=\"block w-full rounded-md px-2 py-1.5 text-base text-light-on-control dark:text-dark-on-control sm:text-sm/6\">\n <div class=\"flex items-center gap-2\"\n [ngClass]=\"shouldWrap ? 'flex-wrap' : 'flex-nowrap'\">\n @for (tag of tags; track tag) {\n <span\n class=\"inline-flex items-center gap-1 rounded-md bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary px-2 py-0.5 text-xs\">\n {{ tag }}\n </span>\n }\n </div>\n </div>\n</div>\n","import { Directive, ElementRef, Input, OnInit, Renderer2, HostBinding } from '@angular/core';\n\nexport interface GroupedConfig {\n layoutClasses?: string;\n bgClasses?: string;\n borderClasses?: string;\n labelText?: string;\n labelClasses?: string;\n labelOffset?: string;\n}\n\n@Directive({\n selector: '[haloduckGrouped]',\n standalone: true\n})\nexport class GroupedDirective implements OnInit {\n @Input() haloduckGrouped: GroupedConfig | string = {};\n @Input() layoutClasses: string = 'p-4 mt-2';\n @Input() bgClasses: string = '';\n @Input() borderClasses: string = 'border border-light-inactive dark:border-dark-inactive rounded';\n @Input() labelText: string = '';\n @Input() labelClasses: string = 'absolute bg-light-inactive dark:bg-dark-inactive text-light-on-inactive dark:text-dark-on-inactive px-2 py-0.5 text-sm font-medium rounded';\n @Input() labelOffset: string = '-10px';\n\n @HostBinding('class') hostClasses = 'relative';\n\n private labelElement: HTMLElement | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.applyConfig();\n\n this.createLayout();\n this.createBorder();\n this.createLabel();\n }\n\n private applyConfig(): void {\n if (typeof this.haloduckGrouped === 'string') {\n this.labelText = this.haloduckGrouped;\n } else if (typeof this.haloduckGrouped === 'object') {\n const config = this.haloduckGrouped;\n this.layoutClasses = config.layoutClasses ?? this.layoutClasses;\n this.bgClasses = config.bgClasses ?? this.bgClasses;\n this.borderClasses = config.borderClasses ?? this.borderClasses;\n this.labelText = config.labelText ?? this.labelText;\n this.labelClasses = config.labelClasses ?? this.labelClasses;\n this.labelOffset = config.labelOffset ?? this.labelOffset;\n }\n }\n\n private createLayout(): void {\n const element = this.elementRef.nativeElement;\n this.addClasses(element, this.layoutClasses);\n }\n\n private createBorder(): void {\n const element = this.elementRef.nativeElement;\n\n // 기존 테두리 클래스 제거\n this.removeBorderClasses(element);\n\n // Tailwind 클래스 추가\n this.addClasses(element, this.borderClasses);\n }\n\n private createLabel(): void {\n if (!this.labelText) return;\n\n const element = this.elementRef.nativeElement;\n\n // 기존 라벨 제거\n if (this.labelElement) {\n this.renderer.removeChild(element, this.labelElement);\n }\n\n // 라벨 요소 생성\n this.labelElement = this.renderer.createElement('span');\n\n // Tailwind 클래스 적용\n if (this.labelElement) {\n this.addClasses(this.labelElement, this.labelClasses);\n }\n\n // 커스텀 스타일 (Tailwind로 매핑할 수 없는 속성들)\n this.renderer.setStyle(this.labelElement, 'top', this.labelOffset);\n this.renderer.setStyle(this.labelElement, 'left', '8px');\n this.renderer.setStyle(this.labelElement, 'white-space', 'nowrap');\n this.renderer.setStyle(this.labelElement, 'z-index', '10');\n this.renderer.setStyle(this.labelElement, 'pointer-events', 'none');\n\n // 라벨 텍스트 설정\n this.renderer.setProperty(this.labelElement, 'textContent', this.labelText);\n\n // 요소에 라벨 추가\n this.renderer.appendChild(element, this.labelElement);\n }\n\n private addClasses(element: HTMLElement, classString: string): void {\n if (!classString) return;\n\n // 공백으로 구분된 클래스들을 분리하여 각각 추가\n const classes = classString.split(' ').filter(className => className.trim());\n classes.forEach(className => {\n if (className.trim()) {\n this.renderer.addClass(element, className.trim());\n }\n });\n }\n\n private removeBorderClasses(element: HTMLElement): void {\n // 기본 테두리 클래스들 제거\n const defaultBorderClasses = [\n 'border', 'border-2', 'border-3', 'border-4', 'border-8',\n 'border-solid', 'border-dashed', 'border-dotted', 'border-double', 'border-none',\n 'rounded-none', 'rounded-sm', 'rounded', 'rounded-md', 'rounded-lg', 'rounded-xl', 'rounded-2xl', 'rounded-3xl', 'rounded-full',\n 'border-gray-200', 'border-gray-300', 'border-gray-400', 'border-gray-500', 'border-gray-600', 'border-gray-700', 'border-gray-800', 'border-gray-900',\n 'border-blue-500', 'border-blue-700', 'border-red-500', 'border-red-600', 'border-green-500', 'border-green-600',\n 'border-amber-500', 'border-amber-600', 'border-violet-500', 'border-violet-600', 'border-pink-500', 'border-pink-600',\n 'border-white', 'border-black'\n ];\n\n defaultBorderClasses.forEach(className => {\n this.renderer.removeClass(element, className);\n });\n }\n\n // 라벨 텍스트 업데이트 메서드\n updateLabel(text: string): void {\n if (this.labelElement) {\n this.renderer.setProperty(this.labelElement, 'textContent', text);\n }\n }\n\n // 라벨 표시/숨김 메서드\n toggleLabel(show: boolean): void {\n if (this.labelElement) {\n if (show) {\n this.renderer.removeClass(this.labelElement, 'hidden');\n } else {\n this.renderer.addClass(this.labelElement, 'hidden');\n }\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, Router, NavigationEnd } from '@angular/router';\nimport { CoreService } from '@haloduck/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\ninterface Breadcrumb {\n label: string;\n url: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BreadcrumbService {\n private readonly coreService = inject(CoreService);\n private breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\n breadcrumbs$ = this.breadcrumbs.asObservable();\n private readonly titleService = inject(Title);\n\n constructor(private router: Router) {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const root = this.router.routerState.snapshot.root;\n const breadcrumbs = this.createBreadcrumbs(root);\n this.breadcrumbs.next(breadcrumbs);\n\n setTimeout(() => {\n const titlePrefix =\n this.coreService.getStage() === 'prod'\n ? ''\n : `[${this.coreService.getStage()}] ` +\n this.coreService.getAppName() +\n '::';\n\n const title =\n titlePrefix +\n breadcrumbs.reduce((acc, breadcrumb) => {\n return acc ? `${acc}>${breadcrumb.label}` : breadcrumb.label;\n }, '');\n\n this.titleService.setTitle(title || 'Default Title');\n });\n });\n }\n\n private createBreadcrumbs(\n route: ActivatedRouteSnapshot,\n url: string = '',\n breadcrumbs: Breadcrumb[] = [],\n ): Breadcrumb[] {\n const children: ActivatedRouteSnapshot[] = route.children;\n\n if (children.length === 0) {\n return breadcrumbs;\n }\n\n for (const child of children) {\n const routeURL: string = child.url\n .map((segment) => segment.path)\n .join('/');\n if (routeURL !== '') {\n url += `/${routeURL}`;\n }\n\n if (child.data['breadcrumb']) {\n breadcrumbs.push({ label: child.data['breadcrumb'], url });\n }\n\n return this.createBreadcrumbs(child, url, breadcrumbs);\n }\n\n return breadcrumbs;\n }\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BreadcrumbService } from './breadcrumb.service';\nimport { TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-breadcrumb',\n imports: [RouterLink, TranslocoModule],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.css',\n})\nexport class BreadcrumbComponent implements OnInit {\n private readonly breadcrumbService = inject(BreadcrumbService);\n listBreadcrumb: { label: string; url: string }[] = [];\n\n ngOnInit() {\n this.breadcrumbService.breadcrumbs$.subscribe((listBreadcrumb) => {\n this.listBreadcrumb = listBreadcrumb;\n });\n }\n}\n","<nav class=\"flex border-b border-light-inactive dark:border-dark-inactive bg-light-background dark:bg-dark-background\"\n aria-label=\"Breadcrumb\">\n <ol role=\"list\"\n class=\"flex w-full max-w-(--breakpoint-xl) space-x-4 px-4 sm:px-6 lg:px-8\">\n <li class=\"flex\">\n <div class=\"flex items-center\">\n <a routerLink=\"/\"\n class=\"text-light-on-background dark:text-dark-on-background hover:scale-105\">\n <svg class=\"size-5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M9.293 2.293a1 1 0 0 1 1.414 0l7 7A1 1 0 0 1 17 11h-1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-6H3a1 1 0 0 1-.707-1.707l7-7Z\"\n clip-rule=\"evenodd\" />\n </svg>\n <span class=\"sr-only\">Home</span>\n </a>\n </div>\n </li>\n @for (breadcrumb of listBreadcrumb; track breadcrumb.label; let last = $last) {\n <li class=\"flex\">\n <div class=\"flex items-center\">\n <svg class=\"h-full w-6 shrink-0 text-light-inactive dark:text-dark-inactive\"\n viewBox=\"0 0 24 44\"\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path d=\"M.293 0l22 22-22 22h1.414l22-22-22-22H.293z\" />\n </svg>\n @if (!last) {\n <a href=\"javascript:void(0)\"\n [routerLink]=\"breadcrumb.url\"\n class=\"ml-4 text-sm font-medium hover:font-bold text-light-on-background dark:text-dark-on-background\">{{ breadcrumb.label | transloco }}</a>\n } @else {\n <span class=\"ml-4 text-sm font-medium text-light-on-background dark:text-dark-on-background\">{{ breadcrumb.label | transloco }}</span>\n }\n </div>\n </li>\n }\n </ol>\n</nav>\n","import { Component, inject } from '@angular/core';\nimport { NotificationService } from './notification.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'haloduck-notification',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './notification.component.html',\n styleUrl: './notification.component.css',\n})\nexport class NotificationComponent {\n private readonly notificationService = inject(NotificationService);\n listNotification$ = this.notificationService.getListNotification();\n\n removeNotification(id: string) {\n this.notificationService.removeNotificationById(id);\n }\n}\n","@for (notification of listNotification$ |async; track notification.id) {\n<div class=\"relative rounded-lg m-4 px-8 py-4 bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary animate-fadeIn\"\n [ngClass]=\"{ 'bg-light-primary-dark dark:bg-dark-primary-dark text-light-on-primary-dark dark:text-dark-on-primary-dark': notification.type === 'info',\n 'bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary': notification.type === 'success',\n 'bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger': notification.type === 'error',\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary': notification.type === 'warning' }\">\n {{notification.message}}\n <div class=\"absolute top-0 right-0\">\n <button type=\"button\"\n (click)=\"removeNotification(notification.id)\">\n <span class=\"sr-only\">Close</span>\n <svg class=\"size-6 text-white\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n</div>\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'haloduck-picture-name',\n imports: [],\n templateUrl: './picture-name.component.html',\n styleUrl: './picture-name.component.css'\n})\nexport class PictureNameComponent {\n @Input() name?: string = '';\n @Input() pictureKey?: string;\n @Input() cdnUrl?: string = '';\n}\n","<div class=\"flex items-center justify-start gap-2\">\n @if(pictureKey) {\n <img src=\"{{cdnUrl}}/{{pictureKey}}\"\n alt=\"사진\"\n class=\"w-8 h-8 rounded-full\" />\n } @else {\n <div class=\"w-8 h-8 bg-light-inactive dark:bg-dark-inactive rounded-full\"></div>\n }\n {{ name }}\n @if (name) {\n \n <!-- TODO -->\n }\n</div>\n","import { provideTranslocoScope } from '@jsverse/transloco';\n\nexport const provideHaloduckTransloco = () =>\n provideTranslocoScope({\n scope: 'haloduck',\n alias: 'haloduck',\n });\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"haloduck-ui.mjs","sources":["../../../../projects/haloduck/ui/src/lib/layout/notification/notification.service.ts","../../../../projects/haloduck/ui/src/lib/control/button/button.component.ts","../../../../projects/haloduck/ui/src/lib/control/button/button.component.html","../../../../projects/haloduck/ui/src/lib/control/input/input.component.ts","../../../../projects/haloduck/ui/src/lib/control/input/input.component.html","../../../../projects/haloduck/ui/src/lib/component/authenticate/authenticate.component.ts","../../../../projects/haloduck/ui/src/lib/component/authenticate/authenticate.component.html","../../../../projects/haloduck/ui/src/lib/control/select/select-dropdown/select-dropdown.component.ts","../../../../projects/haloduck/ui/src/lib/control/select/select-dropdown/select-dropdown.component.html","../../../../projects/haloduck/ui/src/lib/control/select/select.component.ts","../../../../projects/haloduck/ui/src/lib/control/select/select.component.html","../../../../projects/haloduck/ui/src/lib/control/calendar/calendar.component.ts","../../../../projects/haloduck/ui/src/lib/control/calendar/calendar.component.html","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog-container.component.ts","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog-container.component.html","../../../../projects/haloduck/ui/src/lib/layout/dialog-container/dialog.service.ts","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.component.ts","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.component.html","../../../../projects/haloduck/ui/src/lib/control/confirm-dialog/confirm-dialog.service.ts","../../../../projects/haloduck/ui/src/lib/control/copy-button/copy-button.component.ts","../../../../projects/haloduck/ui/src/lib/control/copy-button/copy-button.component.html","../../../../projects/haloduck/ui/src/lib/control/date-picker/date-picker.component.ts","../../../../projects/haloduck/ui/src/lib/control/date-picker/date-picker.component.html","../../../../projects/haloduck/ui/src/lib/control/date-range/date-range.component.ts","../../../../projects/haloduck/ui/src/lib/control/date-range/date-range.component.html","../../../../projects/haloduck/ui/src/lib/control/draw-canvas/draw-canvas.component.ts","../../../../projects/haloduck/ui/src/lib/control/draw-canvas/draw-canvas.component.html","../../../../projects/haloduck/ui/src/lib/control/file-uploader/file-uploader.component.ts","../../../../projects/haloduck/ui/src/lib/control/file-uploader/file-uploader.component.html","../../../../projects/haloduck/ui/src/lib/control/flip/flip.component.ts","../../../../projects/haloduck/ui/src/lib/control/flip/flip.component.html","../../../../projects/haloduck/ui/src/lib/control/image-viewer/image-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/image-viewer/image-viewer.component.html","../../../../projects/haloduck/ui/src/lib/control/image-uploader/image-uploader.component.ts","../../../../projects/haloduck/ui/src/lib/control/image-uploader/image-uploader.component.html","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector-option/language-selector-option.component.ts","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector-option/language-selector-option.component.html","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector.component.ts","../../../../projects/haloduck/ui/src/lib/control/language-selector/language-selector.component.html","../../../../projects/haloduck/ui/src/lib/control/map-to-address/map-to-address.component.ts","../../../../projects/haloduck/ui/src/lib/control/map-to-address/map-to-address.component.html","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu-item/side-menu-item.component.ts","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu-item/side-menu-item.component.html","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu.component.ts","../../../../projects/haloduck/ui/src/lib/control/side-menu/side-menu.component.html","../../../../projects/haloduck/ui/src/lib/control/stl-viewer/stl-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/stl-viewer/stl-viewer.component.html","../../../../projects/haloduck/ui/src/lib/directive/auto-load.directive.ts","../../../../projects/haloduck/ui/src/lib/control/table/table.component.ts","../../../../projects/haloduck/ui/src/lib/control/table/table.component.html","../../../../projects/haloduck/ui/src/lib/control/toggle/toggle.component.ts","../../../../projects/haloduck/ui/src/lib/control/toggle/toggle.component.html","../../../../projects/haloduck/ui/src/lib/control/tabs/tabs.component.ts","../../../../projects/haloduck/ui/src/lib/control/tabs/tabs.component.html","../../../../projects/haloduck/ui/src/lib/control/tag-input/tag-input.component.ts","../../../../projects/haloduck/ui/src/lib/control/tag-input/tag-input.component.html","../../../../projects/haloduck/ui/src/lib/control/tag-viewer/tag-viewer.component.ts","../../../../projects/haloduck/ui/src/lib/control/tag-viewer/tag-viewer.component.html","../../../../projects/haloduck/ui/src/lib/control/grouped/grouped.directive.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.service.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.component.ts","../../../../projects/haloduck/ui/src/lib/layout/breadcrumb/breadcrumb.component.html","../../../../projects/haloduck/ui/src/lib/layout/notification/notification.component.ts","../../../../projects/haloduck/ui/src/lib/layout/notification/notification.component.html","../../../../projects/haloduck/ui/src/lib/widget/picture-name/picture-name.component.ts","../../../../projects/haloduck/ui/src/lib/widget/picture-name/picture-name.component.html","../../../../projects/haloduck/ui/src/transloco/transloco.scope.ts","../../../../projects/haloduck/ui/src/haloduck-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { ulid } from 'ulid';\n\n// Flutter 앱과의 통신을 위한 전역 인터페이스 선언\ndeclare global {\n interface Window {\n FlutterApp?: {\n postMessage: (message: string) => void;\n };\n }\n}\n\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info';\nexport interface Notification {\n id: string;\n type: NotificationType;\n message: string;\n timeout?: number;\n timeoutRef?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private listNotification$ = new BehaviorSubject<Notification[]>([]);\n private listNotification: Notification[] = [];\n\n showNotification(\n title: string,\n body: string,\n timeout?: number,\n payload: any = null,\n ) {\n if (window.FlutterApp) {\n window.FlutterApp.postMessage(\n JSON.stringify({\n action: 'showNotification',\n title: title,\n body: body,\n payload: payload,\n timeout: timeout,\n }),\n );\n } else if (\n 'Notification' in window &&\n Notification.permission === 'granted'\n ) {\n // 웹브라우저에서 실행될 때는 기본 브라우저 알림 사용\n new Notification(title, { body: body });\n } else {\n // 기본 내부 알림 시스템 사용\n this._showNotification('info', body, timeout);\n }\n }\n\n _showNotification(\n type: NotificationType,\n message: string,\n timeout?: number,\n ): string {\n const id = ulid();\n const notification: Notification = { id, type, message, timeout };\n\n if (timeout && timeout > 0) {\n const timeoutRef = window.setTimeout(() => {\n this.removeNotificationById(id);\n }, timeout);\n notification.timeoutRef = timeoutRef;\n }\n\n this.listNotification.push(notification);\n this.listNotification$.next(this.listNotification);\n\n return id;\n }\n\n getListNotification(): Observable<Notification[]> {\n return this.listNotification$.asObservable();\n }\n\n removeNotificationById(id: string) {\n const notification = this.listNotification.find((n) => n.id === id);\n if (notification?.timeoutRef) {\n clearTimeout(notification.timeoutRef);\n }\n\n this.listNotification = this.listNotification.filter((n) => n.id !== id);\n this.listNotification$.next(this.listNotification);\n }\n\n constructor() {}\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'none';\n\n@Component({\n selector: 'haloduck-button',\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrl: './button.component.css'\n})\nexport class ButtonComponent {\n @Input() disabled: boolean | null = false;\n @Input() variant: ButtonVariant = 'primary'\n\n}\n","<button type=\"button\"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'bg-light-primary text-light-on-primary dark:bg-dark-primary dark:text-dark-on-primary': variant === 'primary' && !disabled,\n 'bg-light-primary-light text-light-on-primary-light dark:bg-dark-primary-light dark:text-dark-on-primary-light': variant === 'secondary' && !disabled,\n 'bg-light-danger text-light-on-danger dark:bg-dark-danger dark:text-dark-on-danger': variant === 'danger' && !disabled,\n 'bg-light-background text-light-on-background dark:bg-dark-background dark:text-dark-on-background border border-light-on-background dark:border-dark-on-background' : variant === 'none' && !disabled,\n 'bg-light-inactive text-light-on-inactive dark:bg-dark-inactive dark:text-dark-on-inactive active:animate-bounce hover:cursor-not-allowed': disabled,\n 'active:scale-95 transition-transform': !disabled,\n 'hover:cursor-pointer': !disabled\n }\"\n class=\"px-4 py-1.5 rounded-lg text-sm/6 w-full text-nowrap\">\n <ng-content></ng-content>\n</button>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n ViewChild,\n forwardRef,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class InputComponent implements ControlValueAccessor, AfterViewInit {\n private readonly cdr = inject(ChangeDetectorRef);\n\n @ViewChild('label') label!: ElementRef;\n @ViewChild('input') private inputElement!: ElementRef<HTMLElement>;\n\n @Input() placeholder: string = '';\n @Input() type: string = 'text';\n @Input() disabled: boolean = false;\n @Input() rows: number = 1;\n @Input() autofocus: boolean = false;\n @Input() value: string = '';\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n focus() {\n this.inputElement?.nativeElement?.focus();\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n this.onTouched();\n\n if (this.rows > 1) {\n input.style.height = 'auto';\n input.style.height = input.scrollHeight + 'px';\n }\n }\n\n onKeydown($event: KeyboardEvent) {\n if (this.rows === 1 && $event.key === 'Enter') {\n $event.preventDefault();\n $event.stopPropagation();\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (!this.label.nativeElement.innerText.trim()) {\n this.label.nativeElement.style.display = 'none';\n }\n\n if (this.autofocus) {\n // Ensure change detection is complete and view is stable\n this.cdr.detectChanges();\n setTimeout(() => {\n if (this.inputElement?.nativeElement instanceof HTMLElement) {\n this.inputElement.nativeElement.focus();\n }\n }, 100);\n }\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n @if (rows > 1) {\n <textarea #input\n [value]=\"value\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n (keydown)=\"onKeydown($event)\"\n class=\"block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-3 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary sm:text-sm/6\"></textarea>\n }\n @else {\n <input #input\n [type]=\"type\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (keydown)=\"onKeydown($event)\"\n class=\"block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-3 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary sm:text-sm/6\">\n }\n</div>\n","// auth.component.ts\nimport { Component, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { signIn, resetPassword, confirmResetPassword, confirmSignIn } from 'aws-amplify/auth';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { NotificationService } from '../../layout/notification/notification.service';\nimport { ButtonComponent } from '../../control/button/button.component';\nimport { InputComponent } from '../../control/input/input.component';\n\n@Component({\n selector: 'haloduck-authenticate',\n imports: [FormsModule, ReactiveFormsModule, InputComponent, ButtonComponent],\n templateUrl: './authenticate.component.html',\n styleUrl: './authenticate.component.css',\n})\nexport class AuthenticateComponent {\n private notificationService = inject(NotificationService);\n loginForm: FormGroup;\n signupForm: FormGroup;\n resetForm: FormGroup;\n newPasswordForm: FormGroup;\n otpForm: FormGroup;\n\n stage: 'login' | 'signup' | 'reset' | 'newPassword' | 'otpVerify' = 'login';\n emailForReset: string = '';\n\n constructor(\n private fb: FormBuilder,\n private http: HttpClient,\n ) {\n this.loginForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n });\n\n this.signupForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n password: ['', Validators.required],\n });\n\n this.resetForm = fb.group({\n email: ['', [Validators.required, Validators.email]],\n });\n\n this.newPasswordForm = fb.group({\n newPassword: ['', Validators.required],\n });\n\n this.otpForm = fb.group({\n code: ['', Validators.required],\n newPassword: ['', Validators.required],\n });\n }\n\n switchStage(\n stage: 'login' | 'signup' | 'reset' | 'newPassword' | 'otpVerify',\n ) {\n this.stage = stage;\n }\n\n login() {\n signIn({\n username: this.loginForm.value.email,\n password: this.loginForm.value.password,\n options: {\n authFlowType: 'USER_PASSWORD_AUTH',\n },\n })\n .then((res: any) => {\n // console.log('res', res);\n // console.log('res.nextStep.signInStep', res.nextStep.signInStep);\n if (res.nextStep.signInStep === 'CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED') {\n this.switchStage('newPassword');\n } else {\n this.notificationService.showNotification(\n 'success',\n 'Successfully signed in.',\n 3000,\n );\n }\n })\n .catch((err) => {\n if (err.code === 'NotAuthorizedException') {\n this.switchStage('reset');\n } else {\n this.notificationService.showNotification(\n 'error',\n 'Failed to sign in.',\n );\n }\n });\n }\n\n confirmNewPassword() {\n confirmSignIn({\n challengeResponse: this.newPasswordForm.value.newPassword,\n })\n .then(() => {\n this.notificationService.showNotification(\n 'success',\n 'Successfully signed in.',\n 3000,\n );\n })\n .catch((err) => {\n if (err.code === 'NotAuthorizedException') {\n this.notificationService.showNotification(\n 'error',\n 'Failed to sign in.',\n );\n } else if (err.code === 'InvalidPasswordException') {\n this.notificationService.showNotification(\n 'error',\n 'Invalid password.',\n );\n } else {\n this.notificationService.showNotification(\n 'error',\n 'Failed to confirm new password.',\n );\n }\n });\n }\n\n signup() {\n this.http.post('/api/signup', this.signupForm.value).subscribe(console.log);\n }\n\n reset() {\n resetPassword({ username: this.resetForm.value.email })\n .then(() => {\n this.switchStage('otpVerify');\n })\n .catch((err) => {\n this.notificationService.showNotification(\n 'error',\n 'Failed to request verification code.',\n );\n });\n }\n\n verifyOtp() {\n confirmResetPassword({\n username: this.resetForm.value.email,\n confirmationCode: this.otpForm.value.code,\n newPassword: this.otpForm.value.newPassword,\n })\n .then(() => {\n this.notificationService.showNotification(\n 'success',\n 'Successfully reset password.',\n 3000,\n );\n this.switchStage('login');\n })\n .catch((err) => {\n this.notificationService.showNotification(\n 'error',\n 'Failed to reset password.',\n );\n });\n }\n\n get passwordValue(): string {\n return this.newPasswordForm.get('newPassword')?.value || '';\n }\n\n get isMinLength(): boolean {\n return this.passwordValue.length >= 8;\n }\n get hasUppercase(): boolean {\n return /[A-Z]/.test(this.passwordValue);\n }\n get hasLowercase(): boolean {\n return /[a-z]/.test(this.passwordValue);\n }\n get hasNumber(): boolean {\n return /[0-9]/.test(this.passwordValue);\n }\n get hasSpecialChar(): boolean {\n return /[^A-Za-z0-9]/.test(this.passwordValue);\n }\n get isPasswordValid(): boolean {\n return this.isMinLength && this.hasUppercase && this.hasLowercase && this.hasNumber && this.hasSpecialChar;\n }\n\n get passwordRules() {\n return [\n { label: 'minimum of 8 characters', valid: this.isMinLength },\n { label: 'one uppercase letter', valid: this.hasUppercase },\n { label: 'one lowercase letter', valid: this.hasLowercase },\n { label: 'one numeric digit', valid: this.hasNumber },\n { label: 'one special character', valid: this.hasSpecialChar },\n ];\n }\n}\n","<div class=\"flex flex-col items-center justify-center h-full\">\n <!-- auth.component.html -->\n <div class=\"w-full max-w-md mx-auto mt-20 p-8 shadow-lg rounded-2xl bg-light-background dark:bg-dark-background\">\n\n @switch (stage) {\n @case ('login') {\n <!-- 로그인 -->\n <form [formGroup]=\"loginForm\"\n (ngSubmit)=\"login()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-login-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-input data-testid=\"authenticate-login-password\"\n type=\"password\"\n formControlName=\"password\"\n placeholder=\"Password\" />\n <haloduck-button data-testid=\"authenticate-login-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"login()\">Sign In</haloduck-button>\n </form>\n }\n @case ('signup') {\n <!-- 회원가입 -->\n <form [formGroup]=\"signupForm\"\n (ngSubmit)=\"signup()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-signup-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-input data-testid=\"authenticate-signup-password\"\n type=\"password\"\n formControlName=\"password\"\n placeholder=\"Password\" />\n <haloduck-button data-testid=\"authenticate-signup-submit\"\n type=\"submit\"\n variant=\"primary\">Sign Up</haloduck-button>\n </form>\n }\n @case ('reset') {\n <!-- 비밀번호 재설정 요청 -->\n <form [formGroup]=\"resetForm\"\n (ngSubmit)=\"reset()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-reset-email\"\n type=\"email\"\n formControlName=\"email\"\n placeholder=\"Email\" />\n <haloduck-button data-testid=\"authenticate-reset-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"reset()\">Send Verification Code</haloduck-button>\n </form>\n }\n @case ('otpVerify') {\n <!-- OTP 인증 후 새 비밀번호 입력 -->\n <form [formGroup]=\"otpForm\"\n (ngSubmit)=\"verifyOtp()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-otp-code\"\n type=\"text\"\n formControlName=\"code\"\n placeholder=\"Verification Code\" />\n <haloduck-input data-testid=\"authenticate-otp-password\"\n type=\"password\"\n formControlName=\"newPassword\"\n placeholder=\"New password\" />\n <haloduck-button data-testid=\"authenticate-otp-submit\"\n type=\"submit\"\n variant=\"primary\"\n (click)=\"verifyOtp()\">Reset Password</haloduck-button>\n </form>\n\n }\n @case ('newPassword') {\n <!-- 임시 비밀번호 → 새 비밀번호 변경 -->\n <form [formGroup]=\"newPasswordForm\"\n (ngSubmit)=\"confirmNewPassword()\"\n class=\"flex flex-col gap-4\">\n <haloduck-input data-testid=\"authenticate-new-password-password\"\n type=\"password\"\n formControlName=\"newPassword\"\n placeholder=\"New password\">\n </haloduck-input>\n <div class=\"text-sm flex flex-col\">\n @for (rule of passwordRules; track rule.label) {\n <span [class.text-light-secondary]=\"rule.valid && passwordValue !== ''\"\n [class.line-through]=\"rule.valid && passwordValue !== ''\"\n [class.text-light-danger]=\"!rule.valid && passwordValue !== ''\"\n [class.text-light-inactive]=\"passwordValue === ''\">\n {{ rule.valid ? '✔' : '✗' }} {{ rule.label }}\n </span>\n }\n </div>\n <haloduck-button data-testid=\"authenticate-new-password-submit\"\n type=\"submit\"\n (click)=\"confirmNewPassword()\"\n variant=\"primary\"\n [disabled]=\"!isPasswordValid\">Change Password</haloduck-button>\n </form>\n }\n }\n\n <!-- 단계 전환 탭 -->\n <div class=\"flex justify-center mt-6 gap-4\">\n @if (stage !== 'login') {\n <haloduck-button data-testid=\"authenticate-to-signin\"\n variant=\"none\"\n (click)=\"switchStage('login')\">to Sign In</haloduck-button>\n }\n <!-- <haloduck-button class=\"text-sm text-blue-600 hover:underline\"\n (click)=\"switchStage('signup')\">회원가입</haloduck-button> -->\n @if (stage !== 'reset' && stage !== 'otpVerify' && stage !== 'newPassword') {\n <haloduck-button data-testid=\"authenticate-to-reset-password\"\n variant=\"secondary\"\n (click)=\"switchStage('reset')\">Reset Password</haloduck-button>\n }\n </div>\n\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, signal } from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { FormsModule } from '@angular/forms';\n\nexport interface Option {\n id?: string;\n value: string;\n isSticky?: boolean;\n isExclusive?: boolean;\n shouldManualInput?: boolean;\n manualPrefix?: string;\n}\n\n@Component({\n selector: 'haloduck-select-dropdown',\n imports: [TranslocoModule, FormsModule],\n templateUrl: './select-dropdown.component.html',\n styleUrl: './select-dropdown.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class SelectDropdownComponent {\n protected _filteredOptions = signal([] as Option[]);\n protected _options: Option[] = [];\n protected _selectedOptionIds: string[] = [];\n protected manualInputValues: Record<string, string> = {};\n protected activeManualKey: string | null = null;\n\n @Output() selectedChange = new EventEmitter<string[]>();\n @Output() closeDropdown = new EventEmitter<void>();\n @Input() useFilter: boolean = false;\n @Input() multiselect: boolean = true;\n @Input() atLeastOne: boolean = false;\n @Input() asButton: boolean = false;\n @Input() set options(value: Option[] | null) {\n this._options = value || [];\n this._filteredOptions.set(this._options);\n this.seedManualInputs();\n }\n get options(): Option[] | null {\n return this._filteredOptions();\n }\n @Input() set selectedOptionIds(value: string[] | null) {\n this._selectedOptionIds = value || [];\n this.seedManualInputs();\n }\n get selectedOptions(): string[] | null {\n return this._selectedOptionIds;\n }\n\n onFilterInput(event: Event) {\n const value = (event.target as HTMLInputElement).value.toLowerCase();\n this._filteredOptions.set(\n this._options.filter(\n (opt) => opt.value.toLowerCase().includes(value) || opt.isSticky === true,\n ),\n );\n }\n\n onToggleOption(option: Option) {\n if (this.asButton) {\n this.setSelected([option.id || option.value]);\n return;\n }\n\n // Handle manual input option\n if (option.shouldManualInput) {\n const key = this.getManualKey(option);\n const prefix = option.manualPrefix || '';\n const typed = (this.manualInputValues[key] || '').trim();\n const isSelected = this.isOptionSelected(option);\n\n if (isSelected) {\n // Deselect current manual value\n if (this.multiselect) {\n let next: string[];\n if (prefix) {\n next = this._selectedOptionIds.filter((id) => !id.startsWith(prefix));\n } else {\n next = this._selectedOptionIds.filter((id) => id !== typed);\n }\n this.setSelected(next);\n } else {\n this.setSelected([]);\n }\n // Clear input text when deselected\n this.manualInputValues[key] = '';\n // Hide input\n this.activeManualKey = null;\n } else {\n // open manual input and handle selection based on mode\n this.activeManualKey = key;\n \n // In single select mode, clear existing selections first\n if (!this.multiselect) {\n const sentinel = option.id || option.value;\n this.setSelected([sentinel]);\n }\n \n // ensure there is an entry in manualInputValues\n if (this.manualInputValues[key] === undefined) {\n this.manualInputValues[key] = '';\n }\n // focus input on next tick\n setTimeout(() => {\n const selector = `input[data-manual-key=\"${key}\"]`;\n const el = document.querySelector(selector) as HTMLInputElement | null;\n el?.focus();\n el?.select();\n });\n }\n return;\n }\n\n // Non-manual options\n if (this.multiselect) {\n const id = option.id || option.value;\n if (option.isExclusive) {\n if (this._selectedOptionIds.includes(id)) {\n this.setSelected([]);\n } else {\n this.setSelected([id]);\n }\n } else {\n // remove any exclusive selections\n let next = this._selectedOptionIds.filter((selectedId) => !this.isIdExclusive(selectedId));\n if (!next.includes(id)) {\n next = [id, ...next];\n } else {\n next = next.filter((x) => x !== id);\n }\n this.setSelected(next);\n }\n } else {\n const id = option.id || option.value;\n if (this.atLeastOne) {\n this.setSelected([id]);\n } else {\n if (this._selectedOptionIds.includes(id)) {\n this.setSelected([]);\n } else {\n this.setSelected([id]);\n }\n }\n }\n }\n\n isOptionSelected(option: Option): boolean {\n const id = option.id || option.value;\n if (option.shouldManualInput) {\n const key = this.getManualKey(option);\n const prefix = option.manualPrefix;\n \n // Check if this manual input option is currently active\n const isActive = this.activeManualKey === key;\n \n if (prefix) {\n // selected if there exists a value with more than prefix, OR if it's currently active\n const hasValueWithPrefix = this._selectedOptionIds.some((selectedId) =>\n typeof selectedId === 'string' && selectedId.startsWith(prefix) && selectedId.length > prefix.length,\n );\n return hasValueWithPrefix || isActive;\n }\n // no prefix: consider selected if any selected id equals current typed value (non-empty) OR if it's active\n const typed = (this.manualInputValues[key] || '').trim();\n const hasTypedValue = typed !== '' && this._selectedOptionIds.includes(typed);\n return hasTypedValue || isActive;\n }\n return this._selectedOptionIds.includes(id);\n }\n\n private isIdExclusive(id: string): boolean {\n for (const o of this._options) {\n if (!o.isExclusive) continue;\n const refId = o.id || o.value;\n if (refId === id) return true;\n if (o.shouldManualInput && o.manualPrefix && id?.startsWith(o.manualPrefix)) {\n return true;\n }\n }\n return false;\n }\n\n private getManualKey(option: Option): string {\n return option.manualPrefix || (option.id || option.value);\n }\n\n private seedManualInputs(): void {\n const manualOptions = this._options.filter((o) => o.shouldManualInput);\n for (const opt of manualOptions) {\n const prefix = opt.manualPrefix || '';\n const key = this.getManualKey(opt);\n const existingWithPrefix = this._selectedOptionIds.find((id) =>\n prefix ? id?.startsWith(prefix) : false,\n );\n const value = existingWithPrefix\n ? existingWithPrefix.substring(prefix.length)\n : '';\n this.manualInputValues[key] = value;\n }\n }\n\n onManualInputChange(option: Option, value: string) {\n const key = this.getManualKey(option);\n this.manualInputValues[key] = value;\n // Dynamically reflect selection as user types\n const prefix = option.manualPrefix || '';\n const sentinel = option.id || option.value;\n const trimmed = (value || '').trim();\n\n if (this.multiselect) {\n if (option.isExclusive) {\n if (trimmed === '') {\n // Keep the sentinel selected to maintain the manual input option as \"active\"\n this.setSelected([sentinel]);\n } else {\n this.setSelected([`${prefix}${trimmed}`]);\n }\n } else {\n let next = this._selectedOptionIds.filter((id) => !this.isIdExclusive(id));\n // remove same prefix or sentinel\n next = next.filter((id) => (prefix ? !id.startsWith(prefix) : id !== sentinel));\n if (trimmed !== '') {\n const toAdd = `${prefix}${trimmed}`;\n if (!next.includes(toAdd)) {\n next = [toAdd, ...next];\n }\n } else {\n // Keep the sentinel to maintain selection state when text is empty\n if (!next.includes(sentinel)) {\n next = [sentinel, ...next];\n }\n }\n this.setSelected(next);\n }\n } else {\n // single select\n if (trimmed === '') {\n // Keep the sentinel selected to maintain the manual input option as \"active\"\n this.setSelected([sentinel]);\n } else {\n this.setSelected([`${prefix}${trimmed}`]);\n }\n }\n }\n\n onManualInputConfirm(option: Option) {\n const key = this.getManualKey(option);\n const raw = (this.manualInputValues[key] || '').trim();\n // Use same logic as onManualInputChange\n this.onManualInputChange(option, raw);\n \n // Close dropdown in single select mode after confirming input\n if (!this.multiselect) {\n this.closeDropdown.emit();\n }\n }\n\n onManualInputBlur(option: Option) {\n const key = this.getManualKey(option);\n const raw = (this.manualInputValues[key] || '').trim();\n if (raw === '') {\n // hide input on blur when empty\n this.activeManualKey = null;\n \n // Also deselect the manual input option completely\n const prefix = option.manualPrefix || '';\n const sentinel = option.id || option.value;\n \n if (this.multiselect) {\n let next = [...this._selectedOptionIds];\n // Remove sentinel and any values with the prefix\n next = next.filter((id) => {\n if (id === sentinel) return false;\n if (prefix && id.startsWith(prefix)) return false;\n return true;\n });\n this.setSelected(next);\n } else {\n // Single select: deselect completely\n this.setSelected([]);\n }\n }\n }\n\n private emitSelectedChange(): void {\n const payload = [...this._selectedOptionIds];\n setTimeout(() => this.selectedChange.emit(payload));\n }\n\n private setSelected(next: string[]): void {\n const sanitized = next.filter((id) => id != null);\n setTimeout(() => {\n this._selectedOptionIds = sanitized;\n this.emitSelectedChange();\n });\n }\n\n\n}\n","<div id=\"dropdown\"\n class=\"max-w-full mt-2 absolute z-40 bg-light-background dark:bg-dark-background text-light-on-background dark:text-dark-on-background border border-light-inactive dark:border-dark-inactive rounded max-h-60 flex flex-col gap-2\">\n @if (useFilter && _options.length >= 5) {\n <input #inputFilter\n id=\"inputFilter\"\n type=\"text\"\n [placeholder]=\"'haloduck.ui.select.Keyword...' | transloco\"\n (input)=\"onFilterInput($event)\"\n class=\"text-light-inactive dark:text-dark-inactive rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary px-3 py-1.5 text-sm/6 bg-light-control dark:bg-dark-control m-2\" />\n }\n <div class=\"overflow-y-auto\">\n @for ( option of _filteredOptions(); track (option.id) ? option.id : option.value) {\n <div class=\"px-3 py-2 text-sm/6 hover:bg-light-secondary/60 dark:hover:bg-dark-secondary/60 flex items-center justify-start whitespace-nowrap\"\n [class.cursor-pointer]=\"!option.shouldManualInput\"\n (click)=\"onToggleOption(option)\">\n @if(!asButton) {\n @if( isOptionSelected(option)) {\n <svg class=\"w-4 h-4 text-light-primary dark:text-dark-primary inline-block mr-2\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 00-1.414 0L8 12.586 4.707 9.293a1 1 0 00-1.414 1.414l4 4a1 1 0 001.414 0l8-8a1 1 0 000-1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <div class=\"w-4 h-4 inline-block mr-2\"></div>\n }\n }\n @if(option.shouldManualInput && (isOptionSelected(option) || (activeManualKey === (option.manualPrefix ? option.manualPrefix : (option.id || option.value))))) {\n <input type=\"text\"\n [(ngModel)]=\"manualInputValues[option.manualPrefix ? option.manualPrefix : (option.id || option.value)]\"\n [attr.data-manual-key]=\"option.manualPrefix ? option.manualPrefix : (option.id || option.value)\"\n (ngModelChange)=\"onManualInputChange(option, $event)\"\n (click)=\"$event.stopPropagation()\"\n (blur)=\"onManualInputBlur(option)\"\n (keydown.enter)=\"onManualInputConfirm(option)\"\n class=\"text-light-on-control dark:text-dark-on-control rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary px-2 py-1 text-sm/6 bg-light-control dark:bg-dark-control w-full\" />\n } @else {\n {{ option.value }}\n }\n </div>\n }\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n Output,\n signal,\n ViewChild,\n ChangeDetectorRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope, TranslocoService } from '@jsverse/transloco';\nimport { Option } from './select-dropdown/select-dropdown.component';\nimport { CommonModule } from '@angular/common';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\nimport { SelectDropdownComponent } from './select-dropdown/select-dropdown.component';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\n@Component({\n selector: 'haloduck-select',\n imports: [CommonModule],\n templateUrl: './select.component.html',\n styleUrl: './select.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class SelectComponent implements ControlValueAccessor, AfterViewInit, OnChanges {\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private overlayRef: OverlayRef | null = null;\n\n @Output() selectedChange = new EventEmitter<string[] | string>();\n @Input() disabled: boolean | null = false;\n @Input() loading: boolean = false;\n @Input() variant: 'primary' | 'secondary' | 'danger' | 'none' = 'none';\n @Input() asButton: boolean = false;\n @Input() useIcon: boolean = false;\n @Input() useFilter: boolean = false;\n @Input() multiselect: boolean = true;\n @Input() placeholder: string = '';\n @Input() atLeastOne: boolean = false;\n @Input() showAll: boolean = false;\n @Input() options: Option[] | null = null;\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() labelWidth: string = '';\n @Input() set value(value: string[] | string) {\n this.writeValue(value);\n this.onChange(this.getSelectedValue());\n }\n get value(): string | string[] | null {\n if (this.multiselect) {\n return this.selectedOptionIds;\n } else {\n if (this.selectedOptionIds.length === 0) {\n return null;\n }\n return this.selectedOptionIds[0];\n }\n }\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n @ViewChild('label') label!: ElementRef;\n\n isDropdownOpen = signal(false);\n\n selectedOptionIds: string[] = [];\n displayedSelectedOptions: Option[] = [];\n private selectedIdToDisplayOption: Record<string, Option> = {};\n\n onClick(event: MouseEvent) {\n if (this.disabled) {\n return;\n }\n\n const originWidth = this.origin?.nativeElement?.offsetWidth || 0;\n\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n minWidth: originWidth,\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n });\n }\n\n if (!this.overlayRef.hasAttached()) {\n const portal = new ComponentPortal(\n SelectDropdownComponent,\n this.viewContainerRef,\n );\n const componentRef: ComponentRef<SelectDropdownComponent> =\n this.overlayRef.attach(portal);\n componentRef.instance.options = this.options;\n componentRef.instance.selectedOptionIds = this.selectedOptionIds;\n componentRef.instance.useFilter = this.useFilter;\n componentRef.instance.multiselect = this.multiselect;\n componentRef.instance.atLeastOne = this.atLeastOne;\n componentRef.instance.asButton = this.asButton;\n\n componentRef.instance.selectedChange.subscribe((selectedOptionIds) => {\n const payload = Array.isArray(selectedOptionIds)\n ? [...selectedOptionIds]\n : selectedOptionIds;\n setTimeout(() => {\n this.selectedOptionIds = payload as string[];\n this.recomputeSelectedOptions();\n this.onChange(this.getSelectedValue());\n this.selectedChange.emit(payload);\n this.cdr.markForCheck();\n\n // Keep dropdown open if a manual-input option is selected (to allow typing)\n const shouldKeepOpenForManual = this.isManualSelection(this.selectedOptionIds);\n if (!this.multiselect && !shouldKeepOpenForManual) {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n }\n });\n });\n\n componentRef.instance.closeDropdown.subscribe(() => {\n this.isDropdownOpen.set(false);\n this.overlayRef?.detach();\n });\n\n this.isDropdownOpen.set(true);\n } else {\n this.isDropdownOpen.set(false);\n this.overlayRef.detach();\n }\n }\n\n onKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n return;\n }\n\n if (event.key === 'Enter') {\n }\n }\n\n onDeselectOption(event: Event, option: Option) {\n if (this.disabled) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n this.selectedOptionIds = this.selectedOptionIds.filter(\n (selected) => selected !== (option.id || option.value),\n );\n this.recomputeSelectedOptions();\n this.onChange(this.getSelectedValue());\n this.selectedChange.emit(this.selectedOptionIds);\n\n this.isDropdownOpen.set(false);\n }\n\n getSelectedValue(): string | string[] | null {\n if (!this.multiselect) {\n if (this.selectedOptionIds.length > 0) {\n return this.selectedOptionIds[0];\n } else {\n return null;\n }\n } else {\n return this.selectedOptionIds;\n }\n }\n\n onChange = (_value: any) => {};\n onTouched = () => {};\n\n writeValue(value: string[] | string): void {\n if (Array.isArray(value)) {\n this.selectedOptionIds = value.filter(id => id !== null && id !== undefined && id !== '');\n } else {\n this.selectedOptionIds = (value !== null && value !== undefined && value !== '') ? [value] : [];\n }\n this.recomputeSelectedOptions();\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.select.Select...', {}, 'haloduck')\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options']) {\n this.recomputeSelectedOptions();\n }\n }\n\n private recomputeSelectedOptions(): void {\n const options = this.options || [];\n const result: Option[] = [];\n const nextMap: Record<string, Option> = {};\n\n const selectedIds = [...this.selectedOptionIds];\n const consumed = new Set<string>();\n\n const resolveDisplayForId = (selectedId: string): Option => {\n // 1) exact match by id or value\n const exact = options.find((opt) => (opt.id || opt.value) === selectedId);\n if (exact) {\n return exact;\n }\n // 2) manual prefix match → create synthetic option for display\n const manual = options.find((opt) => {\n if (!opt.shouldManualInput) return false;\n if (opt.manualPrefix) {\n return selectedId.startsWith(opt.manualPrefix);\n }\n // when no prefix, match by sentinel id/value\n return (opt.id || opt.value) === selectedId;\n });\n if (manual) {\n const cached = this.selectedIdToDisplayOption[selectedId];\n return cached || { ...manual, id: selectedId, value: selectedId };\n }\n // 3) fallback when options array is missing the corresponding option definition\n const cached = this.selectedIdToDisplayOption[selectedId];\n return cached || { id: selectedId, value: selectedId };\n };\n\n if (this.multiselect) {\n // Order by options sequence first\n for (const opt of options) {\n if (opt.shouldManualInput) {\n const manualId = opt.manualPrefix\n ? selectedIds.find((id) => id.startsWith(opt.manualPrefix as string))\n : selectedIds.find((id) => id === (opt.id || opt.value));\n if (manualId) {\n const display = resolveDisplayForId(manualId);\n result.push(display);\n nextMap[manualId] = display;\n consumed.add(manualId);\n }\n } else {\n const id = opt.id || opt.value;\n if (selectedIds.includes(id)) {\n const display = resolveDisplayForId(id);\n result.push(display);\n nextMap[id] = display;\n consumed.add(id);\n }\n }\n }\n // Append any remaining selected ids in their existing order\n for (const selectedId of selectedIds) {\n if (consumed.has(selectedId)) continue;\n const display = resolveDisplayForId(selectedId);\n result.push(display);\n nextMap[selectedId] = display;\n }\n } else {\n // Single select: keep as-is (only one item), but still resolve display\n for (const selectedId of selectedIds) {\n const display = resolveDisplayForId(selectedId);\n result.push(display);\n nextMap[selectedId] = display;\n }\n }\n\n this.displayedSelectedOptions = result;\n this.selectedIdToDisplayOption = nextMap;\n }\n\n private isManualSelection(selectedIds: string[]): boolean {\n const options = this.options || [];\n for (const id of selectedIds) {\n const manual = options.find((opt) => opt.shouldManualInput);\n if (!manual) continue;\n if (manual.manualPrefix) {\n if (id.startsWith(manual.manualPrefix)) return true;\n // allow initial sentinel selection to keep open\n if ((manual.id || manual.value) === id) return true;\n } else {\n if ((manual.id || manual.value) === id) return true;\n }\n }\n return false;\n }\n}\n","<div class=\"flex gap-2 items-center w-full\"\n [ngClass]=\"{'flex-col items-start': layout === 'vertical'}\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control {{ labelWidth }}\"\n [ngClass]=\"{'w-full': layout === 'vertical'}\">\n <!-- <ng-content select=\"[slot=label]\"></ng-content> -->\n <ng-content></ng-content>\n </label>\n <div #origin\n class=\"w-full flex-1 relative overflow-visible rounded-md outline outline-light-inactive dark:outline-dark-inactive text-sm/6\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary focus:dark:outline-dark-primary': !disabled,\n 'bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary' : variant === 'primary' && !disabled,\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary' : variant === 'secondary' && !disabled,\n 'bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger' : variant === 'danger' && !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\">\n <div class=\"px-3 py-1.5 text-sm/6 cursor-pointer flex flex-nowrap items-center justify-between overflow-hidden\">\n @if(loading){\n <div class=\"flex-1 flex items-center gap-2 w-full h-3\">\n <div class=\"animate-pulse bg-light-inactive dark:bg-dark-inactive rounded-md h-5 w-full\"> </div>\n </div>\n }\n @else{\n <div class=\"flex-1\">\n @if (!asButton && displayedSelectedOptions && displayedSelectedOptions.length > 0) {\n @if (multiselect) {\n <div class=\"flex flex-wrap gap-x-2 gap-y-1 items-start\">\n @for (option of displayedSelectedOptions; track option; let i = $index) {\n @if (showAll || i === 0) {\n <span class=\"bg-light-secondary dark:bg-dark-secondary rounded-md flex items-center text-xs/6 text-light-on-secondary dark:text-dark-on-secondary\"\n [ngClass]=\"{'w-full h-full px-4': !multiselect, 'px-1': multiselect}\">\n {{ option.value }}\n @if (showAll || i === 0) {\n <div (click)=\"onDeselectOption($event, option)\"\n class=\"ml-2 text-light-danger dark:text-dark-danger hover:cursor-pointer\">\n <svg class=\"w-3 h-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M10 8.586l-2.293-2.293a1 1 0 00-1.414 1.414L8.586 10l-2.293 2.293a1 1 0 001.414 1.414L10 11.414l2.293 2.293a1 1 0 001.414-1.414L11.414 10l2.293-2.293a1 1 0 00-1.414-1.414L10 8.586z\"\n clip-rule=\"evenodd\" />\n </svg>\n </div>\n }\n </span>\n @if (!showAll && displayedSelectedOptions.length > 1) {\n <span class=\"text-light-on-control/80 dark:text-dark-on-control/80 text-xs/6\">\n +{{ displayedSelectedOptions.length - 1 }}\n </span>\n }\n }\n }\n </div>\n } @else {\n <span class=\"text-light-on-control dark:text-dark-on-control overflow-hidden overflow-ellipsis\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary dark:text-dark-on-primary': variant === 'primary' && !disabled,\n 'text-light-on-secondary dark:text-dark-on-secondary': variant === 'secondary' && !disabled,\n 'text-light-on-danger dark:text-dark-on-danger': variant === 'danger' && !disabled,\n }\">{{ displayedSelectedOptions[0].value }}</span>\n }\n } @else {\n <span class=\"text-light-inactive dark:text-dark-inactive overflow-hidden overflow-ellipsis\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary/80 dark:text-dark-on-primary/80': variant === 'primary' && !disabled,\n 'text-light-on-secondary/80 dark:text-dark-on-secondary/80': variant === 'secondary' && !disabled,\n 'text-light-on-danger/80 dark:text-dark-on-danger/80': variant === 'danger' && !disabled,\n }\">\n @if (useIcon) {\n <ng-content select=\"buttonIcon\"></ng-content>\n } @else {\n {{ placeholder }}\n }\n </span>\n }\n </div>\n }\n <div class=\"text-light-on-control dark:text-dark-on-control\"\n [ngClass]=\"{\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n 'text-light-on-primary/80 dark:text-dark-on-primary/80': variant === 'primary' && !disabled,\n 'text-light-on-secondary/80 dark:text-dark-on-secondary/80': variant === 'secondary' && !disabled,\n 'text-light-on-danger/80 dark:text-dark-on-danger/80': variant === 'danger' && !disabled,\n }\">\n @if (isDropdownOpen()) {\n <svg class=\"w-4 h-4 ml-2 inline-block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n } @else {\n <svg class=\"w-4 h-4 ml-2 inline-block\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\"\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 011.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clip-rule=\"evenodd\" />\n </svg>\n }\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { SelectComponent } from '../select/select.component';\nimport { Option } from '../select/select-dropdown/select-dropdown.component';\nimport { FormsModule } from '@angular/forms';\nimport {\n provideTranslocoScope,\n TranslocoModule,\n TranslocoService,\n} from '@jsverse/transloco';\nimport { zip } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface DateRange {\n from: string;\n to: string;\n}\n\nexport interface DateRangeDropdown {\n currentYear: number;\n currentMonth: number;\n from?: string;\n listCalendarDate: CalendarDate[];\n}\n\nexport interface CalendarDate {\n datetime: string;\n date: string;\n isToday: boolean;\n isTheDate: boolean;\n isCurrentMonth: boolean;\n}\n\n@Component({\n selector: 'haloduck-calendar',\n imports: [CommonModule, SelectComponent, FormsModule, TranslocoModule],\n templateUrl: './calendar.component.html',\n styleUrl: './calendar.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class CalendarComponent implements OnInit {\n private readonly translateService = inject(TranslocoService);\n @ViewChild('monthSelect', { static: false })\n monthSelect!: SelectComponent;\n @Input() singleDate: boolean = false;\n @Input() firstDayOfWeek: number = 1; // monday\n @Input() selectedDate?: string;\n @Input() selectedDateRange?: DateRange;\n @Output() dateChange = new EventEmitter<CalendarDate>();\n @Output() dateRangeChange = new EventEmitter<DateRange>();\n currentYear: number = new Date().getFullYear();\n currentMonth: number = new Date().getMonth();\n listCalendarDate: CalendarDate[] = [];\n isFromSelected: boolean = false;\n\n yearList: Option[] = [];\n monthList: Option[] = [];\n\n onAdjustYear(amount: number) {\n this.currentYear += amount;\n this.calculateDateRangeDropdown();\n }\n\n onAdjustMonth(amount: number) {\n this.currentMonth += amount;\n\n if (this.currentMonth < 0) {\n this.currentYear--;\n this.currentMonth = 11;\n } else if (this.currentMonth > 11) {\n this.currentYear++;\n this.currentMonth = 0;\n }\n\n this.calculateDateRangeDropdown();\n }\n\n onSelectCalendarDate(date: CalendarDate) {\n if (this.singleDate) {\n this.dateChange.emit(date);\n } else {\n if (!this.isFromSelected) {\n this.selectedDateRange = {\n from: date.datetime,\n to: date.datetime,\n };\n this.isFromSelected = true;\n } else {\n if (this.selectedDateRange?.from) {\n const from =\n this.selectedDateRange.from < date.datetime\n ? this.selectedDateRange.from\n : date.datetime;\n const to =\n this.selectedDateRange.from < date.datetime\n ? date.datetime\n : this.selectedDateRange.from;\n\n this.dateRangeChange.emit({\n from,\n to,\n });\n\n this.isFromSelected = false;\n }\n }\n }\n }\n\n onCalenderOpen(value: string | DateRange) {\n // const currentDate = (this.singleDate) ? () : ( value && value.from && value.to ? value.from :dateToString(new Date()));\n let currentDate: string;\n if (this.singleDate) {\n const date = value as string;\n currentDate = date ? date : dateToString(new Date());\n } else {\n const dateRange = value as DateRange;\n currentDate =\n dateRange && dateRange.from && dateRange.to\n ? dateRange.from\n : dateToString(new Date());\n }\n\n this.currentYear = parseInt(currentDate.slice(0, 4), 10);\n this.currentMonth = parseInt(currentDate.slice(5, 7), 10) - 1;\n\n this.calculateDateRangeDropdown();\n }\n\n calculateDateRangeDropdown() {\n const weekdayOfFirstOfMonth = new Date(\n this.currentYear,\n this.currentMonth,\n 1\n ).getDay();\n const firstOfCalendar = new Date(\n this.currentYear,\n this.currentMonth,\n 1 - weekdayOfFirstOfMonth + this.firstDayOfWeek\n );\n if (firstOfCalendar > new Date(this.currentYear, this.currentMonth, 1)) {\n firstOfCalendar.setDate(firstOfCalendar.getDate() - 7);\n }\n const lastOfCalendar = new Date(firstOfCalendar);\n lastOfCalendar.setDate(lastOfCalendar.getDate() + 41);\n if (lastOfCalendar.getDate() > 6) {\n lastOfCalendar.setDate(lastOfCalendar.getDate() - 7);\n }\n const dateDiff =\n Math.ceil(\n (lastOfCalendar.getTime() - firstOfCalendar.getTime()) /\n (1000 * 60 * 60 * 24)\n ) + 1;\n\n this.listCalendarDate = [];\n\n for (let i = 0; i < dateDiff; i++) {\n const datetime = dateToString(firstOfCalendar);\n const date = firstOfCalendar.getDate().toString();\n const isToday =\n firstOfCalendar.toDateString() === new Date().toDateString();\n const isCurrentMonth = firstOfCalendar.getMonth() === this.currentMonth;\n const isTheDate =\n (this.singleDate && this.selectedDate\n ? datetime === this.selectedDate\n : this.selectedDateRange &&\n this.selectedDateRange.from &&\n this.selectedDateRange.to &&\n datetime >= this.selectedDateRange.from &&\n datetime <= this.selectedDateRange.to) || false;\n\n this.listCalendarDate.push({\n datetime,\n date,\n isToday,\n isTheDate,\n isCurrentMonth,\n });\n\n firstOfCalendar.setDate(firstOfCalendar.getDate() + 1);\n }\n }\n\n onSelectYear(year: string | string[]) {\n year = year as string;\n this.currentYear = parseInt(year, 10);\n this.calculateDateRangeDropdown();\n }\n\n onSelectMonth(month: string | string[]) {\n month = month as string;\n this.currentMonth = parseInt(month, 10);\n this.calculateDateRangeDropdown();\n }\n\n ngOnInit(): void {\n if (this.singleDate) {\n this.onCalenderOpen(this.selectedDate ?? dateToString(new Date()));\n } else {\n this.onCalenderOpen(\n this.selectedDateRange ?? {\n from: dateToString(new Date()),\n to: dateToString(new Date()),\n }\n );\n }\n }\n\n constructor() {\n const currentYear = new Date().getFullYear();\n this.translateService\n .selectTranslate('ui.calendar._year_', { year: '_year_' }, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n this.yearList = [];\n for (let i = currentYear; i >= currentYear - 150; i--) {\n this.yearList.push({\n id: i.toString(),\n value: translation.replace('_year_', i.toString()),\n });\n }\n });\n\n zip(\n this.translateService.selectTranslate('ui.calendar.January', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.February', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.March', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.April', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.May', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.June', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.July', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.August', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.September', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.October', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.November', {}, 'haloduck'),\n this.translateService.selectTranslate('ui.calendar.December', {}, 'haloduck')\n )\n .pipe(takeUntilDestroyed())\n .subscribe((translations) => {\n this.monthList = [\n {\n id: '0',\n value: translations[0],\n },\n {\n id: '1',\n value: translations[1],\n },\n {\n id: '2',\n value: translations[2],\n },\n {\n id: '3',\n value: translations[3],\n },\n {\n id: '4',\n value: translations[4],\n },\n {\n id: '5',\n value: translations[5],\n },\n {\n id: '6',\n value: translations[6],\n },\n {\n id: '7',\n value: translations[7],\n },\n {\n id: '8',\n value: translations[8],\n },\n {\n id: '9',\n value: translations[9],\n },\n {\n id: '10',\n value: translations[10],\n },\n {\n id: '11',\n value: translations[11],\n },\n ];\n });\n }\n}\n\n// return yyyy-mm-dd\nexport function dateToString(date: Date): string {\n return (\n date.getFullYear() +\n '-' +\n (date.getMonth() + 1).toString().padStart(2, '0') +\n '-' +\n date.getDate().toString().padStart(2, '0')\n );\n}\n","<div id=\"dateRangeCalendar\"\n class=\"min-w-96 brightness-125 bg-light-background dark:bg-dark-background border border-light-inactive dark:border-dark-inactive rounded text-center p-4 flex flex-col gap-4\"\n tabindex=\"1\">\n\n <div class=\"flex items-center\">\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\"\n (click)=\"onAdjustYear(-1)\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold flex justify-center\">\n <div class=\"w-32\">\n <haloduck-select [multiselect]=\"false\"\n [atLeastOne]=\"true\"\n [options]=\"yearList\"\n [value]=\"currentYear + ''\"\n (selectedChange)=\"onSelectYear($event)\">\n </haloduck-select>\n </div>\n </div>\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\"\n (click)=\"onAdjustYear(1)\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <div class=\"flex items-center\">\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\n\"\n (click)=\"onAdjustMonth(-1)\">\n <span class=\"sr-only\">이전 달</span>\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n <div class=\"flex-auto text-sm font-semibold flex justify-center\">\n <div class=\"w-32\">\n <haloduck-select [multiselect]=\"false\"\n [atLeastOne]=\"true\"\n [options]=\"monthList\"\n [value]=\"currentMonth + ''\"\n (selectedChange)=\"onSelectMonth($event)\">\n </haloduck-select>\n </div>\n </div>\n <button type=\"button\"\n class=\"-m-1.5 flex flex-none items-center justify-center p-1.5 text-light-on-background dark:text-dark-on-background hover:scale-105 hover:cursor-pointer active:scale-95\n\"\n (click)=\"onAdjustMonth(1)\">\n <span class=\"sr-only\">다음 달</span>\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n\n <div>\n <div\n class=\"grid grid-cols-7 gap-[1px] text-xs/6 font-semibold text-light-on-background dark:text-dark-on-background\">\n <div>{{ 'haloduck.ui.calendar.Mon' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Tue' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Wed' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Thu' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Fri' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Sat' | transloco }}</div>\n <div>{{ 'haloduck.ui.calendar.Sun' | transloco }}</div>\n </div>\n\n <div class=\"isolate mt-2 grid grid-cols-7 gap-[1px] rounded-lg text-sm shadow overflow-hidden\">\n @for (date of listCalendarDate; track date.datetime) {\n <button type=\"button\"\n (click)=\"onSelectCalendarDate(date)\"\n class=\"py-1.5 hover:cursor-pointer bg-light-alternative dark:bg-dark-alternative text-light-on-alternative dark:text-dark-on-alternative\"\n [ngClass]=\"{'bg-light-control dark:bg-dark-control text-light-on-control dark:text-dark-on-control' : date.isCurrentMonth}\">\n <time [ngClass]=\"{'font-semibold bg-light-primary-light dark:bg-dark-primary-light text-on-light-primary-light dark:text-dark-on-primary-light': date.isToday && date.datetime !== selectedDateRange?.from,\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary': date.datetime === selectedDateRange?.from,\n 'bg-gray-500 font-semibold text-white' : date.isTheDate}\"\n class=\"mx-auto flex size-7 items-center justify-center rounded-full hover:font-bold\">{{date.date}}</time>\n </button>\n }\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\n@Component({\n selector: 'haloduck-dialog-container',\n templateUrl: './dialog-container.component.html',\n styleUrl: './dialog-container.component.css',\n})\nexport class DialogContainerComponent implements OnInit, AfterViewInit {\n @Input() childComponent!: Type<any>;\n @Input() data: any;\n @Output() close = new EventEmitter<void>();\n @ViewChild('dialogContainer', { read: ViewContainerRef })\n dialogContainer!: ViewContainerRef;\n\n ngAfterViewInit(): void {\n if (this.childComponent) {\n const componentRef: ComponentRef<any> =\n this.dialogContainer.createComponent(this.childComponent);\n if (this.data) {\n Object.assign(componentRef.instance, { context: this.data });\n }\n\n if (this.data.classList) {\n this.data.classList.forEach((className: string) => {\n componentRef.location.nativeElement.classList.add(className);\n });\n }\n\n componentRef.location.nativeElement.classList.add('max-w-full');\n componentRef.location.nativeElement.classList.add('max-h-full');\n componentRef.location.nativeElement.classList.add('text-light-on-background');\n componentRef.location.nativeElement.classList.add('dark:text-dark-on-background');\n componentRef.location.nativeElement.classList.add('bg-light-background');\n componentRef.location.nativeElement.classList.add('dark:bg-dark-background');\n componentRef.location.nativeElement.classList.add('p-4');\n componentRef.location.nativeElement.classList.add('rounded-lg');\n componentRef.location.nativeElement.classList.add('overflow-auto');\n }\n }\n\n ngOnInit(): void {}\n\n closeDialog() {\n this.close.emit();\n }\n}\n","<div class=\"h-full w-full max-h-full max-w-full fixed inset-0 bg-black/50 flex items-center justify-center overflow-hidden\">\n <!-- <div class=\"w-full h-full max-w-full max-h-full bg-white p-5 rounded-lg overflow-y-auto\"\n (click)=\"$event.stopPropagation()\"> -->\n <ng-container id=\"dialogContainer\"\n #dialogContainer></ng-container>\n <!-- </div> -->\n</div>\n","import { Injectable, Injector, TemplateRef, Type } from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { DialogContainerComponent } from './dialog-container.component';\n\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private dialogStack: OverlayRef[] = []; // 다이얼로그 스택\n\n constructor(private overlay: Overlay, private injector: Injector) {}\n\n open<T>(component: Type<T> | TemplateRef<any>, data?: any, classList?: string[]): OverlayRef {\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n panelClass: 'custom-dialog-panel',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n const portal = new ComponentPortal(DialogContainerComponent);\n const containerRef = overlayRef.attach(portal);\n\n containerRef.instance.childComponent = component as Type<T>;\n containerRef.instance.data = { ...data, overlayRef, classList };\n containerRef.instance.close.subscribe(() => this.close(overlayRef));\n\n this.dialogStack.push(overlayRef);\n\n return overlayRef;\n }\n\n close(overlayRef?: OverlayRef): void {\n if (overlayRef) {\n overlayRef.dispose();\n this.dialogStack = this.dialogStack.filter(ref => ref !== overlayRef);\n } else {\n // 마지막 다이얼로그 닫기\n const lastOverlay = this.dialogStack.pop();\n lastOverlay?.dispose();\n }\n }\n\n closeAll(): void {\n while (this.dialogStack.length) {\n this.dialogStack.pop()?.dispose();\n }\n }\n}","import { Component, inject, Input, OnInit } from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { ButtonComponent, ButtonVariant } from '../button/button.component';\n\nexport interface Button {\n id: string;\n label: string;\n variant: ButtonVariant;\n}\n\n@Component({\n selector: 'haloduck-confirm-dialog',\n imports: [ButtonComponent],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.css',\n})\nexport class ConfirmDialogComponent implements OnInit{\n private readonly dialogService = inject(DialogService);\n @Input() context!: { title: string; message: string; buttons: Button[], clickedButton$: any, overlayRef: any };\n\n onButtonClicked(id: string) {\n this.context.clickedButton$.next(id);\n this.context.clickedButton$.complete();\n\n this.dialogService.close(this.context.overlayRef);\n }\n\n ngOnInit(): void {\n }\n\n constructor() {\n }\n}\n\n","<div class=\"w-120 max-w-full flex flex-col gap-4 text-light-on-background dark:text-dark-on-background bg-light-background dark:bg-dark-background\">\n <div class=\"font-bold\">{{ context.title }}</div>\n <p>{{ context.message }}</p>\n <div class=\"flex items-center justify-center gap-4\">\n @for (button of context.buttons; track button.id) {\n <haloduck-button [variant]=\"button.variant\"\n (click)=\"onButtonClicked(button.id)\">{{ button.label }}</haloduck-button>\n }\n </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { Button, ConfirmDialogComponent } from './confirm-dialog.component';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfirmDialogService {\n private readonly dialogService = inject(DialogService);\n private clickedButton$!: Subject<string>;\n\n public confirm(\n title: string,\n message: string,\n buttons: Button[]\n ): Observable<string> {\n this.clickedButton$ = new Subject<string>();\n\n const dialogRef = this.dialogService.open<ConfirmDialogComponent>(\n ConfirmDialogComponent,\n {\n title,\n message,\n buttons,\n clickedButton$: this.clickedButton$,\n }\n );\n\n return this.clickedButton$.asObservable();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-copy-button',\n imports: [TranslocoModule],\n templateUrl: './copy-button.component.html',\n styleUrl: './copy-button.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class CopyButtonComponent {\n @Input() text: string = '';\n isAnimating = false;\n\n copyToClipboard($event: Event) {\n $event.preventDefault();\n $event.stopPropagation();\n\n this.isAnimating = true;\n setTimeout(() => {\n this.isAnimating = false;\n }, 500); // Animation duration\n\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(this.text)\n // .then(() => {\n // console.log('Text copied to clipboard');\n // })\n // .catch((err) => {\n // console.error('Failed to copy text: ', err);\n // });\n } else {\n const textArea = document.createElement('textarea');\n textArea.value = this.text;\n textArea.style.position = 'fixed'; // Avoid scrolling to bottom\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n try {\n document.execCommand('copy');\n // console.log('Text copied to clipboard');\n } catch (err) {\n // console.error('Failed to copy text: ', err);\n }\n document.body.removeChild(textArea);\n }\n }\n}\n","<ng-container *transloco=\"let _ts; read: 'haloduck'\">\n <button type=\"button\"\n class=\"group inline-flex items-center px-2 py-1 bg-light-alternative dark:bg-dark-alternative hover:brightness-125 rounded text-xs text-light-on-alternative dark:text-dark-on-alternative hover:cursor-pointer active:scale-95 transition-transform\"\n (click)=\"copyToClipboard($event)\"\n title=\"Copy to clipboard\">\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n [class]=\"'h-4 w-4 mr-1 transition-all duration-500 ' + (isAnimating ? 'scale-150 opacity-0' : 'scale-100 opacity-100')\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <rect x=\"9\"\n y=\"9\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n fill=\"none\" />\n <rect x=\"3\"\n y=\"3\"\n width=\"13\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n fill=\"none\" />\n </svg>\n <span class=\"hidden group-hover:inline\">\n @if (isAnimating) {\n {{ _ts('ui.button.Copied') }}\n } @else {\n {{ _ts('ui.button.Copy') }}\n }\n </span>\n </button>\n</ng-container>\n","import {\n Component,\n ComponentRef,\n ElementRef,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { Subject, takeUntil } from 'rxjs';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { provideTranslocoScope, TranslocoService } from '@jsverse/transloco';\n\nimport {\n CalendarComponent,\n CalendarDate,\n} from '../calendar/calendar.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'haloduck-date-picker',\n imports: [CommonModule, FormsModule],\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class DatePickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n\n @Input() disabled: boolean = false;\n @Input() placeholder: string = '';\n @Input() firstDayOfWeek: number = 1;\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n selectedDate?: string;\n\n private overlayRef?: OverlayRef;\n\n onClick() {\n if (this.disabled) {\n return;\n }\n\n this.openCalendar();\n }\n\n onDateChange(date: CalendarDate) {\n this.selectedDate = date.datetime;\n this.onChange(this.selectedDate);\n }\n\n openCalendar() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(CalendarComponent);\n const componentRef: ComponentRef<CalendarComponent> =\n this.overlayRef.attach(calendarPortal);\n\n // Pass values directly to the CalendarComponent instance\n componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n componentRef.instance.singleDate = true;\n componentRef.instance.selectedDate = this.selectedDate;\n\n // Subscribe to events emitted by the CalendarComponent\n componentRef.instance.dateChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n this.onDateChange(date);\n this.closeCalendar();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.closeCalendar();\n });\n }\n }\n\n closeCalendar() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: string): void {\n this.selectedDate = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.calendar.Pick a date.', {}, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n }\n}\n","<label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n</label>\n<div #origin\n class=\"py-1.5 relative mt-2 gap-2 rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary': !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick()\">\n <div class=\"flex items-center\">\n <div class=\"flex-1 text-light-on-control dark:text-dark-on-control sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-inactive dark:text-dark-inactive': !selectedDate && !disabled,\n 'text-light-on-control dark:text-dark-on-control': selectedDate && !disabled,\n }\"> {{ selectedDate || placeholder }}</div>\n </div>\n</div>\n","import {\n Component,\n forwardRef,\n Input,\n OnDestroy,\n ComponentRef,\n ViewChild,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormsModule,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subject, zip, takeUntil } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n TranslocoModule,\n TranslocoService,\n provideTranslocoScope,\n} from '@jsverse/transloco';\nimport { SelectComponent } from '../select/select.component';\nimport { Option } from '../select/select-dropdown/select-dropdown.component';\nimport {\n DateRange,\n dateToString,\n CalendarComponent,\n} from '../calendar/calendar.component';\n\n@Component({\n selector: 'haloduck-date-range',\n imports: [SelectComponent, CommonModule, FormsModule, TranslocoModule],\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateRangeComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class DateRangeComponent\n implements ControlValueAccessor, OnDestroy\n{\n destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n\n @Input() dateRangeOptions: Option[] = [];\n @Input() disabled: boolean = false;\n @Input() placeholder: string = '';\n @Input() firstDayOfWeek: number = 1;\n\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n selectedDateRangeOptionId?: string;\n dateRange?: DateRange = undefined;\n\n private overlayRef?: OverlayRef;\n\n getSelectedDateRangeString(): any {\n return (\n this.dateRange &&\n this.dateRange.from &&\n this.dateRange.to &&\n this.dateRange.from + ' ~ ' + this.dateRange.to\n );\n }\n\n onClick() {\n if (this.disabled) {\n return;\n }\n\n this.openCalendar();\n }\n\n onDateRangeOptionChange(selectedOptionId: string) {\n this.selectedDateRangeOptionId = selectedOptionId;\n if (this.selectedDateRangeOptionId !== 'custom') {\n this.calculateDateRange();\n } else {\n this.openCalendar();\n }\n }\n\n onDateRangeChange(dateRange: DateRange) {\n this.dateRange = dateRange;\n this.selectedDateRangeOptionId = 'custom';\n this.onChange(this.dateRange);\n }\n\n calculateDateRange() {\n if (!this.selectedDateRangeOptionId) {\n } else if (this.selectedDateRangeOptionId !== 'custom') {\n const unit = this.selectedDateRangeOptionId.charAt(0);\n const amount = parseInt(this.selectedDateRangeOptionId.slice(1), 10);\n let from = new Date();\n let to = new Date();\n\n switch (unit) {\n case 'd':\n from = new Date(to);\n from.setDate(to.getDate() - amount);\n break;\n case 'm':\n from = new Date(to);\n from.setMonth(to.getMonth() - amount);\n break;\n case 'y':\n from = new Date(to);\n from.setFullYear(to.getFullYear() - amount);\n break;\n default:\n break;\n }\n\n this.dateRange = {\n from: dateToString(from),\n to: dateToString(to),\n };\n\n this.onChange(this.dateRange);\n }\n }\n\n getDateRangeOptionId(dateRange: DateRange): string {\n const selectedOption = this.dateRangeOptions.find((option) => {\n const unit = (option.id || option.value).charAt(0);\n const amount = parseInt((option.id || option.value).slice(1), 10);\n let from = new Date();\n let to = new Date();\n\n switch (unit) {\n case 'd':\n from = new Date(to);\n from.setDate(to.getDate() - amount);\n break;\n case 'm':\n from = new Date(to);\n from.setMonth(to.getMonth() - amount);\n break;\n case 'y':\n from = new Date(to);\n from.setFullYear(to.getFullYear() - amount);\n break;\n default:\n break;\n }\n\n return (\n dateRange.from === dateToString(from) &&\n dateRange.to === dateToString(to)\n );\n });\n\n if (selectedOption) {\n return selectedOption.id || selectedOption.value;\n }\n\n return 'custom';\n }\n\n openCalendar() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(CalendarComponent);\n const componentRef: ComponentRef<CalendarComponent> =\n this.overlayRef.attach(calendarPortal);\n\n componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n componentRef.instance.selectedDateRange = this.dateRange;\n\n // Subscribe to events emitted by the CalendarComponent\n componentRef.instance.dateRangeChange\n .pipe(takeUntil(this.destroy$))\n .subscribe((date) => {\n this.onDateRangeChange(date);\n this.closeCalendar();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.closeCalendar();\n });\n }\n }\n\n closeCalendar() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: DateRange): void {\n this.dateRange = value;\n\n if (!value) {\n this.selectedDateRangeOptionId = undefined;\n } else {\n this.selectedDateRangeOptionId = this.getDateRangeOptionId(value);\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n constructor() {\n this.translateService\n .selectTranslate('ui.calendar.Pick a period.', {}, 'haloduck')\n .pipe(takeUntilDestroyed())\n .subscribe((translation) => {\n if (!this.placeholder || this.placeholder === '') {\n this.placeholder = translation;\n }\n });\n\n zip(\n this.translateService.selectTranslate(\n 'ui.calendar.today',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.yesterday',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.2 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.3 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a week ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.15 Days ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a month ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.2 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.3 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.6 months ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.a year ago',\n {},\n 'haloduck',\n ),\n this.translateService.selectTranslate(\n 'ui.calendar.pick manually',\n {},\n 'haloduck',\n ),\n )\n .pipe(takeUntilDestroyed())\n .subscribe(\n ([\n today,\n yesterday,\n twoDaysAgo,\n threeDaysAgo,\n aWeekAgo,\n fifteenDaysAgo,\n aMonthAgo,\n twoMonthsAgo,\n threeMonthsAgo,\n sixMonthsAgo,\n aYearAgo,\n pickManually,\n ]) => {\n if (this.dateRangeOptions.length === 0) {\n this.dateRangeOptions = [\n {\n id: 'd0',\n value: today,\n },\n {\n id: 'd1',\n value: yesterday,\n },\n {\n id: 'd2',\n value: twoDaysAgo,\n },\n {\n id: 'd3',\n value: threeDaysAgo,\n },\n {\n id: 'd7',\n value: aWeekAgo,\n },\n {\n id: 'd15',\n value: fifteenDaysAgo,\n },\n {\n id: 'm1',\n value: aMonthAgo,\n },\n {\n id: 'm2',\n value: twoMonthsAgo,\n },\n {\n id: 'm3',\n value: threeMonthsAgo,\n },\n {\n id: 'm6',\n value: sixMonthsAgo,\n },\n {\n id: 'y1',\n value: aYearAgo,\n },\n {\n id: 'custom',\n value: pickManually,\n },\n ];\n }\n },\n );\n }\n}\n","<label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n</label>\n<div #origin\n class=\"relative mt-2 gap-2 rounded-md outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [ngClass]=\"{\n 'bg-light-control dark:bg-dark-control focus:outline-2 focus:outline-offset-2 focus:outline-light-primary dark:focus:outline-dark-primary': !disabled,\n 'bg-light-control/60 dark:bg-dark-control/60 text-light-on-control/60 dark:text-dark-on-control/60' : disabled,\n }\"\n [tabindex]=\"(disabled) ? -1 : 0\"\n (click)=\"onClick()\">\n <div class=\"flex items-center\">\n <haloduck-select [multiselect]=\"false\"\n [disabled]=\"disabled\"\n [options]=\"dateRangeOptions\"\n [atLeastOne]=\"true\"\n (click)=\"$event.stopPropagation()\"\n variant=\"primary\"\n placeholder=\"{{ 'haloduck.ui.calendar.Period' | transloco }}\"\n [(ngModel)]=\"selectedDateRangeOptionId\"\n (ngModelChange)=\"onDateRangeOptionChange($event)\">\n </haloduck-select>\n @if (getSelectedDateRangeString()) {\n <div class=\"flex-1 sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-on-control dark:text-dark-on-control': !disabled,\n 'text-light-on-control/60 dark:text-light-on-control/60': disabled,\n }\"> {{ getSelectedDateRangeString() }}</div>\n } @else {\n <div class=\"flex-1 sm:text-sm/6 text-center\"\n [ngClass]=\"{\n 'text-light-inactive dark:text-dark-inactive': !disabled,\n 'text-light-on-control/60 dark:text-dark-on-control/60': disabled,\n }\"> {{ placeholder }}</div>\n }\n </div>\n</div>\n","import {\n Component,\n ElementRef,\n Input,\n ViewChild,\n AfterViewInit,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ButtonComponent } from '../button/button.component';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-draw-canvas',\n templateUrl: './draw-canvas.component.html',\n styleUrl: './draw-canvas.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DrawCanvasComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n imports: [ButtonComponent, TranslocoModule],\n})\nexport class DrawCanvasComponent\n implements AfterViewInit, ControlValueAccessor\n{\n @Input() imagePath!: string;\n @Input() lineColor: string = '#DD0000'; // Default color is black\n @ViewChild('canvas', { static: true })\n canvasRef!: ElementRef<HTMLCanvasElement>;\n\n private ctx!: CanvasRenderingContext2D;\n private isDrawing = false;\n private onChange: (file: File | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n ngAfterViewInit(): void {\n const canvas = this.canvasRef.nativeElement;\n this.ctx = canvas.getContext('2d')!;\n this.ctx.strokeStyle = this.lineColor; // Set the initial line color\n this.loadImage();\n this.setupCanvas();\n }\n\n private loadImage(): void {\n const image = new Image();\n image.src = this.imagePath;\n image.onload = () => {\n this.ctx.drawImage(\n image,\n 0,\n 0,\n this.canvasRef.nativeElement.width,\n this.canvasRef.nativeElement.height,\n );\n };\n }\n\n private setupCanvas(): void {\n const canvas = this.canvasRef.nativeElement;\n\n // Mouse events\n canvas.addEventListener('mousedown', (event: MouseEvent) =>\n this.startMouseDrawing(event),\n );\n canvas.addEventListener('mousemove', (event: MouseEvent) =>\n this.mouseDraw(event),\n );\n canvas.addEventListener('mouseup', () => this.stopDrawing());\n canvas.addEventListener('mouseleave', () => this.stopDrawing());\n\n // Touch events\n canvas.addEventListener('touchstart', (event: TouchEvent) =>\n this.startTouchDrawing(event),\n );\n canvas.addEventListener('touchmove', (event: TouchEvent) => {\n event.preventDefault(); // Prevent scrolling\n this.touchDraw(event);\n });\n canvas.addEventListener('touchend', () => this.stopDrawing());\n canvas.addEventListener('touchcancel', () => this.stopDrawing());\n }\n\n private startMouseDrawing(event: MouseEvent): void {\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.isDrawing = true;\n this.ctx.beginPath();\n this.ctx.moveTo(\n event.offsetX * (this.canvasRef.nativeElement.width / rect.width),\n event.offsetY * (this.canvasRef.nativeElement.height / rect.height),\n );\n }\n\n private mouseDraw(event: MouseEvent): void {\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n if (!this.isDrawing) return;\n this.ctx.lineTo(\n event.offsetX * (this.canvasRef.nativeElement.width / rect.width),\n event.offsetY * (this.canvasRef.nativeElement.height / rect.height),\n );\n this.ctx.stroke();\n }\n\n private startTouchDrawing(event: TouchEvent): void {\n this.isDrawing = true;\n const touch = event.touches[0];\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.ctx.beginPath();\n this.ctx.moveTo(\n (touch.clientX - rect.left) *\n (this.canvasRef.nativeElement.width / rect.width),\n (touch.clientY - rect.top) *\n (this.canvasRef.nativeElement.height / rect.height),\n );\n }\n\n private touchDraw(event: TouchEvent): void {\n if (!this.isDrawing) return;\n const touch = event.touches[0];\n const rect = this.canvasRef.nativeElement.getBoundingClientRect();\n this.ctx.lineTo(\n (touch.clientX - rect.left) *\n (this.canvasRef.nativeElement.width / rect.width),\n (touch.clientY - rect.top) *\n (this.canvasRef.nativeElement.height / rect.height),\n );\n this.ctx.stroke();\n }\n\n private stopDrawing(): void {\n this.isDrawing = false;\n this.ctx.closePath();\n\n this.saveDrawing();\n }\n\n saveDrawing(): void {\n const canvas = this.canvasRef.nativeElement;\n const dataUrl = canvas.toDataURL('image/png');\n\n // Convert data URL to Blob\n const blob = this.dataURLToBlob(dataUrl);\n const file = new File([blob], 'teeth.png', { type: 'image/png' });\n\n // Emit the file value to the form control\n this.onChange(file);\n }\n\n private dataURLToBlob(dataUrl: string): Blob {\n const byteString = atob(dataUrl.split(',')[1]);\n const mimeString = dataUrl.split(',')[0].split(':')[1].split(';')[0];\n const buffer = new ArrayBuffer(byteString.length);\n const dataView = new Uint8Array(buffer);\n\n for (let i = 0; i < byteString.length; i++) {\n dataView[i] = byteString.charCodeAt(i);\n }\n\n return new Blob([buffer], { type: mimeString });\n }\n\n // ControlValueAccessor methods\n writeValue(file: File | null): void {\n // No-op: The component does not need to set the file value directly\n }\n\n registerOnChange(fn: (file: File | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n const canvas = this.canvasRef.nativeElement;\n canvas.style.pointerEvents = isDisabled ? 'none' : 'auto';\n }\n\n onReset() {\n this.loadImage();\n }\n}\n","<div class=\"draw-canvas-container flex flex-col gap-2\">\n <canvas #canvas width=\"800\" height=\"400\" class=\"max-w-full draw-canvas select-none\"></canvas>\n <haloduck-button variant=\"danger\" (click)=\"onReset()\">{{ 'haloduck.ui.draw.Clear' | transloco }}</haloduck-button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n forwardRef,\n inject,\n ChangeDetectorRef,\n NgZone,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { combineLatest, Observable, of, switchMap, tap } from 'rxjs';\n\nexport const ERROR_NOT_ACCEPTABLE_FILE_TYPE = 'NOT_ACCEPTABLE_FILE_TYPE';\nexport const ERROR_OVER_SIZE = 'OVER_SIZE';\nexport const ERROR_OVER_COUNT = 'OVER_COUNT';\nexport const ERROR_UPLOAD = 'UPLOAD';\n\nexport interface FileEx extends File {\n isUploading: boolean;\n isUploaded: boolean;\n key: string;\n name: string;\n size: number;\n type: string;\n tag: string[];\n previewUrl?: string; // Add a property for the preview URL\n}\n\n@Component({\n selector: 'haloduck-file-uploader',\n imports: [CommonModule, TranslocoModule],\n templateUrl: './file-uploader.component.html',\n styleUrls: ['./file-uploader.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileUploaderComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class FileUploaderComponent implements ControlValueAccessor {\n @Input() disabled: boolean = false;\n @Input() urlPrefix!: string;\n @Input() keyPrefix!: string;\n @Input() uploadApi!: (file: File, keyPrefix: string) => Observable<string>;\n @Input() multiple: boolean = true;\n @Input() maxCount: number = 0;\n @Input() maxSize: number = 0;\n @Input() accept: string[] = [''];\n @Output() filesAdded = new EventEmitter<FileEx[]>();\n @Output() fileRemoved = new EventEmitter<FileEx>();\n @Output() error = new EventEmitter<{ error: string; file: FileEx }[]>();\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly zone = inject(NgZone);\n\n files: FileEx[] = [];\n isUploading: boolean = false;\n isDragOver: boolean = false;\n\n private onChange: (files: FileEx[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(files: FileEx[]): void {\n this.files = files || [];\n }\n\n registerOnChange(fn: (files: FileEx[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n const selectedFiles = this.multiple\n ? Array.from(input.files)\n : [input.files[0]];\n this.addFiles(selectedFiles as FileEx[]);\n }\n this.onTouched();\n }\n\n removeFile(index: number): void {\n const removedFile = this.files[index];\n this.files.splice(index, 1);\n this.fileRemoved.emit(removedFile);\n this.onChange(this.files);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n if (event.dataTransfer?.files) {\n const droppedFiles = this.multiple\n ? Array.from(event.dataTransfer.files)\n : [event.dataTransfer.files[0]];\n this.addFiles(droppedFiles as FileEx[]);\n }\n this.onTouched();\n }\n\n getFilePreview(file: FileEx): string {\n return file.previewUrl || ''; // Return the precomputed preview URL\n }\n\n addFiles(addedFiles: FileEx[]): void {\n const notAcceptedFiles: { error: string; file: FileEx }[] = [];\n\n let filteredFiles = addedFiles.filter((file) => {\n const acceptableFileType = this.isAcceptableFileType(file);\n const acceptableFileSize =\n this.maxSize > 0 ? file.size <= this.maxSize : true;\n\n if (!acceptableFileType) {\n notAcceptedFiles.push({ error: ERROR_NOT_ACCEPTABLE_FILE_TYPE, file });\n }\n if (!acceptableFileSize) {\n notAcceptedFiles.push({ error: ERROR_OVER_SIZE, file });\n }\n\n return acceptableFileType && acceptableFileSize;\n });\n\n if (\n this.maxCount > 0 &&\n this.files.length + filteredFiles.length > this.maxCount\n ) {\n for (\n let i = this.maxCount;\n i < this.files.length + filteredFiles.length;\n i++\n ) {\n notAcceptedFiles.push({\n error: ERROR_OVER_COUNT,\n file: filteredFiles[i - this.files.length],\n });\n }\n\n filteredFiles = filteredFiles.splice(\n this.files.length + filteredFiles.length - this.maxCount,\n );\n }\n\n if (notAcceptedFiles.length > 0) {\n this.error.emit(notAcceptedFiles);\n }\n\n // Compute preview URLs for the new files\n filteredFiles.forEach((file) => {\n if (file.type.startsWith('image')) {\n file.previewUrl = URL.createObjectURL(file);\n }\n });\n\n this.files = this.files.concat(filteredFiles);\n this.filesAdded.emit(filteredFiles);\n this.onChange(this.files);\n }\n\n isAcceptableFileType(file: File): boolean {\n // Check if the file type is acceptable\n return this.accept.some((type) => {\n if (type.startsWith('.')) {\n // Check if the file type matches any of the accepted types\n return file.name.endsWith(type);\n } else if (type.includes('/')) {\n if (type.includes('/*')) {\n // Check if the file type matches the wildcard MIME type\n return file.type.startsWith(type.split('/')[0]);\n } else {\n // Check if the file type matches the specific MIME type\n return file.type === type;\n }\n } else {\n return file.type === type;\n }\n });\n }\n\n startUpload(): Observable<FileEx[]> {\n // Placeholder for upload logic\n this.isUploading = true;\n const uploadTrigger$: Observable<string>[] = [];\n\n this.files.forEach((file) => {\n file.isUploading = true;\n file.isUploaded = false;\n\n uploadTrigger$.push(\n this.uploadApi(file, this.keyPrefix).pipe(\n // Handle the upload API response\n tap((key) => {\n file.isUploading = false;\n file.isUploaded = true;\n file.key = key;\n }),\n ),\n );\n });\n\n // Wait for all uploads to complete\n return combineLatest(uploadTrigger$).pipe(\n switchMap((keys) => {\n this.files.forEach((file) => {\n if ('' === file.key) {\n this.isUploading = false;\n file.isUploaded = false;\n\n this.error.emit([{ error: ERROR_UPLOAD, file }]);\n }\n });\n\n this.onChange(this.files);\n this.onTouched();\n\n return of(this.files);\n }),\n );\n }\n}\n","<div class=\"p-4 border border-light-inactive dark:border-dark-inactive rounded-md\"\n [class.drag-over]=\"isDragOver\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n @if (!isUploading) {\n <label for=\"file-upload\"\n class=\"flex flex-col items-center justify-center w-full border-2 border-dashed border-light-inactive dark:border-dark-inactive rounded-md cursor-pointer hover:border-light-secondary dark:border-dark-secondary p-4\">\n <span class=\"text-light-inactive dark:text-dark-inactive\">{{ 'haloduck.ui.file.Drag and drop files here, or click to select files' | transloco }}</span>\n <input id=\"file-upload\"\n type=\"file\"\n class=\"hidden\"\n [attr.accept]=\"accept ? accept.join(',') : null\"\n [attr.multiple]=\"multiple ? '' : null\"\n (cancel)=\"$event.stopPropagation()\"\n (change)=\"onFileSelected($event)\" />\n </label>\n }\n <!-- Display file list -->\n @if (files.length > 0) {\n <ul class=\"mt-4 space-y-2\">\n @for (file of files; track file.name; let i = $index) {\n <li class=\"flex items-center justify-between p-2 border border-light-inactive dark:border-dark-inactive rounded-md\">\n <!-- Check if the file is an image -->\n <div class=\"flex items-center space-x-4\">\n @if (file.previewUrl){\n <img [src]=\"file.previewUrl\"\n alt=\"{{ file.name }}\"\n class=\"w-12 h-12 object-cover rounded-md\" />\n }\n <span class=\"text-sm text-light-inactive dark:text-dark-inactive\">{{ file.name }}</span>\n </div>\n @if (isUploading) {\n @if (file.isUploaded) {\n <span class=\"text-sm text-light-secondary dark:text-dark-secondary\">{{ 'haloduck.ui.file.Uploaded' | transloco }}</span>\n }@else{\n <span class=\"text-sm text-light-primary dark:text-dark-primary\">{{ 'haloduck.ui.file.Uploading...' | transloco }}</span>\n }\n }@else{\n <button type=\"button\"\n class=\"text-light-danger dark:text-dark-danger hover:brightness-125\"\n (click)=\"removeFile(i)\">\n {{ 'haloduck.ui.file.Remove' | transloco }}\n </button>\n }\n </li>\n }\n </ul>\n }\n</div>\n","import { Component, Input, signal } from '@angular/core';\n\n@Component({\n selector: 'haloduck-flip',\n imports: [],\n templateUrl: './flip.component.html',\n styleUrl: './flip.component.css',\n})\nexport class FlipComponent {\n @Input() title: string = '';\n @Input() set isOpen(value: boolean) {\n this._isOpen.set(value);\n }\n _isOpen = signal(false);\n\n toggle() {\n this._isOpen.set(!this._isOpen());\n }\n}\n","<div class=\"relative w-full shadow ring-1 ring-light-inactive/50 dark:ring-dark-inactive/80 sm:rounded-lg bg-light-alternative dark:bg-dark-alternative p-2 flex flex-col gap-2\">\n <label class=\"text-sm text-light-on-alternative dark:text-dark-on-alternative\">{{ title }}</label>\n @if(_isOpen()) {\n <ng-content></ng-content>\n }\n <button variant=\"secondary\"\n class=\"absolute rounded-md border border-inactive px-1 py-0.5 top-1 right-1 hover:cursor-pointer bg-light-inactive dark:bg-dark-inactive text-light-on-inactive dark:text-dark-on-inactive\"\n (click)=\"toggle()\">\n @if(_isOpen()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M18 15l-6-6-6 6\" />\n </svg>\n }\n @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M6 9l6 6 6-6\" />\n </svg>\n }\n </button>\n</div>\n","import { Component, inject, Input } from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\n\n@Component({\n selector: 'haloduck-image-viewer',\n imports: [],\n templateUrl: './image-viewer.component.html',\n styleUrl: './image-viewer.component.css',\n})\nexport class ImageViewerComponent {\n @Input() context: any;\n @Input() imageUrl: string = '';\n @Input() imageAlt: string = '';\n\n private readonly dialogService = inject(DialogService);\n\n onClose() {\n if (this.context?.overlayRef) {\n this.dialogService.close(this.context.overlayRef);\n }\n }\n}\n","<img class=\"max-w-full max-h-full object-cover cursor-pointer\"\n [src]=\"context?.imageUrl\"\n [alt]=\"context?.imageAlt\"\n (click)=\"onClose()\" />","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\nimport { Observable, of, switchMap } from 'rxjs';\nimport { ImageViewerComponent } from '../image-viewer/image-viewer.component';\nimport { FileEx } from '../file-uploader/file-uploader.component';\nimport { CommonModule } from '@angular/common';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n// 전역 변수로 드래그 데이터를 임시 저장\nlet draggedBase64File: string | null = null;\nlet originDrag: ImageUploaderComponent | null = null;\n\n@Component({\n selector: 'haloduck-image-uploader',\n imports: [CommonModule, TranslocoModule],\n templateUrl: './image-uploader.component.html',\n styleUrls: ['./image-uploader.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ImageUploaderComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class ImageUploaderComponent implements ControlValueAccessor, OnInit {\n @Input() disabled: boolean = false;\n @Input() id!: string;\n @Input() alt!: string;\n @Input() urlPrefix!: string;\n @Input() keyPrefix!: string;\n @Input() uploadApi!: (file: File, keyPrefix: string) => Observable<string>;\n @Input() backgroundImage!: string;\n @Input() shouldPassToSibling: boolean = false;\n @Output() passToSibling: EventEmitter<FileEx[]> = new EventEmitter<\n FileEx[]\n >();\n @Output() fileAdded = new EventEmitter<FileEx>();\n @Output() fileRemoved = new EventEmitter<FileEx>();\n @Output() error = new EventEmitter<{ error: string; file: FileEx }[]>();\n imageUrl: string | null = null;\n file: FileEx | null = null;\n isDragOver: boolean = false;\n isUploading: boolean = false;\n\n private readonly dialogService = inject(DialogService);\n\n private onChange: (url: string | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(key: string | null): void {\n if (!key) {\n this.imageUrl = null;\n return;\n }\n\n this.imageUrl = `${this.urlPrefix}/${key}`;\n this.file = null;\n }\n\n registerOnChange(fn: (url: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n startUpload(): Observable<FileEx> {\n // Placeholder for upload logic\n if (!this.file) {\n return new Observable<never>();\n }\n\n this.isUploading = true;\n this.file.isUploading = true;\n this.file.isUploaded = false;\n\n return this.uploadApi(this.file, this.keyPrefix).pipe(\n switchMap((key) => {\n if (this.file) {\n this.file.isUploading = false;\n this.file.isUploaded = true;\n this.file.key = key;\n }\n\n return of(this.file as FileEx);\n }),\n );\n }\n\n onFileSelected(event: Event) {\n const input = event.target as HTMLInputElement;\n\n if (input.files && input.files[0]) {\n const listFile: FileEx[] = Array.from(input.files) as FileEx[];\n this.setFiles(listFile);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n\n this.isDragOver = false;\n\n if (event.dataTransfer?.files && event.dataTransfer.files[0]) {\n const listFile: FileEx[] = Array.from(\n event.dataTransfer.files,\n ) as FileEx[];\n this.setFiles(listFile);\n } else if (draggedBase64File) {\n if (this.file) {\n originDrag?.setFiles([this.file]); // 타켓에 파일이 있을 경우 원래 드래그한 컴포넌트에 파일 전달\n } else {\n originDrag?.removeImage();\n }\n\n fetch(draggedBase64File)\n .then((res) => res.blob())\n .then((blob) => {\n const file = new File([blob], 'dropped-file', { type: blob.type });\n this.setFiles([file] as FileEx[]);\n });\n\n draggedBase64File = null; // 전역 변수 초기화\n }\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n this.isDragOver = false;\n }\n\n onDragStart(event: DragEvent): void {\n if (event.target instanceof HTMLImageElement) {\n const img = event.target as HTMLImageElement;\n\n if (img.id && this.file) {\n const reader = new FileReader();\n reader.onload = () => {\n const base64File = reader.result as string;\n draggedBase64File = base64File; // 전역 변수에 저장\n originDrag = this; // 드래그 시작한 컴포넌트 저장\n\n if (event.dataTransfer) {\n event.dataTransfer.setData('text/plain', 'dragged-file'); // 최소한의 데이터 설정\n }\n };\n reader.readAsDataURL(this.file);\n }\n }\n }\n\n onDragEnd(event: DragEvent): void {\n draggedBase64File = null;\n originDrag = null;\n }\n\n removeImage(): void {\n const removedFile = this.file;\n this.imageUrl = null;\n this.file = null;\n\n this.fileRemoved.emit(removedFile as FileEx);\n this.onChange(null); // Notify form control\n }\n\n setFiles(listFile: FileEx[]): void {\n listFile = listFile.filter((file) => {\n const isValid = file.type.startsWith('image/');\n if (!isValid) {\n console.error('Invalid file type:', file.type);\n }\n return isValid;\n });\n\n this.file = listFile[0];\n this.imageUrl = URL.createObjectURL(listFile[0]);\n\n if (listFile.length > 1 && this.shouldPassToSibling) {\n listFile.shift();\n this.passToSibling.emit(listFile);\n }\n\n this.fileAdded.emit(this.file);\n this.onChange(this.file.name);\n this.onTouched();\n }\n\n previewImage(imageUrl: string) {\n this.dialogService.open(ImageViewerComponent, {\n imageUrl,\n imageAlt: this.alt,\n });\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"w-full h-full flex flex-col gap-1\">\n <label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control\">\n <ng-content></ng-content>\n </label>\n <div class=\"h-full w-full p-2 border border-light-inactive dark:border-dark-inactive rounded-md\"\n [class.drag-over]=\"isDragOver\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <!-- Show image preview if available -->\n @if (imageUrl) {\n @if (!disabled) {\n <div class=\"relative\">\n <button type=\"button\"\n class=\"absolute -top-1 -right-1 bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger rounded-full px-1 text-xs\"\n (click)=\"removeImage()\">\n x\n </button>\n </div>\n }\n <img [src]=\"imageUrl\"\n [id]=\"id + '-image'\"\n [alt]=\"alt || ''\"\n class=\"w-full h-full rounded-md aspect-square\"\n [ngClass]=\"{\n 'filter grayscale': disabled,\n }\"\n (click)=\"previewImage(imageUrl)\" />\n } @else {\n <!-- Show upload area -->\n <label for=\"{{id + '-input'}}\"\n class=\"flex flex-col items-center justify-center w-full h-full border-2 border-dashed border-light-inactive dark:border-dark-inactive rounded-md\"\n [ngClass]=\"{'cursor-pointer hover:border-light-primary dark:hover:border-dark-primary': !disabled}\">\n @if (backgroundImage) {\n <img [src]=\"backgroundImage\"\n [alt]=\"alt || ''\"\n class=\"w-full h-full rounded-md aspect-square\" />\n }@else {\n <span class=\"text-light-inactive dark:text-dark-inactive text-sm p-2\">{{ 'haloduck.ui.file.Drag and drop an image here, or click to select' | transloco }}</span>\n }\n\n @if(!disabled){\n <input [id]=\"id + '-input'\"\n type=\"file\"\n class=\"hidden\"\n accept=\"image/*\"\n [multiple]=\"passToSibling\"\n (cancel)=\"$event.stopPropagation()\"\n (change)=\"onFileSelected($event)\" />\n }\n </label>\n }\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Output } from '@angular/core';\nimport { LangDefinition, TranslocoService } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-language-selector-option',\n imports: [CommonModule],\n providers: [TranslocoService],\n templateUrl: './language-selector-option.component.html',\n styleUrl: './language-selector-option.component.css',\n})\nexport class LanguageSelectorOptionComponent {\n @Output() languageSelected : EventEmitter<string> = new EventEmitter<string>();\n protected readonly translateService = inject(TranslocoService);\n\n selectLanguage(language: string | LangDefinition) {\n this.languageSelected.emit(language as string);\n }\n}\n","<div class=\"right-0 z-10 mt-2.5 origin-top-right rounded-md bg-light-background dark:bg-dark-background py-2 shadow-lg ring-1 ring-light-inactive dark:ring-dark-inactive\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby=\"user-menu-button\"\n tabindex=\"0\">\n @for (language of translateService.getAvailableLangs(); track language) {\n <a href=\"javascript:void(0)\"\n class=\"px-3 py-2 flex items-center flex-nowrap gap-2\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"language-item-{{language}}\"\n (click)=\"selectLanguage(language)\">\n <img class=\"w-6 h-6\"\n [src]=\"'i18n/icons/' + language + '.png'\">\n </a>\n }\n</div>\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n inject,\n OnInit,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { LanguageSelectorOptionComponent } from './language-selector-option/language-selector-option.component';\nimport { distinctUntilChanged, Subject, takeUntil } from 'rxjs';\nimport { TranslocoService } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-language-selector',\n imports: [],\n templateUrl: './language-selector.component.html',\n styleUrl: './language-selector.component.css',\n})\nexport class LanguageSelectorComponent implements OnInit {\n @ViewChild('origin', { static: false }) origin!: ElementRef;\n\n private readonly destroy$ = new Subject<void>();\n private readonly translateService = inject(TranslocoService);\n private readonly overlay = inject(Overlay);\n language = signal<string>(this.translateService.getActiveLang());\n private overlayRef?: OverlayRef;\n\n showLanguageOptions() {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.origin.nativeElement)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n\n const calendarPortal = new ComponentPortal(\n LanguageSelectorOptionComponent,\n );\n const componentRef: ComponentRef<LanguageSelectorOptionComponent> =\n this.overlayRef.attach(calendarPortal);\n\n // Pass values directly to the CalendarComponent instance\n // componentRef.instance.firstDayOfWeek = this.firstDayOfWeek;\n // componentRef.instance.singleDate = true;\n // componentRef.instance.selectedDate = this.selectedDate;\n\n // Subscribe to events emitted\n componentRef.instance.languageSelected\n .pipe(takeUntil(this.destroy$))\n .subscribe((language) => {\n this.translateService.setActiveLang(language);\n this.hideLanguageOptions();\n });\n\n // Handle clicks outside the overlay\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.hideLanguageOptions();\n });\n }\n }\n\n hideLanguageOptions() {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef = undefined;\n }\n }\n\n ngOnInit(): void {\n this.translateService.langChanges$\n .pipe(distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((lang) => {\n this.language.set(lang);\n });\n }\n}\n","<button #origin\n type=\"button\"\n (click)=\"showLanguageOptions()\"\n class=\"-m-1.5 flex items-center p-1.5 hover:cursor-pointer\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"max-lg:hidden flex lg:items-center\">\n <img class=\"w-6 h-6\"\n [src]=\"'i18n/icons/' + language() + '.png'\">\n </span>\n</button>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n AfterViewInit,\n Input,\n isDevMode,\n EventEmitter,\n Output,\n inject,\n OnInit,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { LngLat } from '@haloduck/core';\nimport { CoreService } from '@haloduck/core';\n\nexport declare const google: any;\n\nexport interface Location {\n plusCode: string;\n postalCode: string;\n countryCode: string;\n country: string;\n area1: string;\n area2: string;\n area3: string;\n formatted: string;\n lat: number;\n lng: number;\n}\n\n@Component({\n selector: 'haloduck-map-to-address',\n imports: [CommonModule, FormsModule],\n templateUrl: './map-to-address.component.html',\n styleUrl: './map-to-address.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: MapToAddressComponent,\n multi: true,\n },\n ],\n})\nexport class MapToAddressComponent implements OnInit, ControlValueAccessor {\n private readonly coreService = inject(CoreService);\n mapId = this.coreService.getMapId();\n defaultLngLat = this.coreService.getDefaultLngLat();\n @Input() disabled: boolean = false;\n @Input() language: string = 'en';\n @Input() currentLngLat?: LngLat;\n private _currentAddress?: string;\n private _isGoogleLoaded = false;\n private _loadError?: string;\n\n get isGoogleLoaded(): boolean {\n return this._isGoogleLoaded;\n }\n\n get loadError(): string | undefined {\n return this._loadError;\n }\n\n @Input()\n set currentAddress(value: string) {\n if (value) {\n this._currentAddress = value;\n // Google Maps API가 로드된 후에만 실행\n if (this._isGoogleLoaded) {\n this.setMapToAddress();\n }\n }\n }\n @Output() locationChanged = new EventEmitter<Location>();\n map: any;\n marker: any;\n location!: Location;\n\n private onChange: (value: Location) => void = () => {};\n private onTouched: () => void = () => {};\n\n async ngOnInit() {\n try {\n await this.initScript();\n this._isGoogleLoaded = true;\n this.initMap();\n\n // API 로드 완료 후 pending된 주소 설정 실행\n if (this._currentAddress) {\n this.setMapToAddress();\n }\n } catch (error) {\n this._loadError = 'Unable to load Google Maps API.';\n isDevMode() && console.error('Failed to load Google Maps API:', error);\n }\n }\n\n initScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof google !== 'undefined') {\n this._isGoogleLoaded = true;\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.src = `https://maps.googleapis.com/maps/api/js?key=${this.coreService.getGoogleApiKey()}&libraries=places,marker&loading=sync&language=${this.language}`;\n script.async = false;\n script.defer = true;\n script.onload = () => {\n this._isGoogleLoaded = true;\n resolve();\n };\n script.onerror = (error) => reject(error);\n document.head.appendChild(script);\n isDevMode() && console.log('Google Maps script loaded', script);\n });\n }\n\n initMap() {\n if (this.currentLngLat) {\n isDevMode() &&\n console.log('Using provided location:', this.currentLngLat);\n this.initializeMap(this.currentLngLat);\n } else {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n const currentLocation = {\n lat: position.coords.latitude,\n lng: position.coords.longitude,\n };\n isDevMode() &&\n console.log('Using current location:', currentLocation);\n this.initializeMap(currentLocation);\n },\n (error) => {\n if (error.code === error.PERMISSION_DENIED) {\n isDevMode() &&\n console.log(\n 'Location permission denied. Using default location.:',\n this.defaultLngLat,\n );\n } else if (\n error.code === error.POSITION_UNAVAILABLE ||\n error.code === error.TIMEOUT\n ) {\n isDevMode() &&\n console.log(\n 'Unable to determine location. Using default location.:',\n this.defaultLngLat,\n );\n }\n this.initializeMap(this.defaultLngLat);\n },\n );\n }\n }\n\n initializeMap(lngLat: LngLat) {\n this.map = new google.maps.Map(\n document.getElementById('map') as HTMLElement,\n {\n center: lngLat,\n zoom: 15,\n mapId: this.mapId,\n },\n );\n\n this.marker = new google.maps.marker.AdvancedMarkerElement({\n position: lngLat,\n map: this.map,\n draggable: true,\n });\n\n // Listen for marker drag end to update address immediately\n this.marker.addListener('dragend', () => {\n const position = this.marker.position;\n if (position) {\n isDevMode() && console.log('Marker dragged to:', position.toJSON());\n this.getAddress(); // Fetch address after dragging\n }\n });\n\n this.map.addListener('click', (event: any) => this.onClick(event));\n\n if (!this.currentLngLat) {\n this.getAddress();\n }\n }\n\n onClick(event: any) {\n isDevMode() && console.log('Map clicked at:', event.latLng);\n if (event.latLng) {\n // Explicitly update marker position\n this.marker.position = event.latLng;\n this.marker.map = this.map; // Ensure marker is attached to the map\n isDevMode() &&\n console.log('Marker position updated to:', event.latLng.toJSON());\n this.getAddress(); // Fetch address immediately after click\n this.onTouched(); // Mark as touched\n } else {\n isDevMode() &&\n console.error(\n 'Failed to update marker position: event.latLng is undefined',\n );\n }\n }\n\n setMapToAddress() {\n if (!this._isGoogleLoaded) {\n isDevMode() && console.warn('Google Maps API not loaded yet');\n return;\n }\n\n const geocoder = new google.maps.Geocoder();\n geocoder.geocode(\n { address: this._currentAddress },\n (results: any, status: string) => {\n if (status === 'OK' && results[0]) {\n const location = results[0].geometry.location;\n isDevMode() && console.log('Geocoded location:', location.toJSON());\n this.initializeMap(location.toJSON());\n } else {\n isDevMode() && console.error('Geocoding failed:', status);\n }\n },\n );\n }\n\n getAddress() {\n if (!this._isGoogleLoaded) {\n isDevMode() && console.warn('Google Maps API not loaded yet');\n return;\n }\n\n const geocoder = new google.maps.Geocoder();\n const position = this.marker.position;\n\n if (!position) {\n isDevMode() && console.error('Position update is unavailable');\n return;\n }\n\n geocoder.geocode({ location: position }, (results: any, status: string) => {\n isDevMode() && console.log('Geocoded results:', status, results);\n\n if (status === 'OK' && results[0]) {\n this.location = this.parseAddress(results);\n this.locationChanged.emit(this.location);\n this.onChange(this.location); // Notify the form control\n }\n });\n }\n\n parseAddress(results: any): Location {\n return {\n plusCode: this.getComponentLongName(results, 'plus_code'),\n postalCode: this.getComponentLongName(results, 'postal_code'),\n countryCode: this.getComponentShortName(results, 'country').toUpperCase(),\n country: this.getComponentLongName(results, 'country'),\n area1: this.getComponentLongName(results, 'administrative_area_level_1'),\n area2: this.getComponentLongName(results, 'sublocality_level_1'),\n area3: this.getComponentLongName(results, 'sublocality_level_2'),\n formatted: results[0]?.formatted_address,\n lat: results[0]?.geometry?.location?.lat(),\n lng: results[0]?.geometry?.location?.lng(),\n };\n }\n\n getComponentLongName(results: any[], type: string): string {\n for (let i = 0; i < results.length; i++) {\n const component = (results[i].address_components as any[]).find((c) =>\n c.types.includes(type),\n );\n if (component) {\n return component.long_name;\n }\n }\n return '';\n }\n\n getComponentShortName(results: any[], type: string): string {\n for (let i = 0; i < results.length; i++) {\n const component = (results[i].address_components as any[]).find((c) =>\n c.types.includes(type),\n );\n if (component) {\n return component.short_name;\n }\n }\n return '';\n }\n\n writeValue(value: Location): void {\n if (value) {\n this.location = value;\n this.currentLngLat = { lat: value.lat, lng: value.lng };\n // Google Maps API가 로드된 후에만 맵 초기화\n if (this._isGoogleLoaded) {\n this.initializeMap(this.currentLngLat);\n }\n }\n }\n\n registerOnChange(fn: (value: Location) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","<div class=\"w-full h-full relative\">\n <!-- 로딩 상태 -->\n @if(!isGoogleLoaded && !loadError) {\n <div class=\"absolute inset-0 flex items-center justify-center bg-gray-100 z-10\">\n <div class=\"text-center\">\n <div class=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-2\"></div>\n <p class=\"text-gray-600 text-sm\">지도를 로딩 중입니다...</p>\n </div>\n </div>\n }\n\n <!-- 에러 상태 -->\n @if(loadError) {\n <div class=\"absolute inset-0 flex items-center justify-center bg-red-50 z-10\">\n <div class=\"text-center p-4\">\n <div class=\"text-red-500 text-2xl mb-2\">⚠️</div>\n <p class=\"text-red-700 text-sm font-medium\">{{ loadError }}</p>\n <p class=\"text-red-600 text-xs mt-1\">Please check your internet connection and refresh the page.</p>\n </div>\n </div>\n }\n\n <div id=\"map\"\n class=\"w-full h-full\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Router } from '@angular/router';\nimport { MenuItemEx } from '@haloduck/core';\n\n@Component({\n selector: 'haloduck-side-menu-item',\n imports: [CommonModule],\n templateUrl: './side-menu-item.component.html',\n styleUrl: './side-menu-item.component.css'\n})\nexport class SideMenuItemComponent implements OnInit{\n private readonly router = inject(Router)\n @Input() menuItem!: MenuItemEx;\n @Input() depth = 0;\n @Input() menuItemSelectHandler?: EventEmitter<MenuItemEx>;\n\n iconSvg!: SafeHtml;\n\n constructor(private sanitizer: DomSanitizer) { }\n\n ngOnInit(): void {\n if (this.menuItem.iconType === 'svg') {\n fetch(this.menuItem.icon || '')\n .then(response => { return response.ok ? response : Promise.reject(response); })\n .then(response => response.text())\n .then(svg => this.iconSvg = this.sanitizer.bypassSecurityTrustHtml(svg));\n }\n }\n\n onMenuItemSelected(menuItem: MenuItemEx): void {\n if (this.menuItem.link) {\n this.navigateTo([this.menuItem.link]);\n }\n if (this.menuItemSelectHandler) {\n this.menuItemSelectHandler.emit(this.menuItem);\n }\n }\n\n navigateTo(link: string[]): void {\n this.router.navigate(link);\n }\n}\n","<a href=\"javascript:void(0)\"\n (click)=\"onMenuItemSelected(menuItem)\"\n class=\"flex items-center gap-2 px-4 py-2 rounded-md cursor-pointer hover:text-light-on-primary dark:hover:text-dark-on-primary hover:bg-light-primary dark:hover:bg-dark-primary hover:cursor-pointer\"\n [ngClass]=\"{\n 'font-bold text-light-on-secondary dark:bg-dark-on-secondary bg-light-secondary dark:bg-dark-secondary': menuItem.isSelected,\n }\">\n @if (menuItem.iconType === 'svg') {\n <div [innerHTML]=\"iconSvg\"></div>\n } @else {\n @if (menuItem.icon) {\n <img class=\"w-5 h-5\"\n [src]=\"menuItem.icon\"\n [alt]=\"menuItem.title\"\n [title]=\"menuItem.title\"\n [loading]=\"'lazy'\" />\n }\n }\n <span class=\"overflow-hidden text-ellipsis whitespace-nowrap\"\n title=\"{{ menuItem.title }}\"\n [ngStyle]=\"{'margin-left.px': depth ? depth * 16 : 0}\">\n {{ menuItem.title }}\n </span>\n</a>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MenuItemEx } from '@haloduck/core';\nimport { SideMenuItemComponent } from './side-menu-item/side-menu-item.component';\n\n@Component({\n selector: 'haloduck-side-menu',\n imports: [SideMenuItemComponent ],\n templateUrl: './side-menu.component.html',\n styleUrl: './side-menu.component.css'\n})\nexport class SideMenuComponent {\n @Input() menuItems: Array<MenuItemEx> = [];\n @Input() depth: number = 0;\n\n @Output() menuItemSelected = new EventEmitter<MenuItemEx>();\n}\n","<div class=\"flex flex-col text-sm text-light-on-background dark:text-dark-on-background\">\n @for (menuItem of menuItems; track menuItem.link) {\n <haloduck-side-menu-item [menuItemSelectHandler]=\"menuItemSelected\"\n [menuItem]=\"menuItem\"\n [depth]=\"depth\"></haloduck-side-menu-item>\n @if (menuItem.children && menuItem.children.length > 0) {\n <haloduck-side-menu [menuItems]=\"menuItem.children\"\n [depth]=\"depth + 1\"\n (menuItemSelected)=\"menuItemSelected.emit($event)\"></haloduck-side-menu>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n Input,\n inject,\n OnInit,\n isDevMode,\n} from '@angular/core';\nimport { DialogService } from '../../layout/dialog-container/dialog.service';\n\nimport * as THREE from 'three';\nimport { STLLoader } from 'three-stdlib';\nimport { OrbitControls } from 'three-stdlib';\nimport { ButtonComponent } from '../button/button.component';\nimport { download } from '@haloduck/util';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-stl-viewer',\n imports: [CommonModule, ButtonComponent, TranslocoModule],\n templateUrl: './stl-viewer.component.html',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class StlViewerComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() fileUrl!: string;\n @Input() filename!: string;\n @Input() context: any;\n @ViewChild('viewerContainer') containerRef!: ElementRef;\n\n private readonly dialogService = inject(DialogService);\n\n isPopup = false;\n scene!: THREE.Scene;\n camera!: THREE.PerspectiveCamera;\n renderer!: THREE.WebGLRenderer;\n loader = new STLLoader();\n controls!: OrbitControls;\n loadingPercentage = 0;\n\n showStl() {\n if (this.isPopup) {\n return;\n }\n\n this.dialogService.open(\n StlViewerComponent,\n {\n fileUrl: this.fileUrl,\n filename: this.filename,\n },\n ['w-full', 'h-full'],\n );\n }\n\n download() {\n download(this.fileUrl);\n }\n\n closeDialog() {\n this.dialogService.close(this.context.overlayRef);\n }\n\n animate = () => {\n requestAnimationFrame(this.animate);\n this.controls.update();\n this.renderer.render(this.scene, this.camera);\n };\n\n ngAfterViewInit() {\n const container = this.containerRef.nativeElement;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color(0xffffff);\n\n this.camera = new THREE.PerspectiveCamera(\n 50,\n container.clientWidth / container.clientHeight,\n 0.1,\n 1000,\n );\n this.camera.position.z = 100;\n\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.renderer.setSize(container.clientWidth, container.clientHeight);\n container.appendChild(this.renderer.domElement);\n\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.05;\n\n // Adjust lighting\n const light = new THREE.DirectionalLight(0xffffff, 1.5); // Increased intensity\n light.position.set(0, 0, 1).normalize();\n const light2 = new THREE.DirectionalLight(0xffffff, 1.5); // Increased intensity\n light2.position.set(0, 0, -1).normalize();\n const ambientLight = new THREE.AmbientLight(0xffffff, 0.5); // Added ambient light\n this.scene.add(light, light2, ambientLight);\n\n this.loader.load(\n this.fileUrl || this.context?.fileUrl,\n (geometry) => {\n // Use MeshStandardMaterial with DoubleSide to render both sides\n const material = new THREE.MeshStandardMaterial({\n color: 0xffffff,\n metalness: 0.3,\n roughness: 0.5,\n side: THREE.DoubleSide, // Render both front and back faces\n });\n const mesh = new THREE.Mesh(geometry, material);\n\n geometry.computeBoundingBox();\n const boundingBox = geometry.boundingBox;\n const center = new THREE.Vector3();\n boundingBox?.getCenter(center);\n mesh.geometry.translate(-center.x, -center.y, -center.z);\n\n this.scene.add(mesh);\n\n const size = new THREE.Vector3();\n boundingBox?.getSize(size);\n const maxDim = Math.max(size.x, size.y, size.z);\n this.camera.position.z = maxDim * 2;\n },\n (xhr) => {\n this.loadingPercentage = (xhr.loaded / xhr.total) * 100;\n isDevMode() && console.log(this.loadingPercentage + '% loaded');\n },\n (error) => {\n isDevMode() && console.error('Error loading STL:', error);\n },\n );\n\n this.animate();\n }\n\n ngOnDestroy() {\n this.renderer.dispose();\n this.controls.dispose();\n }\n\n ngOnInit(): void {\n if (this.context) {\n this.isPopup = true;\n this.fileUrl = this.context.fileUrl;\n this.filename = this.context.filename;\n }\n }\n}\n","<div class=\"relative w-full h-full flex flex-col items-end\">\n <div class=\"w-full h-full flex items-start flex-col\">\n <div #viewerContainer\n class=\"w-full h-full rounded-md\"></div>\n @if (loadingPercentage < 100)\n {\n <div\n class=\"h-2 bg-light-primary-light dark:bg-dark-primary-light\"\n [ngStyle]=\"{ 'width': loadingPercentage + '%' }\">\n </div>\n }\n</div>\n<div class=\"absolute bottom-2 right-0 flex justify-end gap-2\">\n @if (context) {\n <haloduck-button variant=\"primary\"\n (click)=\"download()\">{{ 'haloduck.ui.button.Download' | transloco }}</haloduck-button>\n <haloduck-button variant=\"danger\"\n (click)=\"closeDialog()\">{{ 'haloduck.ui.button.Close' | transloco }}</haloduck-button>\n } @else {\n <haloduck-button variant=\"primary\"\n (click)=\"download()\">{{ 'haloduck.ui.button.Download' | transloco }}</haloduck-button>\n <haloduck-button variant=\"secondary\"\n (click)=\"showStl()\">{{ 'haloduck.ui.button.View' | transloco }}</haloduck-button>\n }\n</div>\n</div>\n","import {\n Directive,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ElementRef,\n NgZone,\n inject,\n} from '@angular/core';\n\n@Directive({\n selector: '[haloduckAutoLoad]',\n standalone: true,\n})\nexport class AutoLoadDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n private observer?: IntersectionObserver;\n private isLoading = false;\n // private hasTriggeredOnce = false;\n\n @Input() autoLoadEnabled: boolean = true;\n @Input() autoLoadThreshold: number = 0.1;\n @Input() autoLoadRootMargin: string = '0px';\n @Output() autoLoadTrigger = new EventEmitter<void>();\n\n ngOnInit(): void {\n if (this.autoLoadEnabled && 'IntersectionObserver' in window) {\n this.initializeObserver();\n }\n }\n\n ngOnDestroy(): void {\n this.disconnect();\n }\n\n private initializeObserver(): void {\n this.ngZone.runOutsideAngular(() => {\n this.observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && !this.isLoading) {\n this.ngZone.run(() => {\n this.triggerLoad();\n });\n }\n });\n },\n {\n threshold: this.autoLoadThreshold,\n rootMargin: this.autoLoadRootMargin,\n }\n );\n\n this.observer.observe(this.elementRef.nativeElement);\n });\n }\n\n private triggerLoad(): void {\n if (this.isLoading || !this.autoLoadEnabled) {\n return;\n }\n\n // 첫 번째 로드는 건너뛰고, 이후부터는 보일 때마다 자동 로드\n // if (this.hasTriggeredOnce) {\n this.isLoading = true;\n this.autoLoadTrigger.emit();\n\n // 옵저버를 일시적으로 해제하여 연속 트리거 방지\n this.temporarilyDisableObserver();\n // } else {\n // this.hasTriggeredOnce = true;\n // }\n }\n\n private temporarilyDisableObserver(): void {\n if (this.observer) {\n this.observer.disconnect();\n\n // 1초 후 옵저버 재연결\n setTimeout(() => {\n if (this.autoLoadEnabled && this.observer) {\n this.isLoading = false;\n this.observer.observe(this.elementRef.nativeElement);\n }\n }, 1000);\n }\n }\n\n private disconnect(): void {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n // 외부에서 로딩 상태를 제어할 수 있는 메서드\n public setLoadingState(loading: boolean): void {\n this.isLoading = loading;\n }\n\n // 자동 로드를 재활성화하는 메서드\n public resetAutoLoad(): void {\n // this.hasTriggeredOnce = false;\n this.isLoading = false;\n }\n}\n","import { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n ViewChild,\n ElementRef,\n AfterViewInit,\n} from '@angular/core';\nimport { provideTranslocoScope, TranslocoModule } from '@jsverse/transloco';\nimport { map, Observable, of, take } from 'rxjs';\nimport { SearchParams, TableRowProperty, CoreService } from '@haloduck/core';\nimport { AutoLoadDirective } from '../../directive/auto-load.directive';\n\nexport interface TableColumn {\n key: string | string[];\n label: string;\n width?: string;\n align?: 'text-left' | 'text-center' | 'text-right';\n sortable?: boolean;\n sort?: SearchParams.Sort;\n type?: 'number' | 'date' | 'datetime' | 'time' | 'custom';\n breakpoint?: string;\n hidden?: Observable<boolean>;\n customRenderFn?: (data: any) => Observable<string>;\n customRenderTemplate?: string; // Updated to string\n}\n\nexport interface TableRow extends TableRowProperty {\n [key: string]: any;\n}\n\n@Component({\n selector: 'haloduck-table',\n imports: [CommonModule, TranslocoModule, AutoLoadDirective],\n templateUrl: './table.component.html',\n styleUrl: './table.component.css',\n providers: [provideTranslocoScope('haloduck')],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent implements OnInit, AfterViewInit {\n private readonly coreService = inject(CoreService);\n @ViewChild('loadMoreRow', { read: ElementRef }) loadMoreRowRef?: ElementRef;\n\n @Input() tableLayout: 'fixed' | 'auto' = 'auto';\n @Input() autoLoad: boolean = true;\n @Input() showHeader: boolean = true;\n @Input() useLoadMore: boolean = true;\n @Input() columns: TableColumn[] = [];\n @Input() rows: Observable<TableRow[]> = new Observable<TableRow[]>();\n @Input() isLoading: Observable<boolean> = new Observable<boolean>();\n @Input() isPaging: Observable<boolean> = new Observable<boolean>();\n @Input() sort: Observable<SearchParams.Sort[]> = new Observable<\n SearchParams.Sort[]\n >();\n @Input() expandedTemplate?: any; // TODO\n @Input() customTemplates: { [key: string]: any } = {}; // Add this line\n @Output() onSortChange = new EventEmitter<SearchParams.Sort>();\n @Input() lastEvaluatedKey: Observable<any> = new Observable<any>();\n @Output() onLoadMore = new EventEmitter<any>();\n @Output() onRowClick = new EventEmitter<TableRow>();\n @Output() onRowDblClick = new EventEmitter<TableRow>();\n\n getColumnValue(row: TableRow, column: TableColumn): Observable<string> {\n const value = this.getColumnValueRaw(row, column);\n\n if (column.customRenderFn) {\n return column.customRenderFn(value);\n }\n\n switch (column.type) {\n case 'date':\n return this.getDate(value);\n case 'datetime':\n return this.getDateTime(value);\n case 'time':\n return this.getTime(value);\n default:\n return of(value);\n }\n }\n\n getColumnValueRaw(row: TableRow, column: TableColumn): any {\n if (Array.isArray(column.key)) {\n const value = this.getColumnValueRawWithArrayKey(row, column);\n return value;\n } else {\n return row[column.key];\n }\n }\n\n getColumnValueRawWithArrayKey(row: TableRow, column: TableColumn): any {\n let value: any = row;\n let invalidKey = false;\n\n for (const key of column.key as string[]) {\n if (Array.isArray(column.key) && column.key.length > 1) {\n const [first, ...remainingKeys] = column.key as string[];\n return this.getColumnValueRawWithArrayKey(value[first], {\n ...column,\n key: remainingKeys,\n });\n } else {\n if (invalidKey || value[key] === undefined) {\n invalidKey = true;\n break;\n }\n value = value[key];\n }\n }\n\n if (invalidKey) {\n value = '-';\n }\n return value;\n }\n\n getNumber(data: any): Observable<string> {\n const numberPipe = new DecimalPipe('en-US');\n return of(numberPipe.transform(data) || '');\n }\n\n getDate(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(datePipe.transform(data, 'shortDate') || '');\n }\n\n getDateTime(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(\n datePipe.transform(data, this.coreService.getDateFormatLong()) || '',\n );\n }\n\n getTime(data: any): Observable<string> {\n const datePipe = new DatePipe('en-US');\n return of(datePipe.transform(data, 'Time') || '');\n }\n\n onUpdateSort(\n field: string | string[],\n direction: SearchParams.SortDirection,\n ): void {\n this.onSortChange.emit({ field, direction });\n }\n\n getSortDirection(field: string | string[]): Observable<string | undefined> {\n return this.sort.pipe(\n map((sort) => {\n const sortField = sort.find((s) => s.field === field);\n return sortField?.direction;\n }),\n );\n }\n\n onLoadMoreClicked(): void {\n this.lastEvaluatedKey.pipe(take(1)).subscribe((lastEvaluatedKey) => {\n this.onLoadMore.emit(lastEvaluatedKey);\n });\n }\n\n onAutoLoadTriggered(): void {\n if (this.autoLoad) {\n this.lastEvaluatedKey.pipe(take(1)).subscribe((lastEvaluatedKey) => {\n this.onLoadMore.emit(lastEvaluatedKey);\n });\n }\n }\n\n onRowClicked(row: TableRow) {\n this.onRowClick.emit(row);\n }\n\n onRowDblClicked(row: TableRow) {\n this.onRowDblClick.emit(row);\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit(): void {}\n\n constructor() {}\n}\n","<div class=\"w-full h-full shadow border border-light-inactive dark:border-dark-inactive rounded-lg overflow-auto\">\n <table class=\"w-full h-full\"\n [ngClass]=\"{\n 'table-fixed': tableLayout === 'fixed',\n 'table-auto': tableLayout === 'auto',\n }\">\n <colgroup>\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <col class=\"{{ column.width || '' }}\" />\n }\n }\n </colgroup>\n @if (showHeader) {\n <thead class=\"bg-light-inactive/50 dark:bg-dark-inactive/50 rounded-tl-lg rounded-tr-lg\">\n <tr>\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <th scope=\"col\"\n class=\"{{ column.align || '' }} py-3.5 pl-4 pr-3 text-sm font-semibold text-light-on-background dark:text-dark-on-background whitespace-nowrap\">\n <span class=\"group inline-flex\">\n {{ column.label }}\n @if (column.sortable) {\n @switch (getSortDirection(column.sort?.field || column.key) | async)\n {\n @case('desc') {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'asc')\"\n class=\"ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n @case('asc') {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'desc')\"\n class=\"ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M14.78 11.78a.75.75 0 0 1-1.06 0L10 8.06l-3.72 3.72a.75.75 0 1 1-1.06-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n @default {\n <span (click)=\"onUpdateSort(column.sort?.field || column.key, 'asc')\"\n class=\"invisible ml-2 flex-none rounded text-light-on-inactive dark:text-dark-on-inactive group-hover:visible group-focus:visible\">\n <svg class=\"size-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M14.78 11.78a.75.75 0 0 1-1.06 0L10 8.06l-3.72 3.72a.75.75 0 1 1-1.06-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06Z\"\n clip-rule=\"evenodd\" />\n </svg>\n </span>\n }\n }\n }\n </span>\n </th>\n }\n }\n </tr>\n </thead>\n }\n <tbody class=\"overflow-scroll\">\n @for (row of rows | async; track row['id']; let lastRow = $last) {\n <tr class=\"border-t border-light-inactive dark:border-dark-inactive {{ row.bgColor || '' }}\"\n (click)=\"onRowClicked(row)\"\n (dblclick)=\"onRowDblClicked(row)\"\n [ngClass]=\"{'rounded-b-lg': lastRow && (lastEvaluatedKey | async) === null, 'even:bg-light-alternative dark:even:bg-dark-alternative odd:bg-light-background dark:odd:bg-dark-background': !row.bgColor }\"\n [ngStyle]=\"{ 'background-color': row.bgColor || '' }\">\n @for (column of columns; track column.key) {\n @if (!column.hidden || !(column.hidden | async)) {\n <td class=\"relative overflow-visible {{ column.align || '' }} whitespace-nowrap px-3 text-sm text-light-on-background dark:text-dark-on-background\"\n [ngClass]=\"{\n 'first:rounded-bl-lg last:rounded-br-lg': lastRow && (lastEvaluatedKey | async) === null,\n 'text-wrap': row.isExpanded && column.type !== 'custom',\n 'overflow-x-hidden text-ellipsis' : !row.isExpanded && column.type !== 'custom',\n 'py-2': column.type === 'custom',\n 'py-4': column.type !== 'custom'\n }\">\n @if (column.type === 'custom') {\n @if (column.customRenderTemplate) {\n <ng-container [ngTemplateOutlet]=\"customTemplates[column.customRenderTemplate]\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"></ng-container>\n }\n }\n @else {\n {{ getColumnValue(row, column) | async }}\n }\n </td>\n }\n }\n </tr>\n\n @if (row.isExpanded && expandedTemplate) {\n <tr>\n <td [attr.colspan]=\"columns.length\">\n </td>\n </tr>\n <tr class=\"even:bg-light-alternative dark:even:bg-dark-alternative odd:bg-light-background dark:odd:bg-dark-background\">\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 pb-4 text-sm text-center\">\n <ng-container [ngTemplateOutlet]=\"expandedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n\n @if (lastRow && (lastEvaluatedKey | async) && !(isLoading | async) && useLoadMore) {\n <tr #loadMoreRow\n class=\"border-t border-light-inactive dark:border-dark-inactive bg-light-background dark:bg-dark-background\"\n haloduckAutoLoad\n [autoLoadEnabled]=\"autoLoad\"\n [autoLoadThreshold]=\"0.1\"\n (autoLoadTrigger)=\"onAutoLoadTriggered()\">\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 py-4 text-sm text-light-on-background dark:text-dark-on-background text-center h-16 bg-light-background dark:bg-dark-background rounded-bl-lg rounded-br-lg\">\n <div (click)=\"onLoadMoreClicked()\"\n class=\"cursor-pointer\">\n {{ 'haloduck.ui.table.Load More...' | transloco }}\n </div>\n </td>\n </tr>\n }\n\n } @empty {\n @if(!(isLoading | async)) {\n <tr>\n <td [attr.colspan]=\"columns.length\"\n class=\"whitespace-nowrap px-3 py-4 text-sm text-light-on-background dark:text-dark-on-background text-center h-16 bg-light-background dark:bg-dark-background rounded-bl-lg rounded-br-lg\">\n {{ 'haloduck.ui.table.No data available.' | transloco }}\n </td>\n </tr>\n }\n }\n\n @if(isLoading | async) {\n @for ( i of [0,1,2,3,4]; track i; let lastRow = $last)\n {\n <tr class=\"bg-light-background dark:bg-dark-background border-t border-light-inactive/50 dark:border-dark-inactive/50\">\n @for (column of columns; track column.key) {\n <td class=\"whitespace-nowrap py-4 pl-4 pr-3 text-sm\"\n [ngClass]=\"{'first:rounded-bl-lg last:rounded-br-lg': lastRow}\">\n <div class=\"h-4 bg-light-inactive/50 dark:bg-dark-inactive/50 rounded-md animate-pulse\"></div>\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n isDevMode,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'haloduck-toggle',\n imports: [CommonModule],\n templateUrl: './toggle.component.html',\n styleUrl: './toggle.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor, AfterViewInit {\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() value: boolean | null = false;\n @Input() disabled: boolean = false;\n @Input() nullable: boolean = false;\n @Output() toggled: EventEmitter<boolean | null> = new EventEmitter();\n @ViewChild('label') label!: ElementRef;\n\n onChange = (value: any) => {};\n onTouched = () => {};\n\n writeValue(value: any): void {\n if (!this.nullable && (value === null || value === undefined)) {\n value = false;\n }\n\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onToggle(): void {\n if (this.nullable) {\n this.value = this.value ? false : this.value === null ? true : null;\n } else {\n this.value = !this.value;\n }\n\n this.onChange(this.value);\n this.onTouched();\n\n this.toggled.emit(this.value);\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (!this.label.nativeElement.innerText.trim()) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n}\n","<div class=\"flex gap-2\"\n [ngClass]=\"{'items-center justify-start': 'horizontal' === layout, 'flex-col items-start justify-center ': 'vertical' === layout}\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n <button class=\"w-12 p-1 rounded-l-full rounded-r-full outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive focus:outline-2 focus:outline-light-primary dark:foucs:outline-dark-primary bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/60 flex hover:cursor-pointer\"\n (click)=\"onToggle()\"\n [disabled]=\"disabled\"\n [ngClass]=\"{'justify-end': true === value, 'justify-center': null === value, 'justify-start': false === value}\">\n <div class=\"shrink-0 h-[1.5rem] rounded-l-full rounded-r-full\"\n [ngClass]=\"{'bg-light-primary dark:bg-dark-primary disabled:bg-light-primary/60 dark:disabled:bg-dark-primary/60': true === value, 'bg-light-inactive dark:bg-dark-inactive disabled:bg-light-inactive/60 dark:disabled:bg-dark-inactive/60': false === value,\n 'w-[1.5rem]': true === value || false === value, 'bg-light-primary-light dark:bg-dark-primary-light disabled:bg-light-primary-light/60 dark:disabled:bg-dark-primary-light/60 w-[2.4rem]': null === value}\">\n </div>\n </button>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface TabItem {\n id?: string;\n label: string;\n component: Type<any>;\n inputs?: Record<string, any>;\n}\n\n@Component({\n selector: 'haloduck-tabs',\n imports: [CommonModule],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.css',\n})\nexport class TabsComponent implements OnChanges, AfterViewInit {\n @Input() tabs: TabItem[] = [];\n @Input() selectedIndex: number = 0;\n @Input() layout: 'horizontal' | 'vertical' = 'vertical';\n @Input() labelWidth: string = '';\n\n @Output() selectedIndexChange = new EventEmitter<number>();\n\n @ViewChild('label') label!: ElementRef;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['tabs']) {\n this.ensureSelectedInRange();\n }\n if (changes['selectedIndex']) {\n this.ensureSelectedInRange();\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no content.\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n get current(): TabItem | null {\n if (!this.tabs || this.tabs.length === 0) return null;\n const idx = Math.min(Math.max(this.selectedIndex, 0), this.tabs.length - 1);\n return this.tabs[idx];\n }\n\n select(index: number) {\n if (index < 0 || index >= this.tabs.length) return;\n this.selectedIndex = index;\n this.selectedIndexChange.emit(this.selectedIndex);\n }\n\n private ensureSelectedInRange() {\n if (!this.tabs || this.tabs.length === 0) {\n this.selectedIndex = 0;\n return;\n }\n if (this.selectedIndex < 0) this.selectedIndex = 0;\n if (this.selectedIndex > this.tabs.length - 1)\n this.selectedIndex = this.tabs.length - 1;\n }\n}\n","<div class=\"flex gap-2 items-start w-full\" [ngClass]=\"{'flex-col': layout === 'vertical'}\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control {{ labelWidth }}\" [ngClass]=\"{'w-full': layout === 'vertical'}\">\n <ng-content select=\"[slot=label]\"></ng-content>\n </label>\n\n <div class=\"flex-1 w-full\">\n <div class=\"flex items-center gap-1 border-b border-light-inactive dark:border-dark-inactive text-sm/6\">\n @for (tab of tabs; track tab; let i = $index) {\n <button type=\"button\"\n class=\"px-3 py-2 rounded-t-md\"\n [ngClass]=\"{\n 'text-light-on-control dark:text-dark-on-control': i !== selectedIndex,\n 'text-light-primary dark:text-dark-primary border-b-2 border-light-primary dark:border-dark-primary': i === selectedIndex\n }\"\n (click)=\"select(i)\">\n {{ tab.label }}\n </button>\n }\n </div>\n\n <div class=\"mt-3\">\n @if (current) {\n <ng-container *ngComponentOutlet=\"current!.component; inputs: current!.inputs || {}\"></ng-container>\n }\n </div>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-tag-input',\n imports: [CommonModule],\n templateUrl: './tag-input.component.html',\n styleUrl: './tag-input.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TagInputComponent),\n multi: true,\n },\n provideTranslocoScope('haloduck'),\n ],\n})\nexport class TagInputComponent implements ControlValueAccessor, AfterViewInit {\n @ViewChild('label') label!: ElementRef;\n @ViewChild('inputEl') inputEl!: ElementRef<HTMLInputElement>;\n\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Input() allowDuplicates: boolean = false;\n\n // Two-way binding support independent of CVA\n @Input() set value(tags: string[] | null) {\n if (Array.isArray(tags)) {\n this.tags = tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n @Output() valueChange = new EventEmitter<string[]>();\n\n tags: string[] = [];\n inputValue: string = '';\n\n onChange: (value: any) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(value: string[] | null): void {\n if (Array.isArray(value)) {\n this.tags = value\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngAfterViewInit(): void {\n // hide label if no projected content\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n\n focus(): void {\n this.inputEl?.nativeElement?.focus();\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.inputValue = input.value;\n this.onTouched();\n }\n\n onBlur(): void {\n if (this.disabled) return;\n this.inputValue = '';\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n // Commit on comma or Enter\n if (event.key === ',' || event.key === 'Enter') {\n event.preventDefault();\n this.commitCurrentInput();\n return;\n }\n\n // Backspace behavior\n if (event.key === 'Backspace') {\n if (this.inputValue.length > 0) {\n return; // default backspace in input\n }\n if (this.tags.length > 0) {\n event.preventDefault();\n this.removeTag(this.tags.length - 1);\n return;\n }\n }\n }\n\n removeTag(index: number): void {\n if (this.disabled) return;\n if (index < 0 || index >= this.tags.length) return;\n this.tags = this.tags.filter((_, i) => i !== index);\n this.emitChanges();\n }\n\n private commitCurrentInput(): void {\n const raw = this.inputValue.trim();\n if (!raw) {\n this.inputValue = '';\n return;\n }\n\n // If user pasted multiple comma-separated values, split and add all\n const parts = raw.split(',').map((p) => p.trim()).filter((p) => p.length > 0);\n for (const part of parts) {\n this.addTag(part);\n }\n\n this.inputValue = '';\n }\n\n private addTag(tag: string): void {\n if (!this.allowDuplicates) {\n const exists = this.tags.some((t) => t.toLowerCase() === tag.toLowerCase());\n if (exists) {\n return;\n }\n }\n this.tags = [...this.tags, tag];\n this.emitChanges();\n }\n\n private emitChanges(): void {\n const cleaned = this.tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n if (cleaned.length !== this.tags.length || cleaned.some((t, i) => t !== this.tags[i])) {\n this.tags = cleaned;\n }\n this.onChange(this.tags);\n this.valueChange.emit(this.tags);\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n\n <div class=\"tag-input-wrapper block w-full rounded-md bg-light-control dark:bg-dark-control disabled:bg-light-control/60 dark:disabled:bg-dark-control/80 px-2 py-1.5 text-base text-light-on-control dark:text-dark-on-control disabled:cursor-not-allowed disabled:text-light-on-control/60 dark:disabled:text-dark-on-control/80 outline -outline-offset-1 outline-light-inactive dark:outline-dark-inactive placeholder:text-light-inactive dark:placeholder:text-dark-inactive sm:text-sm/6\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <ng-container *ngFor=\"let tag of tags; let i = index\">\n <span class=\"inline-flex items-center gap-1 rounded-md bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary px-2 py-0.5 text-xs\">\n {{ tag }}\n @if (!disabled) {\n <button type=\"button\" (click)=\"removeTag(i)\" class=\"text-light-on-secondary/80 hover:text-light-on-secondary dark:text-dark-on-secondary/80 dark:hover:text-dark-on-secondary hover:cursor-pointer\">\n ×\n </button>\n }\n </span>\n </ng-container>\n\n <input #inputEl\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n class=\"flex-1 min-w-[8rem] bg-transparent outline-none placeholder:text-light-inactive dark:placeholder:text-dark-inactive\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n />\n </div>\n </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-tag-viewer',\n imports: [CommonModule],\n templateUrl: './tag-viewer.component.html',\n styleUrl: './tag-viewer.component.css',\n providers: [provideTranslocoScope('haloduck')],\n})\nexport class TagViewerComponent implements AfterViewInit {\n @ViewChild('label') label!: ElementRef;\n\n tags: string[] = [];\n\n @Input() shouldWrap: boolean = true;\n\n // Accept input as `value` for consistency with tag-input\n @Input() set value(tags: string[] | null) {\n if (Array.isArray(tags)) {\n this.tags = tags\n .map((t) => (t ?? '').trim())\n .filter((t) => t.length > 0);\n } else {\n this.tags = [];\n }\n }\n\n ngAfterViewInit(): void {\n // hide label if no projected content\n if (this.label && this.label.nativeElement) {\n const hasContent = this.label.nativeElement.textContent?.trim();\n if (!hasContent) {\n this.label.nativeElement.style.display = 'none';\n }\n }\n }\n}\n","<div class=\"flex flex-col gap-2\">\n <label #label\n class=\"block text-sm/6 font-medium text-light-on-control dark:text-dark-on-control text-left\">\n <ng-content></ng-content>\n </label>\n\n <div\n class=\"block w-full rounded-md px-2 py-1.5 text-base text-light-on-control dark:text-dark-on-control sm:text-sm/6\">\n <div class=\"flex items-center gap-2\"\n [ngClass]=\"shouldWrap ? 'flex-wrap' : 'flex-nowrap'\">\n @for (tag of tags; track tag) {\n <span\n class=\"inline-flex items-center gap-1 rounded-md bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary px-2 py-0.5 text-xs\">\n {{ tag }}\n </span>\n }\n </div>\n </div>\n</div>\n","import { Directive, ElementRef, Input, OnInit, Renderer2, HostBinding } from '@angular/core';\n\nexport interface GroupedConfig {\n layoutClasses?: string;\n bgClasses?: string;\n borderClasses?: string;\n labelText?: string;\n labelClasses?: string;\n labelOffset?: string;\n}\n\n@Directive({\n selector: '[haloduckGrouped]',\n standalone: true\n})\nexport class GroupedDirective implements OnInit {\n @Input() haloduckGrouped: GroupedConfig | string = {};\n @Input() layoutClasses: string = 'p-4 mt-2';\n @Input() bgClasses: string = '';\n @Input() borderClasses: string = 'border border-light-inactive dark:border-dark-inactive rounded';\n @Input() labelText: string = '';\n @Input() labelClasses: string = 'absolute bg-light-inactive dark:bg-dark-inactive text-light-on-inactive dark:text-dark-on-inactive px-2 py-0.5 text-sm font-medium rounded';\n @Input() labelOffset: string = '-10px';\n\n @HostBinding('class') hostClasses = 'relative';\n\n private labelElement: HTMLElement | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.applyConfig();\n\n this.createLayout();\n this.createBorder();\n this.createLabel();\n }\n\n private applyConfig(): void {\n if (typeof this.haloduckGrouped === 'string') {\n this.labelText = this.haloduckGrouped;\n } else if (typeof this.haloduckGrouped === 'object') {\n const config = this.haloduckGrouped;\n this.layoutClasses = config.layoutClasses ?? this.layoutClasses;\n this.bgClasses = config.bgClasses ?? this.bgClasses;\n this.borderClasses = config.borderClasses ?? this.borderClasses;\n this.labelText = config.labelText ?? this.labelText;\n this.labelClasses = config.labelClasses ?? this.labelClasses;\n this.labelOffset = config.labelOffset ?? this.labelOffset;\n }\n }\n\n private createLayout(): void {\n const element = this.elementRef.nativeElement;\n this.addClasses(element, this.layoutClasses);\n }\n\n private createBorder(): void {\n const element = this.elementRef.nativeElement;\n\n // 기존 테두리 클래스 제거\n this.removeBorderClasses(element);\n\n // Tailwind 클래스 추가\n this.addClasses(element, this.borderClasses);\n }\n\n private createLabel(): void {\n if (!this.labelText) return;\n\n const element = this.elementRef.nativeElement;\n\n // 기존 라벨 제거\n if (this.labelElement) {\n this.renderer.removeChild(element, this.labelElement);\n }\n\n // 라벨 요소 생성\n this.labelElement = this.renderer.createElement('span');\n\n // Tailwind 클래스 적용\n if (this.labelElement) {\n this.addClasses(this.labelElement, this.labelClasses);\n }\n\n // 커스텀 스타일 (Tailwind로 매핑할 수 없는 속성들)\n this.renderer.setStyle(this.labelElement, 'top', this.labelOffset);\n this.renderer.setStyle(this.labelElement, 'left', '8px');\n this.renderer.setStyle(this.labelElement, 'white-space', 'nowrap');\n this.renderer.setStyle(this.labelElement, 'z-index', '10');\n this.renderer.setStyle(this.labelElement, 'pointer-events', 'none');\n\n // 라벨 텍스트 설정\n this.renderer.setProperty(this.labelElement, 'textContent', this.labelText);\n\n // 요소에 라벨 추가\n this.renderer.appendChild(element, this.labelElement);\n }\n\n private addClasses(element: HTMLElement, classString: string): void {\n if (!classString) return;\n\n // 공백으로 구분된 클래스들을 분리하여 각각 추가\n const classes = classString.split(' ').filter(className => className.trim());\n classes.forEach(className => {\n if (className.trim()) {\n this.renderer.addClass(element, className.trim());\n }\n });\n }\n\n private removeBorderClasses(element: HTMLElement): void {\n // 기본 테두리 클래스들 제거\n const defaultBorderClasses = [\n 'border', 'border-2', 'border-3', 'border-4', 'border-8',\n 'border-solid', 'border-dashed', 'border-dotted', 'border-double', 'border-none',\n 'rounded-none', 'rounded-sm', 'rounded', 'rounded-md', 'rounded-lg', 'rounded-xl', 'rounded-2xl', 'rounded-3xl', 'rounded-full',\n 'border-gray-200', 'border-gray-300', 'border-gray-400', 'border-gray-500', 'border-gray-600', 'border-gray-700', 'border-gray-800', 'border-gray-900',\n 'border-blue-500', 'border-blue-700', 'border-red-500', 'border-red-600', 'border-green-500', 'border-green-600',\n 'border-amber-500', 'border-amber-600', 'border-violet-500', 'border-violet-600', 'border-pink-500', 'border-pink-600',\n 'border-white', 'border-black'\n ];\n\n defaultBorderClasses.forEach(className => {\n this.renderer.removeClass(element, className);\n });\n }\n\n // 라벨 텍스트 업데이트 메서드\n updateLabel(text: string): void {\n if (this.labelElement) {\n this.renderer.setProperty(this.labelElement, 'textContent', text);\n }\n }\n\n // 라벨 표시/숨김 메서드\n toggleLabel(show: boolean): void {\n if (this.labelElement) {\n if (show) {\n this.renderer.removeClass(this.labelElement, 'hidden');\n } else {\n this.renderer.addClass(this.labelElement, 'hidden');\n }\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, Router, NavigationEnd } from '@angular/router';\nimport { CoreService } from '@haloduck/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\ninterface Breadcrumb {\n label: string;\n url: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BreadcrumbService {\n private readonly coreService = inject(CoreService);\n private breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\n breadcrumbs$ = this.breadcrumbs.asObservable();\n private readonly titleService = inject(Title);\n\n constructor(private router: Router) {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const root = this.router.routerState.snapshot.root;\n const breadcrumbs = this.createBreadcrumbs(root);\n this.breadcrumbs.next(breadcrumbs);\n\n setTimeout(() => {\n const titlePrefix =\n this.coreService.getStage() === 'prod'\n ? ''\n : `[${this.coreService.getStage()}] ` +\n this.coreService.getAppName() +\n '::';\n\n const title =\n titlePrefix +\n breadcrumbs.reduce((acc, breadcrumb) => {\n return acc ? `${acc}>${breadcrumb.label}` : breadcrumb.label;\n }, '');\n\n this.titleService.setTitle(title || 'Default Title');\n });\n });\n }\n\n private createBreadcrumbs(\n route: ActivatedRouteSnapshot,\n url: string = '',\n breadcrumbs: Breadcrumb[] = [],\n ): Breadcrumb[] {\n const children: ActivatedRouteSnapshot[] = route.children;\n\n if (children.length === 0) {\n return breadcrumbs;\n }\n\n for (const child of children) {\n const routeURL: string = child.url\n .map((segment) => segment.path)\n .join('/');\n if (routeURL !== '') {\n url += `/${routeURL}`;\n }\n\n if (child.data['breadcrumb']) {\n breadcrumbs.push({ label: child.data['breadcrumb'], url });\n }\n\n return this.createBreadcrumbs(child, url, breadcrumbs);\n }\n\n return breadcrumbs;\n }\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BreadcrumbService } from './breadcrumb.service';\nimport { TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'haloduck-breadcrumb',\n imports: [RouterLink, TranslocoModule],\n templateUrl: './breadcrumb.component.html',\n styleUrl: './breadcrumb.component.css',\n})\nexport class BreadcrumbComponent implements OnInit {\n private readonly breadcrumbService = inject(BreadcrumbService);\n listBreadcrumb: { label: string; url: string }[] = [];\n\n ngOnInit() {\n this.breadcrumbService.breadcrumbs$.subscribe((listBreadcrumb) => {\n this.listBreadcrumb = listBreadcrumb;\n });\n }\n}\n","<nav class=\"flex border-b border-light-inactive dark:border-dark-inactive bg-light-background dark:bg-dark-background\"\n aria-label=\"Breadcrumb\">\n <ol role=\"list\"\n class=\"flex w-full max-w-(--breakpoint-xl) space-x-4 px-4 sm:px-6 lg:px-8\">\n <li class=\"flex\">\n <div class=\"flex items-center\">\n <a routerLink=\"/\"\n class=\"text-light-on-background dark:text-dark-on-background hover:scale-105\">\n <svg class=\"size-5 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path fill-rule=\"evenodd\"\n d=\"M9.293 2.293a1 1 0 0 1 1.414 0l7 7A1 1 0 0 1 17 11h-1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-6H3a1 1 0 0 1-.707-1.707l7-7Z\"\n clip-rule=\"evenodd\" />\n </svg>\n <span class=\"sr-only\">Home</span>\n </a>\n </div>\n </li>\n @for (breadcrumb of listBreadcrumb; track breadcrumb.label; let last = $last) {\n <li class=\"flex\">\n <div class=\"flex items-center\">\n <svg class=\"h-full w-6 shrink-0 text-light-inactive dark:text-dark-inactive\"\n viewBox=\"0 0 24 44\"\n preserveAspectRatio=\"none\"\n fill=\"currentColor\"\n aria-hidden=\"true\">\n <path d=\"M.293 0l22 22-22 22h1.414l22-22-22-22H.293z\" />\n </svg>\n @if (!last) {\n <a href=\"javascript:void(0)\"\n [routerLink]=\"breadcrumb.url\"\n class=\"ml-4 text-sm font-medium hover:font-bold text-light-on-background dark:text-dark-on-background\">{{ breadcrumb.label | transloco }}</a>\n } @else {\n <span class=\"ml-4 text-sm font-medium text-light-on-background dark:text-dark-on-background\">{{ breadcrumb.label | transloco }}</span>\n }\n </div>\n </li>\n }\n </ol>\n</nav>\n","import { Component, inject } from '@angular/core';\nimport { NotificationService } from './notification.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'haloduck-notification',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './notification.component.html',\n styleUrl: './notification.component.css',\n})\nexport class NotificationComponent {\n private readonly notificationService = inject(NotificationService);\n listNotification$ = this.notificationService.getListNotification();\n\n removeNotification(id: string) {\n this.notificationService.removeNotificationById(id);\n }\n}\n","@for (notification of listNotification$ |async; track notification.id) {\n<div class=\"relative rounded-lg m-4 px-8 py-4 bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary animate-fadeIn\"\n [ngClass]=\"{ 'bg-light-primary-dark dark:bg-dark-primary-dark text-light-on-primary-dark dark:text-dark-on-primary-dark': notification.type === 'info',\n 'bg-light-primary dark:bg-dark-primary text-light-on-primary dark:text-dark-on-primary': notification.type === 'success',\n 'bg-light-danger dark:bg-dark-danger text-light-on-danger dark:text-dark-on-danger': notification.type === 'error',\n 'bg-light-secondary dark:bg-dark-secondary text-light-on-secondary dark:text-dark-on-secondary': notification.type === 'warning' }\">\n {{notification.message}}\n <div class=\"absolute top-0 right-0\">\n <button type=\"button\"\n (click)=\"removeNotification(notification.id)\">\n <span class=\"sr-only\">Close</span>\n <svg class=\"size-6 text-white\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n data-slot=\"icon\">\n <path stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n</div>\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'haloduck-picture-name',\n imports: [],\n templateUrl: './picture-name.component.html',\n styleUrl: './picture-name.component.css'\n})\nexport class PictureNameComponent {\n @Input() name?: string = '';\n @Input() pictureKey?: string;\n @Input() cdnUrl?: string = '';\n}\n","<div class=\"flex items-center justify-start gap-2\">\n @if(pictureKey) {\n <img src=\"{{cdnUrl}}/{{pictureKey}}\"\n alt=\"사진\"\n class=\"w-8 h-8 rounded-full\" />\n } @else {\n <div class=\"w-8 h-8 bg-light-inactive dark:bg-dark-inactive rounded-full\"></div>\n }\n {{ name }}\n @if (name) {\n \n <!-- TODO -->\n }\n</div>\n","import { provideTranslocoScope } from '@jsverse/transloco';\n\nexport const provideHaloduckTransloco = () =>\n provideTranslocoScope({\n scope: 'haloduck',\n alias: 'haloduck',\n });\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|