pdm-ui-kit 1.4.0 → 1.6.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.
Files changed (46) hide show
  1. package/README.md +28 -0
  2. package/alert/alert-dialog.component.d.ts +14 -2
  3. package/alert/alert.module.d.ts +2 -1
  4. package/dialog/dialog.component.d.ts +18 -26
  5. package/dialog/dialog.module.d.ts +1 -1
  6. package/esm2020/alert/alert-dialog.component.mjs +101 -11
  7. package/esm2020/alert/alert.module.mjs +5 -4
  8. package/esm2020/dialog/dialog.component.mjs +43 -85
  9. package/esm2020/dialog/dialog.module.mjs +10 -4
  10. package/esm2020/input/input.component.mjs +10 -3
  11. package/esm2020/src/alert/alert-dialog.component.mjs +101 -11
  12. package/esm2020/src/alert/alert.module.mjs +5 -4
  13. package/esm2020/src/dialog/dialog.component.mjs +43 -85
  14. package/esm2020/src/dialog/dialog.module.mjs +10 -4
  15. package/esm2020/src/input/input.component.mjs +10 -3
  16. package/esm2020/src/utils/cn.mjs +19 -0
  17. package/esm2020/src/utils/public-api.mjs +2 -1
  18. package/fesm2015/pdm-ui-kit-src-alert.mjs +103 -12
  19. package/fesm2015/pdm-ui-kit-src-alert.mjs.map +1 -1
  20. package/fesm2015/pdm-ui-kit-src-dialog.mjs +50 -85
  21. package/fesm2015/pdm-ui-kit-src-dialog.mjs.map +1 -1
  22. package/fesm2015/pdm-ui-kit-src-input.mjs +8 -2
  23. package/fesm2015/pdm-ui-kit-src-input.mjs.map +1 -1
  24. package/fesm2015/pdm-ui-kit-src-utils.mjs +21 -1
  25. package/fesm2015/pdm-ui-kit-src-utils.mjs.map +1 -1
  26. package/fesm2015/pdm-ui-kit.mjs +169 -110
  27. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  28. package/fesm2020/pdm-ui-kit-src-alert.mjs +103 -12
  29. package/fesm2020/pdm-ui-kit-src-alert.mjs.map +1 -1
  30. package/fesm2020/pdm-ui-kit-src-dialog.mjs +50 -85
  31. package/fesm2020/pdm-ui-kit-src-dialog.mjs.map +1 -1
  32. package/fesm2020/pdm-ui-kit-src-input.mjs +8 -2
  33. package/fesm2020/pdm-ui-kit-src-input.mjs.map +1 -1
  34. package/fesm2020/pdm-ui-kit-src-utils.mjs +21 -1
  35. package/fesm2020/pdm-ui-kit-src-utils.mjs.map +1 -1
  36. package/fesm2020/pdm-ui-kit.mjs +169 -110
  37. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  38. package/input/input.component.d.ts +4 -1
  39. package/package.json +3 -1
  40. package/src/alert/alert-dialog.component.d.ts +14 -2
  41. package/src/alert/alert.module.d.ts +2 -1
  42. package/src/dialog/dialog.component.d.ts +18 -26
  43. package/src/dialog/dialog.module.d.ts +1 -1
  44. package/src/input/input.component.d.ts +4 -1
  45. package/src/utils/cn.d.ts +15 -0
  46. package/src/utils/public-api.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pdm-ui-kit-src-input.mjs","sources":["../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-otp.component.ts","../../../src/input/input-otp.component.html","../../../src/input/input-password.component.ts","../../../src/input/input-password.component.html","../../../src/input/textarea.component.ts","../../../src/input/textarea.component.html","../../../src/input/input.module.ts","../../../src/input/pdm-ui-kit-src-input.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\nexport type PdmInputSize = \"mini\" | \"small\" | \"regular\" | \"large\";\nexport type PdmInputRoundness = \"default\" | \"round\";\n\n@Component({\n\tselector: \"pdm-input\",\n\ttemplateUrl: \"./input.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() readonly = false;\n\t@Input() required = false;\n\t@Input() invalid = false;\n\t@Input() size: PdmInputSize = \"regular\";\n\t@Input() roundness: PdmInputRoundness = \"default\";\n\t@Input() className = \"\";\n\t@Input() inputClassName = \"\";\n\t@Input() label = \"\";\n\t@Input() helperText = \"\";\n\t@Input() errorText = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() blurred = new EventEmitter<FocusEvent>();\n\n\tconstructor() {\n\t\tif (this.required && this.disabled) {\n\t\t\tconsole.warn('PdmInputComponent: required + disabled is invalid — a required field cannot be disabled');\n\t\t}\n\t}\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonBlur(event: FocusEvent): void {\n\t\tthis.blurred.emit(event);\n\t}\n\n\tget helperAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-helper` : null;\n\t}\n\n\tget errorAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-error` : null;\n\t}\n\n\tget descriptionAttrId(): string | null {\n\t\treturn this.invalid && this.errorText ? this.errorAttrId : this.helperAttrId;\n\t}\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-group\",\n\ttemplateUrl: \"./input-group.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputGroupComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() prefixText = \"\";\n\t@Input() suffixText = \"\";\n\t@Input() prefixIcon = \"\";\n\t@Input() suffixIcon = \"\";\n\t@Input() buttonText = \"\";\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() buttonClick = new EventEmitter<MouseEvent>();\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonButtonClick(event: MouseEvent): void {\n\t\tthis.buttonClick.emit(event);\n\t}\n}\n","<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 box-border items-center overflow-hidden rounded-md border border-solid border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 appearance-none box-border border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype ElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\ttype QueryList,\n\tViewChildren,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-otp\",\n\ttemplateUrl: \"./input-otp.component.html\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputOtpComponent {\n\t@Input() length = 6;\n\t@Input() groupSize = 3;\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() completed = new EventEmitter<string>();\n\n\t@ViewChildren(\"otpInput\") private readonly inputs?: QueryList<\n\t\tElementRef<HTMLInputElement>\n\t>;\n\n\tvalues: string[] = Array.from({ length: this.length }, () => \"\");\n\n\tngOnChanges(): void {\n\t\tif (this.values.length !== this.length) {\n\t\t\tthis.values = Array.from(\n\t\t\t\t{ length: this.length },\n\t\t\t\t(_, index) => this.values[index] ?? \"\",\n\t\t\t);\n\t\t}\n\t}\n\n\ttrackByIndex(index: number): number {\n\t\treturn index;\n\t}\n\n\tonInput(index: number, event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst char = (input.value || \"\").replace(/\\D+/g, \"\").slice(-1);\n\n\t\tthis.values[index] = char;\n\t\tinput.value = char;\n\t\tthis.emit();\n\n\t\tif (char) {\n\t\t\tthis.focusInput(index + 1, true);\n\t\t}\n\t}\n\n\tonKeyDown(index: number, event: KeyboardEvent): void {\n\t\tif (event.key === \"Backspace\" && !this.values[index]) {\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index + 1);\n\t\t}\n\t}\n\n\tonPaste(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\n\t\tconst pastedText = (event.clipboardData?.getData(\"text\") ?? \"\")\n\t\t\t.replace(/\\D+/g, \"\")\n\t\t\t.slice(0, this.length);\n\n\t\tif (!pastedText) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.values = Array.from(\n\t\t\t{ length: this.length },\n\t\t\t(_, index) => pastedText[index] ?? \"\",\n\t\t);\n\t\tthis.emit();\n\n\t\tconst nextIndex = Math.min(pastedText.length, this.length - 1);\n\t\tthis.focusInput(nextIndex);\n\t}\n\n\tgetInputClasses(index: number): string {\n\t\tconst classes = [\n\t\t\t\"h-9 w-9 appearance-none box-border border border-solid bg-background text-center text-sm font-normal text-foreground outline-none transition focus:outline-none focus-visible:outline-none\",\n\t\t\t\"shadow-sm\",\n\t\t\t\"focus:border-input focus:ring-1 focus:ring-primary/30\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t];\n\n\t\tif (this.invalid) {\n\t\t\tclasses.push(\n\t\t\t\t\"border-destructive focus:border-destructive focus:ring-destructive\",\n\t\t\t);\n\t\t} else {\n\t\t\tclasses.push(\"border-input\");\n\t\t}\n\n\t\tif (this.isGroupStart(index)) {\n\t\t\tclasses.push(\"rounded-l-md border-l\");\n\t\t} else {\n\t\t\tclasses.push(\"border-l-0\");\n\t\t}\n\n\t\tif (this.isGroupEnd(index)) {\n\t\t\tclasses.push(\"rounded-r-md\");\n\t\t}\n\n\t\treturn classes.join(\" \");\n\t}\n\n\tshouldShowSeparator(index: number): boolean {\n\t\treturn (\n\t\t\tthis.groupSize > 0 &&\n\t\t\t(index + 1) % this.groupSize === 0 &&\n\t\t\tindex < this.length - 1\n\t\t);\n\t}\n\n\tprivate isGroupStart(index: number): boolean {\n\t\treturn this.groupSize <= 0 || index % this.groupSize === 0;\n\t}\n\n\tprivate isGroupEnd(index: number): boolean {\n\t\tif (this.groupSize <= 0) {\n\t\t\treturn index === this.length - 1;\n\t\t}\n\t\treturn (index + 1) % this.groupSize === 0 || index === this.length - 1;\n\t}\n\n\tprivate emit(): void {\n\t\tconst value = this.values.join(\"\");\n\t\tthis.valueChange.emit(value);\n\n\t\tif (value.length === this.length && !this.values.includes(\"\")) {\n\t\t\tthis.completed.emit(value);\n\t\t}\n\t}\n\n\tprivate focusInput(index: number, deferred = false): void {\n\t\tif (deferred) {\n\t\t\trequestAnimationFrame(() => this.focusInput(index, false));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.inputs || index < 0 || index >= this.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = this.inputs.get(index)?.nativeElement;\n\t\tif (input) {\n\t\t\tinput.focus();\n\t\t\tinput.select();\n\t\t}\n\t}\n}\n","<div [ngClass]=\"['inline-flex items-center justify-center', className]\" (paste)=\"onPaste($event)\">\n <ng-container *ngFor=\"let value of values; let index = index; trackBy: trackByIndex\">\n <input\n #otpInput\n [class]=\"getInputClasses(index)\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n [attr.name]=\"'otp-digit-' + index\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"'OTP digit ' + (index + 1)\"\n (input)=\"onInput(index, $event)\"\n (keydown)=\"onKeyDown(index, $event)\"\n />\n <span\n *ngIf=\"shouldShowSeparator(index)\"\n class=\"mx-2 mt-[-1px] h-px w-6 bg-foreground opacity-80\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PdmInputRoundness, PdmInputSize } from './input.component';\n\n@Component({\n selector: 'pdm-input-password',\n templateUrl: './input-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmInputPasswordComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() size: PdmInputSize = 'regular';\n @Input() roundness: PdmInputRoundness = 'default';\n @Input() className = '';\n @Input() inputClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() blurred = new EventEmitter<FocusEvent>();\n\n showPassword = false;\n\n get inputType(): 'text' | 'password' {\n return this.showPassword ? 'text' : 'password';\n }\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).value);\n }\n\n onBlur(event: FocusEvent): void {\n this.blurred.emit(event);\n }\n\n toggleVisibility(): void {\n if (this.disabled) {\n return;\n }\n\n this.showPassword = !this.showPassword;\n }\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div class=\"relative\">\n <input\n [id]=\"id\"\n [type]=\"inputType\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 file:text-foreground placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 pr-10 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 appearance-none box-border items-center justify-center rounded border-0 bg-transparent p-0 text-muted-foreground outline-none transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-60\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n (click)=\"toggleVisibility()\"\n >\n <svg\n *ngIf=\"!showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path\n d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"\n ></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n <svg\n *ngIf=\"showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path d=\"M3 3l18 18\"></path>\n <path d=\"M10.58 10.58a2 2 0 1 0 2.83 2.83\"></path>\n <path\n d=\"M9.88 5.09A10.94 10.94 0 0 1 12 4.91c5.05 0 9.27 3.11 10.6 7.09a1 1 0 0 1 0 .64 11.9 11.9 0 0 1-1.84 3.2\"\n ></path>\n <path\n d=\"M6.61 6.61A11.81 11.81 0 0 0 1.4 12a1 1 0 0 0 0 .64 11.83 11.83 0 0 0 8.79 7.54\"\n ></path>\n </svg>\n </button>\n </div>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pdm-textarea',\n templateUrl: './textarea.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmTextareaComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() className = '';\n @Input() textareaClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLTextAreaElement).value);\n }\n}\n","<div [ngClass]=\"['grid w-full gap-2', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground flex min-h-20 w-full appearance-none box-border rounded-md border border-solid bg-transparent px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n textareaClassName,\n ]\"\n (input)=\"onInput($event)\"\n ></textarea>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmInputComponent } from \"./input.component\";\nimport { PdmInputGroupComponent } from \"./input-group.component\";\nimport { PdmInputOtpComponent } from \"./input-otp.component\";\nimport { PdmInputPasswordComponent } from \"./input-password.component\";\nimport { PdmTextareaComponent } from \"./textarea.component\";\n\nconst COMPONENTS = [\n\tPdmInputComponent,\n\tPdmInputGroupComponent,\n\tPdmInputOtpComponent,\n\tPdmInputPasswordComponent,\n\tPdmTextareaComponent,\n];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdm-ui-kit-src-input.mjs","sources":["../../../src/input/input.component.ts","../../../src/input/input.component.html","../../../src/input/input-group.component.ts","../../../src/input/input-group.component.html","../../../src/input/input-otp.component.ts","../../../src/input/input-otp.component.html","../../../src/input/input-password.component.ts","../../../src/input/input-password.component.html","../../../src/input/textarea.component.ts","../../../src/input/textarea.component.html","../../../src/input/input.module.ts","../../../src/input/pdm-ui-kit-src-input.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\nexport type PdmInputSize = \"mini\" | \"small\" | \"regular\" | \"large\";\nexport type PdmInputRoundness = \"default\" | \"round\";\nexport type PdmInputIconPosition = \"left\" | \"right\";\n\n@Component({\n\tselector: \"pdm-input\",\n\ttemplateUrl: \"./input.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() readonly = false;\n\t@Input() required = false;\n\t@Input() invalid = false;\n\t@Input() size: PdmInputSize = \"regular\";\n\t@Input() roundness: PdmInputRoundness = \"default\";\n\t@Input() icon = \"\";\n\t@Input() iconPosition: PdmInputIconPosition = \"left\";\n\t@Input() className = \"\";\n\t@Input() inputClassName = \"\";\n\t@Input() label = \"\";\n\t@Input() helperText = \"\";\n\t@Input() errorText = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() blurred = new EventEmitter<FocusEvent>();\n\n\tconstructor() {\n\t\tif (this.required && this.disabled) {\n\t\t\tconsole.warn('PdmInputComponent: required + disabled is invalid — a required field cannot be disabled');\n\t\t}\n\t}\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonBlur(event: FocusEvent): void {\n\t\tthis.blurred.emit(event);\n\t}\n\n\tget helperAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-helper` : null;\n\t}\n\n\tget errorAttrId(): string | null {\n\t\treturn this.id ? `${this.id}-error` : null;\n\t}\n\n\tget descriptionAttrId(): string | null {\n\t\treturn this.invalid && this.errorText ? this.errorAttrId : this.helperAttrId;\n\t}\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div [ngClass]=\"icon ? 'relative' : ''\">\n <pdm-icon\n *ngIf=\"icon\"\n [name]=\"icon\"\n [size]=\"16\"\n aria-hidden=\"true\"\n [ngClass]=\"[\n 'pointer-events-none absolute top-1/2 -translate-y-1/2 text-muted-foreground',\n iconPosition === 'right' ? 'right-3' : 'left-3',\n ]\"\n ></pdm-icon>\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-describedby]=\"descriptionAttrId\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n icon && iconPosition === 'left' ? 'pl-9' : '',\n icon && iconPosition === 'right' ? 'pr-9' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n type === 'file' ? 'text-sm' : 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n <p *ngIf=\"!invalid && helperText\" [id]=\"helperAttrId\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" [id]=\"errorAttrId\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOutput,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-group\",\n\ttemplateUrl: \"./input-group.component.html\",\n\tstyles: [\":host { display: block; }\"],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputGroupComponent {\n\t@Input() id = \"\";\n\t@Input() type = \"text\";\n\t@Input() value = \"\";\n\t@Input() placeholder = \"\";\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() prefixText = \"\";\n\t@Input() suffixText = \"\";\n\t@Input() prefixIcon = \"\";\n\t@Input() suffixIcon = \"\";\n\t@Input() buttonText = \"\";\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() buttonClick = new EventEmitter<MouseEvent>();\n\n\tonInput(event: Event): void {\n\t\tthis.valueChange.emit((event.target as HTMLInputElement).value);\n\t}\n\n\tonButtonClick(event: MouseEvent): void {\n\t\tthis.buttonClick.emit(event);\n\t}\n}\n","<div\n [ngClass]=\"[\n 'flex w-full flex-col items-stretch gap-2 sm:flex-row sm:items-center',\n disabled ? 'opacity-50' : '',\n className,\n ]\"\n>\n <div\n [ngClass]=\"[\n 'flex h-9 min-w-0 flex-1 box-border items-center overflow-hidden rounded-md border border-solid border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50',\n invalid ? 'border-destructive focus-within:ring-destructive' : '',\n disabled ? 'cursor-not-allowed' : '',\n ]\"\n >\n <div\n *ngIf=\"prefixText || prefixIcon\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pr-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"prefixIcon\" [name]=\"prefixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"prefixText\">{{ prefixText }}</span>\n <ng-content select=\"[pdmInputGroupPrefix]\"></ng-content>\n </div>\n\n <input\n [id]=\"id\"\n [type]=\"type\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'h-full min-w-0 flex-1 appearance-none box-border border-0 bg-transparent p-0 text-sm text-foreground outline-none placeholder:text-muted-foreground aria-invalid:placeholder:text-destructive/70',\n type === 'file'\n ? 'text-sm file:mr-2 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground'\n : '',\n ]\"\n (input)=\"onInput($event)\"\n />\n\n <div\n *ngIf=\"!buttonText && (suffixText || suffixIcon)\"\n class=\"inline-flex h-full shrink-0 items-center gap-2 pl-2 text-sm text-muted-foreground\"\n >\n <pdm-icon *ngIf=\"suffixIcon\" [name]=\"suffixIcon\" [size]=\"16\"></pdm-icon>\n <span *ngIf=\"suffixText\" class=\"font-medium\">{{ suffixText }}</span>\n <ng-content select=\"[pdmInputGroupSuffix]\"></ng-content>\n </div>\n </div>\n\n <button\n *ngIf=\"buttonText\"\n type=\"button\"\n [disabled]=\"disabled\"\n class=\"inline-flex h-9 w-full shrink-0 appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed sm:w-auto\"\n (click)=\"onButtonClick($event)\"\n >\n {{ buttonText }}\n </button>\n</div>\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\ttype ElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\ttype QueryList,\n\tViewChildren,\n} from \"@angular/core\";\n\n@Component({\n\tselector: \"pdm-input-otp\",\n\ttemplateUrl: \"./input-otp.component.html\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PdmInputOtpComponent {\n\t@Input() length = 6;\n\t@Input() groupSize = 3;\n\t@Input() disabled = false;\n\t@Input() invalid = false;\n\t@Input() className = \"\";\n\n\t@Output() valueChange = new EventEmitter<string>();\n\t@Output() completed = new EventEmitter<string>();\n\n\t@ViewChildren(\"otpInput\") private readonly inputs?: QueryList<\n\t\tElementRef<HTMLInputElement>\n\t>;\n\n\tvalues: string[] = Array.from({ length: this.length }, () => \"\");\n\n\tngOnChanges(): void {\n\t\tif (this.values.length !== this.length) {\n\t\t\tthis.values = Array.from(\n\t\t\t\t{ length: this.length },\n\t\t\t\t(_, index) => this.values[index] ?? \"\",\n\t\t\t);\n\t\t}\n\t}\n\n\ttrackByIndex(index: number): number {\n\t\treturn index;\n\t}\n\n\tonInput(index: number, event: Event): void {\n\t\tconst input = event.target as HTMLInputElement;\n\t\tconst char = (input.value || \"\").replace(/\\D+/g, \"\").slice(-1);\n\n\t\tthis.values[index] = char;\n\t\tinput.value = char;\n\t\tthis.emit();\n\n\t\tif (char) {\n\t\t\tthis.focusInput(index + 1, true);\n\t\t}\n\t}\n\n\tonKeyDown(index: number, event: KeyboardEvent): void {\n\t\tif (event.key === \"Backspace\" && !this.values[index]) {\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index - 1);\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.focusInput(index + 1);\n\t\t}\n\t}\n\n\tonPaste(event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\n\t\tconst pastedText = (event.clipboardData?.getData(\"text\") ?? \"\")\n\t\t\t.replace(/\\D+/g, \"\")\n\t\t\t.slice(0, this.length);\n\n\t\tif (!pastedText) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.values = Array.from(\n\t\t\t{ length: this.length },\n\t\t\t(_, index) => pastedText[index] ?? \"\",\n\t\t);\n\t\tthis.emit();\n\n\t\tconst nextIndex = Math.min(pastedText.length, this.length - 1);\n\t\tthis.focusInput(nextIndex);\n\t}\n\n\tgetInputClasses(index: number): string {\n\t\tconst classes = [\n\t\t\t\"h-9 w-9 appearance-none box-border border border-solid bg-background text-center text-sm font-normal text-foreground outline-none transition focus:outline-none focus-visible:outline-none\",\n\t\t\t\"shadow-sm\",\n\t\t\t\"focus:border-input focus:ring-1 focus:ring-primary/30\",\n\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t];\n\n\t\tif (this.invalid) {\n\t\t\tclasses.push(\n\t\t\t\t\"border-destructive focus:border-destructive focus:ring-destructive\",\n\t\t\t);\n\t\t} else {\n\t\t\tclasses.push(\"border-input\");\n\t\t}\n\n\t\tif (this.isGroupStart(index)) {\n\t\t\tclasses.push(\"rounded-l-md border-l\");\n\t\t} else {\n\t\t\tclasses.push(\"border-l-0\");\n\t\t}\n\n\t\tif (this.isGroupEnd(index)) {\n\t\t\tclasses.push(\"rounded-r-md\");\n\t\t}\n\n\t\treturn classes.join(\" \");\n\t}\n\n\tshouldShowSeparator(index: number): boolean {\n\t\treturn (\n\t\t\tthis.groupSize > 0 &&\n\t\t\t(index + 1) % this.groupSize === 0 &&\n\t\t\tindex < this.length - 1\n\t\t);\n\t}\n\n\tprivate isGroupStart(index: number): boolean {\n\t\treturn this.groupSize <= 0 || index % this.groupSize === 0;\n\t}\n\n\tprivate isGroupEnd(index: number): boolean {\n\t\tif (this.groupSize <= 0) {\n\t\t\treturn index === this.length - 1;\n\t\t}\n\t\treturn (index + 1) % this.groupSize === 0 || index === this.length - 1;\n\t}\n\n\tprivate emit(): void {\n\t\tconst value = this.values.join(\"\");\n\t\tthis.valueChange.emit(value);\n\n\t\tif (value.length === this.length && !this.values.includes(\"\")) {\n\t\t\tthis.completed.emit(value);\n\t\t}\n\t}\n\n\tprivate focusInput(index: number, deferred = false): void {\n\t\tif (deferred) {\n\t\t\trequestAnimationFrame(() => this.focusInput(index, false));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.inputs || index < 0 || index >= this.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst input = this.inputs.get(index)?.nativeElement;\n\t\tif (input) {\n\t\t\tinput.focus();\n\t\t\tinput.select();\n\t\t}\n\t}\n}\n","<div [ngClass]=\"['inline-flex items-center justify-center', className]\" (paste)=\"onPaste($event)\">\n <ng-container *ngFor=\"let value of values; let index = index; trackBy: trackByIndex\">\n <input\n #otpInput\n [class]=\"getInputClasses(index)\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n [attr.name]=\"'otp-digit-' + index\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"'OTP digit ' + (index + 1)\"\n (input)=\"onInput(index, $event)\"\n (keydown)=\"onKeyDown(index, $event)\"\n />\n <span\n *ngIf=\"shouldShowSeparator(index)\"\n class=\"mx-2 mt-[-1px] h-px w-6 bg-foreground opacity-80\"\n aria-hidden=\"true\"\n ></span>\n </ng-container>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PdmInputRoundness, PdmInputSize } from './input.component';\n\n@Component({\n selector: 'pdm-input-password',\n templateUrl: './input-password.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmInputPasswordComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() size: PdmInputSize = 'regular';\n @Input() roundness: PdmInputRoundness = 'default';\n @Input() className = '';\n @Input() inputClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n @Output() blurred = new EventEmitter<FocusEvent>();\n\n showPassword = false;\n\n get inputType(): 'text' | 'password' {\n return this.showPassword ? 'text' : 'password';\n }\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLInputElement).value);\n }\n\n onBlur(event: FocusEvent): void {\n this.blurred.emit(event);\n }\n\n toggleVisibility(): void {\n if (this.disabled) {\n return;\n }\n\n this.showPassword = !this.showPassword;\n }\n}\n","<div [ngClass]=\"['grid w-full gap-3', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <div class=\"relative\">\n <input\n [id]=\"id\"\n [type]=\"inputType\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 file:text-foreground placeholder:text-muted-foreground w-full min-w-0 appearance-none box-border rounded-lg border border-solid bg-transparent px-3 py-1 pr-10 text-sm shadow-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n size === 'large' ? 'h-10 px-4 text-sm' : '',\n size === 'regular' ? 'h-9 px-3 text-sm' : '',\n size === 'small' ? 'h-8 px-2 text-sm' : '',\n size === 'mini' ? 'h-6 px-1.5 text-xs' : '',\n roundness === 'round' ? 'rounded-full' : 'rounded-lg',\n 'text-foreground',\n inputClassName,\n ]\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur($event)\"\n />\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 inline-flex h-6 w-6 -translate-y-1/2 appearance-none box-border items-center justify-center rounded border-0 bg-transparent p-0 text-muted-foreground outline-none transition-colors hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-60\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n (click)=\"toggleVisibility()\"\n >\n <svg\n *ngIf=\"!showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path\n d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"\n ></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n <svg\n *ngIf=\"showPassword\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-4 w-4\"\n >\n <path d=\"M3 3l18 18\"></path>\n <path d=\"M10.58 10.58a2 2 0 1 0 2.83 2.83\"></path>\n <path\n d=\"M9.88 5.09A10.94 10.94 0 0 1 12 4.91c5.05 0 9.27 3.11 10.6 7.09a1 1 0 0 1 0 .64 11.9 11.9 0 0 1-1.84 3.2\"\n ></path>\n <path\n d=\"M6.61 6.61A11.81 11.81 0 0 0 1.4 12a1 1 0 0 0 0 .64 11.83 11.83 0 0 0 8.79 7.54\"\n ></path>\n </svg>\n </button>\n </div>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'pdm-textarea',\n templateUrl: './textarea.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PdmTextareaComponent {\n @Input() id = '';\n @Input() value = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() invalid = false;\n @Input() className = '';\n @Input() textareaClassName = '';\n @Input() label = '';\n @Input() helperText = '';\n @Input() errorText = '';\n\n @Output() valueChange = new EventEmitter<string>();\n\n onInput(event: Event): void {\n this.valueChange.emit((event.target as HTMLTextAreaElement).value);\n }\n}\n","<div [ngClass]=\"['grid w-full gap-2', className]\">\n <label\n *ngIf=\"label\"\n [attr.for]=\"id\"\n [ngClass]=\"[\n 'text-sm font-medium leading-none',\n invalid ? 'text-destructive' : 'text-foreground',\n ]\"\n >{{ label }}</label\n >\n <textarea\n [id]=\"id\"\n [rows]=\"rows\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"[\n 'border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive aria-invalid:placeholder:text-destructive/70 placeholder:text-muted-foreground flex min-h-20 w-full appearance-none box-border rounded-md border border-solid bg-transparent px-3 py-2 text-sm shadow-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n textareaClassName,\n ]\"\n (input)=\"onInput($event)\"\n ></textarea>\n <p *ngIf=\"!invalid && helperText\" class=\"m-0 text-sm text-muted-foreground\">\n {{ helperText }}\n </p>\n <p *ngIf=\"invalid && errorText\" class=\"m-0 text-sm text-destructive\">\n {{ errorText }}\n </p>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { PdmIconModule } from \"pdm-ui-kit/src/icon\";\nimport { PdmInputComponent } from \"./input.component\";\nimport { PdmInputGroupComponent } from \"./input-group.component\";\nimport { PdmInputOtpComponent } from \"./input-otp.component\";\nimport { PdmInputPasswordComponent } from \"./input-password.component\";\nimport { PdmTextareaComponent } from \"./textarea.component\";\n\nconst COMPONENTS = [\n\tPdmInputComponent,\n\tPdmInputGroupComponent,\n\tPdmInputOtpComponent,\n\tPdmInputPasswordComponent,\n\tPdmTextareaComponent,\n];\n\n@NgModule({\n\timports: [CommonModule, PdmIconModule],\n\tdeclarations: COMPONENTS,\n\texports: COMPONENTS,\n})\nexport class PdmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
1
4
  /**
2
5
  * Sistema de responsive utilities para PDM UI Kit
3
6
  *
@@ -411,9 +414,26 @@ function getErrorMessage(errorCode, fieldName = 'Field') {
411
414
  return messages[errorCode] || 'Invalid input';
412
415
  }
413
416
 
417
+ /**
418
+ * Merge Tailwind classes intelligently.
419
+ *
420
+ * Combines `clsx` (conditional/array/object inputs) with `tailwind-merge`
421
+ * (deduplicates conflicting Tailwind utilities, last wins). This is the
422
+ * shadcn/ui `cn()` pattern. Use it wherever the library composes a
423
+ * user-supplied `className` override with internal base classes, so the
424
+ * override reliably wins regardless of generated CSS order.
425
+ *
426
+ * @example
427
+ * cn("max-w-[640px]", "max-w-[800px]") // => "max-w-[800px]"
428
+ * cn("p-4", condition && "p-6") // => "p-6" when condition is true
429
+ */
430
+ function cn(...inputs) {
431
+ return twMerge(clsx(inputs));
432
+ }
433
+
414
434
  /**
415
435
  * Generated bundle index. Do not edit.
416
436
  */
417
437
 
418
- export { BREAKPOINTS, RESPONSIVE_CONTAINER, RESPONSIVE_DISPLAY, TABLE_RESPONSIVE, Z_INDEX, getErrorMessage, hasLowercase, hasMaxLength, hasMinLength, hasNumber, hasSpecialChar, hasUppercase, isMaxValue, isMinValue, isNumeric, isValidEmail, isValidPhone, isValidUrl, logZIndexStack, overflowResponsive, responsive, spacingResponsive, valuesMatch, widthResponsive };
438
+ export { BREAKPOINTS, RESPONSIVE_CONTAINER, RESPONSIVE_DISPLAY, TABLE_RESPONSIVE, Z_INDEX, cn, getErrorMessage, hasLowercase, hasMaxLength, hasMinLength, hasNumber, hasSpecialChar, hasUppercase, isMaxValue, isMinValue, isNumeric, isValidEmail, isValidPhone, isValidUrl, logZIndexStack, overflowResponsive, responsive, spacingResponsive, valuesMatch, widthResponsive };
419
439
  //# sourceMappingURL=pdm-ui-kit-src-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdm-ui-kit-src-utils.mjs","sources":["../../../src/utils/responsive.ts","../../../src/utils/z-index.ts","../../../src/utils/validators.ts","../../../src/utils/pdm-ui-kit-src-utils.ts"],"sourcesContent":["/**\n * Sistema de responsive utilities para PDM UI Kit\n * \n * Proporciona constantes, tipos y helpers para manejar responsive design\n * de forma consistente en todos los componentes.\n */\n\n/**\n * Breakpoints estándar de Tailwind CSS\n * Mobile-first approach: los estilos base son para mobile, los breakpoints son MIN-WIDTH\n */\nexport const BREAKPOINTS = {\n sm: '640px', // tablet portrait\n md: '768px', // tablet landscape\n lg: '1024px', // desktop\n xl: '1280px', // large desktop\n '2xl': '1536px' // extra large desktop\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\n/**\n * Estrategias de overflow para componentes que pueden desbordar\n */\nexport type OverflowStrategy = \n | 'auto' // Scroll automático cuando sea necesario\n | 'scroll' // Siempre scroll\n | 'hidden' // Ocultar contenido que desborda\n | 'visible'; // Permitir desbordamiento\n\n/**\n * Estrategias responsive para tablas\n */\nexport type TableResponsiveStrategy = \n | 'scroll' // Scroll horizontal en mobile (default, más simple)\n | 'stack' // Convertir filas en cards verticales en mobile\n | 'wrap' // Permitir que el contenido haga wrap\n | 'collapse'; // Colapsar columnas menos importantes en mobile\n\n/**\n * Helper para generar clases responsive de forma programática\n * \n * @example\n * responsive({ default: 'block', sm: 'flex', lg: 'grid' })\n * // Returns: 'block sm:flex lg:grid'\n */\nexport function responsive<T extends string>(\n config: Partial<Record<Breakpoint | 'default', T>>\n): string {\n const classes: string[] = [];\n \n if (config.default) {\n classes.push(config.default);\n }\n \n (['sm', 'md', 'lg', 'xl', '2xl'] as Breakpoint[]).forEach(bp => {\n if (config[bp]) {\n classes.push(`${bp}:${config[bp]}`);\n }\n });\n \n return classes.join(' ');\n}\n\n/**\n * Helper para overflow responsive\n * Maneja el caso común de scroll en mobile, auto en desktop\n * \n * @example\n * overflowResponsive('x', 'scroll', 'auto')\n * // Returns: 'overflow-x-scroll sm:overflow-x-auto'\n */\nexport function overflowResponsive(\n axis: 'x' | 'y' | 'both',\n mobile: OverflowStrategy,\n desktop?: OverflowStrategy\n): string {\n const axisClass = axis === 'both' ? 'overflow' : `overflow-${axis}`;\n const mobileClass = `${axisClass}-${mobile}`;\n \n if (!desktop || desktop === mobile) {\n return mobileClass;\n }\n \n return `${mobileClass} sm:${axisClass}-${desktop}`;\n}\n\n/**\n * Helper para spacing responsive\n * Útil para padding/margin que necesita ajustarse por breakpoint\n * \n * @example\n * spacingResponsive('px', { default: '4', sm: '6', lg: '8' })\n * // Returns: 'px-4 sm:px-6 lg:px-8'\n */\nexport function spacingResponsive(\n property: 'p' | 'px' | 'py' | 'pt' | 'pr' | 'pb' | 'pl' | 'm' | 'mx' | 'my' | 'mt' | 'mr' | 'mb' | 'ml',\n values: Partial<Record<Breakpoint | 'default', string>>\n): string {\n return responsive(\n Object.entries(values).reduce((acc, [key, value]) => {\n acc[key as Breakpoint | 'default'] = `${property}-${value}` as any;\n return acc;\n }, {} as Record<Breakpoint | 'default', string>)\n );\n}\n\n/**\n * Helper para width responsive\n * \n * @example\n * widthResponsive({ default: 'full', sm: 'auto', lg: '1/2' })\n * // Returns: 'w-full sm:w-auto lg:w-1/2'\n */\nexport function widthResponsive(\n values: Partial<Record<Breakpoint | 'default', string>>\n): string {\n return responsive(\n Object.entries(values).reduce((acc, [key, value]) => {\n acc[key as Breakpoint | 'default'] = `w-${value}` as any;\n return acc;\n }, {} as Record<Breakpoint | 'default', string>)\n );\n}\n\n/**\n * Clases comunes para containers responsive\n * Pensadas para wrappers que contienen contenido que puede desbordar\n */\nexport const RESPONSIVE_CONTAINER = {\n // Container con scroll horizontal en mobile, contenido visible en desktop\n tableWrapper: 'relative w-full overflow-x-auto sm:overflow-x-visible',\n \n // Container con padding negativo en mobile para scroll edge-to-edge\n tableWrapperFullBleed: 'relative w-full -mx-4 px-4 overflow-x-auto sm:mx-0 sm:px-0 sm:overflow-x-visible',\n \n // Container con max-width responsive\n contentWrapper: 'w-full mx-auto px-4 sm:px-6 lg:px-8 max-w-screen-2xl',\n \n // Container para modals/dialogs\n modalWrapper: 'w-full max-w-lg mx-auto px-4 sm:px-0',\n \n // Container para forms\n formWrapper: 'w-full max-w-md mx-auto space-y-4'\n} as const;\n\n/**\n * Clases comunes para display responsive\n */\nexport const RESPONSIVE_DISPLAY = {\n // Ocultar en mobile, mostrar en desktop\n hideOnMobile: 'hidden sm:block',\n \n // Mostrar solo en mobile\n showOnMobile: 'block sm:hidden',\n \n // Stack en mobile, flex en desktop\n stackToFlex: 'flex flex-col sm:flex-row',\n \n // Stack en mobile, grid en desktop\n stackToGrid: 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3'\n} as const;\n\n/**\n * Clases para table responsive strategies\n */\nexport const TABLE_RESPONSIVE = {\n // Scroll horizontal (default, más simple)\n scroll: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full min-w-full',\n cell: 'whitespace-nowrap'\n },\n \n // Permitir wrap del contenido\n wrap: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full',\n cell: 'whitespace-normal break-words'\n },\n \n // Stack en mobile (cada fila se convierte en card)\n // Requiere lógica adicional en el componente\n stack: {\n wrapper: 'relative w-full',\n table: 'w-full',\n row: 'block sm:table-row border-b sm:border-b-0',\n cell: 'block sm:table-cell py-2 sm:py-0 before:content-[attr(data-label)] before:font-medium before:inline-block before:w-32 sm:before:content-none'\n },\n \n // Collapse: ocultar columnas menos importantes en mobile\n // Se usa con clases de visibility en las columnas específicas\n collapse: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full',\n cell: 'whitespace-nowrap',\n // Estas clases se aplican a columnas opcionales\n optionalColumn: 'hidden md:table-cell'\n }\n} as const;\n","/**\n * Z-Index Scale - Sistema centralizado de z-index\n *\n * JERARQUÍA (de menor a mayor):\n * 1. base (z-0) - Elementos normales del DOM\n * 2. dropdown (z-10) - Selects, combobox, date-pickers\n * 3. sticky (z-20) - Headers, navigation bars\n * 4. drawerBackdrop (z-30) - Backdrop de drawers\n * 5. drawer (z-40) - Sidebar drawer, sheets laterales\n * 6. modalBackdrop (z-40) - Backdrop de modals ( mismo nivel que drawer)\n * 7. modal (z-50) - Dialogs, alert-dialogs\n * 8. popover (z-[70]) - Tooltips, dropdowns DENTRO de modals\n * 9. toast (z-[100]) - Notificaciones que deben estar sobre TODO\n *\n * REGLA CRÍTICA:\n * - Componentes overlay (select options, dropdown menu, tooltip) SIEMPRE z-[70] o mayor\n * - Esto permite que funcionen DENTRO de modals (z-50)\n * - Backdrop de modal debe ser z-40 para estar DEBAJO del contenido del modal (z-50)\n */\n\nexport const Z_INDEX = {\n\t/**\n\t * Base - contenido normal del DOM\n\t */\n\tbase: \"z-0\",\n\n\t/**\n\t * Dropdown - Selects, combobox, date-pickers\n\t * Debe estar SOBRE contenido normal pero BAJO overlays\n\t */\n\tdropdown: \"z-10\",\n\n\t/**\n\t * Sticky - Headers, navigation fija\n\t */\n\tsticky: \"z-20\",\n\n\t/**\n\t * Drawer backdrop - Backdrop de sidebar drawer\n\t * Debe estar DEBAJO del drawer panel y DEBAJO de modals\n\t */\n\tdrawerBackdrop: \"z-30\",\n\n\t/**\n\t * Drawer - Sidebar drawer, sheets laterales\n\t * Debe estar SOBRE su backdrop pero BAJO modals\n\t */\n\tdrawer: \"z-40\",\n\n\t/**\n\t * Modal backdrop - Backdrop de dialogs\n\t * Mismo nivel que drawer backdrop (z-40)\n\t */\n\tmodalBackdrop: \"z-40\",\n\n\t/**\n\t * Modal - Dialogs, alert-dialogs\n\t * Debe estar SOBRE su backdrop\n\t */\n\tmodal: \"z-50\",\n\n\t/**\n\t * Popover - Tooltips, dropdowns, selects options DENTRO de modals\n\t * CRÍTICO: Debe ser MAYOR que modal (z-50) para aparecer sobre modals\n\t * USAR SIEMPRE mergeOverlayPanelClass() para asegurar este valor\n\t */\n\tpopover: \"z-[70]\",\n\n\t/**\n\t * Toast - Notificaciones globales\n\t * Debe estar sobre TODO\n\t */\n\ttoast: \"z-[100]\",\n} as const;\n\n/**\n * Helper para debugging z-index issues\n */\nexport function logZIndexStack(element: HTMLElement): void {\n\tif (typeof window === \"undefined\") return;\n\n\tlet current: HTMLElement | null = element;\n\tconst stack: Array<{ element: string; zIndex: string; position: string }> =\n\t\t[];\n\n\twhile (current && current !== document.body) {\n\t\tconst computed = window.getComputedStyle(current);\n\t\tconst zIndex = computed.zIndex;\n\t\tconst position = computed.position;\n\n\t\tif (zIndex !== \"auto\") {\n\t\t\tstack.push({\n\t\t\t\telement:\n\t\t\t\t\tcurrent.tagName +\n\t\t\t\t\t(current.className ? `.${current.className.split(\" \")[0]}` : \"\"),\n\t\t\t\tzIndex,\n\t\t\t\tposition,\n\t\t\t});\n\t\t}\n\n\t\tcurrent = current.parentElement;\n\t}\n\n\tconsole.table(stack);\n}\n","/**\n * Form validation utilities for PDM UI Kit\n *\n * Pure validation functions and patterns that work with any form validation library.\n * These functions validate values directly and return true/false, making them framework-agnostic.\n */\n\nexport interface PdmValidationError {\n message: string;\n code: string;\n}\n\n/**\n * Validate email format\n *\n * @example\n * isValidEmail('user@example.com') // true\n */\nexport function isValidEmail(value: string): boolean {\n if (!value) return false;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n}\n\n/**\n * Validate URL format\n *\n * @example\n * isValidUrl('https://example.com') // true\n */\nexport function isValidUrl(value: string): boolean {\n if (!value) return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate minimum length\n *\n * @example\n * hasMinLength('password', 8) // true if length >= 8\n */\nexport function hasMinLength(value: string, min: number): boolean {\n if (!value) return false;\n return String(value).length >= min;\n}\n\n/**\n * Validate maximum length\n *\n * @example\n * hasMaxLength('bio', 500) // true if length <= 500\n */\nexport function hasMaxLength(value: string, max: number): boolean {\n if (!value) return true;\n return String(value).length <= max;\n}\n\n/**\n * Validate that value only contains numbers\n *\n * @example\n * isNumeric('12345') // true\n */\nexport function isNumeric(value: string): boolean {\n if (!value) return false;\n return /^\\d+$/.test(String(value));\n}\n\n/**\n * Validate that two values match (e.g., password confirmation)\n *\n * @example\n * valuesMatch(password, confirmPassword) // true if they match\n */\nexport function valuesMatch(value1: string, value2: string): boolean {\n if (!value1 || !value2) return false;\n return value1 === value2;\n}\n\n/**\n * Validate minimum value\n *\n * @example\n * isMinValue(age, 18) // true if age >= 18\n */\nexport function isMinValue(value: number, min: number): boolean {\n if (value === null || value === undefined) return false;\n return value >= min;\n}\n\n/**\n * Validate maximum value\n *\n * @example\n * isMaxValue(percentage, 100) // true if percentage <= 100\n */\nexport function isMaxValue(value: number, max: number): boolean {\n if (value === null || value === undefined) return false;\n return value <= max;\n}\n\n/**\n * Validate phone number format (basic international format)\n * Accepts: +1234567890, (123) 456-7890, 123-456-7890\n *\n * @example\n * isValidPhone('+1234567890') // true\n */\nexport function isValidPhone(value: string): boolean {\n if (!value) return false;\n const phoneRegex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/;\n return phoneRegex.test(String(value).replace(/\\s/g, ''));\n}\n\n/**\n * Check if value contains at least one uppercase letter\n *\n * @example\n * hasUppercase('Password') // true\n */\nexport function hasUppercase(value: string): boolean {\n if (!value) return false;\n return /[A-Z]/.test(value);\n}\n\n/**\n * Check if value contains at least one lowercase letter\n *\n * @example\n * hasLowercase('Password') // true\n */\nexport function hasLowercase(value: string): boolean {\n if (!value) return false;\n return /[a-z]/.test(value);\n}\n\n/**\n * Check if value contains at least one number\n *\n * @example\n * hasNumber('Pass123') // true\n */\nexport function hasNumber(value: string): boolean {\n if (!value) return false;\n return /\\d/.test(value);\n}\n\n/**\n * Check if value contains at least one special character\n *\n * @example\n * hasSpecialChar('Pass@123') // true\n */\nexport function hasSpecialChar(value: string): boolean {\n if (!value) return false;\n return /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(value);\n}\n\n/**\n * Get user-friendly error message for validation failures\n *\n * @example\n * getErrorMessage('invalidEmail') // \"Please enter a valid email address\"\n */\nexport function getErrorMessage(errorCode: string, fieldName: string = 'Field'): string {\n const messages: Record<string, string> = {\n required: `${fieldName} is required`,\n invalidEmail: 'Please enter a valid email address',\n invalidUrl: 'Please enter a valid URL',\n invalidPhone: 'Please enter a valid phone number',\n notNumeric: `${fieldName} must contain only numbers`,\n noUppercase: `${fieldName} must contain at least one uppercase letter`,\n noLowercase: `${fieldName} must contain at least one lowercase letter`,\n noNumber: `${fieldName} must contain at least one number`,\n noSpecialChar: `${fieldName} must contain at least one special character`,\n fieldsDoNotMatch: 'Fields do not match',\n };\n\n return messages[errorCode] || 'Invalid input';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdm-ui-kit-src-utils.mjs","sources":["../../../src/utils/responsive.ts","../../../src/utils/z-index.ts","../../../src/utils/validators.ts","../../../src/utils/cn.ts","../../../src/utils/pdm-ui-kit-src-utils.ts"],"sourcesContent":["/**\n * Sistema de responsive utilities para PDM UI Kit\n * \n * Proporciona constantes, tipos y helpers para manejar responsive design\n * de forma consistente en todos los componentes.\n */\n\n/**\n * Breakpoints estándar de Tailwind CSS\n * Mobile-first approach: los estilos base son para mobile, los breakpoints son MIN-WIDTH\n */\nexport const BREAKPOINTS = {\n sm: '640px', // tablet portrait\n md: '768px', // tablet landscape\n lg: '1024px', // desktop\n xl: '1280px', // large desktop\n '2xl': '1536px' // extra large desktop\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\n/**\n * Estrategias de overflow para componentes que pueden desbordar\n */\nexport type OverflowStrategy = \n | 'auto' // Scroll automático cuando sea necesario\n | 'scroll' // Siempre scroll\n | 'hidden' // Ocultar contenido que desborda\n | 'visible'; // Permitir desbordamiento\n\n/**\n * Estrategias responsive para tablas\n */\nexport type TableResponsiveStrategy = \n | 'scroll' // Scroll horizontal en mobile (default, más simple)\n | 'stack' // Convertir filas en cards verticales en mobile\n | 'wrap' // Permitir que el contenido haga wrap\n | 'collapse'; // Colapsar columnas menos importantes en mobile\n\n/**\n * Helper para generar clases responsive de forma programática\n * \n * @example\n * responsive({ default: 'block', sm: 'flex', lg: 'grid' })\n * // Returns: 'block sm:flex lg:grid'\n */\nexport function responsive<T extends string>(\n config: Partial<Record<Breakpoint | 'default', T>>\n): string {\n const classes: string[] = [];\n \n if (config.default) {\n classes.push(config.default);\n }\n \n (['sm', 'md', 'lg', 'xl', '2xl'] as Breakpoint[]).forEach(bp => {\n if (config[bp]) {\n classes.push(`${bp}:${config[bp]}`);\n }\n });\n \n return classes.join(' ');\n}\n\n/**\n * Helper para overflow responsive\n * Maneja el caso común de scroll en mobile, auto en desktop\n * \n * @example\n * overflowResponsive('x', 'scroll', 'auto')\n * // Returns: 'overflow-x-scroll sm:overflow-x-auto'\n */\nexport function overflowResponsive(\n axis: 'x' | 'y' | 'both',\n mobile: OverflowStrategy,\n desktop?: OverflowStrategy\n): string {\n const axisClass = axis === 'both' ? 'overflow' : `overflow-${axis}`;\n const mobileClass = `${axisClass}-${mobile}`;\n \n if (!desktop || desktop === mobile) {\n return mobileClass;\n }\n \n return `${mobileClass} sm:${axisClass}-${desktop}`;\n}\n\n/**\n * Helper para spacing responsive\n * Útil para padding/margin que necesita ajustarse por breakpoint\n * \n * @example\n * spacingResponsive('px', { default: '4', sm: '6', lg: '8' })\n * // Returns: 'px-4 sm:px-6 lg:px-8'\n */\nexport function spacingResponsive(\n property: 'p' | 'px' | 'py' | 'pt' | 'pr' | 'pb' | 'pl' | 'm' | 'mx' | 'my' | 'mt' | 'mr' | 'mb' | 'ml',\n values: Partial<Record<Breakpoint | 'default', string>>\n): string {\n return responsive(\n Object.entries(values).reduce((acc, [key, value]) => {\n acc[key as Breakpoint | 'default'] = `${property}-${value}` as any;\n return acc;\n }, {} as Record<Breakpoint | 'default', string>)\n );\n}\n\n/**\n * Helper para width responsive\n * \n * @example\n * widthResponsive({ default: 'full', sm: 'auto', lg: '1/2' })\n * // Returns: 'w-full sm:w-auto lg:w-1/2'\n */\nexport function widthResponsive(\n values: Partial<Record<Breakpoint | 'default', string>>\n): string {\n return responsive(\n Object.entries(values).reduce((acc, [key, value]) => {\n acc[key as Breakpoint | 'default'] = `w-${value}` as any;\n return acc;\n }, {} as Record<Breakpoint | 'default', string>)\n );\n}\n\n/**\n * Clases comunes para containers responsive\n * Pensadas para wrappers que contienen contenido que puede desbordar\n */\nexport const RESPONSIVE_CONTAINER = {\n // Container con scroll horizontal en mobile, contenido visible en desktop\n tableWrapper: 'relative w-full overflow-x-auto sm:overflow-x-visible',\n \n // Container con padding negativo en mobile para scroll edge-to-edge\n tableWrapperFullBleed: 'relative w-full -mx-4 px-4 overflow-x-auto sm:mx-0 sm:px-0 sm:overflow-x-visible',\n \n // Container con max-width responsive\n contentWrapper: 'w-full mx-auto px-4 sm:px-6 lg:px-8 max-w-screen-2xl',\n \n // Container para modals/dialogs\n modalWrapper: 'w-full max-w-lg mx-auto px-4 sm:px-0',\n \n // Container para forms\n formWrapper: 'w-full max-w-md mx-auto space-y-4'\n} as const;\n\n/**\n * Clases comunes para display responsive\n */\nexport const RESPONSIVE_DISPLAY = {\n // Ocultar en mobile, mostrar en desktop\n hideOnMobile: 'hidden sm:block',\n \n // Mostrar solo en mobile\n showOnMobile: 'block sm:hidden',\n \n // Stack en mobile, flex en desktop\n stackToFlex: 'flex flex-col sm:flex-row',\n \n // Stack en mobile, grid en desktop\n stackToGrid: 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3'\n} as const;\n\n/**\n * Clases para table responsive strategies\n */\nexport const TABLE_RESPONSIVE = {\n // Scroll horizontal (default, más simple)\n scroll: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full min-w-full',\n cell: 'whitespace-nowrap'\n },\n \n // Permitir wrap del contenido\n wrap: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full',\n cell: 'whitespace-normal break-words'\n },\n \n // Stack en mobile (cada fila se convierte en card)\n // Requiere lógica adicional en el componente\n stack: {\n wrapper: 'relative w-full',\n table: 'w-full',\n row: 'block sm:table-row border-b sm:border-b-0',\n cell: 'block sm:table-cell py-2 sm:py-0 before:content-[attr(data-label)] before:font-medium before:inline-block before:w-32 sm:before:content-none'\n },\n \n // Collapse: ocultar columnas menos importantes en mobile\n // Se usa con clases de visibility en las columnas específicas\n collapse: {\n wrapper: 'relative w-full overflow-x-auto',\n table: 'w-full',\n cell: 'whitespace-nowrap',\n // Estas clases se aplican a columnas opcionales\n optionalColumn: 'hidden md:table-cell'\n }\n} as const;\n","/**\n * Z-Index Scale - Sistema centralizado de z-index\n *\n * JERARQUÍA (de menor a mayor):\n * 1. base (z-0) - Elementos normales del DOM\n * 2. dropdown (z-10) - Selects, combobox, date-pickers\n * 3. sticky (z-20) - Headers, navigation bars\n * 4. drawerBackdrop (z-30) - Backdrop de drawers\n * 5. drawer (z-40) - Sidebar drawer, sheets laterales\n * 6. modalBackdrop (z-40) - Backdrop de modals ( mismo nivel que drawer)\n * 7. modal (z-50) - Dialogs, alert-dialogs\n * 8. popover (z-[70]) - Tooltips, dropdowns DENTRO de modals\n * 9. toast (z-[100]) - Notificaciones que deben estar sobre TODO\n *\n * REGLA CRÍTICA:\n * - Componentes overlay (select options, dropdown menu, tooltip) SIEMPRE z-[70] o mayor\n * - Esto permite que funcionen DENTRO de modals (z-50)\n * - Backdrop de modal debe ser z-40 para estar DEBAJO del contenido del modal (z-50)\n */\n\nexport const Z_INDEX = {\n\t/**\n\t * Base - contenido normal del DOM\n\t */\n\tbase: \"z-0\",\n\n\t/**\n\t * Dropdown - Selects, combobox, date-pickers\n\t * Debe estar SOBRE contenido normal pero BAJO overlays\n\t */\n\tdropdown: \"z-10\",\n\n\t/**\n\t * Sticky - Headers, navigation fija\n\t */\n\tsticky: \"z-20\",\n\n\t/**\n\t * Drawer backdrop - Backdrop de sidebar drawer\n\t * Debe estar DEBAJO del drawer panel y DEBAJO de modals\n\t */\n\tdrawerBackdrop: \"z-30\",\n\n\t/**\n\t * Drawer - Sidebar drawer, sheets laterales\n\t * Debe estar SOBRE su backdrop pero BAJO modals\n\t */\n\tdrawer: \"z-40\",\n\n\t/**\n\t * Modal backdrop - Backdrop de dialogs\n\t * Mismo nivel que drawer backdrop (z-40)\n\t */\n\tmodalBackdrop: \"z-40\",\n\n\t/**\n\t * Modal - Dialogs, alert-dialogs\n\t * Debe estar SOBRE su backdrop\n\t */\n\tmodal: \"z-50\",\n\n\t/**\n\t * Popover - Tooltips, dropdowns, selects options DENTRO de modals\n\t * CRÍTICO: Debe ser MAYOR que modal (z-50) para aparecer sobre modals\n\t * USAR SIEMPRE mergeOverlayPanelClass() para asegurar este valor\n\t */\n\tpopover: \"z-[70]\",\n\n\t/**\n\t * Toast - Notificaciones globales\n\t * Debe estar sobre TODO\n\t */\n\ttoast: \"z-[100]\",\n} as const;\n\n/**\n * Helper para debugging z-index issues\n */\nexport function logZIndexStack(element: HTMLElement): void {\n\tif (typeof window === \"undefined\") return;\n\n\tlet current: HTMLElement | null = element;\n\tconst stack: Array<{ element: string; zIndex: string; position: string }> =\n\t\t[];\n\n\twhile (current && current !== document.body) {\n\t\tconst computed = window.getComputedStyle(current);\n\t\tconst zIndex = computed.zIndex;\n\t\tconst position = computed.position;\n\n\t\tif (zIndex !== \"auto\") {\n\t\t\tstack.push({\n\t\t\t\telement:\n\t\t\t\t\tcurrent.tagName +\n\t\t\t\t\t(current.className ? `.${current.className.split(\" \")[0]}` : \"\"),\n\t\t\t\tzIndex,\n\t\t\t\tposition,\n\t\t\t});\n\t\t}\n\n\t\tcurrent = current.parentElement;\n\t}\n\n\tconsole.table(stack);\n}\n","/**\n * Form validation utilities for PDM UI Kit\n *\n * Pure validation functions and patterns that work with any form validation library.\n * These functions validate values directly and return true/false, making them framework-agnostic.\n */\n\nexport interface PdmValidationError {\n message: string;\n code: string;\n}\n\n/**\n * Validate email format\n *\n * @example\n * isValidEmail('user@example.com') // true\n */\nexport function isValidEmail(value: string): boolean {\n if (!value) return false;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n}\n\n/**\n * Validate URL format\n *\n * @example\n * isValidUrl('https://example.com') // true\n */\nexport function isValidUrl(value: string): boolean {\n if (!value) return false;\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate minimum length\n *\n * @example\n * hasMinLength('password', 8) // true if length >= 8\n */\nexport function hasMinLength(value: string, min: number): boolean {\n if (!value) return false;\n return String(value).length >= min;\n}\n\n/**\n * Validate maximum length\n *\n * @example\n * hasMaxLength('bio', 500) // true if length <= 500\n */\nexport function hasMaxLength(value: string, max: number): boolean {\n if (!value) return true;\n return String(value).length <= max;\n}\n\n/**\n * Validate that value only contains numbers\n *\n * @example\n * isNumeric('12345') // true\n */\nexport function isNumeric(value: string): boolean {\n if (!value) return false;\n return /^\\d+$/.test(String(value));\n}\n\n/**\n * Validate that two values match (e.g., password confirmation)\n *\n * @example\n * valuesMatch(password, confirmPassword) // true if they match\n */\nexport function valuesMatch(value1: string, value2: string): boolean {\n if (!value1 || !value2) return false;\n return value1 === value2;\n}\n\n/**\n * Validate minimum value\n *\n * @example\n * isMinValue(age, 18) // true if age >= 18\n */\nexport function isMinValue(value: number, min: number): boolean {\n if (value === null || value === undefined) return false;\n return value >= min;\n}\n\n/**\n * Validate maximum value\n *\n * @example\n * isMaxValue(percentage, 100) // true if percentage <= 100\n */\nexport function isMaxValue(value: number, max: number): boolean {\n if (value === null || value === undefined) return false;\n return value <= max;\n}\n\n/**\n * Validate phone number format (basic international format)\n * Accepts: +1234567890, (123) 456-7890, 123-456-7890\n *\n * @example\n * isValidPhone('+1234567890') // true\n */\nexport function isValidPhone(value: string): boolean {\n if (!value) return false;\n const phoneRegex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/;\n return phoneRegex.test(String(value).replace(/\\s/g, ''));\n}\n\n/**\n * Check if value contains at least one uppercase letter\n *\n * @example\n * hasUppercase('Password') // true\n */\nexport function hasUppercase(value: string): boolean {\n if (!value) return false;\n return /[A-Z]/.test(value);\n}\n\n/**\n * Check if value contains at least one lowercase letter\n *\n * @example\n * hasLowercase('Password') // true\n */\nexport function hasLowercase(value: string): boolean {\n if (!value) return false;\n return /[a-z]/.test(value);\n}\n\n/**\n * Check if value contains at least one number\n *\n * @example\n * hasNumber('Pass123') // true\n */\nexport function hasNumber(value: string): boolean {\n if (!value) return false;\n return /\\d/.test(value);\n}\n\n/**\n * Check if value contains at least one special character\n *\n * @example\n * hasSpecialChar('Pass@123') // true\n */\nexport function hasSpecialChar(value: string): boolean {\n if (!value) return false;\n return /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(value);\n}\n\n/**\n * Get user-friendly error message for validation failures\n *\n * @example\n * getErrorMessage('invalidEmail') // \"Please enter a valid email address\"\n */\nexport function getErrorMessage(errorCode: string, fieldName: string = 'Field'): string {\n const messages: Record<string, string> = {\n required: `${fieldName} is required`,\n invalidEmail: 'Please enter a valid email address',\n invalidUrl: 'Please enter a valid URL',\n invalidPhone: 'Please enter a valid phone number',\n notNumeric: `${fieldName} must contain only numbers`,\n noUppercase: `${fieldName} must contain at least one uppercase letter`,\n noLowercase: `${fieldName} must contain at least one lowercase letter`,\n noNumber: `${fieldName} must contain at least one number`,\n noSpecialChar: `${fieldName} must contain at least one special character`,\n fieldsDoNotMatch: 'Fields do not match',\n };\n\n return messages[errorCode] || 'Invalid input';\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge Tailwind classes intelligently.\n *\n * Combines `clsx` (conditional/array/object inputs) with `tailwind-merge`\n * (deduplicates conflicting Tailwind utilities, last wins). This is the\n * shadcn/ui `cn()` pattern. Use it wherever the library composes a\n * user-supplied `className` override with internal base classes, so the\n * override reliably wins regardless of generated CSS order.\n *\n * @example\n * cn(\"max-w-[640px]\", \"max-w-[800px]\") // => \"max-w-[800px]\"\n * cn(\"p-4\", condition && \"p-6\") // => \"p-6\" when condition is true\n */\nexport function cn(...inputs: ClassValue[]): string {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}