angular-dev-utils 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/esm2022/angular-dev-utils.mjs +5 -0
  2. package/esm2022/lib/components/button/button.component.mjs +68 -0
  3. package/esm2022/lib/components/card/card.component.mjs +78 -0
  4. package/esm2022/lib/components/input/input.component.mjs +141 -0
  5. package/esm2022/lib/components/modal/modal.component.mjs +102 -0
  6. package/esm2022/lib/components/spinner/spinner.component.mjs +44 -0
  7. package/esm2022/lib/components/table/table.component.mjs +240 -0
  8. package/esm2022/lib/models/types.mjs +2 -0
  9. package/esm2022/lib/services/modal.service.mjs +102 -0
  10. package/esm2022/public-api.mjs +15 -0
  11. package/fesm2022/angular-dev-utils.mjs +765 -0
  12. package/fesm2022/angular-dev-utils.mjs.map +1 -0
  13. package/index.d.ts +5 -0
  14. package/lib/components/button/button.component.d.ts +16 -0
  15. package/lib/components/card/card.component.d.ts +12 -0
  16. package/lib/components/input/input.component.d.ts +27 -0
  17. package/lib/components/modal/modal.component.d.ts +17 -0
  18. package/lib/components/spinner/spinner.component.d.ts +11 -0
  19. package/lib/components/table/table.component.d.ts +29 -0
  20. package/{src/lib/models/types.ts → lib/models/types.d.ts} +15 -20
  21. package/lib/services/modal.service.d.ts +21 -0
  22. package/package.json +15 -26
  23. package/{src/public-api.ts → public-api.d.ts} +0 -9
  24. package/.github/workflows/ci.yml +0 -39
  25. package/.github/workflows/publish.yml +0 -53
  26. package/angular.json +0 -43
  27. package/ng-package.json +0 -8
  28. package/src/lib/components/button/button.component.ts +0 -100
  29. package/src/lib/components/card/card.component.ts +0 -101
  30. package/src/lib/components/input/input.component.ts +0 -141
  31. package/src/lib/components/modal/modal.component.ts +0 -139
  32. package/src/lib/components/spinner/spinner.component.ts +0 -64
  33. package/src/lib/components/table/table.component.ts +0 -240
  34. package/src/lib/services/modal.service.ts +0 -120
  35. package/src/lib/styles.scss +0 -8
  36. package/tailwind.config.js +0 -25
  37. package/tsconfig.json +0 -32
  38. package/tsconfig.lib.json +0 -13
  39. package/tsconfig.lib.prod.json +0 -9
  40. package/tsconfig.spec.json +0 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-dev-utils.mjs","sources":["../../../src/lib/components/button/button.component.ts","../../../src/lib/components/input/input.component.ts","../../../src/lib/components/card/card.component.ts","../../../src/lib/components/modal/modal.component.ts","../../../src/lib/components/table/table.component.ts","../../../src/lib/components/spinner/spinner.component.ts","../../../src/lib/services/modal.service.ts","../../../src/public-api.ts","../../../src/angular-dev-utils.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonVariant, ButtonSize } from '../../models/types';\n\n@Component({\n selector: 'adu-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n [class]=\"buttonClasses\"\n (click)=\"handleClick($event)\"\n >\n <span *ngIf=\"loading\" class=\"adu-button-spinner\"></span>\n <ng-content></ng-content>\n </button>\n `,\n styles: [`\n .adu-button {\n @apply inline-flex items-center justify-center gap-2 font-medium rounded-md transition-colors duration-200;\n @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2;\n @apply disabled:pointer-events-none disabled:opacity-50;\n }\n\n /* Variants */\n .adu-button-primary {\n @apply bg-zinc-900 text-zinc-50 hover:bg-zinc-800 shadow-sm;\n }\n\n .adu-button-secondary {\n @apply bg-zinc-100 text-zinc-900 hover:bg-zinc-200 shadow-sm;\n }\n\n .adu-button-success {\n @apply bg-emerald-600 text-white hover:bg-emerald-700 shadow-sm;\n }\n\n .adu-button-danger {\n @apply bg-red-600 text-zinc-50 hover:bg-red-700 shadow-sm;\n }\n\n .adu-button-warning {\n @apply bg-amber-500 text-white hover:bg-amber-600 shadow-sm;\n }\n\n .adu-button-ghost {\n @apply bg-transparent hover:bg-zinc-100 hover:text-zinc-900 text-zinc-700;\n }\n\n .adu-button-outline {\n @apply border border-zinc-200 bg-white hover:bg-zinc-100 hover:text-zinc-900 text-zinc-900;\n }\n\n /* Sizes */\n .adu-button-sm {\n @apply h-9 px-3 text-sm rounded-md;\n }\n\n .adu-button-md {\n @apply h-10 px-4 text-sm;\n }\n\n .adu-button-lg {\n @apply h-11 px-8 text-base;\n }\n\n /* Loading Spinner */\n .adu-button-spinner {\n @apply inline-block w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin;\n }\n `]\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'md';\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() fullWidth = false;\n\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n get buttonClasses(): string {\n const classes = ['adu-button', `adu-button-${this.variant}`, `adu-button-${this.size}`];\n\n if (this.fullWidth) {\n classes.push('w-full');\n }\n\n return classes.join(' ');\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled && !this.loading) {\n this.clicked.emit(event);\n }\n }\n}\n","import { Component, Input, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputType, InputSize } from '../../models/types';\n\n@Component({\n selector: 'adu-input',\n standalone: true,\n imports: [CommonModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"adu-input-wrapper\">\n <label *ngIf=\"label\" [for]=\"id\" class=\"adu-input-label\">\n {{ label }}\n <span *ngIf=\"required\" class=\"text-red-500\">*</span>\n </label>\n \n <div class=\"relative\">\n <input\n [id]=\"id\"\n [type]=\"type\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [value]=\"value\"\n [class]=\"inputClasses\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onTouched()\"\n />\n <span *ngIf=\"icon\" class=\"adu-input-icon\">{{ icon }}</span>\n </div>\n\n <p *ngIf=\"error\" class=\"adu-input-error\">{{ error }}</p>\n <p *ngIf=\"hint && !error\" class=\"adu-input-hint\">{{ hint }}</p>\n </div>\n `,\n styles: [`\n .adu-input-wrapper {\n @apply w-full;\n }\n\n .adu-input-label {\n @apply block text-sm font-medium text-zinc-900 mb-1.5;\n }\n\n .adu-input {\n @apply flex w-full rounded-md border border-zinc-200 bg-white px-3 py-2 text-sm;\n @apply ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium;\n @apply placeholder:text-zinc-500;\n @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2;\n @apply disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-zinc-50;\n }\n\n .adu-input-sm {\n @apply h-9 px-3 text-sm;\n }\n\n .adu-input-md {\n @apply h-10 px-3 text-sm;\n }\n\n .adu-input-lg {\n @apply h-11 px-4 text-base;\n }\n\n .adu-input-error-state {\n @apply border-red-500 focus-visible:ring-red-500;\n }\n\n .adu-input-icon {\n @apply absolute right-3 top-1/2 -translate-y-1/2 text-zinc-400 pointer-events-none;\n }\n\n .adu-input-error {\n @apply mt-1.5 text-sm text-red-600 font-medium;\n }\n\n .adu-input-hint {\n @apply mt-1.5 text-sm text-zinc-500;\n }\n `]\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() id = `adu-input-${Math.random().toString(36).substr(2, 9)}`;\n @Input() label = '';\n @Input() type: InputType = 'text';\n @Input() placeholder = '';\n @Input() size: InputSize = 'md';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() error = '';\n @Input() hint = '';\n @Input() icon = '';\n\n value = '';\n onChange: (value: string) => void = () => { };\n onTouched: () => void = () => { };\n\n get inputClasses(): string {\n const classes = ['adu-input', `adu-input-${this.size}`];\n\n if (this.error) {\n classes.push('adu-input-error-state');\n }\n\n if (this.icon) {\n classes.push('pr-10');\n }\n\n return classes.join(' ');\n }\n\n onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.onChange(this.value);\n }\n\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => 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","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'adu-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [class]=\"cardClasses\">\n <div *ngIf=\"hasHeader\" class=\"adu-card-header\">\n <ng-content select=\"[card-header]\"></ng-content>\n </div>\n \n <div class=\"adu-card-body\">\n <ng-content></ng-content>\n </div>\n \n <div *ngIf=\"hasFooter\" class=\"adu-card-footer\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n `,\n styles: [`\n .adu-card {\n @apply rounded-lg border border-zinc-200 bg-white text-zinc-950 shadow-sm;\n }\n\n .adu-card-hoverable:hover {\n @apply shadow-md;\n }\n\n .adu-card-shadow-sm {\n @apply shadow-sm;\n }\n\n .adu-card-shadow-md {\n @apply shadow-md;\n }\n\n .adu-card-shadow-lg {\n @apply shadow-lg;\n }\n\n .adu-card-shadow-xl {\n @apply shadow-xl;\n }\n\n .adu-card-header {\n @apply flex flex-col space-y-1.5 p-6;\n }\n\n .adu-card-body {\n @apply p-6 pt-0;\n }\n\n .adu-card-body-compact {\n @apply p-4 pt-0;\n }\n\n .adu-card-body-spacious {\n @apply p-8 pt-0;\n }\n\n .adu-card-footer {\n @apply flex items-center p-6 pt-0;\n }\n `]\n})\nexport class CardComponent {\n @Input() shadow: 'none' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n @Input() hoverable = false;\n @Input() padding: 'compact' | 'normal' | 'spacious' = 'normal';\n @Input() hasHeader = false;\n @Input() hasFooter = false;\n\n get cardClasses(): string {\n const classes = ['adu-card'];\n\n if (this.shadow !== 'none') {\n classes.push(`adu-card-shadow-${this.shadow}`);\n }\n\n if (this.hoverable) {\n classes.push('adu-card-hoverable');\n }\n\n return classes.join(' ');\n }\n\n get bodyClasses(): string {\n const classes = ['adu-card-body'];\n\n if (this.padding === 'compact') {\n classes.push('adu-card-body-compact');\n } else if (this.padding === 'spacious') {\n classes.push('adu-card-body-spacious');\n }\n\n return classes.join(' ');\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'adu-modal',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"adu-modal-wrapper\" *ngIf=\"isOpen\" (click)=\"onBackdropClick()\">\n <div [class]=\"modalClasses\" (click)=\"$event.stopPropagation()\">\n <button \n *ngIf=\"showCloseButton\"\n class=\"adu-modal-close\" \n (click)=\"close()\"\n aria-label=\"Close modal\"\n >\n ×\n </button>\n\n <div *ngIf=\"title\" class=\"adu-modal-title\">\n {{ title }}\n </div>\n\n <div class=\"adu-modal-body\">\n <ng-content></ng-content>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"adu-modal-footer\">\n <ng-content select=\"[modal-footer]\"></ng-content>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .adu-modal-wrapper {\n @apply fixed inset-0 z-50 flex items-center justify-center p-4;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(4px);\n animation: fadeIn 0.15s ease-out;\n }\n\n .adu-modal-content {\n @apply relative bg-white rounded-lg shadow-lg max-h-[90vh] overflow-hidden;\n animation: slideUp 0.2s ease-out;\n }\n\n .adu-modal-sm {\n @apply w-full max-w-sm;\n }\n\n .adu-modal-md {\n @apply w-full max-w-lg;\n }\n\n .adu-modal-lg {\n @apply w-full max-w-2xl;\n }\n\n .adu-modal-xl {\n @apply w-full max-w-4xl;\n }\n\n .adu-modal-full {\n @apply w-full h-full max-w-none rounded-none;\n }\n\n .adu-modal-close {\n @apply absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white;\n @apply transition-opacity hover:opacity-100;\n @apply focus:outline-none focus:ring-2 focus:ring-zinc-950 focus:ring-offset-2;\n @apply disabled:pointer-events-none;\n @apply text-zinc-500 hover:text-zinc-900 text-2xl font-light w-6 h-6 flex items-center justify-center;\n }\n\n .adu-modal-title {\n @apply flex flex-col space-y-1.5 text-center sm:text-left p-6 pb-4;\n @apply text-lg font-semibold leading-none tracking-tight text-zinc-950;\n }\n\n .adu-modal-body {\n @apply p-6 pt-0 overflow-y-auto;\n }\n\n .adu-modal-footer {\n @apply flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 p-6 pt-4;\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(4px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n\n .animate-fadeIn {\n animation: fadeIn 0.15s ease-out;\n }\n\n .animate-slideUp {\n animation: slideUp 0.3s ease-out;\n }\n `]\n})\nexport class ModalComponent {\n @Input() isOpen = false;\n @Input() title = '';\n @Input() size: 'sm' | 'md' | 'lg' | 'xl' | 'full' = 'md';\n @Input() closeOnBackdrop = true;\n @Input() showCloseButton = true;\n @Input() hasFooter = false;\n\n @Output() isOpenChange = new EventEmitter<boolean>();\n @Output() closed = new EventEmitter<void>();\n\n get modalClasses(): string {\n return ['adu-modal-content', `adu-modal-${this.size}`].join(' ');\n }\n\n close(): void {\n this.isOpen = false;\n this.isOpenChange.emit(false);\n this.closed.emit();\n }\n\n onBackdropClick(): void {\n if (this.closeOnBackdrop) {\n this.close();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, ContentChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableColumn, TableConfig } from '../../models/types';\n\n@Component({\n selector: 'adu-table',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"adu-table-container\">\n <table class=\"adu-table\" [class.adu-table-striped]=\"config.striped\" [class.adu-table-hoverable]=\"config.hoverable\">\n <thead class=\"adu-table-header\">\n <tr>\n <th \n *ngFor=\"let column of columns\"\n [style.width]=\"column.width\"\n [class.adu-table-sortable]=\"column.sortable && config.sortable\"\n (click)=\"onSort(column)\"\n class=\"adu-table-th\"\n >\n <div class=\"flex items-center justify-between\">\n <span>{{ column.label }}</span>\n <span *ngIf=\"column.sortable && config.sortable\" class=\"adu-table-sort-icon\">\n <span *ngIf=\"sortColumn === column.key\">\n {{ sortDirection === 'asc' ? '↑' : '↓' }}\n </span>\n <span *ngIf=\"sortColumn !== column.key\" class=\"text-gray-300\">↕</span>\n </span>\n </div>\n </th>\n </tr>\n </thead>\n <tbody class=\"adu-table-body\">\n <tr *ngFor=\"let row of paginatedData; let i = index\" class=\"adu-table-row\">\n <td *ngFor=\"let column of columns\" class=\"adu-table-td\">\n <ng-container *ngIf=\"cellTemplate; else defaultCell\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row, column: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultCell>\n {{ getCellValue(row, column) }}\n </ng-template>\n </td>\n </tr>\n <tr *ngIf=\"paginatedData.length === 0\" class=\"adu-table-empty\">\n <td [attr.colspan]=\"columns.length\" class=\"text-center py-8 text-gray-500\">\n <ng-content select=\"[empty-state]\"></ng-content>\n <span *ngIf=\"!hasEmptyState\">No data available</span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <div *ngIf=\"config.pageable && totalPages > 1\" class=\"adu-table-pagination\">\n <button \n class=\"adu-pagination-btn\" \n [disabled]=\"currentPage === 1\"\n (click)=\"goToPage(currentPage - 1)\"\n >\n Previous\n </button>\n\n <div class=\"adu-pagination-info\">\n Page {{ currentPage }} of {{ totalPages }}\n </div>\n\n <button \n class=\"adu-pagination-btn\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"goToPage(currentPage + 1)\"\n >\n Next\n </button>\n </div>\n </div>\n `,\n styles: [`\n .adu-table-container {\n @apply w-full overflow-x-auto rounded-md border border-zinc-200;\n }\n\n .adu-table {\n @apply w-full caption-bottom text-sm;\n }\n\n .adu-table-header {\n @apply border-b border-zinc-200;\n }\n\n .adu-table-th {\n @apply h-12 px-4 text-left align-middle font-medium text-zinc-500;\n @apply [&:has([role=checkbox])]:pr-0;\n }\n\n .adu-table-sortable {\n @apply cursor-pointer hover:text-zinc-900 transition-colors;\n }\n\n .adu-table-sort-icon {\n @apply ml-2 inline-block text-zinc-400;\n }\n\n .adu-table-body {\n @apply [&_tr:last-child]:border-0;\n }\n\n .adu-table-row {\n @apply border-b border-zinc-200 transition-colors;\n @apply hover:bg-zinc-50/50;\n @apply data-[state=selected]:bg-zinc-100;\n }\n\n .adu-table-striped .adu-table-row:nth-child(even) {\n @apply bg-zinc-50/30;\n }\n\n .adu-table-hoverable .adu-table-row:hover {\n @apply bg-zinc-50;\n }\n\n .adu-table-td {\n @apply p-4 align-middle text-zinc-900;\n @apply [&:has([role=checkbox])]:pr-0;\n }\n\n .adu-table-empty {\n @apply text-center py-10 text-zinc-500;\n }\n\n .adu-table-pagination {\n @apply flex items-center justify-between px-4 py-3 border-t border-zinc-200 bg-zinc-50/50;\n }\n\n .adu-pagination-btn {\n @apply inline-flex items-center justify-center rounded-md text-sm font-medium;\n @apply ring-offset-white transition-colors;\n @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2;\n @apply disabled:pointer-events-none disabled:opacity-50;\n @apply border border-zinc-200 bg-white hover:bg-zinc-100 hover:text-zinc-900;\n @apply h-9 px-4 py-2;\n }\n\n .adu-pagination-info {\n @apply text-sm text-zinc-600 font-medium;\n }\n `]\n})\nexport class TableComponent<T = any> {\n @Input() data: T[] = [];\n @Input() columns: TableColumn<T>[] = [];\n @Input() config: TableConfig = {\n sortable: true,\n pageable: true,\n pageSize: 10,\n striped: true,\n hoverable: true\n };\n\n @ContentChild('cellTemplate') cellTemplate?: TemplateRef<any>;\n @Output() rowClicked = new EventEmitter<T>();\n @Output() sortChanged = new EventEmitter<{ column: string; direction: 'asc' | 'desc' }>();\n\n sortColumn = '';\n sortDirection: 'asc' | 'desc' = 'asc';\n currentPage = 1;\n hasEmptyState = false;\n\n ngOnInit() {\n this.config = { ...this.getDefaultConfig(), ...this.config };\n }\n\n get sortedData(): T[] {\n if (!this.config.sortable || !this.sortColumn) {\n return this.data;\n }\n\n return [...this.data].sort((a, b) => {\n const aVal = this.getNestedValue(a, this.sortColumn);\n const bVal = this.getNestedValue(b, this.sortColumn);\n\n if (aVal < bVal) return this.sortDirection === 'asc' ? -1 : 1;\n if (aVal > bVal) return this.sortDirection === 'asc' ? 1 : -1;\n return 0;\n });\n }\n\n get paginatedData(): T[] {\n if (!this.config.pageable) {\n return this.sortedData;\n }\n\n const start = (this.currentPage - 1) * (this.config.pageSize || 10);\n const end = start + (this.config.pageSize || 10);\n return this.sortedData.slice(start, end);\n }\n\n get totalPages(): number {\n return Math.ceil(this.data.length / (this.config.pageSize || 10));\n }\n\n onSort(column: TableColumn<T>): void {\n if (!column.sortable || !this.config.sortable) return;\n\n if (this.sortColumn === column.key) {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortColumn = column.key;\n this.sortDirection = 'asc';\n }\n\n this.sortChanged.emit({ column: column.key, direction: this.sortDirection });\n }\n\n goToPage(page: number): void {\n if (page >= 1 && page <= this.totalPages) {\n this.currentPage = page;\n }\n }\n\n getCellValue(row: T, column: TableColumn<T>): any {\n if (column.cellTemplate) {\n return column.cellTemplate(row);\n }\n return this.getNestedValue(row, column.key);\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, prop) => current?.[prop], obj);\n }\n\n private getDefaultConfig(): TableConfig {\n return {\n sortable: true,\n pageable: true,\n pageSize: 10,\n striped: true,\n hoverable: true\n };\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SpinnerSize, SpinnerColor } from '../../models/types';\n\n@Component({\n selector: 'adu-spinner',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div *ngIf=\"overlay\" class=\"adu-spinner-overlay\">\n <div [class]=\"spinnerClasses\"></div>\n <p *ngIf=\"message\" class=\"adu-spinner-message\">{{ message }}</p>\n </div>\n\n <div *ngIf=\"!overlay\" [class]=\"spinnerClasses\"></div>\n `,\n styles: [`\n .adu-spinner {\n @apply inline-block border-2 border-zinc-200 border-t-zinc-900 rounded-full animate-spin;\n }\n\n .adu-spinner-sm {\n @apply w-4 h-4 border-2;\n }\n\n .adu-spinner-md {\n @apply w-6 h-6 border-2;\n }\n\n .adu-spinner-lg {\n @apply w-10 h-10 border-[3px];\n }\n\n .adu-spinner-primary {\n @apply border-zinc-200 border-t-zinc-900;\n }\n\n .adu-spinner-secondary {\n @apply border-zinc-300 border-t-zinc-600;\n }\n\n .adu-spinner-white {\n @apply border-zinc-100 border-t-white;\n }\n\n .adu-spinner-overlay {\n @apply fixed inset-0 bg-black/50 backdrop-blur-sm flex flex-col items-center justify-center z-50;\n }\n\n .adu-spinner-message {\n @apply mt-4 text-white text-sm font-medium;\n }\n `]\n})\nexport class SpinnerComponent {\n @Input() size: SpinnerSize = 'md';\n @Input() color: SpinnerColor = 'primary';\n @Input() overlay = false;\n @Input() message = '';\n\n get spinnerClasses(): string {\n return ['adu-spinner', `adu-spinner-${this.size}`, `adu-spinner-${this.color}`].join(' ');\n }\n}\n","import { Injectable, ComponentRef, ApplicationRef, createComponent, EnvironmentInjector, Type } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ModalConfig } from '../models/types';\n\nexport interface ModalRef<T = any> {\n close: (result?: T) => void;\n afterClosed: () => Subject<T | undefined>;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ModalService {\n private modalComponentRef: ComponentRef<any> | null = null;\n private closeSubject = new Subject<any>();\n\n constructor(\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector\n ) { }\n\n open<T, R = any>(component: Type<T>, config: ModalConfig = {}): ModalRef<R> {\n // Close existing modal if any\n if (this.modalComponentRef) {\n this.close();\n }\n\n // Create modal wrapper\n const modalWrapper = document.createElement('div');\n modalWrapper.className = this.getModalWrapperClasses(config);\n\n // Create backdrop\n const backdrop = document.createElement('div');\n backdrop.className = 'adu-modal-backdrop';\n if (config.closeOnBackdrop !== false) {\n backdrop.onclick = () => this.close();\n }\n\n // Create modal content\n const modalContent = document.createElement('div');\n modalContent.className = this.getModalContentClasses(config);\n modalContent.onclick = (e) => e.stopPropagation();\n\n // Create close button if needed\n if (config.showCloseButton !== false) {\n const closeBtn = document.createElement('button');\n closeBtn.className = 'adu-modal-close';\n closeBtn.innerHTML = '×';\n closeBtn.onclick = () => this.close();\n modalContent.appendChild(closeBtn);\n }\n\n // Add title if provided\n if (config.title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'adu-modal-title';\n titleEl.textContent = config.title;\n modalContent.appendChild(titleEl);\n }\n\n // Create component container\n const componentContainer = document.createElement('div');\n componentContainer.className = 'adu-modal-body';\n modalContent.appendChild(componentContainer);\n\n // Assemble modal\n modalWrapper.appendChild(backdrop);\n modalWrapper.appendChild(modalContent);\n document.body.appendChild(modalWrapper);\n\n // Create and attach component\n this.modalComponentRef = createComponent(component, {\n environmentInjector: this.injector,\n hostElement: componentContainer\n });\n\n this.appRef.attachView(this.modalComponentRef.hostView);\n\n // Handle ESC key\n if (config.closeOnEscape !== false) {\n const escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n this.close();\n document.removeEventListener('keydown', escHandler);\n }\n };\n document.addEventListener('keydown', escHandler);\n }\n\n return {\n close: (result?: R) => this.close(result),\n afterClosed: () => this.closeSubject as Subject<R | undefined>\n };\n }\n\n close(result?: any): void {\n if (this.modalComponentRef) {\n this.appRef.detachView(this.modalComponentRef.hostView);\n this.modalComponentRef.destroy();\n this.modalComponentRef = null;\n\n // Remove modal from DOM\n const modals = document.querySelectorAll('.adu-modal-wrapper');\n modals.forEach(modal => modal.remove());\n\n this.closeSubject.next(result);\n this.closeSubject.complete();\n this.closeSubject = new Subject<any>();\n }\n }\n\n private getModalWrapperClasses(config: ModalConfig): string {\n return 'adu-modal-wrapper';\n }\n\n private getModalContentClasses(config: ModalConfig): string {\n const size = config.size || 'md';\n return `adu-modal-content adu-modal-${size}`;\n }\n}\n","/*\n * Public API Surface of angular-dev-utils\n */\n\n// Components\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/input/input.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/modal/modal.component';\nexport * from './lib/components/table/table.component';\nexport * from './lib/components/spinner/spinner.component';\n\n// Services\nexport * from './lib/services/modal.service';\n\n// Models & Types\nexport * from './lib/models/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="angular-dev-utils" />
5
+ export * from './public-api';
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { ButtonVariant, ButtonSize } from '../../models/types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ButtonComponent {
5
+ variant: ButtonVariant;
6
+ size: ButtonSize;
7
+ type: 'button' | 'submit' | 'reset';
8
+ disabled: boolean;
9
+ loading: boolean;
10
+ fullWidth: boolean;
11
+ clicked: EventEmitter<MouseEvent>;
12
+ get buttonClasses(): string;
13
+ handleClick(event: MouseEvent): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "adu-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
16
+ }
@@ -0,0 +1,12 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class CardComponent {
3
+ shadow: 'none' | 'sm' | 'md' | 'lg' | 'xl';
4
+ hoverable: boolean;
5
+ padding: 'compact' | 'normal' | 'spacious';
6
+ hasHeader: boolean;
7
+ hasFooter: boolean;
8
+ get cardClasses(): string;
9
+ get bodyClasses(): string;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "adu-card", never, { "shadow": { "alias": "shadow"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "hasHeader": { "alias": "hasHeader"; "required": false; }; "hasFooter": { "alias": "hasFooter"; "required": false; }; }, {}, never, ["[card-header]", "*", "[card-footer]"], true, never>;
12
+ }
@@ -0,0 +1,27 @@
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ import { InputType, InputSize } from '../../models/types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class InputComponent implements ControlValueAccessor {
5
+ id: string;
6
+ label: string;
7
+ type: InputType;
8
+ placeholder: string;
9
+ size: InputSize;
10
+ disabled: boolean;
11
+ readonly: boolean;
12
+ required: boolean;
13
+ error: string;
14
+ hint: string;
15
+ icon: string;
16
+ value: string;
17
+ onChange: (value: string) => void;
18
+ onTouched: () => void;
19
+ get inputClasses(): string;
20
+ onInputChange(event: Event): void;
21
+ writeValue(value: string): void;
22
+ registerOnChange(fn: (value: string) => void): void;
23
+ registerOnTouched(fn: () => void): void;
24
+ setDisabledState(isDisabled: boolean): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "adu-input", never, { "id": { "alias": "id"; "required": false; }; "label": { "alias": "label"; "required": false; }; "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "error": { "alias": "error"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, {}, never, never, true, never>;
27
+ }
@@ -0,0 +1,17 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ModalComponent {
4
+ isOpen: boolean;
5
+ title: string;
6
+ size: 'sm' | 'md' | 'lg' | 'xl' | 'full';
7
+ closeOnBackdrop: boolean;
8
+ showCloseButton: boolean;
9
+ hasFooter: boolean;
10
+ isOpenChange: EventEmitter<boolean>;
11
+ closed: EventEmitter<void>;
12
+ get modalClasses(): string;
13
+ close(): void;
14
+ onBackdropClick(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "adu-modal", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "title": { "alias": "title"; "required": false; }; "size": { "alias": "size"; "required": false; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "hasFooter": { "alias": "hasFooter"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "closed": "closed"; }, never, ["*", "[modal-footer]"], true, never>;
17
+ }
@@ -0,0 +1,11 @@
1
+ import { SpinnerSize, SpinnerColor } from '../../models/types';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SpinnerComponent {
4
+ size: SpinnerSize;
5
+ color: SpinnerColor;
6
+ overlay: boolean;
7
+ message: string;
8
+ get spinnerClasses(): string;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpinnerComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<SpinnerComponent, "adu-spinner", never, { "size": { "alias": "size"; "required": false; }; "color": { "alias": "color"; "required": false; }; "overlay": { "alias": "overlay"; "required": false; }; "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
11
+ }
@@ -0,0 +1,29 @@
1
+ import { EventEmitter, TemplateRef } from '@angular/core';
2
+ import { TableColumn, TableConfig } from '../../models/types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class TableComponent<T = any> {
5
+ data: T[];
6
+ columns: TableColumn<T>[];
7
+ config: TableConfig;
8
+ cellTemplate?: TemplateRef<any>;
9
+ rowClicked: EventEmitter<T>;
10
+ sortChanged: EventEmitter<{
11
+ column: string;
12
+ direction: 'asc' | 'desc';
13
+ }>;
14
+ sortColumn: string;
15
+ sortDirection: 'asc' | 'desc';
16
+ currentPage: number;
17
+ hasEmptyState: boolean;
18
+ ngOnInit(): void;
19
+ get sortedData(): T[];
20
+ get paginatedData(): T[];
21
+ get totalPages(): number;
22
+ onSort(column: TableColumn<T>): void;
23
+ goToPage(page: number): void;
24
+ getCellValue(row: T, column: TableColumn<T>): any;
25
+ private getNestedValue;
26
+ private getDefaultConfig;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "adu-table", never, { "data": { "alias": "data"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "rowClicked": "rowClicked"; "sortChanged": "sortChanged"; }, ["cellTemplate"], ["[empty-state]"], true, never>;
29
+ }
@@ -1,32 +1,27 @@
1
1
  export type ButtonVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'ghost' | 'outline';
2
2
  export type ButtonSize = 'sm' | 'md' | 'lg';
3
-
4
3
  export type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
5
4
  export type InputSize = 'sm' | 'md' | 'lg';
6
-
7
5
  export interface TableColumn<T = any> {
8
- key: string;
9
- label: string;
10
- sortable?: boolean;
11
- width?: string;
12
- cellTemplate?: (row: T) => string;
6
+ key: string;
7
+ label: string;
8
+ sortable?: boolean;
9
+ width?: string;
10
+ cellTemplate?: (row: T) => string;
13
11
  }
14
-
15
12
  export interface TableConfig {
16
- sortable?: boolean;
17
- pageable?: boolean;
18
- pageSize?: number;
19
- striped?: boolean;
20
- hoverable?: boolean;
13
+ sortable?: boolean;
14
+ pageable?: boolean;
15
+ pageSize?: number;
16
+ striped?: boolean;
17
+ hoverable?: boolean;
21
18
  }
22
-
23
19
  export interface ModalConfig {
24
- title?: string;
25
- size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
26
- closeOnBackdrop?: boolean;
27
- closeOnEscape?: boolean;
28
- showCloseButton?: boolean;
20
+ title?: string;
21
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
22
+ closeOnBackdrop?: boolean;
23
+ closeOnEscape?: boolean;
24
+ showCloseButton?: boolean;
29
25
  }
30
-
31
26
  export type SpinnerSize = 'sm' | 'md' | 'lg';
32
27
  export type SpinnerColor = 'primary' | 'secondary' | 'white';
@@ -0,0 +1,21 @@
1
+ import { ApplicationRef, EnvironmentInjector, Type } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { ModalConfig } from '../models/types';
4
+ import * as i0 from "@angular/core";
5
+ export interface ModalRef<T = any> {
6
+ close: (result?: T) => void;
7
+ afterClosed: () => Subject<T | undefined>;
8
+ }
9
+ export declare class ModalService {
10
+ private appRef;
11
+ private injector;
12
+ private modalComponentRef;
13
+ private closeSubject;
14
+ constructor(appRef: ApplicationRef, injector: EnvironmentInjector);
15
+ open<T, R = any>(component: Type<T>, config?: ModalConfig): ModalRef<R>;
16
+ close(result?: any): void;
17
+ private getModalWrapperClasses;
18
+ private getModalContentClasses;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<ModalService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<ModalService>;
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-dev-utils",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Modern Angular UI component library with Tailwind CSS styling",
5
5
  "keywords": [
6
6
  "angular",
@@ -23,12 +23,6 @@
23
23
  "publishConfig": {
24
24
  "access": "public"
25
25
  },
26
- "scripts": {
27
- "ng": "ng",
28
- "build": "ng build angular-dev-utils",
29
- "watch": "ng build angular-dev-utils --watch",
30
- "test": "ng test angular-dev-utils"
31
- },
32
26
  "private": false,
33
27
  "peerDependencies": {
34
28
  "@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
@@ -38,23 +32,18 @@
38
32
  "dependencies": {
39
33
  "tslib": "^2.3.0"
40
34
  },
41
- "devDependencies": {
42
- "@angular/animations": "^17.3.0",
43
- "@angular/common": "^17.3.0",
44
- "@angular/compiler": "^17.3.0",
45
- "@angular/core": "^17.3.0",
46
- "@angular/forms": "^17.3.12",
47
- "@angular/platform-browser": "^17.3.0",
48
- "@angular/platform-browser-dynamic": "^17.3.0",
49
- "rxjs": "~7.8.0",
50
- "zone.js": "~0.14.3",
51
- "@angular-devkit/build-angular": "^17.3.0",
52
- "@angular/cli": "^17.3.0",
53
- "@angular/compiler-cli": "^17.3.0",
54
- "autoprefixer": "^10.4.17",
55
- "ng-packagr": "^17.3.0",
56
- "postcss": "^8.4.35",
57
- "tailwindcss": "^3.4.1",
58
- "typescript": "~5.4.2"
59
- }
35
+ "module": "fesm2022/angular-dev-utils.mjs",
36
+ "typings": "index.d.ts",
37
+ "exports": {
38
+ "./package.json": {
39
+ "default": "./package.json"
40
+ },
41
+ ".": {
42
+ "types": "./index.d.ts",
43
+ "esm2022": "./esm2022/angular-dev-utils.mjs",
44
+ "esm": "./esm2022/angular-dev-utils.mjs",
45
+ "default": "./fesm2022/angular-dev-utils.mjs"
46
+ }
47
+ },
48
+ "sideEffects": false
60
49
  }
@@ -1,17 +1,8 @@
1
- /*
2
- * Public API Surface of angular-dev-utils
3
- */
4
-
5
- // Components
6
1
  export * from './lib/components/button/button.component';
7
2
  export * from './lib/components/input/input.component';
8
3
  export * from './lib/components/card/card.component';
9
4
  export * from './lib/components/modal/modal.component';
10
5
  export * from './lib/components/table/table.component';
11
6
  export * from './lib/components/spinner/spinner.component';
12
-
13
- // Services
14
7
  export * from './lib/services/modal.service';
15
-
16
- // Models & Types
17
8
  export * from './lib/models/types';
@@ -1,39 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main, develop]
6
- pull_request:
7
- branches: [main, develop]
8
-
9
- jobs:
10
- build:
11
- runs-on: ubuntu-latest
12
-
13
- strategy:
14
- matrix:
15
- node-version: [18.x, 20.x]
16
-
17
- steps:
18
- - name: Checkout repository
19
- uses: actions/checkout@v4
20
-
21
- - name: Setup Node.js ${{ matrix.node-version }}
22
- uses: actions/setup-node@v4
23
- with:
24
- node-version: ${{ matrix.node-version }}
25
- cache: "npm"
26
-
27
- - name: Install dependencies
28
- run: npm ci
29
-
30
- - name: Build library
31
- run: npm run build
32
-
33
- - name: Archive build artifacts
34
- if: matrix.node-version == '20.x'
35
- uses: actions/upload-artifact@v4
36
- with:
37
- name: dist
38
- path: dist/
39
- retention-days: 7
@@ -1,53 +0,0 @@
1
- name: Publish to npm
2
-
3
- on:
4
- release:
5
- types: [created]
6
- workflow_dispatch:
7
- inputs:
8
- version:
9
- description: "Version to publish (e.g., 1.0.0)"
10
- required: false
11
- type: string
12
-
13
- jobs:
14
- publish:
15
- runs-on: ubuntu-latest
16
- permissions:
17
- contents: read
18
- packages: write
19
-
20
- steps:
21
- - name: Checkout repository
22
- uses: actions/checkout@v4
23
-
24
- - name: Setup Node.js
25
- uses: actions/setup-node@v4
26
- with:
27
- node-version: "20.x"
28
- registry-url: "https://registry.npmjs.org"
29
-
30
- - name: Install dependencies
31
- run: npm ci
32
-
33
- - name: Build library
34
- run: npm run build
35
-
36
- - name: Copy package files
37
- run: |
38
- cp package.json dist/angular-dev-utils/
39
- cp README.md dist/angular-dev-utils/
40
- cp LICENSE dist/angular-dev-utils/
41
-
42
- - name: Publish to npm Registry
43
- run: |
44
- cd dist/angular-dev-utils
45
- npm publish
46
- env:
47
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
48
-
49
- - name: Create Git Tag
50
- if: github.event.inputs.version != ''
51
- run: |
52
- git tag v${{ github.event.inputs.version }}
53
- git push origin v${{ github.event.inputs.version }}
package/angular.json DELETED
@@ -1,43 +0,0 @@
1
- {
2
- "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3
- "version": 1,
4
- "newProjectRoot": "projects",
5
- "projects": {
6
- "angular-dev-utils": {
7
- "projectType": "library",
8
- "root": "",
9
- "sourceRoot": "src",
10
- "prefix": "adu",
11
- "architect": {
12
- "build": {
13
- "builder": "@angular-devkit/build-angular:ng-packagr",
14
- "options": {
15
- "project": "ng-package.json"
16
- },
17
- "configurations": {
18
- "production": {
19
- "tsConfig": "tsconfig.lib.prod.json"
20
- },
21
- "development": {
22
- "tsConfig": "tsconfig.lib.json"
23
- }
24
- },
25
- "defaultConfiguration": "production"
26
- },
27
- "test": {
28
- "builder": "@angular-devkit/build-angular:karma",
29
- "options": {
30
- "tsConfig": "tsconfig.spec.json",
31
- "polyfills": [
32
- "zone.js",
33
- "zone.js/testing"
34
- ]
35
- }
36
- }
37
- }
38
- }
39
- },
40
- "cli": {
41
- "analytics": false
42
- }
43
- }
package/ng-package.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "./dist/angular-dev-utils",
4
- "lib": {
5
- "entryFile": "src/public-api.ts",
6
- "cssUrl": "inline"
7
- }
8
- }
@@ -1,100 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ButtonVariant, ButtonSize } from '../../models/types';
4
-
5
- @Component({
6
- selector: 'adu-button',
7
- standalone: true,
8
- imports: [CommonModule],
9
- template: `
10
- <button
11
- [type]="type"
12
- [disabled]="disabled || loading"
13
- [class]="buttonClasses"
14
- (click)="handleClick($event)"
15
- >
16
- <span *ngIf="loading" class="adu-button-spinner"></span>
17
- <ng-content></ng-content>
18
- </button>
19
- `,
20
- styles: [`
21
- .adu-button {
22
- @apply inline-flex items-center justify-center gap-2 font-medium rounded-md transition-colors duration-200;
23
- @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2;
24
- @apply disabled:pointer-events-none disabled:opacity-50;
25
- }
26
-
27
- /* Variants */
28
- .adu-button-primary {
29
- @apply bg-zinc-900 text-zinc-50 hover:bg-zinc-800 shadow-sm;
30
- }
31
-
32
- .adu-button-secondary {
33
- @apply bg-zinc-100 text-zinc-900 hover:bg-zinc-200 shadow-sm;
34
- }
35
-
36
- .adu-button-success {
37
- @apply bg-emerald-600 text-white hover:bg-emerald-700 shadow-sm;
38
- }
39
-
40
- .adu-button-danger {
41
- @apply bg-red-600 text-zinc-50 hover:bg-red-700 shadow-sm;
42
- }
43
-
44
- .adu-button-warning {
45
- @apply bg-amber-500 text-white hover:bg-amber-600 shadow-sm;
46
- }
47
-
48
- .adu-button-ghost {
49
- @apply bg-transparent hover:bg-zinc-100 hover:text-zinc-900 text-zinc-700;
50
- }
51
-
52
- .adu-button-outline {
53
- @apply border border-zinc-200 bg-white hover:bg-zinc-100 hover:text-zinc-900 text-zinc-900;
54
- }
55
-
56
- /* Sizes */
57
- .adu-button-sm {
58
- @apply h-9 px-3 text-sm rounded-md;
59
- }
60
-
61
- .adu-button-md {
62
- @apply h-10 px-4 text-sm;
63
- }
64
-
65
- .adu-button-lg {
66
- @apply h-11 px-8 text-base;
67
- }
68
-
69
- /* Loading Spinner */
70
- .adu-button-spinner {
71
- @apply inline-block w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin;
72
- }
73
- `]
74
- })
75
- export class ButtonComponent {
76
- @Input() variant: ButtonVariant = 'primary';
77
- @Input() size: ButtonSize = 'md';
78
- @Input() type: 'button' | 'submit' | 'reset' = 'button';
79
- @Input() disabled = false;
80
- @Input() loading = false;
81
- @Input() fullWidth = false;
82
-
83
- @Output() clicked = new EventEmitter<MouseEvent>();
84
-
85
- get buttonClasses(): string {
86
- const classes = ['adu-button', `adu-button-${this.variant}`, `adu-button-${this.size}`];
87
-
88
- if (this.fullWidth) {
89
- classes.push('w-full');
90
- }
91
-
92
- return classes.join(' ');
93
- }
94
-
95
- handleClick(event: MouseEvent): void {
96
- if (!this.disabled && !this.loading) {
97
- this.clicked.emit(event);
98
- }
99
- }
100
- }