cax-design-system 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/commentbox/commentbox.d.ts +111 -0
- package/commentbox/commentbox.module.d.ts +17 -0
- package/commentbox/index.d.ts +5 -0
- package/commentbox/public_api.d.ts +2 -0
- package/esm2022/card/card.mjs +2 -2
- package/esm2022/commentbox/cax-design-system-commentbox.mjs +5 -0
- package/esm2022/commentbox/commentbox.mjs +541 -0
- package/esm2022/commentbox/commentbox.module.mjs +27 -0
- package/esm2022/commentbox/public_api.mjs +3 -0
- package/esm2022/inputtext/inputtext.component.mjs +13 -4
- package/esm2022/inputtextarea/inputtextarea.component.mjs +8 -4
- package/esm2022/table/components/column-filter/column-filter.mjs +2 -2
- package/esm2022/upload/cax-design-system-upload.mjs +5 -0
- package/esm2022/upload/public_api.mjs +3 -0
- package/esm2022/upload/upload.component.mjs +355 -0
- package/esm2022/upload/upload.component.module.mjs +21 -0
- package/fesm2022/cax-design-system-card.mjs +2 -2
- package/fesm2022/cax-design-system-card.mjs.map +1 -1
- package/fesm2022/cax-design-system-commentbox.mjs +572 -0
- package/fesm2022/cax-design-system-commentbox.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputtext.mjs +12 -3
- package/fesm2022/cax-design-system-inputtext.mjs.map +1 -1
- package/fesm2022/cax-design-system-inputtextarea.mjs +7 -3
- package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -1
- package/fesm2022/cax-design-system-table.mjs +1 -1
- package/fesm2022/cax-design-system-table.mjs.map +1 -1
- package/fesm2022/cax-design-system-upload.mjs +380 -0
- package/fesm2022/cax-design-system-upload.mjs.map +1 -0
- package/inputtext/inputtext.component.d.ts +4 -1
- package/inputtextarea/inputtextarea.component.d.ts +2 -2
- package/package.json +156 -144
- package/resources/cax.min.scss +1 -1
- package/resources/cax.scss +83 -37
- package/resources/components/card/card.scss +1 -1
- package/resources/components/commentbox/commentbox.scss +604 -0
- package/resources/components/upload/upload.component.scss +147 -0
- package/upload/index.d.ts +5 -0
- package/upload/public_api.d.ts +2 -0
- package/upload/upload.component.d.ts +61 -0
- package/upload/upload.component.module.d.ts +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cax-design-system-commentbox.mjs","sources":["../../src/app/components/commentbox/commentbox.ts","../../src/app/components/commentbox/commentbox.html","../../src/app/components/commentbox/commentbox.module.ts","../../src/app/components/commentbox/cax-design-system-commentbox.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, HostListener } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n// Add this interface at the top of the file\ninterface Comment {\n text: string;\n date: Date;\n files?: Array<{ name: string; size: string }>;\n isAdmin?: boolean;\n sender?: string;\n}\n\ninterface GroupedComments {\n date: Date;\n items: Comment[];\n}\n\n@Component({\n selector: 'cax-comments',\n templateUrl: './commentbox.html',\n styleUrls: ['./commentbox.scss']\n})\nexport class CommentboxComponent {\n @Input() comments: Comment[] = [];\n @Input() mentionSuggestions: any[] = [];\n @Input() hashtagSuggestions: any[] = [];\n @Input() sidebarHeader: string;\n @Input() isAdmin: boolean = true;\n @Output() commentAdded = new EventEmitter<any>();\n @Output() fileSelected = new EventEmitter<File>();\n @Output() fileDownload = new EventEmitter<{ name: string; size: string }>();\n @Output() visibleChange = new EventEmitter<boolean>();\n newComment: string = '';\n\n isMentioning: boolean = false;\n isHashtagging: boolean = false;\n suggestions: any[] = [];\n selectedSuggestion: any = null;\n selectedSuggestionIndex: number = -1;\n filteredSuggestions: any[] = [];\n currentTokenType: 'mention' | 'hashtag' | null = null;\n cursorPosition: number = 0;\n\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild('suggestionPanel') suggestionPanel!: ElementRef;\n @ViewChild('inputText') inputText!: ElementRef;\n @ViewChild('commentsList') private commentsList!: ElementRef;\n @ViewChild('countChip') countChip!: ElementRef;\n selectedFiles: Array<{ name: string; size: string }> = [];\n selectedFilesMap: Map<number, { name: string; size: string }> = new Map();\n\n today: Date = new Date();\n\n overlayVisible: boolean = false;\n filesOverlayVisible: boolean = false;\n overlayPosition = { top: 0, left: 0 };\n\n private dateUpdateInterval: any;\n\n // Keep track of should auto scroll\n private shouldAutoScroll = true;\n private isUserScrolling = false;\n\n // Add new property for mutation observer\n private observer: MutationObserver;\n\n constructor(private sanitizer: DomSanitizer) {\n this.updateCurrentDate();\n this.dateUpdateInterval = setInterval(() => this.updateCurrentDate(), 60000);\n\n // Initialize observer\n this.observer = new MutationObserver(() => this.forceScrollToBottom());\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.forceScrollToBottom();\n }, 100);\n\n // Set up observer to auto-scroll when content changes\n if (this.commentsList?.nativeElement) {\n this.observer.observe(this.commentsList.nativeElement, {\n childList: true,\n subtree: true,\n characterData: true\n });\n }\n }\n\n ngOnDestroy() {\n if (this.dateUpdateInterval) {\n clearInterval(this.dateUpdateInterval);\n }\n // Disconnect the observer\n this.observer.disconnect();\n\n // Remove event listeners\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private updateCurrentDate(): void {\n this.today = new Date();\n }\n\n formatDate(date: Date): string {\n return date.toLocaleDateString(undefined, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\n });\n }\n\n formatMessageWithTags(text: string): SafeHtml {\n if (!text) return '';\n const sanitizedText = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n const htmlContent = sanitizedText.replace(/(@\\w+|#\\w+)/g, (match) => {\n if (match.startsWith('@')) {\n return `<span class=\"mention\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n } else if (match.startsWith('#')) {\n return `<span class=\"hashtag\" style=\"color: #0C4AF3; font-weight: 600;\">${match}</span>`;\n }\n return match;\n });\n\n return this.sanitizer.bypassSecurityTrustHtml(htmlContent);\n }\n\n addComment() {\n if (this.newComment.trim() || this.selectedFiles.length > 0) {\n const newComment: Comment = {\n text: this.newComment,\n date: new Date(),\n files: this.selectedFiles.length > 0 ? [...this.selectedFiles] : undefined,\n isAdmin: this.isAdmin,\n sender: this.isAdmin ? 'System Admin' : 'User'\n };\n\n this.comments = [...this.comments, newComment];\n this.commentAdded.emit(newComment);\n this.newComment = '';\n this.selectedFiles = [];\n this.selectedFilesMap.clear();\n this.filesOverlayVisible = false;\n\n if (this.suggestionPanel?.nativeElement) {\n this.suggestionPanel.nativeElement.style.display = 'none';\n }\n\n // Always scroll to bottom immediately\n this.scrollToBottom(true);\n }\n }\n\n private forceScrollToBottom(): void {\n if (!this.commentsList?.nativeElement) return;\n\n const element = this.commentsList.nativeElement;\n requestAnimationFrame(() => {\n try {\n // Force immediate scroll\n element.scrollTop = element.scrollHeight;\n } catch (err) {\n console.error('Scroll error:', err);\n }\n });\n }\n\n private scrollToBottom(force = false): void {\n if (force) {\n this.forceScrollToBottom();\n return;\n }\n if (!this.commentsList?.nativeElement) return;\n\n const element = this.commentsList.nativeElement;\n\n // Use double RAF for reliable scrolling\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n try {\n // Force immediate scroll for new comments\n element.scrollTop = element.scrollHeight;\n\n // Use smooth scrolling after initial jump\n element.scrollTo({\n top: element.scrollHeight,\n behavior: 'smooth'\n });\n } catch (err) {\n element.scrollTop = element.scrollHeight;\n }\n });\n });\n }\n\n @Input() set visible(value: boolean) {\n if (this._visible !== value) {\n this._visible = value;\n this.visibleChange.emit(this._visible);\n\n if (this._visible) {\n this.shouldAutoScroll = true;\n setTimeout(() => this.scrollToBottom(true), 300);\n }\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n private _visible: boolean = false;\n\n toggleComments() {\n this.visible = !this.visible;\n }\n\n onSidebarHide() {\n this._visible = false;\n this.visibleChange.emit(false);\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as HTMLElement;\n const isInputClick = this.inputText?.nativeElement?.contains(target);\n const isPanelClick = this.suggestionPanel?.nativeElement?.contains(target);\n\n if (!isInputClick && !isPanelClick) {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n }\n }\n\n handleKeyUp(event: any): void {\n // Update cursor position on every key press\n const input = event.target;\n this.cursorPosition = input.selectionStart || 0;\n\n if (event.key === 'Escape') {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n return;\n }\n\n if (event.key === '@' || event.key === '#') {\n this.currentTokenType = event.key === '@' ? 'mention' : 'hashtag';\n this.filteredSuggestions = this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n this.selectedSuggestionIndex = 0;\n\n const rect = input.getBoundingClientRect();\n const cursorPosition = this.getCursorPosition(input);\n\n this.overlayVisible = true;\n setTimeout(() => {\n const panel = this.suggestionPanel?.nativeElement;\n if (panel) {\n panel.style.left = `${rect.left + cursorPosition.left}px`;\n panel.style.top = `${rect.top - 10}px`;\n }\n });\n }\n\n if (this.currentTokenType) {\n const token = this.getTokenAtCursor(input.value, this.cursorPosition);\n if (token) {\n const searchTerm = token.slice(1).toLowerCase();\n this.filteredSuggestions = (this.currentTokenType === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions).filter((item) => item.name.toLowerCase().includes(searchTerm) || item.id.toLowerCase().includes(searchTerm));\n\n if (this.filteredSuggestions.length > 0) {\n this.overlayVisible = true;\n // Only reset selection index if we have new suggestions\n if (this.selectedSuggestionIndex < 0 || this.selectedSuggestionIndex >= this.filteredSuggestions.length) {\n this.selectedSuggestionIndex = 0;\n }\n } else {\n this.overlayVisible = false;\n this.selectedSuggestionIndex = -1;\n }\n } else {\n this.overlayVisible = false;\n this.currentTokenType = null;\n }\n }\n }\n\n getTokenAtCursor(text: string, cursorPos: number): string | null {\n const beforeCursor = text.slice(0, cursorPos);\n const match = beforeCursor.match(/[@#][^\\s]*$/);\n return match ? match[0] : null;\n }\n\n getWordAtPosition(text: string, position: number): string {\n const left = text.slice(0, position).search(/[@#][^\\s]*$/);\n if (left === -1) return '';\n return text.slice(left, position);\n }\n\n selectSuggestion(suggestion: any) {\n const input = this.newComment;\n const wordStart = input.slice(0, this.cursorPosition).search(/[@#][^\\s]*$/);\n\n this.newComment = input.slice(0, wordStart) + suggestion.value + ' ' + input.slice(this.cursorPosition);\n\n this.isMentioning = false;\n this.isHashtagging = false;\n }\n\n onSuggestionSelect(item: any) {\n const input = this.newComment;\n const beforeCursor = input.slice(0, this.cursorPosition);\n const afterCursor = input.slice(this.cursorPosition);\n const lastTokenIndex = Math.max(beforeCursor.lastIndexOf('@'), beforeCursor.lastIndexOf('#'));\n\n if (lastTokenIndex >= 0) {\n // Insert the suggestion at the cursor position\n this.newComment = beforeCursor.slice(0, lastTokenIndex) + item.id + ' ' + afterCursor;\n }\n\n this.suggestionPanel.nativeElement.style.display = 'none';\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n\n setTimeout(() => {\n const inputEl = this.inputText.nativeElement.querySelector('input');\n if (inputEl) {\n inputEl.focus();\n }\n });\n }\n\n onSuggestionPanelHide() {\n this.overlayVisible = false;\n this.currentTokenType = null;\n this.filteredSuggestions = [];\n this.selectedSuggestionIndex = -1;\n }\n\n getCursorPosition(input: HTMLInputElement): { left: number; top: number } {\n const selectionStart = input.selectionStart || 0;\n const textBeforeCursor = input.value.substring(0, selectionStart);\n const span = document.createElement('span');\n span.textContent = textBeforeCursor;\n span.style.cssText = window.getComputedStyle(input, null).cssText;\n span.style.visibility = 'hidden';\n document.body.appendChild(span);\n const position = {\n left: span.offsetWidth,\n top: span.offsetHeight\n };\n document.body.removeChild(span);\n return position;\n }\n\n onFileIconClick(event: Event): void {\n event?.preventDefault();\n event?.stopPropagation();\n if (this.fileInput?.nativeElement) {\n this.fileInput.nativeElement.click();\n }\n }\n\n onFileSelect(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n Array.from(input.files).forEach((file) => {\n // Check if file already exists in selection\n const fileExists = this.selectedFiles.some((existingFile) => existingFile.name === file.name && existingFile.size === this.formatFileSize(file.size));\n\n if (!fileExists) {\n const fileInfo = {\n name: file.name,\n size: this.formatFileSize(file.size)\n };\n this.selectedFiles.push(fileInfo);\n this.selectedFilesMap.set(this.selectedFiles.length - 1, fileInfo);\n this.fileSelected.emit(file);\n }\n });\n\n input.value = '';\n const inputEl = document.querySelector('.chat-input input');\n if (inputEl instanceof HTMLElement) {\n inputEl.focus();\n }\n }\n }\n\n private updateFileState(index: number, fromChip: boolean = true) {\n const actualIndex = fromChip ? index : index + 4;\n this.selectedFiles = this.selectedFiles.filter((_, i) => i !== actualIndex);\n this.selectedFilesMap.clear();\n this.selectedFiles.forEach((file, i) => {\n this.selectedFilesMap.set(i, file);\n });\n }\n\n removeFile(index: number, fromChip: boolean = true) {\n this.updateFileState(index, fromChip);\n if (this.selectedFiles.length <= 4) {\n this.hideFilesOverlay();\n }\n }\n\n getOverflowCount(): number {\n // Return count of files beyond the first 4\n return Math.max(0, this.selectedFiles.length - 4);\n }\n\n showFilesOverlay(event: MouseEvent) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n // Position the overlay below the count chip\n this.overlayPosition = {\n top: rect.bottom + 5,\n left: rect.left - 250 + rect.width / 2 // Center the overlay horizontally\n };\n\n this.filesOverlayVisible = true;\n\n // Add a click outside listener to close the overlay\n setTimeout(() => {\n document.addEventListener('click', this.handleClickOutside);\n });\n }\n\n hideFilesOverlay() {\n this.filesOverlayVisible = false;\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const overlay = document.querySelector('.files-overlay');\n const countChip = document.querySelector('.count-chip');\n\n if (overlay && !overlay.contains(target) && countChip && !countChip.contains(target)) {\n this.hideFilesOverlay();\n }\n };\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n showSuggestions(_event: any, type: 'mention' | 'hashtag') {\n this.currentTokenType = type;\n this.filteredSuggestions = type === 'mention' ? this.mentionSuggestions : this.hashtagSuggestions;\n if (this.suggestionPanel) {\n this.suggestionPanel.nativeElement.style.display = 'block';\n }\n }\n onKeyDown(event: KeyboardEvent) {\n // If suggestions are visible, handle keyboard navigation\n if (this.overlayVisible && this.filteredSuggestions.length > 0) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n this.scrollSuggestionIntoView();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n this.scrollSuggestionIntoView();\n break;\n case 'Tab':\n event.preventDefault();\n if (event.shiftKey) {\n // Shift+Tab - move up\n this.selectedSuggestionIndex = Math.max(this.selectedSuggestionIndex - 1, 0);\n } else {\n // Tab - move down\n this.selectedSuggestionIndex = Math.min(this.selectedSuggestionIndex + 1, this.filteredSuggestions.length - 1);\n }\n this.scrollSuggestionIntoView();\n break;\n case 'Enter':\n event.preventDefault();\n if (this.selectedSuggestionIndex >= 0) {\n this.onSuggestionSelect(this.filteredSuggestions[this.selectedSuggestionIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.onSuggestionPanelHide();\n break;\n }\n return;\n }\n\n // If no suggestions are visible, handle normal enter key press\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.addComment();\n }\n }\n\n // Helper method to scroll the selected suggestion into view\n private scrollSuggestionIntoView(): void {\n setTimeout(() => {\n const suggestionList = this.suggestionPanel?.nativeElement.querySelector('.suggestion-list');\n const selectedItem = suggestionList?.querySelector('.suggestion-item.selected');\n\n if (suggestionList && selectedItem) {\n const listRect = suggestionList.getBoundingClientRect();\n const itemRect = selectedItem.getBoundingClientRect();\n\n // Check if the selected item is outside the visible area\n if (itemRect.bottom > listRect.bottom) {\n // Item is below the visible area\n selectedItem.scrollIntoView({ block: 'end', behavior: 'smooth' });\n } else if (itemRect.top < listRect.top) {\n // Item is above the visible area\n selectedItem.scrollIntoView({ block: 'start', behavior: 'smooth' });\n }\n }\n });\n }\n\n onFileDownload(file: { name: string; size: string }) {\n this.fileDownload.emit(file);\n }\n\n get groupedComments(): GroupedComments[] {\n return this.comments\n .reduce((groups: GroupedComments[], comment: Comment) => {\n const commentDate = new Date(comment.date);\n commentDate.setHours(0, 0, 0, 0);\n\n const existingGroup = groups.find((group) => {\n const groupDate = new Date(group.date);\n groupDate.setHours(0, 0, 0, 0);\n return groupDate.getTime() === commentDate.getTime();\n });\n\n if (existingGroup) {\n existingGroup.items.push(comment);\n } else {\n groups.push({\n date: commentDate,\n items: [comment]\n });\n }\n\n return groups;\n }, [])\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n }\n\n getShortFileName(filename: string): string {\n if (filename.length <= 4) return filename;\n\n // Get file extension\n const lastDotIndex = filename.lastIndexOf('.');\n const extension = lastDotIndex !== -1 ? filename.substring(lastDotIndex) : '';\n\n // Truncate the name part and add the extension\n const namePart = filename.substring(0, lastDotIndex !== -1 ? lastDotIndex : filename.length);\n return namePart.substring(0, 4) + '..' + extension;\n }\n}\n","<cax-sidebar [(visible)]=\"visible\" [position]=\"'right'\" [baseZIndex]=\"10000\" (onHide)=\"onSidebarHide()\" [headerText]=\"sidebarHeader\">\r\n <ng-template caxTemplate=\"content\">\r\n <div class=\"cax-comments-container\">\r\n <div class=\"cax-comments-list\" #commentsList>\r\n <ng-container *ngFor=\"let group of groupedComments\">\r\n <div class=\"cax-date-header\">{{ formatDate(group.date) }}</div>\r\n <div\r\n class=\"cax-comment-item\"\r\n *ngFor=\"let comment of group.items; let i = index\"\r\n [ngClass]=\"{\r\n 'cax-user-comment': !comment.isAdmin,\r\n 'cax-admin-comment': comment.isAdmin,\r\n 'consecutive-message': i > 0 && comment.isAdmin === group.items[i-1].isAdmin && comment.sender === group.items[i-1].sender,\r\n 'new-sender': i > 0 && comment.sender !== group.items[i-1].sender,\r\n 'new-date': i === 0 && group.items.length > 0\r\n }\"\r\n >\r\n <!-- User Message (Left Aligned) -->\r\n <ng-container *ngIf=\"!comment.isAdmin\">\r\n <div class=\"cax-commentbox-avatar-container\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">\r\n <cax-avatar [label]=\"comment.sender?.substring(0, 2).toUpperCase() || 'U'\" [avatarSize]=\"'xs'\" [shape]=\"'circle'\" styleclass=\"cax-commentbox-avatar\"> </cax-avatar>\r\n </div>\r\n <div class=\"cax-comment-content\" [class.no-avatar]=\"i > 0 && group.items[i-1].sender === comment.sender\">\r\n <div class=\"cax-comment-sender\" *ngIf=\"i === 0 || group.items[i-1].sender !== comment.sender\">{{comment.sender}}</div>\r\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\r\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\r\n <div class=\"file-details\">\r\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\r\n <span class=\"file-size\">{{file.size}}</span>\r\n </div>\r\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\r\n </div>\r\n </div>\r\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\r\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Admin Message (Right Aligned) -->\r\n <ng-container *ngIf=\"comment.isAdmin\">\r\n <div class=\"cax-comment-content admin\">\r\n <div class=\"cax-file-attachment\" *ngIf=\"comment.files?.length\">\r\n <div *ngFor=\"let file of comment.files\" class=\"file-item\">\r\n <div class=\"file-details\">\r\n <span class=\"file-name\">{{ file.name.slice(0, 20) }}{{ file.name.includes('.') ? '.' + file.name.split('.').pop() : '' }}</span>\r\n <span class=\"file-size\">{{file.size}}</span>\r\n </div>\r\n <i class=\"cax cax-download\" (click)=\"onFileDownload(file)\" role=\"button\" tabindex=\"0\"></i>\r\n </div>\r\n </div>\r\n <div class=\"cax-comment-text\" [innerHTML]=\"formatMessageWithTags(comment.text)\"></div>\r\n <span class=\"cax-comment-date\">{{ comment.date | date: 'shortTime' }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <cax-overlay #suggestionPanel [(visible)]=\"overlayVisible\" [appendTo]=\"inputText\" (onHide)=\"onSuggestionPanelHide()\" [styleClass]=\"'suggestion-panel'\">\r\n <div class=\"suggestion-list\">\r\n <div *ngFor=\"let item of filteredSuggestions; let i = index\" class=\"suggestion-item\" [ngClass]=\"{'selected': selectedSuggestionIndex === i}\" (click)=\"onSuggestionSelect(item)\" (mouseenter)=\"selectedSuggestionIndex = i\">\r\n <span class=\"suggestion-label\">{{item.name}}</span>\r\n <small class=\"suggestion-id\" *ngIf=\"currentTokenType === 'mention'\">{{item.id}}</small>\r\n </div>\r\n </div>\r\n </cax-overlay>\r\n <cax-overlay\r\n [(visible)]=\"filesOverlayVisible\"\r\n [appendTo]=\"countChip\"\r\n [showTransitionOptions]=\"'0.12s ease-out'\"\r\n [hideTransitionOptions]=\"'0.1s ease-in'\"\r\n [style]=\"{ width: '224px', right: '5%' }\"\r\n styleClass=\"files-list-overlay\"\r\n (onHide)=\"hideFilesOverlay()\"\r\n >\r\n <div class=\"files-overlay-content\">\r\n <div *ngFor=\"let file of selectedFiles.slice(4); let i = index\" class=\"file-item\">\r\n <span class=\"file-name\">{{getShortFileName(file.name)}}</span>\r\n <i class=\"cax cax-close-circle\" (click)=\"removeFile(i + 4)\"></i>\r\n </div>\r\n </div>\r\n </cax-overlay>\r\n\r\n <ng-template caxTemplate=\"footer\">\r\n <div class=\"chat-footer\">\r\n <div class=\"selected-files\" *ngIf=\"selectedFiles.length > 0\">\r\n <cax-chip *ngFor=\"let file of selectedFiles.slice(0, 4); let i = index\" [label]=\"getShortFileName(file.name)\" [removable]=\"true\" [size]=\"'lg'\" (onRemove)=\"removeFile(i, true)\">\r\n <ng-template caxTemplate=\"content\">\r\n <i class=\"cax cax-paperclip\"></i>\r\n </ng-template>\r\n </cax-chip>\r\n <cax-chip #countChip *ngIf=\"selectedFiles.length > 4\" [label]=\"'+' + getOverflowCount()\" [size]=\"'lg'\" (mouseenter)=\"showFilesOverlay($event)\"> </cax-chip>\r\n </div>\r\n <div class=\"cax-chat-input-container\">\r\n <div class=\"input-wrapper\">\r\n <cax-inputtext\r\n [(ngModel)]=\"newComment\"\r\n [size]=\"'lg'\"\r\n [rightIcon]=\"true\"\r\n [clearIcon]=\"false\"\r\n [rightIconClass]=\"'cax cax-paperclip'\"\r\n [rightIconClickable]=\"true\"\r\n (rightIconClick)=\"onFileIconClick($event)\"\r\n placeholder=\"Comment or mention others with @, ‘#’ for columns\"\r\n (keyup)=\"handleKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [class]=\"{'chat-input': true, 'admin-input': isAdminSender}\"\r\n [style]=\"{'border-radius': '8px', background: '#ffffff'}\"\r\n #inputText\r\n >\r\n </cax-inputtext>\r\n </div>\r\n\r\n <cax-button [icon]=\"'cax cax-plain'\" [severity]=\"'primary'\" [size]=\"'large'\" (click)=\"addComment()\" [disabled]=\"!newComment.trim() && selectedFiles.length === 0\" class=\"send-button\"> </cax-button>\r\n </div>\r\n\r\n <input #fileInput type=\"file\" (change)=\"onFileSelect($event)\" style=\"display: none\" accept=\"*/*\" multiple />\r\n </div>\r\n </ng-template>\r\n</cax-sidebar>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { CommentboxComponent } from './commentbox';\nimport { InputTextModule } from 'cax-design-system/inputtext';\nimport { ButtonModule } from 'cax-design-system/button';\nimport { ChipModule } from 'cax-design-system/chip';\nimport { OverlayModule } from 'cax-design-system/overlay';\nimport { AvatarModule } from 'cax-design-system/avatar';\nimport { SharedModule } from 'cax-design-system/api';\nimport { RippleModule } from 'cax-design-system/ripple';\nimport { Sidebar } from 'cax-design-system/sidebar';\n\n@NgModule({\n declarations: [CommentboxComponent],\n imports: [CommonModule, FormsModule, Sidebar, InputTextModule, ButtonModule, ChipModule, OverlayModule, AvatarModule, RippleModule, SharedModule],\n exports: [CommentboxComponent]\n})\nexport class CommentboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,7 @@ class InputTextComponent {
|
|
|
88
88
|
showLabel = true;
|
|
89
89
|
leftIcon = false;
|
|
90
90
|
rightIcon = false;
|
|
91
|
+
rightIconClickable = false;
|
|
91
92
|
clearIcon = false;
|
|
92
93
|
label;
|
|
93
94
|
iconPath;
|
|
@@ -102,6 +103,7 @@ class InputTextComponent {
|
|
|
102
103
|
size = 'md';
|
|
103
104
|
styleClass;
|
|
104
105
|
valueChange = new EventEmitter();
|
|
106
|
+
rightIconClick = new EventEmitter();
|
|
105
107
|
onChange = () => { };
|
|
106
108
|
onTouched = () => { };
|
|
107
109
|
writeValue(value) {
|
|
@@ -129,14 +131,17 @@ class InputTextComponent {
|
|
|
129
131
|
this.onChange(this.value);
|
|
130
132
|
this.onTouched();
|
|
131
133
|
}
|
|
134
|
+
onRightIconClick() {
|
|
135
|
+
this.rightIconClick.emit();
|
|
136
|
+
}
|
|
132
137
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InputTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InputTextComponent, selector: "cax-inputtext", inputs: { value: "value", placeholder: "placeholder", disabled: "disabled", maxlength: "maxlength", successText: "successText", errorText: "errorText", showLabel: "showLabel", leftIcon: "leftIcon", rightIcon: "rightIcon", clearIcon: "clearIcon", label: "label", iconPath: "iconPath", disabledIcon: "disabledIcon", showIcon: "showIcon", iconClass: "iconClass", leftIconClass: "leftIconClass", rightIconClass: "rightIconClass", invalid: "invalid", required: "required", style: "style", size: "size", styleClass: "styleClass" }, outputs: { valueChange: "valueChange" }, providers: [
|
|
138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: InputTextComponent, selector: "cax-inputtext", inputs: { value: "value", placeholder: "placeholder", disabled: "disabled", maxlength: "maxlength", successText: "successText", errorText: "errorText", showLabel: "showLabel", leftIcon: "leftIcon", rightIcon: "rightIcon", rightIconClickable: "rightIconClickable", clearIcon: "clearIcon", label: "label", iconPath: "iconPath", disabledIcon: "disabledIcon", showIcon: "showIcon", iconClass: "iconClass", leftIconClass: "leftIconClass", rightIconClass: "rightIconClass", invalid: "invalid", required: "required", style: "style", size: "size", styleClass: "styleClass" }, outputs: { valueChange: "valueChange", rightIconClick: "rightIconClick" }, providers: [
|
|
134
139
|
{
|
|
135
140
|
provide: NG_VALUE_ACCESSOR,
|
|
136
141
|
useExisting: forwardRef(() => InputTextComponent),
|
|
137
142
|
multi: true
|
|
138
143
|
}
|
|
139
|
-
], ngImport: i0, template: "<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtext{font-weight:500;padding:8px 10px;border-radius:8px}.cax-fluid .cax-inputtext{width:100%}.cax-inputgroup{display:flex;align-items:stretch}.cax-inputgroup-addon{display:flex;align-items:center;justify-content:center}.cax-inputgroup .cax-float-label{display:flex;align-items:stretch;width:100%}.cax-inputgroup .cax-inputtext,.cax-fluid .cax-inputgroup .cax-inputtext,.cax-inputgroup .cax-inputwrapper,.cax-inputgroup .cax-inputwrapper>.cax-component{flex:1 1 auto;width:1%}.cax-float-label{display:block;position:relative}.cax-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.cax-float-label textarea~label{top:1rem}.cax-float-label input:focus~label,.cax-float-label input.cax-filled~label,.cax-float-label textarea:focus~label,.cax-float-label textarea.cax-filled~label,.cax-float-label .cax-inputwrapper-focus~label,.cax-float-label .cax-inputwrapper-filled~label{top:-.75rem;font-size:12px}.cax-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.cax-float-label .cax-placeholder,.cax-float-label input::placeholder,.cax-float-label .cax-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.cax-float-label .cax-focus .cax-placeholder,.cax-float-label input:focus::placeholder,.cax-float-label .cax-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.cax-input-icon-left,.cax-input-icon-right{position:relative;display:inline-block;margin-bottom:.3rem}.cax-input-icon-left>i,.cax-input-icon-left>.cax-icon-wrapper,.cax-input-icon-right>i,.cax-input-icon-right>.cax-icon-wrapper{position:absolute;top:50%;margin-top:-.5rem}.cax-fluid .cax-input-icon-left,.cax-fluid .cax-input-icon-right{display:block;width:100%}.input-disabled,.disabled-opacity{opacity:.5}input:enabled:focus{outline:none}.non-clickable-icon{cursor:default}.cax-inputtext.full-width{width:100%}.cax-input-wrapper{position:relative;display:inline-flex;align-items:center;width:fit-content}.cax-icon-left{left:10px}.cax-icon-right{right:10px}.cax-fluid .cax-input-wrapper{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputtextDirective, selector: "[caxInputText]", inputs: ["placeholder", "disabled", "variant"], outputs: ["valueChange"] }] });
|
|
144
|
+
], ngImport: i0, template: "<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\"\r\n [ngClass]=\"{'clickable-icon': rightIconClickable}\"\r\n (click)=\"rightIconClickable && onRightIconClick()\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtext{font-weight:500;padding:8px 10px;border-radius:8px}.cax-fluid .cax-inputtext{width:100%}.cax-inputgroup{display:flex;align-items:stretch}.cax-inputgroup-addon{display:flex;align-items:center;justify-content:center}.cax-inputgroup .cax-float-label{display:flex;align-items:stretch;width:100%}.cax-inputgroup .cax-inputtext,.cax-fluid .cax-inputgroup .cax-inputtext,.cax-inputgroup .cax-inputwrapper,.cax-inputgroup .cax-inputwrapper>.cax-component{flex:1 1 auto;width:1%}.cax-float-label{display:block;position:relative}.cax-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.cax-float-label textarea~label{top:1rem}.cax-float-label input:focus~label,.cax-float-label input.cax-filled~label,.cax-float-label textarea:focus~label,.cax-float-label textarea.cax-filled~label,.cax-float-label .cax-inputwrapper-focus~label,.cax-float-label .cax-inputwrapper-filled~label{top:-.75rem;font-size:12px}.cax-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.cax-float-label .cax-placeholder,.cax-float-label input::placeholder,.cax-float-label .cax-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.cax-float-label .cax-focus .cax-placeholder,.cax-float-label input:focus::placeholder,.cax-float-label .cax-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.cax-input-icon-left,.cax-input-icon-right{position:relative;display:inline-block;margin-bottom:.3rem}.cax-input-icon-left>i,.cax-input-icon-left>.cax-icon-wrapper,.cax-input-icon-right>i,.cax-input-icon-right>.cax-icon-wrapper{position:absolute;top:50%;margin-top:-.5rem}.cax-fluid .cax-input-icon-left,.cax-fluid .cax-input-icon-right{display:block;width:100%}.input-disabled,.disabled-opacity{opacity:.5}input:enabled:focus{outline:none}.non-clickable-icon{cursor:default}.cax-inputtext.full-width{width:100%}.cax-input-wrapper{position:relative;display:inline-flex;align-items:center;width:fit-content}.cax-icon-left{left:10px}.cax-icon-right{right:10px}.cax-fluid .cax-input-wrapper{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputtextDirective, selector: "[caxInputText]", inputs: ["placeholder", "disabled", "variant"], outputs: ["valueChange"] }] });
|
|
140
145
|
}
|
|
141
146
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InputTextComponent, decorators: [{
|
|
142
147
|
type: Component,
|
|
@@ -146,7 +151,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
146
151
|
useExisting: forwardRef(() => InputTextComponent),
|
|
147
152
|
multi: true
|
|
148
153
|
}
|
|
149
|
-
], template: "<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtext{font-weight:500;padding:8px 10px;border-radius:8px}.cax-fluid .cax-inputtext{width:100%}.cax-inputgroup{display:flex;align-items:stretch}.cax-inputgroup-addon{display:flex;align-items:center;justify-content:center}.cax-inputgroup .cax-float-label{display:flex;align-items:stretch;width:100%}.cax-inputgroup .cax-inputtext,.cax-fluid .cax-inputgroup .cax-inputtext,.cax-inputgroup .cax-inputwrapper,.cax-inputgroup .cax-inputwrapper>.cax-component{flex:1 1 auto;width:1%}.cax-float-label{display:block;position:relative}.cax-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.cax-float-label textarea~label{top:1rem}.cax-float-label input:focus~label,.cax-float-label input.cax-filled~label,.cax-float-label textarea:focus~label,.cax-float-label textarea.cax-filled~label,.cax-float-label .cax-inputwrapper-focus~label,.cax-float-label .cax-inputwrapper-filled~label{top:-.75rem;font-size:12px}.cax-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.cax-float-label .cax-placeholder,.cax-float-label input::placeholder,.cax-float-label .cax-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.cax-float-label .cax-focus .cax-placeholder,.cax-float-label input:focus::placeholder,.cax-float-label .cax-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.cax-input-icon-left,.cax-input-icon-right{position:relative;display:inline-block;margin-bottom:.3rem}.cax-input-icon-left>i,.cax-input-icon-left>.cax-icon-wrapper,.cax-input-icon-right>i,.cax-input-icon-right>.cax-icon-wrapper{position:absolute;top:50%;margin-top:-.5rem}.cax-fluid .cax-input-icon-left,.cax-fluid .cax-input-icon-right{display:block;width:100%}.input-disabled,.disabled-opacity{opacity:.5}input:enabled:focus{outline:none}.non-clickable-icon{cursor:default}.cax-inputtext.full-width{width:100%}.cax-input-wrapper{position:relative;display:inline-flex;align-items:center;width:fit-content}.cax-icon-left{left:10px}.cax-icon-right{right:10px}.cax-fluid .cax-input-wrapper{width:100%}}\n"] }]
|
|
154
|
+
], template: "<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\"\r\n [ngClass]=\"{'clickable-icon': rightIconClickable}\"\r\n (click)=\"rightIconClickable && onRightIconClick()\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtext{font-weight:500;padding:8px 10px;border-radius:8px}.cax-fluid .cax-inputtext{width:100%}.cax-inputgroup{display:flex;align-items:stretch}.cax-inputgroup-addon{display:flex;align-items:center;justify-content:center}.cax-inputgroup .cax-float-label{display:flex;align-items:stretch;width:100%}.cax-inputgroup .cax-inputtext,.cax-fluid .cax-inputgroup .cax-inputtext,.cax-inputgroup .cax-inputwrapper,.cax-inputgroup .cax-inputwrapper>.cax-component{flex:1 1 auto;width:1%}.cax-float-label{display:block;position:relative}.cax-float-label label{position:absolute;pointer-events:none;top:50%;margin-top:-.5rem;transition-property:all;transition-timing-function:ease;line-height:1}.cax-float-label textarea~label{top:1rem}.cax-float-label input:focus~label,.cax-float-label input.cax-filled~label,.cax-float-label textarea:focus~label,.cax-float-label textarea.cax-filled~label,.cax-float-label .cax-inputwrapper-focus~label,.cax-float-label .cax-inputwrapper-filled~label{top:-.75rem;font-size:12px}.cax-float-label .input:-webkit-autofill~label{top:-20px;font-size:12px}.cax-float-label .cax-placeholder,.cax-float-label input::placeholder,.cax-float-label .cax-inputtext::placeholder{opacity:0;transition-property:all;transition-timing-function:ease}.cax-float-label .cax-focus .cax-placeholder,.cax-float-label input:focus::placeholder,.cax-float-label .cax-inputtext:focus::placeholder{opacity:1;transition-property:all;transition-timing-function:ease}.cax-input-icon-left,.cax-input-icon-right{position:relative;display:inline-block;margin-bottom:.3rem}.cax-input-icon-left>i,.cax-input-icon-left>.cax-icon-wrapper,.cax-input-icon-right>i,.cax-input-icon-right>.cax-icon-wrapper{position:absolute;top:50%;margin-top:-.5rem}.cax-fluid .cax-input-icon-left,.cax-fluid .cax-input-icon-right{display:block;width:100%}.input-disabled,.disabled-opacity{opacity:.5}input:enabled:focus{outline:none}.non-clickable-icon{cursor:default}.cax-inputtext.full-width{width:100%}.cax-input-wrapper{position:relative;display:inline-flex;align-items:center;width:fit-content}.cax-icon-left{left:10px}.cax-icon-right{right:10px}.cax-fluid .cax-input-wrapper{width:100%}}\n"] }]
|
|
150
155
|
}], propDecorators: { value: [{
|
|
151
156
|
type: Input
|
|
152
157
|
}], placeholder: [{
|
|
@@ -165,6 +170,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
165
170
|
type: Input
|
|
166
171
|
}], rightIcon: [{
|
|
167
172
|
type: Input
|
|
173
|
+
}], rightIconClickable: [{
|
|
174
|
+
type: Input
|
|
168
175
|
}], clearIcon: [{
|
|
169
176
|
type: Input
|
|
170
177
|
}], label: [{
|
|
@@ -193,6 +200,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
193
200
|
type: Input
|
|
194
201
|
}], valueChange: [{
|
|
195
202
|
type: Output
|
|
203
|
+
}], rightIconClick: [{
|
|
204
|
+
type: Output
|
|
196
205
|
}] } });
|
|
197
206
|
|
|
198
207
|
class InputTextModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cax-design-system-inputtext.mjs","sources":["../../src/app/components/inputtext/inputtext.directive.ts","../../src/app/components/inputtext/inputtext.component.ts","../../src/app/components/inputtext/inputtext.html","../../src/app/components/inputtext/inputtext.module.ts","../../src/app/components/inputtext/cax-design-system-inputtext.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, DoCheck, Optional, ChangeDetectorRef, AfterViewInit, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\ntype Nullable<T> = T | null | undefined;\n@Directive({\n selector: '[caxInputText]',\n host: {\n class: 'cax-inputtext cax-component cax-element',\n '[class.cax-filled]': 'filled',\n '[disabled]': 'disabled'\n }\n})\nexport class InputtextDirective implements DoCheck, AfterViewInit {\n filled: Nullable<boolean>;\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n\n constructor(\n public el: ElementRef,\n @Optional() public ngModel: NgModel,\n private cd: ChangeDetectorRef,\n private renderer: Renderer2\n ) {}\n\n ngAfterViewInit() {\n this.updateFilledState();\n this.cd.detectChanges();\n this.applyDynamicAttributes();\n }\n\n ngDoCheck() {\n this.updateFilledState();\n }\n\n @HostListener('input', ['$event'])\n onInput() {\n this.updateFilledState();\n }\n\n private applyDynamicAttributes() {\n const input = this.el.nativeElement;\n\n if (this.placeholder) {\n this.renderer.setAttribute(input, 'placeholder', this.placeholder);\n }\n if (this.disabled) {\n this.renderer.setAttribute(input, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(input, 'disabled');\n }\n }\n\n updateFilledState() {\n this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) || (this.ngModel && this.ngModel.model);\n }\n\n clearInput() {\n this.valueChange.emit('');\n }\n}\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cax-inputtext',\n templateUrl: './inputtext.html',\n styleUrls: ['./inputtext.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextComponent),\n multi: true\n }\n ]\n})\nexport class InputTextComponent implements ControlValueAccessor {\n @Input() value: string = '';\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Input() maxlength?: number;\n @Input() successText?: string;\n @Input() errorText?: string;\n @Input() showLabel?: boolean = true;\n @Input() leftIcon?: boolean = false;\n @Input() rightIcon?: boolean = false;\n @Input() clearIcon: boolean = false;\n @Input() label?: string;\n @Input() iconPath?: string;\n @Input() disabledIcon: boolean = false;\n @Input() showIcon?: boolean = false;\n @Input() iconClass: string = '';\n @Input() leftIconClass: string = '';\n @Input() rightIconClass: string = '';\n @Input() invalid: boolean = false;\n @Input() required: boolean = true;\n @Input() style?: { [key: string]: string };\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() styleClass?: string;\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\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 onInput(event: Event | string): void {\n const newValue = typeof event === 'string' ? event : (event.target as HTMLInputElement)?.value || '';\n this.value = newValue;\n this.valueChange.emit(newValue);\n this.onChange(newValue);\n this.onTouched();\n }\n\n clearInput(): void {\n this.value = '';\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n this.onTouched();\n }\n}\n","<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputtextDirective } from './inputtext.directive';\nimport { InputTextComponent } from './inputtext.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [InputTextComponent, InputtextDirective],\n exports: [InputTextComponent, InputtextDirective]\n})\nexport class InputTextModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i3.InputtextDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cax-design-system-inputtext.mjs","sources":["../../src/app/components/inputtext/inputtext.directive.ts","../../src/app/components/inputtext/inputtext.component.ts","../../src/app/components/inputtext/inputtext.html","../../src/app/components/inputtext/inputtext.module.ts","../../src/app/components/inputtext/cax-design-system-inputtext.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, DoCheck, Optional, ChangeDetectorRef, AfterViewInit, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\ntype Nullable<T> = T | null | undefined;\n@Directive({\n selector: '[caxInputText]',\n host: {\n class: 'cax-inputtext cax-component cax-element',\n '[class.cax-filled]': 'filled',\n '[disabled]': 'disabled'\n }\n})\nexport class InputtextDirective implements DoCheck, AfterViewInit {\n filled: Nullable<boolean>;\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n\n constructor(\n public el: ElementRef,\n @Optional() public ngModel: NgModel,\n private cd: ChangeDetectorRef,\n private renderer: Renderer2\n ) {}\n\n ngAfterViewInit() {\n this.updateFilledState();\n this.cd.detectChanges();\n this.applyDynamicAttributes();\n }\n\n ngDoCheck() {\n this.updateFilledState();\n }\n\n @HostListener('input', ['$event'])\n onInput() {\n this.updateFilledState();\n }\n\n private applyDynamicAttributes() {\n const input = this.el.nativeElement;\n\n if (this.placeholder) {\n this.renderer.setAttribute(input, 'placeholder', this.placeholder);\n }\n if (this.disabled) {\n this.renderer.setAttribute(input, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(input, 'disabled');\n }\n }\n\n updateFilledState() {\n this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) || (this.ngModel && this.ngModel.model);\n }\n\n clearInput() {\n this.valueChange.emit('');\n }\n}\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cax-inputtext',\n templateUrl: './inputtext.html',\n styleUrls: ['./inputtext.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextComponent),\n multi: true\n }\n ]\n})\nexport class InputTextComponent implements ControlValueAccessor {\n @Input() value: string = '';\n @Input() placeholder: string = '';\n @Input() disabled: boolean = false;\n @Input() maxlength?: number;\n @Input() successText?: string;\n @Input() errorText?: string;\n @Input() showLabel?: boolean = true;\n @Input() leftIcon?: boolean = false;\n @Input() rightIcon?: boolean = false;\n @Input() rightIconClickable?: boolean = false;\n @Input() clearIcon: boolean = false;\n @Input() label?: string;\n @Input() iconPath?: string;\n @Input() disabledIcon: boolean = false;\n @Input() showIcon?: boolean = false;\n @Input() iconClass: string = '';\n @Input() leftIconClass: string = '';\n @Input() rightIconClass: string = '';\n @Input() invalid: boolean = false;\n @Input() required: boolean = true;\n @Input() style?: { [key: string]: string };\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() styleClass?: string;\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() rightIconClick: EventEmitter<void> = new EventEmitter<void>();\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\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 onInput(event: Event | string): void {\n const newValue = typeof event === 'string' ? event : (event.target as HTMLInputElement)?.value || '';\n this.value = newValue;\n this.valueChange.emit(newValue);\n this.onChange(newValue);\n this.onTouched();\n }\n\n clearInput(): void {\n this.value = '';\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n this.onTouched();\n }\n\n onRightIconClick(): void {\n this.rightIconClick.emit();\n }\n}\n","<div class=\"cax-input-container\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"'cax-input-size-' + size\"\r\n [ngStyle]=\"style\">\r\n <label *ngIf=\"label\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\">{{ label }}</label>\r\n\r\n <div class=\"cax-input-wrapper\"\r\n [ngClass]=\"{\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value,\r\n 'input-disabled': disabled\r\n }\"\r\n >\r\n <!-- Left Icon -->\r\n <span *ngIf=\"leftIcon\"\r\n class=\"cax-icon-container cax-icon-left\">\r\n <i [ngClass]=\"leftIconClass\"></i>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n type=\"text\"\r\n caxInputText\r\n [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onInput($event)\"\r\n [maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [ngStyle]=\"style\"\r\n [ngClass]=\"{\r\n 'cax-inputtext': true,\r\n 'cax-input-invalid': invalid,\r\n 'with-left-icon': leftIcon,\r\n 'with-right-icon': rightIcon,\r\n 'with-clear-icon': clearIcon && value\r\n }\"\r\n />\r\n\r\n <!-- Clear Icon (before right icon) -->\r\n <span *ngIf=\"clearIcon && value\"\r\n class=\"cax-icon-container cax-clear-icon clickable-icon\"\r\n [ngClass]=\"{'no-right-icon': !rightIcon}\"\r\n (click)=\"clearInput()\">\r\n <i class=\"cax cax-close-circle\"></i>\r\n </span>\r\n\r\n <!-- Right Icon -->\r\n <span *ngIf=\"rightIcon\"\r\n class=\"cax-icon-container cax-icon-right\"\r\n [ngClass]=\"{'clickable-icon': rightIconClickable}\"\r\n (click)=\"rightIconClickable && onRightIconClick()\">\r\n <i [ngClass]=\"rightIconClass\"></i>\r\n </span>\r\n </div>\r\n\r\n <!-- Error Message with conditional opacity -->\r\n <small *ngIf=\"invalid\" id=\"helper-text\" class=\"cax-error disabled-opacity\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ errorText }} </small>\r\n\r\n <!-- Helper Text with conditional opacity -->\r\n <small *ngIf=\"successText && !invalid\" id=\"helper-text\" class=\"cax-helper-text\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ successText }} </small>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputtextDirective } from './inputtext.directive';\nimport { InputTextComponent } from './inputtext.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [InputTextComponent, InputtextDirective],\n exports: [InputTextComponent, InputtextDirective]\n})\nexport class InputTextModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i3.InputtextDirective"],"mappings":"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"}
|
|
@@ -168,6 +168,7 @@ class InputTextareaComponent {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
valueChange = new EventEmitter();
|
|
171
|
+
// Changed from private to public to allow access from template
|
|
171
172
|
onChange = () => { };
|
|
172
173
|
onTouched = () => { };
|
|
173
174
|
writeValue(value) {
|
|
@@ -187,7 +188,10 @@ class InputTextareaComponent {
|
|
|
187
188
|
this.value = input.value;
|
|
188
189
|
this.valueChange.emit(this.value);
|
|
189
190
|
this.onChange(this.value);
|
|
190
|
-
|
|
191
|
+
// Also handle resize if autoResize is enabled
|
|
192
|
+
if (this.autoResize) {
|
|
193
|
+
this.resize(event);
|
|
194
|
+
}
|
|
191
195
|
}
|
|
192
196
|
resize(event) {
|
|
193
197
|
this.el.nativeElement.style.height = 'auto';
|
|
@@ -208,7 +212,7 @@ class InputTextareaComponent {
|
|
|
208
212
|
useExisting: forwardRef(() => InputTextareaComponent),
|
|
209
213
|
multi: true
|
|
210
214
|
}
|
|
211
|
-
], viewQueries: [{ propertyName: "el", first: true, predicate: ["textarea"], descendants: true }], ngImport: i0, template: "<div class=\"cax-input-container\">\r\n
|
|
215
|
+
], viewQueries: [{ propertyName: "el", first: true, predicate: ["textarea"], descendants: true }], ngImport: i0, template: "<div class=\"cax-input-container\">\r\n <label [attr.for]=\"textareaId\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ label }} </label>\r\n <textarea\r\n #textarea\r\n [rows]=\"rows\"\r\n [cols]=\"cols\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxlength\"\r\n [minlength]=\"minlength\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly ? true : null\"\r\n [ngClass]=\"{\r\n 'filled-style': variant === 'filled',\r\n 'outlined-style': variant === 'outlined',\r\n 'cax-inputtextarea-disabled': disabled,\r\n 'disabled-opacity': disabled\r\n }\"\r\n caxInputTextarea\r\n [autoResize]=\"autoResize\"\r\n (input)=\"onInput($event)\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"value = $event; valueChange.emit($event); onChange($event); onTouched()\"\r\n (blur)=\"onTouched()\"\r\n [ngStyle]=\"style\"\r\n ></textarea>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtextarea-resizable{overflow:hidden;resize:none}.cax-fluid .cax-inputtextarea{width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputTextareadirective, selector: "[caxInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }] });
|
|
212
216
|
}
|
|
213
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: InputTextareaComponent, decorators: [{
|
|
214
218
|
type: Component,
|
|
@@ -218,7 +222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
218
222
|
useExisting: forwardRef(() => InputTextareaComponent),
|
|
219
223
|
multi: true
|
|
220
224
|
}
|
|
221
|
-
], template: "<div class=\"cax-input-container\">\r\n
|
|
225
|
+
], template: "<div class=\"cax-input-container\">\r\n <label [attr.for]=\"textareaId\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ label }} </label>\r\n <textarea\r\n #textarea\r\n [rows]=\"rows\"\r\n [cols]=\"cols\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxlength\"\r\n [minlength]=\"minlength\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly ? true : null\"\r\n [ngClass]=\"{\r\n 'filled-style': variant === 'filled',\r\n 'outlined-style': variant === 'outlined',\r\n 'cax-inputtextarea-disabled': disabled,\r\n 'disabled-opacity': disabled\r\n }\"\r\n caxInputTextarea\r\n [autoResize]=\"autoResize\"\r\n (input)=\"onInput($event)\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"value = $event; valueChange.emit($event); onChange($event); onTouched()\"\r\n (blur)=\"onTouched()\"\r\n [ngStyle]=\"style\"\r\n ></textarea>\r\n</div>\r\n", styles: ["@layer cax{.cax-inputtextarea-resizable{overflow:hidden;resize:none}.cax-fluid .cax-inputtextarea{width:100%}}\n"] }]
|
|
222
226
|
}], propDecorators: { label: [{
|
|
223
227
|
type: Input
|
|
224
228
|
}], textareaId: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cax-design-system-inputtextarea.mjs","sources":["../../src/app/components/inputtextarea/inputtextarea.directive.ts","../../src/app/components/inputtextarea/inputtextarea.component.ts","../../src/app/components/inputtextarea/inputtextarea.html","../../src/app/components/inputtextarea/inputtextarea.module.ts","../../src/app/components/inputtextarea/cax-design-system-inputtextarea.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, Input, Output, EventEmitter, Optional, AfterViewInit, OnInit, OnDestroy, ChangeDetectorRef, AfterViewChecked, booleanAttribute } from '@angular/core';\nimport { NgModel, NgControl, FormControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { caxConfig } from 'cax-design-system/api';\n/**\n * InputTextarea adds styling and autoResize functionality to standard textarea element.\n * @group Components\n */\n@Directive({\n selector: '[caxInputTextarea]',\n host: {\n class: 'cax-inputtextarea cax-inputtext cax-component cax-element',\n '[class.cax-filled]': 'filled',\n '[class.cax-inputtextarea-resizable]': 'autoResize',\n '[class.cax-variant-filled]': 'variant === \"filled\" || config.inputStyle() === \"filled\"'\n }\n})\nexport class InputTextareadirective implements OnInit, AfterViewInit, OnDestroy {\n /**\n * When present, textarea size changes as being typed.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autoResize: boolean | undefined;\n /**\n * Specifies the input variant of the component.\n * @group Props\n */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n /**\n * Callback to invoke on textarea resize.\n * @param {(Event | {})} event - Custom resize event.\n * @group Emits\n */\n @Output() onResize: EventEmitter<Event | {}> = new EventEmitter<Event | {}>();\n\n filled: boolean | undefined;\n\n cachedScrollHeight: number | undefined;\n\n ngModelSubscription: Subscription | undefined;\n\n ngControlSubscription: Subscription | undefined;\n\n constructor(\n public el: ElementRef,\n @Optional() public ngModel: NgModel,\n @Optional() public control: NgControl,\n private cd: ChangeDetectorRef,\n public config: caxConfig\n ) {}\n\n ngOnInit() {\n if (this.ngModel) {\n this.ngModelSubscription = (this.ngModel as any).valueChanges.subscribe(() => {\n this.updateState();\n });\n }\n\n if (this.control) {\n this.ngControlSubscription = (this.control as any).valueChanges.subscribe(() => {\n this.updateState();\n });\n }\n }\n\n ngAfterViewInit() {\n if (this.autoResize) this.resize();\n\n this.updateFilledState();\n this.cd.detectChanges();\n }\n\n @HostListener('input', ['$event'])\n onInput(e: Event) {\n this.updateState();\n }\n\n updateFilledState() {\n this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n }\n\n resize(event?: Event) {\n this.el.nativeElement.style.height = 'auto';\n this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';\n\n if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {\n this.el.nativeElement.style.overflowY = 'scroll';\n this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;\n } else {\n this.el.nativeElement.style.overflow = 'hidden';\n }\n\n this.onResize.emit(event || {});\n }\n\n updateState() {\n this.updateFilledState();\n\n if (this.autoResize) {\n this.resize();\n }\n }\n\n ngOnDestroy() {\n if (this.ngModelSubscription) {\n this.ngModelSubscription.unsubscribe();\n }\n\n if (this.ngControlSubscription) {\n this.ngControlSubscription.unsubscribe();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cax-inputtextarea',\n templateUrl: './inputtextarea.html',\n styleUrls: ['./inputtextarea.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextareaComponent),\n multi: true\n }\n ]\n})\nexport class InputTextareaComponent implements AfterViewInit {\n /** Label for the textarea */\n @Input() label: string = '';\n\n /** Unique ID for the textarea */\n @Input() textareaId: string = `textarea-${Math.random().toString(36).substr(2, 9)}`;\n\n /** Number of rows for the textarea */\n @Input() rows: number = 5;\n\n /** Number of columns for the textarea */\n @Input() cols: number = 50;\n\n /** Placeholder text for the textarea */\n @Input() placeholder: string = '';\n\n /** Maximum number of characters allowed */\n @Input() maxlength: number | null = null;\n\n /** Minimum number of characters required */\n @Input() minlength: number | null = null;\n\n /** Whether the textarea is disabled */\n @Input() disabled: boolean = false;\n\n /** Whether the textarea is read-only */\n @Input() readonly: boolean = false;\n\n /** Whether to enable the auto-resize feature */\n @Input() autoResize: boolean = false;\n\n /** Variant of the textarea: 'filled' or 'outlined' */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n\n /** Whether to show the character counter */\n @Input() charCounter: boolean = false;\n\n /** Value of the textarea */\n @Input() value: string = '';\n\n /** Event emitted when the textarea is resized */\n @Output() onResize: EventEmitter<Event | {}> = new EventEmitter<Event | {}>();\n\n /** Reference to the textarea element */\n @ViewChild('textarea') el!: ElementRef;\n\n @Input() style?: { [key: string]: string };\n\n /** Event handler for resize events */\n onResizeHandler(event: Event) {\n this.onResize.emit(event);\n if (this.autoResize) {\n this.resize();\n }\n }\n\n ngAfterViewInit() {\n if (this.autoResize) {\n this.resize();\n }\n }\n\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\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 onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n this.onTouched();\n }\n\n resize(event?: Event) {\n this.el.nativeElement.style.height = 'auto';\n this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';\n\n if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {\n this.el.nativeElement.style.overflowY = 'scroll';\n this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;\n } else {\n this.el.nativeElement.style.overflow = 'hidden';\n }\n\n this.onResize.emit(event || {});\n }\n}\n","<div class=\"cax-input-container\">\r\n <label\r\n [attr.for]=\"textareaId\"\r\n class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\"\r\n>\r\n {{ label }}\r\n</label>\r\n <textarea\r\n #textarea\r\n [rows]=\"rows\"\r\n [cols]=\"cols\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxlength\"\r\n [minlength]=\"minlength\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly ? true : null\"\r\n [ngClass]=\"{\r\n 'filled-style': variant === 'filled',\r\n 'outlined-style': variant === 'outlined',\r\n 'cax-inputtextarea-disabled': disabled,\r\n 'disabled-opacity': disabled\r\n }\"\r\n caxInputTextarea\r\n [autoResize]=\"autoResize\"\r\n (input)=\"onResizeHandler($event)\"\r\n [(ngModel)]=\"value\"\r\n [ngStyle]=\"style\"\r\n ></textarea>\r\n</div>\r\n\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { InputTextareadirective } from './inputtextarea.directive';\nimport { InputTextareaComponent } from './inputtextarea.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n exports: [InputTextareadirective, InputTextareaComponent],\n declarations: [InputTextareadirective, InputTextareaComponent]\n})\nexport class InputTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3.InputTextareadirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cax-design-system-inputtextarea.mjs","sources":["../../src/app/components/inputtextarea/inputtextarea.directive.ts","../../src/app/components/inputtextarea/inputtextarea.component.ts","../../src/app/components/inputtextarea/inputtextarea.html","../../src/app/components/inputtextarea/inputtextarea.module.ts","../../src/app/components/inputtextarea/cax-design-system-inputtextarea.ts"],"sourcesContent":["import { Directive, ElementRef, HostListener, Input, Output, EventEmitter, Optional, AfterViewInit, OnInit, OnDestroy, ChangeDetectorRef, AfterViewChecked, booleanAttribute } from '@angular/core';\nimport { NgModel, NgControl, FormControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { caxConfig } from 'cax-design-system/api';\n/**\n * InputTextarea adds styling and autoResize functionality to standard textarea element.\n * @group Components\n */\n@Directive({\n selector: '[caxInputTextarea]',\n host: {\n class: 'cax-inputtextarea cax-inputtext cax-component cax-element',\n '[class.cax-filled]': 'filled',\n '[class.cax-inputtextarea-resizable]': 'autoResize',\n '[class.cax-variant-filled]': 'variant === \"filled\" || config.inputStyle() === \"filled\"'\n }\n})\nexport class InputTextareadirective implements OnInit, AfterViewInit, OnDestroy {\n /**\n * When present, textarea size changes as being typed.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autoResize: boolean | undefined;\n /**\n * Specifies the input variant of the component.\n * @group Props\n */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n /**\n * Callback to invoke on textarea resize.\n * @param {(Event | {})} event - Custom resize event.\n * @group Emits\n */\n @Output() onResize: EventEmitter<Event | {}> = new EventEmitter<Event | {}>();\n\n filled: boolean | undefined;\n\n cachedScrollHeight: number | undefined;\n\n ngModelSubscription: Subscription | undefined;\n\n ngControlSubscription: Subscription | undefined;\n\n constructor(\n public el: ElementRef,\n @Optional() public ngModel: NgModel,\n @Optional() public control: NgControl,\n private cd: ChangeDetectorRef,\n public config: caxConfig\n ) {}\n\n ngOnInit() {\n if (this.ngModel) {\n this.ngModelSubscription = (this.ngModel as any).valueChanges.subscribe(() => {\n this.updateState();\n });\n }\n\n if (this.control) {\n this.ngControlSubscription = (this.control as any).valueChanges.subscribe(() => {\n this.updateState();\n });\n }\n }\n\n ngAfterViewInit() {\n if (this.autoResize) this.resize();\n\n this.updateFilledState();\n this.cd.detectChanges();\n }\n\n @HostListener('input', ['$event'])\n onInput(e: Event) {\n this.updateState();\n }\n\n updateFilledState() {\n this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n }\n\n resize(event?: Event) {\n this.el.nativeElement.style.height = 'auto';\n this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';\n\n if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {\n this.el.nativeElement.style.overflowY = 'scroll';\n this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;\n } else {\n this.el.nativeElement.style.overflow = 'hidden';\n }\n\n this.onResize.emit(event || {});\n }\n\n updateState() {\n this.updateFilledState();\n\n if (this.autoResize) {\n this.resize();\n }\n }\n\n ngOnDestroy() {\n if (this.ngModelSubscription) {\n this.ngModelSubscription.unsubscribe();\n }\n\n if (this.ngControlSubscription) {\n this.ngControlSubscription.unsubscribe();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, AfterViewInit, forwardRef } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'cax-inputtextarea',\n templateUrl: './inputtextarea.html',\n styleUrls: ['./inputtextarea.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputTextareaComponent),\n multi: true\n }\n ]\n})\nexport class InputTextareaComponent implements AfterViewInit {\n /** Label for the textarea */\n @Input() label: string = '';\n\n /** Unique ID for the textarea */\n @Input() textareaId: string = `textarea-${Math.random().toString(36).substr(2, 9)}`;\n\n /** Number of rows for the textarea */\n @Input() rows: number = 5;\n\n /** Number of columns for the textarea */\n @Input() cols: number = 50;\n\n /** Placeholder text for the textarea */\n @Input() placeholder: string = '';\n\n /** Maximum number of characters allowed */\n @Input() maxlength: number | null = null;\n\n /** Minimum number of characters required */\n @Input() minlength: number | null = null;\n\n /** Whether the textarea is disabled */\n @Input() disabled: boolean = false;\n\n /** Whether the textarea is read-only */\n @Input() readonly: boolean = false;\n\n /** Whether to enable the auto-resize feature */\n @Input() autoResize: boolean = false;\n\n /** Variant of the textarea: 'filled' or 'outlined' */\n @Input() variant: 'filled' | 'outlined' = 'outlined';\n\n /** Whether to show the character counter */\n @Input() charCounter: boolean = false;\n\n /** Value of the textarea */\n @Input() value: string = '';\n\n /** Event emitted when the textarea is resized */\n @Output() onResize: EventEmitter<Event | {}> = new EventEmitter<Event | {}>();\n\n /** Reference to the textarea element */\n @ViewChild('textarea') el!: ElementRef;\n\n @Input() style?: { [key: string]: string };\n\n /** Event handler for resize events */\n onResizeHandler(event: Event) {\n this.onResize.emit(event);\n if (this.autoResize) {\n this.resize();\n }\n }\n\n ngAfterViewInit() {\n if (this.autoResize) {\n this.resize();\n }\n }\n\n @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n // Changed from private to public to allow access from template\n onChange: (value: string) => void = () => {};\n onTouched: () => void = () => {};\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 onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.valueChange.emit(this.value);\n this.onChange(this.value);\n\n // Also handle resize if autoResize is enabled\n if (this.autoResize) {\n this.resize(event);\n }\n }\n\n resize(event?: Event) {\n this.el.nativeElement.style.height = 'auto';\n this.el.nativeElement.style.height = this.el.nativeElement.scrollHeight + 'px';\n\n if (parseFloat(this.el.nativeElement.style.height) >= parseFloat(this.el.nativeElement.style.maxHeight)) {\n this.el.nativeElement.style.overflowY = 'scroll';\n this.el.nativeElement.style.height = this.el.nativeElement.style.maxHeight;\n } else {\n this.el.nativeElement.style.overflow = 'hidden';\n }\n\n this.onResize.emit(event || {});\n }\n}\n","<div class=\"cax-input-container\">\r\n <label [attr.for]=\"textareaId\" class=\"cax-label\" [ngClass]=\"{'disabled-opacity': disabled}\"> {{ label }} </label>\r\n <textarea\r\n #textarea\r\n [rows]=\"rows\"\r\n [cols]=\"cols\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxlength\"\r\n [minlength]=\"minlength\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly ? true : null\"\r\n [ngClass]=\"{\r\n 'filled-style': variant === 'filled',\r\n 'outlined-style': variant === 'outlined',\r\n 'cax-inputtextarea-disabled': disabled,\r\n 'disabled-opacity': disabled\r\n }\"\r\n caxInputTextarea\r\n [autoResize]=\"autoResize\"\r\n (input)=\"onInput($event)\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"value = $event; valueChange.emit($event); onChange($event); onTouched()\"\r\n (blur)=\"onTouched()\"\r\n [ngStyle]=\"style\"\r\n ></textarea>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { InputTextareadirective } from './inputtextarea.directive';\nimport { InputTextareaComponent } from './inputtextarea.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n exports: [InputTextareadirective, InputTextareaComponent],\n declarations: [InputTextareadirective, InputTextareaComponent]\n})\nexport class InputTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3.InputTextareadirective"],"mappings":"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"}
|