@haloduck/ui 2.0.14 → 2.0.16

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Input, Component, inject, ChangeDetectorRef, forwardRef, ViewChild, signal, EventEmitter, Output, ViewContainerRef, NgZone, isDevMode, ChangeDetectionStrategy } from '@angular/core';
2
+ import { Injectable, Input, Component, inject, ChangeDetectorRef, forwardRef, ViewChild, signal, EventEmitter, Output, ViewContainerRef, NgZone, isDevMode, ChangeDetectionStrategy, HostBinding, Directive } from '@angular/core';
3
3
  import { signIn, confirmSignIn, resetPassword, confirmResetPassword } from 'aws-amplify/auth';
4
4
  import * as i1$1 from '@angular/forms';
5
5
  import { NG_VALUE_ACCESSOR, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
@@ -3051,6 +3051,144 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImpor
3051
3051
  type: Input
3052
3052
  }] } });
3053
3053
 
3054
+ class GroupedDirective {
3055
+ elementRef;
3056
+ renderer;
3057
+ haloduckGrouped = {};
3058
+ layoutClasses = 'p-4 mt-2';
3059
+ bgClasses = '';
3060
+ borderClasses = 'border border-light-inactive dark:border-dark-inactive rounded';
3061
+ labelText = '';
3062
+ labelClasses = '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';
3063
+ labelOffset = '-10px';
3064
+ hostClasses = 'relative';
3065
+ labelElement = null;
3066
+ constructor(elementRef, renderer) {
3067
+ this.elementRef = elementRef;
3068
+ this.renderer = renderer;
3069
+ }
3070
+ ngOnInit() {
3071
+ this.applyConfig();
3072
+ this.createBorder();
3073
+ this.createLabel();
3074
+ }
3075
+ applyConfig() {
3076
+ if (typeof this.haloduckGrouped === 'string') {
3077
+ this.labelText = this.haloduckGrouped;
3078
+ }
3079
+ else if (typeof this.haloduckGrouped === 'object') {
3080
+ const config = this.haloduckGrouped;
3081
+ this.layoutClasses = config.layoutClasses ?? this.layoutClasses;
3082
+ this.bgClasses = config.bgClasses ?? this.bgClasses;
3083
+ this.borderClasses = config.borderClasses ?? this.borderClasses;
3084
+ this.labelText = config.labelText ?? this.labelText;
3085
+ this.labelClasses = config.labelClasses ?? this.labelClasses;
3086
+ this.labelOffset = config.labelOffset ?? this.labelOffset;
3087
+ }
3088
+ }
3089
+ createBorder() {
3090
+ const element = this.elementRef.nativeElement;
3091
+ // 기존 테두리 클래스 제거
3092
+ this.removeBorderClasses(element);
3093
+ // Tailwind 클래스 추가
3094
+ this.addClasses(element, this.borderClasses);
3095
+ }
3096
+ createLabel() {
3097
+ if (!this.labelText)
3098
+ return;
3099
+ const element = this.elementRef.nativeElement;
3100
+ // 기존 라벨 제거
3101
+ if (this.labelElement) {
3102
+ this.renderer.removeChild(element, this.labelElement);
3103
+ }
3104
+ // 라벨 요소 생성
3105
+ this.labelElement = this.renderer.createElement('span');
3106
+ // Tailwind 클래스 적용
3107
+ if (this.labelElement) {
3108
+ this.addClasses(this.labelElement, this.labelClasses);
3109
+ }
3110
+ // 커스텀 스타일 (Tailwind로 매핑할 수 없는 속성들)
3111
+ this.renderer.setStyle(this.labelElement, 'top', this.labelOffset);
3112
+ this.renderer.setStyle(this.labelElement, 'left', '8px');
3113
+ this.renderer.setStyle(this.labelElement, 'white-space', 'nowrap');
3114
+ this.renderer.setStyle(this.labelElement, 'z-index', '10');
3115
+ this.renderer.setStyle(this.labelElement, 'pointer-events', 'none');
3116
+ // 라벨 텍스트 설정
3117
+ this.renderer.setProperty(this.labelElement, 'textContent', this.labelText);
3118
+ // 요소에 라벨 추가
3119
+ this.renderer.appendChild(element, this.labelElement);
3120
+ }
3121
+ addClasses(element, classString) {
3122
+ if (!classString)
3123
+ return;
3124
+ // 공백으로 구분된 클래스들을 분리하여 각각 추가
3125
+ const classes = classString.split(' ').filter(className => className.trim());
3126
+ classes.forEach(className => {
3127
+ if (className.trim()) {
3128
+ this.renderer.addClass(element, className.trim());
3129
+ }
3130
+ });
3131
+ }
3132
+ removeBorderClasses(element) {
3133
+ // 기본 테두리 클래스들 제거
3134
+ const defaultBorderClasses = [
3135
+ 'border', 'border-2', 'border-3', 'border-4', 'border-8',
3136
+ 'border-solid', 'border-dashed', 'border-dotted', 'border-double', 'border-none',
3137
+ 'rounded-none', 'rounded-sm', 'rounded', 'rounded-md', 'rounded-lg', 'rounded-xl', 'rounded-2xl', 'rounded-3xl', 'rounded-full',
3138
+ 'border-gray-200', 'border-gray-300', 'border-gray-400', 'border-gray-500', 'border-gray-600', 'border-gray-700', 'border-gray-800', 'border-gray-900',
3139
+ 'border-blue-500', 'border-blue-700', 'border-red-500', 'border-red-600', 'border-green-500', 'border-green-600',
3140
+ 'border-amber-500', 'border-amber-600', 'border-violet-500', 'border-violet-600', 'border-pink-500', 'border-pink-600',
3141
+ 'border-white', 'border-black'
3142
+ ];
3143
+ defaultBorderClasses.forEach(className => {
3144
+ this.renderer.removeClass(element, className);
3145
+ });
3146
+ }
3147
+ // 라벨 텍스트 업데이트 메서드
3148
+ updateLabel(text) {
3149
+ if (this.labelElement) {
3150
+ this.renderer.setProperty(this.labelElement, 'textContent', text);
3151
+ }
3152
+ }
3153
+ // 라벨 표시/숨김 메서드
3154
+ toggleLabel(show) {
3155
+ if (this.labelElement) {
3156
+ if (show) {
3157
+ this.renderer.removeClass(this.labelElement, 'hidden');
3158
+ }
3159
+ else {
3160
+ this.renderer.addClass(this.labelElement, 'hidden');
3161
+ }
3162
+ }
3163
+ }
3164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GroupedDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
3165
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.4", type: GroupedDirective, isStandalone: true, selector: "[haloduckGrouped]", inputs: { haloduckGrouped: "haloduckGrouped", layoutClasses: "layoutClasses", bgClasses: "bgClasses", borderClasses: "borderClasses", labelText: "labelText", labelClasses: "labelClasses", labelOffset: "labelOffset" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0 });
3166
+ }
3167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.4", ngImport: i0, type: GroupedDirective, decorators: [{
3168
+ type: Directive,
3169
+ args: [{
3170
+ selector: '[haloduckGrouped]',
3171
+ standalone: true
3172
+ }]
3173
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { haloduckGrouped: [{
3174
+ type: Input
3175
+ }], layoutClasses: [{
3176
+ type: Input
3177
+ }], bgClasses: [{
3178
+ type: Input
3179
+ }], borderClasses: [{
3180
+ type: Input
3181
+ }], labelText: [{
3182
+ type: Input
3183
+ }], labelClasses: [{
3184
+ type: Input
3185
+ }], labelOffset: [{
3186
+ type: Input
3187
+ }], hostClasses: [{
3188
+ type: HostBinding,
3189
+ args: ['class']
3190
+ }] } });
3191
+
3054
3192
  class BreadcrumbService {
3055
3193
  router;
3056
3194
  coreService = inject(CoreService);
@@ -3163,5 +3301,5 @@ const provideHaloduckTransloco = () => provideTranslocoScope({
3163
3301
  * Generated bundle index. Do not edit.
3164
3302
  */
3165
3303
 
3166
- export { AuthenticateComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, ConfirmDialogService, CopyButtonComponent, DatePickerComponent, DateRangeComponent, DialogService, DrawCanvasComponent, ERROR_NOT_ACCEPTABLE_FILE_TYPE, ERROR_OVER_COUNT, ERROR_OVER_SIZE, ERROR_UPLOAD, FileUploaderComponent, FlipComponent, ImageUploaderComponent, ImageViewerComponent, InputComponent, LanguageSelectorComponent, MapToAddressComponent, NotificationComponent, NotificationService, PictureNameComponent, SelectComponent, SelectDropdownComponent, SideMenuComponent, SideMenuItemComponent, StlViewerComponent, TableComponent, TabsComponent, TagInputComponent, TagViewerComponent, ToggleComponent, dateToString, provideHaloduckTransloco };
3304
+ export { AuthenticateComponent, BreadcrumbComponent, ButtonComponent, CalendarComponent, ConfirmDialogService, CopyButtonComponent, DatePickerComponent, DateRangeComponent, DialogService, DrawCanvasComponent, ERROR_NOT_ACCEPTABLE_FILE_TYPE, ERROR_OVER_COUNT, ERROR_OVER_SIZE, ERROR_UPLOAD, FileUploaderComponent, FlipComponent, GroupedDirective, ImageUploaderComponent, ImageViewerComponent, InputComponent, LanguageSelectorComponent, MapToAddressComponent, NotificationComponent, NotificationService, PictureNameComponent, SelectComponent, SelectDropdownComponent, SideMenuComponent, SideMenuItemComponent, StlViewerComponent, TableComponent, TabsComponent, TagInputComponent, TagViewerComponent, ToggleComponent, dateToString, provideHaloduckTransloco };
3167
3305
  //# sourceMappingURL=haloduck-ui.mjs.map