@nuralyui/textarea 0.1.0 → 0.1.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.
- package/bundle.js +28 -330
- package/index.d.ts +0 -0
- package/index.js +0 -0
- package/index.js.map +0 -0
- package/package.json +1 -1
- package/react.d.ts +0 -0
- package/react.js +0 -0
- package/react.js.map +0 -0
- package/textarea.component.d.ts +2 -3
- package/textarea.component.js +1 -2
- package/textarea.component.js.map +1 -1
- package/textarea.style.d.ts +0 -0
- package/textarea.style.js +0 -0
- package/textarea.style.js.map +0 -0
- package/textarea.types.d.ts +0 -0
- package/textarea.types.js +0 -0
- package/textarea.types.js.map +0 -0
package/index.d.ts
CHANGED
|
File without changes
|
package/index.js
CHANGED
|
File without changes
|
package/index.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
package/react.d.ts
CHANGED
|
File without changes
|
package/react.js
CHANGED
|
File without changes
|
package/react.js.map
CHANGED
|
File without changes
|
package/textarea.component.d.ts
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
6
|
import { LitElement, PropertyValues } from 'lit';
|
|
7
|
-
import '../icon/icon.component.js';
|
|
8
7
|
import { TEXTAREA_STATE, TEXTAREA_SIZE, TEXTAREA_VARIANT, TEXTAREA_RESIZE, ValidationRule, TextareaValidationResult, FocusOptions } from './textarea.types.js';
|
|
9
|
-
import { ValidatableComponent, ValidationStatus } from '
|
|
8
|
+
import { ValidatableComponent, ValidationStatus } from '@nuralyui/common/mixins';
|
|
10
9
|
import { type TextareaValidationHost, type TextareaEventHost } from './controllers/index.js';
|
|
11
|
-
declare const NrTextareaElement_base: (new (...args: any[]) => import("
|
|
10
|
+
declare const NrTextareaElement_base: (new (...args: any[]) => import("@nuralyui/common/mixins").DependencyAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").ThemeAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").EventHandlerCapable) & typeof LitElement;
|
|
12
11
|
/**
|
|
13
12
|
* Versatile textarea component with validation, resize options, and interactive features.
|
|
14
13
|
*
|
package/textarea.component.js
CHANGED
|
@@ -21,9 +21,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
21
21
|
import { LitElement, html } from 'lit';
|
|
22
22
|
import { customElement, property, state, query } from 'lit/decorators.js';
|
|
23
23
|
import { styles } from './textarea.style.js';
|
|
24
|
-
import '../icon/icon.component.js';
|
|
25
24
|
import { TEXTAREA_DEFAULTS, EMPTY_STRING } from './textarea.types.js';
|
|
26
|
-
import { NuralyUIBaseMixin } from '
|
|
25
|
+
import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
|
|
27
26
|
import { TextareaValidationController, TextareaEventController } from './controllers/index.js';
|
|
28
27
|
/**
|
|
29
28
|
* Versatile textarea component with validation, resize options, and interactive features.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.component.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, PropertyValues, html } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { styles } from './textarea.style.js';\nimport '../icon/icon.component.js';\nimport {\n TEXTAREA_STATE,\n TEXTAREA_SIZE,\n TEXTAREA_VARIANT,\n TEXTAREA_RESIZE,\n TEXTAREA_DEFAULTS,\n EMPTY_STRING,\n ValidationRule,\n TextareaValidationResult,\n TextareaChangeEvent,\n TextareaResizeEvent,\n FocusOptions\n} from './textarea.types.js';\nimport { NuralyUIBaseMixin } from '../../shared/base-mixin.js';\nimport { ValidatableComponent, ValidationStatus } from '../../shared/validation.types.js';\nimport {\n TextareaValidationController,\n TextareaEventController,\n type TextareaValidationHost,\n type TextareaEventHost\n} from './controllers/index.js';\n\n/**\n * Versatile textarea component with validation, resize options, and interactive features.\n * \n * @example\n * ```html\n * <nr-textarea placeholder=\"Enter your message\"></nr-textarea>\n * <nr-textarea rows=\"5\" resize=\"vertical\"></nr-textarea>\n * <nr-textarea max-length=\"500\" show-count></nr-textarea>\n * ```\n * \n * @fires nr-textarea-change - Value changes\n * @fires nr-focus - Textarea focused\n * @fires nr-blur - Textarea blurred \n * @fires nr-clear - Clear button clicked\n * @fires nr-resize - Textarea resized\n * \n * @slot label - Textarea label\n * @slot helper-text - Helper text\n * @slot addon-before - Content before textarea\n * @slot addon-after - Content after textarea\n */\n@customElement('nr-textarea')\nexport class NrTextareaElement extends NuralyUIBaseMixin(LitElement) \n implements TextareaValidationHost, TextareaEventHost, ValidatableComponent {\n static override styles = styles;\n\n @query('textarea')\n private textareaElement!: HTMLTextAreaElement;\n\n // Controllers\n private validationController = new TextareaValidationController(this);\n private eventController = new TextareaEventController(this);\n\n /** Disables the textarea */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Makes the textarea read-only */\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n /** Visual state (default, success, warning, error) */\n @property({ type: String, reflect: true })\n state = TEXTAREA_STATE.Default;\n\n /** Current textarea value */\n @property({ type: String })\n value = EMPTY_STRING;\n\n /** Textarea size (small, medium, large) */\n @property({ type: String })\n size = TEXTAREA_SIZE.Medium;\n\n /** Visual variant (outlined, underlined, filled) */\n @property({ type: String, reflect: true })\n variant = TEXTAREA_VARIANT.Underlined;\n\n /** Resize behavior (none, vertical, horizontal, both) */\n @property({ type: String })\n resize = TEXTAREA_RESIZE.Vertical;\n\n /** Number of visible text lines */\n @property({ type: Number })\n rows = TEXTAREA_DEFAULTS.ROWS;\n\n /** Number of visible character columns */\n @property({ type: Number })\n cols = TEXTAREA_DEFAULTS.COLS;\n\n /** Placeholder text */\n @property({ type: String })\n placeholder = EMPTY_STRING;\n\n /** HTML autocomplete attribute */\n @property({ type: String })\n autocomplete = 'off';\n\n /** Field name for form submission */\n @property({ type: String })\n name?: string;\n\n /** Required field indicator */\n @property({ type: Boolean })\n required?: boolean;\n\n /** Shows clear button */\n @property({ type: Boolean, reflect: true })\n allowClear = false;\n\n /** Clearable alias for controller interface compatibility */\n get clearable(): boolean {\n return this.allowClear;\n }\n\n /** Shows character counter */\n @property({ type: Boolean, reflect: true })\n showCount = false;\n\n /** Maximum character limit */\n @property({ type: Number })\n maxLength?: number;\n\n /** Minimum height for auto-resize */\n @property({ type: Number })\n minHeight?: number;\n\n /** Maximum height for auto-resize */\n @property({ type: Number })\n maxHeight?: number;\n\n /** Auto-resize textarea based on content */\n @property({ type: Boolean })\n autoResize = false;\n\n /** Array of validation rules */\n @property({ type: Array })\n rules: ValidationRule[] = [];\n\n /** Validate on change */\n @property({ type: Boolean, attribute: 'validate-on-change' })\n validateOnChange = true;\n\n /** Validate on blur */\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur = true;\n\n /** Show validation status icon */\n @property({ type: Boolean, attribute: 'has-feedback' })\n hasFeedback = false;\n\n /** Custom validation message */\n @property({ type: String, attribute: 'validation-message' })\n validationMessage?: string;\n\n @state()\n private isFocused = false;\n\n @state()\n private validationResult?: TextareaValidationResult;\n\n @state()\n private characterCount = 0;\n\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n super();\n // Initialize character count based on initial value\n this.characterCount = this.value.length;\n \n // Setup controller event listeners\n this.setupControllerListeners();\n }\n\n /**\n * Setup controller event listeners\n */\n private setupControllerListeners(): void {\n // Validation events\n this.addEventListener('textarea-validation', (e: any) => {\n this.validationResult = e.detail.validationResult;\n });\n\n // Input events \n this.addEventListener('textarea-input', (e: any) => {\n this.handleControllerInput(e.detail.value);\n });\n\n // Focus/blur events\n this.addEventListener('textarea-focus', () => {\n this.isFocused = true;\n });\n\n this.addEventListener('textarea-blur', () => {\n this.isFocused = false;\n if (this.validateOnBlur) {\n this.validationController.validateOnBlurIfEnabled();\n }\n });\n\n // Clear events\n this.addEventListener('textarea-clear', (e: any) => {\n this.handleControllerClear(e.detail.previousValue);\n });\n }\n\n /**\n * Handle input from controller\n */\n private handleControllerInput(newValue: string): void {\n // Handle max length\n if (this.maxLength && newValue.length > this.maxLength) {\n this.value = newValue.slice(0, this.maxLength);\n } else {\n this.value = newValue;\n }\n\n this.characterCount = this.value.length;\n this.autoResizeIfNeeded();\n this.dispatchChangeEvent();\n\n // Validate if change validation is enabled\n if (this.validateOnChange) {\n this.validationController.validateOnChangeIfEnabled(this.value);\n }\n }\n\n /**\n * Handle clear from controller\n */\n private handleControllerClear(previousValue: string): void {\n this.characterCount = 0;\n this.dispatchChangeEvent();\n \n // Custom clear event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-clear', {\n detail: { value: this.value, previousValue },\n bubbles: true\n }));\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupResizeObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.cleanupResizeObserver();\n }\n\n override firstUpdated(changedProperties: PropertyValues) {\n super.firstUpdated(changedProperties);\n this.updateTextareaValue();\n this.autoResizeIfNeeded();\n \n // Setup resize observer for the textarea element\n if (this.resizeObserver && this.textareaElement) {\n this.resizeObserver.observe(this.textareaElement);\n }\n\n // Setup event controllers with DOM elements\n this.eventController.setupEventListeners();\n }\n\n override updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n\n if (changedProperties.has('value')) {\n this.characterCount = this.value.length;\n this.updateTextareaValue();\n this.autoResizeIfNeeded();\n }\n\n if (changedProperties.has('autoResize')) {\n this.autoResizeIfNeeded();\n }\n\n // Update validation rules if they changed\n if (changedProperties.has('rules')) {\n this.validationController.clearValidation();\n if (this.rules.length > 0 && this.value) {\n this.validationController.validate(this.value);\n }\n }\n }\n\n private setupResizeObserver() {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this.dispatchResizeEvent(width, height);\n }\n });\n }\n }\n\n private cleanupResizeObserver() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = undefined;\n }\n }\n\n private updateTextareaValue() {\n if (this.textareaElement && this.textareaElement.value !== this.value) {\n this.textareaElement.value = this.value;\n }\n }\n\n private autoResizeIfNeeded() {\n if (!this.autoResize || !this.textareaElement) return;\n\n // Reset height to auto to get the natural scroll height\n this.textareaElement.style.height = 'auto';\n const scrollHeight = this.textareaElement.scrollHeight;\n\n // Apply min/max height constraints\n let newHeight = scrollHeight;\n if (this.minHeight && newHeight < this.minHeight) {\n newHeight = this.minHeight;\n }\n if (this.maxHeight && newHeight > this.maxHeight) {\n newHeight = this.maxHeight;\n }\n\n this.textareaElement.style.height = `${newHeight}px`;\n }\n\n /**\n * Handle input event (now delegated to event controller via addEventListener)\n */\n private handleInput(e: Event) {\n // This method is kept for backward compatibility but actual handling\n // is now done through the event controller\n this.eventController.handleInput(e);\n }\n\n /**\n * Handle focus event (now delegated to event controller)\n */\n private handleFocus(e: FocusEvent) {\n this.eventController.handleFocus(e);\n \n // Dispatch legacy event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-focus', {\n detail: { \n focused: true,\n originalEvent: e\n },\n bubbles: true\n }));\n }\n\n /**\n * Handle blur event (now delegated to event controller)\n */\n private handleBlur(e: FocusEvent) {\n this.eventController.handleBlur(e);\n \n // Dispatch legacy event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-blur', {\n detail: { \n focused: false,\n originalEvent: e\n },\n bubbles: true\n }));\n }\n\n /**\n * Handle clear event (now delegated to event controller)\n */\n private handleClear() {\n this.eventController.handleClear();\n }\n\n private dispatchChangeEvent() {\n const detail: TextareaChangeEvent = {\n value: this.value,\n length: this.characterCount,\n exceedsMaxLength: this.maxLength ? this.characterCount > this.maxLength : false,\n validation: this.validationResult\n };\n\n this.dispatchEvent(new CustomEvent('nr-textarea-change', {\n detail,\n bubbles: true\n }));\n }\n\n private dispatchResizeEvent(width: number, height: number) {\n const detail: TextareaResizeEvent = {\n width,\n height,\n direction: this.resize as any\n };\n\n this.dispatchEvent(new CustomEvent('nr-resize', {\n detail,\n bubbles: true\n }));\n }\n\n /**\n * Focus the textarea with optional configuration\n */\n override focus(options?: FocusOptions) {\n this.eventController.focus();\n \n // Handle cursor positioning if needed\n if (options?.cursor !== undefined || options?.select) {\n setTimeout(() => {\n if (!this.textareaElement) return;\n\n if (options?.cursor !== undefined) {\n if (typeof options.cursor === 'number') {\n this.eventController.setCursorPosition(options.cursor);\n } else if (options.cursor === 'start') {\n this.eventController.setCursorPosition(0);\n } else if (options.cursor === 'end') {\n this.eventController.setCursorPosition(this.value.length);\n } else if (options.cursor === 'all') {\n this.eventController.selectAll();\n }\n } else if (options?.select) {\n this.eventController.selectAll();\n }\n });\n }\n }\n\n /**\n * Blur the textarea\n */\n override blur() {\n this.eventController.blur();\n }\n\n /**\n * Get validation status\n */\n getValidationResult(): TextareaValidationResult | undefined {\n return this.validationController.validationResult;\n }\n\n /**\n * Trigger validation manually (ValidatableComponent interface)\n */\n async validate(): Promise<boolean> {\n const result = await this.validationController.validate(this.value);\n return result.isValid;\n }\n\n /**\n * Clear validation state\n */\n clearValidation() {\n this.validationController.clearValidation();\n }\n\n /**\n * Clear the textarea value\n */\n clear() {\n this.eventController.handleClear();\n }\n\n /**\n * Add a validation rule (ValidatableComponent interface)\n */\n addRule(rule: ValidationRule): void {\n this.validationController.addRule(rule);\n }\n\n /**\n * Remove validation rules matching predicate (ValidatableComponent interface)\n */\n removeRule(predicate: (rule: ValidationRule) => boolean): void {\n this.validationController.removeRule(predicate);\n }\n\n /**\n * Clear all validation rules (ValidatableComponent interface)\n */\n clearRules(): void {\n this.validationController.clearRules();\n }\n\n /**\n * Get current validation status (ValidatableComponent interface)\n */\n getValidationStatus(): ValidationStatus {\n const result = this.validationController.validationResult;\n return {\n isValid: result?.isValid ?? true,\n errors: result?.level === 'error' ? result.messages : [],\n warnings: result?.level === 'warning' ? result.messages : []\n };\n }\n\n /**\n * Check if the textarea value is valid\n */\n isValid(): boolean {\n return this.validationController.isValid();\n }\n\n // Form integration methods (FormFieldCapable interface)\n\n /**\n * Check validity (HTML form API compatibility)\n */\n checkValidity(): boolean {\n return this.validationController.isValid();\n }\n\n /**\n * Report validity (HTML form API compatibility)\n */\n reportValidity(): boolean {\n const isValid = this.validationController.isValid();\n if (!isValid) {\n // Trigger validation to show error messages\n this.validationController.validate(this.value);\n }\n return isValid;\n }\n\n /**\n * Set custom validity message (HTML form API compatibility)\n */\n setCustomValidity(message: string): void {\n if (message) {\n // Add custom validation rule\n this.validationController.addRule({\n validator: () => false,\n message,\n level: 'error',\n blocking: true\n });\n } else {\n // Remove custom validation rules\n this.validationController.removeRule(rule => rule.message === message);\n }\n }\n\n /**\n * Trigger validation manually (enhanced version)\n */\n async validateTextarea(): Promise<boolean> {\n const result = await this.validationController.validate(this.value);\n return result.isValid;\n }\n\n /**\n * Set validation state externally (for form integration)\n */\n setValidationStatus(result: TextareaValidationResult): void {\n this.validationResult = result;\n \n // Update state based on validation result\n if (result.level === 'error') {\n this.state = TEXTAREA_STATE.Error;\n } else if (result.level === 'warning') {\n this.state = TEXTAREA_STATE.Warning;\n } else if (result.isValid) {\n this.state = TEXTAREA_STATE.Success;\n }\n \n this.requestUpdate();\n }\n\n private renderLabel() {\n return html`\n <div class=\"textarea-label\">\n <slot name=\"label\"></slot>\n ${this.required ? html`<span class=\"required-indicator\">*</span>` : ''}\n </div>\n `;\n }\n\n private renderTextarea() {\n return html`\n <textarea\n class=\"textarea-element\"\n .value=${this.value}\n .disabled=${this.disabled}\n .readOnly=${this.readonly}\n .required=${this.required || false}\n .rows=${this.rows}\n .cols=${this.cols}\n .placeholder=${this.placeholder}\n .autocomplete=${this.autocomplete}\n .name=${this.name || ''}\n maxlength=${this.maxLength || ''}\n style=\"resize: ${this.resize}\"\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n ></textarea>\n `;\n }\n\n private renderValidationIcon() {\n if (!this.hasFeedback || !this.validationResult) return '';\n\n const iconName = this.validationResult.level === 'error' ? 'error' :\n this.validationResult.level === 'warning' ? 'warning' : 'check-circle';\n\n return html`\n <nr-icon \n class=\"validation-icon ${this.validationResult.level}\"\n name=\"${iconName}\"\n size=\"small\"\n ></nr-icon>\n `;\n }\n\n private renderClearButton() {\n if (!this.allowClear || !this.value || this.disabled || this.readonly) return '';\n\n return html`\n <button\n class=\"clear-button\"\n type=\"button\"\n @click=${this.handleClear}\n aria-label=\"Clear textarea\"\n >\n <nr-icon name=\"x\" size=\"small\"></nr-icon>\n </button>\n `;\n }\n\n private renderCharacterCount() {\n if (!this.showCount) return '';\n\n const maxText = this.maxLength ? ` / ${this.maxLength}` : '';\n const isOverLimit = this.maxLength && this.characterCount > this.maxLength;\n\n return html`\n <div class=\"character-count ${isOverLimit ? 'over-limit' : ''}\">\n ${this.characterCount}${maxText}\n </div>\n `;\n }\n\n private renderHelperText() {\n const hasHelperSlot = this.shadowRoot?.querySelector('slot[name=\"helper-text\"]') as HTMLSlotElement;\n const hasHelperSlotContent = hasHelperSlot?.assignedNodes().length;\n const hasValidationMessages = this.validationResult?.messages.length;\n\n if (!hasHelperSlotContent && !hasValidationMessages) return '';\n\n return html`\n <div class=\"helper-text\">\n ${hasValidationMessages ? \n this.validationResult!.messages.map(msg => html`<div class=\"validation-message ${this.validationResult!.level}\">${msg}</div>`) :\n html`<slot name=\"helper-text\"></slot>`\n }\n </div>\n `;\n }\n\n override render() {\n const classes = [\n 'textarea-container',\n `size-${this.size}`,\n `variant-${this.variant}`,\n `state-${this.state}`,\n this.isFocused ? 'focused' : '',\n this.disabled ? 'disabled' : '',\n this.readonly ? 'readonly' : '',\n this.validationResult ? `validation-${this.validationResult.level}` : ''\n ].filter(Boolean).join(' ');\n\n return html`\n <div class=\"${classes}\">\n ${this.renderLabel()}\n \n <div class=\"textarea-wrapper\">\n <div class=\"addon-before\">\n <slot name=\"addon-before\"></slot>\n </div>\n \n <div class=\"textarea-input-container\">\n ${this.renderTextarea()}\n ${this.renderValidationIcon()}\n ${this.renderClearButton()}\n </div>\n \n <div class=\"addon-after\">\n <slot name=\"addon-after\"></slot>\n </div>\n </div>\n \n <div class=\"textarea-footer\">\n ${this.renderHelperText()}\n ${this.renderCharacterCount()}\n </div>\n </div>\n `;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"textarea.component.js","sourceRoot":"","sources":["../../../src/components/textarea/textarea.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,OAAO,EAAE,UAAU,EAAkB,IAAI,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAKL,iBAAiB,EACjB,YAAY,EAMb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EAGxB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,IAAa,iBAAiB,GAA9B,MAAa,iBAAkB,SAAQ,iBAAiB,CAAC,UAAU,CAAC;IA2HlE;QACE,KAAK,EAAE,CAAC;QArHV,cAAc;QACN,yBAAoB,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC9D,oBAAe,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE5D,4BAA4B;QAE5B,aAAQ,GAAG,KAAK,CAAC;QAEjB,mCAAmC;QAEnC,aAAQ,GAAG,KAAK,CAAC;QAEjB,sDAAsD;QAEtD,UAAK,0CAA0B;QAE/B,6BAA6B;QAE7B,UAAK,GAAG,YAAY,CAAC;QAErB,2CAA2C;QAE3C,SAAI,uCAAwB;QAE5B,oDAAoD;QAEpD,YAAO,kDAA+B;QAEtC,yDAAyD;QAEzD,WAAM,6CAA4B;QAElC,mCAAmC;QAEnC,SAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAE9B,0CAA0C;QAE1C,SAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAE9B,uBAAuB;QAEvB,gBAAW,GAAG,YAAY,CAAC;QAE3B,kCAAkC;QAElC,iBAAY,GAAG,KAAK,CAAC;QAUrB,yBAAyB;QAEzB,eAAU,GAAG,KAAK,CAAC;QAOnB,8BAA8B;QAE9B,cAAS,GAAG,KAAK,CAAC;QAclB,4CAA4C;QAE5C,eAAU,GAAG,KAAK,CAAC;QAEnB,gCAAgC;QAEhC,UAAK,GAAqB,EAAE,CAAC;QAE7B,yBAAyB;QAEzB,qBAAgB,GAAG,IAAI,CAAC;QAExB,uBAAuB;QAEvB,mBAAc,GAAG,IAAI,CAAC;QAEtB,kCAAkC;QAElC,gBAAW,GAAG,KAAK,CAAC;QAOZ,cAAS,GAAG,KAAK,CAAC;QAMlB,mBAAc,GAAG,CAAC,CAAC;QAMzB,oDAAoD;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAExC,mCAAmC;QACnC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IA/DD,6DAA6D;IAC7D,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IA8DD;;OAEG;IACK,wBAAwB;QAC9B,oBAAoB;QACpB,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAM,EAAE,EAAE;YACtD,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAM,EAAE,EAAE;YACjD,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,CAAC;aACrD;QACH,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAM,EAAE,EAAE;YACjD,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,QAAgB;QAC5C,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACtD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SAChD;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;SACvB;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,2CAA2C;QAC3C,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjE;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,aAAqB;QACjD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,gDAAgD;QAChD,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE;YAC7C,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;YAC5C,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEQ,oBAAoB;QAC3B,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEQ,YAAY,CAAC,iBAAiC;QACrD,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,iDAAiD;QACjD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE;YAC/C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACnD;QAED,4CAA4C;QAC5C,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAEQ,OAAO,CAAC,iBAAiC;QAChD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEjC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACxC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;QAED,IAAI,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACvC,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;QAED,0CAA0C;QAC1C,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAClC,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACvC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAChD;SACF;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACzC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oBAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;oBAC5C,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;iBACzC;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;SACjC;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YACrE,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACzC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAEtD,wDAAwD;QACxD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;QAEvD,mCAAmC;QACnC,IAAI,SAAS,GAAG,YAAY,CAAC;QAC7B,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAChD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SAC5B;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAChD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SAC5B;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,SAAS,IAAI,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,CAAQ;QAC1B,qEAAqE;QACrE,2CAA2C;QAC3C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,CAAa;QAC/B,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAEpC,mDAAmD;QACnD,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE;YAC7C,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,CAAC;aACjB;YACD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,CAAa;QAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEnC,mDAAmD;QACnD,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE;YAC5C,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,CAAC;aACjB;YACD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAEO,mBAAmB;QACzB,MAAM,MAAM,GAAwB;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAC/E,UAAU,EAAE,IAAI,CAAC,gBAAgB;SAClC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,mBAAmB,CAAC,KAAa,EAAE,MAAc;QACvD,MAAM,MAAM,GAAwB;YAClC,KAAK;YACL,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,MAAa;SAC9B,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE;YAC9C,MAAM;YACN,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,OAAsB;QACnC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,sCAAsC;QACtC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,SAAS,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE;YACpD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,eAAe;oBAAE,OAAO;gBAElC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,SAAS,EAAE;oBACjC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;wBACtC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;qBACxD;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;wBACrC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;qBAC3C;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;wBACnC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;qBAC3D;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE;wBACnC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;qBAClC;iBACF;qBAAM,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;oBAC1B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;iBAClC;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED;;OAEG;IACM,IAAI;QACX,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;IACpD,CAAC;IAED;;OAEG;IACG,QAAQ;;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;KAAA;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAoB;QAC1B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAA4C;QACrD,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,mBAAmB;;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,IAAI;YAChC,MAAM,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACxD,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,MAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,wDAAwD;IAExD;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE;YACZ,4CAA4C;YAC5C,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAChD;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAe;QAC/B,IAAI,OAAO,EAAE;YACX,6BAA6B;YAC7B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAChC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;gBACtB,OAAO;gBACP,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;SACJ;aAAM;YACL,iCAAiC;YACjC,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;SACxE;IACH,CAAC;IAED;;OAEG;IACG,gBAAgB;;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;KAAA;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAgC;QAClD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAE/B,0CAA0C;QAC1C,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,KAAK,qCAAuB,CAAC;SACnC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YACrC,IAAI,CAAC,KAAK,yCAAyB,CAAC;SACrC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,KAAK,yCAAyB,CAAC;SACrC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAA;;;UAGL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA,2CAA2C,CAAC,CAAC,CAAC,EAAE;;KAEzE,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;oBACP,IAAI,CAAC,QAAQ;oBACb,IAAI,CAAC,QAAQ;oBACb,IAAI,CAAC,QAAQ,IAAI,KAAK;gBAC1B,IAAI,CAAC,IAAI;gBACT,IAAI,CAAC,IAAI;uBACF,IAAI,CAAC,WAAW;wBACf,IAAI,CAAC,YAAY;gBACzB,IAAI,CAAC,IAAI,IAAI,EAAE;oBACX,IAAI,CAAC,SAAS,IAAI,EAAE;yBACf,IAAI,CAAC,MAAM;iBACnB,IAAI,CAAC,WAAW;iBAChB,IAAI,CAAC,WAAW;gBACjB,IAAI,CAAC,UAAU;;KAE1B,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO,EAAE,CAAC;QAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;QAExF,OAAO,IAAI,CAAA;;iCAEkB,IAAI,CAAC,gBAAgB,CAAC,KAAK;gBAC5C,QAAQ;;;KAGnB,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEjF,OAAO,IAAI,CAAA;;;;iBAIE,IAAI,CAAC,WAAW;;;;;KAK5B,CAAC;IACJ,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3E,OAAO,IAAI,CAAA;oCACqB,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;UACzD,IAAI,CAAC,cAAc,GAAG,OAAO;;KAElC,CAAC;IACJ,CAAC;IAEO,gBAAgB;;QACtB,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,0BAA0B,CAAoB,CAAC;QACpG,MAAM,oBAAoB,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,aAAa,GAAG,MAAM,CAAC;QACnE,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,QAAQ,CAAC,MAAM,CAAC;QAErE,IAAI,CAAC,oBAAoB,IAAI,CAAC,qBAAqB;YAAE,OAAO,EAAE,CAAC;QAE/D,OAAO,IAAI,CAAA;;UAEL,qBAAqB,CAAC,CAAC;YACvB,IAAI,CAAC,gBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAA,kCAAkC,IAAI,CAAC,gBAAiB,CAAC,KAAK,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;YAChI,IAAI,CAAA,kCACN;;KAEH,CAAC;IACJ,CAAC;IAEQ,MAAM;QACb,MAAM,OAAO,GAAG;YACd,oBAAoB;YACpB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACnB,WAAW,IAAI,CAAC,OAAO,EAAE;YACzB,SAAS,IAAI,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YAC/B,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;SACzE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAA;oBACK,OAAO;UACjB,IAAI,CAAC,WAAW,EAAE;;;;;;;;cAQd,IAAI,CAAC,cAAc,EAAE;cACrB,IAAI,CAAC,oBAAoB,EAAE;cAC3B,IAAI,CAAC,iBAAiB,EAAE;;;;;;;;;YAS1B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,oBAAoB,EAAE;;;KAGlC,CAAC;IACJ,CAAC;CACF,CAAA;AAppBiB,wBAAM,GAAG,MAAO,CAAA;AAGhC;IADC,KAAK,CAAC,UAAU,CAAC;0DAC4B;AAQ9C;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAC1B;AAIjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAC1B;AAIjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDACX;AAI/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDACN;AAIrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACC;AAI5B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;kDACJ;AAItC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDACO;AAIlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACG;AAI9B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACG;AAI9B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACA;AAI3B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDACN;AAIrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACb;AAId;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;mDACT;AAInB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qDACxB;AASnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDACzB;AAIlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDACR;AAInB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDACR;AAInB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDACR;AAInB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qDACT;AAInB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gDACG;AAI7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;2DACrC;AAIxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;yDACrC;AAItB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;sDACnC;AAIpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;4DACjC;AAG3B;IADC,KAAK,EAAE;oDACkB;AAG1B;IADC,KAAK,EAAE;2DAC4C;AAGpD;IADC,KAAK,EAAE;yDACmB;AAvHhB,iBAAiB;IAD7B,aAAa,CAAC,aAAa,CAAC;GAChB,iBAAiB,CAspB7B;SAtpBY,iBAAiB","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, PropertyValues, html } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { styles } from './textarea.style.js';\nimport {\n TEXTAREA_STATE,\n TEXTAREA_SIZE,\n TEXTAREA_VARIANT,\n TEXTAREA_RESIZE,\n TEXTAREA_DEFAULTS,\n EMPTY_STRING,\n ValidationRule,\n TextareaValidationResult,\n TextareaChangeEvent,\n TextareaResizeEvent,\n FocusOptions\n} from './textarea.types.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { ValidatableComponent, ValidationStatus } from '@nuralyui/common/mixins';\nimport {\n TextareaValidationController,\n TextareaEventController,\n type TextareaValidationHost,\n type TextareaEventHost\n} from './controllers/index.js';\n\n/**\n * Versatile textarea component with validation, resize options, and interactive features.\n * \n * @example\n * ```html\n * <nr-textarea placeholder=\"Enter your message\"></nr-textarea>\n * <nr-textarea rows=\"5\" resize=\"vertical\"></nr-textarea>\n * <nr-textarea max-length=\"500\" show-count></nr-textarea>\n * ```\n * \n * @fires nr-textarea-change - Value changes\n * @fires nr-focus - Textarea focused\n * @fires nr-blur - Textarea blurred \n * @fires nr-clear - Clear button clicked\n * @fires nr-resize - Textarea resized\n * \n * @slot label - Textarea label\n * @slot helper-text - Helper text\n * @slot addon-before - Content before textarea\n * @slot addon-after - Content after textarea\n */\n@customElement('nr-textarea')\nexport class NrTextareaElement extends NuralyUIBaseMixin(LitElement) \n implements TextareaValidationHost, TextareaEventHost, ValidatableComponent {\n static override styles = styles;\n\n @query('textarea')\n private textareaElement!: HTMLTextAreaElement;\n\n // Controllers\n private validationController = new TextareaValidationController(this);\n private eventController = new TextareaEventController(this);\n\n /** Disables the textarea */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Makes the textarea read-only */\n @property({ type: Boolean, reflect: true })\n readonly = false;\n\n /** Visual state (default, success, warning, error) */\n @property({ type: String, reflect: true })\n state = TEXTAREA_STATE.Default;\n\n /** Current textarea value */\n @property({ type: String })\n value = EMPTY_STRING;\n\n /** Textarea size (small, medium, large) */\n @property({ type: String })\n size = TEXTAREA_SIZE.Medium;\n\n /** Visual variant (outlined, underlined, filled) */\n @property({ type: String, reflect: true })\n variant = TEXTAREA_VARIANT.Underlined;\n\n /** Resize behavior (none, vertical, horizontal, both) */\n @property({ type: String })\n resize = TEXTAREA_RESIZE.Vertical;\n\n /** Number of visible text lines */\n @property({ type: Number })\n rows = TEXTAREA_DEFAULTS.ROWS;\n\n /** Number of visible character columns */\n @property({ type: Number })\n cols = TEXTAREA_DEFAULTS.COLS;\n\n /** Placeholder text */\n @property({ type: String })\n placeholder = EMPTY_STRING;\n\n /** HTML autocomplete attribute */\n @property({ type: String })\n autocomplete = 'off';\n\n /** Field name for form submission */\n @property({ type: String })\n name?: string;\n\n /** Required field indicator */\n @property({ type: Boolean })\n required?: boolean;\n\n /** Shows clear button */\n @property({ type: Boolean, reflect: true })\n allowClear = false;\n\n /** Clearable alias for controller interface compatibility */\n get clearable(): boolean {\n return this.allowClear;\n }\n\n /** Shows character counter */\n @property({ type: Boolean, reflect: true })\n showCount = false;\n\n /** Maximum character limit */\n @property({ type: Number })\n maxLength?: number;\n\n /** Minimum height for auto-resize */\n @property({ type: Number })\n minHeight?: number;\n\n /** Maximum height for auto-resize */\n @property({ type: Number })\n maxHeight?: number;\n\n /** Auto-resize textarea based on content */\n @property({ type: Boolean })\n autoResize = false;\n\n /** Array of validation rules */\n @property({ type: Array })\n rules: ValidationRule[] = [];\n\n /** Validate on change */\n @property({ type: Boolean, attribute: 'validate-on-change' })\n validateOnChange = true;\n\n /** Validate on blur */\n @property({ type: Boolean, attribute: 'validate-on-blur' })\n validateOnBlur = true;\n\n /** Show validation status icon */\n @property({ type: Boolean, attribute: 'has-feedback' })\n hasFeedback = false;\n\n /** Custom validation message */\n @property({ type: String, attribute: 'validation-message' })\n validationMessage?: string;\n\n @state()\n private isFocused = false;\n\n @state()\n private validationResult?: TextareaValidationResult;\n\n @state()\n private characterCount = 0;\n\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n super();\n // Initialize character count based on initial value\n this.characterCount = this.value.length;\n \n // Setup controller event listeners\n this.setupControllerListeners();\n }\n\n /**\n * Setup controller event listeners\n */\n private setupControllerListeners(): void {\n // Validation events\n this.addEventListener('textarea-validation', (e: any) => {\n this.validationResult = e.detail.validationResult;\n });\n\n // Input events \n this.addEventListener('textarea-input', (e: any) => {\n this.handleControllerInput(e.detail.value);\n });\n\n // Focus/blur events\n this.addEventListener('textarea-focus', () => {\n this.isFocused = true;\n });\n\n this.addEventListener('textarea-blur', () => {\n this.isFocused = false;\n if (this.validateOnBlur) {\n this.validationController.validateOnBlurIfEnabled();\n }\n });\n\n // Clear events\n this.addEventListener('textarea-clear', (e: any) => {\n this.handleControllerClear(e.detail.previousValue);\n });\n }\n\n /**\n * Handle input from controller\n */\n private handleControllerInput(newValue: string): void {\n // Handle max length\n if (this.maxLength && newValue.length > this.maxLength) {\n this.value = newValue.slice(0, this.maxLength);\n } else {\n this.value = newValue;\n }\n\n this.characterCount = this.value.length;\n this.autoResizeIfNeeded();\n this.dispatchChangeEvent();\n\n // Validate if change validation is enabled\n if (this.validateOnChange) {\n this.validationController.validateOnChangeIfEnabled(this.value);\n }\n }\n\n /**\n * Handle clear from controller\n */\n private handleControllerClear(previousValue: string): void {\n this.characterCount = 0;\n this.dispatchChangeEvent();\n \n // Custom clear event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-clear', {\n detail: { value: this.value, previousValue },\n bubbles: true\n }));\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupResizeObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.cleanupResizeObserver();\n }\n\n override firstUpdated(changedProperties: PropertyValues) {\n super.firstUpdated(changedProperties);\n this.updateTextareaValue();\n this.autoResizeIfNeeded();\n \n // Setup resize observer for the textarea element\n if (this.resizeObserver && this.textareaElement) {\n this.resizeObserver.observe(this.textareaElement);\n }\n\n // Setup event controllers with DOM elements\n this.eventController.setupEventListeners();\n }\n\n override updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n\n if (changedProperties.has('value')) {\n this.characterCount = this.value.length;\n this.updateTextareaValue();\n this.autoResizeIfNeeded();\n }\n\n if (changedProperties.has('autoResize')) {\n this.autoResizeIfNeeded();\n }\n\n // Update validation rules if they changed\n if (changedProperties.has('rules')) {\n this.validationController.clearValidation();\n if (this.rules.length > 0 && this.value) {\n this.validationController.validate(this.value);\n }\n }\n }\n\n private setupResizeObserver() {\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n this.dispatchResizeEvent(width, height);\n }\n });\n }\n }\n\n private cleanupResizeObserver() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = undefined;\n }\n }\n\n private updateTextareaValue() {\n if (this.textareaElement && this.textareaElement.value !== this.value) {\n this.textareaElement.value = this.value;\n }\n }\n\n private autoResizeIfNeeded() {\n if (!this.autoResize || !this.textareaElement) return;\n\n // Reset height to auto to get the natural scroll height\n this.textareaElement.style.height = 'auto';\n const scrollHeight = this.textareaElement.scrollHeight;\n\n // Apply min/max height constraints\n let newHeight = scrollHeight;\n if (this.minHeight && newHeight < this.minHeight) {\n newHeight = this.minHeight;\n }\n if (this.maxHeight && newHeight > this.maxHeight) {\n newHeight = this.maxHeight;\n }\n\n this.textareaElement.style.height = `${newHeight}px`;\n }\n\n /**\n * Handle input event (now delegated to event controller via addEventListener)\n */\n private handleInput(e: Event) {\n // This method is kept for backward compatibility but actual handling\n // is now done through the event controller\n this.eventController.handleInput(e);\n }\n\n /**\n * Handle focus event (now delegated to event controller)\n */\n private handleFocus(e: FocusEvent) {\n this.eventController.handleFocus(e);\n \n // Dispatch legacy event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-focus', {\n detail: { \n focused: true,\n originalEvent: e\n },\n bubbles: true\n }));\n }\n\n /**\n * Handle blur event (now delegated to event controller)\n */\n private handleBlur(e: FocusEvent) {\n this.eventController.handleBlur(e);\n \n // Dispatch legacy event for backward compatibility\n this.dispatchEvent(new CustomEvent('nr-blur', {\n detail: { \n focused: false,\n originalEvent: e\n },\n bubbles: true\n }));\n }\n\n /**\n * Handle clear event (now delegated to event controller)\n */\n private handleClear() {\n this.eventController.handleClear();\n }\n\n private dispatchChangeEvent() {\n const detail: TextareaChangeEvent = {\n value: this.value,\n length: this.characterCount,\n exceedsMaxLength: this.maxLength ? this.characterCount > this.maxLength : false,\n validation: this.validationResult\n };\n\n this.dispatchEvent(new CustomEvent('nr-textarea-change', {\n detail,\n bubbles: true\n }));\n }\n\n private dispatchResizeEvent(width: number, height: number) {\n const detail: TextareaResizeEvent = {\n width,\n height,\n direction: this.resize as any\n };\n\n this.dispatchEvent(new CustomEvent('nr-resize', {\n detail,\n bubbles: true\n }));\n }\n\n /**\n * Focus the textarea with optional configuration\n */\n override focus(options?: FocusOptions) {\n this.eventController.focus();\n \n // Handle cursor positioning if needed\n if (options?.cursor !== undefined || options?.select) {\n setTimeout(() => {\n if (!this.textareaElement) return;\n\n if (options?.cursor !== undefined) {\n if (typeof options.cursor === 'number') {\n this.eventController.setCursorPosition(options.cursor);\n } else if (options.cursor === 'start') {\n this.eventController.setCursorPosition(0);\n } else if (options.cursor === 'end') {\n this.eventController.setCursorPosition(this.value.length);\n } else if (options.cursor === 'all') {\n this.eventController.selectAll();\n }\n } else if (options?.select) {\n this.eventController.selectAll();\n }\n });\n }\n }\n\n /**\n * Blur the textarea\n */\n override blur() {\n this.eventController.blur();\n }\n\n /**\n * Get validation status\n */\n getValidationResult(): TextareaValidationResult | undefined {\n return this.validationController.validationResult;\n }\n\n /**\n * Trigger validation manually (ValidatableComponent interface)\n */\n async validate(): Promise<boolean> {\n const result = await this.validationController.validate(this.value);\n return result.isValid;\n }\n\n /**\n * Clear validation state\n */\n clearValidation() {\n this.validationController.clearValidation();\n }\n\n /**\n * Clear the textarea value\n */\n clear() {\n this.eventController.handleClear();\n }\n\n /**\n * Add a validation rule (ValidatableComponent interface)\n */\n addRule(rule: ValidationRule): void {\n this.validationController.addRule(rule);\n }\n\n /**\n * Remove validation rules matching predicate (ValidatableComponent interface)\n */\n removeRule(predicate: (rule: ValidationRule) => boolean): void {\n this.validationController.removeRule(predicate);\n }\n\n /**\n * Clear all validation rules (ValidatableComponent interface)\n */\n clearRules(): void {\n this.validationController.clearRules();\n }\n\n /**\n * Get current validation status (ValidatableComponent interface)\n */\n getValidationStatus(): ValidationStatus {\n const result = this.validationController.validationResult;\n return {\n isValid: result?.isValid ?? true,\n errors: result?.level === 'error' ? result.messages : [],\n warnings: result?.level === 'warning' ? result.messages : []\n };\n }\n\n /**\n * Check if the textarea value is valid\n */\n isValid(): boolean {\n return this.validationController.isValid();\n }\n\n // Form integration methods (FormFieldCapable interface)\n\n /**\n * Check validity (HTML form API compatibility)\n */\n checkValidity(): boolean {\n return this.validationController.isValid();\n }\n\n /**\n * Report validity (HTML form API compatibility)\n */\n reportValidity(): boolean {\n const isValid = this.validationController.isValid();\n if (!isValid) {\n // Trigger validation to show error messages\n this.validationController.validate(this.value);\n }\n return isValid;\n }\n\n /**\n * Set custom validity message (HTML form API compatibility)\n */\n setCustomValidity(message: string): void {\n if (message) {\n // Add custom validation rule\n this.validationController.addRule({\n validator: () => false,\n message,\n level: 'error',\n blocking: true\n });\n } else {\n // Remove custom validation rules\n this.validationController.removeRule(rule => rule.message === message);\n }\n }\n\n /**\n * Trigger validation manually (enhanced version)\n */\n async validateTextarea(): Promise<boolean> {\n const result = await this.validationController.validate(this.value);\n return result.isValid;\n }\n\n /**\n * Set validation state externally (for form integration)\n */\n setValidationStatus(result: TextareaValidationResult): void {\n this.validationResult = result;\n \n // Update state based on validation result\n if (result.level === 'error') {\n this.state = TEXTAREA_STATE.Error;\n } else if (result.level === 'warning') {\n this.state = TEXTAREA_STATE.Warning;\n } else if (result.isValid) {\n this.state = TEXTAREA_STATE.Success;\n }\n \n this.requestUpdate();\n }\n\n private renderLabel() {\n return html`\n <div class=\"textarea-label\">\n <slot name=\"label\"></slot>\n ${this.required ? html`<span class=\"required-indicator\">*</span>` : ''}\n </div>\n `;\n }\n\n private renderTextarea() {\n return html`\n <textarea\n class=\"textarea-element\"\n .value=${this.value}\n .disabled=${this.disabled}\n .readOnly=${this.readonly}\n .required=${this.required || false}\n .rows=${this.rows}\n .cols=${this.cols}\n .placeholder=${this.placeholder}\n .autocomplete=${this.autocomplete}\n .name=${this.name || ''}\n maxlength=${this.maxLength || ''}\n style=\"resize: ${this.resize}\"\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n ></textarea>\n `;\n }\n\n private renderValidationIcon() {\n if (!this.hasFeedback || !this.validationResult) return '';\n\n const iconName = this.validationResult.level === 'error' ? 'error' :\n this.validationResult.level === 'warning' ? 'warning' : 'check-circle';\n\n return html`\n <nr-icon \n class=\"validation-icon ${this.validationResult.level}\"\n name=\"${iconName}\"\n size=\"small\"\n ></nr-icon>\n `;\n }\n\n private renderClearButton() {\n if (!this.allowClear || !this.value || this.disabled || this.readonly) return '';\n\n return html`\n <button\n class=\"clear-button\"\n type=\"button\"\n @click=${this.handleClear}\n aria-label=\"Clear textarea\"\n >\n <nr-icon name=\"x\" size=\"small\"></nr-icon>\n </button>\n `;\n }\n\n private renderCharacterCount() {\n if (!this.showCount) return '';\n\n const maxText = this.maxLength ? ` / ${this.maxLength}` : '';\n const isOverLimit = this.maxLength && this.characterCount > this.maxLength;\n\n return html`\n <div class=\"character-count ${isOverLimit ? 'over-limit' : ''}\">\n ${this.characterCount}${maxText}\n </div>\n `;\n }\n\n private renderHelperText() {\n const hasHelperSlot = this.shadowRoot?.querySelector('slot[name=\"helper-text\"]') as HTMLSlotElement;\n const hasHelperSlotContent = hasHelperSlot?.assignedNodes().length;\n const hasValidationMessages = this.validationResult?.messages.length;\n\n if (!hasHelperSlotContent && !hasValidationMessages) return '';\n\n return html`\n <div class=\"helper-text\">\n ${hasValidationMessages ? \n this.validationResult!.messages.map(msg => html`<div class=\"validation-message ${this.validationResult!.level}\">${msg}</div>`) :\n html`<slot name=\"helper-text\"></slot>`\n }\n </div>\n `;\n }\n\n override render() {\n const classes = [\n 'textarea-container',\n `size-${this.size}`,\n `variant-${this.variant}`,\n `state-${this.state}`,\n this.isFocused ? 'focused' : '',\n this.disabled ? 'disabled' : '',\n this.readonly ? 'readonly' : '',\n this.validationResult ? `validation-${this.validationResult.level}` : ''\n ].filter(Boolean).join(' ');\n\n return html`\n <div class=\"${classes}\">\n ${this.renderLabel()}\n \n <div class=\"textarea-wrapper\">\n <div class=\"addon-before\">\n <slot name=\"addon-before\"></slot>\n </div>\n \n <div class=\"textarea-input-container\">\n ${this.renderTextarea()}\n ${this.renderValidationIcon()}\n ${this.renderClearButton()}\n </div>\n \n <div class=\"addon-after\">\n <slot name=\"addon-after\"></slot>\n </div>\n </div>\n \n <div class=\"textarea-footer\">\n ${this.renderHelperText()}\n ${this.renderCharacterCount()}\n </div>\n </div>\n `;\n }\n}"]}
|
package/textarea.style.d.ts
CHANGED
|
File without changes
|
package/textarea.style.js
CHANGED
|
File without changes
|
package/textarea.style.js.map
CHANGED
|
File without changes
|
package/textarea.types.d.ts
CHANGED
|
File without changes
|
package/textarea.types.js
CHANGED
|
File without changes
|
package/textarea.types.js.map
CHANGED
|
File without changes
|