@telcomdev/ui 0.1.32 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"telcomdev-ui.mjs","sources":["../../../projects/telcomdev-ui/src/lib/telcomdev-ui.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-iconos.ts","../../../projects/telcomdev-ui/src/lib/alerta/td-alerta.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icono-registry.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icon.ts","../../../projects/telcomdev-ui/src/lib/badge/td-badge.ts","../../../projects/telcomdev-ui/src/lib/button/td-button.ts","../../../projects/telcomdev-ui/src/lib/form-control/td-form-control.ts","../../../projects/telcomdev-ui/src/lib/checkbox/td-checkbox.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.html","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.ts","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.html","../../../projects/telcomdev-ui/src/lib/date-picker/td-date-picker.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.model.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-ref.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-panel.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-actions.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-close.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.ts","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.service.ts","../../../projects/telcomdev-ui/src/lib/file-upload/td-file-upload.ts","../../../projects/telcomdev-ui/src/lib/file-upload/td-file-upload.html","../../../projects/telcomdev-ui/src/lib/header/td-header.ts","../../../projects/telcomdev-ui/src/lib/header/td-header.html","../../../projects/telcomdev-ui/src/lib/input/td-input.ts","../../../projects/telcomdev-ui/src/lib/input/td-textarea.ts","../../../projects/telcomdev-ui/src/lib/layout/td-layout.ts","../../../projects/telcomdev-ui/src/lib/radio/td-radio-group.ts","../../../projects/telcomdev-ui/src/lib/radio/td-radio-group.html","../../../projects/telcomdev-ui/src/lib/select/td-autocomplete-select.ts","../../../projects/telcomdev-ui/src/lib/select/td-select.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.html","../../../projects/telcomdev-ui/src/lib/tabs/td-tab.ts","../../../projects/telcomdev-ui/src/lib/tabs/td-tabs.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.model.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.service.ts","../../../projects/telcomdev-ui/src/lib/tooltip/td-tooltip-panel.ts","../../../projects/telcomdev-ui/src/lib/tooltip/td-tooltip.directive.ts","../../../projects/telcomdev-ui/src/public-api.ts","../../../projects/telcomdev-ui/src/telcomdev-ui.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'td-telcomdev-ui',\n imports: [],\n template: ` <p>telcomdev-ui works!</p> `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: ``,\n})\nexport class TelcomdevUi {}\n","import { TdIconoDefinicion } from './td-icono.model';\n\nexport const TD_ICONOS = {\n home: {\n path: 'M3 10.5 12 3l9 7.5V21a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1V10.5Z',\n },\n dashboard: {\n path: 'M4 3h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm10 0h6a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm0 8h6a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1ZM4 14h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z',\n },\n folder: {\n path: 'M3 5a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Z',\n },\n settings: {\n path: 'M12 8.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Zm8.5 3.5c0-.5-.05-.98-.14-1.45l2.02-1.57-2-3.46-2.47 1a8.7 8.7 0 0 0-2.5-1.45L15 2.5h-4l-.4 2.57a8.7 8.7 0 0 0-2.51 1.45l-2.47-1-2 3.46 2.02 1.57a7.7 7.7 0 0 0 0 2.9l-2.02 1.57 2 3.46 2.47-1a8.7 8.7 0 0 0 2.5 1.45L11 21.5h4l.4-2.57a8.7 8.7 0 0 0 2.51-1.45l2.47 1 2-3.46-2.02-1.57c.09-.47.14-.95.14-1.45Z',\n },\n people: {\n path: 'M16 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM6.5 12a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7ZM16 13c-4 0-7 2-7 4.5V21h14v-3.5C23 15 20 13 16 13ZM6.5 14C2.9 14 1 15.8 1 18v3h6v-3.5c0-1.2.48-2.28 1.3-3.16A9.3 9.3 0 0 0 6.5 14Z',\n },\n person: {\n path: 'M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm0 2c-5 0-9 2.5-9 5.5V22h18v-2.5c0-3-4-5.5-9-5.5Z',\n },\n security: {\n path: 'M12 2 4 5v6c0 5.05 3.41 9.74 8 11 4.59-1.26 8-5.95 8-11V5l-8-3Zm-1 14-4-4 1.4-1.4 2.6 2.58 5.6-5.58L18 9l-7 7Z',\n },\n inventory: {\n path: 'm12 2 9 5-9 5-9-5 9-5Zm-7 8.5 6 3.33V22l-6-3.33V10.5Zm8 11.5v-8.17l6-3.33v8.17L13 22Z',\n },\n shopping_cart: {\n path: 'M7 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm10 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM6.2 6l.8 2h11.6l-1.9 5H8.1L4.3 3H1v2h2l3.6 9.6A2 2 0 0 0 8.5 16H19v-2H8.5l-.4-1H18a2 2 0 0 0 1.86-1.27L22 6H6.2Z',\n },\n receipt: {\n path: 'M5 2v20l3-2 4 2 4-2 3 2V2l-3 2-4-2-4 2-3-2Zm3 6h8v2H8V8Zm0 4h8v2H8v-2Z',\n },\n assessment: {\n path: 'M4 20h16v2H4a2 2 0 0 1-2-2V4h2v16Zm3-2H5v-6h2v6Zm4 0H9V7h2v11Zm4 0h-2V4h2v14Zm4 0h-2v-9h2v9Z',\n },\n description: {\n path: 'M6 2h8l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm7 1.5V8h4.5L13 3.5ZM8 12v2h8v-2H8Zm0 4v2h8v-2H8Z',\n },\n business: {\n path: 'M3 21V3h10v5h8v13h-7v-4h-2v4H3Zm3-14h2V5H6v2Zm4 0h2V5h-2v2Zm-4 4h2V9H6v2Zm4 0h2V9h-2v2Zm6 1h2v-2h-2v2Zm0 4h2v-2h-2v2Z',\n },\n chevron_left: {\n path: 'M14.7 5.3a1 1 0 0 1 0 1.4L9.4 12l5.3 5.3a1 1 0 1 1-1.4 1.4l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 0 1 1.4 0Z',\n },\n chevron_right: {\n path: 'M9.3 5.3a1 1 0 0 0 0 1.4l5.3 5.3-5.3 5.3a1 1 0 1 0 1.4 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.4 0Z',\n },\n sun: {\n path: 'M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0-5a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 17a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1ZM2 12a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Zm17 0a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1ZM4.22 4.22a1 1 0 0 1 1.42 0l1.41 1.42a1 1 0 0 1-1.41 1.41L4.22 5.64a1 1 0 0 1 0-1.42Zm12.73 12.73a1 1 0 0 1 1.41 0l1.42 1.41a1 1 0 0 1-1.42 1.42l-1.41-1.42a1 1 0 0 1 0-1.41Zm2.83-12.73a1 1 0 0 1 0 1.42l-1.42 1.41a1 1 0 0 1-1.41-1.41l1.41-1.42a1 1 0 0 1 1.42 0ZM7.05 16.95a1 1 0 0 1 0 1.41l-1.41 1.42a1 1 0 0 1-1.42-1.42l1.42-1.41a1 1 0 0 1 1.41 0Z',\n },\n moon: {\n path: 'M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 9 9 0 1 0 20.5 15.2Z',\n },\n alert: {\n path: 'M12 2 1 21h22L12 2Zm-1 7h2v6h-2V9Zm0 8h2v2h-2v-2Z',\n },\n check: {\n path: 'm9.2 16.2-4.4-4.4-1.6 1.6 6 6L21 7.6 19.4 6 9.2 16.2Z',\n },\n close: {\n path: 'M6.4 5 12 10.6 17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6L6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5Z',\n },\n menu: {\n path: 'M3 6h18v2H3V6Zm0 5h18v2H3v-2Zm0 5h18v2H3v-2Z',\n },\n search: {\n path: 'M10.5 3a7.5 7.5 0 1 0 4.73 13.32L20.91 22 22 20.91l-5.68-5.68A7.5 7.5 0 0 0 10.5 3Zm0 2a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11Z',\n },\n visibility: {\n path: 'M12 4.5C6.5 4.5 2.1 8 1 12c1.1 4 5.5 7.5 11 7.5S21.9 16 23 12c-1.1-4-5.5-7.5-11-7.5Zm0 12a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9Zm0-2a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z',\n },\n visibility_off: {\n path: 'm3.3 2 18.7 18.7-1.3 1.3-3.15-3.15A12.2 12.2 0 0 1 12 20C6.5 20 2.1 16.5 1 12a11.6 11.6 0 0 1 3.4-5.2L2 4.3 3.3 2Zm4.42 7.02A4.5 4.5 0 0 0 14.98 16l-1.55-1.55a2.5 2.5 0 0 1-3.88-3.88L7.72 9.02ZM12 4c5.5 0 9.9 3.5 11 8a11.2 11.2 0 0 1-2.53 4.35l-3.3-3.3A5.5 5.5 0 0 0 10.95 6.83L8.58 4.46A13.4 13.4 0 0 1 12 4Z',\n },\n notifications: {\n path: 'M12 22a2.5 2.5 0 0 0 2.45-2h-4.9A2.5 2.5 0 0 0 12 22Zm7-6v-5a7 7 0 0 0-5.5-6.84V3a1.5 1.5 0 0 0-3 0v1.16A7 7 0 0 0 5 11v5l-2 2v1h18v-1l-2-2Z',\n },\n chevron_down: {\n path: 'M5.3 8.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4Z',\n },\n apps: {\n path: 'M4 3h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM4 15h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z',\n },\n help: {\n path: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-4.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm.2-9.5c-2 0-3.37 1.03-3.7 2.75l1.95.4c.17-.84.77-1.3 1.67-1.3 1 0 1.63.52 1.63 1.35 0 .67-.33 1.03-1.27 1.58-1.12.65-1.48 1.27-1.48 2.47V14h2v-.55c0-.67.2-.94 1.12-1.5 1.18-.72 1.88-1.58 1.88-2.9C16 7.25 14.5 6 12.2 6Z',\n },\n add: {\n path: 'M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z',\n },\n edit: {\n path: 'm16.86 3.49 3.65 3.65L8.65 19H5v-3.65L16.86 3.49ZM19.73 2.27a1.75 1.75 0 0 0-2.47 0l-1.35 1.35 3.65 3.65 1.35-1.35a1.75 1.75 0 0 0 0-2.47l-1.18-1.18Z',\n },\n delete: {\n path: 'M8 3h8l1 2h4v2H3V5h4l1-2Zm-2 6h12l-1 12H7L6 9Zm4 2v7h2v-7h-2Zm4 0v7h2v-7h-2Z',\n },\n toggle_on: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12Zm0 10a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n toggle_off: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12ZM7 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n inbox: {\n path: 'M4 3h16l3 11v7H1v-7L4 3Zm1.5 2L3 14h5l1 2h6l1-2h5l-2.5-9h-13Z',\n },\n pdf: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M7.1 20v-6.5m0 1.1c.45-.75 1.25-1.15 2.05-1.05 1.25.15 1.85 1.25 1.7 2.65-.15 1.35-.9 2.2-2.05 2.15-.75-.05-1.35-.4-1.7-.95m7.85-5.9V18.4m0-3.8c-.45-.75-1.25-1.15-2.05-1.05-1.25.15-1.85 1.25-1.7 2.65.15 1.35.9 2.2 2.05 2.15.75-.05 1.35-.4 1.7-.95m2.15 1v-5.65c0-1.15.55-1.75 1.65-1.75.35 0 .65.05.9.15m-2.5 3.05h2.1',\n estilo: 'linea',\n grosor: 1.65,\n },\n save: {\n path: 'M5 3h12l4 4v14H3V5a2 2 0 0 1 2-2Zm1 2a1 1 0 0 0-1 1v13h14V8h-4V5H6Zm2 0v5h7V5H8Zm1 8h6a2 2 0 0 1 2 2v4H7v-4a2 2 0 0 1 2-2Z',\n },\n copy: {\n path: 'M8 3h11a2 2 0 0 1 2 2v11h-2V5H8V3ZM5 7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Zm0 2v10h10V9H5Z',\n },\n download: {\n path: 'M11 3h2v10.17l3.59-3.58L18 11l-6 6-6-6 1.41-1.41L11 13.17V3ZM4 19h16v2H4v-2Z',\n },\n upload: {\n path: 'm12 3 6 6-1.41 1.41L13 6.83V17h-2V6.83l-3.59 3.58L6 9l6-6ZM4 19h16v2H4v-2Z',\n },\n print: {\n path: 'M7 3h10v4H7V3Zm10 12v6H7v-6h10Zm2-7a3 3 0 0 1 3 3v6h-3v-4H5v4H2v-6a3 3 0 0 1 3-3h14Zm-4 9H9v2h6v-2Zm4-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z',\n },\n excel: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M8 11h8v7.5H8V11Zm0 3.75h8M11.9 11v7.5',\n estilo: 'linea',\n grosor: 1.65,\n },\n xml: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M9.25 12l-2.5 3 2.5 3m5.5-6 2.5 3-2.5 3m-1.5-7-2.5 8',\n estilo: 'linea',\n grosor: 1.65,\n },\n zip: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M10.25 2.75h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5M12 11.75v3m-1.75 0h3.5v3.5h-3.5v-3.5Z',\n estilo: 'linea',\n grosor: 1.65,\n },\n file: {\n path: 'M6 2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 2H6v16h12V8h-4V4Zm2 2 2 2h-2V6Z',\n },\n image: {\n path: 'M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 2v14h16V5H4Zm3.5 2A2.5 2.5 0 1 1 5 9.5 2.5 2.5 0 0 1 7.5 7Zm12 10-4.5-5-3.2 3.5-2.3-2.5L4.5 18h15v-1Z',\n },\n calendar: {\n path: 'M7 2h2v2h6V2h2v2h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2V2ZM5 9v11h14V9H5Zm0-3v1h14V6H5Z',\n },\n clock: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n history: {\n path: 'M12 4a8 8 0 1 1-7.45 5H2l3.5-4L9 9H6.67A6 6 0 1 0 12 6V4Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n filter: {\n path: 'M3 4h18l-7 8v6l-4 2v-8L3 4Zm4.41 2L12 11.25 16.59 6H7.41Z',\n },\n refresh: {\n path: 'M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.75 10h-2.08A6 6 0 1 1 16.2 7.8L13 11h8V3l-3.35 3.35Z',\n },\n sort: {\n path: 'M7 3 3 7h3v11H3l4 4 4-4H8V7h3L7 3Zm10 0-4 4h3v11h-3l4 4 4-4h-3V7h3l-4-4Z',\n },\n more_vertical: {\n path: 'M12 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',\n },\n more_horizontal: {\n path: 'M8 12a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z',\n },\n arrow_back: {\n path: 'm11 5-7 7 7 7 1.41-1.41L7.83 13H21v-2H7.83l4.58-4.59L11 5Z',\n },\n arrow_forward: {\n path: 'm13 5-1.41 1.41L16.17 11H3v2h13.17l-4.58 4.59L13 19l7-7-7-7Z',\n },\n login: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n logout: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n lock: {\n path: 'M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm2 0h6V7a3 3 0 0 0-6 0v3Zm3 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n lock_open: {\n path: 'M7 10V7a5 5 0 0 1 9.9-1H14.8A3 3 0 0 0 9 7v3h9a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm5 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n mail: {\n path: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm0 3.24V18h16V7.24l-8 5-8-5ZM18.53 6H5.47L12 10.08 18.53 6Z',\n },\n phone: {\n path: 'M6.62 2.5 10 6.2 7.9 8.3a15.5 15.5 0 0 0 7.8 7.8l2.1-2.1 3.7 3.38V20a2 2 0 0 1-2 2C9.84 22 2 14.16 2 4.5a2 2 0 0 1 2-2h2.62Z',\n },\n send: {\n path: 'm3 3 19 9-19 9 2-7 10-2-10-2-2-7Zm3.62 5.55.57 2L12 12l-4.81 1.45-.57 2L17.53 12 6.62 8.55Z',\n },\n location: {\n path: 'M12 2a8 8 0 0 1 8 8c0 5.5-8 12-8 12S4 15.5 4 10a8 8 0 0 1 8-8Zm0 2a6 6 0 0 0-6 6c0 3.55 3.92 7.68 6 9.65 2.08-1.97 6-6.1 6-9.65a6 6 0 0 0-6-6Zm0 3a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n language: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm6.92 6h-3.08a15.7 15.7 0 0 0-1.38-3.18A8.05 8.05 0 0 1 18.92 8ZM12 4c-.83 1.2-1.5 2.53-1.84 4h3.68A13.7 13.7 0 0 0 12 4ZM9.54 4.82A15.7 15.7 0 0 0 8.16 8H5.08a8.05 8.05 0 0 1 4.46-3.18ZM4.26 10A8.3 8.3 0 0 0 4 12c0 .69.09 1.36.26 2h3.55a17 17 0 0 1 0-4H4.26Zm5.57 0a14.6 14.6 0 0 0 0 4h4.34a14.6 14.6 0 0 0 0-4H9.83Zm6.36 0a17 17 0 0 1 0 4h3.55A8.3 8.3 0 0 0 20 12c0-.69-.09-1.36-.26-2h-3.55ZM5.08 16h3.08c.3 1.14.77 2.2 1.38 3.18A8.05 8.05 0 0 1 5.08 16Zm5.08 0c.34 1.47 1.01 2.8 1.84 4 .83-1.2 1.5-2.53 1.84-4h-3.68Zm4.3 3.18A15.7 15.7 0 0 0 15.84 16h3.08a8.05 8.05 0 0 1-4.46 3.18Z',\n },\n info: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 6h2v7h-2v-7Zm0-3h2v2h-2V7Z',\n },\n warning: {\n path: 'M12 2 1 21h22L12 2Zm0 4.03L19.53 19H4.47L12 6.03ZM11 10v5h2v-5h-2Zm0 6v2h2v-2h-2Z',\n },\n error: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v7h-2V7Zm0 9h2v2h-2v-2Z',\n },\n check_circle: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1.5 11.5-3-3 1.41-1.41 1.59 1.58 4.59-4.58 1.41 1.41-6 6Z',\n },\n cancel: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-3.3 3.3L12 10.59l3.3-3.3 1.4 1.42-3.29 3.29 3.3 3.3-1.42 1.4L12 13.41l-3.3 3.3-1.4-1.42 3.29-3.29-3.3-3.3L8.7 7.3Z',\n },\n star: {\n path: 'm12 2.5 2.94 5.96 6.58.96-4.76 4.64 1.12 6.56L12 17.53l-5.88 3.09 1.12-6.56-4.76-4.64 6.58-.96L12 2.5Z',\n },\n favorite: {\n path: 'M12 21s-9-5.4-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.6-9 12-9 12Z',\n },\n database: {\n path: 'M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4Zm0 2c4.42 0 8 1.12 8 2s-3.58 2-8 2-8-1.12-8-2 3.58-2 8-2ZM4 9.2c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V12c0 .88-3.58 2-8 2s-8-1.12-8-2V9.2Zm0 6c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V18c0 .88-3.58 2-8 2s-8-1.12-8-2v-2.8Z',\n },\n cloud: {\n path: 'M7.5 20A5.5 5.5 0 0 1 6.3 9.13 7 7 0 0 1 19 11.5h.5a4.25 4.25 0 0 1 0 8.5h-12Zm0-2h12a2.25 2.25 0 0 0 0-4.5h-2.4l-.05-1.2A5 5 0 0 0 7.9 10.1l-.42 1.05-1.12.17A3.5 3.5 0 0 0 7.5 18Z',\n },\n camera: {\n path: 'M8 4h8l1.5 2H21a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.5L8 4Zm4 4a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 2a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n link: {\n path: 'M10.59 13.41a2 2 0 0 0 2.82 0l3-3a2 2 0 0 0-2.82-2.82l-1.3 1.29-1.41-1.41 1.3-1.3a4 4 0 1 1 5.65 5.66l-3 3a4 4 0 0 1-5.66 0l-.7-.71 1.41-1.41.71.7Zm2.82-2.82a2 2 0 0 0-2.82 0l-3 3a2 2 0 0 0 2.82 2.82l1.3-1.29 1.41 1.41-1.3 1.3a4 4 0 1 1-5.65-5.66l3-3a4 4 0 0 1 5.66 0l.7.71-1.41 1.41-.71-.7Z',\n },\n external_link: {\n path: 'M14 3h7v7h-2V6.41l-8.29 8.3-1.42-1.42L17.59 5H14V3ZM5 5h6v2H5v12h12v-6h2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z',\n },\n} satisfies Record<string, TdIconoDefinicion>;\n\nexport type TdIconoNombre = keyof typeof TD_ICONOS;\n\nexport const TD_ICONOS_NOMBRES = Object.freeze(\n Object.keys(TD_ICONOS) as TdIconoNombre[]\n);\n","export type TdAlertType = 'success' | 'error' | 'warning' | 'info' | 'question';\r\nexport type TdToastType = 'success' | 'error' | 'warning' | 'info' | 'neutral';\nimport { TdIconoDefinicion } from '../iconos/td-icono.model';\nimport { TD_ICONOS } from '../iconos/td-iconos';\n\nexport type TdToastPosition =\n | 'bottom-left'\r\n | 'bottom-right'\r\n | 'top-left'\r\n | 'top-right'\r\n | 'bottom-center'\r\n | 'top-center';\r\n\r\nexport type TdAlertaTipo = 'exito' | 'error' | 'advertencia' | 'info' | 'pregunta';\r\nexport type TdSnackbarTipo = TdToastType | 'exito' | 'advertencia';\r\nexport type TdSnackbarPosicion =\r\n | 'inferior-izquierda'\r\n | 'inferior-derecha'\r\n | 'superior-izquierda'\r\n | 'superior-derecha'\r\n | 'inferior-centro'\r\n | 'superior-centro';\r\n\r\ntype TdAnyAlertType = TdAlertType | TdAlertaTipo;\r\ntype TdAnyToastType = TdToastType | TdSnackbarTipo;\r\ntype TdAnyToastPosition = TdToastPosition | TdSnackbarPosicion;\r\n\r\nexport interface TdAlertOptions {\r\n title?: string;\r\n message?: string;\r\n type?: TdAnyAlertType;\r\n confirmText?: string;\r\n cancelText?: string;\r\n showCancel?: boolean;\r\n closeOnEscape?: boolean;\r\n closeOnBackdrop?: boolean;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport interface TdAlertaOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAnyAlertType;\r\n textoConfirmar?: string;\r\n textoCancelar?: string;\r\n mostrarCancelar?: boolean;\r\n cerrarConEscape?: boolean;\r\n cerrarConFondo?: boolean;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport interface TdToastOptions {\r\n title?: string;\r\n message?: string;\r\n type?: TdAnyToastType;\r\n position?: TdAnyToastPosition;\r\n duration?: number;\r\n actionText?: string;\r\n dismissible?: boolean;\r\n showProgress?: boolean;\r\n maxVisible?: number;\r\n}\r\n\r\nexport interface TdSnackbarOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAnyToastType;\r\n posicion?: TdAnyToastPosition;\r\n duracion?: number;\r\n textoAccion?: string;\r\n cerrable?: boolean;\r\n mostrarProgreso?: boolean;\r\n maximoVisible?: number;\r\n}\r\n\r\ninterface TdAlertConfig {\r\n title: string;\r\n message: string;\r\n type: TdAlertType;\r\n confirmText: string;\r\n cancelText: string;\r\n showCancel: boolean;\r\n closeOnEscape: boolean;\r\n closeOnBackdrop: boolean;\r\n autoFocus: boolean;\r\n}\r\n\r\ninterface TdToastConfig {\n title: string;\n message: string;\n type: TdToastType;\n position: TdToastPosition;\n duration: number;\r\n actionText: string;\r\n dismissible: boolean;\r\n showProgress: boolean;\r\n maxVisible: number;\r\n}\r\n\r\nexport class TdAlert {\n private static readonly styleId = 'td-alert-styles';\n private static readonly hostId = 'td-alert-host';\n private static readonly toastWrapperId = 'td-toast-wrapper';\n private static readonly toastHostId = 'td-toast-host';\n private static readonly toastRootPrefix = 'td-toast-root';\n private static readonly alertZIndex = '2147483647';\n private static readonly toastQueue = new WeakMap<HTMLElement, HTMLElement[]>();\n private static scrollLockCount = 0;\n private static previousBodyOverflow = '';\n\r\n static success(message: string, title = 'Operación exitosa'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'success',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static error(message: string, title = 'Error'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'error',\r\n confirmText: 'Cerrar',\r\n });\r\n }\r\n\r\n static systemError(message: string, title = 'Error de sistema'): Promise<boolean> {\r\n return this.error(message, title);\r\n }\r\n\r\n static warning(message: string, title = 'Advertencia'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'warning',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static info(message: string, title = 'Información'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'info',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static confirm(\r\n message: string,\r\n title = '¿Estás seguro?',\r\n confirmText = 'Sí, continuar',\r\n cancelText = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'question',\r\n confirmText,\r\n cancelText,\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static confirmDelete(\r\n message = 'Esta acción no se puede deshacer.',\r\n title = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'warning',\r\n confirmText: 'Sí, eliminar',\r\n cancelText: 'Cancelar',\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static show(options: TdAlertOptions | TdAlertaOpciones): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.injectStyles();\r\n\r\n const config = this.normalizeAlertOptions(options);\r\n const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;\r\n\r\n return new Promise<boolean>((resolve) => {\n this.lockBodyScroll();\n const host = this.getHost();\n\n const backdrop = document.createElement('dialog');\n backdrop.className = 'td-alert-dialog';\n this.applyAlertLayer(backdrop, this.alertZIndex);\n backdrop.setAttribute('aria-label', config.title || 'Alerta');\n\n const modal = document.createElement('div');\n modal.className = `td-alert-modal td-alert-modal--${config.type}`;\n modal.setAttribute('role', 'dialog');\n modal.setAttribute('aria-modal', 'true');\n modal.setAttribute('aria-labelledby', 'td-alert-title');\r\n\r\n const accent = document.createElement('span');\r\n accent.className = 'td-alert-accent';\r\n accent.setAttribute('aria-hidden', 'true');\r\n\r\n const icon = document.createElement('div');\n icon.className = `td-alert-icon td-alert-icon--${config.type}`;\n icon.appendChild(this.createIcon(this.getAlertIcon(config.type)));\n\r\n const title = document.createElement('h2');\r\n title.id = 'td-alert-title';\r\n title.className = 'td-alert-title';\r\n title.textContent = config.title;\r\n\r\n const message = document.createElement('p');\r\n message.className = 'td-alert-message';\r\n message.textContent = config.message;\r\n\r\n const actions = document.createElement('div');\r\n actions.className = 'td-alert-actions';\r\n\r\n const confirmButton = document.createElement('button');\r\n confirmButton.type = 'button';\r\n confirmButton.className = `td-alert-button td-alert-button--${config.type}`;\r\n confirmButton.textContent = config.confirmText;\r\n\r\n const cancelButton = document.createElement('button');\r\n cancelButton.type = 'button';\r\n cancelButton.className = 'td-alert-button td-alert-button--cancel';\r\n cancelButton.textContent = config.cancelText;\r\n\r\n let closed = false;\n const close = (result: boolean): void => {\n if (closed) return;\n closed = true;\n document.removeEventListener('keydown', onKeyDown);\n backdrop.classList.add('td-alert-dialog--leaving');\n\n window.setTimeout(() => {\n if (typeof backdrop.close === 'function' && backdrop.open) {\n backdrop.close();\n }\n backdrop.remove();\n this.unlockBodyScroll();\n previouslyFocused?.focus?.();\n resolve(result);\n }, 150);\n };\r\n\r\n const onKeyDown = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape' && config.closeOnEscape) {\r\n close(false);\r\n }\r\n\r\n if (event.key === 'Tab') {\r\n this.keepFocusInside(event, modal);\r\n }\r\n };\r\n\r\n confirmButton.addEventListener('click', () => close(true));\r\n cancelButton.addEventListener('click', () => close(false));\r\n\n if (config.closeOnBackdrop) {\n backdrop.addEventListener('click', (event) => {\n if (event.target === backdrop) {\n close(false);\n }\n });\n }\n\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n if (config.showCancel) {\r\n actions.appendChild(cancelButton);\r\n }\r\n\r\n actions.appendChild(confirmButton);\r\n\r\n const content = document.createElement('div');\r\n content.className = 'td-alert-content';\r\n\r\n content.appendChild(title);\r\n if (config.message) {\r\n content.appendChild(message);\r\n }\r\n\r\n content.appendChild(actions);\n modal.appendChild(accent);\n modal.appendChild(icon);\n modal.appendChild(content);\n backdrop.appendChild(modal);\n host.appendChild(backdrop);\n\n if (typeof backdrop.showModal === 'function') {\n backdrop.showModal();\n } else {\n backdrop.setAttribute('open', 'true');\n }\n\n if (config.autoFocus) {\n confirmButton.focus();\n }\n });\r\n }\r\n\r\n static notify(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n return this.toast(message, options);\r\n }\r\n\r\n static toast(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.injectStyles();\r\n\r\n const config = this.normalizeToastOptions({ ...options, message });\n\n return new Promise<boolean>((resolve) => {\n const root = this.getToastRoot(config.position);\n const toast = document.createElement('section');\n toast.className = `td-toast td-toast--${config.type}`;\n toast.setAttribute('role', config.type === 'error' ? 'alert' : 'status');\n toast.setAttribute('aria-live', config.type === 'error' ? 'assertive' : 'polite');\n\r\n const icon = document.createElement('span');\n icon.className = 'td-toast-icon';\n icon.appendChild(this.createIcon(this.getToastIcon(config.type)));\n\r\n const content = document.createElement('span');\r\n content.className = 'td-toast-content';\r\n\r\n if (config.title) {\r\n const title = document.createElement('strong');\r\n title.textContent = config.title;\r\n content.appendChild(title);\r\n }\r\n\r\n const messageElement = document.createElement('small');\r\n messageElement.textContent = config.message;\r\n content.appendChild(messageElement);\r\n\n const actions = document.createElement('span');\n actions.className = 'td-toast-actions';\n\n let timeoutId: number | undefined;\n let frameId: number | undefined;\n let remainingDuration = config.duration;\n let progressRatio = 1;\n let timerStartedAt = 0;\n let closed = false;\n let activated = false;\n\n const progress = config.showProgress && config.duration > 0\n ? document.createElement('span')\n : null;\n\n if (progress) {\n progress.className = 'td-toast-progress';\n progress.style.transform = 'scaleX(1)';\n }\n\n const updateProgress = (): void => {\n if (!progress || config.duration <= 0 || timeoutId === undefined) {\n return;\n }\n\n const elapsed = Date.now() - timerStartedAt;\n const currentRemaining = Math.max(0, remainingDuration - elapsed);\n progressRatio = config.duration > 0 ? currentRemaining / config.duration : 0;\n progress.style.transform = `scaleX(${Math.max(0, Math.min(1, progressRatio))})`;\n\n if (currentRemaining > 0) {\n frameId = window.requestAnimationFrame(updateProgress);\n }\n };\n\n const close = (result: boolean): void => {\n if (closed) return;\n closed = true;\n if (timeoutId !== undefined) {\n window.clearTimeout(timeoutId);\n }\n if (frameId !== undefined) {\n window.cancelAnimationFrame(frameId);\n }\n\n toast.classList.add('td-toast--leaving');\n window.setTimeout(() => {\n const queue = this.getToastQueue(root);\n toast.remove();\n this.showNextQueuedToast(root, config.maxVisible);\n this.updateToastQueueIndicator(root);\n if (!root.querySelector('.td-toast') && queue.length === 0) {\n root.remove();\n this.cleanupToastLayer();\n }\n resolve(result);\n }, 160);\n };\r\n const pauseTimer = (): void => {\r\n if (closed || config.duration <= 0 || timeoutId === undefined) {\r\n return;\r\n }\r\n\r\n window.clearTimeout(timeoutId);\n timeoutId = undefined;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n progressRatio = config.duration > 0 ? remainingDuration / config.duration : 0;\n if (progress) {\n progress.style.transform = `scaleX(${Math.max(0, Math.min(1, progressRatio))})`;\n }\n if (frameId !== undefined) {\n window.cancelAnimationFrame(frameId);\n frameId = undefined;\n }\n toast.classList.add('td-toast--paused');\n };\n const resumeTimer = (): void => {\n if (closed || config.duration <= 0 || timeoutId !== undefined || remainingDuration <= 0) {\n return;\n }\r\n\n timerStartedAt = Date.now();\n timeoutId = window.setTimeout(() => close(false), remainingDuration);\n toast.classList.remove('td-toast--paused');\n if (progress) {\n frameId = window.requestAnimationFrame(updateProgress);\n }\n };\n\r\n if (config.actionText) {\r\n const action = document.createElement('button');\r\n action.type = 'button';\r\n action.className = 'td-toast-action';\r\n action.textContent = config.actionText;\r\n action.addEventListener('click', () => close(true));\r\n actions.appendChild(action);\r\n }\r\n\r\n if (config.dismissible) {\r\n const dismiss = document.createElement('button');\r\n dismiss.type = 'button';\n dismiss.className = 'td-toast-dismiss';\n dismiss.setAttribute('aria-label', 'Cerrar notificación');\n dismiss.appendChild(this.createIcon('close'));\n dismiss.addEventListener('click', () => close(false));\n actions.appendChild(dismiss);\n }\n\r\n toast.appendChild(icon);\n toast.appendChild(content);\n toast.appendChild(actions);\n\n if (progress) {\n toast.appendChild(progress);\n }\n\n const activateToast = (): void => {\n if (activated) {\n return;\n }\n activated = true;\n toast.addEventListener('pointerenter', pauseTimer);\n toast.addEventListener('pointerleave', resumeTimer);\n toast.addEventListener('focusin', pauseTimer);\n toast.addEventListener('focusout', resumeTimer);\n if (config.duration > 0) {\n resumeTimer();\n }\n };\n\n toast.addEventListener('td-toast-activate', () => activateToast(), { once: true });\n\n if (this.getVisibleToastCount(root) >= config.maxVisible) {\n this.getToastQueue(root).push(toast);\n this.updateToastQueueIndicator(root);\n return;\n }\n\n root.appendChild(toast);\n activateToast();\n });\n }\n\r\n static toastSuccess(message: string, title = 'Guardado'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'success' });\r\n }\r\n\r\n static toastError(message: string, title = 'No se pudo completar'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'error', duration: 6500 });\r\n }\r\n\r\n static toastWarning(message: string, title = 'Atención'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'warning', duration: 5600 });\r\n }\r\n\r\n static toastInfo(message: string, title = 'Información'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'info' });\r\n }\r\n\r\n static snackbar(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n return this.toast(message, options);\r\n }\r\n\r\n static snackbarExito(message: string, titulo = 'Listo'): Promise<boolean> {\r\n return this.toastSuccess(message, titulo);\r\n }\r\n\r\n static snackbarError(message: string, titulo = 'No se pudo completar'): Promise<boolean> {\r\n return this.toastError(message, titulo);\r\n }\r\n\r\n static snackbarAdvertencia(message: string, titulo = 'Atención'): Promise<boolean> {\r\n return this.toastWarning(message, titulo);\r\n }\r\n\r\n static snackbarInfo(message: string, titulo = 'Información'): Promise<boolean> {\r\n return this.toastInfo(message, titulo);\r\n }\r\n\r\n static exito(mensaje: string, titulo = 'Operación exitosa'): Promise<boolean> {\r\n return this.success(mensaje, titulo);\r\n }\r\n\r\n static errorSistema(mensaje: string, titulo = 'Error de sistema'): Promise<boolean> {\r\n return this.systemError(mensaje, titulo);\r\n }\r\n\r\n static advertencia(mensaje: string, titulo = 'Advertencia'): Promise<boolean> {\r\n return this.warning(mensaje, titulo);\r\n }\r\n\r\n static confirmar(\r\n mensaje: string,\r\n titulo = '¿Estás seguro?',\r\n textoConfirmar = 'Sí, continuar',\r\n textoCancelar = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.confirm(mensaje, titulo, textoConfirmar, textoCancelar);\r\n }\r\n\r\n static confirmarEliminar(\r\n mensaje = 'Esta acción no se puede deshacer.',\r\n titulo = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title: titulo,\r\n message: mensaje,\r\n type: 'warning',\r\n confirmText: 'Sí, eliminar',\r\n cancelText: 'Cancelar',\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static notificar(options: TdSnackbarOpciones): Promise<boolean> {\r\n return this.toast(options.mensaje ?? '', options);\r\n }\r\n\r\n private static normalizeAlertOptions(options: TdAlertOptions | TdAlertaOpciones): TdAlertConfig {\r\n const legacy = options as TdAlertaOpciones;\r\n const modern = options as TdAlertOptions;\r\n\r\n return {\r\n title: modern.title ?? legacy.titulo ?? '',\r\n message: modern.message ?? legacy.mensaje ?? '',\r\n type: this.normalizeAlertType(modern.type ?? legacy.tipo ?? 'info'),\r\n confirmText: modern.confirmText ?? legacy.textoConfirmar ?? 'Aceptar',\r\n cancelText: modern.cancelText ?? legacy.textoCancelar ?? 'Cancelar',\r\n showCancel: modern.showCancel ?? legacy.mostrarCancelar ?? false,\r\n closeOnEscape: modern.closeOnEscape ?? legacy.cerrarConEscape ?? true,\r\n closeOnBackdrop: modern.closeOnBackdrop ?? legacy.cerrarConFondo ?? false,\r\n autoFocus: modern.autoFocus ?? legacy.autoFocus ?? true,\r\n };\r\n }\r\n\r\n private static normalizeToastOptions(options: TdToastOptions | TdSnackbarOpciones): TdToastConfig {\n const legacy = options as TdSnackbarOpciones;\n const modern = options as TdToastOptions;\n const explicitPosition = modern.position ?? legacy.posicion;\n const fallbackPosition = this.hasBlockingOverlayOpen() ? 'top-right' : 'bottom-left';\n\n return {\n title: modern.title ?? legacy.titulo ?? '',\n message: modern.message ?? legacy.mensaje ?? '',\n type: this.normalizeToastType(modern.type ?? legacy.tipo ?? 'neutral'),\n position: this.normalizeToastPosition(explicitPosition ?? fallbackPosition),\n duration: modern.duration ?? legacy.duracion ?? 4200,\n actionText: modern.actionText ?? legacy.textoAccion ?? '',\n dismissible: modern.dismissible ?? legacy.cerrable ?? true,\n showProgress: modern.showProgress ?? legacy.mostrarProgreso ?? true,\n maxVisible: modern.maxVisible ?? legacy.maximoVisible ?? 4,\n };\n }\n\n private static hasBlockingOverlayOpen(): boolean {\n if (typeof document === 'undefined') return false;\n\n return !!document.querySelector(\n '.cdk-overlay-pane.td-dialog-overlay, .td-alert-dialog[open], .td-alert-dialog'\n );\n }\n\r\n private static normalizeAlertType(type: TdAnyAlertType): TdAlertType {\r\n const map: Record<string, TdAlertType> = {\r\n exito: 'success',\r\n advertencia: 'warning',\r\n pregunta: 'question',\r\n success: 'success',\r\n error: 'error',\r\n warning: 'warning',\r\n info: 'info',\r\n question: 'question',\r\n };\r\n\r\n return map[type] ?? 'info';\r\n }\r\n\r\n private static normalizeToastType(type: TdAnyToastType): TdToastType {\r\n const map: Record<string, TdToastType> = {\r\n exito: 'success',\r\n advertencia: 'warning',\r\n success: 'success',\r\n error: 'error',\r\n warning: 'warning',\r\n info: 'info',\r\n neutral: 'neutral',\r\n };\r\n\r\n return map[type] ?? 'neutral';\r\n }\r\n\r\n private static normalizeToastPosition(position: TdAnyToastPosition): TdToastPosition {\r\n const map: Record<string, TdToastPosition> = {\r\n 'inferior-izquierda': 'bottom-left',\r\n 'inferior-derecha': 'bottom-right',\r\n 'superior-izquierda': 'top-left',\r\n 'superior-derecha': 'top-right',\r\n 'inferior-centro': 'bottom-center',\r\n 'superior-centro': 'top-center',\r\n 'bottom-left': 'bottom-left',\r\n 'bottom-right': 'bottom-right',\r\n 'top-left': 'top-left',\r\n 'top-right': 'top-right',\r\n 'bottom-center': 'bottom-center',\r\n 'top-center': 'top-center',\r\n };\r\n\r\n return map[position] ?? 'bottom-left';\r\n }\r\n\r\n private static getToastRoot(position: TdToastPosition): HTMLElement {\n const id = `${this.toastRootPrefix}-${position}`;\n const existing = document.getElementById(id);\n if (existing) {\n this.applyAlertLayer(existing, this.nextLayer(this.alertZIndex));\n const layer = this.getToastLayer();\n if (existing.parentElement !== layer) {\n layer.appendChild(existing);\n }\n return existing;\n }\n\n const root = document.createElement('div');\n root.id = id;\n root.className = `td-toast-root td-toast-root--${position}`;\n this.applyAlertLayer(root, this.nextLayer(this.alertZIndex));\n this.getToastLayer().appendChild(root);\n return root;\n }\n\n private static getToastLayer(): HTMLElement {\n const existing = document.getElementById(this.toastHostId);\n if (existing instanceof HTMLElement) {\n return this.bringToastLayerToFront(existing);\n }\n\n const host = document.createElement('div');\n host.id = this.toastHostId;\n host.className = 'td-toast-layer';\n this.applyAlertLayer(host, this.nextLayer(this.alertZIndex));\n host.setAttribute('aria-hidden', 'true');\n host.setAttribute('popover', 'manual');\n return this.bringToastLayerToFront(host);\n }\n\n private static bringToastLayerToFront(layer: HTMLElement): HTMLElement {\n const wrapper = this.getToastWrapper();\n if (layer.parentElement !== wrapper) {\n wrapper.appendChild(layer);\n }\n\n const toastPopover = layer as HTMLElement & {\n showPopover?: () => void;\n hidePopover?: () => void;\n matches?: (selectors: string) => boolean;\n };\n\n if (typeof toastPopover.showPopover === 'function' && !toastPopover.matches?.(':popover-open')) {\n toastPopover.showPopover();\n }\n\n return layer;\n }\n\n private static getToastWrapper(): HTMLElement {\n const existing = document.getElementById(this.toastWrapperId);\n if (existing instanceof HTMLElement) {\n const mountTarget = this.getToastMountTarget();\n if (existing.parentElement !== mountTarget) {\n mountTarget.appendChild(existing);\n }\n return existing;\n }\n\n const wrapper = document.createElement('div');\n wrapper.id = this.toastWrapperId;\n wrapper.className = 'cdk-global-overlay-wrapper td-toast-overlay-wrapper';\n this.applyAlertLayer(wrapper, this.nextLayer(this.alertZIndex));\n this.getToastMountTarget().appendChild(wrapper);\n return wrapper;\n }\n\n private static getToastMountTarget(): HTMLElement {\n return document.querySelector('.cdk-overlay-container') ?? document.body;\n }\n\n private static getHost(): HTMLElement {\n const existing = document.getElementById(this.hostId);\n if (existing) {\n document.body.appendChild(existing);\n return existing;\n }\n\n const host = document.createElement('div');\n host.id = this.hostId;\n host.className = 'td-alert-host';\n this.applyAlertLayer(host, this.alertZIndex);\n document.body.appendChild(host);\n return host;\n }\n\n private static applyAlertLayer(element: HTMLElement, zIndex: string): void {\n element.style.setProperty('z-index', zIndex, 'important');\n element.style.setProperty('isolation', 'isolate');\n }\n\n private static nextLayer(zIndex: string): string {\n const current = Number.parseInt(zIndex, 10);\n return Number.isFinite(current) ? String(current + 1) : zIndex;\n }\n\r\n private static getToastQueue(root: HTMLElement): HTMLElement[] {\n if (!this.toastQueue.has(root)) {\n this.toastQueue.set(root, []);\n }\n\n return this.toastQueue.get(root)!;\n }\n\n private static getVisibleToastCount(root: HTMLElement): number {\n return root.querySelectorAll(':scope > .td-toast').length;\n }\n\n private static showNextQueuedToast(root: HTMLElement, maxVisible: number): void {\n const queue = this.getToastQueue(root);\n const max = Math.max(1, maxVisible);\n\n while (this.getVisibleToastCount(root) < max && queue.length > 0) {\n const nextToast = queue.shift();\n if (!nextToast) {\n break;\n }\n\n root.appendChild(nextToast);\n nextToast.dispatchEvent(new CustomEvent('td-toast-activate'));\n }\n }\n\n private static updateToastQueueIndicator(root: HTMLElement): void {\n const queue = this.getToastQueue(root);\n const existing = root.querySelector<HTMLElement>(':scope > .td-toast-queue-indicator');\n\n if (!queue.length) {\n existing?.remove();\n return;\n }\n\n const indicator = existing ?? document.createElement('div');\n indicator.className = 'td-toast-queue-indicator';\n indicator.textContent = `+${queue.length} notificación${queue.length === 1 ? '' : 'es'}`;\n\n root.appendChild(indicator);\n }\n\n private static cleanupToastLayer(): void {\n const layer = document.getElementById(this.toastHostId);\n if (!(layer instanceof HTMLElement)) {\n return;\n }\n\n if (layer.querySelector('.td-toast-root')) {\n return;\n }\n\n const toastPopover = layer as HTMLElement & { hidePopover?: () => void; matches?: (selectors: string) => boolean };\n if (typeof toastPopover.hidePopover === 'function' && toastPopover.matches?.(':popover-open')) {\n toastPopover.hidePopover();\n }\n\n layer.remove();\n document.getElementById(this.toastWrapperId)?.remove();\n }\n\r\n private static getAlertIcon(type: TdAlertType): keyof typeof TD_ICONOS {\n const icons: Record<TdAlertType, keyof typeof TD_ICONOS> = {\n success: 'check_circle',\n error: 'error',\n warning: 'warning',\n info: 'info',\n question: 'help',\n };\n\n return icons[type];\n }\n\n private static getToastIcon(type: TdToastType): keyof typeof TD_ICONOS {\n const icons: Record<TdToastType, keyof typeof TD_ICONOS> = {\n success: 'check_circle',\n error: 'error',\n warning: 'warning',\n info: 'info',\n neutral: 'notifications',\n };\n\n return icons[type];\n }\n\n private static createIcon(name: keyof typeof TD_ICONOS): SVGSVGElement {\n const definition = TD_ICONOS[name] as TdIconoDefinicion;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n svg.setAttribute('viewBox', definition.viewBox || '0 0 24 24');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('focusable', 'false');\n path.setAttribute('d', definition.path);\n\n if (definition.estilo === 'linea') {\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', 'currentColor');\n path.setAttribute('stroke-width', `${definition.grosor || 1.75}`);\n path.setAttribute('stroke-linecap', 'round');\n path.setAttribute('stroke-linejoin', 'round');\n } else {\n path.setAttribute('fill', 'currentColor');\n }\n\n svg.appendChild(path);\n return svg;\n }\n\r\n private static keepFocusInside(event: KeyboardEvent, container: HTMLElement): void {\r\n const focusables = Array.from(\r\n container.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n ).filter((element) => !element.hasAttribute('disabled'));\r\n\r\n if (!focusables.length) return;\r\n\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n const active = document.activeElement;\r\n\r\n if (event.shiftKey && active === first) {\r\n event.preventDefault();\r\n last.focus();\r\n } else if (!event.shiftKey && active === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n\r\n private static lockBodyScroll(): void {\r\n if (this.scrollLockCount === 0) {\r\n this.previousBodyOverflow = document.body.style.overflow;\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n this.scrollLockCount += 1;\r\n }\r\n\r\n private static unlockBodyScroll(): void {\r\n this.scrollLockCount = Math.max(0, this.scrollLockCount - 1);\r\n\r\n if (this.scrollLockCount === 0) {\r\n document.body.style.overflow = this.previousBodyOverflow;\r\n }\r\n }\r\n\r\n private static injectStyles(): void {\r\n if (document.getElementById(this.styleId)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = this.styleId;\r\n style.textContent = `\r\n .td-alert-dialog,\n .td-alert-host,\n .td-toast-overlay-wrapper,\n .td-toast-layer,\n .td-toast-root {\n --td-alert-z-index: var(--td-z-alert, 2147483647);\n box-sizing: border-box;\n font-family: var(--td-font-family, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\n\n .td-alert-host {\n position: fixed;\n inset: 0;\n z-index: var(--td-alert-z-index) !important;\n pointer-events: none;\n isolation: isolate;\n }\n\n .td-alert-dialog *,\n .td-toast-overlay-wrapper *,\n .td-toast-layer *,\n .td-toast-root * {\n box-sizing: border-box;\n }\n\n .td-toast-overlay-wrapper {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n .td-toast-layer {\n position: fixed;\n inset: 0;\n display: block;\n width: 100dvw;\n min-width: 100dvw;\n max-width: 100dvw;\n height: 100dvh;\n min-height: 100dvh;\n max-height: 100dvh;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n overflow: visible;\n pointer-events: none;\n }\n\n .td-alert-dialog {\n z-index: var(--td-alert-z-index) !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: min(100%, 100dvw);\n max-width: 100dvw;\n border: 0;\n margin: auto;\n padding: 1rem;\n pointer-events: auto;\n background: transparent;\n backdrop-filter: none;\n animation: td-alert-backdrop-in 160ms ease-out;\n }\n\n .td-alert-dialog::backdrop {\n background: transparent;\n }\n\r\n .td-alert-modal {\r\n position: relative;\r\n display: grid;\r\n width: min(100%, 455px);\r\n overflow: hidden;\r\n border: 1px solid color-mix(in srgb, var(--td-alert-glow, var(--td-color-primary, #3157a4)) 18%, rgba(255, 255, 255, 0.82));\r\n border-radius: 1.45rem;\r\n padding: 1.35rem;\r\n color: var(--td-color-text, #202b3d);\r\n background:\r\n linear-gradient(145deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.5)),\r\n color-mix(in srgb, var(--td-color-surface, #fff) 60%, transparent);\r\n text-align: center;\r\n box-shadow:\r\n 0 22px 58px rgba(15, 23, 42, 0.15),\r\n 0 0 0 1px rgba(255, 255, 255, 0.76) inset;\r\n backdrop-filter: blur(28px) saturate(155%);\r\n -webkit-backdrop-filter: blur(28px) saturate(155%);\r\n animation: td-alert-modal-in 210ms cubic-bezier(.16,1,.3,1);\r\n }\r\n\r\n .td-alert-modal::before {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: inherit;\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.06) 58%, rgba(255, 255, 255, 0.14));\r\n opacity: 0.58;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-theme-dark .td-alert-modal {\r\n border-color: color-mix(in srgb, var(--td-alert-glow, var(--td-color-primary, #8aa7e6)) 22%, rgba(255, 255, 255, 0.16));\r\n background:\r\n linear-gradient(145deg, rgba(32, 36, 45, 0.78), rgba(17, 20, 26, 0.54)),\r\n color-mix(in srgb, var(--td-color-surface, #181b22) 66%, transparent);\r\n box-shadow:\r\n 0 24px 66px rgba(0, 0, 0, 0.34),\r\n 0 0 0 1px rgba(255, 255, 255, 0.1) inset;\r\n }\r\n\r\n .td-theme-dark .td-alert-modal::before {\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.018) 58%, rgba(255, 255, 255, 0.035));\r\n }\r\n\r\n .td-alert-modal::after {\r\n position: absolute;\r\n inset: 1px;\r\n z-index: 0;\r\n border-radius: calc(1.45rem - 1px);\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 46%);\r\n opacity: 0.36;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-alert-accent {\r\n display: none;\r\n }\r\n\r\n .td-alert-modal--success { --td-alert-glow: var(--td-color-success, #16784a); }\r\n .td-alert-modal--error { --td-alert-glow: var(--td-color-danger, #b93a3a); }\r\n .td-alert-modal--warning { --td-alert-glow: var(--td-color-warning, #a8660b); }\r\n .td-alert-modal--info { --td-alert-glow: var(--td-color-info, #2563a8); }\r\n .td-alert-modal--question { --td-alert-glow: var(--td-color-primary, #3157a4); }\r\n\r\n .td-alert-content {\r\n min-width: 0;\r\n position: relative;\r\n z-index: 1;\r\n }\r\n\r\n .td-alert-icon {\n z-index: 1;\n display: grid;\n width: 3.45rem;\r\n height: 3.45rem;\r\n margin: 0 auto 0.9rem;\r\n place-items: center;\r\n border: 1px solid color-mix(in srgb, currentColor 12%, transparent);\r\n border-radius: 1rem;\r\n font-size: 1.45rem;\r\n font-weight: 900;\r\n box-shadow: none;\n }\n\n .td-alert-icon svg,\n .td-toast-icon svg,\n .td-toast-dismiss svg {\n width: 1em;\n height: 1em;\n display: block;\n }\n\r\n .td-alert-icon--success {\r\n color: var(--td-color-success, #16784a);\r\n background: var(--td-color-success-soft, #e2f5eb);\r\n }\r\n\r\n .td-alert-icon--error {\r\n color: var(--td-color-danger, #b93a3a);\r\n background: var(--td-color-danger-soft, #fde7e7);\r\n }\r\n\r\n .td-alert-icon--warning {\r\n color: var(--td-color-warning, #a8660b);\r\n background: var(--td-color-warning-soft, #fff2d8);\r\n }\r\n\r\n .td-alert-icon--info {\r\n color: var(--td-color-info, #2563a8);\r\n background: var(--td-color-info-soft, #e4effb);\r\n }\r\n\r\n .td-alert-icon--question {\r\n color: var(--td-color-primary, #3157a4);\r\n background: var(--td-color-primary-soft, #eaf0fb);\r\n }\r\n\r\n .td-alert-title {\r\n margin: 0;\r\n color: var(--td-color-text, #202b3d);\r\n font-size: 1.18rem;\r\n line-height: 1.25;\r\n font-weight: 850;\r\n letter-spacing: -0.02em;\r\n }\r\n\r\n .td-alert-message {\r\n max-width: 23rem;\r\n margin: 0.55rem auto 0;\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 0.88rem;\r\n line-height: 1.55;\r\n }\r\n\r\n .td-alert-actions {\r\n display: flex;\r\n justify-content: center;\r\n gap: 0.65rem;\r\n margin-top: 1.45rem;\r\n }\r\n\r\n .td-alert-button {\r\n min-height: 2.55rem;\r\n border: 1px solid transparent;\r\n border-radius: 0.9rem;\r\n padding: 0.68rem 1.08rem;\r\n color: var(--td-color-on-primary, #ffffff);\r\n background: var(--td-color-primary, #3157a4);\r\n font-size: 0.8rem;\r\n font-weight: 800;\r\n cursor: pointer;\r\n box-shadow: 0 12px 24px color-mix(in srgb, var(--td-color-primary, #3157a4) 22%, transparent);\r\n transition: transform 150ms ease, filter 150ms ease, background 150ms ease, box-shadow 150ms ease;\r\n }\r\n\r\n .td-alert-button:hover {\r\n filter: brightness(1.02);\r\n transform: translateY(-2px);\r\n }\r\n\r\n .td-alert-button:active {\r\n transform: scale(0.98);\r\n }\r\n\r\n .td-alert-button:focus-visible {\r\n outline: 0;\r\n box-shadow: var(--td-focus-ring, 0 0 0 3px rgba(49, 87, 164, 0.18));\r\n }\r\n\r\n .td-alert-button--success { background: var(--td-color-success, #16784a); }\r\n .td-alert-button--error { background: var(--td-color-danger, #b93a3a); }\r\n .td-alert-button--warning { background: var(--td-color-warning, #a8660b); }\r\n .td-alert-button--info { background: var(--td-color-info, #2563a8); }\r\n .td-alert-button--question { background: var(--td-color-primary, #3157a4); }\r\n\r\n .td-alert-button--cancel {\r\n border-color: var(--td-color-border, #dde3ee);\r\n color: var(--td-color-text, #202b3d);\r\n background: var(--td-color-surface-soft, #f6f8fb);\r\n box-shadow: none;\r\n }\r\n\r\n .td-alert-dialog--leaving {\n animation: td-alert-backdrop-out 150ms ease-in forwards;\n }\n\n .td-alert-dialog--leaving .td-alert-modal {\n animation: td-alert-modal-out 150ms ease-in forwards;\n }\n\r\n .td-toast-root {\n position: fixed;\n z-index: calc(var(--td-alert-z-index) + 1) !important;\n display: grid;\n width: min(26rem, calc(100vw - 1.5rem));\n gap: 0.65rem;\n pointer-events: none;\n }\n\n .td-toast-queue-indicator {\n justify-self: start;\n max-width: 100%;\n border: 1px dashed color-mix(in srgb, var(--td-color-border, #dde3ee) 78%, transparent);\n border-radius: 999px;\n padding: 0.38rem 0.72rem;\n color: var(--td-color-text-muted, #66758b);\n background: color-mix(in srgb, var(--td-color-surface, #ffffff) 82%, transparent);\n font-size: 0.72rem;\n font-weight: 700;\n line-height: 1.2;\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n pointer-events: none;\n }\n\r\n .td-toast-root--bottom-left {\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n left: max(1rem, env(safe-area-inset-left));\r\n }\r\n\r\n .td-toast-root--bottom-right {\r\n right: max(1rem, env(safe-area-inset-right));\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n }\r\n\r\n .td-toast-root--top-left {\r\n top: max(1rem, env(safe-area-inset-top));\r\n left: max(1rem, env(safe-area-inset-left));\r\n }\r\n\r\n .td-toast-root--top-right {\r\n top: max(1rem, env(safe-area-inset-top));\r\n right: max(1rem, env(safe-area-inset-right));\r\n }\r\n\r\n .td-toast-root--bottom-center {\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n .td-toast-root--top-center {\r\n top: max(1rem, env(safe-area-inset-top));\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n .td-toast {\r\n --td-toast-glow: var(--td-color-primary, #3157a4);\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: auto minmax(0, 1fr) auto;\r\n align-items: start;\r\n gap: 0.72rem;\r\n width: 100%;\r\n overflow: hidden;\r\n border: 1px solid color-mix(in srgb, var(--td-toast-glow) 16%, rgba(255, 255, 255, 0.76));\r\n border-radius: 1.05rem;\r\n padding: 0.82rem 0.85rem;\r\n color: var(--td-color-text, #202b3d);\r\n background:\r\n linear-gradient(145deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.52)),\r\n color-mix(in srgb, var(--td-color-surface, #fff) 62%, transparent);\r\n box-shadow:\r\n 0 18px 42px rgba(15, 23, 42, 0.14),\r\n 0 0 0 1px rgba(255, 255, 255, 0.7) inset;\r\n backdrop-filter: blur(22px) saturate(145%);\r\n -webkit-backdrop-filter: blur(22px) saturate(145%);\r\n pointer-events: auto;\r\n animation: td-toast-in 180ms cubic-bezier(.2,.8,.2,1);\r\n }\r\n\r\n .td-toast::before {\r\n position: absolute;\r\n inset: 0;\r\n border-radius: inherit;\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.2), transparent 58%);\r\n opacity: 0.56;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-toast--leaving {\n animation: td-toast-out 160ms ease-in forwards;\n }\n\r\n .td-toast--success { --td-toast-glow: var(--td-color-success, #16784a); }\n .td-toast--error { --td-toast-glow: var(--td-color-danger, #b93a3a); }\r\n .td-toast--warning { --td-toast-glow: var(--td-color-warning, #a8660b); }\r\n .td-toast--info { --td-toast-glow: var(--td-color-info, #2563a8); }\r\n .td-toast--neutral { --td-toast-glow: var(--td-color-primary, #3157a4); }\r\n\r\n .td-toast-icon {\r\n position: relative;\r\n z-index: 1;\r\n display: grid;\r\n width: 1.9rem;\r\n height: 1.9rem;\r\n place-items: center;\r\n border-radius: var(--td-radius-md, 0.72rem);\r\n font-size: 0.92rem;\r\n font-weight: 900;\r\n }\r\n\r\n .td-toast--success .td-toast-icon {\r\n color: var(--td-color-success, #16784a);\r\n background: var(--td-color-success-soft, #e2f5eb);\r\n }\r\n .td-toast--error .td-toast-icon {\r\n color: var(--td-color-danger, #b93a3a);\r\n background: var(--td-color-danger-soft, #fde7e7);\r\n }\r\n .td-toast--warning .td-toast-icon {\r\n color: var(--td-color-warning, #a8660b);\r\n background: var(--td-color-warning-soft, #fff2d8);\r\n }\r\n .td-toast--info .td-toast-icon {\r\n color: var(--td-color-info, #2563a8);\r\n background: var(--td-color-info-soft, #e4effb);\r\n }\r\n .td-toast--neutral .td-toast-icon {\r\n color: var(--td-color-primary, #3157a4);\r\n background: var(--td-color-primary-soft, #eaf0fb);\r\n }\r\n\r\n .td-toast-content {\r\n position: relative;\r\n z-index: 1;\r\n display: grid;\r\n min-width: 0;\r\n gap: 0.18rem;\r\n padding-top: 0.12rem;\r\n }\r\n\r\n .td-toast-content strong {\r\n overflow: hidden;\r\n color: var(--td-color-text, #202b3d);\r\n font-size: 0.8rem;\r\n font-weight: 850;\r\n line-height: 1.25;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n\r\n .td-toast-content small {\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 0.72rem;\r\n line-height: 1.45;\r\n }\r\n\r\n .td-toast-actions {\r\n position: relative;\r\n z-index: 1;\r\n display: flex;\r\n align-items: center;\r\n gap: 0.3rem;\r\n }\r\n\r\n .td-toast-action,\r\n .td-toast-dismiss {\r\n border: 0;\r\n border-radius: var(--td-radius-md, 0.75rem);\r\n color: var(--td-color-primary, #3157a4);\r\n background: transparent;\r\n font: inherit;\r\n font-weight: 800;\r\n cursor: pointer;\r\n }\r\n\r\n .td-toast-action {\r\n padding: 0.44rem 0.54rem;\r\n font-size: 0.7rem;\r\n }\r\n\r\n .td-toast-dismiss {\r\n display: grid;\r\n width: 1.7rem;\r\n height: 1.7rem;\r\n place-items: center;\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 1.2rem;\r\n line-height: 1;\r\n }\r\n\r\n .td-toast-action:hover,\r\n .td-toast-dismiss:hover {\r\n background: var(--td-color-surface-soft, #f6f8fb);\r\n }\r\n\r\n .td-toast-action:focus-visible,\r\n .td-toast-dismiss:focus-visible {\r\n outline: 0;\r\n box-shadow: var(--td-focus-ring, 0 0 0 3px rgba(49, 87, 164, 0.18));\r\n }\r\n\r\n .td-toast-progress {\n position: absolute;\n z-index: 1;\n right: 0;\n bottom: 0;\n left: 0;\n height: 2px;\n background: currentColor;\n opacity: 0.24;\n transform-origin: left;\n will-change: transform;\n }\n\r\n .td-theme-dark .td-toast {\r\n border-color: color-mix(in srgb, var(--td-toast-glow) 20%, rgba(255, 255, 255, 0.16));\r\n background:\r\n linear-gradient(145deg, rgba(32, 36, 45, 0.76), rgba(17, 20, 26, 0.52)),\r\n color-mix(in srgb, var(--td-color-surface, #181b22) 66%, transparent);\r\n box-shadow:\r\n 0 20px 48px rgba(0, 0, 0, 0.34),\r\n 0 0 0 1px rgba(255, 255, 255, 0.1) inset;\r\n }\r\n\r\n .td-theme-dark .td-toast::before {\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 58%);\r\n }\r\n\r\n @keyframes td-alert-backdrop-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n\r\n @keyframes td-alert-modal-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(12px) scale(0.96);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-alert-backdrop-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n\r\n @keyframes td-alert-modal-out {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.97);\r\n }\r\n }\r\n\r\n @keyframes td-toast-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px) scale(0.98);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-toast-out {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.98);\r\n }\r\n }\r\n\r\n @keyframes td-toast-progress {\r\n from { transform: scaleX(1); }\r\n to { transform: scaleX(0); }\r\n }\r\n\r\n @media (max-width: 520px) {\r\n .td-alert-modal {\r\n grid-template-columns: 1fr;\r\n border-radius: var(--td-radius-lg, 0.95rem);\r\n padding: 1.25rem;\r\n }\r\n\r\n .td-alert-icon {\r\n width: 3.25rem;\r\n height: 3.25rem;\r\n }\r\n\r\n .td-alert-actions {\r\n justify-content: stretch;\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .td-alert-button {\r\n width: 100%;\r\n }\r\n\r\n .td-toast-root {\r\n right: 0.75rem;\r\n left: 0.75rem;\r\n width: auto;\r\n transform: none;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\nexport class TdAlerta extends TdAlert {}\r\n","import { Injectable } from '@angular/core';\nimport { TdIconoDefinicion, TdIconoPersonalizado } from './td-icono.model';\nimport { TD_ICONOS } from './td-iconos';\n\n@Injectable({ providedIn: 'root' })\nexport class TdIconoRegistry {\n private readonly iconos = new Map<string, TdIconoDefinicion>(\n Object.entries(TD_ICONOS)\n );\n\n registrar(iconos: TdIconoPersonalizado): void {\n for (const [nombre, definicion] of Object.entries(iconos)) {\n const clave = this.normalizar(nombre);\n if (!clave) continue;\n\n this.iconos.set(\n clave,\n typeof definicion === 'string' ? { path: definicion } : definicion\n );\n }\n }\n\n obtener(nombre: string | null | undefined): TdIconoDefinicion {\n return this.iconos.get(this.normalizar(nombre)) ?? this.iconos.get('folder')!;\n }\n\n existe(nombre: string): boolean {\n return this.iconos.has(this.normalizar(nombre));\n }\n\n nombres(): string[] {\n return [...this.iconos.keys()];\n }\n\n private normalizar(nombre: string | null | undefined): string {\n return (nombre ?? '').trim().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { TdIconoRegistry } from './td-icono-registry';\n\n@Component({\n selector: 'td-icon',\n template: `\n <svg\n [attr.viewBox]=\"definicion().viewBox || '0 0 24 24'\"\n [attr.aria-hidden]=\"titulo ? null : 'true'\"\n [attr.aria-label]=\"titulo || null\"\n [attr.role]=\"titulo ? 'img' : null\"\n focusable=\"false\"\n >\n <path\n [attr.d]=\"definicion().path\"\n [attr.fill]=\"definicion().estilo === 'linea' ? 'none' : 'currentColor'\"\n [attr.stroke]=\"definicion().estilo === 'linea' ? 'currentColor' : 'none'\"\n [attr.stroke-width]=\"definicion().grosor || null\"\n [attr.stroke-linecap]=\"definicion().estilo === 'linea' ? 'round' : null\"\n [attr.stroke-linejoin]=\"definicion().estilo === 'linea' ? 'round' : null\"\n />\n </svg>\n `,\n styles: `\n :host {\n display: inline-flex;\n width: var(--td-icon-size, 1.25rem);\n height: var(--td-icon-size, 1.25rem);\n flex: 0 0 auto;\n color: inherit;\n line-height: 0;\n vertical-align: middle;\n }\n svg { width: 100%; height: 100%; }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdIcon {\n private readonly registry = inject(TdIconoRegistry);\n\n @Input() nombre = 'folder';\n @Input() titulo = '';\n\n @Input()\n set tamano(value: string | number) {\n this.tamanoCss = typeof value === 'number' ? `${value}px` : value;\n }\n\n protected tamanoCss = '1.25rem';\n\n @HostBinding('style.--td-icon-size')\n protected get tamanoHost(): string {\n return this.tamanoCss;\n }\n\n protected definicion() {\n return this.registry.obtener(this.nombre);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, booleanAttribute } from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdBadgeTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdBadgeVariant = 'soft' | 'solid' | 'outline';\nexport type TdBadgeSize = 'sm' | 'md' | 'lg';\nexport type TdBadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\n@Component({\n selector: 'td-badge',\n imports: [TdIcon],\n template: `\n <span\n [class]=\"\n isFloating\n ? 'td-badge-anchor td-badge-anchor--' + position\n : 'td-badge td-badge--' + tone + ' td-badge--' + variant + ' td-badge--' + size\n \"\n [class.td-badge--dot]=\"!isFloating && dot\"\n [class.td-badge--pill]=\"!isFloating && pill\"\n [class.td-badge--with-icon]=\"!isFloating && !!icon && !dot\"\n [attr.aria-label]=\"!isFloating ? ariaLabel || null : null\"\n >\n @if (!isFloating && dot) {\n <span class=\"td-badge__dot\" aria-hidden=\"true\"></span>\n } @else {\n @if (!isFloating && icon) {\n <td-icon [nombre]=\"icon\" />\n }\n <span class=\"td-badge__content\" [class.td-badge__content--floating]=\"isFloating\">\n <ng-content />\n </span>\n }\n\n @if (isFloating && !hidden) {\n <span\n class=\"td-badge td-badge--floating\"\n [class]=\"'td-badge td-badge--floating td-badge--' + tone + ' td-badge--' + variant + ' td-badge--' + size\"\n [class.td-badge--dot]=\"dot\"\n [class.td-badge--pill]=\"pill\"\n [class.td-badge--with-icon]=\"!!icon && !dot\"\n [attr.aria-label]=\"ariaLabel || null\"\n >\n @if (dot) {\n <span class=\"td-badge__dot\" aria-hidden=\"true\"></span>\n } @else {\n @if (icon) {\n <td-icon [nombre]=\"icon\" />\n }\n <span class=\"td-badge__content\">\n {{ value }}\n </span>\n }\n </span>\n }\n </span>\n `,\n styleUrl: './td-badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBadge {\n @Input() tone: TdBadgeTone = 'primary';\n @Input() variant: TdBadgeVariant = 'soft';\n @Input() size: TdBadgeSize = 'md';\n @Input() value: string | number | null | undefined = undefined;\n @Input() position: TdBadgePosition = 'top-right';\n @Input() icon = '';\n @Input({ transform: booleanAttribute }) floating = false;\n @Input({ transform: booleanAttribute }) hidden = false;\n @Input({ transform: booleanAttribute }) dot = false;\n @Input({ transform: booleanAttribute }) pill = true;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n protected get isFloating(): boolean {\n return this.floating || (this.value !== undefined && this.value !== null && this.value !== '');\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost';\nexport type TdButtonTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdButtonSize = 'sm' | 'md' | 'lg';\nexport type TdButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'td-button',\n imports: [TdIcon],\n template: `\n <button\n class=\"td-button\"\n [class]=\"'td-button td-button--' + variant + ' td-button--' + tone + ' td-button--' + size\"\n [class.td-button--block]=\"block\"\n [class.td-button--loading]=\"loading\"\n [class.td-button--icon-only]=\"isIconOnly\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n (click)=\"handleClick($event)\"\n >\n @if (loading) {\n <span class=\"td-button__spinner\" aria-hidden=\"true\"></span>\n } @else if (icon && iconPosition === 'start') {\n <td-icon [nombre]=\"icon\" />\n }\n\n <span\n #content\n class=\"td-button__content\"\n [class.td-button__content--hidden]=\"isIconOnly\"\n >\n <ng-content />\n </span>\n\n @if (!loading && icon && iconPosition === 'end') {\n <td-icon [nombre]=\"icon\" />\n }\n </button>\n `,\n styleUrl: './td-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdButton implements AfterContentChecked {\n @ViewChild('content', { static: true }) private readonly contentRef?: ElementRef<HTMLElement>;\n\n @Input() variant: TdButtonVariant = 'solid';\n @Input() tone: TdButtonTone = 'primary';\n @Input() size: TdButtonSize = 'md';\n @Input() type: TdButtonType = 'button';\n @Input() icon = '';\n @Input() iconPosition: 'start' | 'end' = 'start';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() block = false;\n @Input({ transform: booleanAttribute }) iconOnly = false;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n @Output() readonly pressed = new EventEmitter<MouseEvent>();\n\n protected hasProjectedContent = false;\n\n protected get isIconOnly(): boolean {\n return !!this.icon && (this.iconOnly || !this.hasProjectedContent);\n }\n\n ngAfterContentChecked(): void {\n const element = this.contentRef?.nativeElement;\n if (!element) return;\n\n this.hasProjectedContent = !!element.textContent?.trim() || element.childElementCount > 0;\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled || this.loading) return;\n this.pressed.emit(event);\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injector,\n ModelSignal,\n OutputEmitterRef,\n signal,\n} from '@angular/core';\nimport { FORM_FIELD } from '@angular/forms/signals';\n\nexport interface TdFormControlBridge {\n readonly usesSignalForms: boolean;\n isDisabled(fieldDisabled: boolean): boolean;\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean;\n registerOnTouched(fn: () => void): void;\n setDisabledState(disabled: boolean): void;\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void;\n}\n\nexport type TdErrorDisplay = 'auto' | 'always' | 'touched' | 'dirty' | 'never';\n\n/**\n * Puente reutilizable entre Signal Forms y ControlValueAccessor.\n *\n * Los inputs del contrato se declaran en cada componente porque el compilador\n * de Signal Forms de Angular 21 necesita encontrarlos directamente allí.\n */\nexport function createTdFormControlBridge(): TdFormControlBridge {\n const injector = inject(Injector);\n const cdr = inject(ChangeDetectorRef);\n const cvaDisabled = signal(false);\n let onCvaTouched: () => void = () => undefined;\n\n const usesSignalForms = (): boolean =>\n !!injector.get(FORM_FIELD, null, { self: true, optional: true });\n\n return {\n get usesSignalForms(): boolean {\n return usesSignalForms();\n },\n isDisabled(fieldDisabled: boolean): boolean {\n return usesSignalForms() ? fieldDisabled : fieldDisabled || cvaDisabled();\n },\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean {\n if (displayMode === 'never') return false;\n\n const hasErrorState = invalid || hasErrorMessage;\n if (!hasErrorState) return false;\n\n if (displayMode === 'always') return true;\n if (displayMode === 'touched') return touched;\n if (displayMode === 'dirty') return dirty;\n return touched || dirty;\n },\n registerOnTouched(fn: () => void): void {\n onCvaTouched = fn;\n },\n setDisabledState(disabled: boolean): void {\n if (!usesSignalForms()) cvaDisabled.set(disabled);\n cdr.markForCheck();\n },\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void {\n // Angular prioriza el CVA cuando el control también publica NG_VALUE_ACCESSOR,\n // incluso si está enlazado mediante [formField]. Mantener esta llamada permite\n // que Signal Forms marque el field como touched sin perder compatibilidad clásica.\n onCvaTouched();\n touched.set(true);\n touch.emit();\n },\n };\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet checkboxSequence = 0;\n\n@Component({\n selector: 'td-checkbox',\n imports: [TdIcon],\n template: `\n <label\n class=\"td-checkbox\"\n [class.td-checkbox--checked]=\"checked()\"\n [class.td-checkbox--disabled]=\"isDisabled()\"\n [class.td-checkbox--readonly]=\"readonly()\"\n [class.td-checkbox--error]=\"hasError()\"\n [class.td-checkbox--dark]=\"dark()\"\n [for]=\"inputId\"\n >\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"descriptionId\"\n (change)=\"handleChange($event)\"\n (blur)=\"handleBlur()\"\n (click)=\"handleClick($event)\"\n />\n\n <span class=\"td-checkbox__box\" aria-hidden=\"true\">\n @if (checked()) {\n <td-icon nombre=\"check\" tamano=\".9rem\" />\n }\n </span>\n\n <span class=\"td-checkbox__content\">\n <span class=\"td-checkbox__label\">{{ label() }}</span>\n @if (description()) {\n <span class=\"td-checkbox__description\">{{ description() }}</span>\n }\n </span>\n </label>\n\n @if (displayError() || hint()) {\n <p\n class=\"td-checkbox__message\"\n [class.td-checkbox__message--error]=\"hasError()\"\n [id]=\"descriptionId\"\n >\n {{ displayError() || hint() }}\n </p>\n }\n `,\n styleUrl: './td-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdCheckbox),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdCheckbox implements ControlValueAccessor, FormCheckboxControl {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-checkbox-${++checkboxSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n readonly id = input('');\n readonly label = input('Opción');\n readonly description = input('');\n readonly hint = input('');\n readonly dark = input(false);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly checked = model(false);\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n protected get inputId(): string {\n return this.id() || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.displayError() || this.hint()\n ? `${this.inputId}-description`\n : null;\n }\n\n private onChange: (checked: boolean) => void = () => undefined;\n\n writeValue(value: unknown): void {\n this.checked.set(value === true);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (checked: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleChange(event: Event): void {\n if (this.readonly()) {\n (event.target as HTMLInputElement).checked = this.checked();\n return;\n }\n\n const checked = (event.target as HTMLInputElement).checked === true;\n this.checked.set(checked);\n this.onChange(checked);\n }\n\n protected handleClick(event: MouseEvent): void {\n if (!this.readonly()) return;\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleBlur(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TdBadge, TdBadgeTone } from '../badge';\nimport { TdIcon } from '../iconos';\nimport { TdMenuBadge, TdMenuItem, TdMenuPosicion, TdMenuSeleccion } from './td-menu.model';\n\n@Component({\n selector: 'td-menu',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon, TdBadge],\n templateUrl: './td-menu.html',\n styleUrl: './td-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdMenu<T = unknown> {\n @Input() items: TdMenuItem<T>[] = [];\n @Input() etiqueta = '';\n @Input() icono = 'more_vertical';\n @Input() posicion: TdMenuPosicion = 'abajo-fin';\n @Input() ancho = '14rem';\n @Input() disabled = false;\n @Input() oscuro = false;\n @Input() ariaLabel = 'Abrir menu';\n\n @Output() readonly seleccion = new EventEmitter<TdMenuSeleccion<T>>();\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n\n protected abierto = false;\n\n protected get itemsVisibles(): TdMenuItem<T>[] {\n return this.items.filter((item) => item.visible ?? true);\n }\n\n protected badgeConfig(item: TdMenuItem<T>): TdMenuBadge | null {\n if (item.badge === undefined || item.badge === null || item.badge === '') return null;\n\n if (typeof item.badge === 'string' || typeof item.badge === 'number') {\n return {\n etiqueta: item.badge,\n tone: this.badgeTonePorTono(item.tono),\n variant: 'soft',\n size: 'sm',\n };\n }\n\n return {\n tone: this.badgeTonePorTono(item.tono),\n variant: 'soft',\n size: 'sm',\n ...item.badge,\n };\n }\n\n protected alternar(): void {\n if (this.disabled) return;\n this.establecerAbierto(!this.abierto);\n }\n\n protected cerrar(): void {\n this.establecerAbierto(false);\n }\n\n protected seleccionar(item: TdMenuItem<T>): void {\n if (item.deshabilitado) return;\n this.seleccion.emit({ item, id: item.id, data: item.data });\n this.cerrar();\n }\n\n protected posiciones(): CdkConnectedOverlay['positions'] {\n const offset = 8;\n const mapa: Record<TdMenuPosicion, CdkConnectedOverlay['positions']> = {\n 'abajo-inicio': [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'abajo-fin': [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'arriba-inicio': [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n 'arriba-fin': [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n };\n\n return mapa[this.posicion];\n }\n\n private establecerAbierto(valor: boolean): void {\n if (this.abierto === valor) return;\n this.abierto = valor;\n this.abiertoChange.emit(valor);\n }\n\n private badgeTonePorTono(tono?: TdMenuItem<T>['tono']): TdBadgeTone {\n const mapa: Record<NonNullable<TdMenuItem<T>['tono']>, TdBadgeTone> = {\n neutro: 'neutral',\n primario: 'primary',\n exito: 'success',\n advertencia: 'warning',\n peligro: 'danger',\n };\n\n return mapa[tono || 'neutro'];\n }\n}\n","<button\n #origen=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"td-menu__trigger\"\n [class.td-menu__trigger--icon-only]=\"!etiqueta\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"abierto\"\n aria-haspopup=\"menu\"\n (click)=\"alternar()\"\n>\n @if (icono) {\n <td-icon [nombre]=\"icono\" />\n }\n @if (etiqueta) {\n <span>{{ etiqueta }}</span>\n <td-icon nombre=\"chevron_down\" tamano=\".95rem\" />\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origen\"\n [cdkConnectedOverlayOpen]=\"abierto\"\n [cdkConnectedOverlayPositions]=\"posiciones()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPanelClass]=\"'td-menu__overlay'\"\n (overlayOutsideClick)=\"cerrar()\"\n (detach)=\"cerrar()\"\n>\n <div\n class=\"td-menu\"\n [class.td-menu--oscuro]=\"oscuro\"\n [style.width]=\"ancho\"\n role=\"menu\"\n >\n @for (item of itemsVisibles; track item.id) {\n @if (item.separadorAntes) {\n <span class=\"td-menu__separador\" aria-hidden=\"true\"></span>\n }\n <button\n type=\"button\"\n role=\"menuitem\"\n [class]=\"'td-menu__item td-menu__item--' + (item.tono || 'neutro')\"\n [disabled]=\"item.deshabilitado\"\n (click)=\"seleccionar(item)\"\n >\n @if (item.icono) {\n <span class=\"td-menu__icono\">\n <td-icon [nombre]=\"item.icono\" />\n </span>\n }\n <span class=\"td-menu__texto\">\n <strong>{{ item.etiqueta }}</strong>\n @if (item.descripcion) {\n <small>{{ item.descripcion }}</small>\n }\n </span>\n @if (badgeConfig(item); as badge) {\n <td-badge\n class=\"td-menu__badge\"\n [tone]=\"badge.tone || 'neutral'\"\n [variant]=\"badge.variant || 'soft'\"\n [size]=\"badge.size || 'sm'\"\n [icon]=\"badge.icono || ''\"\n [dot]=\"badge.dot || false\"\n [pill]=\"badge.pill ?? true\"\n [ariaLabel]=\"badge.ariaLabel || ''\"\n >\n {{ badge.etiqueta }}\n </td-badge>\n }\n </button>\n } @empty {\n <div class=\"td-menu__vacio\">\n <td-icon nombre=\"inbox\" />\n <span>Sin opciones disponibles</span>\n </div>\n }\n </div>\n</ng-template>\n","import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TdIcon } from '../iconos';\nimport { TdMenu, TdMenuItem, TdMenuSeleccion } from '../menu';\nimport {\n TdDataTableAccion,\n TdDataTableAccionesPresentacion,\n TdDataTableAccionEvento,\n TdDataTableBoton,\n TdDataTableColumna,\n TdDataTableImagenEvento,\n TdDataTableTono,\n} from './td-data-table.model';\n\ninterface TdDataTableImagenActiva {\n src: string;\n alt: string;\n}\n\n@Component({\n selector: 'td-data-table',\n imports: [FormsModule, NgTemplateOutlet, ScrollingModule, TdIcon, TdMenu],\n templateUrl: './td-data-table.html',\n styleUrl: './td-data-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTable<T extends object> implements OnChanges, OnDestroy {\n @ViewChild(CdkVirtualScrollViewport)\n private viewport?: CdkVirtualScrollViewport;\n @ViewChild('imagenDialog')\n private imagenDialog?: ElementRef<HTMLDialogElement>;\n\n @Input() datos: T[] = [];\n @Input() columnas: TdDataTableColumna<T>[] = [];\n @Input() acciones: TdDataTableAccion<T>[] = [];\n @Input() accionesPresentacion: TdDataTableAccionesPresentacion = 'inline';\n @Input() botones: TdDataTableBoton[] = [];\n @Input() total = 0;\n @Input() cargando = false;\n @Input() puedeCargarMas = false;\n @Input() virtualizar = true;\n @Input() virtualizarDesde = 100;\n @Input() itemSize = 65;\n @Input() filasAntesDeCargar = 2;\n @Input() altura = 'min(620px, calc(100dvh - 18rem))';\n @Input() campoId: keyof T & string = 'id' as keyof T & string;\n @Input() oscuro = false;\n @Input() mostrarBusqueda = true;\n @Input() placeholderBusqueda = 'Buscar...';\n @Input() textoVacio = 'No hay registros disponibles';\n @Input() descripcionVacio = 'Prueba cambiando los filtros o vuelve más tarde.';\n @Input() debounceBusqueda = 250;\n\n @Output() readonly busquedaChange = new EventEmitter<string>();\n @Output() readonly accion = new EventEmitter<TdDataTableAccionEvento<T>>();\n @Output() readonly imagenClick = new EventEmitter<TdDataTableImagenEvento<T>>();\n @Output() readonly botonClick = new EventEmitter<TdDataTableBoton>();\n @Output() readonly cargarMas = new EventEmitter<void>();\n\n protected busqueda = '';\n protected imagenActiva: TdDataTableImagenActiva | null = null;\n private timeoutBusqueda: ReturnType<typeof setTimeout> | null = null;\n private datosAnteriores: T[] = [];\n private recalculoPendiente: ReturnType<typeof setTimeout> | null = null;\n private cargaIncrementalHabilitada = true;\n private scrollDeUsuarioPendiente = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['datos']) {\n const datosPrevios = (changes['datos'].previousValue as T[] | undefined) ?? this.datosAnteriores;\n const debeVolverAlInicio = this.debeVolverAlInicio(datosPrevios, this.datos);\n\n this.datosAnteriores = this.datos;\n this.scrollDeUsuarioPendiente = false;\n this.programarRecalculoViewport(debeVolverAlInicio);\n }\n\n if (changes['itemSize'] || changes['altura'] || changes['columnas'] || changes['acciones']) {\n this.programarRecalculoViewport(false);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n if (this.recalculoPendiente) clearTimeout(this.recalculoPendiente);\n }\n\n protected columnasGrid(): string {\n const columnas = this.columnas.map((columna) => columna.ancho ?? 'minmax(10rem, 1fr)');\n if (this.acciones.length) {\n columnas.push(this.accionesPresentacion === 'menu' ? 'minmax(5rem, auto)' : 'minmax(9rem, auto)');\n }\n return columnas.join(' ');\n }\n\n protected buscar(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.timeoutBusqueda = setTimeout(\n () => this.busquedaChange.emit(this.busqueda.trim()),\n this.debounceBusqueda\n );\n }\n\n protected limpiarBusqueda(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.busqueda = '';\n this.busquedaChange.emit('');\n }\n\n protected valor(fila: T, clave: keyof T & string): unknown {\n return (fila as Record<string, unknown>)[clave];\n }\n\n protected textoCelda(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n if (columna.formatear) return columna.formatear(valor, fila, indice);\n if (valor === null || valor === undefined || valor === '') return '—';\n if (columna.tipo === 'booleano') return valor ? 'Sí' : 'No';\n if (columna.tipo === 'estado') return valor ? 'Activo' : 'Inactivo';\n if (columna.tipo === 'fecha' || columna.tipo === 'fechaHora' || columna.tipo === 'hora') {\n return this.formatearFecha(valor, columna);\n }\n if (\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n ) {\n return this.formatearNumero(valor, columna);\n }\n return String(valor);\n }\n\n protected imagenSrc(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n const src = columna.imagen?.src?.(valor, fila, indice) ?? valor;\n return typeof src === 'string' ? src.trim() : '';\n }\n\n protected imagenAlt(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n return columna.imagen?.alt?.(valor, fila, indice) || this.textoCelda(columna, fila, indice);\n }\n\n protected imagenForma(columna: TdDataTableColumna<T>): string {\n return columna.imagen?.forma ?? 'redondeada';\n }\n\n protected tonoCelda(columna: TdDataTableColumna<T>, fila: T): TdDataTableTono {\n const valor = this.valor(fila, columna.clave);\n if (columna.tono) return columna.tono(valor, fila);\n if (columna.tipo === 'estado') return valor ? 'exito' : 'peligro';\n if (columna.tipo === 'booleano') return valor ? 'exito' : 'neutro';\n return 'neutro';\n }\n\n protected accionesVisibles(fila: T): TdDataTableAccion<T>[] {\n return this.acciones.filter((accion) => {\n if (accion.condicion && !accion.condicion(fila)) return false;\n return accion.visible?.(fila) ?? true;\n });\n }\n\n protected iconoAccion(accion: TdDataTableAccion<T>, fila: T): string {\n return typeof accion.icono === 'function' ? accion.icono(fila) : accion.icono;\n }\n\n protected tonoAccion(accion: TdDataTableAccion<T>, fila: T): TdDataTableTono {\n if (typeof accion.tono === 'function') return accion.tono(fila);\n return accion.tono ?? 'neutro';\n }\n\n protected usarMenuAcciones(fila: T): boolean {\n if (this.accionesPresentacion === 'menu') return true;\n if (this.accionesPresentacion === 'inline') return false;\n return this.accionesVisibles(fila).length > 3;\n }\n\n protected accionesMenu(fila: T): TdMenuItem<TdDataTableAccion<T>>[] {\n return this.accionesVisibles(fila).map((accion) => ({\n id: accion.id,\n etiqueta: accion.etiqueta,\n icono: this.iconoAccion(accion, fila),\n tono: this.tonoAccion(accion, fila),\n deshabilitado: accion.deshabilitada?.(fila) ?? false,\n data: accion,\n }));\n }\n\n protected botonesVisibles(): TdDataTableBoton[] {\n return this.botones.filter((boton) => boton.visible ?? true);\n }\n\n protected usaVirtualizacion(): boolean {\n return this.virtualizar && this.datos.length >= this.virtualizarDesde;\n }\n\n protected ejecutarAccion(\n accion: TdDataTableAccion<T>,\n fila: T,\n indice: number\n ): void {\n if (accion.deshabilitada?.(fila)) return;\n this.accion.emit({ accion, fila, indice });\n }\n\n protected ejecutarAccionMenu(\n evento: TdMenuSeleccion<TdDataTableAccion<T>>,\n fila: T,\n indice: number\n ): void {\n if (!evento.data) return;\n this.ejecutarAccion(evento.data, fila, indice);\n }\n\n protected abrirImagen(columna: TdDataTableColumna<T>, fila: T, indice: number): void {\n const src = this.imagenSrc(columna, fila, indice);\n if (!src || columna.imagen?.clickeable === false) return;\n const alt = this.imagenAlt(columna, fila, indice);\n this.imagenActiva = { src, alt };\n setTimeout(() => {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n });\n this.imagenClick.emit({\n columna,\n fila,\n indice,\n src,\n alt,\n });\n }\n\n protected cerrarImagen(): void {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.imagenActiva = null;\n }\n\n protected cerrarImagenSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrarImagen();\n }\n }\n\n protected marcarScrollUsuario(): void {\n this.scrollDeUsuarioPendiente = true;\n }\n\n protected alDesplazarViewport(): void {\n if (!this.viewport) return;\n\n const distanciaAlFinal = this.viewport.measureScrollOffset('bottom');\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected alDesplazarLista(event: Event): void {\n const elemento = event.currentTarget as HTMLElement | null;\n if (!elemento) return;\n\n const distanciaAlFinal = elemento.scrollHeight - elemento.scrollTop - elemento.clientHeight;\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected readonly trackFila = (_indice: number, fila: T): unknown =>\n (fila as Record<string, unknown>)[this.campoId] ?? fila;\n\n private programarRecalculoViewport(volverAlInicio: boolean): void {\n if (this.recalculoPendiente) {\n clearTimeout(this.recalculoPendiente);\n }\n\n this.recalculoPendiente = setTimeout(() => {\n this.recalculoPendiente = null;\n if (!this.viewport) return;\n\n if (volverAlInicio) {\n this.viewport.scrollToIndex(0, 'auto');\n }\n\n this.viewport.checkViewportSize();\n });\n }\n\n private debeVolverAlInicio(datosPrevios: T[], datosActuales: T[]): boolean {\n if (!datosPrevios.length || !datosActuales.length) {\n return false;\n }\n\n if (datosActuales.length < datosPrevios.length) {\n return true;\n }\n\n return !datosPrevios.every((filaPrevia, indice) =>\n this.claveFila(filaPrevia) === this.claveFila(datosActuales[indice])\n );\n }\n\n private claveFila(fila: T): unknown {\n return (fila as Record<string, unknown>)[this.campoId] ?? fila;\n }\n\n private intentarCargarMas(distanciaAlFinal: number): void {\n const umbralPx = this.itemSize * Math.max(0, this.filasAntesDeCargar);\n const zonaSeguraPx = umbralPx + this.itemSize;\n\n if (distanciaAlFinal > zonaSeguraPx) {\n this.cargaIncrementalHabilitada = true;\n return;\n }\n\n if (\n distanciaAlFinal <= umbralPx &&\n this.datos.length > 0 &&\n this.puedeCargarMas &&\n !this.cargando &&\n this.cargaIncrementalHabilitada &&\n this.scrollDeUsuarioPendiente\n ) {\n this.cargaIncrementalHabilitada = false;\n this.scrollDeUsuarioPendiente = false;\n this.cargarMas.emit();\n }\n }\n\n private formatearFecha(valor: unknown, columna: TdDataTableColumna<T>): string {\n const fecha = this.normalizarFecha(valor);\n if (!fecha) return '—';\n\n const opcionesPorTipo: Record<string, Intl.DateTimeFormatOptions> = {\n fecha: { day: '2-digit', month: '2-digit', year: 'numeric' },\n fechaHora: {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n },\n hora: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(\n columna.locale ?? 'es-PE',\n columna.formatoFecha ?? opcionesPorTipo[columna.tipo ?? 'fecha']\n ).format(fecha);\n } catch {\n return String(valor);\n }\n }\n\n private normalizarFecha(valor: unknown): Date | null {\n if (valor instanceof Date) return Number.isNaN(valor.getTime()) ? null : valor;\n if (typeof valor === 'number' || typeof valor === 'string') {\n const fecha = new Date(valor);\n return Number.isNaN(fecha.getTime()) ? null : fecha;\n }\n return null;\n }\n\n private formatearNumero(valor: unknown, columna: TdDataTableColumna<T>): string {\n const numero = typeof valor === 'number' ? valor : Number(valor);\n if (!Number.isFinite(numero)) return String(valor);\n\n const opciones: Intl.NumberFormatOptions = {\n ...(columna.formatoNumero ?? {}),\n };\n\n if (columna.tipo === 'decimal') {\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'moneda') {\n opciones.style = 'currency';\n opciones.currency = columna.moneda ?? 'PEN';\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'porcentaje') {\n opciones.style = 'percent';\n opciones.minimumFractionDigits ??= columna.decimales ?? 0;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n try {\n return new Intl.NumberFormat(columna.locale ?? 'es-PE', opciones).format(numero);\n } catch {\n return String(valor);\n }\n }\n}\n","<section class=\"td-tabla\" [class.td-tabla--oscura]=\"oscuro\">\n <div class=\"td-tabla__toolbar\">\n <div class=\"td-tabla__filtros\">\n @if (mostrarBusqueda) {\n <label class=\"td-tabla__busqueda\">\n <td-icon nombre=\"search\" />\n <input\n type=\"search\"\n [(ngModel)]=\"busqueda\"\n [placeholder]=\"placeholderBusqueda\"\n (input)=\"buscar()\"\n />\n @if (busqueda) {\n <button type=\"button\" title=\"Limpiar búsqueda\" (click)=\"limpiarBusqueda()\">\n <td-icon nombre=\"close\" tamano=\"1rem\" />\n </button>\n }\n </label>\n }\n <ng-content select=\"[tdDataTableFilters]\" />\n </div>\n </div>\n\n <div class=\"td-tabla__superficie\">\n <div class=\"td-tabla__resumen\">\n <span><strong>{{ datos.length }}</strong> de {{ total || datos.length }} registros</span>\n <div class=\"td-tabla__resumen-acciones\">\n <ng-content select=\"[tdDataTableActions]\" />\n @for (boton of botonesVisibles(); track boton.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__boton td-tabla__boton--' + (boton.tono || 'neutro')\"\n [disabled]=\"boton.deshabilitado\"\n (click)=\"botonClick.emit(boton)\"\n >\n <td-icon [nombre]=\"boton.icono\" />\n <span>{{ boton.etiqueta }}</span>\n </button>\n }\n </div>\n </div>\n\n @if (datos.length) {\n <div class=\"td-tabla__scroll-x\">\n <div class=\"td-tabla__contenido\" [style.--td-tabla-columnas]=\"columnasGrid()\">\n <div class=\"td-tabla__encabezado\" role=\"row\">\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"columnheader\"\n [class]=\"'td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n {{ columna.encabezado }}\n </div>\n }\n @if (acciones.length) {\n <div role=\"columnheader\" class=\"td-tabla__alinear--centro\">Acciones</div>\n }\n </div>\n\n @if (usaVirtualizacion()) {\n <cdk-virtual-scroll-viewport\n class=\"td-tabla__viewport\"\n [itemSize]=\"itemSize\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarViewport()\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n <ng-container\n *cdkVirtualFor=\"let fila of datos; let indice = index; trackBy: trackFila\"\n >\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"td-tabla__viewport td-tabla__viewport--normal\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarLista($event)\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n @for (fila of datos; track trackFila($index, fila); let indice = $index) {\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n }\n </div>\n }\n </div>\n </div>\n\n <ng-template #filaTemplate let-fila let-indice=\"indice\">\n <div\n class=\"td-tabla__fila\"\n role=\"row\"\n [style.height.px]=\"itemSize\"\n >\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"cell\"\n [class]=\"'td-tabla__celda td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n @if (columna.tipo === 'imagen') {\n @if (imagenSrc(columna, fila, indice); as src) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__imagen td-tabla__imagen--' + imagenForma(columna)\"\n [title]=\"imagenAlt(columna, fila, indice)\"\n (click)=\"abrirImagen(columna, fila, indice)\"\n >\n <img [src]=\"src\" [alt]=\"imagenAlt(columna, fila, indice)\" loading=\"lazy\" />\n </button>\n } @else {\n <span\n [class]=\"'td-tabla__imagen td-tabla__imagen--placeholder td-tabla__imagen--' + imagenForma(columna)\"\n >\n <td-icon [nombre]=\"columna.imagen?.placeholder || 'image'\" />\n </span>\n }\n } @else if (\n columna.tipo === 'estado' ||\n columna.tipo === 'booleano' ||\n columna.tipo === 'chip'\n ) {\n <span [class]=\"'td-tabla__chip td-tabla__chip--' + tonoCelda(columna, fila)\">\n {{ textoCelda(columna, fila, indice) }}\n </span>\n } @else {\n <span\n [class.td-tabla__numero]=\"\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n \"\n >\n {{ textoCelda(columna, fila, indice) }}\n </span>\n }\n </div>\n }\n\n @if (acciones.length) {\n <div class=\"td-tabla__acciones-fila\" role=\"cell\">\n @if (usarMenuAcciones(fila)) {\n <td-menu\n ariaLabel=\"Acciones de fila\"\n icono=\"more_vertical\"\n ancho=\"15rem\"\n [oscuro]=\"oscuro\"\n [items]=\"accionesMenu(fila)\"\n (seleccion)=\"ejecutarAccionMenu($event, fila, indice)\"\n />\n } @else {\n @for (accionFila of accionesVisibles(fila); track accionFila.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__accion td-tabla__accion--' + tonoAccion(accionFila, fila)\"\n [title]=\"accionFila.etiqueta\"\n [disabled]=\"accionFila.deshabilitada?.(fila) ?? false\"\n (click)=\"ejecutarAccion(accionFila, fila, indice)\"\n >\n <td-icon [nombre]=\"iconoAccion(accionFila, fila)\" />\n <span class=\"td-tabla__sr-only\">{{ accionFila.etiqueta }}</span>\n </button>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n @if (cargando) {\n <div class=\"td-tabla__cargando\" role=\"status\" aria-live=\"polite\">\n <i aria-hidden=\"true\"></i>\n <span>Cargando más registros...</span>\n </div>\n }\n } @else if (!cargando) {\n <div class=\"td-tabla__vacio\">\n <span><td-icon nombre=\"inbox\" tamano=\"2.4rem\" /></span>\n <h3>{{ textoVacio }}</h3>\n <p>{{ descripcionVacio }}</p>\n </div>\n }\n\n @if (cargando && !datos.length) {\n <div class=\"td-tabla__skeleton\">\n @for (item of [1, 2, 3, 4, 5]; track item) {\n <span></span>\n }\n </div>\n }\n </div>\n</section>\n\n@if (imagenActiva; as imagen) {\n <dialog\n #imagenDialog\n class=\"td-tabla-imagen\"\n [attr.aria-label]=\"imagen.alt\"\n (click)=\"cerrarImagenSiBackdrop($event)\"\n (cancel)=\"cerrarImagen()\"\n (close)=\"imagenActiva = null\"\n >\n <section class=\"td-tabla-imagen__panel\">\n <header>\n <span>{{ imagen.alt }}</span>\n <button type=\"button\" aria-label=\"Cerrar\" (click)=\"cerrarImagen()\">\n <td-icon nombre=\"close\" />\n </button>\n </header>\n <div>\n <img [src]=\"imagen.src\" [alt]=\"imagen.alt\" />\n </div>\n </section>\n </dialog>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n input,\n Input,\n model,\n output,\n Output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { inject } from '@angular/core';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdDatePickerMode,\n TdDatePickerValue,\n TdDateRange,\n} from './td-date-picker.model';\n\ninterface CalendarDay {\n iso: string;\n day: number;\n currentMonth: boolean;\n today: boolean;\n disabled: boolean;\n}\n\ntype CalendarView = 'dias' | 'meses' | 'anios';\ntype TdDatePickerLimit = string | number | TdDateRange | null | undefined;\n\nlet datePickerSequence = 0;\n\n@Component({\n selector: 'td-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-date-picker\"\n [class.td-date-picker--open]=\"open\"\n [class.td-date-picker--error]=\"hasError()\"\n [class.td-date-picker--disabled]=\"isDisabled()\"\n [class.td-date-picker--dark]=\"dark\"\n >\n <label [id]=\"labelId\">{{ label }}</label>\n <button\n type=\"button\"\n class=\"td-date-picker__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"labelId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"calendarId\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <td-icon nombre=\"calendar\" />\n <span [class.td-date-picker__placeholder]=\"!displayValue\">\n {{ displayValue || placeholder }}\n </span>\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <span\n class=\"td-date-picker__clear\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Limpiar fecha\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".92rem\" />\n </span>\n }\n <td-icon\n class=\"td-date-picker__chevron\"\n [class.td-date-picker__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </button>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-date-picker__message\" [class.td-date-picker__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayMatchWidth]=\"false\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <section\n class=\"td-calendar\"\n [class.td-calendar--dark]=\"dark\"\n [id]=\"calendarId\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"mode === 'rango' ? 'Seleccionar rango de fechas' : 'Seleccionar fecha'\"\n >\n <header class=\"td-calendar__header\">\n <button type=\"button\" [attr.aria-label]=\"previousLabel\" (click)=\"previousPage()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button\n type=\"button\"\n class=\"td-calendar__period\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"changeCalendarView()\"\n >\n {{ periodLabel }}\n @if (calendarView !== 'anios') {\n <td-icon nombre=\"chevron_down\" tamano=\".85rem\" />\n }\n </button>\n <button type=\"button\" [attr.aria-label]=\"nextLabel\" (click)=\"nextPage()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </header>\n\n @if (mode === 'rango') {\n <div class=\"td-calendar__range-summary\">\n <span><small>Desde</small><strong>{{ rangeStartLabel }}</strong></span>\n <td-icon nombre=\"arrow_forward\" />\n <span><small>Hasta</small><strong>{{ rangeEndLabel }}</strong></span>\n </div>\n }\n\n @if (calendarView === 'dias') {\n <div class=\"td-calendar__weekdays\" aria-hidden=\"true\">\n @for (weekday of weekdays; track weekday) {\n <span>{{ weekday }}</span>\n }\n </div>\n\n <div class=\"td-calendar__grid\">\n @for (date of days; track date.iso) {\n <button\n type=\"button\"\n class=\"td-calendar__day\"\n [class.td-calendar__day--outside]=\"!date.currentMonth\"\n [class.td-calendar__day--today]=\"date.today\"\n [class.td-calendar__day--selected]=\"isSelected(date.iso)\"\n [class.td-calendar__day--range]=\"isInRange(date.iso)\"\n [class.td-calendar__day--range-start]=\"isRangeStart(date.iso)\"\n [class.td-calendar__day--range-end]=\"isRangeEnd(date.iso)\"\n [disabled]=\"date.disabled\"\n [attr.aria-label]=\"formatLong(date.iso)\"\n [attr.aria-pressed]=\"isSelected(date.iso)\"\n (mouseenter)=\"hoveredDate = date.iso\"\n (mouseleave)=\"hoveredDate = null\"\n (click)=\"selectDate(date)\"\n >\n {{ date.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'meses') {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--months\">\n @for (month of months; track month.index) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"month.index === viewDate.getMonth()\"\n [disabled]=\"month.disabled\"\n (click)=\"selectMonth(month.index)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--years\">\n @for (year of years; track year.value) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"year.value === viewDate.getFullYear()\"\n [class.td-calendar__selector--today]=\"year.value === currentYear\"\n [disabled]=\"year.disabled\"\n (click)=\"selectYear(year.value)\"\n >\n {{ year.value }}\n </button>\n }\n </div>\n }\n\n <footer class=\"td-calendar__footer\">\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"goToday()\">\n Hoy\n </button>\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"close()\">\n Cerrar\n </button>\n </footer>\n </section>\n </ng-template>\n `,\n styleUrl: './td-date-picker.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDatePicker),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDatePicker\n implements ControlValueAccessor, FormValueControl<TdDatePickerValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-date-picker-${++datePickerSequence}`;\n private readonly formatter = new Intl.DateTimeFormat('es-PE', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n private readonly monthFormatter = new Intl.DateTimeFormat('es-PE', {\n month: 'long',\n year: 'numeric',\n });\n private readonly longFormatter = new Intl.DateTimeFormat('es-PE', {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n\n @Input() label = 'Fecha';\n @Input() placeholder = 'Selecciona una fecha';\n @Input() mode: TdDatePickerMode = 'fecha';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input({ alias: 'min' }) minDate: TdDatePickerLimit = null;\n @Input({ alias: 'max' }) maxDate: TdDatePickerLimit = null;\n @Input() clearable = true;\n @Input() dark = false;\n\n readonly value = model<TdDatePickerValue>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n @Output() readonly selectionChange = new EventEmitter<TdDatePickerValue>();\n @Output() readonly openedChange = new EventEmitter<boolean>();\n\n protected open = false;\n protected hoveredDate: string | null = null;\n protected viewDate = this.startOfMonth(new Date());\n protected calendarView: CalendarView = 'dias';\n protected readonly currentYear = new Date().getFullYear();\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get calendarId(): string {\n return `${this.generatedId}-calendar`;\n }\n\n protected get weekdays(): string[] {\n return ['L', 'M', 'X', 'J', 'V', 'S', 'D'];\n }\n\n protected get monthLabel(): string {\n const label = this.monthFormatter.format(this.viewDate);\n return label.charAt(0).toUpperCase() + label.slice(1);\n }\n\n protected get periodLabel(): string {\n if (this.calendarView === 'dias') return this.monthLabel;\n if (this.calendarView === 'meses') return String(this.viewDate.getFullYear());\n return `${this.yearPageStart} – ${this.yearPageStart + 11}`;\n }\n\n protected get periodButtonLabel(): string {\n if (this.calendarView === 'dias') return 'Elegir mes y año';\n if (this.calendarView === 'meses') return 'Elegir año';\n return 'Periodo de años';\n }\n\n protected get previousLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes anterior'\n : this.calendarView === 'meses'\n ? 'Año anterior'\n : 'Años anteriores';\n }\n\n protected get nextLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes siguiente'\n : this.calendarView === 'meses'\n ? 'Año siguiente'\n : 'Años siguientes';\n }\n\n protected get months(): { index: number; label: string; disabled: boolean }[] {\n const formatter = new Intl.DateTimeFormat('es-PE', { month: 'short' });\n const year = this.viewDate.getFullYear();\n return Array.from({ length: 12 }, (_, index) => {\n const label = formatter.format(new Date(year, index, 1)).replace('.', '');\n return {\n index,\n label: label.charAt(0).toUpperCase() + label.slice(1),\n disabled: !this.monthIntersectsLimits(year, index),\n };\n });\n }\n\n protected get years(): { value: number; disabled: boolean }[] {\n return Array.from({ length: 12 }, (_, index) => {\n const value = this.yearPageStart + index;\n return { value, disabled: !this.yearIntersectsLimits(value) };\n });\n }\n\n private get yearPageStart(): number {\n return Math.floor(this.viewDate.getFullYear() / 12) * 12;\n }\n\n protected get days(): CalendarDay[] {\n const first = this.startOfMonth(this.viewDate);\n const mondayOffset = (first.getDay() + 6) % 7;\n const start = new Date(first.getFullYear(), first.getMonth(), 1 - mondayOffset);\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index);\n const iso = this.toIso(date);\n return {\n iso,\n day: date.getDate(),\n currentMonth: date.getMonth() === this.viewDate.getMonth(),\n today: iso === this.toIso(new Date()),\n disabled:\n (typeof this.minDate === 'string' && iso < this.minDate) ||\n (typeof this.maxDate === 'string' && iso > this.maxDate),\n };\n });\n }\n\n protected get displayValue(): string {\n const current = this.value();\n if (typeof current === 'string') return this.format(current);\n if (current && typeof current === 'object') {\n if (!this.isValidIsoDate(current.inicio)) return '';\n return this.isValidIsoDate(current.fin)\n ? `${this.format(current.inicio)} — ${this.format(current.fin)}`\n : this.format(current.inicio);\n }\n return '';\n }\n\n protected get rangeStartLabel(): string {\n const inicio = this.currentRange()?.inicio;\n return this.isValidIsoDate(inicio) ? this.format(inicio) : 'Sin elegir';\n }\n\n protected get rangeEndLabel(): string {\n const fin = this.currentRange()?.fin;\n return this.isValidIsoDate(fin) ? this.format(fin) : 'Sin elegir';\n }\n\n private changed: (value: TdDatePickerValue) => void = () => undefined;\n\n writeValue(value: TdDatePickerValue): void {\n this.value.set(this.normalizeValue(value));\n this.syncViewToValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdDatePickerValue) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(): void {\n document.getElementById(this.labelId)?.parentElement?.querySelector<HTMLButtonElement>('button')?.focus();\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.syncViewToValue();\n this.calendarView = 'dias';\n this.open = true;\n this.openedChange.emit(true);\n this.cdr.markForCheck();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.hoveredDate = null;\n this.formBridge.markTouched(this.touched, this.touch);\n this.openedChange.emit(false);\n this.cdr.markForCheck();\n }\n\n protected previousPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() - 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() - 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected nextPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() + 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() + 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected changeCalendarView(): void {\n if (this.calendarView === 'dias') {\n this.calendarView = 'meses';\n } else if (this.calendarView === 'meses') {\n this.calendarView = 'anios';\n }\n }\n\n protected selectMonth(month: number): void {\n this.viewDate = new Date(this.viewDate.getFullYear(), month, 1);\n this.calendarView = 'dias';\n }\n\n protected selectYear(year: number): void {\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.calendarView = 'meses';\n }\n\n protected goToday(): void {\n const today = this.toIso(new Date());\n if (\n (typeof this.minDate === 'string' && today < this.minDate) ||\n (typeof this.maxDate === 'string' && today > this.maxDate)\n ) return;\n this.viewDate = this.startOfMonth(new Date());\n this.calendarView = 'dias';\n this.selectDate(this.days.find((day) => day.iso === today) ?? {\n iso: today,\n day: new Date().getDate(),\n currentMonth: true,\n today: true,\n disabled: false,\n });\n }\n\n protected selectDate(date: CalendarDay): void {\n if (date.disabled) return;\n if (!date.currentMonth) {\n const parsed = this.fromIso(date.iso);\n this.viewDate = this.startOfMonth(parsed);\n }\n\n if (this.mode === 'fecha') {\n this.setValue(date.iso);\n this.close();\n return;\n }\n\n const range = this.currentRange();\n if (!range || range.fin) {\n this.setValue({ inicio: date.iso, fin: null });\n return;\n }\n\n this.setValue(\n date.iso < range.inicio\n ? { inicio: date.iso, fin: range.inicio }\n : { inicio: range.inicio, fin: date.iso }\n );\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected isSelected(iso: string): boolean {\n const current = this.value();\n if (typeof current === 'string') return current === iso;\n return !!current && (current.inicio === iso || current.fin === iso);\n }\n\n protected isRangeStart(iso: string): boolean {\n return this.currentRange()?.inicio === iso;\n }\n\n protected isRangeEnd(iso: string): boolean {\n return this.currentRange()?.fin === iso;\n }\n\n protected isInRange(iso: string): boolean {\n const range = this.currentRange();\n if (!range) return false;\n const end = range.fin ?? this.hoveredDate;\n if (!end) return false;\n const start = end < range.inicio ? end : range.inicio;\n const finish = end < range.inicio ? range.inicio : end;\n return iso > start && iso < finish;\n }\n\n protected formatLong(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.longFormatter.format(date) : iso;\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPanel();\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'PageUp') {\n event.preventDefault();\n this.previousPage();\n } else if (event.key === 'PageDown') {\n event.preventDefault();\n this.nextPage();\n }\n }\n\n private currentRange(): TdDateRange | null {\n const current = this.value();\n return current && typeof current === 'object' ? current : null;\n }\n\n private setValue(value: TdDatePickerValue): void {\n this.value.set(value);\n this.changed(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private syncViewToValue(): void {\n const current = this.value();\n const iso = typeof current === 'string' ? current : current?.inicio;\n if (this.isValidIsoDate(iso)) this.viewDate = this.startOfMonth(this.fromIso(iso));\n }\n\n private normalizeValue(value: TdDatePickerValue): TdDatePickerValue {\n if (!value) return null;\n if (typeof value === 'string') return this.isValidIsoDate(value) ? value : null;\n if (!this.isValidIsoDate(value.inicio)) return null;\n return {\n inicio: value.inicio,\n fin: this.isValidIsoDate(value.fin) ? value.fin : null,\n };\n }\n\n private format(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.formatter.format(date).replace('.', '') : '';\n }\n\n private fromIso(iso: string): Date {\n if (!this.isIsoDateText(iso)) return new Date(Number.NaN);\n const [year, month, day] = iso.split('-').map(Number);\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n )\n ? date\n : new Date(Number.NaN);\n }\n\n private isValidIsoDate(value: unknown): value is string {\n return typeof value === 'string' && this.isValidDate(this.fromIso(value));\n }\n\n private isIsoDateText(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n private isValidDate(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n }\n\n private toIso(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private monthIntersectsLimits(year: number, month: number): boolean {\n const first = this.toIso(new Date(year, month, 1));\n const last = this.toIso(new Date(year, month + 1, 0));\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n\n private yearIntersectsLimits(year: number): boolean {\n const first = `${year}-01-01`;\n const last = `${year}-12-31`;\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type TdDialogTamano = 'pequeno' | 'mediano' | 'grande' | 'pantalla';\n\nexport interface TdDialogConfig<D = unknown> {\n data?: D;\n titulo?: string;\n subtitulo?: string;\n icono?: string;\n tamano?: TdDialogTamano;\n ancho?: string;\n alto?: string;\n maxAncho?: string;\n maxAlto?: string;\n mostrarCerrar?: boolean;\n cerrarAlNavegar?: boolean;\n deshabilitarCierre?: boolean;\n autoFocus?: 'dialog' | 'first-tabbable' | 'first-heading' | string | boolean;\n restaurarFoco?: boolean;\n oscuro?: boolean;\n draggable?: boolean;\n panelClass?: string | string[];\n ariaLabel?: string;\n}\n\nexport interface TdDialogPanelData<D = unknown> {\n component: Type<unknown>;\n config: TdDialogConfig<D>;\n fullscreen: boolean;\n}\n\nexport const TD_DIALOG_DATA = new InjectionToken<unknown>('TD_DIALOG_DATA');\nexport const TD_DIALOG_CONFIG = new InjectionToken<TdDialogConfig>('TD_DIALOG_CONFIG');\n\nexport interface TdDialogRefLike<R = unknown> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n close(result?: R): void;\n updateSize(width?: string | number, height?: string | number): this;\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TdDialogRefLike } from './td-dialog.model';\n\nexport class TdDialogRef<R = unknown> implements TdDialogRefLike<R> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n this.id = ref.id;\n }\n\n close(result?: R): void {\n this.ref.close(result);\n }\n\n updateSize(width?: string | number, height?: string | number): this {\n this.ref.updateSize(width, height);\n return this;\n }\n}\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgComponentOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, ViewChild, inject } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Component({\n selector: 'td-dialog-panel',\n imports: [CdkDrag, CdkDragHandle, NgComponentOutlet, TdIcon],\n template: `\n <section\n class=\"td-dialog\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragBoundary=\".cdk-overlay-container\"\n [cdkDragDisabled]=\"!draggableEnabled\"\n [class.td-dialog--oscuro]=\"payload.config.oscuro\"\n [class.td-dialog--pantalla]=\"payload.fullscreen\"\n [class.td-dialog--draggable]=\"draggableEnabled\"\n [attr.aria-label]=\"payload.config.ariaLabel || payload.config.titulo || 'Diálogo'\"\n >\n @if (\n payload.config.titulo ||\n payload.config.subtitulo ||\n payload.config.icono ||\n payload.config.mostrarCerrar !== false\n ) {\n <header class=\"td-dialog__header\">\n <div class=\"td-dialog__drag-zone\" cdkDragHandle>\n @if (payload.config.icono) {\n <span class=\"td-dialog__icono\">\n <td-icon [nombre]=\"payload.config.icono\" tamano=\"1.25rem\" />\n </span>\n }\n <div class=\"td-dialog__titulos\">\n @if (payload.config.titulo) {\n <h2>{{ payload.config.titulo }}</h2>\n }\n @if (payload.config.subtitulo) {\n <p>{{ payload.config.subtitulo }}</p>\n }\n </div>\n </div>\n @if (payload.config.mostrarCerrar !== false) {\n <button\n type=\"button\"\n class=\"td-dialog__cerrar\"\n aria-label=\"Cerrar diálogo\"\n title=\"Cerrar\"\n (click)=\"dialogRef.close()\"\n >\n <td-icon nombre=\"close\" />\n </button>\n }\n </header>\n }\n\n <div #contentHost class=\"td-dialog__contenido\">\n <ng-container *ngComponentOutlet=\"payload.component\" />\n </div>\n </section>\n `,\n styleUrl: './td-dialog-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogPanel implements AfterViewInit {\n protected readonly payload = inject<TdDialogPanelData>(DIALOG_DATA);\n protected readonly dialogRef = inject(TdDialogRef);\n @ViewChild('contentHost', { read: ElementRef }) private contentHost?: ElementRef<HTMLElement>;\n\n ngAfterViewInit(): void {\n if (this.payload.config.autoFocus === false) {\n return;\n }\n\n queueMicrotask(() => this.focusFirstInteractiveElement());\n window.setTimeout(() => this.focusFirstInteractiveElement(), 40);\n }\n\n protected get draggableEnabled(): boolean {\n return !!this.payload.config.draggable && !this.payload.fullscreen && !this.isMobileLike();\n }\n\n private focusFirstInteractiveElement(): void {\n const host = this.contentHost?.nativeElement;\n if (!host) {\n return;\n }\n\n const target = host.querySelector<HTMLElement>(\n [\n '[data-td-autofocus]',\n '[cdkFocusInitial]',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n );\n\n target?.focus?.();\n }\n\n private isMobileLike(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px), (pointer: coarse)').matches;\n }\n}\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { Injectable, Type, inject } from '@angular/core';\nimport { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TdDialogConfig, TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogPanel } from './td-dialog-panel';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Injectable({ providedIn: 'root' })\nexport class TdDialog {\n private readonly dialog = inject(Dialog);\n\n open<C, D = unknown, R = unknown>(\n component: Type<C>,\n config: TdDialogConfig<D> = {}\n ): TdDialogRef<R> {\n const size = config.tamano ?? 'mediano';\n const mobile =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px)').matches;\n const fullscreen = size === 'pantalla' || (mobile && size !== 'pequeno');\n const width = fullscreen ? '100%' : config.ancho ?? this.widthFor(size);\n const maxWidth = fullscreen ? '100%' : config.maxAncho ?? 'calc(100vw - 2rem)';\n const maxHeight = fullscreen ? '100dvh' : config.maxAlto ?? 'calc(100dvh - 2rem)';\n let publicRef!: TdDialogRef<R>;\n\n const cdkRef = this.dialog.open<R, TdDialogPanelData<D>, TdDialogPanel>(\n TdDialogPanel,\n {\n data: { component, config, fullscreen },\n width,\n height: fullscreen ? '100dvh' : config.alto,\n maxWidth,\n maxHeight,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: this.panelClasses(config, fullscreen),\n disableClose: config.deshabilitarCierre ?? false,\n closeOnNavigation: config.cerrarAlNavegar ?? true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restaurarFoco ?? true,\n ariaLabel: config.ariaLabel ?? config.titulo,\n ariaModal: true,\n providers: (ref: DialogRef<R, TdDialogPanel>) => {\n publicRef = new TdDialogRef<R>(ref as DialogRef<R, unknown>);\n return [\n { provide: TD_DIALOG_DATA, useValue: config.data },\n { provide: TD_DIALOG_CONFIG, useValue: config },\n { provide: TdDialogRef, useValue: publicRef },\n ];\n },\n }\n );\n\n return publicRef ?? new TdDialogRef<R>(cdkRef as DialogRef<R, unknown>);\n }\n\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private widthFor(size: TdDialogConfig['tamano']): string {\n const widths = {\n pequeno: 'min(28rem, calc(100vw - 2rem))',\n mediano: 'min(40rem, calc(100vw - 2rem))',\n grande: 'min(64rem, calc(100vw - 2rem))',\n pantalla: '100%',\n };\n return widths[size ?? 'mediano'];\n }\n\n private panelClasses(config: TdDialogConfig, fullscreen: boolean): string[] {\n const extra = Array.isArray(config.panelClass)\n ? config.panelClass\n : config.panelClass\n ? [config.panelClass]\n : [];\n return [\n 'td-dialog-overlay',\n `td-dialog-overlay--${config.tamano ?? 'mediano'}`,\n ...(fullscreen ? ['td-dialog-overlay--fullscreen'] : []),\n ...extra,\n ];\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'td-dialog-actions',\n template: `<ng-content />`,\n styles: `\n :host {\n position: sticky;\n z-index: 3;\n bottom: -1.5rem;\n display: flex;\n min-height: 3.7rem;\n flex: 0 0 auto;\n align-items: center;\n justify-content: flex-end;\n gap: .5rem;\n margin: auto -1.5rem -1.5rem;\n margin-top: auto;\n border-top: 1px solid var(--td-dialog-border, #e6e9f0);\n padding: .65rem 1.25rem;\n background: var(--td-dialog-footer, #fafbfc);\n box-shadow: 0 -8px 22px rgba(15, 23, 42, .035);\n }\n\n :host ::ng-deep td-button {\n display: inline-block;\n min-width: 0;\n }\n\n :host ::ng-deep button {\n display: inline-flex;\n min-height: 2.25rem;\n align-items: center;\n justify-content: center;\n gap: .45rem;\n border: 1px solid var(--td-dialog-border, #dfe3eb);\n border-radius: .6rem;\n padding: .5rem .85rem;\n color: var(--td-dialog-text, #263147);\n background: var(--td-dialog-surface, #fff);\n font: 750 .75rem/1 system-ui, sans-serif;\n cursor: pointer;\n }\n\n :host ::ng-deep button:hover { border-color: #9b91e3; background: #f7f5ff; }\n :host ::ng-deep button[tdDialogPrimary] {\n border-color: transparent;\n color: #fff;\n background: linear-gradient(135deg, #5746d8, #7657df);\n box-shadow: 0 7px 16px rgba(87, 70, 216, .2);\n }\n :host ::ng-deep button:disabled { opacity: .5; cursor: not-allowed; }\n\n @media (max-width: 520px) {\n :host {\n bottom: -1.1rem;\n display: grid;\n grid-auto-flow: row;\n grid-auto-rows: minmax(2.45rem, auto);\n grid-template-columns: minmax(0, 1fr);\n min-height: auto;\n align-items: stretch;\n justify-content: stretch;\n margin-right: -1.1rem;\n margin-bottom: -1.1rem;\n margin-left: -1.1rem;\n padding: .75rem 1.1rem;\n gap: .55rem;\n }\n\n :host ::ng-deep td-button {\n display: block;\n width: 100%;\n }\n\n :host ::ng-deep td-button:last-of-type {\n order: -1;\n }\n\n :host ::ng-deep button,\n :host ::ng-deep td-button .td-button {\n width: 100%;\n min-height: 2.45rem;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogActions {}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Directive({\n selector: '[tdDialogClose]',\n})\nexport class TdDialogClose {\n private readonly dialogRef = inject(TdDialogRef);\n\n @Input('tdDialogClose') result: unknown;\n\n @HostListener('click')\n protected close(): void {\n this.dialogRef.close(this.result);\n }\n}\n\n@Directive({\n selector: '[tdDialogPrimary]',\n})\nexport class TdDialogPrimary {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'td-footer',\n templateUrl: './td-footer.html',\n styleUrl: './td-footer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFooter {\n @Input() empresa = 'TelcomDev';\n @Input() texto = 'Todos los derechos reservados.';\n @Input() version = '';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() anio = new Date().getFullYear();\n}\n","<footer\n class=\"td-footer\"\n [class.td-footer--oscuro]=\"oscuro\"\n [class.td-footer--compacto]=\"compacto\"\n>\n <div class=\"td-footer__identidad\">\n <span>© {{ anio }} {{ empresa }}</span>\n @if (texto) {\n <small>{{ texto }}</small>\n }\n </div>\n\n <nav class=\"td-footer__enlaces\" aria-label=\"Enlaces del pie de página\">\n <ng-content select=\"[tdFooterLinks]\" />\n </nav>\n\n <div class=\"td-footer__final\">\n <ng-content select=\"[tdFooterActions]\" />\n @if (version) {\n <span class=\"td-footer__version\">v{{ version }}</span>\n }\n </div>\n</footer>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdFileAttachment, TdFileSource, TdFileViewerArchivo, TdFileViewerKind } from './td-file-viewer.model';\n\ntype PdfJsModule = typeof import('pdfjs-dist');\ntype PdfDocumentProxy = {\n numPages: number;\n getPage(pageNumber: number): Promise<{\n getViewport(options: { scale: number }): { width: number; height: number };\n render(options: { canvasContext: CanvasRenderingContext2D; viewport: object }): PdfRenderTask;\n }>;\n destroy?(): Promise<void>;\n};\ntype PdfRenderTask = { promise: Promise<void>; cancel(): void };\n\n@Component({\n selector: 'td-file-viewer',\n imports: [TdIcon],\n templateUrl: './td-file-viewer.html',\n styleUrl: './td-file-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileViewer {\n private readonly cdr = inject(ChangeDetectorRef);\n @ViewChild('visorDialog') private visorDialog?: ElementRef<HTMLDialogElement>;\n @ViewChild('pdfCanvas') private pdfCanvas?: ElementRef<HTMLCanvasElement>;\n\n private archivosNormalizados: TdFileAttachment[] = [];\n\n @Input()\n set archivos(value: TdFileViewerArchivo[] | null | undefined) {\n this.archivosNormalizados = (value ?? []).map((archivo, indice) => this.normalizarArchivo(archivo, indice));\n }\n\n get archivos(): TdFileAttachment[] {\n return this.archivosNormalizados;\n }\n\n @Input() titulo = 'Archivos adjuntos';\n @Input() descripcion = 'Visualiza imagenes, PDF y descarga otros formatos.';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() showList = true;\n\n @Output() readonly seleccionar = new EventEmitter<TdFileAttachment>();\n @Output() readonly descargar = new EventEmitter<TdFileAttachment>();\n @Output() readonly closed = new EventEmitter<void>();\n\n protected seleccionado: TdFileAttachment | null = null;\n protected zoom = 1;\n protected rotacion = 0;\n protected pdfCargando = false;\n protected pdfError = '';\n protected pdfPaginaActual = 1;\n protected pdfTotalPaginas = 0;\n\n private pdfJs?: PdfJsModule;\n private pdfDocumento?: PdfDocumentProxy;\n private pdfRenderTask?: PdfRenderTask;\n private pdfRenderToken = 0;\n\n open(archivo: TdFileViewerArchivo): void {\n const normalizado = this.esAdjuntoNormalizado(archivo)\n ? archivo\n : this.normalizarArchivo(archivo, this.archivos.length);\n\n const existe = this.archivos.some((item) => item.id === normalizado.id);\n if (!existe) {\n this.archivosNormalizados = [normalizado, ...this.archivosNormalizados];\n }\n\n this.abrir(normalizado);\n }\n\n openByIndex(index: number): void {\n const archivo = this.archivos[index];\n if (!archivo) return;\n this.abrir(archivo);\n }\n\n close(): void {\n this.cerrar();\n }\n\n protected abrir(archivo: TdFileAttachment): void {\n this.limpiarPdf();\n this.seleccionado = archivo;\n this.zoom = 1;\n this.rotacion = 0;\n this.pdfPaginaActual = 1;\n setTimeout(() => {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n if (this.esPdf(archivo)) {\n void this.cargarPdf(archivo);\n }\n });\n this.seleccionar.emit(archivo);\n }\n\n protected cerrar(): void {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.seleccionado = null;\n this.zoom = 1;\n this.rotacion = 0;\n this.limpiarPdf();\n this.closed.emit();\n }\n\n protected cerrarSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrar();\n }\n }\n\n protected descargarArchivo(archivo: TdFileAttachment, event?: MouseEvent): void {\n event?.stopPropagation();\n this.descargar.emit(archivo);\n }\n\n protected tipoArchivo(archivo: TdFileAttachment): TdFileViewerKind {\n const tipo = `${archivo.tipo ?? ''} ${archivo.nombre} ${archivo.url}`.toLowerCase();\n if (tipo.includes('image/') || /\\.(png|jpe?g|gif|webp|svg)$/i.test(tipo)) return 'imagen';\n if (tipo.includes('pdf') || /\\.pdf(\\?|#|$)/i.test(tipo)) return 'pdf';\n if (tipo.includes('excel') || tipo.includes('spreadsheet') || /\\.(xls|xlsx|csv)(\\?|#|$)/i.test(tipo)) return 'excel';\n if (tipo.includes('xml') || /\\.xml(\\?|#|$)/i.test(tipo)) return 'xml';\n if (tipo.includes('zip') || /\\.(zip|rar|7z)(\\?|#|$)/i.test(tipo)) return 'zip';\n return 'archivo';\n }\n\n protected iconoArchivo(archivo: TdFileAttachment): string {\n const tipo = this.tipoArchivo(archivo);\n if (tipo === 'imagen') return 'image';\n if (tipo === 'archivo') return 'file';\n return tipo;\n }\n\n protected esImagen(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'imagen';\n }\n\n protected esPdf(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'pdf';\n }\n\n protected tieneVistaPrevia(archivo: TdFileAttachment): boolean {\n return this.esImagen(archivo) || this.esPdf(archivo);\n }\n\n protected indiceSeleccionado(): number {\n return this.seleccionado\n ? this.archivos.findIndex((archivo) => archivo.id === this.seleccionado?.id)\n : -1;\n }\n\n protected seleccionarAnterior(): void {\n const indice = this.indiceSeleccionado();\n if (indice <= 0) return;\n this.abrir(this.archivos[indice - 1]);\n }\n\n protected seleccionarSiguiente(): void {\n const indice = this.indiceSeleccionado();\n if (indice < 0 || indice >= this.archivos.length - 1) return;\n this.abrir(this.archivos[indice + 1]);\n }\n\n protected cambiarZoom(delta: number): void {\n this.zoom = Math.min(2.5, Math.max(0.5, Number((this.zoom + delta).toFixed(2))));\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected restablecerZoom(): void {\n this.zoom = 1;\n this.rotacion = 0;\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected rotar(): void {\n this.rotacion = (this.rotacion + 90) % 360;\n }\n\n protected paginaPdfAnterior(): void {\n if (this.pdfPaginaActual <= 1) return;\n this.pdfPaginaActual -= 1;\n void this.renderizarPaginaPdf();\n }\n\n protected paginaPdfSiguiente(): void {\n if (!this.pdfTotalPaginas || this.pdfPaginaActual >= this.pdfTotalPaginas) return;\n this.pdfPaginaActual += 1;\n void this.renderizarPaginaPdf();\n }\n\n protected tamanoLegible(archivo: TdFileAttachment): string {\n if (archivo.tamano === null || archivo.tamano === undefined || archivo.tamano === '') return '';\n if (typeof archivo.tamano === 'string') return archivo.tamano;\n\n const unidades = ['B', 'KB', 'MB', 'GB'];\n let valor = archivo.tamano;\n let indice = 0;\n while (valor >= 1024 && indice < unidades.length - 1) {\n valor /= 1024;\n indice += 1;\n }\n return `${valor.toFixed(indice ? 1 : 0)} ${unidades[indice]}`;\n }\n\n private async cargarPdf(archivo: TdFileAttachment): Promise<void> {\n const token = ++this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.pdfTotalPaginas = 0;\n this.cdr.markForCheck();\n\n try {\n const pdfjs = await this.obtenerPdfJs();\n const loadingTask = pdfjs.getDocument(this.obtenerFuentePdf(archivo));\n const documento = (await loadingTask.promise) as unknown as PdfDocumentProxy;\n if (token !== this.pdfRenderToken) {\n await documento.destroy?.();\n return;\n }\n\n this.pdfDocumento = documento;\n this.pdfTotalPaginas = documento.numPages;\n this.pdfPaginaActual = Math.min(Math.max(this.pdfPaginaActual, 1), documento.numPages || 1);\n this.pdfCargando = false;\n this.cdr.markForCheck();\n await this.renderizarPaginaPdf();\n } catch {\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo cargar la vista previa del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async renderizarPaginaPdf(): Promise<void> {\n if (!this.pdfDocumento || !this.pdfCanvas) return;\n\n const token = this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.cdr.markForCheck();\n\n try {\n this.pdfRenderTask?.cancel();\n const pagina = await this.pdfDocumento.getPage(this.pdfPaginaActual);\n if (token !== this.pdfRenderToken) return;\n\n const canvas = this.pdfCanvas.nativeElement;\n const contexto = canvas.getContext('2d');\n if (!contexto) throw new Error('Canvas context unavailable');\n\n const dpr = Math.max(window.devicePixelRatio || 1, 1);\n const viewport = pagina.getViewport({ scale: this.zoom });\n canvas.width = Math.floor(viewport.width * dpr);\n canvas.height = Math.floor(viewport.height * dpr);\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n contexto.setTransform(dpr, 0, 0, dpr, 0, 0);\n contexto.clearRect(0, 0, viewport.width, viewport.height);\n\n const renderTask = pagina.render({ canvasContext: contexto, viewport }) as PdfRenderTask;\n this.pdfRenderTask = renderTask;\n await renderTask.promise;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.cdr.markForCheck();\n } catch (error) {\n if ((error as { name?: string })?.name === 'RenderingCancelledException') return;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo renderizar esta pagina del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async obtenerPdfJs(): Promise<PdfJsModule> {\n if (this.pdfJs) return this.pdfJs;\n\n const pdfjs = await import('pdfjs-dist');\n pdfjs.GlobalWorkerOptions.workerSrc = new URL(\n 'pdfjs-dist/build/pdf.worker.min.mjs',\n import.meta.url\n ).toString();\n this.pdfJs = pdfjs;\n return pdfjs;\n }\n\n private limpiarPdf(): void {\n this.pdfRenderToken += 1;\n this.pdfRenderTask?.cancel();\n this.pdfRenderTask = undefined;\n void this.pdfDocumento?.destroy?.();\n this.pdfDocumento = undefined;\n this.pdfCargando = false;\n this.pdfError = '';\n this.pdfPaginaActual = 1;\n this.pdfTotalPaginas = 0;\n }\n\n private normalizarArchivo(archivo: TdFileViewerArchivo, indice: number): TdFileAttachment {\n if (this.esAdjuntoNormalizado(archivo)) {\n return archivo;\n }\n\n const contentType = archivo.type || archivo.contentType || this.inferirContentType(archivo.fileName, archivo.file);\n const url = this.normalizarFileUrl(archivo.file, contentType);\n\n return {\n id: archivo.id ?? `${archivo.fileName}-${indice}`,\n nombre: archivo.fileName,\n url,\n tipo: contentType,\n tamano: archivo.size,\n descripcion: archivo.description,\n thumbnailUrl: archivo.thumbnailUrl,\n descargable: archivo.downloadable,\n };\n }\n\n private esAdjuntoNormalizado(archivo: TdFileViewerArchivo): archivo is TdFileAttachment {\n return 'nombre' in archivo && 'url' in archivo;\n }\n\n private normalizarFileUrl(file: string, contentType: string): string {\n const value = file.trim();\n if (!value) return '';\n if (/^(https?:|blob:|data:)/i.test(value)) return value;\n return `data:${contentType};base64,${value}`;\n }\n\n private inferirContentType(fileName: string, file: string): string {\n const value = `${fileName} ${file.slice(0, 80)}`.toLowerCase();\n if (value.includes('data:')) {\n const match = file.match(/^data:([^;,]+)/i);\n if (match?.[1]) return match[1];\n }\n if (/\\.(png)$/i.test(fileName)) return 'image/png';\n if (/\\.(jpe?g)$/i.test(fileName)) return 'image/jpeg';\n if (/\\.(gif)$/i.test(fileName)) return 'image/gif';\n if (/\\.(webp)$/i.test(fileName)) return 'image/webp';\n if (/\\.(svg)$/i.test(fileName)) return 'image/svg+xml';\n if (/\\.(pdf)$/i.test(fileName)) return 'application/pdf';\n if (/\\.(xlsx)$/i.test(fileName)) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (/\\.(xls)$/i.test(fileName)) return 'application/vnd.ms-excel';\n if (/\\.(csv)$/i.test(fileName)) return 'text/csv';\n if (/\\.(xml)$/i.test(fileName)) return 'application/xml';\n if (/\\.(zip)$/i.test(fileName)) return 'application/zip';\n return 'application/octet-stream';\n }\n\n private obtenerFuentePdf(archivo: TdFileAttachment): { url: string } | { data: Uint8Array } {\n const dataUrl = archivo.url.match(/^data:application\\/pdf[^,]*,(.+)$/i);\n if (!dataUrl?.[1]) return { url: archivo.url };\n return { data: this.base64ABytes(dataUrl[1]) };\n }\n\n private base64ABytes(base64: string): Uint8Array {\n const limpio = decodeURIComponent(base64).replace(/\\s/g, '');\n const binario = atob(limpio);\n const bytes = new Uint8Array(binario.length);\n for (let i = 0; i < binario.length; i += 1) {\n bytes[i] = binario.charCodeAt(i);\n }\n return bytes;\n }\n}\n","@if (showList) {\n <section\n class=\"td-file-viewer\"\n [class.td-file-viewer--dark]=\"oscuro\"\n [class.td-file-viewer--compact]=\"compacto\"\n >\n <header class=\"td-file-viewer__header\">\n <div>\n <span>{{ archivos.length }} archivo{{ archivos.length === 1 ? '' : 's' }}</span>\n <h3>{{ titulo }}</h3>\n @if (descripcion) {\n <p>{{ descripcion }}</p>\n }\n </div>\n </header>\n\n @if (archivos.length) {\n <div class=\"td-file-viewer__grid\">\n @for (archivo of archivos; track archivo.id) {\n <button type=\"button\" class=\"td-file-viewer__item\" (click)=\"abrir(archivo)\">\n <span class=\"td-file-viewer__preview\" [class.td-file-viewer__preview--image]=\"tipoArchivo(archivo) === 'imagen'\">\n @if (tipoArchivo(archivo) === 'imagen') {\n <img [src]=\"archivo.thumbnailUrl || archivo.url\" [alt]=\"archivo.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"1.55rem\" />\n }\n </span>\n\n <span class=\"td-file-viewer__meta\">\n <strong>{{ archivo.nombre }}</strong>\n @if (archivo.descripcion) {\n <small>{{ archivo.descripcion }}</small>\n }\n <em>\n {{ tieneVistaPrevia(archivo) ? 'Vista previa disponible' : 'Descarga / apertura externa' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </em>\n </span>\n\n @if (archivo.descargable !== false) {\n <span\n role=\"button\"\n tabindex=\"-1\"\n class=\"td-file-viewer__download\"\n title=\"Descargar\"\n (click)=\"descargarArchivo(archivo, $event)\"\n >\n <td-icon nombre=\"download\" tamano=\"1rem\" />\n </span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"td-file-viewer__empty\">\n <td-icon nombre=\"file\" tamano=\"2rem\" />\n <strong>No hay adjuntos</strong>\n <span>Cuando existan archivos apareceran en esta zona.</span>\n </div>\n }\n </section>\n}\n\n@if (seleccionado; as archivo) {\n <dialog\n #visorDialog\n class=\"td-file-viewer-modal\"\n [class.td-file-viewer-modal--dark]=\"oscuro\"\n [attr.aria-label]=\"archivo.nombre\"\n (click)=\"cerrarSiBackdrop($event)\"\n (cancel)=\"cerrar()\"\n (close)=\"seleccionado = null\"\n >\n <section class=\"td-file-viewer-modal__panel\">\n <header class=\"td-file-viewer-modal__topbar\">\n <div class=\"td-file-viewer-modal__title\">\n <span class=\"td-file-viewer-modal__badge\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\".95rem\" />\n {{ tipoArchivo(archivo) }}\n </span>\n <h3>{{ archivo.nombre }}</h3>\n @if (archivo.descripcion || tamanoLegible(archivo)) {\n <p>\n {{ archivo.descripcion || 'Archivo adjunto' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </p>\n }\n </div>\n\n <nav class=\"td-file-viewer-modal__toolbar\" aria-label=\"Acciones del visor\">\n <button type=\"button\" title=\"Anterior\" [disabled]=\"indiceSeleccionado() <= 0\" (click)=\"seleccionarAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button type=\"button\" title=\"Siguiente\" [disabled]=\"indiceSeleccionado() >= archivos.length - 1\" (click)=\"seleccionarSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n\n @if (esImagen(archivo) || esPdf(archivo)) {\n <span class=\"td-file-viewer-modal__divider\"></span>\n <button type=\"button\" title=\"Alejar\" (click)=\"cambiarZoom(-0.1)\">\n <span aria-hidden=\"true\">-</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__zoom\" title=\"Restablecer zoom\" (click)=\"restablecerZoom()\">\n {{ (zoom * 100).toFixed(0) }}%\n </button>\n <button type=\"button\" title=\"Acercar\" (click)=\"cambiarZoom(0.1)\">\n <span aria-hidden=\"true\">+</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Ajustar\" (click)=\"restablecerZoom()\">\n Ajustar\n </button>\n @if (esImagen(archivo)) {\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Rotar\" (click)=\"rotar()\">\n Rotar\n </button>\n }\n }\n\n <span class=\"td-file-viewer-modal__divider\"></span>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\" title=\"Abrir en nueva pestana\">\n <td-icon nombre=\"visibility\" />\n </a>\n @if (archivo.descargable !== false) {\n <a [href]=\"archivo.url\" [download]=\"archivo.nombre\" target=\"_blank\" rel=\"noopener\" title=\"Descargar\">\n <td-icon nombre=\"download\" />\n </a>\n }\n <button type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\" (click)=\"cerrar()\">\n <td-icon nombre=\"close\" />\n </button>\n </nav>\n </header>\n\n <div class=\"td-file-viewer-modal__workspace\">\n <main class=\"td-file-viewer-modal__canvas\">\n @if (esImagen(archivo)) {\n <img\n class=\"td-file-viewer-modal__image\"\n [src]=\"archivo.url\"\n [alt]=\"archivo.nombre\"\n [style.transform]=\"'scale(' + zoom + ') rotate(' + rotacion + 'deg)'\"\n />\n } @else if (esPdf(archivo)) {\n <section class=\"td-file-viewer-modal__pdf-shell\">\n <div class=\"td-file-viewer-modal__pdf-head\">\n <span>\n <td-icon nombre=\"pdf\" />\n Vista PDF\n </span>\n <div class=\"td-file-viewer-modal__pdf-pages\">\n <button type=\"button\" title=\"Pagina anterior\" [disabled]=\"pdfPaginaActual <= 1 || pdfCargando\" (click)=\"paginaPdfAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <small>\n Pagina {{ pdfPaginaActual }} de {{ pdfTotalPaginas || '-' }}\n </small>\n <button type=\"button\" title=\"Pagina siguiente\" [disabled]=\"!pdfTotalPaginas || pdfPaginaActual >= pdfTotalPaginas || pdfCargando\" (click)=\"paginaPdfSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </div>\n </div>\n <div class=\"td-file-viewer-modal__pdf-canvas-wrap\">\n <canvas #pdfCanvas class=\"td-file-viewer-modal__pdf-canvas\"></canvas>\n\n @if (pdfCargando) {\n <div class=\"td-file-viewer-modal__pdf-state\">\n <span class=\"td-file-viewer-modal__spinner\"></span>\n <strong>Cargando PDF</strong>\n <small>Preparando pagina {{ pdfPaginaActual }}...</small>\n </div>\n }\n\n @if (pdfError) {\n <div class=\"td-file-viewer-modal__pdf-state td-file-viewer-modal__pdf-state--error\">\n <td-icon nombre=\"alert\" tamano=\"2rem\" />\n <strong>{{ pdfError }}</strong>\n <small>Prueba abrirlo en una nueva pestaña o descargarlo.</small>\n </div>\n }\n </div>\n </section>\n } @else {\n <div class=\"td-file-viewer-modal__fallback\">\n <span class=\"td-file-viewer-modal__fallback-icon\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"3rem\" />\n </span>\n <h4>Vista previa no disponible</h4>\n <p>Este tipo de archivo debe abrirse o descargarse con una aplicacion compatible.</p>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\">\n Abrir archivo\n </a>\n </div>\n }\n </main>\n\n @if (archivos.length > 1) {\n <footer class=\"td-file-viewer-modal__strip\">\n @for (item of archivos; track item.id) {\n <button\n type=\"button\"\n [class.td-file-viewer-modal__thumb--active]=\"item.id === archivo.id\"\n [title]=\"item.nombre\"\n (click)=\"abrir(item)\"\n >\n @if (tipoArchivo(item) === 'imagen') {\n <img [src]=\"item.thumbnailUrl || item.url\" [alt]=\"item.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(item)\" />\n }\n @if (!tieneVistaPrevia(item)) {\n <span class=\"td-file-viewer-modal__no-preview\">Sin preview</span>\n }\n </button>\n }\n </footer>\n }\n </div>\n </section>\n </dialog>\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, EnvironmentInjector, Injectable, inject } from '@angular/core';\nimport { take } from 'rxjs';\nimport { TdFileViewer } from './td-file-viewer';\nimport { TdFileViewerArchivo, TdFileViewerOpenOptions } from './td-file-viewer.model';\n\n@Injectable({ providedIn: 'root' })\nexport class TdFileViewerService {\n private readonly overlay = inject(Overlay);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private overlayRef?: OverlayRef;\n private componentRef?: ComponentRef<TdFileViewer>;\n\n open(\n archivo: TdFileViewerArchivo | TdFileViewerArchivo[],\n opciones: TdFileViewerOpenOptions = {}\n ): TdFileViewer {\n this.dispose();\n\n const archivos = Array.isArray(archivo) ? archivo : [archivo];\n const index = Math.min(Math.max(opciones.index ?? 0, 0), Math.max(archivos.length - 1, 0));\n\n this.overlayRef = this.overlay.create({\n disposeOnNavigation: true,\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n this.componentRef = this.overlayRef.attach(\n new ComponentPortal(TdFileViewer, null, this.environmentInjector)\n );\n\n this.componentRef.setInput('archivos', archivos);\n this.componentRef.setInput('showList', false);\n\n if (opciones.titulo !== undefined) this.componentRef.setInput('titulo', opciones.titulo);\n if (opciones.descripcion !== undefined) {\n this.componentRef.setInput('descripcion', opciones.descripcion);\n }\n if (opciones.oscuro !== undefined) this.componentRef.setInput('oscuro', opciones.oscuro);\n if (opciones.compacto !== undefined) this.componentRef.setInput('compacto', opciones.compacto);\n\n this.componentRef.instance.closed.pipe(take(1)).subscribe(() => this.dispose());\n\n queueMicrotask(() => this.componentRef?.instance.openByIndex(index));\n\n return this.componentRef.instance;\n }\n\n close(): void {\n this.componentRef?.instance.close();\n this.dispose();\n }\n\n private dispose(): void {\n this.componentRef?.destroy();\n this.componentRef = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TdFileViewerService } from '../file-viewer';\nimport { TdIcon } from '../iconos';\nimport {\n TdFileUploadItem,\n TdFileUploadRejected,\n TdFileUploadValue,\n TdFileUploadVariant,\n} from './td-file-upload.model';\n\nlet fileUploadSequence = 0;\n\n@Component({\n selector: 'td-file-upload',\n imports: [TdIcon],\n templateUrl: './td-file-upload.html',\n styleUrl: './td-file-upload.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdFileUpload),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileUpload implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly viewer = inject(TdFileViewerService);\n private readonly generatedId = `td-file-upload-${++fileUploadSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Seleccionar archivos';\n @Input() placeholder = 'Ningún archivo seleccionado';\n @Input() description = 'Arrastra tus archivos aquí o selecciónalos desde tu dispositivo.';\n @Input() hint = '';\n @Input() accept = '';\n @Input() multiple = false;\n @Input() maxFiles = 0;\n @Input() maxSizeMb = 0;\n @Input() variant: TdFileUploadVariant = 'dropzone';\n @Input() showPreview = true;\n @Input() clearable = true;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() error = '';\n @Input() dark = false;\n\n @Output() readonly valueChange = new EventEmitter<TdFileUploadValue>();\n @Output() readonly filesChange = new EventEmitter<File[]>();\n @Output() readonly rejected = new EventEmitter<TdFileUploadRejected[]>();\n @Output() readonly preview = new EventEmitter<TdFileUploadItem>();\n @Output() readonly removed = new EventEmitter<TdFileUploadItem>();\n\n protected items: TdFileUploadItem[] = [];\n protected dragging = false;\n protected touched = false;\n protected rejectedItems: TdFileUploadRejected[] = [];\n\n private onChange: (value: TdFileUploadValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get isDisabled(): boolean {\n return this.disabled;\n }\n\n protected get selectedText(): string {\n if (!this.items.length) return this.placeholder;\n if (this.items.length === 1) return this.items[0]?.name ?? this.placeholder;\n return `${this.items.length} archivos seleccionados`;\n }\n\n protected get acceptText(): string {\n return this.accept || 'Cualquier archivo';\n }\n\n protected get hasError(): boolean {\n return !!this.error || !!this.rejectedItems.length;\n }\n\n protected get message(): string {\n return this.error || this.rejectedItems[0]?.message || this.hint;\n }\n\n writeValue(value: TdFileUploadValue): void {\n this.revokePreviewUrls();\n const files = value ? (Array.isArray(value) ? value : [value]) : [];\n this.items = files.map((file) => this.createItem(file));\n this.rejectedItems = [];\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdFileUploadValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.cdr.markForCheck();\n }\n\n protected browse(): void {\n if (this.isDisabled || this.readonly) return;\n this.nativeInput?.nativeElement.click();\n }\n\n protected handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.addFiles(Array.from(input.files ?? []));\n input.value = '';\n }\n\n protected handleDragOver(event: DragEvent): void {\n if (this.isDisabled || this.readonly) return;\n event.preventDefault();\n this.dragging = true;\n }\n\n protected handleDragLeave(event: DragEvent): void {\n if (!this.isLeavingHost(event)) return;\n this.dragging = false;\n }\n\n protected handleDrop(event: DragEvent): void {\n if (this.isDisabled || this.readonly) return;\n event.preventDefault();\n this.dragging = false;\n this.addFiles(Array.from(event.dataTransfer?.files ?? []));\n }\n\n protected remove(item: TdFileUploadItem, event?: MouseEvent): void {\n event?.stopPropagation();\n if (this.isDisabled || this.readonly) return;\n\n this.items = this.items.filter((current) => current.id !== item.id);\n this.revokePreviewUrl(item);\n this.removed.emit(item);\n this.emitValue();\n }\n\n protected clear(event?: MouseEvent): void {\n event?.stopPropagation();\n if (this.isDisabled || this.readonly) return;\n\n this.revokePreviewUrls();\n this.items = [];\n this.rejectedItems = [];\n this.emitValue();\n }\n\n protected markTouched(): void {\n if (this.touched) return;\n this.touched = true;\n this.onTouched();\n }\n\n protected async openPreview(item: TdFileUploadItem, event?: MouseEvent): Promise<void> {\n event?.stopPropagation();\n this.preview.emit(item);\n\n if (item.previewKind === 'file') return;\n\n const file = await this.fileToDataUrl(item.file);\n this.viewer.open(\n {\n file,\n fileName: item.name,\n type: item.type,\n size: item.size,\n description: item.sizeLabel,\n },\n { titulo: item.name, descripcion: 'Vista previa del archivo seleccionado.' }\n );\n }\n\n protected iconFor(item: TdFileUploadItem): string {\n if (item.previewKind === 'image') return 'image';\n if (item.previewKind === 'pdf') return 'pdf';\n if (item.extension === 'xlsx' || item.extension === 'xls') return 'excel';\n if (item.extension === 'xml') return 'xml';\n if (item.extension === 'zip' || item.extension === 'rar' || item.extension === '7z') return 'zip';\n return 'file';\n }\n\n private addFiles(files: File[]): void {\n this.markTouched();\n if (!files.length) return;\n\n const accepted: File[] = [];\n const rejected: TdFileUploadRejected[] = [];\n const availableSlots = this.resolveAvailableSlots();\n\n for (const file of files) {\n if (availableSlots !== null && accepted.length >= availableSlots) {\n rejected.push({\n file,\n reason: 'maxFiles',\n message: `Solo puedes seleccionar ${this.maxFiles} archivo(s).`,\n });\n continue;\n }\n\n const typeError = this.validateType(file);\n if (typeError) {\n rejected.push(typeError);\n continue;\n }\n\n const sizeError = this.validateSize(file);\n if (sizeError) {\n rejected.push(sizeError);\n continue;\n }\n\n accepted.push(file);\n }\n\n this.rejectedItems = rejected;\n if (rejected.length) this.rejected.emit(rejected);\n\n if (accepted.length) {\n const nextItems = accepted.map((file) => this.createItem(file));\n if (this.multiple) {\n this.items = [...this.items, ...nextItems];\n } else {\n this.revokePreviewUrls();\n this.items = nextItems.slice(0, 1);\n }\n this.emitValue();\n }\n\n this.cdr.markForCheck();\n }\n\n private resolveAvailableSlots(): number | null {\n if (!this.multiple) return 1;\n if (this.maxFiles <= 0) return null;\n return Math.max(this.maxFiles - this.items.length, 0);\n }\n\n private validateType(file: File): TdFileUploadRejected | null {\n const rules = this.accept\n .split(',')\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n\n if (!rules.length) return null;\n\n const extension = this.extensionOf(file.name);\n const fileType = file.type.toLowerCase();\n const valid = rules.some((rule) => {\n if (rule.startsWith('.')) return rule.slice(1) === extension;\n if (rule.endsWith('/*')) return fileType.startsWith(rule.slice(0, -1));\n return fileType === rule;\n });\n\n return valid\n ? null\n : {\n file,\n reason: 'type',\n message: `El archivo \"${file.name}\" no tiene un formato permitido.`,\n };\n }\n\n private validateSize(file: File): TdFileUploadRejected | null {\n if (this.maxSizeMb <= 0) return null;\n const maxBytes = this.maxSizeMb * 1024 * 1024;\n return file.size <= maxBytes\n ? null\n : {\n file,\n reason: 'size',\n message: `El archivo \"${file.name}\" supera el máximo de ${this.maxSizeMb} MB.`,\n };\n }\n\n private emitValue(): void {\n const files = this.items.map((item) => item.file);\n const value: TdFileUploadValue = this.multiple ? files : files[0] ?? null;\n this.onChange(value);\n this.valueChange.emit(value);\n this.filesChange.emit(files);\n this.cdr.markForCheck();\n }\n\n private createItem(file: File): TdFileUploadItem {\n const extension = this.extensionOf(file.name);\n const previewKind = file.type.startsWith('image/')\n ? 'image'\n : file.type === 'application/pdf' || extension === 'pdf'\n ? 'pdf'\n : 'file';\n\n return {\n id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,\n file,\n name: file.name,\n size: file.size,\n sizeLabel: this.formatSize(file.size),\n type: file.type || this.typeFromExtension(extension),\n extension,\n previewKind,\n previewUrl: previewKind === 'image' ? URL.createObjectURL(file) : undefined,\n };\n }\n\n private extensionOf(name: string): string {\n return name.includes('.') ? name.split('.').pop()?.toLowerCase() || '' : '';\n }\n\n private typeFromExtension(extension: string): string {\n if (extension === 'pdf') return 'application/pdf';\n if (extension === 'xml') return 'application/xml';\n if (extension === 'xlsx') return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (extension === 'xls') return 'application/vnd.ms-excel';\n if (extension === 'zip') return 'application/zip';\n return 'application/octet-stream';\n }\n\n private formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(kb >= 100 ? 0 : 1)} KB`;\n const mb = kb / 1024;\n return `${mb.toFixed(mb >= 100 ? 0 : 1)} MB`;\n }\n\n private fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result ?? ''));\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n }\n\n private isLeavingHost(event: DragEvent): boolean {\n const currentTarget = event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return currentTarget instanceof Node && !currentTarget.contains(relatedTarget as Node | null);\n }\n\n private revokePreviewUrls(): void {\n this.items.forEach((item) => this.revokePreviewUrl(item));\n }\n\n private revokePreviewUrl(item: TdFileUploadItem): void {\n if (item.previewUrl) URL.revokeObjectURL(item.previewUrl);\n }\n}\n","<div\n class=\"td-file-upload\"\n [class.td-file-upload--input]=\"variant === 'input'\"\n [class.td-file-upload--dropzone]=\"variant === 'dropzone'\"\n [class.td-file-upload--dragging]=\"dragging\"\n [class.td-file-upload--disabled]=\"isDisabled\"\n [class.td-file-upload--readonly]=\"readonly\"\n [class.td-file-upload--error]=\"hasError\"\n [class.td-file-upload--dark]=\"dark\"\n (dragover)=\"handleDragOver($event)\"\n (dragleave)=\"handleDragLeave($event)\"\n (drop)=\"handleDrop($event)\"\n (click)=\"variant === 'dropzone' ? browse() : null\"\n (blur)=\"markTouched()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"isDisabled || readonly\"\n [attr.aria-describedby]=\"message ? inputId + '-message' : null\"\n>\n <input\n #nativeInput\n class=\"td-file-upload__native\"\n [id]=\"inputId\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"isDisabled\"\n [required]=\"required\"\n (change)=\"handleInput($event)\"\n (blur)=\"markTouched()\"\n />\n\n @if (variant === 'input') {\n <label class=\"td-file-upload__label\" [for]=\"inputId\">{{ label }}</label>\n <div class=\"td-file-upload__input-shell\">\n <div class=\"td-file-upload__input-text\">\n <td-icon nombre=\"upload\" />\n <span>{{ selectedText }}</span>\n </div>\n <button\n type=\"button\"\n class=\"td-file-upload__button\"\n [disabled]=\"isDisabled || readonly\"\n (click)=\"browse(); $event.stopPropagation()\"\n >\n Seleccionar\n </button>\n </div>\n } @else {\n <div class=\"td-file-upload__hero\">\n <span class=\"td-file-upload__icon\">\n <td-icon nombre=\"cloud\" />\n </span>\n <div>\n <strong>{{ label }}</strong>\n <p>{{ description }}</p>\n </div>\n <button\n type=\"button\"\n class=\"td-file-upload__button\"\n [disabled]=\"isDisabled || readonly\"\n (click)=\"browse(); $event.stopPropagation()\"\n >\n Buscar archivo\n </button>\n </div>\n <div class=\"td-file-upload__meta\">\n <span>Formatos: {{ acceptText }}</span>\n @if (maxSizeMb > 0) {\n <span>Máx. {{ maxSizeMb }} MB</span>\n }\n @if (multiple && maxFiles > 0) {\n <span>Hasta {{ maxFiles }} archivos</span>\n }\n </div>\n }\n</div>\n\n@if (message) {\n <p\n class=\"td-file-upload__message\"\n [class.td-file-upload__message--error]=\"hasError\"\n [id]=\"inputId + '-message'\"\n >\n {{ message }}\n </p>\n}\n\n@if (showPreview && items.length) {\n <div\n class=\"td-file-upload__list\"\n [class.td-file-upload__list--gallery]=\"variant === 'dropzone'\"\n [class.td-file-upload__list--compact]=\"variant === 'input'\"\n [class.td-file-upload__list--dark]=\"dark\"\n >\n @for (item of items; track item.id) {\n <article class=\"td-file-upload__item\">\n <button\n type=\"button\"\n class=\"td-file-upload__thumb\"\n [class.td-file-upload__thumb--clickable]=\"item.previewKind !== 'file'\"\n [title]=\"item.previewKind !== 'file' ? 'Previsualizar' : item.name\"\n (click)=\"openPreview(item, $event)\"\n >\n @if (item.previewKind === 'image' && item.previewUrl) {\n <img [src]=\"item.previewUrl\" [alt]=\"item.name\" />\n } @else {\n <td-icon [nombre]=\"iconFor(item)\" />\n }\n </button>\n\n <div class=\"td-file-upload__item-info\">\n <strong>{{ item.name }}</strong>\n <span>{{ item.sizeLabel }} · {{ item.type || item.extension || 'archivo' }}</span>\n </div>\n\n <div class=\"td-file-upload__actions\">\n @if (item.previewKind !== 'file') {\n <button type=\"button\" title=\"Previsualizar\" (click)=\"openPreview(item, $event)\">\n <td-icon nombre=\"visibility\" />\n </button>\n }\n @if (clearable) {\n <button type=\"button\" title=\"Quitar\" (click)=\"remove(item, $event)\">\n <td-icon nombre=\"close\" />\n </button>\n }\n </div>\n </article>\n }\n\n @if (clearable && items.length > 1) {\n <button type=\"button\" class=\"td-file-upload__clear-all\" (click)=\"clear($event)\">\n Limpiar todo\n </button>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n booleanAttribute,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport interface TdHeaderNotificacion {\n id: string | number;\n titulo: string;\n descripcion?: string;\n fecha?: string;\n icono?: string;\n leida?: boolean;\n}\n\nexport type TdHeaderAccionPerfil = 'perfil' | 'configuracion' | 'salir';\nexport type TdHeaderPerfilAccionTono = 'neutral' | 'primary' | 'danger';\n\nexport interface TdHeaderPerfilAccion {\n id: string;\n etiqueta: string;\n icono?: string;\n descripcion?: string;\n tono?: TdHeaderPerfilAccionTono;\n}\n\nconst TD_HEADER_ACCIONES_PERFIL: TdHeaderPerfilAccion[] = [\n { id: 'perfil', etiqueta: 'Mi perfil', icono: 'person' },\n { id: 'configuracion', etiqueta: 'Configuración', icono: 'settings' },\n { id: 'salir', etiqueta: 'Cerrar sesión', icono: 'close', tono: 'danger' },\n];\n\n@Component({\n selector: 'td-header',\n imports: [TdIcon],\n templateUrl: './td-header.html',\n styleUrl: './td-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdHeader {\n @Input() menuAbierto = true;\n @Input() mostrarMenu = true;\n @Input() usuario = '';\n @Input() cargo = '';\n @Input() avatarUrl = '';\n @Input() notificaciones: TdHeaderNotificacion[] = [];\n @Input() oscuro = false;\n @Input() fijo = true;\n @Input({ transform: booleanAttribute }) mostrarNotificaciones = true;\n @Input({ transform: booleanAttribute }) mostrarPerfil = true;\n @Input() perfilAcciones: TdHeaderPerfilAccion[] = TD_HEADER_ACCIONES_PERFIL;\n\n @Output() readonly menuToggle = new EventEmitter<void>();\n @Output() readonly notificacionSeleccionada = new EventEmitter<TdHeaderNotificacion>();\n @Output() readonly verTodasNotificaciones = new EventEmitter<void>();\n @Output() readonly accionPerfil = new EventEmitter<TdHeaderAccionPerfil>();\n @Output() readonly perfilAccionSeleccionada = new EventEmitter<TdHeaderPerfilAccion>();\n\n protected panelNotificacionesAbierto = false;\n protected panelPerfilAbierto = false;\n\n protected alternarMenu(): void {\n this.menuToggle.emit();\n }\n\n protected alternarNotificaciones(): void {\n this.panelNotificacionesAbierto = !this.panelNotificacionesAbierto;\n this.panelPerfilAbierto = false;\n }\n\n protected alternarPerfil(): void {\n this.panelPerfilAbierto = !this.panelPerfilAbierto;\n this.panelNotificacionesAbierto = false;\n }\n\n protected seleccionarNotificacion(notificacion: TdHeaderNotificacion): void {\n this.notificacionSeleccionada.emit(notificacion);\n this.panelNotificacionesAbierto = false;\n }\n\n protected emitirAccionPerfil(accion: TdHeaderPerfilAccion): void {\n this.perfilAccionSeleccionada.emit(accion);\n\n if (this.esAccionPerfilLegacy(accion.id)) {\n this.accionPerfil.emit(accion.id);\n }\n\n this.panelPerfilAbierto = false;\n }\n\n protected notificacionesNoLeidas(): number {\n return this.notificaciones.filter((item) => !item.leida).length;\n }\n\n protected inicialesUsuario(): string {\n const partes = this.usuario.trim().split(/\\s+/).filter(Boolean);\n return (\n partes\n .slice(0, 2)\n .map((parte) => parte.charAt(0))\n .join('') || 'U'\n ).toUpperCase();\n }\n\n protected accionesPerfilVisibles(): TdHeaderPerfilAccion[] {\n return this.perfilAcciones?.length ? this.perfilAcciones : TD_HEADER_ACCIONES_PERFIL;\n }\n\n private esAccionPerfilLegacy(id: string): id is TdHeaderAccionPerfil {\n return id === 'perfil' || id === 'configuracion' || id === 'salir';\n }\n\n @HostListener('document:keydown.escape')\n protected cerrarConEscape(): void {\n this.panelNotificacionesAbierto = false;\n this.panelPerfilAbierto = false;\n }\n}\n","<header\n class=\"td-header\"\n [class.td-header--oscuro]=\"oscuro\"\n [class.td-header--fijo]=\"fijo\"\n>\n <div class=\"td-header__inicio\">\n @if (mostrarMenu) {\n <button\n class=\"td-header__boton td-header__menu\"\n type=\"button\"\n [attr.aria-label]=\"menuAbierto ? 'Cerrar sidebar' : 'Abrir sidebar'\"\n [attr.aria-expanded]=\"menuAbierto\"\n (click)=\"alternarMenu()\"\n >\n <td-icon [nombre]=\"menuAbierto ? 'close' : 'menu'\" />\n </button>\n }\n\n <ng-content select=\"[tdHeaderStart]\" />\n </div>\n\n <div class=\"td-header__centro\">\n <ng-content select=\"[tdHeaderCenter]\" />\n </div>\n\n <div class=\"td-header__acciones\">\n <ng-content select=\"[tdHeaderActions]\" />\n\n @if (mostrarNotificaciones) {\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__boton td-header__notificaciones\"\n type=\"button\"\n aria-label=\"Notificaciones\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"panelNotificacionesAbierto\"\n (click)=\"alternarNotificaciones()\"\n >\n <td-icon nombre=\"notifications\" />\n @if (notificacionesNoLeidas() > 0) {\n <span>{{ notificacionesNoLeidas() > 99 ? '99+' : notificacionesNoLeidas() }}</span>\n }\n </button>\n\n @if (panelNotificacionesAbierto) {\n <section class=\"td-header__panel td-header__panel--notificaciones\">\n <header>\n <div>\n <strong>Notificaciones</strong>\n <small>{{ notificacionesNoLeidas() }} sin leer</small>\n </div>\n <td-icon nombre=\"notifications\" />\n </header>\n\n <div class=\"td-header__lista-notificaciones\">\n @for (notificacion of notificaciones; track notificacion.id) {\n <button\n type=\"button\"\n [class.td-header__notificacion--nueva]=\"!notificacion.leida\"\n (click)=\"seleccionarNotificacion(notificacion)\"\n >\n <span class=\"td-header__notificacion-icono\">\n <td-icon [nombre]=\"notificacion.icono || 'notifications'\" />\n </span>\n <span>\n <strong>{{ notificacion.titulo }}</strong>\n @if (notificacion.descripcion) {\n <small>{{ notificacion.descripcion }}</small>\n }\n @if (notificacion.fecha) {\n <time>{{ notificacion.fecha }}</time>\n }\n </span>\n </button>\n } @empty {\n <p class=\"td-header__vacio\">No tienes notificaciones.</p>\n }\n </div>\n\n @if (notificaciones.length) {\n <button\n class=\"td-header__ver-todas\"\n type=\"button\"\n (click)=\"verTodasNotificaciones.emit(); panelNotificacionesAbierto = false\"\n >\n Ver todas las notificaciones\n </button>\n }\n </section>\n }\n </div>\n }\n\n @if (mostrarPerfil && usuario) {\n <span class=\"td-header__separador\" aria-hidden=\"true\"></span>\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__perfil\"\n type=\"button\"\n aria-label=\"Abrir perfil de usuario\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"panelPerfilAbierto\"\n (click)=\"alternarPerfil()\"\n >\n <span class=\"td-header__avatar\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <span class=\"td-header__usuario\">\n <strong>{{ usuario }}</strong>\n @if (cargo) {\n <small>{{ cargo }}</small>\n }\n </span>\n <td-icon nombre=\"chevron_down\" tamano=\"0.85rem\" />\n </button>\n\n @if (panelPerfilAbierto) {\n <section class=\"td-header__panel td-header__panel--perfil\">\n <div class=\"td-header__perfil-resumen\">\n <span class=\"td-header__avatar td-header__avatar--grande\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <div>\n <strong>{{ usuario }}</strong>\n <small>{{ cargo || 'Usuario' }}</small>\n </div>\n </div>\n <div class=\"td-header__perfil-opciones\">\n @for (accion of accionesPerfilVisibles(); track accion.id) {\n <button\n type=\"button\"\n [class.td-header__salir]=\"accion.tono === 'danger'\"\n (click)=\"emitirAccionPerfil(accion)\"\n >\n @if (accion.icono) {\n <td-icon [nombre]=\"accion.icono\" />\n }\n <span>\n <strong>{{ accion.etiqueta }}</strong>\n @if (accion.descripcion) {\n <small>{{ accion.descripcion }}</small>\n }\n </span>\n </button>\n }\n </div>\n </section>\n }\n </div>\n }\n </div>\n</header>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet inputSequence = 0;\ndeclare const ngDevMode: boolean | undefined;\n\nexport type TdInputValue = string | number | null;\nexport type TdInputEmptyValue = 'auto' | 'null' | 'empty-string';\nexport type TdInputSanitizePreset =\n | 'none'\n | 'digits'\n | 'letters'\n | 'alphanumeric'\n | 'decimal'\n | 'uppercase'\n | 'lowercase'\n | 'trim';\nexport type TdInputSanitize = TdInputSanitizePreset | readonly TdInputSanitizePreset[];\nexport type TdInputMask =\n | 'none'\n | 'time'\n | 'time-seconds'\n | 'decimal'\n | `decimal(${number},${number})`\n | `decimal(${number}.${number})`;\nexport type TdInputSanitizeFn = (value: string) => string;\n\n@Component({\n selector: 'td-input',\n imports: [TdIcon],\n template: `\n <div\n class=\"td-input\"\n [class.td-input--focused]=\"focused()\"\n [class.td-input--error]=\"hasError()\"\n [class.td-input--disabled]=\"isDisabled()\"\n [class.td-input--dark]=\"dark\"\n [class.td-input--floating]=\"labelFloating()\"\n [class.td-input--with-icon]=\"!!icon\"\n [class.td-input--with-prefix]=\"!!prefix\"\n >\n <label [for]=\"inputId\">{{ label }}</label>\n\n <div class=\"td-input__control\">\n @if (icon) {\n <td-icon class=\"td-input__icon\" [nombre]=\"icon\" />\n }\n\n @if (prefix) {\n <span class=\"td-input__affix td-input__affix--prefix\">{{ prefix }}</span>\n }\n\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n [type]=\"resolvedType\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [min]=\"minValue()\"\n [max]=\"maxValue()\"\n [step]=\"step\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.pattern]=\"resolvedPattern()\"\n [attr.inputmode]=\"resolvedInputMode()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n />\n\n @if (suffix) {\n <span class=\"td-input__affix td-input__affix--suffix\">{{ suffix }}</span>\n }\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-input__action\" title=\"Limpiar\" (click)=\"clear()\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n\n @if (type === 'password') {\n <button\n type=\"button\"\n class=\"td-input__action\"\n [title]=\"passwordVisible ? 'Ocultar contraseña' : 'Mostrar contraseña'\"\n (click)=\"passwordVisible = !passwordVisible\"\n >\n <td-icon [nombre]=\"passwordVisible ? 'visibility_off' : 'visibility'\" />\n </button>\n }\n </div>\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-input__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-input__message\"\n [class.td-input__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-input__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-input__counter\"\n [class.td-input__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdInput),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdInput\n implements ControlValueAccessor, FormValueControl<TdInputValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-input-${++inputSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n private decimalMaskDigits = '';\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'date' | 'time' = 'text';\n @Input() placeholder = '';\n @Input() autocomplete = 'off';\n @Input() icon = '';\n @Input() prefix = '';\n @Input() suffix = '';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() clearable = false;\n @Input() dark = false;\n readonly showCounter = input(true);\n @Input() emptyValue: TdInputEmptyValue = 'auto';\n @Input() sanitize: TdInputSanitize = 'none';\n @Input() sanitizeValue: TdInputSanitizeFn | null = null;\n @Input() mask: TdInputMask = 'none';\n @Input() integerDigits: number | null = null;\n @Input() decimalDigits: number | null = null;\n readonly minValue = input<string | number | null | undefined>(undefined, {\n alias: 'min',\n });\n readonly maxValue = input<string | number | null | undefined>(undefined, {\n alias: 'max',\n });\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n readonly pattern = input<readonly RegExp[]>([]);\n @Input() step: string | number | null = null;\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdInputValue>('');\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && String(currentValue).length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue() || this.type === 'date' || this.type === 'time'\n );\n protected readonly resolvedPattern = computed(() => {\n const patterns = this.pattern();\n if (!patterns.length) return null;\n if (patterns.length === 1) return patterns[0].source;\n return patterns.map((item) => `(?=${item.source})`).join('') + '.*';\n });\n protected readonly resolvedInputMode = computed(() => {\n if (this.mask === 'time' || this.mask === 'time-seconds') return 'numeric';\n if (this.isDecimalMask()) return 'decimal';\n const presets = this.sanitizePresets();\n if (presets.includes('digits')) return 'numeric';\n if (presets.includes('decimal')) return 'decimal';\n return null;\n });\n protected readonly focused = signal(false);\n protected passwordVisible = false;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.inputId}-description` : null;\n }\n\n protected get resolvedType(): string {\n if (this.isDecimalMask()) return 'text';\n return this.type === 'password' && this.passwordVisible ? 'text' : this.type;\n }\n\n private onChange: (value: TdInputValue) => void = () => undefined;\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.decimalMaskDigits = '';\n this.value.set(null);\n } else if (\n this.type === 'number' &&\n this.formBridge.usesSignalForms &&\n typeof value === 'number'\n ) {\n this.decimalMaskDigits = this.isDecimalMask()\n ? this.decimalDigitsFromProgrammaticValue(String(value))\n : '';\n this.value.set(value);\n } else {\n const textValue = String(value);\n if (this.isDecimalMask()) {\n this.decimalMaskDigits = this.decimalDigitsFromProgrammaticValue(textValue);\n }\n this.value.set(this.transformTextValue(textValue));\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdInputValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n if (this.isDecimalMask()) {\n this.handleDecimalMaskInput(inputElement, event);\n return;\n }\n\n const transformedValue = this.transformTextValue(inputElement.value);\n if (inputElement.value !== transformedValue) {\n inputElement.value = transformedValue;\n }\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.completeMaskOnBlur();\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.decimalMaskDigits = '';\n this.setValue(this.resolveEmptyValue());\n }\n\n private parseInputValue(value: string, inputElement: HTMLInputElement): TdInputValue {\n if (!value) {\n return this.resolveEmptyValue();\n }\n\n if (this.isDecimalMask() || this.type !== 'number' || !this.formBridge.usesSignalForms) {\n return value;\n }\n\n const numericValue = inputElement.valueAsNumber;\n return Number.isNaN(numericValue) ? null : numericValue;\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n\n if (this.formBridge.usesSignalForms && this.type === 'number') return null;\n return this.receivedNullValue ? null : '';\n }\n\n private transformTextValue(value: string): string {\n if (!value) return value;\n const sanitized = this.applySanitize(value);\n return this.applyMask(sanitized);\n }\n\n private applySanitize(value: string): string {\n const customValue = this.sanitizeValue ? this.sanitizeValue(value) : value;\n return this.sanitizePresets().reduce(\n (current, preset) => this.applySanitizePreset(current, preset),\n customValue\n );\n }\n\n private sanitizePresets(): TdInputSanitizePreset[] {\n const sanitize = this.sanitize;\n return typeof sanitize === 'string' ? [sanitize] : [...sanitize];\n }\n\n private applySanitizePreset(value: string, preset: TdInputSanitizePreset): string {\n switch (preset) {\n case 'digits':\n return value.replace(/\\D/g, '');\n case 'letters':\n return value.replace(/[^\\p{L}\\s]/gu, '');\n case 'alphanumeric':\n return value.replace(/[^\\p{L}\\p{N}]/gu, '');\n case 'decimal':\n return this.sanitizeDecimal(value);\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'trim':\n return value.trim();\n default:\n return value;\n }\n }\n\n private sanitizeDecimal(value: string): string {\n const normalized = value.replace(',', '.').replace(/[^\\d.]/g, '');\n const [integerPart, ...decimalParts] = normalized.split('.');\n const integerValue = this.limitDigits(integerPart, this.integerDigits);\n if (!decimalParts.length) return integerValue;\n\n const decimalValue = this.limitDigits(decimalParts.join(''), this.decimalDigits);\n return decimalValue.length || normalized.endsWith('.')\n ? `${integerValue}.${decimalValue}`\n : integerValue;\n }\n\n private limitDigits(value: string, limit: number | null): string {\n if (limit === null || limit === undefined || limit < 0) return value;\n return value.slice(0, limit);\n }\n\n private applyMask(value: string): string {\n if (this.mask === 'time') return this.maskTime(value);\n if (this.mask === 'time-seconds') return this.maskTimeSeconds(value);\n if (this.isDecimalMask()) return this.maskDecimal(value);\n return value;\n }\n\n private maskDecimal(value: string): string {\n return this.formatDecimalMaskDigits(value.replace(/\\D/g, ''));\n }\n\n private handleDecimalMaskInput(inputElement: HTMLInputElement, event: Event): void {\n const inputEvent = event as InputEvent;\n const inputType = inputEvent.inputType || '';\n const dataDigits = (inputEvent.data ?? '').replace(/\\D/g, '');\n const maxDigits = this.maxDecimalMaskDigits();\n\n if (inputType.startsWith('delete')) {\n this.decimalMaskDigits = this.decimalMaskDigits.slice(0, -1);\n } else if (dataDigits) {\n this.decimalMaskDigits = this.limitDigits(this.decimalMaskDigits + dataDigits, maxDigits);\n } else {\n this.decimalMaskDigits = this.limitDigits(\n this.decimalDigitsFromEditedValue(inputElement.value),\n maxDigits\n );\n }\n\n const transformedValue = this.formatDecimalMaskDigits(this.decimalMaskDigits);\n inputElement.value = transformedValue;\n this.moveCaretToEnd(inputElement);\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n private formatDecimalMaskDigits(digitsValue: string): string {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n const digits = this.limitDigits(digitsValue.replace(/\\D/g, ''), this.maxDecimalMaskDigits());\n\n if (!digits) return '';\n if (scale === 0) return this.limitDigits(digits, integerLimit);\n\n const padded = digits.padStart(scale + 1, '0');\n const splitIndex = padded.length - scale;\n const integerPart = this.limitDigits(padded.slice(0, splitIndex), integerLimit);\n const decimalPart = padded.slice(splitIndex);\n\n return `${integerPart || '0'}.${decimalPart}`;\n }\n\n private maxDecimalMaskDigits(): number | null {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n return integerLimit && integerLimit > 0 ? integerLimit + scale : null;\n }\n\n private decimalDigitsFromEditedValue(value: string): string {\n return value.replace(/\\D/g, '').replace(/^0+(?=\\d)/, '');\n }\n\n private decimalDigitsFromProgrammaticValue(value: string): string {\n return this.decimalDigitsFromEditedValue(value);\n }\n\n private moveCaretToEnd(inputElement: HTMLInputElement): void {\n queueMicrotask(() => {\n const end = inputElement.value.length;\n try {\n inputElement.setSelectionRange(end, end);\n } catch {\n // type=\"number\" no soporta setSelectionRange en algunos navegadores.\n }\n });\n }\n\n private isDecimalMask(): boolean {\n return this.mask === 'decimal' || this.mask.startsWith('decimal(');\n }\n\n private resolveDecimalMaskConfig(): { integerDigits: number | null; decimalDigits: number } {\n const parsed = this.parseDecimalMask();\n const integerDigits = this.integerDigits ?? parsed?.integerDigits ?? null;\n const decimalDigits = this.decimalDigits ?? parsed?.decimalDigits ?? 2;\n\n return {\n integerDigits: integerDigits !== null ? Math.max(0, Math.trunc(integerDigits)) : null,\n decimalDigits: Math.max(0, Math.trunc(decimalDigits)),\n };\n }\n\n private parseDecimalMask(): { integerDigits: number; decimalDigits: number } | null {\n if (!this.mask.startsWith('decimal(')) return null;\n\n const match = /^decimal\\((\\d+)[,.](\\d+)\\)$/.exec(this.mask.trim());\n if (!match) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[TdInput] Máscara decimal inválida: \"${this.mask}\". Usa decimal(enteros,decimales), por ejemplo decimal(10,2).`\n );\n }\n return null;\n }\n\n return {\n integerDigits: Number(match[1]),\n decimalDigits: Number(match[2]),\n };\n }\n\n private maskTime(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (digits.length <= 2) return digits;\n return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n }\n\n private maskTimeSeconds(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}:${digits.slice(4)}`;\n }\n\n private completeMaskOnBlur(): void {\n if (this.mask !== 'time' && this.mask !== 'time-seconds') return;\n const currentValue = String(this.value() ?? '');\n if (!currentValue) return;\n\n const completedValue = this.mask === 'time'\n ? this.completeTimeValue(currentValue)\n : this.completeTimeSecondsValue(currentValue);\n\n if (completedValue !== currentValue) {\n this.setValue(completedValue);\n if (this.nativeInput) {\n this.nativeInput.nativeElement.value = completedValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n private completeTimeValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}00`\n : digits.padEnd(4, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}`;\n }\n\n private completeTimeSecondsValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}0000`\n : digits.padEnd(6, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n const second = this.clampNumber(Number(padded.slice(4, 6)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}:${this.padTimePart(second)}`;\n }\n\n private clampNumber(value: number, min: number, max: number): number {\n if (Number.isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n }\n\n private padTimePart(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n private setValue(value: TdInputValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n booleanAttribute,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\n\nlet textareaSequence = 0;\n\nexport type TdTextareaValue = string | null;\nexport type TdTextareaEmptyValue = 'auto' | 'null' | 'empty-string';\n\n@Component({\n selector: 'td-textarea',\n template: `\n <div\n class=\"td-textarea\"\n [class.td-textarea--focused]=\"focused()\"\n [class.td-textarea--error]=\"hasError()\"\n [class.td-textarea--disabled]=\"isDisabled()\"\n [class.td-textarea--dark]=\"dark\"\n [class.td-textarea--floating]=\"labelFloating()\"\n >\n <label [for]=\"textareaId\">{{ label }}</label>\n\n <textarea\n #nativeTextarea\n [id]=\"textareaId\"\n [name]=\"name()\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [rows]=\"rows\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n ></textarea>\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-textarea__clear\" title=\"Limpiar\" (click)=\"clear()\">\n ×\n </button>\n }\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-textarea__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-textarea__message\"\n [class.td-textarea__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-textarea__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-textarea__counter\"\n [class.td-textarea__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdTextarea),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTextarea\n implements AfterViewInit, ControlValueAccessor, FormValueControl<TdTextareaValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-textarea-${++textareaSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeTextarea') private nativeTextarea?: ElementRef<HTMLTextAreaElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() rows = 4;\n @Input() dark = false;\n @Input() clearable = false;\n @Input() emptyValue: TdTextareaEmptyValue = 'auto';\n @Input({ transform: booleanAttribute }) autoResize = true;\n @Input() maxAutoRows: number | null = 10;\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n readonly showCounter = input(true);\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdTextareaValue>('');\n protected readonly focused = signal(false);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && currentValue.length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue()\n );\n\n protected get textareaId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.textareaId}-description` : null;\n }\n\n private onChange: (value: TdTextareaValue) => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.resizeTextarea();\n }\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else {\n this.value.set(String(value));\n }\n queueMicrotask(() => this.resizeTextarea());\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdTextareaValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeTextarea?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.setValue(textarea.value ? textarea.value : this.resolveEmptyValue());\n this.resizeTextarea();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n if (this.nativeTextarea) {\n this.nativeTextarea.nativeElement.value = this.value() ?? '';\n }\n this.resizeTextarea();\n }\n\n private setValue(value: TdTextareaValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n return this.receivedNullValue ? null : '';\n }\n\n private resizeTextarea(): void {\n if (!this.autoResize || !this.nativeTextarea) return;\n\n const textarea = this.nativeTextarea.nativeElement;\n textarea.style.height = 'auto';\n\n const lineHeight = Number.parseFloat(getComputedStyle(textarea).lineHeight || '20');\n const maxHeight = this.maxAutoRows && this.maxAutoRows > 0\n ? lineHeight * this.maxAutoRows\n : Number.POSITIVE_INFINITY;\n const nextHeight = Math.min(textarea.scrollHeight, maxHeight);\n\n textarea.style.height = `${nextHeight}px`;\n textarea.style.overflowY = textarea.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n booleanAttribute,\n inject,\n signal,\n} from '@angular/core';\n\n@Directive({\n selector: '[tdLayoutHeader]',\n})\nexport class TdLayoutHeaderSlot {}\n\n@Directive({\n selector: '[tdLayoutSidebar]',\n})\nexport class TdLayoutSidebarSlot {}\n\n@Directive({\n selector: '[tdLayoutContent]',\n})\nexport class TdLayoutContentSlot {}\n\n@Directive({\n selector: '[tdLayoutFooter]',\n})\nexport class TdLayoutFooterSlot {}\n\nexport type TdLayoutSidebarPlacement = 'auto' | 'inline' | 'overlay';\nexport type TdLayoutSectionSpan = 'content' | 'full';\nexport type TdLayoutMobileSidebarStyle = 'panel' | 'card';\n\n@Component({\n selector: 'td-layout, td-shell',\n template: `\n <div\n class=\"td-layout\"\n [class.td-layout--viewport]=\"fillViewport\"\n [class.td-layout--mobile]=\"mobile()\"\n [class.td-layout--has-header]=\"hasHeader\"\n [class.td-layout--sidebar]=\"hasSidebar\"\n [class.td-layout--sidebar-overlay]=\"sidebarAsOverlay()\"\n [class.td-layout--sidebar-open]=\"sidebarOpen\"\n [class.td-layout--header-full]=\"headerFullWidth()\"\n [class.td-layout--footer-full]=\"footerFullWidth()\"\n [class.td-layout--mobile-sidebar-card]=\"mobileSidebarStyle === 'card'\"\n [class.td-layout--mobile-sidebar-panel]=\"mobileSidebarStyle !== 'card'\"\n >\n <div class=\"td-layout__body\">\n @if (hasSidebar && sidebarAsOverlay() && sidebarOpen && closeSidebarOnBackdrop) {\n <button\n type=\"button\"\n class=\"td-layout__backdrop\"\n aria-label=\"Cerrar navegación\"\n (pointerdown)=\"closeSidebar()\"\n (click)=\"closeSidebar()\"\n ></button>\n }\n\n @if (hasHeader) {\n <div #headerHost class=\"td-layout__header\">\n <ng-content select=\"[tdLayoutHeader]\"></ng-content>\n </div>\n }\n\n @if (hasSidebar) {\n <aside #sidebarHost class=\"td-layout__sidebar\" [attr.aria-hidden]=\"sidebarAsOverlay() && !sidebarOpen\">\n <ng-content select=\"[tdLayoutSidebar]\"></ng-content>\n </aside>\n }\n\n <main class=\"td-layout__content\">\n <ng-content select=\"[tdLayoutContent]\"></ng-content>\n <ng-content></ng-content>\n </main>\n\n @if (hasFooter) {\n <div class=\"td-layout__footer\">\n <ng-content select=\"[tdLayoutFooter]\"></ng-content>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './td-layout.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdLayout implements AfterContentInit, AfterViewInit, OnDestroy {\n @ContentChild(TdLayoutHeaderSlot) private readonly headerSlot?: TdLayoutHeaderSlot;\n @ContentChild(TdLayoutSidebarSlot) private readonly sidebarSlot?: TdLayoutSidebarSlot;\n @ContentChild(TdLayoutFooterSlot) private readonly footerSlot?: TdLayoutFooterSlot;\n @ViewChild('headerHost', { read: ElementRef }) private readonly headerHost?: ElementRef<HTMLElement>;\n @ViewChild('sidebarHost', { read: ElementRef }) private readonly sidebarHost?: ElementRef<HTMLElement>;\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly sidebarOpenState = signal(true);\n protected readonly mobile = signal(false);\n private resizeObserver?: ResizeObserver;\n\n @Input({ transform: booleanAttribute }) fillViewport = true;\n @Input({ transform: booleanAttribute }) closeSidebarOnBackdrop = true;\n @Input() mobileBreakpoint = 960;\n @Input() sidebarPlacement: TdLayoutSidebarPlacement = 'auto';\n @Input() headerSpan: TdLayoutSectionSpan = 'content';\n @Input() footerSpan: TdLayoutSectionSpan = 'content';\n @Input() mobileSidebarStyle: TdLayoutMobileSidebarStyle = 'panel';\n\n @Input()\n set sidebarOpen(value: boolean) {\n this.sidebarOpenState.set(value);\n }\n get sidebarOpen(): boolean {\n return this.sidebarOpenState();\n }\n\n @Output() readonly sidebarOpenChange = new EventEmitter<boolean>();\n\n get hasHeader(): boolean {\n return !!this.headerSlot;\n }\n\n get hasSidebar(): boolean {\n return !!this.sidebarSlot;\n }\n\n get hasFooter(): boolean {\n return !!this.footerSlot;\n }\n\n ngAfterContentInit(): void {\n this.syncViewport();\n }\n\n ngAfterViewInit(): void {\n this.updateHeaderOffset();\n\n const header = this.headerHost?.nativeElement;\n if (!header || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => this.updateHeaderOffset());\n this.resizeObserver.observe(header);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n @HostListener('window:resize')\n protected syncViewport(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n this.mobile.set(window.innerWidth <= this.mobileBreakpoint);\n this.updateHeaderOffset();\n }\n\n @HostListener('window:scroll')\n protected syncOverlayPosition(): void {\n this.updateHeaderOffset();\n }\n\n @HostListener('document:pointerdown', ['$event'])\n protected handlePointerDownOutside(event: PointerEvent): void {\n if (!this.closeSidebarOnBackdrop || !this.sidebarOpen || !this.sidebarAsOverlay()) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n const sidebar = this.sidebarHost?.nativeElement;\n const header = this.headerHost?.nativeElement;\n\n if (sidebar?.contains(target) || header?.contains(target)) {\n return;\n }\n\n this.closeSidebar();\n }\n\n protected sidebarAsOverlay(): boolean {\n if (this.sidebarPlacement === 'overlay') {\n return true;\n }\n\n if (this.sidebarPlacement === 'inline') {\n return false;\n }\n\n return this.mobile();\n }\n\n protected headerFullWidth(): boolean {\n if (this.mobile()) {\n return true;\n }\n\n return this.headerSpan === 'full';\n }\n\n protected footerFullWidth(): boolean {\n if (this.mobile()) {\n return false;\n }\n\n return this.footerSpan === 'full';\n }\n\n public openSidebar(): void {\n this.setSidebarOpen(true);\n }\n\n public closeSidebar(): void {\n this.setSidebarOpen(false);\n }\n\n public toggleSidebar(): void {\n this.setSidebarOpen(!this.sidebarOpen);\n }\n\n private updateHeaderOffset(): void {\n const host = this.hostRef.nativeElement;\n const header = this.headerHost?.nativeElement;\n const headerHeight = header?.offsetHeight ?? 0;\n const viewportOffset = header ? Math.max(header.getBoundingClientRect().bottom, 0) : headerHeight;\n host.style.setProperty('--td-layout-mobile-header-size', `${headerHeight}px`);\n host.style.setProperty('--td-layout-mobile-header-offset', `${viewportOffset}px`);\n }\n\n private setSidebarOpen(value: boolean): void {\n if (this.sidebarOpen === value) {\n return;\n }\n\n this.sidebarOpenState.set(value);\n this.sidebarOpenChange.emit(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport { TdRadioDirection, TdRadioOption, TdRadioVariant } from './td-radio.model';\n\nlet radioSequence = 0;\n\n@Component({\n selector: 'td-radio-group',\n imports: [TdIcon],\n templateUrl: './td-radio-group.html',\n styleUrl: './td-radio-group.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdRadioGroup),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdRadioGroup<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedName = `td-radio-${++radioSequence}`;\n\n @Input() options: TdRadioOption<T>[] = [];\n @Input() label = '';\n @Input() hint = '';\n @Input() dark = false;\n @Input() direction: TdRadioDirection = 'vertical';\n @Input() variant: TdRadioVariant = 'default';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly value = model<T | null>(null);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n private onChange: (value: T | null) => void = () => undefined;\n\n protected get groupName(): string {\n return this.name() || this.generatedName;\n }\n\n protected get messageId(): string | null {\n return this.displayError() || this.hint ? `${this.groupName}-message` : null;\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n protected isSelected(option: TdRadioOption<T>): boolean {\n return this.compareWith(option.value, this.value());\n }\n\n protected optionId(index: number): string {\n return `${this.groupName}-${index}`;\n }\n\n protected select(option: TdRadioOption<T>): void {\n if (this.isDisabled() || this.readonly() || option.disabled) return;\n if (this.isSelected(option)) {\n this.markTouched();\n return;\n }\n\n this.value.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option.value);\n this.markTouched();\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent, index: number): void {\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft', 'Home', 'End'].includes(event.key)) {\n return;\n }\n\n event.preventDefault();\n const enabled = this.options\n .map((option, optionIndex) => ({ option, optionIndex }))\n .filter((item) => !item.option.disabled);\n\n if (!enabled.length) return;\n\n const currentPosition = enabled.findIndex((item) => item.optionIndex === index);\n let nextPosition = currentPosition;\n\n if (event.key === 'Home') nextPosition = 0;\n if (event.key === 'End') nextPosition = enabled.length - 1;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextPosition = (currentPosition + 1 + enabled.length) % enabled.length;\n }\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextPosition = (currentPosition - 1 + enabled.length) % enabled.length;\n }\n\n const next = enabled[nextPosition];\n if (!next) return;\n this.select(next.option);\n queueMicrotask(() => document.getElementById(this.optionId(next.optionIndex))?.focus());\n }\n\n protected markTouched(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","<div\n class=\"td-radio\"\n [class.td-radio--horizontal]=\"direction === 'horizontal'\"\n [class.td-radio--card]=\"variant === 'card'\"\n [class.td-radio--disabled]=\"isDisabled()\"\n [class.td-radio--readonly]=\"readonly()\"\n [class.td-radio--error]=\"hasError()\"\n [class.td-radio--dark]=\"dark\"\n role=\"radiogroup\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"messageId\"\n>\n @if (label) {\n <span class=\"td-radio__legend\">{{ label }}</span>\n }\n\n <div class=\"td-radio__options\">\n @for (option of options; track option.value; let index = $index) {\n <label\n class=\"td-radio__option\"\n [class.td-radio__option--selected]=\"isSelected(option)\"\n [class.td-radio__option--disabled]=\"option.disabled || isDisabled()\"\n [for]=\"optionId(index)\"\n >\n <input\n [id]=\"optionId(index)\"\n type=\"radio\"\n [name]=\"groupName\"\n [checked]=\"isSelected(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n (change)=\"select(option)\"\n (blur)=\"markTouched()\"\n (keydown)=\"handleKeydown($event, index)\"\n />\n\n <span class=\"td-radio__control\" aria-hidden=\"true\"></span>\n\n @if (option.icon) {\n <span class=\"td-radio__icon\">\n <td-icon [nombre]=\"option.icon\" />\n </span>\n }\n\n <span class=\"td-radio__content\">\n <span class=\"td-radio__label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"td-radio__description\">{{ option.description }}</span>\n }\n </span>\n </label>\n }\n </div>\n</div>\n\n@if (displayError() || hint) {\n <p\n class=\"td-radio__message\"\n [class.td-radio__message--error]=\"hasError()\"\n [id]=\"messageId\"\n >\n {{ displayError() || hint }}\n </p>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n effect,\n forwardRef,\n inject,\n input,\n Input,\n model,\n OnChanges,\n output,\n Output,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet autocompleteSequence = 0;\n\n@Component({\n selector: 'td-autocomplete-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select td-select--autocomplete\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--floating]=\"labelFloating\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [for]=\"inputId\">{{ label }}</label>\n }\n <div class=\"td-select__trigger\">\n <td-icon class=\"td-select__leading\" nombre=\"search\" />\n <input\n #searchInput\n [id]=\"inputId\"\n type=\"search\"\n autocomplete=\"off\"\n role=\"combobox\"\n [value]=\"search\"\n [placeholder]=\"labelFloating || !hasVisibleLabel ? placeholder : ''\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (focus)=\"handleFocus()\"\n (input)=\"handleInput($event)\"\n (keydown)=\"handleKeydown($event)\"\n (blur)=\"handleBlur()\"\n />\n @if (clearable && (value() !== null || search) && !isDisabled()) {\n <button type=\"button\" class=\"td-select__clear\" title=\"Limpiar\" (click)=\"clear($event)\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!filteredOptions.length) {\n <div class=\"td-select-panel__empty-state\">\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n @if (emptyActionDescription) {\n <small class=\"td-select-panel__empty-description\">{{ emptyActionDescription }}</small>\n }\n @if (shouldShowEmptyAction) {\n <button\n type=\"button\"\n class=\"td-select-panel__empty-action td-select-panel__empty-action--option\"\n [disabled]=\"isDisabled()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"emitEmptyAction($event)\"\n >\n @if (emptyActionIcon) {\n <td-icon [nombre]=\"emptyActionIcon\" />\n }\n <span>{{ emptyActionText }}</span>\n </button>\n }\n </div>\n }\n @for (option of filteredOptions; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdAutocompleteSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdAutocompleteSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null>, OnChanges {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-autocomplete-${++autocompleteSequence}`;\n private rawOptions: readonly unknown[] = [];\n private normalizedOptions: TdSelectOption<T>[] = [];\n\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Buscar y seleccionar';\n @Input() placeholder = 'Escribe para buscar...';\n @Input()\n set options(value: readonly unknown[] | null | undefined) {\n this.rawOptions = value ?? [];\n this.normalizedOptions = this.normalizeOptions(this.rawOptions);\n this.syncSearchWithValue();\n }\n get options(): TdSelectOption<T>[] {\n return this.normalizedOptions;\n }\n @Input() hint = '';\n @Input() hideLabel = false;\n @Input() valueKey: string | ((option: unknown) => T | null) | null = null;\n @Input() labelKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() descriptionKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() iconKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() disabledKey: string | ((option: unknown) => boolean | null | undefined) | null = null;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No se encontraron resultados';\n @Input() emptyActionText = '';\n @Input() emptyActionDescription = '';\n @Input() emptyActionIcon = 'add';\n @Input() clearable = true;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() minimumCharacters = 0;\n @Input() filterWith: (option: TdSelectOption<T>, search: string) => boolean =\n (option, search) =>\n `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(search);\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly searchChange = new EventEmitter<string>();\n @Output() readonly emptyAction = new EventEmitter<string>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected search = '';\n protected open = false;\n protected activeIndex = -1;\n protected readonly focused = signal(false);\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get inputId(): string {\n return `${this.generatedId}-input`;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get filteredOptions(): TdSelectOption<T>[] {\n const normalized = this.search.trim().toLocaleLowerCase();\n if (normalized.length < this.minimumCharacters) return [];\n return this.options.filter((option) => this.filterWith(option, normalized));\n }\n\n protected get shouldShowEmptyAction(): boolean {\n return !!this.emptyActionText.trim() && !!this.search.trim();\n }\n\n protected get labelFloating(): boolean {\n return (\n this.hasVisibleLabel &&\n (this.focused() || this.open || !!this.search.trim() || this.value() !== null)\n );\n }\n\n private changed: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n\n effect(() => {\n this.value();\n this.syncSearchWithValue();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['valueKey'] ||\n changes['labelKey'] ||\n changes['descriptionKey'] ||\n changes['iconKey'] ||\n changes['disabledKey']\n ) {\n this.normalizedOptions = this.normalizeOptions(this.rawOptions);\n }\n\n if (\n changes['valueKey'] ||\n changes['labelKey'] ||\n changes['descriptionKey'] ||\n changes['iconKey'] ||\n changes['disabledKey'] ||\n changes['compareWith']\n ) {\n this.syncSearchWithValue();\n }\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.syncSearchWithValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.searchInput?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open = true;\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n this.openPanel();\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n if (!this.search.trim() && this.value() === null) {\n this.close();\n }\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.syncSearchWithValue();\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected emitEmptyAction(event: MouseEvent): void {\n event.stopPropagation();\n const currentSearch = this.search.trim();\n this.close();\n this.emptyAction.emit(currentSearch);\n }\n\n protected handleInput(event: Event): void {\n this.search = (event.target as HTMLInputElement).value;\n this.value.set(null);\n this.changed(null);\n this.searchChange.emit(this.search);\n this.openPanel();\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.search = option.label;\n this.changed(option.value);\n this.selectionChange.emit(option.value);\n this.close();\n this.cdr.markForCheck();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n this.search = '';\n this.changed(null);\n this.selectionChange.emit(null);\n this.searchChange.emit('');\n this.openPanel();\n queueMicrotask(() => this.searchInput?.nativeElement.focus());\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n } else if (event.key === 'Enter' && this.open && this.activeIndex >= 0) {\n event.preventDefault();\n const option = this.filteredOptions[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private moveActive(direction: number): void {\n const options = this.filteredOptions;\n if (!options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < options.length; index++) {\n next = (next + direction + options.length) % options.length;\n if (!options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.filteredOptions.findIndex((option) => !option.disabled);\n }\n\n private syncSearchWithValue(): void {\n const currentValue = this.value();\n\n if (currentValue === null) {\n if (!this.focused() && !this.open) {\n this.search = '';\n }\n this.cdr.markForCheck();\n return;\n }\n\n const selected = this.options.find((option) => this.compare(option.value, currentValue));\n if (selected) {\n this.search = selected.label;\n }\n\n this.cdr.markForCheck();\n }\n\n private normalizeOptions(options: readonly unknown[]): TdSelectOption<T>[] {\n return options.map((option) => this.normalizeOption(option));\n }\n\n private normalizeOption(option: unknown): TdSelectOption<T> {\n if (this.isSelectOption(option) && !this.valueKey && !this.labelKey) {\n return option as TdSelectOption<T>;\n }\n\n const value = this.valueKey ? this.readOptionValue(option, this.valueKey) : this.readOptionValue(option, 'value');\n const label = this.labelKey ? this.readOptionText(option, this.labelKey) : this.readOptionText(option, 'label');\n const description = this.descriptionKey\n ? this.readOptionText(option, this.descriptionKey)\n : this.readOptionText(option, 'description');\n const icon = this.iconKey ? this.readOptionText(option, this.iconKey) : this.readOptionText(option, 'icon');\n const disabled = this.disabledKey\n ? !!this.readOptionUnknown(option, this.disabledKey)\n : !!this.readOptionUnknown(option, 'disabled');\n\n return {\n value,\n label: label || this.fallbackOptionLabel(option, value),\n ...(description ? { description } : {}),\n ...(icon ? { icon } : {}),\n ...(disabled ? { disabled } : {}),\n };\n }\n\n private isSelectOption(option: unknown): option is TdSelectOption<T> {\n if (!option || typeof option !== 'object') return false;\n return 'value' in option && 'label' in option;\n }\n\n private readOptionValue(\n option: unknown,\n accessor: string | ((option: unknown) => T | null)\n ): T {\n if (typeof accessor === 'function') {\n return accessor(option) as T;\n }\n\n return this.readPath(option, accessor) as T;\n }\n\n private readOptionText(\n option: unknown,\n accessor: string | ((option: unknown) => string | null | undefined)\n ): string {\n const value = typeof accessor === 'function' ? accessor(option) : this.readPath(option, accessor);\n return value === null || value === undefined ? '' : String(value);\n }\n\n private readOptionUnknown(\n option: unknown,\n accessor: string | ((option: unknown) => unknown)\n ): unknown {\n return typeof accessor === 'function' ? accessor(option) : this.readPath(option, accessor);\n }\n\n private readPath(source: unknown, path: string): unknown {\n if (!path.trim()) return undefined;\n return path.split('.').reduce<unknown>((current, key) => {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[key];\n }, source);\n }\n\n private fallbackOptionLabel(option: unknown, value: T): string {\n if (typeof option === 'string' || typeof option === 'number' || typeof option === 'boolean') {\n return String(option);\n }\n\n if (value !== null && value !== undefined) {\n return String(value);\n }\n\n return '';\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet selectSequence = 0;\n\n@Component({\n selector: 'td-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [id]=\"labelId\">{{ label }}</label>\n }\n <div\n #trigger\n class=\"td-select__trigger\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"hasVisibleLabel ? labelId : null\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (selectedOption?.icon) {\n <td-icon class=\"td-select__leading\" [nombre]=\"selectedOption!.icon!\" />\n }\n <span [class.td-select__placeholder]=\"!selectedOption\">\n {{ selectedOption?.label || placeholder }}\n </span>\n @if (clearable && selectedOption && !isDisabled()) {\n <button\n type=\"button\"\n class=\"td-select__clear\"\n title=\"Limpiar selección\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!options.length) {\n <div class=\"td-select-panel__empty-state\">\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n @if (emptyActionDescription) {\n <small class=\"td-select-panel__empty-description\">{{ emptyActionDescription }}</small>\n }\n @if (emptyActionText) {\n <button\n type=\"button\"\n class=\"td-select-panel__empty-action td-select-panel__empty-action--option\"\n [disabled]=\"isDisabled()\"\n (click)=\"emitEmptyAction($event)\"\n >\n @if (emptyActionIcon) {\n <td-icon [nombre]=\"emptyActionIcon\" />\n }\n <span>{{ emptyActionText }}</span>\n </button>\n }\n </div>\n }\n @for (option of options; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [attr.aria-selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-select-${++selectSequence}`;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('trigger') private trigger?: ElementRef<HTMLElement>;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Seleccionar';\n @Input() placeholder = 'Selecciona una opción';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No hay opciones disponibles';\n @Input() emptyActionText = '';\n @Input() emptyActionDescription = '';\n @Input() emptyActionIcon = 'add';\n @Input() clearable = false;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly emptyAction = new EventEmitter<void>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected open = false;\n protected activeIndex = -1;\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get selectedOption(): TdSelectOption<T> | undefined {\n return this.options.find((option) => this.compare(option.value, this.value()));\n }\n\n private onChange: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.trigger?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.setValue(option.value);\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected emitEmptyAction(event: MouseEvent): void {\n event.stopPropagation();\n this.close();\n this.emptyAction.emit();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n return;\n }\n\n const option = this.options[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private openPanel(): void {\n this.open = true;\n const selectedIndex = this.options.findIndex((option) =>\n this.compare(option.value, this.value())\n );\n this.activeIndex = selectedIndex >= 0 ? selectedIndex : this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n private moveActive(direction: number): void {\n if (!this.options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < this.options.length; index++) {\n next = (next + direction + this.options.length) % this.options.length;\n if (!this.options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.options.findIndex((option) => !option.disabled);\n }\n\n private setValue(value: T | null): void {\n this.value.set(value);\n this.onChange(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NavigationEnd, Router, RouterLink } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { MenuSidebar, TdSidebarSeleccion } from './menu-sidebar';\n\nexport type TdSidebarModoCerrado = 'compacto' | 'oculto';\n\n@Component({\n selector: 'td-sidebar',\n imports: [NgTemplateOutlet, RouterLink, TdIcon],\n templateUrl: './td-sidebar.html',\n styleUrl: './td-sidebar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSidebar {\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n\n @Input() titulo = 'Gestión Corporativa';\n @Input() subtitulo = 'Central Platform';\n @Input() etiquetaNavegacion = 'Navegación';\n @Input() logoUrl = '';\n @Input() logoAlt = 'Logo';\n @Input() textoCarga = 'Cargando menú...';\n @Input() mensajeVacio = 'No hay opciones disponibles.';\n @Input() error = '';\n @Input() cargando = false;\n @Input() oscuro = false;\n @Input() modoCerrado: TdSidebarModoCerrado = 'compacto';\n\n @Input()\n set abierto(value: boolean) {\n this.abiertoInterno.set(value);\n }\n get abierto(): boolean {\n return this.abiertoInterno();\n }\n\n @Input()\n set menu(value: MenuSidebar[] | null | undefined) {\n this.menuNormalizado.set(this.normalizarMenu(value ?? []));\n this.expandirRutaActual();\n }\n get menu(): MenuSidebar[] {\n return this.menuNormalizado();\n }\n\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n @Output() readonly seleccionar = new EventEmitter<TdSidebarSeleccion>();\n\n protected readonly abiertoInterno = signal(true);\n protected readonly menuNormalizado = signal<MenuSidebar[]>([]);\n protected readonly expandidos = signal<ReadonlySet<string>>(new Set<string>());\n protected readonly rutaSeleccionada = signal('');\n\n constructor() {\n this.router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.expandirRutaActual());\n }\n\n protected alternarGrupo(clave: string): void {\n if (!this.abiertoInterno()) {\n this.abiertoInterno.set(true);\n this.abiertoChange.emit(true);\n }\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n siguientes.has(clave) ? siguientes.delete(clave) : siguientes.add(clave);\n return siguientes;\n });\n }\n\n protected estaExpandido(clave: string): boolean {\n return this.expandidos().has(clave);\n }\n\n protected seleccionarItem(item: MenuSidebar, nivel: number): void {\n this.seleccionar.emit({ item, nivel });\n }\n\n protected esItemSeleccionado(item: MenuSidebar): boolean {\n const ruta = this.normalizarRuta(item.ruta);\n return !!ruta && ruta === this.rutaSeleccionada();\n }\n\n protected claveItem(item: MenuSidebar, padre: string, indice: number): string {\n return `${padre}/${item.nombre}-${indice}`;\n }\n\n protected inicialMarca(): string {\n return (this.titulo.trim().charAt(0) || 'T').toUpperCase();\n }\n\n private normalizarMenu(items: MenuSidebar[]): MenuSidebar[] {\n return [...items]\n .sort((a, b) => a.orden - b.orden)\n .map((item) => ({\n ...item,\n icono: item.icono?.trim() || 'folder',\n subMenus: this.normalizarMenu(item.subMenus ?? []),\n }));\n }\n\n private expandirRutaActual(): void {\n const rutaActual = this.normalizarRuta(this.router.url);\n const coincidencia = this.buscarMejorCoincidenciaPorRuta(this.menuNormalizado(), rutaActual);\n this.rutaSeleccionada.set(coincidencia?.ruta ?? '');\n\n const clavesPadre = coincidencia?.ancestros ?? [];\n if (!clavesPadre.length) return;\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n clavesPadre.forEach((clave) => siguientes.add(clave));\n return siguientes;\n });\n }\n\n private buscarMejorCoincidenciaPorRuta(\n items: MenuSidebar[],\n rutaActual: string,\n padre = 'raiz',\n ancestros: string[] = []\n ): { ruta: string; ancestros: string[]; peso: number } | null {\n let mejor: { ruta: string; ancestros: string[]; peso: number } | null = null;\n\n for (let indice = 0; indice < items.length; indice += 1) {\n const item = items[indice];\n const clave = this.claveItem(item, padre, indice);\n const ruta = this.normalizarRuta(item.ruta);\n\n if (this.rutaCoincide(ruta, rutaActual)) {\n mejor = this.mejorCoincidencia(mejor, {\n ruta,\n ancestros,\n peso: ruta === rutaActual ? Number.MAX_SAFE_INTEGER : ruta.length,\n });\n }\n\n const resultado = this.buscarMejorCoincidenciaPorRuta(\n item.subMenus ?? [],\n rutaActual,\n clave,\n [...ancestros, clave]\n );\n\n mejor = this.mejorCoincidencia(mejor, resultado);\n }\n\n return mejor;\n }\n\n private mejorCoincidencia(\n actual: { ruta: string; ancestros: string[]; peso: number } | null,\n candidata: { ruta: string; ancestros: string[]; peso: number } | null\n ): { ruta: string; ancestros: string[]; peso: number } | null {\n if (!candidata) return actual;\n if (!actual) return candidata;\n return candidata.peso > actual.peso ? candidata : actual;\n }\n\n private rutaCoincide(rutaMenu: string, rutaActual: string): boolean {\n if (!rutaMenu) return false;\n if (rutaMenu === '/') return rutaActual === '/';\n return rutaActual === rutaMenu || rutaActual.startsWith(`${rutaMenu}/`);\n }\n\n private normalizarRuta(ruta: string | null | undefined): string {\n if (!ruta) return '';\n const limpia = ruta.split('?')[0].split('#')[0].trim();\n if (!limpia || limpia === '/') return '/';\n const conSlashInicial = limpia.startsWith('/') ? limpia : `/${limpia}`;\n return conSlashInicial.endsWith('/') ? conSlashInicial.slice(0, -1) : conSlashInicial;\n }\n}\n","<aside\n class=\"td-sidebar\"\n [class.td-sidebar--compacto]=\"!abiertoInterno() && modoCerrado === 'compacto'\"\n [class.td-sidebar--oculto]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n [class.td-sidebar--oscuro]=\"oscuro\"\n [attr.aria-hidden]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n>\n <header class=\"td-sidebar__marca\">\n <div class=\"td-sidebar__logo\">\n @if (logoUrl) {\n <img [src]=\"logoUrl\" [alt]=\"logoAlt\" />\n } @else {\n <span>{{ inicialMarca() }}</span>\n }\n </div>\n\n @if (abiertoInterno()) {\n <div class=\"td-sidebar__marca-texto\">\n <small>{{ subtitulo }}</small>\n <strong>{{ titulo }}</strong>\n </div>\n }\n\n </header>\n\n <div class=\"td-sidebar__encabezado\">\n @if (abiertoInterno()) {\n <span>{{ etiquetaNavegacion }}</span>\n } @else {\n <span aria-hidden=\"true\">•••</span>\n }\n </div>\n\n <nav class=\"td-sidebar__nav\" aria-label=\"Menú principal\">\n @if (cargando) {\n <p class=\"td-sidebar__estado\">{{ textoCarga }}</p>\n } @else if (error) {\n <p class=\"td-sidebar__estado td-sidebar__estado--error\">{{ error }}</p>\n } @else if (!menuNormalizado().length) {\n <p class=\"td-sidebar__estado\">{{ mensajeVacio }}</p>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{ items: menuNormalizado(), nivel: 0, padre: 'raiz' }\"\n />\n }\n </nav>\n</aside>\n\n<ng-template #listaMenu let-items=\"items\" let-nivel=\"nivel\" let-padre=\"padre\">\n <ul class=\"td-sidebar__lista\" [class.td-sidebar__lista--anidada]=\"nivel > 0\">\n @for (item of items; track item) {\n @let clave = claveItem(item, padre, $index);\n @let tieneHijos = item.subMenus.length > 0;\n\n <li class=\"td-sidebar__item\">\n @if (tieneHijos) {\n <button\n class=\"td-sidebar__enlace\"\n type=\"button\"\n [class.td-sidebar__enlace--ruta-activa]=\"esItemSeleccionado(item)\"\n [attr.aria-expanded]=\"estaExpandido(clave)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"alternarGrupo(clave)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n <td-icon\n class=\"td-sidebar__flecha\"\n [class.td-sidebar__flecha--abierta]=\"estaExpandido(clave)\"\n nombre=\"chevron_right\"\n />\n }\n </button>\n } @else {\n <a\n class=\"td-sidebar__enlace\"\n [routerLink]=\"item.ruta || '/'\"\n [class.td-sidebar__enlace--ruta-activa]=\"esItemSeleccionado(item)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"seleccionarItem(item, nivel)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n }\n </a>\n }\n\n @if (abiertoInterno() && tieneHijos && estaExpandido(clave)) {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{\n items: item.subMenus,\n nivel: nivel + 1,\n padre: clave\n }\"\n />\n }\n </li>\n }\n </ul>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet tabSequence = 0;\n\n@Component({\n selector: 'td-tab',\n template: `\n <ng-template>\n <ng-content />\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTab {\n readonly generatedId = `td-tab-${++tabSequence}`;\n\n @Input() id = '';\n @Input() label = 'Tab';\n @Input() icon = '';\n @Input() disabled = false;\n @Input() badge: string | number | null = null;\n\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<unknown>;\n\n get resolvedId(): string {\n return this.id || this.generatedId;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { TdTab } from './td-tab';\n\nexport type TdTabsVariant = 'linea' | 'pastilla' | 'contenida';\nexport type TdTabsAlignment = 'inicio' | 'centro' | 'fin';\n\n@Component({\n selector: 'td-tabs',\n imports: [NgTemplateOutlet, TdIcon],\n template: `\n <section\n class=\"td-tabs\"\n [class.td-tabs--dark]=\"dark\"\n [class.td-tabs--stretch]=\"stretch\"\n [class]=\"'td-tabs td-tabs--' + variant + ' td-tabs--align-' + alignment +\n (dark ? ' td-tabs--dark' : '') + (stretch ? ' td-tabs--stretch' : '')\"\n >\n <div\n #tabList\n class=\"td-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown)=\"handleKeydown($event)\"\n >\n @for (tab of tabs; track tab.resolvedId; let index = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"td-tabs__tab\"\n role=\"tab\"\n [id]=\"tabId(tab)\"\n [class.td-tabs__tab--active]=\"index === activeIndex\"\n [disabled]=\"tab.disabled\"\n [attr.tabindex]=\"index === activeIndex ? 0 : -1\"\n [attr.aria-selected]=\"index === activeIndex\"\n [attr.aria-controls]=\"panelId(tab)\"\n (click)=\"select(index)\"\n >\n @if (tab.icon) {\n <td-icon [nombre]=\"tab.icon\" />\n }\n <span>{{ tab.label }}</span>\n @if (tab.badge !== null) {\n <small>{{ tab.badge }}</small>\n }\n </button>\n }\n </div>\n\n @if (activeTab; as tab) {\n <div\n class=\"td-tabs__panel\"\n role=\"tabpanel\"\n [id]=\"panelId(tab)\"\n [attr.aria-labelledby]=\"tabId(tab)\"\n [attr.tabindex]=\"panelFocusable ? 0 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"tab.content\" />\n </div>\n }\n </section>\n `,\n styleUrl: './td-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTabs implements AfterContentInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private tabsChange?: Subscription;\n private requestedIndex = 0;\n\n @ContentChildren(TdTab) private tabQuery!: QueryList<TdTab>;\n @ViewChild('tabList') private tabList?: ElementRef<HTMLDivElement>;\n @ViewChildren('tabButton') private tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n @Input()\n set selectedIndex(value: number) {\n this.requestedIndex = Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n if (this.tabQuery) this.applyRequestedIndex();\n }\n get selectedIndex(): number {\n return this.activeIndex;\n }\n\n @Input() variant: TdTabsVariant = 'linea';\n @Input() alignment: TdTabsAlignment = 'inicio';\n @Input() stretch = false;\n @Input() dark = false;\n @Input() ariaLabel = 'Pestañas';\n @Input() panelFocusable = false;\n\n @Output() readonly selectedIndexChange = new EventEmitter<number>();\n @Output() readonly tabChange = new EventEmitter<TdTab>();\n\n protected tabs: readonly TdTab[] = [];\n protected activeIndex = 0;\n\n protected get activeTab(): TdTab | null {\n return this.tabs[this.activeIndex] ?? null;\n }\n\n ngAfterContentInit(): void {\n this.syncTabs();\n this.tabsChange = this.tabQuery.changes.subscribe(() => this.syncTabs());\n }\n\n ngOnDestroy(): void {\n this.tabsChange?.unsubscribe();\n }\n\n protected select(index: number, focus = false): void {\n const tab = this.tabs[index];\n if (!tab || tab.disabled || index === this.activeIndex) {\n if (focus && tab && !tab.disabled) this.focusButton(index);\n return;\n }\n\n this.activeIndex = index;\n this.requestedIndex = index;\n this.selectedIndexChange.emit(index);\n this.tabChange.emit(tab);\n this.cdr.markForCheck();\n queueMicrotask(() => {\n this.ensureTabVisible(index, focus ? 'auto' : 'smooth');\n if (focus) this.focusButton(index);\n });\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const horizontalKeys = ['ArrowLeft', 'ArrowRight'];\n if (!horizontalKeys.includes(event.key) && !['Home', 'End'].includes(event.key)) return;\n\n event.preventDefault();\n if (event.key === 'Home') {\n this.select(this.firstEnabledIndex(), true);\n return;\n }\n if (event.key === 'End') {\n this.select(this.lastEnabledIndex(), true);\n return;\n }\n this.select(this.nextEnabledIndex(event.key === 'ArrowRight' ? 1 : -1), true);\n }\n\n protected tabId(tab: TdTab): string {\n return `${tab.resolvedId}-trigger`;\n }\n\n protected panelId(tab: TdTab): string {\n return `${tab.resolvedId}-panel`;\n }\n\n private syncTabs(): void {\n this.tabs = this.tabQuery.toArray();\n this.applyRequestedIndex();\n this.cdr.markForCheck();\n queueMicrotask(() => this.ensureTabVisible(this.activeIndex, 'auto'));\n }\n\n private applyRequestedIndex(): void {\n if (!this.tabs.length) {\n this.activeIndex = 0;\n return;\n }\n\n const requested = Math.min(this.requestedIndex, this.tabs.length - 1);\n if (!this.tabs[requested]?.disabled) {\n this.activeIndex = requested;\n return;\n }\n\n const firstEnabled = this.firstEnabledIndex();\n this.activeIndex = firstEnabled >= 0 ? firstEnabled : 0;\n }\n\n private nextEnabledIndex(direction: number): number {\n if (!this.tabs.length) return 0;\n let next = this.activeIndex;\n for (let index = 0; index < this.tabs.length; index++) {\n next = (next + direction + this.tabs.length) % this.tabs.length;\n if (!this.tabs[next]?.disabled) return next;\n }\n return this.activeIndex;\n }\n\n private firstEnabledIndex(): number {\n return this.tabs.findIndex((tab) => !tab.disabled);\n }\n\n private lastEnabledIndex(): number {\n for (let index = this.tabs.length - 1; index >= 0; index--) {\n if (!this.tabs[index]?.disabled) return index;\n }\n return this.activeIndex;\n }\n\n private focusButton(index: number): void {\n this.tabButtons.get(index)?.nativeElement.focus();\n }\n\n private ensureTabVisible(index: number, behavior: ScrollBehavior): void {\n const list = this.tabList?.nativeElement;\n const button = this.tabButtons?.get(index)?.nativeElement;\n if (!list || !button || list.scrollWidth <= list.clientWidth) return;\n\n const padding = 8;\n const visibleStart = list.scrollLeft + padding;\n const visibleEnd = list.scrollLeft + list.clientWidth - padding;\n const tabStart = button.offsetLeft;\n const tabEnd = tabStart + button.offsetWidth;\n\n if (tabStart < visibleStart) {\n list.scrollTo({ left: Math.max(0, tabStart - padding), behavior });\n } else if (tabEnd > visibleEnd) {\n list.scrollTo({\n left: tabEnd - list.clientWidth + padding,\n behavior,\n });\n }\n }\n}\n","export type TdThemeMode = 'light' | 'dark' | 'system';\n\nexport interface TdThemePaletteColor {\n name: string;\n cssVariable: string;\n value: string;\n usage: string;\n}\n\nexport const TD_THEME_LIGHT_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#3157A4', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#254680', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#EAF0FB', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#16784A', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#A8660B', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#B93A3A', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#2563A8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#FFFFFF', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#F6F8FB', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#EDF1F6', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#DDE3EE', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#C8D1DF', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#202B3D', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#66758B', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 18px 46px ...', usage: 'Floating panels and overlays.' },\n];\n\nexport const TD_THEME_DARK_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#8AA7E6', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#A8BDF0', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#1F2B45', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#56C28D', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#E2A84D', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#F07878', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#79A9E8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#181B22', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#20242D', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#272D38', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#343B49', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#465164', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#EEF2F8', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#A7B0BE', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 20px 54px ...', usage: 'Floating panels and overlays.' },\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { TdThemeMode } from './td-theme.model';\n\nconst THEME_CLASS_LIGHT = 'td-theme-light';\nconst THEME_CLASS_DARK = 'td-theme-dark';\n\n@Injectable({ providedIn: 'root' })\nexport class TdThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly systemDark = signal(this.readSystemPreference());\n readonly mode = signal<TdThemeMode>('light');\n readonly isDark = computed(() =>\n this.mode() === 'dark' || (this.mode() === 'system' && this.systemDark())\n );\n\n constructor() {\n this.listenSystemPreference();\n effect(() => this.applyThemeClass(this.isDark(), this.mode()));\n }\n\n setMode(mode: TdThemeMode): void {\n this.mode.set(mode);\n }\n\n toggle(): void {\n this.mode.set(this.isDark() ? 'light' : 'dark');\n }\n\n private applyThemeClass(isDark: boolean, mode: TdThemeMode): void {\n const element = this.document.documentElement;\n element.classList.toggle(THEME_CLASS_DARK, isDark);\n element.classList.toggle(THEME_CLASS_LIGHT, !isDark);\n element.dataset['tdTheme'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n private listenSystemPreference(): void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (event: MediaQueryListEvent): void => this.systemDark.set(event.matches);\n query.addEventListener?.('change', listener);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, booleanAttribute } from '@angular/core';\nimport { TdTooltipPosition, TdTooltipTone } from './td-tooltip.model';\n\n@Component({\n selector: 'td-tooltip-panel',\n template: `\n <div\n class=\"td-tooltip\"\n [class]=\"'td-tooltip td-tooltip--' + tone + ' td-tooltip--' + position\"\n [class.td-tooltip--multiline]=\"multiline\"\n [id]=\"id\"\n role=\"tooltip\"\n [style.max-width]=\"maxWidth\"\n >\n {{ content }}\n <span class=\"td-tooltip__arrow\" aria-hidden=\"true\"></span>\n </div>\n `,\n styleUrl: './td-tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTooltipPanel {\n @Input() id = '';\n @Input() content = '';\n @Input() position: TdTooltipPosition = 'top';\n @Input() tone: TdTooltipTone = 'dark';\n @Input() maxWidth = '18rem';\n @Input({ transform: booleanAttribute }) multiline = false;\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n Renderer2,\n ViewContainerRef,\n booleanAttribute,\n ComponentRef,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TdTooltipPosition, TdTooltipTone } from './td-tooltip.model';\nimport { TdTooltipPanel } from './td-tooltip-panel';\n\nlet tooltipSequence = 0;\n\n@Directive({\n selector: '[tdTooltip]',\n standalone: true,\n})\nexport class TdTooltip implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n private readonly tooltipId = `td-tooltip-${++tooltipSequence}`;\n\n private overlayRef?: OverlayRef;\n private panelRef?: ComponentRef<TdTooltipPanel>;\n private showTimer?: ReturnType<typeof setTimeout>;\n private hideTimer?: ReturnType<typeof setTimeout>;\n\n @Input('tdTooltip') content: string | null | undefined = '';\n @Input() tdTooltipPosition: TdTooltipPosition = 'top';\n @Input() tdTooltipTone: TdTooltipTone = 'dark';\n @Input() tdTooltipMaxWidth = '18rem';\n @Input({ transform: numberAttribute }) tdTooltipShowDelay = 250;\n @Input({ transform: numberAttribute }) tdTooltipHideDelay = 80;\n @Input({ transform: booleanAttribute }) tdTooltipMultiline = false;\n @Input({ transform: booleanAttribute }) tdTooltipDisabled = false;\n\n @HostListener('mouseenter')\n protected handleMouseEnter(): void {\n this.scheduleShow();\n }\n\n @HostListener('mouseleave')\n protected handleMouseLeave(): void {\n this.scheduleHide();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.scheduleShow();\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.scheduleHide();\n }\n\n @HostListener('touchstart')\n protected handleTouchStart(): void {\n this.showNow();\n this.scheduleHide(2200);\n }\n\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this.hideNow();\n }\n\n ngOnDestroy(): void {\n this.clearTimers();\n this.destroyOverlay();\n }\n\n private scheduleShow(delay = this.tdTooltipShowDelay): void {\n if (this.tdTooltipDisabled || !this.normalizedContent) return;\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n this.showTimer = setTimeout(() => this.showNow(), Math.max(0, delay));\n }\n\n private scheduleHide(delay = this.tdTooltipHideDelay): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.hideTimer = setTimeout(() => this.hideNow(), Math.max(0, delay));\n }\n\n private showNow(): void {\n if (this.tdTooltipDisabled || !this.normalizedContent) return;\n\n const overlayRef = this.ensureOverlay();\n const positionStrategy = overlayRef.getConfig().positionStrategy;\n if (this.isFlexiblePositionStrategy(positionStrategy)) {\n positionStrategy.withPositions(this.positions());\n }\n\n if (!overlayRef.hasAttached()) {\n const portal = new ComponentPortal(TdTooltipPanel, this.viewContainerRef);\n this.panelRef = overlayRef.attach(portal);\n }\n\n this.panelRef?.setInput('id', this.tooltipId);\n this.panelRef?.setInput('content', this.normalizedContent);\n this.panelRef?.setInput('position', this.tdTooltipPosition);\n this.panelRef?.setInput('tone', this.tdTooltipTone);\n this.panelRef?.setInput('maxWidth', this.tdTooltipMaxWidth);\n this.panelRef?.setInput('multiline', this.tdTooltipMultiline);\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', this.tooltipId);\n }\n\n private hideNow(): void {\n this.overlayRef?.detach();\n this.panelRef = undefined;\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n }\n\n private ensureOverlay(): OverlayRef {\n if (this.overlayRef) return this.overlayRef;\n\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(this.positions())\n .withFlexibleDimensions(false)\n .withPush(true),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'td-tooltip-overlay',\n });\n\n return this.overlayRef;\n }\n\n private positions(): ConnectedPosition[] {\n const offset = 8;\n const map: Record<TdTooltipPosition, ConnectedPosition[]> = {\n top: [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n bottom: [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n left: [\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -offset,\n },\n ],\n right: [\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: offset,\n },\n ],\n };\n\n return map[this.tdTooltipPosition];\n }\n\n private get normalizedContent(): string {\n return String(this.content ?? '').trim();\n }\n\n private clearTimers(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n }\n\n private destroyOverlay(): void {\n this.hideNow();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n }\n\n private isFlexiblePositionStrategy(\n strategy: unknown,\n ): strategy is FlexibleConnectedPositionStrategy {\n return !!strategy && typeof (strategy as FlexibleConnectedPositionStrategy).withPositions === 'function';\n }\n}\n","/*\n * Public API Surface of telcomdev-ui\n */\n\nexport * from './lib/telcomdev-ui';\nexport * from './lib/alerta';\nexport * from './lib/badge';\nexport * from './lib/button';\nexport * from './lib/checkbox';\nexport * from './lib/data-table';\nexport * from './lib/date-picker';\nexport * from './lib/dialog';\nexport * from './lib/footer';\nexport * from './lib/form-control';\nexport * from './lib/file-viewer';\nexport * from './lib/file-upload';\nexport * from './lib/header';\nexport * from './lib/iconos';\nexport * from './lib/input';\nexport * from './lib/layout';\nexport * from './lib/menu';\nexport * from './lib/radio';\nexport * from './lib/select';\nexport * from './lib/sidebar';\nexport * from './lib/tabs';\nexport * from './lib/theme';\nexport * from './lib/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MASa,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,2EAJZ,CAAA,4BAAA,CAA8B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,KAAA,EAAA,CAAA;;2FAI7B,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,WAClB,EAAE,EAAA,QAAA,EACD,8BAA8B,EAAA,eAAA,EACvB,uBAAuB,CAAC,KAAK,EAAA;;;ACJzC,MAAM,SAAS,GAAG;AACvB,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,qEAAqE;AAC5E,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,4RAA4R;AACnS,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,8EAA8E;AACrF,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,6VAA6V;AACpW,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,oNAAoN;AAC3N,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,wFAAwF;AAC/F,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,gHAAgH;AACvH,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,uFAAuF;AAC9F,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,uLAAuL;AAC9L,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,wEAAwE;AAC/E,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,8FAA8F;AACrG,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,iGAAiG;AACxG,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,uHAAuH;AAC9H,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,sGAAsG;AAC7G,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,sGAAsG;AAC7G,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,IAAI,EAAE,klBAAklB;AACzlB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,uDAAuD;AAC9D,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,mDAAmD;AAC1D,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,uDAAuD;AAC9D,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,iGAAiG;AACxG,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,8CAA8C;AACrD,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,gIAAgI;AACvI,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,yKAAyK;AAChL,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,uTAAuT;AAC9T,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,8IAA8I;AACrJ,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,uGAAuG;AAC9G,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,6RAA6R;AACpS,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,4VAA4V;AACnW,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,IAAI,EAAE,oCAAoC;AAC3C,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,uJAAuJ;AAC9J,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,8EAA8E;AACrF,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,6EAA6E;AACpF,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,6EAA6E;AACpF,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,+DAA+D;AACtE,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,IAAI,EAAE,iaAAia;AACva,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,4HAA4H;AACnI,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,0HAA0H;AACjI,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,8EAA8E;AACrF,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,4EAA4E;AACnF,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,sIAAsI;AAC7I,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,4IAA4I;AAClJ,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,IAAI,EAAE,0JAA0J;AAChK,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,IAAI,EAAE,mNAAmN;AACzN,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,gGAAgG;AACvG,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,iLAAiL;AACxL,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,qHAAqH;AAC5H,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,uHAAuH;AAC9H,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,qGAAqG;AAC5G,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,2DAA2D;AAClE,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,mGAAmG;AAC1G,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,0EAA0E;AACjF,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,sGAAsG;AAC7G,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,sGAAsG;AAC7G,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,4DAA4D;AACnE,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,8DAA8D;AACrE,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,oHAAoH;AAC3H,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,oHAAoH;AAC3H,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,wKAAwK;AAC/K,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,mKAAmK;AAC1K,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,oIAAoI;AAC3I,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,8HAA8H;AACrI,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,6FAA6F;AACpG,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,iLAAiL;AACxL,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,mnBAAmnB;AAC1nB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,2GAA2G;AAClH,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,mFAAmF;AAC1F,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,2GAA2G;AAClH,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,wIAAwI;AAC/I,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,iMAAiM;AACxM,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,wGAAwG;AAC/G,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,iEAAiE;AACxE,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,4SAA4S;AACnT,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,sLAAsL;AAC7L,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,6JAA6J;AACpK,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,qSAAqS;AAC5S,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,2HAA2H;AAClI,KAAA;;AAKI,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAC5C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAoB;;MCjJ9B,OAAO,CAAA;AACV,IAAA,OAAgB,OAAO,GAAG,iBAAiB;AAC3C,IAAA,OAAgB,MAAM,GAAG,eAAe;AACxC,IAAA,OAAgB,cAAc,GAAG,kBAAkB;AACnD,IAAA,OAAgB,WAAW,GAAG,eAAe;AAC7C,IAAA,OAAgB,eAAe,GAAG,eAAe;AACjD,IAAA,OAAgB,WAAW,GAAG,YAAY;AAC1C,IAAA,OAAgB,UAAU,GAAG,IAAI,OAAO,EAA8B;AACtE,IAAA,OAAO,eAAe,GAAG,CAAC;AAC1B,IAAA,OAAO,oBAAoB,GAAG,EAAE;AAExC,IAAA,OAAO,OAAO,CAAC,OAAe,EAAE,KAAK,GAAG,mBAAmB,EAAA;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,WAAW,EAAE,SAAS;AACvB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,KAAK,CAAC,OAAe,EAAE,KAAK,GAAG,OAAO,EAAA;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,WAAW,EAAE,QAAQ;AACtB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,WAAW,CAAC,OAAe,EAAE,KAAK,GAAG,kBAAkB,EAAA;QAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;IACnC;AAEA,IAAA,OAAO,OAAO,CAAC,OAAe,EAAE,KAAK,GAAG,aAAa,EAAA;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,WAAW,EAAE,SAAS;AACvB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,IAAI,CAAC,OAAe,EAAE,KAAK,GAAG,aAAa,EAAA;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,WAAW,EAAE,SAAS;AACvB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,OAAO,CACZ,OAAe,EACf,KAAK,GAAG,gBAAgB,EACxB,WAAW,GAAG,eAAe,EAC7B,UAAU,GAAG,UAAU,EAAA;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,UAAU;YAChB,WAAW;YACX,UAAU;AACV,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;IAEA,OAAO,aAAa,CAClB,OAAO,GAAG,mCAAmC,EAC7C,KAAK,GAAG,qBAAqB,EAAA;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC;YACf,KAAK;YACL,OAAO;AACP,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;IAEA,OAAO,IAAI,CAAC,OAA0C,EAAA;AACpD,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B;QAEA,IAAI,CAAC,YAAY,EAAE;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAClD,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,YAAY,WAAW,GAAG,QAAQ,CAAC,aAAa,GAAG,IAAI;AAEvG,QAAA,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,KAAI;YACtC,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjD,YAAA,QAAQ,CAAC,SAAS,GAAG,iBAAiB;YACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;YAChD,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;YAE7D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC3C,KAAK,CAAC,SAAS,GAAG,CAAA,+BAAA,EAAkC,MAAM,CAAC,IAAI,EAAE;AACjE,YAAA,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACpC,YAAA,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;AACxC,YAAA,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;YAEvD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,CAAC,SAAS,GAAG,iBAAiB;AACpC,YAAA,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;YAE1C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,CAAA,6BAAA,EAAgC,MAAM,CAAC,IAAI,EAAE;AAC9D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjE,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1C,YAAA,KAAK,CAAC,EAAE,GAAG,gBAAgB;AAC3B,YAAA,KAAK,CAAC,SAAS,GAAG,gBAAgB;AAClC,YAAA,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;YAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,YAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;AACtC,YAAA,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO;YAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,YAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;YAEtC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACtD,YAAA,aAAa,CAAC,IAAI,GAAG,QAAQ;YAC7B,aAAa,CAAC,SAAS,GAAG,CAAA,iCAAA,EAAoC,MAAM,CAAC,IAAI,EAAE;AAC3E,YAAA,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;YAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACrD,YAAA,YAAY,CAAC,IAAI,GAAG,QAAQ;AAC5B,YAAA,YAAY,CAAC,SAAS,GAAG,yCAAyC;AAClE,YAAA,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU;YAE5C,IAAI,MAAM,GAAG,KAAK;AAClB,YAAA,MAAM,KAAK,GAAG,CAAC,MAAe,KAAU;AACtC,gBAAA,IAAI,MAAM;oBAAE;gBACZ,MAAM,GAAG,IAAI;AACb,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;AAClD,gBAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAElD,gBAAA,MAAM,CAAC,UAAU,CAAC,MAAK;oBACrB,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,EAAE;wBACzD,QAAQ,CAAC,KAAK,EAAE;oBAClB;oBACA,QAAQ,CAAC,MAAM,EAAE;oBACjB,IAAI,CAAC,gBAAgB,EAAE;AACvB,oBAAA,iBAAiB,EAAE,KAAK,IAAI;oBAC5B,OAAO,CAAC,MAAM,CAAC;gBACjB,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC;AAED,YAAA,MAAM,SAAS,GAAG,CAAC,KAAoB,KAAU;gBAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE;oBAClD,KAAK,CAAC,KAAK,CAAC;gBACd;AAEA,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;gBACpC;AACF,YAAA,CAAC;AAED,YAAA,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;AAE1D,YAAA,IAAI,MAAM,CAAC,eAAe,EAAE;gBAC1B,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;AAC3C,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;wBAC7B,KAAK,CAAC,KAAK,CAAC;oBACd;AACF,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;AAE/C,YAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,gBAAA,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;YACnC;AAEA,YAAA,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC;YAElC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,YAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;AAEtC,YAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE;AAClB,gBAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC9B;AAEA,YAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAC5B,YAAA,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AACzB,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AACvB,YAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1B,YAAA,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE1B,YAAA,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE;gBAC5C,QAAQ,CAAC,SAAS,EAAE;YACtB;iBAAO;AACL,gBAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;YACvC;AAEA,YAAA,IAAI,MAAM,CAAC,SAAS,EAAE;gBACpB,aAAa,CAAC,KAAK,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,MAAM,CAAC,OAAe,EAAE,UAA+C,EAAE,EAAA;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACrC;AAEA,IAAA,OAAO,KAAK,CAAC,OAAe,EAAE,UAA+C,EAAE,EAAA;AAC7E,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B;QAEA,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AAElE,QAAA,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,KAAI;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;YAC/C,KAAK,CAAC,SAAS,GAAG,CAAA,mBAAA,EAAsB,MAAM,CAAC,IAAI,EAAE;AACrD,YAAA,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AACxE,YAAA,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;YAEjF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;AAEtC,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC9C,gBAAA,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;AAChC,gBAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5B;YAEA,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACtD,YAAA,cAAc,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO;AAC3C,YAAA,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;YAEnC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;AAEtC,YAAA,IAAI,SAA6B;AACjC,YAAA,IAAI,OAA2B;AAC/B,YAAA,IAAI,iBAAiB,GAAG,MAAM,CAAC,QAAQ;YACvC,IAAI,aAAa,GAAG,CAAC;YACrB,IAAI,cAAc,GAAG,CAAC;YACtB,IAAI,MAAM,GAAG,KAAK;YAClB,IAAI,SAAS,GAAG,KAAK;YAErB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,GAAG;AACxD,kBAAE,QAAQ,CAAC,aAAa,CAAC,MAAM;kBAC7B,IAAI;YAER,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,SAAS,GAAG,mBAAmB;AACxC,gBAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW;YACxC;YAEA,MAAM,cAAc,GAAG,MAAW;AAChC,gBAAA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE;oBAChE;gBACF;gBAEA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;AAC3C,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC;AACjE,gBAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,gBAAgB,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;gBAC5E,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA,CAAA,CAAG;AAE/E,gBAAA,IAAI,gBAAgB,GAAG,CAAC,EAAE;AACxB,oBAAA,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC;gBACxD;AACF,YAAA,CAAC;AAED,YAAA,MAAM,KAAK,GAAG,CAAC,MAAe,KAAU;AACtC,gBAAA,IAAI,MAAM;oBAAE;gBACZ,MAAM,GAAG,IAAI;AACb,gBAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,oBAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;gBAChC;AACA,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,oBAAA,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACtC;AAEA,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACxC,gBAAA,MAAM,CAAC,UAAU,CAAC,MAAK;oBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACtC,KAAK,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC;AACjD,oBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AACpC,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1D,IAAI,CAAC,MAAM,EAAE;wBACb,IAAI,CAAC,iBAAiB,EAAE;oBAC1B;oBACA,OAAO,CAAC,MAAM,CAAC;gBACjB,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC;YACD,MAAM,UAAU,GAAG,MAAW;AAC5B,gBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE;oBAC7D;gBACF;AAEA,gBAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;gBAC9B,SAAS,GAAG,SAAS;AACrB,gBAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;AAClF,gBAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,iBAAiB,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;gBAC7E,IAAI,QAAQ,EAAE;oBACZ,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAA,CAAA,CAAG;gBACjF;AACA,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,oBAAA,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;oBACpC,OAAO,GAAG,SAAS;gBACrB;AACA,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;AACzC,YAAA,CAAC;YACD,MAAM,WAAW,GAAG,MAAW;AAC7B,gBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,KAAK,SAAS,IAAI,iBAAiB,IAAI,CAAC,EAAE;oBACvF;gBACF;AAEA,gBAAA,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;AAC3B,gBAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;AACpE,gBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBAC1C,IAAI,QAAQ,EAAE;AACZ,oBAAA,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC;gBACxD;AACF,YAAA,CAAC;AAED,YAAA,IAAI,MAAM,CAAC,UAAU,EAAE;gBACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,gBAAA,MAAM,CAAC,IAAI,GAAG,QAAQ;AACtB,gBAAA,MAAM,CAAC,SAAS,GAAG,iBAAiB;AACpC,gBAAA,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU;AACtC,gBAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,gBAAA,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;YAC7B;AAEA,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAChD,gBAAA,OAAO,CAAC,IAAI,GAAG,QAAQ;AACvB,gBAAA,OAAO,CAAC,SAAS,GAAG,kBAAkB;AACtC,gBAAA,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC;gBACzD,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,gBAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;AACrD,gBAAA,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC9B;AAEA,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;AACvB,YAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAC1B,YAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;YAE1B,IAAI,QAAQ,EAAE;AACZ,gBAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7B;YAEA,MAAM,aAAa,GAAG,MAAW;gBAC/B,IAAI,SAAS,EAAE;oBACb;gBACF;gBACA,SAAS,GAAG,IAAI;AAChB,gBAAA,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC;AAClD,gBAAA,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,WAAW,CAAC;AACnD,gBAAA,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC;AAC7C,gBAAA,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC;AAC/C,gBAAA,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE;AACvB,oBAAA,WAAW,EAAE;gBACf;AACF,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAElF,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE;gBACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;gBACpC;YACF;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,YAAY,CAAC,OAAe,EAAE,KAAK,GAAG,UAAU,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxD;AAEA,IAAA,OAAO,UAAU,CAAC,OAAe,EAAE,KAAK,GAAG,sBAAsB,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtE;AAEA,IAAA,OAAO,YAAY,CAAC,OAAe,EAAE,KAAK,GAAG,UAAU,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxE;AAEA,IAAA,OAAO,SAAS,CAAC,OAAe,EAAE,KAAK,GAAG,aAAa,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACrD;AAEA,IAAA,OAAO,QAAQ,CAAC,OAAe,EAAE,UAA+C,EAAE,EAAA;QAChF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACrC;AAEA,IAAA,OAAO,aAAa,CAAC,OAAe,EAAE,MAAM,GAAG,OAAO,EAAA;QACpD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;IAC3C;AAEA,IAAA,OAAO,aAAa,CAAC,OAAe,EAAE,MAAM,GAAG,sBAAsB,EAAA;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;IACzC;AAEA,IAAA,OAAO,mBAAmB,CAAC,OAAe,EAAE,MAAM,GAAG,UAAU,EAAA;QAC7D,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;IAC3C;AAEA,IAAA,OAAO,YAAY,CAAC,OAAe,EAAE,MAAM,GAAG,aAAa,EAAA;QACzD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACxC;AAEA,IAAA,OAAO,KAAK,CAAC,OAAe,EAAE,MAAM,GAAG,mBAAmB,EAAA;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IACtC;AAEA,IAAA,OAAO,YAAY,CAAC,OAAe,EAAE,MAAM,GAAG,kBAAkB,EAAA;QAC9D,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1C;AAEA,IAAA,OAAO,WAAW,CAAC,OAAe,EAAE,MAAM,GAAG,aAAa,EAAA;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IACtC;AAEA,IAAA,OAAO,SAAS,CACd,OAAe,EACf,MAAM,GAAG,gBAAgB,EACzB,cAAc,GAAG,eAAe,EAChC,aAAa,GAAG,UAAU,EAAA;AAE1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC;IACrE;IAEA,OAAO,iBAAiB,CACtB,OAAO,GAAG,mCAAmC,EAC7C,MAAM,GAAG,qBAAqB,EAAA;QAE9B,OAAO,IAAI,CAAC,IAAI,CAAC;AACf,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;IAEA,OAAO,SAAS,CAAC,OAA2B,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC;IACnD;IAEQ,OAAO,qBAAqB,CAAC,OAA0C,EAAA;QAC7E,MAAM,MAAM,GAAG,OAA2B;QAC1C,MAAM,MAAM,GAAG,OAAyB;QAExC,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;YAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;YACnE,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,SAAS;YACrE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,aAAa,IAAI,UAAU;YACnE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,eAAe,IAAI,KAAK;YAChE,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI;YACrE,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,cAAc,IAAI,KAAK;YACzE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI;SACxD;IACH;IAEQ,OAAO,qBAAqB,CAAC,OAA4C,EAAA;QAC/E,MAAM,MAAM,GAAG,OAA6B;QAC5C,MAAM,MAAM,GAAG,OAAyB;QACxC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;AAC3D,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,WAAW,GAAG,aAAa;QAEpF,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;YAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;YACtE,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;YAC3E,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI;YACpD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE;YACzD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI;YAC1D,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI;YACnE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC;SAC3D;IACH;AAEQ,IAAA,OAAO,sBAAsB,GAAA;QACnC,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,OAAO,KAAK;QAEjD,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAC7B,+EAA+E,CAChF;IACH;IAEQ,OAAO,kBAAkB,CAAC,IAAoB,EAAA;AACpD,QAAA,MAAM,GAAG,GAAgC;AACvC,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,UAAU;SACrB;AAED,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM;IAC5B;IAEQ,OAAO,kBAAkB,CAAC,IAAoB,EAAA;AACpD,QAAA,MAAM,GAAG,GAAgC;AACvC,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,SAAS;SACnB;AAED,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS;IAC/B;IAEQ,OAAO,sBAAsB,CAAC,QAA4B,EAAA;AAChE,QAAA,MAAM,GAAG,GAAoC;AAC3C,YAAA,oBAAoB,EAAE,aAAa;AACnC,YAAA,kBAAkB,EAAE,cAAc;AAClC,YAAA,oBAAoB,EAAE,UAAU;AAChC,YAAA,kBAAkB,EAAE,WAAW;AAC/B,YAAA,iBAAiB,EAAE,eAAe;AAClC,YAAA,iBAAiB,EAAE,YAAY;AAC/B,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,YAAY,EAAE,YAAY;SAC3B;AAED,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,aAAa;IACvC;IAEQ,OAAO,YAAY,CAAC,QAAyB,EAAA;QACnD,MAAM,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5C,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAClC,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,EAAE;AACpC,gBAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7B;AACA,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,CAAA,6BAAA,EAAgC,QAAQ,EAAE;AAC3D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;AACtC,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,OAAO,aAAa,GAAA;QAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1D,QAAA,IAAI,QAAQ,YAAY,WAAW,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAC9C;QAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;IAC1C;IAEQ,OAAO,sBAAsB,CAAC,KAAkB,EAAA;AACtD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,EAAE;AACnC,YAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAC5B;QAEA,MAAM,YAAY,GAAG,KAIpB;AAED,QAAA,IAAI,OAAO,YAAY,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,eAAe,CAAC,EAAE;YAC9F,YAAY,CAAC,WAAW,EAAE;QAC5B;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,OAAO,eAAe,GAAA;QAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;AAC7D,QAAA,IAAI,QAAQ,YAAY,WAAW,EAAE;AACnC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC9C,YAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE;AAC1C,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC;YACnC;AACA,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC7C,QAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc;AAChC,QAAA,OAAO,CAAC,SAAS,GAAG,qDAAqD;AACzE,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;AAC/C,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,OAAO,mBAAmB,GAAA;QAChC,OAAO,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,IAAI;IAC1E;AAEQ,IAAA,OAAO,OAAO,GAAA;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QACrD,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnC,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5C,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,OAAO,eAAe,CAAC,OAAoB,EAAE,MAAc,EAAA;QACjE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC;IACnD;IAEQ,OAAO,SAAS,CAAC,MAAc,EAAA;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3C,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM;IAChE;IAEQ,OAAO,aAAa,CAAC,IAAiB,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B;QAEA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE;IACnC;IAEQ,OAAO,oBAAoB,CAAC,IAAiB,EAAA;QACnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,MAAM;IAC3D;AAEQ,IAAA,OAAO,mBAAmB,CAAC,IAAiB,EAAE,UAAkB,EAAA;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;AAEnC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE;YAC/B,IAAI,CAAC,SAAS,EAAE;gBACd;YACF;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YAC3B,SAAS,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAC/D;IACF;IAEQ,OAAO,yBAAyB,CAAC,IAAiB,EAAA;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAc,oCAAoC,CAAC;AAEtF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,MAAM,EAAE;YAClB;QACF;QAEA,MAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3D,QAAA,SAAS,CAAC,SAAS,GAAG,0BAA0B;QAChD,SAAS,CAAC,WAAW,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAA,aAAA,EAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA,CAAE;AAExF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IAC7B;AAEQ,IAAA,OAAO,iBAAiB,GAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,EAAE;YACnC;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;YACzC;QACF;QAEA,MAAM,YAAY,GAAG,KAA6F;AAClH,QAAA,IAAI,OAAO,YAAY,CAAC,WAAW,KAAK,UAAU,IAAI,YAAY,CAAC,OAAO,GAAG,eAAe,CAAC,EAAE;YAC7F,YAAY,CAAC,WAAW,EAAE;QAC5B;QAEA,KAAK,CAAC,MAAM,EAAE;QACd,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE;IACxD;IAEQ,OAAO,YAAY,CAAC,IAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAgD;AACzD,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,MAAM;SACjB;AAED,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB;IAEQ,OAAO,YAAY,CAAC,IAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAgD;AACzD,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,eAAe;SACzB;AAED,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB;IAEQ,OAAO,UAAU,CAAC,IAA4B,EAAA;AACpD,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAsB;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC;QACzE,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC;QAE3E,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,IAAI,WAAW,CAAC;AAC9D,QAAA,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACvC,QAAA,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;AAEvC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,IAAI,IAAI,CAAA,CAAE,CAAC;AACjE,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC;AAC5C,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;QAC/C;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC;QAC3C;AAEA,QAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,OAAO,eAAe,CAAC,KAAoB,EAAE,SAAsB,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,SAAS,CAAC,gBAAgB,CACxB,0EAA0E,CAC3E,CACF,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE;AAExB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;QAErC,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;YACtC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;YAC7C,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,KAAK,EAAE;QACf;IACF;AAEQ,IAAA,OAAO,cAAc,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE;YAC9B,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;YACxD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzC;AAEA,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC;IAC3B;AAEQ,IAAA,OAAO,gBAAgB,GAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB;QAC1D;IACF;AAEQ,IAAA,OAAO,YAAY,GAAA;AACzB,QAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE;QAE3C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO;QACvB,KAAK,CAAC,WAAW,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8kBnB;AAED,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAClC;;AAGI,MAAO,QAAS,SAAQ,OAAO,CAAA;AAAG;;MC99C3B,eAAe,CAAA;IACT,MAAM,GAAG,IAAI,GAAG,CAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAC1B;AAED,IAAA,SAAS,CAAC,MAA4B,EAAA;AACpC,QAAA,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACrC,YAAA,IAAI,CAAC,KAAK;gBAAE;YAEZ,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,KAAK,EACL,OAAO,UAAU,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,CACnE;QACH;IACF;AAEA,IAAA,OAAO,CAAC,MAAiC,EAAA;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE;IAC/E;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjD;IAEA,OAAO,GAAA;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC;AAEQ,IAAA,UAAU,CAAC,MAAiC,EAAA;QAClD,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;IAC5C;uGA/BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCuCrB,MAAM,CAAA;AACA,IAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;IAE1C,MAAM,GAAG,QAAQ;IACjB,MAAM,GAAG,EAAE;IAEpB,IACI,MAAM,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,GAAG,KAAK,CAAA,EAAA,CAAI,GAAG,KAAK;IACnE;IAEU,SAAS,GAAG,SAAS;AAE/B,IAAA,IACc,UAAU,GAAA;QACtB,OAAO,IAAI,CAAC,SAAS;IACvB;IAEU,UAAU,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3C;uGApBW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCP;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gMAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAeU,MAAM,EAAA,UAAA,EAAA,CAAA;kBAlClB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,QAAA,EACT;;;;;;;;;;;;;;;;;GAiBT,EAAA,eAAA,EAagB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gMAAA,CAAA,EAAA;;sBAK9C;;sBACA;;sBAEA;;sBAOA,WAAW;uBAAC,sBAAsB;;;MCIxB,OAAO,CAAA;IACT,IAAI,GAAgB,SAAS;IAC7B,OAAO,GAAmB,MAAM;IAChC,IAAI,GAAgB,IAAI;IACxB,KAAK,GAAuC,SAAS;IACrD,QAAQ,GAAoB,WAAW;IACvC,IAAI,GAAG,EAAE;IACsB,QAAQ,GAAG,KAAK;IAChB,MAAM,GAAG,KAAK;IACd,GAAG,GAAG,KAAK;IACX,IAAI,GAAG,IAAI;IACnB,SAAS,GAAG,EAAE;AAE9C,IAAA,IAAc,UAAU,GAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;IAChG;uGAfW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAOE,gBAAgB,CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAChB,gBAAgB,uBAChB,gBAAgB,CAAA,EAAA,IAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAChB,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3D1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6nGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9CS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkDL,OAAO,EAAA,UAAA,EAAA,CAAA;kBApDnB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX,CAAC,MAAM,CAAC,EAAA,QAAA,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,6nGAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE;;;MCfnB,QAAQ,CAAA;AACsC,IAAA,UAAU;IAE1D,OAAO,GAAoB,OAAO;IAClC,IAAI,GAAiB,SAAS;IAC9B,IAAI,GAAiB,IAAI;IACzB,IAAI,GAAiB,QAAQ;IAC7B,IAAI,GAAG,EAAE;IACT,YAAY,GAAoB,OAAO;IACvC,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,KAAK;IACf,KAAK,GAAG,KAAK;IACkB,QAAQ,GAAG,KAAK;IACxB,SAAS,GAAG,EAAE;AAE3B,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;IAEjD,mBAAmB,GAAG,KAAK;AAErC,IAAA,IAAc,UAAU,GAAA;AACtB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACpE;IAEA,qBAAqB,GAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;AAC9C,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,iBAAiB,GAAG,CAAC;IAC3F;AAEU,IAAA,WAAW,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YAAE;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;uGAjCW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAYC,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/C1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gmHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAoCL,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAtCpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ,CAAC,MAAM,CAAC,EAAA,QAAA,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gmHAAA,CAAA,EAAA;;sBAG9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAErC;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE;;sBAE7B;;;AC5CH;;;;;AAKG;SACa,yBAAyB,GAAA;AACvC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;oFAAC;AACjC,IAAA,IAAI,YAAY,GAAe,MAAM,SAAS;IAE9C,MAAM,eAAe,GAAG,MACtB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAElE,OAAO;AACL,QAAA,IAAI,eAAe,GAAA;YACjB,OAAO,eAAe,EAAE;QAC1B,CAAC;AACD,QAAA,UAAU,CAAC,aAAsB,EAAA;AAC/B,YAAA,OAAO,eAAe,EAAE,GAAG,aAAa,GAAG,aAAa,IAAI,WAAW,EAAE;QAC3E,CAAC;QACD,kBAAkB,CAChB,WAA2B,EAC3B,OAAgB,EAChB,eAAwB,EACxB,OAAgB,EAChB,KAAc,EAAA;YAEd,IAAI,WAAW,KAAK,OAAO;AAAE,gBAAA,OAAO,KAAK;AAEzC,YAAA,MAAM,aAAa,GAAG,OAAO,IAAI,eAAe;AAChD,YAAA,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,KAAK;YAEhC,IAAI,WAAW,KAAK,QAAQ;AAAE,gBAAA,OAAO,IAAI;YACzC,IAAI,WAAW,KAAK,SAAS;AAAE,gBAAA,OAAO,OAAO;YAC7C,IAAI,WAAW,KAAK,OAAO;AAAE,gBAAA,OAAO,KAAK;YACzC,OAAO,OAAO,IAAI,KAAK;QACzB,CAAC;AACD,QAAA,iBAAiB,CAAC,EAAc,EAAA;YAC9B,YAAY,GAAG,EAAE;QACnB,CAAC;AACD,QAAA,gBAAgB,CAAC,QAAiB,EAAA;YAChC,IAAI,CAAC,eAAe,EAAE;AAAE,gBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjD,GAAG,CAAC,YAAY,EAAE;QACpB,CAAC;QACD,WAAW,CAAC,OAA6B,EAAE,KAA6B,EAAA;;;;AAItE,YAAA,YAAY,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,KAAK,CAAC,IAAI,EAAE;QACd,CAAC;KACF;AACH;;AC3DA,IAAI,gBAAgB,GAAG,CAAC;MAqEX,UAAU,CAAA;AACJ,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,WAAW,GAAG,CAAA,YAAA,EAAe,EAAE,gBAAgB,EAAE;AAEhC,IAAA,WAAW;IAEpC,EAAE,GAAG,KAAK,CAAC,EAAE;2EAAC;IACd,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAC;IACvB,WAAW,GAAG,KAAK,CAAC,EAAE;oFAAC;IACvB,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,IAAI,GAAG,KAAK,CAAC,KAAK;6EAAC;IAEnB,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAE5C,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;AAEZ,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;AAED,IAAA,IAAc,OAAO,GAAA;QACnB,OAAO,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,WAAW;IACtC;AAEA,IAAA,IAAc,aAAa,GAAA;QACzB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI;AACrC,cAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,YAAA;cACf,IAAI;IACV;AAEQ,IAAA,QAAQ,GAA+B,MAAM,SAAS;AAE9D,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA8B,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC1B,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAChD;AAEU,IAAA,YAAY,CAAC,KAAY,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB,KAAK,CAAC,MAA2B,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3D;QACF;QAEA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO,KAAK,IAAI;AACnE,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxB;AAEU,IAAA,WAAW,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE;QACtB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IACzB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACvD;uGAxGW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbV;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzDS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4gFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlDS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiEL,UAAU,EAAA,UAAA,EAAA,CAAA;kBAnEtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd,CAAC,MAAM,CAAC,EAAA,QAAA,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,4gFAAA,CAAA,EAAA;;sBAO9C,SAAS;uBAAC,aAAa;;;MCpFb,MAAM,CAAA;IACR,KAAK,GAAoB,EAAE;IAC3B,QAAQ,GAAG,EAAE;IACb,KAAK,GAAG,eAAe;IACvB,QAAQ,GAAmB,WAAW;IACtC,KAAK,GAAG,OAAO;IACf,QAAQ,GAAG,KAAK;IAChB,MAAM,GAAG,KAAK;IACd,SAAS,GAAG,YAAY;AAEd,IAAA,SAAS,GAAG,IAAI,YAAY,EAAsB;AAClD,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;IAEpD,OAAO,GAAG,KAAK;AAEzB,IAAA,IAAc,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC1D;AAEU,IAAA,WAAW,CAAC,IAAmB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAErF,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YACpE,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,KAAK;gBACpB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,IAAI,EAAE,IAAI;aACX;QACH;QAEA,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,IAAI,EAAE,IAAI;YACV,GAAG,IAAI,CAAC,KAAK;SACd;IACH;IAEU,QAAQ,GAAA;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;AAEU,IAAA,WAAW,CAAC,IAAmB,EAAA;QACvC,IAAI,IAAI,CAAC,aAAa;YAAE;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE;IACf;IAEU,UAAU,GAAA;QAClB,MAAM,MAAM,GAAG,CAAC;AAChB,QAAA,MAAM,IAAI,GAA6D;AACrE,YAAA,cAAc,EAAE;AACd,gBAAA;AACE,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;AACF,aAAA;AACD,YAAA,WAAW,EAAE;AACX,gBAAA;AACE,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;AACF,aAAA;AACD,YAAA,eAAe,EAAE;AACf,gBAAA;AACE,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,CAAC,MAAM;AACjB,iBAAA;AACF,aAAA;AACD,YAAA,YAAY,EAAE;AACZ,gBAAA;AACE,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,CAAC,MAAM;AACjB,iBAAA;AACF,aAAA;SACF;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B;AAEQ,IAAA,iBAAiB,CAAC,KAAc,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEQ,IAAA,gBAAgB,CAAC,IAA4B,EAAA;AACnD,QAAA,MAAM,IAAI,GAA4D;AACpE,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,OAAO,EAAE,QAAQ;SAClB;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;IAC/B;uGAlHW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbnB,w4EAkFA,EAAA,MAAA,EAAA,CAAA,63FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1EY,mBAAmB,qkCAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKrD,MAAM,EAAA,UAAA,EAAA,CAAA;kBAPlB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,OAAA,EACV,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAA,eAAA,EAGhD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w4EAAA,EAAA,MAAA,EAAA,CAAA,63FAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;MEeU,WAAW,CAAA;AAEd,IAAA,QAAQ;AAER,IAAA,YAAY;IAEX,KAAK,GAAQ,EAAE;IACf,QAAQ,GAA4B,EAAE;IACtC,QAAQ,GAA2B,EAAE;IACrC,oBAAoB,GAAoC,QAAQ;IAChE,OAAO,GAAuB,EAAE;IAChC,KAAK,GAAG,CAAC;IACT,QAAQ,GAAG,KAAK;IAChB,cAAc,GAAG,KAAK;IACtB,WAAW,GAAG,IAAI;IAClB,gBAAgB,GAAG,GAAG;IACtB,QAAQ,GAAG,EAAE;IACb,kBAAkB,GAAG,CAAC;IACtB,MAAM,GAAG,kCAAkC;IAC3C,OAAO,GAAqB,IAAwB;IACpD,MAAM,GAAG,KAAK;IACd,eAAe,GAAG,IAAI;IACtB,mBAAmB,GAAG,WAAW;IACjC,UAAU,GAAG,8BAA8B;IAC3C,gBAAgB,GAAG,kDAAkD;IACrE,gBAAgB,GAAG,GAAG;AAEZ,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,IAAA,MAAM,GAAG,IAAI,YAAY,EAA8B;AACvD,IAAA,WAAW,GAAG,IAAI,YAAY,EAA8B;AAC5D,IAAA,UAAU,GAAG,IAAI,YAAY,EAAoB;AACjD,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;IAE7C,QAAQ,GAAG,EAAE;IACb,YAAY,GAAmC,IAAI;IACrD,eAAe,GAAyC,IAAI;IAC5D,eAAe,GAAQ,EAAE;IACzB,kBAAkB,GAAyC,IAAI;IAC/D,0BAA0B,GAAG,IAAI;IACjC,wBAAwB,GAAG,KAAK;AAExC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACpB,YAAA,MAAM,YAAY,GAAI,OAAO,CAAC,OAAO,CAAC,CAAC,aAAiC,IAAI,IAAI,CAAC,eAAe;AAChG,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC;AAE5E,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK;AACjC,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,YAAA,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;QACrD;QAEA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;AAC1F,YAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;QACxC;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5D,IAAI,IAAI,CAAC,kBAAkB;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACpE;IAEU,YAAY,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,oBAAoB,CAAC;AACtF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,KAAK,MAAM,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;QACnG;AACA,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,UAAU,CAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EACpD,IAAI,CAAC,gBAAgB,CACtB;IACH;IAEU,eAAe,GAAA;QACvB,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B;IAEU,KAAK,CAAC,IAAO,EAAE,KAAuB,EAAA;AAC9C,QAAA,OAAQ,IAAgC,CAAC,KAAK,CAAC;IACjD;AAEU,IAAA,UAAU,CAAC,OAA8B,EAAE,IAAO,EAAE,MAAc,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;QAC7C,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;QACpE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,GAAG;AACrE,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,GAAG,IAAI,GAAG,IAAI;AAC3D,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,GAAG,QAAQ,GAAG,UAAU;AACnE,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YACvF,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;QAC5C;AACA,QAAA,IACE,OAAO,CAAC,IAAI,KAAK,QAAQ;YACzB,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,IAAI,KAAK,QAAQ;AACzB,YAAA,OAAO,CAAC,IAAI,KAAK,YAAY,EAC7B;YACA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;QAC7C;AACA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEU,IAAA,SAAS,CAAC,OAA8B,EAAE,IAAO,EAAE,MAAc,EAAA;AACzE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK;AAC/D,QAAA,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;IAClD;AAEU,IAAA,SAAS,CAAC,OAA8B,EAAE,IAAO,EAAE,MAAc,EAAA;AACzE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;QAC7C,OAAO,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;IAC7F;AAEU,IAAA,WAAW,CAAC,OAA8B,EAAA;AAClD,QAAA,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,YAAY;IAC9C;IAEU,SAAS,CAAC,OAA8B,EAAE,IAAO,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAClD,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,GAAG,OAAO,GAAG,SAAS;AACjE,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,GAAG,OAAO,GAAG,QAAQ;AAClE,QAAA,OAAO,QAAQ;IACjB;AAEU,IAAA,gBAAgB,CAAC,IAAO,EAAA;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;YACrC,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;YAC7D,OAAO,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI;AACvC,QAAA,CAAC,CAAC;IACJ;IAEU,WAAW,CAAC,MAA4B,EAAE,IAAO,EAAA;QACzD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK;IAC/E;IAEU,UAAU,CAAC,MAA4B,EAAE,IAAO,EAAA;AACxD,QAAA,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/D,QAAA,OAAO,MAAM,CAAC,IAAI,IAAI,QAAQ;IAChC;AAEU,IAAA,gBAAgB,CAAC,IAAO,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACrD,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;QACxD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;IAC/C;AAEU,IAAA,YAAY,CAAC,IAAO,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YAClD,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK;AACpD,YAAA,IAAI,EAAE,MAAM;AACb,SAAA,CAAC,CAAC;IACL;IAEU,eAAe,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9D;IAEU,iBAAiB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB;IACvE;AAEU,IAAA,cAAc,CACtB,MAA4B,EAC5B,IAAO,EACP,MAAc,EAAA;AAEd,QAAA,IAAI,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;YAAE;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5C;AAEU,IAAA,kBAAkB,CAC1B,MAA6C,EAC7C,IAAO,EACP,MAAc,EAAA;QAEd,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE;QAClB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IAChD;AAEU,IAAA,WAAW,CAAC,OAA8B,EAAE,IAAO,EAAE,MAAc,EAAA;AAC3E,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;QACjD,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK;YAAE;AAClD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAChC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;AAC/C,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,MAAM,CAAC,SAAS,EAAE;AAChD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,OAAO;YACP,IAAI;YACJ,MAAM;YACN,GAAG;YACH,GAAG;AACJ,SAAA,CAAC;IACJ;IAEU,YAAY,GAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;QAC/C,IAAI,MAAM,EAAE,IAAI;YAAE,MAAM,CAAC,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEU,IAAA,sBAAsB,CAAC,KAAiB,EAAA;AAChD,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,iBAAiB,EAAE;YAC7C,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAEU,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;IACtC;IAEU,mBAAmB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;QAEpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC;AACpE,QAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IAC1C;AAEU,IAAA,gBAAgB,CAAC,KAAY,EAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAmC;AAC1D,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY;AAC3F,QAAA,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IAC1C;AAEmB,IAAA,SAAS,GAAG,CAAC,OAAe,EAAE,IAAO,KACrD,IAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;AAEjD,IAAA,0BAA0B,CAAC,cAAuB,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACvC;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;YAEpB,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;YACxC;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACnC,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,CAAC,YAAiB,EAAE,aAAkB,EAAA;QAC9D,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACjD,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;AAC9C,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,MAAM,KAC5C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CACrE;IACH;AAEQ,IAAA,SAAS,CAAC,IAAO,EAAA;QACvB,OAAQ,IAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;IAChE;AAEQ,IAAA,iBAAiB,CAAC,gBAAwB,EAAA;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrE,QAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAE7C,QAAA,IAAI,gBAAgB,GAAG,YAAY,EAAE;AACnC,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;YACtC;QACF;QAEA,IACE,gBAAgB,IAAI,QAAQ;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,cAAc;YACnB,CAAC,IAAI,CAAC,QAAQ;AACd,YAAA,IAAI,CAAC,0BAA0B;YAC/B,IAAI,CAAC,wBAAwB,EAC7B;AACA,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;IACF;IAEQ,cAAc,CAAC,KAAc,EAAE,OAA8B,EAAA;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,GAAG;AAEtB,QAAA,MAAM,eAAe,GAA+C;AAClE,YAAA,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AAC5D,YAAA,SAAS,EAAE;AACT,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;SAC7C;AAED,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAC5B,OAAO,CAAC,MAAM,IAAI,OAAO,EACzB,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,CACjE,CAAC,MAAM,CAAC,KAAK,CAAC;QACjB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;IACF;AAEQ,IAAA,eAAe,CAAC,KAAc,EAAA;QACpC,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK;QAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC7B,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK;QACrD;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,eAAe,CAAC,KAAc,EAAE,OAA8B,EAAA;AACpE,QAAA,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AAElD,QAAA,MAAM,QAAQ,GAA6B;AACzC,YAAA,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;SACjC;AAED,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;YACzD,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;QAC3D;AAEA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC7B,YAAA,QAAQ,CAAC,KAAK,GAAG,UAAU;YAC3B,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK;YAC3C,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;YACzD,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;QAC3D;AAEA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;AACjC,YAAA,QAAQ,CAAC,KAAK,GAAG,SAAS;YAC1B,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;YACzD,QAAQ,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC;QAC3D;AAEA,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAClF;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;IACF;uGA7WW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACX,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCrC,8sRAqOA,EAAA,MAAA,EAAA,CAAA,qlYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnMY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,4FAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK7D,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAA,eAAA,EAGxD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8sRAAA,EAAA,MAAA,EAAA,CAAA,qlYAAA,CAAA,EAAA;;sBAG9C,SAAS;uBAAC,wBAAwB;;sBAElC,SAAS;uBAAC,cAAc;;sBAGxB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;AExBH,IAAI,kBAAkB,GAAG,CAAC;MA6Lb,YAAY,CAAA;AAEN,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAChD,IAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,EAAE,kBAAkB,EAAE;AACtD,IAAA,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAC5D,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;AACe,IAAA,cAAc,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACjE,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;AACe,IAAA,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AAChE,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;IAEO,KAAK,GAAG,OAAO;IACf,WAAW,GAAG,sBAAsB;IACpC,IAAI,GAAqB,OAAO;IAChC,IAAI,GAAG,EAAE;IACT,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAC5B,OAAO,GAAsB,IAAI;IACjC,OAAO,GAAsB,IAAI;IACjD,SAAS,GAAG,IAAI;IAChB,IAAI,GAAG,KAAK;IAEZ,KAAK,GAAG,KAAK,CAAoB,IAAI;8EAAC;AAC5B,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;AAEkB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAqB;AACvD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;IAEnD,IAAI,GAAG,KAAK;IACZ,WAAW,GAAkB,IAAI;IACjC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;IACxC,YAAY,GAAiB,MAAM;AAC1B,IAAA,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,IAAA,cAAc,GAAmB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAEtF,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;IACpC;AAEA,IAAA,IAAc,UAAU,GAAA;AACtB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,WAAW;IACvC;AAEA,IAAA,IAAc,QAAQ,GAAA;AACpB,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AAEA,IAAA,IAAc,UAAU,GAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD;AAEA,IAAA,IAAc,WAAW,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,UAAU;AACxD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7E,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,GAAA,EAAM,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA,CAAE;IAC7D;AAEA,IAAA,IAAc,iBAAiB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;AAAE,YAAA,OAAO,kBAAkB;AAC3D,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO;AAAE,YAAA,OAAO,YAAY;AACtD,QAAA,OAAO,iBAAiB;IAC1B;AAEA,IAAA,IAAc,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK;AAC3B,cAAE;AACF,cAAE,IAAI,CAAC,YAAY,KAAK;AACtB,kBAAE;kBACA,iBAAiB;IACzB;AAEA,IAAA,IAAc,SAAS,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK;AAC3B,cAAE;AACF,cAAE,IAAI,CAAC,YAAY,KAAK;AACtB,kBAAE;kBACA,iBAAiB;IACzB;AAEA,IAAA,IAAc,MAAM,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AACxC,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;YAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YACzE,OAAO;gBACL,KAAK;AACL,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrD,QAAQ,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC;aACnD;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAc,KAAK,GAAA;AACjB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;AAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK;AACxC,YAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAY,aAAa,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE;IAC1D;AAEA,IAAA,IAAc,IAAI,GAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9C,QAAA,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;AAC/E,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;YAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;YACrF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5B,OAAO;gBACL,GAAG;AACH,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;gBACnB,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC1D,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,gBAAA,QAAQ,EACN,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;AACvD,qBAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;aAC3D;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAc,YAAY,GAAA;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5D,QAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG;AACpC,kBAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;kBAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC;AACA,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAc,eAAe,GAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM;AAC1C,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY;IACzE;AAEA,IAAA,IAAc,aAAa,GAAA;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG;AACpC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY;IACnE;AAEQ,IAAA,OAAO,GAAuC,MAAM,SAAS;AAErE,IAAA,UAAU,CAAC,KAAwB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAsC,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACnB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;IAEA,KAAK,GAAA;AACH,QAAA,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,aAAa,CAAoB,QAAQ,CAAC,EAAE,KAAK,EAAE;IAC3G;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAC7C;IAEU,SAAS,GAAA;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,KAAK,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxF;aAAO;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzF;IACF;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxF;aAAO;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzF;IACF;IAEU,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;QAC7B;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;AACxC,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;QAC7B;IACF;AAEU,IAAA,WAAW,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;IAC5B;AAEU,IAAA,UAAU,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;IAC7B;IAEU,OAAO,GAAA;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AACpC,QAAA,IACE,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO;AACzD,aAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1D;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI;AAC5D,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AACzB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC;IACJ;AAEU,IAAA,UAAU,CAAC,IAAiB,EAAA;QACpC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC3C;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YAC9C;QACF;QAEA,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACf,cAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM;AACvC,cAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAC5C;QACD,IAAI,CAAC,KAAK,EAAE;IACd;AAEU,IAAA,KAAK,CAAC,KAAiB,EAAA;QAC/B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;AAEU,IAAA,UAAU,CAAC,GAAW,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,KAAK,GAAG;AACvD,QAAA,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC;IACrE;AAEU,IAAA,YAAY,CAAC,GAAW,EAAA;QAChC,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,KAAK,GAAG;IAC5C;AAEU,IAAA,UAAU,CAAC,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,KAAK,GAAG;IACzC;AAEU,IAAA,SAAS,CAAC,GAAW,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK;AACtB,QAAA,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM;AACrD,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG;AACtD,QAAA,OAAO,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,MAAM;IACpC;AAEU,IAAA,UAAU,CAAC,GAAW,EAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG;IACvE;AAEU,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC3E,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEU,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACjC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE;YACnC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,IAAI;IAChE;AAEQ,IAAA,QAAQ,CAAC,KAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,EAAE,MAAM;AACnE,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpF;AAEQ,IAAA,cAAc,CAAC,KAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI;QAC/E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;QACnD,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,YAAA,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,IAAI;SACvD;IACH;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE;IACnF;AAEQ,IAAA,OAAO,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACzD,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;AAC3C,QAAA,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI;AAC3B,YAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG;AAEtB,cAAE;cACA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B;AAEQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3E;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;AAEQ,IAAA,WAAW,CAAC,KAAW,EAAA;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC;AAEQ,IAAA,KAAK,CAAC,IAAU,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;IAClC;AAEQ,IAAA,YAAY,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzD;IAEQ,qBAAqB,CAAC,IAAY,EAAE,KAAa,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,QAAA,OAAO,EACL,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO;AACxD,aAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3D;IACH;AAEQ,IAAA,oBAAoB,CAAC,IAAY,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,IAAI,QAAQ;AAC7B,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,IAAI,QAAQ;AAC5B,QAAA,OAAO,EACL,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO;AACxD,aAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAC3D;IACH;uGAxcW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjLS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ksPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1KS,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyL5C,YAAY,EAAA,UAAA,EAAA,CAAA;kBA3LxB,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAA,QAAA,EAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyKT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,ksPAAA,CAAA,EAAA;;sBAwB9C;;sBACA;;sBACA;;sBACA;;sBAiBA,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE;;sBACtB,KAAK;uBAAC,EAAE,KAAK,EAAE,KAAK,EAAE;;sBACtB;;sBACA;;sBAuBA;;sBACA;;;MChRU,cAAc,GAAG,IAAI,cAAc,CAAU,gBAAgB;MAC7D,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;;MC7BxE,WAAW,CAAA;AAIO,IAAA,GAAA;AAHpB,IAAA,MAAM;AACN,IAAA,EAAE;AAEX,IAAA,WAAA,CAA6B,GAA0B,EAAA;QAA1B,IAAA,CAAA,GAAG,GAAH,GAAG;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACxB,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;IAClB;AAEA,IAAA,KAAK,CAAC,MAAU,EAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IACxB;IAEA,UAAU,CAAC,KAAuB,EAAE,MAAwB,EAAA;QAC1D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AAClC,QAAA,OAAO,IAAI;IACb;AACD;;MC8CY,aAAa,CAAA;AACL,IAAA,OAAO,GAAG,MAAM,CAAoB,WAAW,CAAC;AAChD,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AACM,IAAA,WAAW;IAEnE,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,KAAK,EAAE;YAC3C;QACF;QAEA,cAAc,CAAC,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACzD,QAAA,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,4BAA4B,EAAE,EAAE,EAAE,CAAC;IAClE;AAEA,IAAA,IAAc,gBAAgB,GAAA;QAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5F;IAEQ,4BAA4B,GAAA;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;QAC5C,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAC/B;YACE,qBAAqB;YACrB,mBAAmB;YACnB,4CAA4C;YAC5C,0BAA0B;YAC1B,wBAAwB;YACxB,wBAAwB;YACxB,iCAAiC;AAClC,SAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;AAED,QAAA,MAAM,EAAE,KAAK,IAAI;IACnB;IAEQ,YAAY,GAAA;QAClB,OAAO,OAAO,MAAM,KAAK,WAAW;AAClC,YAAA,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;AACvC,YAAA,MAAM,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC,OAAO;IACtE;uGA3CW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGU,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3DlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,83HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArDS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,yRAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyDhD,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3DzB,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAA,QAAA,EAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,83HAAA,CAAA,EAAA;;sBAK9C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;MC/DnC,QAAQ,CAAA;AACF,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAExC,IAAA,IAAI,CACF,SAAkB,EAClB,MAAA,GAA4B,EAAE,EAAA;AAE9B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS;AACvC,QAAA,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,WAAW;AAC7B,YAAA,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;AACvC,YAAA,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC;QACxE,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,IAAI,oBAAoB;AAC9E,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,qBAAqB;AACjF,QAAA,IAAI,SAA0B;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC7B,aAAa,EACb;AACE,YAAA,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;YACvC,KAAK;YACL,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI;YAC3C,QAAQ;YACR,SAAS;AACT,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,2BAA2B;YAC1C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;AACjD,YAAA,YAAY,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;AAChD,YAAA,iBAAiB,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;AACjD,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,gBAAgB;AAC/C,YAAA,YAAY,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;AAC1C,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM;AAC5C,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,CAAC,GAAgC,KAAI;AAC9C,gBAAA,SAAS,GAAG,IAAI,WAAW,CAAI,GAA4B,CAAC;gBAC5D,OAAO;oBACL,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AAClD,oBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC/C,oBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE;iBAC9C;YACH,CAAC;AACF,SAAA,CACF;AAED,QAAA,OAAO,SAAS,IAAI,IAAI,WAAW,CAAI,MAA+B,CAAC;IACzE;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IACxB;AAEQ,IAAA,QAAQ,CAAC,IAA8B,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,OAAO,EAAE,gCAAgC;AACzC,YAAA,OAAO,EAAE,gCAAgC;AACzC,YAAA,MAAM,EAAE,gCAAgC;AACxC,YAAA,QAAQ,EAAE,MAAM;SACjB;AACD,QAAA,OAAO,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;IAClC;IAEQ,YAAY,CAAC,MAAsB,EAAE,UAAmB,EAAA;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;cACzC,MAAM,CAAC;cACP,MAAM,CAAC;AACP,kBAAE,CAAC,MAAM,CAAC,UAAU;kBAClB,EAAE;QACR,OAAO;YACL,mBAAmB;AACnB,YAAA,CAAA,mBAAA,EAAsB,MAAM,CAAC,MAAM,IAAI,SAAS,CAAA,CAAE;AAClD,YAAA,IAAI,UAAU,GAAG,CAAC,+BAA+B,CAAC,GAAG,EAAE,CAAC;AACxD,YAAA,GAAG,KAAK;SACT;IACH;uGA3EW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAR,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAQ,cADK,MAAM,EAAA,CAAA;;2FACnB,QAAQ,EAAA,UAAA,EAAA,CAAA;kBADpB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCkFrB,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,6EApFhB,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2/CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAoFf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAtF3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,QAAA,EACnB,CAAA,cAAA,CAAgB,EAAA,eAAA,EAkFT,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,2/CAAA,CAAA,EAAA;;;MChFpC,aAAa,CAAA;AACP,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AAExB,IAAA,MAAM;IAGpB,KAAK,GAAA;QACb,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;uGARW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;sBAIE,KAAK;uBAAC,eAAe;;sBAErB,YAAY;uBAAC,OAAO;;MASV,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;MCXY,QAAQ,CAAA;IACV,OAAO,GAAG,WAAW;IACrB,KAAK,GAAG,gCAAgC;IACxC,OAAO,GAAG,EAAE;IACZ,MAAM,GAAG,KAAK;IACd,QAAQ,GAAG,KAAK;AAChB,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;uGAN7B,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,+LCRrB,gnBAuBA,EAAA,MAAA,EAAA,CAAA,ioDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDfa,QAAQ,EAAA,UAAA,EAAA,CAAA;kBANpB,SAAS;+BACE,WAAW,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gnBAAA,EAAA,MAAA,EAAA,CAAA,ioDAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MEkBU,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACd,IAAA,WAAW;AACb,IAAA,SAAS;IAEjC,oBAAoB,GAAuB,EAAE;IAErD,IACI,QAAQ,CAAC,KAA+C,EAAA;QAC1D,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7G;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,oBAAoB;IAClC;IAES,MAAM,GAAG,mBAAmB;IAC5B,WAAW,GAAG,oDAAoD;IAClE,MAAM,GAAG,KAAK;IACd,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,IAAI;AAEL,IAAA,WAAW,GAAG,IAAI,YAAY,EAAoB;AAClD,IAAA,SAAS,GAAG,IAAI,YAAY,EAAoB;AAChD,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;IAE1C,YAAY,GAA4B,IAAI;IAC5C,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,CAAC;IACZ,WAAW,GAAG,KAAK;IACnB,QAAQ,GAAG,EAAE;IACb,eAAe,GAAG,CAAC;IACnB,eAAe,GAAG,CAAC;AAErB,IAAA,KAAK;AACL,IAAA,YAAY;AACZ,IAAA,aAAa;IACb,cAAc,GAAG,CAAC;AAE1B,IAAA,IAAI,CAAC,OAA4B,EAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO;AACnD,cAAE;AACF,cAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,oBAAoB,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzE;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IACzB;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACrB;IAEA,KAAK,GAAA;QACH,IAAI,CAAC,MAAM,EAAE;IACf;AAEU,IAAA,KAAK,CAAC,OAAyB,EAAA;QACvC,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;QACxB,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;AAC9C,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,MAAM,CAAC,SAAS,EAAE;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;AACvB,gBAAA,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC;IAEU,MAAM,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;QAC9C,IAAI,MAAM,EAAE,IAAI;YAAE,MAAM,CAAC,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEU,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,iBAAiB,EAAE;YAC7C,IAAI,CAAC,MAAM,EAAE;QACf;IACF;IAEU,gBAAgB,CAAC,OAAyB,EAAE,KAAkB,EAAA;QACtE,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;IAC9B;AAEU,IAAA,WAAW,CAAC,OAAyB,EAAA;QAC7C,MAAM,IAAI,GAAG,CAAA,EAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,OAAO,CAAC,MAAM,CAAA,CAAA,EAAI,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;AACnF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,QAAQ;AACzF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AACrE,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,OAAO;AACpH,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AACrE,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,SAAS;IAClB;AAEU,IAAA,YAAY,CAAC,OAAyB,EAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QACtC,IAAI,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,OAAO;QACrC,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,MAAM;AACrC,QAAA,OAAO,IAAI;IACb;AAEU,IAAA,QAAQ,CAAC,OAAgC,EAAA;AACjD,QAAA,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,QAAQ;IAC5D;AAEU,IAAA,KAAK,CAAC,OAAgC,EAAA;AAC9C,QAAA,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,KAAK;IACzD;AAEU,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACtD;IAEU,kBAAkB,GAAA;QAC1B,OAAO,IAAI,CAAC;cACR,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;cACzE,CAAC,CAAC;IACR;IAEU,mBAAmB,GAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;QACxC,IAAI,MAAM,IAAI,CAAC;YAAE;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC;IAEU,oBAAoB,GAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC;AAEU,IAAA,WAAW,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AACtD,YAAA,KAAK,IAAI,CAAC,mBAAmB,EAAE;QACjC;IACF;IAEU,eAAe,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AACtD,YAAA,KAAK,IAAI,CAAC,mBAAmB,EAAE;QACjC;IACF;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,GAAG;IAC5C;IAEU,iBAAiB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC;YAAE;AAC/B,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,mBAAmB,EAAE;IACjC;IAEU,kBAAkB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;YAAE;AAC3E,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,mBAAmB,EAAE;IACjC;AAEU,IAAA,aAAa,CAAC,OAAyB,EAAA;AAC/C,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;AAAE,YAAA,OAAO,EAAE;AAC/F,QAAA,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,MAAM;QAE7D,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM;QAC1B,IAAI,MAAM,GAAG,CAAC;AACd,QAAA,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,KAAK,IAAI,IAAI;YACb,MAAM,IAAI,CAAC;QACb;QACA,OAAO,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAE;IAC/D;IAEQ,MAAM,SAAS,CAAC,OAAyB,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AACvC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,SAAS,IAAI,MAAM,WAAW,CAAC,OAAO,CAAgC;AAC5E,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,EAAE;AACjC,gBAAA,MAAM,SAAS,CAAC,OAAO,IAAI;gBAC3B;YACF;AAEA,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,QAAQ;YACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC3F,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE;QAClC;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;gBAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,4CAA4C;AAC5D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEQ,IAAA,MAAM,mBAAmB,GAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;AAE3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAEvB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AACpE,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;gBAAE;AAEnC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;YAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,QAAQ;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AAE5D,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC;AACrD,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACzD,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;AAC/C,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAA,EAAA,CAAI;YAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAA,CAAI;AAE5C,YAAA,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,YAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;AAEzD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAkB;AACxF,YAAA,IAAI,CAAC,aAAa,GAAG,UAAU;YAC/B,MAAM,UAAU,CAAC,OAAO;AACxB,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;gBAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAK,KAA2B,EAAE,IAAI,KAAK,6BAA6B;gBAAE;AAC1E,YAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;gBAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,4CAA4C;AAC5D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEQ,IAAA,MAAM,YAAY,GAAA;QACxB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;AAEjC,QAAA,MAAM,KAAK,GAAG,MAAM,OAAO,YAAY,CAAC;AACxC,QAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,GAAG,IAAI,GAAG,CAC3C,qCAAqC,EACrC,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC,QAAQ,EAAE;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,OAAO,KAAK;IACd;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,KAAK,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;IAC1B;IAEQ,iBAAiB,CAAC,OAA4B,EAAE,MAAc,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACtC,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;AAClH,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;QAE7D,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;YACjD,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,GAAG;AACH,YAAA,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,WAAW,EAAE,OAAO,CAAC,YAAY;SAClC;IACH;AAEQ,IAAA,oBAAoB,CAAC,OAA4B,EAAA;AACvD,QAAA,OAAO,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO;IAChD;IAEQ,iBAAiB,CAAC,IAAY,EAAE,WAAmB,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACvD,QAAA,OAAO,CAAA,KAAA,EAAQ,WAAW,CAAA,QAAA,EAAW,KAAK,EAAE;IAC9C;IAEQ,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE;AAC9D,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AAC3C,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;QACjC;AACA,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,WAAW;AAClD,QAAA,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,YAAY;AACrD,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,WAAW;AAClD,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,YAAY;AACpD,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,eAAe;AACtD,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,iBAAiB;AACxD,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,mEAAmE;AAC3G,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,0BAA0B;AACjE,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,UAAU;AACjD,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,iBAAiB;AACxD,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,iBAAiB;AACxD,QAAA,OAAO,0BAA0B;IACnC;AAEQ,IAAA,gBAAgB,CAAC,OAAyB,EAAA;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC;AACvE,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;AAC9C,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;IAChD;AAEQ,IAAA,YAAY,CAAC,MAAc,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAClC;AACA,QAAA,OAAO,KAAK;IACd;uGAhWW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCzB,+zSAgOA,EAAA,MAAA,EAAA,CAAA,23WAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrMY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,CAAC,MAAM,CAAC,EAAA,eAAA,EAGA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+zSAAA,EAAA,MAAA,EAAA,CAAA,23WAAA,CAAA,EAAA;;sBAI9C,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,WAAW;;sBAIrB;;sBASA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;;MEhDU,mBAAmB,CAAA;AACb,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE1D,IAAA,UAAU;AACV,IAAA,YAAY;AAEpB,IAAA,IAAI,CACF,OAAoD,EACpD,QAAA,GAAoC,EAAE,EAAA;QAEtC,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC;AAC7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1F,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE;YAC1F,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACtD,SAAA,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACxC,IAAI,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAClE;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;AAE7C,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;AACxF,QAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC;QACjE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;AACxF,QAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAE9F,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAE/E,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAEpE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ;IACnC;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE;QACnC,IAAI,CAAC,OAAO,EAAE;IAChB;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;uGArDW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACelC,IAAI,kBAAkB,GAAG,CAAC;MAgBb,YAAY,CAAA;AACN,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,IAAA,WAAW,GAAG,CAAA,eAAA,EAAkB,EAAE,kBAAkB,EAAE;AAErC,IAAA,WAAW;IAEpC,EAAE,GAAG,EAAE;IACP,KAAK,GAAG,sBAAsB;IAC9B,WAAW,GAAG,6BAA6B;IAC3C,WAAW,GAAG,kEAAkE;IAChF,IAAI,GAAG,EAAE;IACT,MAAM,GAAG,EAAE;IACX,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,CAAC;IACZ,SAAS,GAAG,CAAC;IACb,OAAO,GAAwB,UAAU;IACzC,WAAW,GAAG,IAAI;IAClB,SAAS,GAAG,IAAI;IAChB,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;IAChB,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,KAAK;AAEF,IAAA,WAAW,GAAG,IAAI,YAAY,EAAqB;AACnD,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,QAAQ,GAAG,IAAI,YAAY,EAA0B;AACrD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAoB;AAC9C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAoB;IAEvD,KAAK,GAAuB,EAAE;IAC9B,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,KAAK;IACf,aAAa,GAA2B,EAAE;AAE5C,IAAA,QAAQ,GAAuC,MAAM,SAAS;AAC9D,IAAA,SAAS,GAAe,MAAM,SAAS;AAE/C,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AAEA,IAAA,IAAc,UAAU,GAAA;QACtB,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAc,YAAY,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,WAAW;AAC/C,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW;AAC3E,QAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,yBAAyB;IACtD;AAEA,IAAA,IAAc,UAAU,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,mBAAmB;IAC3C;AAEA,IAAA,IAAc,QAAQ,GAAA;AACpB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;IACpD;AAEA,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI;IAClE;AAEA,IAAA,UAAU,CAAC,KAAwB,EAAA;QACjC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AACnE,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAsC,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE;AACtC,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE;IACzC;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5C,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEU,IAAA,cAAc,CAAC,KAAgB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE;QACtC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AAEU,IAAA,eAAe,CAAC,KAAgB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEU,IAAA,UAAU,CAAC,KAAgB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE;QACtC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D;IAEU,MAAM,CAAC,IAAsB,EAAE,KAAkB,EAAA;QACzD,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,KAAK,CAAC,KAAkB,EAAA;QAChC,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE;QAEtC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;IAEU,WAAW,GAAA;QACnB,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,MAAM,WAAW,CAAC,IAAsB,EAAE,KAAkB,EAAA;QACpE,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM;YAAE;QAEjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,SAAS;AAC5B,SAAA,EACD,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAC7E;IACH;AAEU,IAAA,OAAO,CAAC,IAAsB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO;AAAE,YAAA,OAAO,OAAO;AAChD,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QAC5C,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,OAAO;AACzE,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;AAC1C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;AAAE,YAAA,OAAO,KAAK;AACjG,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;QAEnB,MAAM,QAAQ,GAAW,EAAE;QAC3B,MAAM,QAAQ,GAA2B,EAAE;AAC3C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAEnD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,cAAc,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE;gBAChE,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;AACJ,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAAC,QAAQ,CAAA,YAAA,CAAc;AAChE,iBAAA,CAAC;gBACF;YACF;YAEA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACzC,IAAI,SAAS,EAAE;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxB;YACF;YAEA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACzC,IAAI,SAAS,EAAE;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxB;YACF;AAEA,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACrB;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;QAC7B,IAAI,QAAQ,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEjD,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/D,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC;YAC5C;iBAAO;gBACL,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC;YACA,IAAI,CAAC,SAAS,EAAE;QAClB;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACnC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD;AAEQ,IAAA,YAAY,CAAC,IAAU,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;aACvC,MAAM,CAAC,OAAO,CAAC;QAElB,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;AAC5D,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO,QAAQ,KAAK,IAAI;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO;AACL,cAAE;AACF,cAAE;gBACE,IAAI;AACJ,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,CAAA,gCAAA,CAAkC;aACpE;IACP;AAEQ,IAAA,YAAY,CAAC,IAAU,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI;AAC7C,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI;AAClB,cAAE;AACF,cAAE;gBACE,IAAI;AACJ,gBAAA,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,eAAe,IAAI,CAAC,IAAI,CAAA,sBAAA,EAAyB,IAAI,CAAC,SAAS,CAAA,IAAA,CAAM;aAC/E;IACP;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;AACjD,QAAA,MAAM,KAAK,GAAsB,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ;AAC/C,cAAE;cACA,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,SAAS,KAAK;AACjD,kBAAE;kBACA,MAAM;QAEZ,OAAO;YACL,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;YAC1D,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;YACpD,SAAS;YACT,WAAW;AACX,YAAA,UAAU,EAAE,WAAW,KAAK,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,SAAS;SAC5E;IACH;AAEQ,IAAA,WAAW,CAAC,IAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE;IAC7E;AAEQ,IAAA,iBAAiB,CAAC,SAAiB,EAAA;QACzC,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,iBAAiB;QACjD,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,iBAAiB;QACjD,IAAI,SAAS,KAAK,MAAM;AAAE,YAAA,OAAO,mEAAmE;QACpG,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,0BAA0B;QAC1D,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,iBAAiB;AACjD,QAAA,OAAO,0BAA0B;IACnC;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACrC,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI;QACvB,IAAI,EAAE,GAAG,IAAI;AAAE,YAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK;AAC3D,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;AACpB,QAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK;IAC9C;AAEQ,IAAA,aAAa,CAAC,IAAU,EAAA;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3C,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,KAAgB,EAAA;AACpC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa;AACzC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa;QACzC,OAAO,aAAa,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAA4B,CAAC;IAC/F;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3D;AAEQ,IAAA,gBAAgB,CAAC,IAAsB,EAAA;QAC7C,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3D;uGA9UW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EATZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCH,y1IA0IA,6zPDhHY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAdxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB,CAAC,MAAM,CAAC,EAAA,SAAA,EAGN;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,y1IAAA,EAAA,MAAA,EAAA,CAAA,qwPAAA,CAAA,EAAA;;sBAO9C,SAAS;uBAAC,aAAa;;sBAEvB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEpCH,MAAM,yBAAyB,GAA2B;IACxD,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE;IACxD,EAAE,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;AACrE,IAAA,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;CAC3E;MASY,QAAQ,CAAA;IACV,WAAW,GAAG,IAAI;IAClB,WAAW,GAAG,IAAI;IAClB,OAAO,GAAG,EAAE;IACZ,KAAK,GAAG,EAAE;IACV,SAAS,GAAG,EAAE;IACd,cAAc,GAA2B,EAAE;IAC3C,MAAM,GAAG,KAAK;IACd,IAAI,GAAG,IAAI;IACoB,qBAAqB,GAAG,IAAI;IAC5B,aAAa,GAAG,IAAI;IACnD,cAAc,GAA2B,yBAAyB;AAExD,IAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AACrC,IAAA,wBAAwB,GAAG,IAAI,YAAY,EAAwB;AACnE,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ;AACjD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAwB;AACvD,IAAA,wBAAwB,GAAG,IAAI,YAAY,EAAwB;IAE5E,0BAA0B,GAAG,KAAK;IAClC,kBAAkB,GAAG,KAAK;IAE1B,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;IAEU,sBAAsB,GAAA;AAC9B,QAAA,IAAI,CAAC,0BAA0B,GAAG,CAAC,IAAI,CAAC,0BAA0B;AAClE,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACjC;IAEU,cAAc,GAAA;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB;AAClD,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;IACzC;AAEU,IAAA,uBAAuB,CAAC,YAAkC,EAAA;AAClE,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;IACzC;AAEU,IAAA,kBAAkB,CAAC,MAA4B,EAAA;AACvD,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;QAE1C,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACjC;IAEU,sBAAsB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;IACjE;IAEU,gBAAgB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC/D,QAAA,OAAO,CACL;AACG,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC;AACV,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aAC9B,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAClB,WAAW,EAAE;IACjB;IAEU,sBAAsB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,yBAAyB;IACtF;AAEQ,IAAA,oBAAoB,CAAC,EAAU,EAAA;QACrC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,eAAe,IAAI,EAAE,KAAK,OAAO;IACpE;IAGU,eAAe,GAAA;AACvB,QAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACjC;uGA7EW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,uTASC,gBAAgB,CAAA,EAAA,aAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAChB,gBAAgB,CAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDtC,0kLAiKA,81ND1HY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKL,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAPpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,MAAM,CAAC,EAAA,eAAA,EAGA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0kLAAA,EAAA,MAAA,EAAA,CAAA,syNAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAwDA,YAAY;uBAAC,yBAAyB;;;AE5FzC,IAAI,aAAa,GAAG,CAAC;MAuIR,OAAO,CAAA;AAED,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,WAAW,GAAG,CAAA,SAAA,EAAY,EAAE,aAAa,EAAE;IAC3C,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;IAC7C,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;IACtD,iBAAiB,GAAG,KAAK;IACzB,iBAAiB,GAAG,EAAE;AAEI,IAAA,WAAW;IAEpC,EAAE,GAAG,EAAE;IACP,KAAK,GAAG,OAAO;IACf,IAAI,GAA0F,MAAM;IACpG,WAAW,GAAG,EAAE;IAChB,YAAY,GAAG,KAAK;IACpB,IAAI,GAAG,EAAE;IACT,MAAM,GAAG,EAAE;IACX,MAAM,GAAG,EAAE;IACX,IAAI,GAAG,EAAE;IACT,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAC5C,SAAS,GAAG,KAAK;IACjB,IAAI,GAAG,KAAK;IACZ,WAAW,GAAG,KAAK,CAAC,IAAI;oFAAC;IACzB,UAAU,GAAsB,MAAM;IACtC,QAAQ,GAAoB,MAAM;IAClC,aAAa,GAA6B,IAAI;IAC9C,IAAI,GAAgB,MAAM;IAC1B,aAAa,GAAkB,IAAI;IACnC,aAAa,GAAkB,IAAI;IACnC,QAAQ,GAAG,KAAK,CAAqC,SAAS,gFACrE,KAAK,EAAE,KAAK,EAAA,CACZ;IACO,QAAQ,GAAG,KAAK,CAAqC,SAAS,gFACrE,KAAK,EAAE,KAAK,EAAA,CACZ;IACO,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,OAAO,GAAG,KAAK,CAAoB,EAAE;gFAAC;IACtC,IAAI,GAA2B,IAAI;IAE5C,IACI,SAAS,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAEA,IACI,SAAS,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAES,KAAK,GAAG,KAAK,CAAe,EAAE;8EAAC;AACrB,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;AACkB,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;0FACjD;AACkB,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;0FACjD;AACkB,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;sFACxC;AACkB,IAAA,cAAc,GAAG,QAAQ,CAC1C,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;AAC3D,QAAA,IAAI,CAAC,iBAAiB,EAAE,KAAK,SAAS;uFACzC;AACkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC1C,QAAA,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS;AAClD,YAAA,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS;IACrC,CAAC;uFAAC;IACiB,oBAAoB,GAAG,QAAQ,CAChD,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;6FACpE;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,OAAO,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;IAC/F,CAAC;iFAAC;IACiB,aAAa,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;sFACxF;AACkB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM;QACpD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,GAAA,EAAM,IAAI,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI;IACrE,CAAC;wFAAC;AACiB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QACnD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;AAAE,YAAA,OAAO,SAAS;QAC1E,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,SAAS;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,SAAS;AAChD,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,YAAA,OAAO,SAAS;AACjD,QAAA,OAAO,IAAI;IACb,CAAC;0FAAC;IACiB,OAAO,GAAG,MAAM,CAAC,KAAK;gFAAC;IAChC,eAAe,GAAG,KAAK;AAEjC,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AAEA,IAAA,IAAc,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,YAAA,CAAc,GAAG,IAAI;IAC3E;AAEA,IAAA,IAAc,YAAY,GAAA;QACxB,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,MAAM;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI;IAC9E;AAEQ,IAAA,QAAQ,GAAkC,MAAM,SAAS;AAEjE,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;AAAO,aAAA,IACL,IAAI,CAAC,IAAI,KAAK,QAAQ;YACtB,IAAI,CAAC,UAAU,CAAC,eAAe;AAC/B,YAAA,OAAO,KAAK,KAAK,QAAQ,EACzB;AACA,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;kBACvC,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,KAAK,CAAC;kBACrD,EAAE;AACN,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB;aAAO;AACL,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kCAAkC,CAAC,SAAS,CAAC;YAC7E;AACA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAiC,EAAA;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC1B,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAChD;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAA0B;AACrD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC;YAChD;QACF;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC;AACpE,QAAA,IAAI,YAAY,CAAC,KAAK,KAAK,gBAAgB,EAAE;AAC3C,YAAA,YAAY,CAAC,KAAK,GAAG,gBAAgB;QACvC;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACrE;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACvD;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACzC;IAEQ,eAAe,CAAC,KAAa,EAAE,YAA8B,EAAA;QACnE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;QACjC;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;AACtF,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa;AAC/C,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,YAAY;IACzD;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc;AAAE,YAAA,OAAO,EAAE;QAEjD,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAC1E,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE;IAC3C;AAEQ,IAAA,kBAAkB,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC;AAEQ,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK;QAC1E,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAClC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAC9D,WAAW,CACZ;IACH;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,OAAO,OAAO,QAAQ,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAClE;IAEQ,mBAAmB,CAAC,KAAa,EAAE,MAA6B,EAAA;QACtE,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC,YAAA,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAC1C,YAAA,KAAK,cAAc;gBACjB,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;AAC7C,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACpC,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,KAAK,CAAC,WAAW,EAAE;AAC5B,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,KAAK,CAAC,WAAW,EAAE;AAC5B,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,KAAK,CAAC,IAAI,EAAE;AACrB,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;AAEQ,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACjE,QAAA,MAAM,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,OAAO,YAAY;AAE7C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;QAChF,OAAO,YAAY,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG;AACnD,cAAE,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,YAAY,CAAA;cAC/B,YAAY;IAClB;IAEQ,WAAW,CAAC,KAAa,EAAE,KAAoB,EAAA;QACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;QACpE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;IAC9B;AAEQ,IAAA,SAAS,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;AAAE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QACpE,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACxD,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/D;IAEQ,sBAAsB,CAAC,YAA8B,EAAE,KAAY,EAAA;QACzE,MAAM,UAAU,GAAG,KAAmB;AACtC,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,EAAE;AAC5C,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC7D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAE7C,QAAA,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D;aAAO,IAAI,UAAU,EAAE;AACrB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,GAAG,UAAU,EAAE,SAAS,CAAC;QAC3F;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CACvC,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,KAAK,CAAC,EACrD,SAAS,CACV;QACH;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC7E,QAAA,YAAY,CAAC,KAAK,GAAG,gBAAgB;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACrE;AAEQ,IAAA,uBAAuB,CAAC,WAAmB,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC9C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;AAClC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5F,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;QACtB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC;AAE9D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC;AAC9C,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC;QAC/E,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;AAE5C,QAAA,OAAO,GAAG,WAAW,IAAI,GAAG,CAAA,CAAA,EAAI,WAAW,EAAE;IAC/C;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC9C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;AAClC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa;AACzC,QAAA,OAAO,YAAY,IAAI,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,KAAK,GAAG,IAAI;IACvE;AAEQ,IAAA,4BAA4B,CAAC,KAAa,EAAA;AAChD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAC1D;AAEQ,IAAA,kCAAkC,CAAC,KAAa,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;IACjD;AAEQ,IAAA,cAAc,CAAC,YAA8B,EAAA;QACnD,cAAc,CAAC,MAAK;AAClB,YAAA,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM;AACrC,YAAA,IAAI;AACF,gBAAA,YAAY,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;YAC1C;AAAE,YAAA,MAAM;;YAER;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACpE;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,MAAM,EAAE,aAAa,IAAI,IAAI;QACzE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,MAAM,EAAE,aAAa,IAAI,CAAC;QAEtE,OAAO;YACL,aAAa,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI;AACrF,YAAA,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SACtD;IACH;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,IAAI;AAElD,QAAA,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;gBACjD,OAAO,CAAC,IAAI,CACV,CAAA,qCAAA,EAAwC,IAAI,CAAC,IAAI,CAAA,6DAAA,CAA+D,CACjH;YACH;AACA,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;AACL,YAAA,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAChC;IACH;AAEQ,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,MAAM;AACrC,QAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACnD;AAEQ,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,MAAM;AACrC,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACzE,OAAO,CAAA,EAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;IACzE;IAEQ,kBAAkB,GAAA;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;YAAE;QAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY;YAAE;AAEnB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,KAAK;AACnC,cAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;AACrC,cAAE,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAE/C,QAAA,IAAI,cAAc,KAAK,YAAY,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,cAAc;YACvD;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK;cAC7B,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA;cACV,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAElE,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;IAChE;AAEQ,IAAA,wBAAwB,CAAC,KAAa,EAAA;AAC5C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK;cAC7B,CAAA,CAAA,EAAI,MAAM,CAAA,IAAA;cACV,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAElE,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA,CAAE;IAC5F;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AACzD,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG;AACnC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACvC;AAEQ,IAAA,QAAQ,CAAC,KAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;uGA3dW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbP;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,OAAO,CAAC;AACtC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArGS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8wIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9FS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6GL,OAAO,EAAA,UAAA,EAAA,CAAA;kBA/GnB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX,CAAC,MAAM,CAAC,EAAA,QAAA,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,aAAa,CAAC;AACtC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8wIAAA,CAAA,EAAA;;sBAY9C,SAAS;uBAAC,aAAa;;sBAEvB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAiBA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAUA;;sBAEA;;sBAKA;;;ACpMH,IAAI,gBAAgB,GAAG,CAAC;MAkFX,UAAU,CAAA;AAEJ,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,WAAW,GAAG,CAAA,YAAA,EAAe,EAAE,gBAAgB,EAAE;IACjD,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;IAC7C,eAAe,GAAG,MAAM,CAAgB,IAAI;wFAAC;IACtD,iBAAiB,GAAG,KAAK;AAEI,IAAA,cAAc;IAE1C,EAAE,GAAG,EAAE;IACP,KAAK,GAAG,OAAO;IACf,WAAW,GAAG,EAAE;IAChB,IAAI,GAAG,EAAE;IACT,IAAI,GAAG,CAAC;IACR,IAAI,GAAG,KAAK;IACZ,SAAS,GAAG,KAAK;IACjB,UAAU,GAAyB,MAAM;IACV,UAAU,GAAG,IAAI;IAChD,WAAW,GAAkB,EAAE;IAE/B,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAC5C,WAAW,GAAG,KAAK,CAAC,IAAI;oFAAC;IACzB,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAChD,SAAS,GAAG,KAAK,CAAqB,SAAS;kFAAC;IAEzD,IACI,SAAS,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAEA,IACI,SAAS,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;IACjC;IAES,KAAK,GAAG,KAAK,CAAkB,EAAE;8EAAC;IACxB,OAAO,GAAG,MAAM,CAAC,KAAK;gFAAC;AACvB,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;AACkB,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;0FACjD;AACkB,IAAA,iBAAiB,GAAG,QAAQ,CAC7C,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE;0FACjD;AACkB,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;sFACxC;AACkB,IAAA,cAAc,GAAG,QAAQ,CAC1C,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI;AAC3D,QAAA,IAAI,CAAC,iBAAiB,EAAE,KAAK,SAAS;uFACzC;AACkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC1C,QAAA,OAAO,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS;AAClD,YAAA,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS;IACrC,CAAC;uFAAC;IACiB,oBAAoB,GAAG,QAAQ,CAChD,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;6FACpE;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,OAAO,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;IACvF,CAAC;iFAAC;AACiB,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;sFACxC;AAED,IAAA,IAAc,UAAU,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;AAEA,IAAA,IAAc,aAAa,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,YAAA,CAAc,GAAG,IAAI;IAC9E;AAEQ,IAAA,QAAQ,GAAqC,MAAM,SAAS;IAEpE,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B;QACA,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAAoC,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC1B,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IACnD;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA6B;QACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzE,IAAI,CAAC,cAAc,EAAE;IACvB;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACvD;IAEU,KAAK,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAC9D;QACA,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,QAAQ,CAAC,KAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc;AAAE,YAAA,OAAO,EAAE;QACjD,OAAO,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE;IAC3C;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAE9C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa;AAClD,QAAA,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAE9B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG;AACvD,cAAE,UAAU,GAAG,IAAI,CAAC;AACpB,cAAE,MAAM,CAAC,iBAAiB;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;QAE7D,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,UAAU,IAAI;AACzC,QAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ;IAClF;uGA/LW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAmBD,gBAAgB,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAhCzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wuHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAeU,UAAU,EAAA,UAAA,EAAA,CAAA;kBA7EtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,wuHAAA,CAAA,EAAA;;sBAW9C,SAAS;uBAAC,gBAAgB;;sBAE1B;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC;;sBAsBA;;sBAKA;;;MCrIU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;MAMY,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;MAMY,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;MAMY,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;MA8DY,QAAQ,CAAA;AACgC,IAAA,UAAU;AACT,IAAA,WAAW;AACZ,IAAA,UAAU;AACG,IAAA,UAAU;AACT,IAAA,WAAW;AAE3D,IAAA,OAAO,GAAG,MAAM,EAAC,UAAuB,EAAC;IACzC,gBAAgB,GAAG,MAAM,CAAC,IAAI;yFAAC;IAC7B,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AACjC,IAAA,cAAc;IAEkB,YAAY,GAAG,IAAI;IACnB,sBAAsB,GAAG,IAAI;IAC5D,gBAAgB,GAAG,GAAG;IACtB,gBAAgB,GAA6B,MAAM;IACnD,UAAU,GAAwB,SAAS;IAC3C,UAAU,GAAwB,SAAS;IAC3C,kBAAkB,GAA+B,OAAO;IAEjE,IACI,WAAW,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;AACA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;IAChC;AAEmB,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAW;AAElE,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;IAC1B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW;IAC3B;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU;IAC1B;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE;AAEzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;QAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACpD;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;IACnC;IAGU,YAAY,GAAA;AACpB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC3D,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAGU,mBAAmB,GAAA;QAC3B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAGU,IAAA,wBAAwB,CAAC,KAAmB,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACjF;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;YAC7B;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;AAE7C,QAAA,IAAI,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzD;QACF;QAEA,IAAI,CAAC,YAAY,EAAE;IACrB;IAEU,gBAAgB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE;AACtC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;IAEU,eAAe,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM;IACnC;IAEU,eAAe,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM;IACnC;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC3B;IAEO,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;IAEO,aAAa,GAAA;QAClB,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IACxC;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa;AAC7C,QAAA,MAAM,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,CAAC;QAC9C,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,YAAY;QACjG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kCAAkC,EAAE,CAAA,EAAG,cAAc,CAAA,EAAA,CAAI,CAAC;IACnF;AAEQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC9B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;uGA1JW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAYC,gBAAgB,CAAA,EAAA,sBAAA,EAAA,CAAA,wBAAA,EAAA,wBAAA,EAChB,gBAAgB,keAZtB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAClB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACC,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACT,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1DlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8rJAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAvDpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,QAAA,EACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8rJAAA,CAAA,EAAA;;sBAG9C,YAAY;uBAAC,kBAAkB;;sBAC/B,YAAY;uBAAC,mBAAmB;;sBAChC,YAAY;uBAAC,kBAAkB;;sBAC/B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAC5C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAO7C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAQA;;sBAkCA,YAAY;uBAAC,eAAe;;sBAU5B,YAAY;uBAAC,eAAe;;sBAK5B,YAAY;uBAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC;;;ACtJlD,IAAI,aAAa,GAAG,CAAC;MAoBR,YAAY,CAAA;AAEN,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,aAAa,GAAG,CAAA,SAAA,EAAY,EAAE,aAAa,EAAE;IAErD,OAAO,GAAuB,EAAE;IAChC,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,EAAE;IACT,IAAI,GAAG,KAAK;IACZ,SAAS,GAAqB,UAAU;IACxC,OAAO,GAAmB,SAAS;AACnC,IAAA,WAAW,GAClB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;IAEpC,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAE5C,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;AAEnB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAE9C,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;AAEO,IAAA,QAAQ,GAA8B,MAAM,SAAS;AAE7D,IAAA,IAAc,SAAS,GAAA;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa;IAC1C;AAEA,IAAA,IAAc,SAAS,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,QAAA,CAAU,GAAG,IAAI;IAC9E;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEU,IAAA,UAAU,CAAC,MAAwB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACrD;AAEU,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,KAAK,EAAE;IACrC;AAEU,IAAA,MAAM,CAAC,MAAwB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ;YAAE;AAC7D,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,EAAE;YAClB;QACF;QAEA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;QACzD,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC3F;QACF;QAEA,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AAClB,aAAA,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACtD,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAE1C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;AAErB,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QAC/E,IAAI,YAAY,GAAG,eAAe;AAElC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;YAAE,YAAY,GAAG,CAAC;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;AAAE,YAAA,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;AAC1D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;AAC3D,YAAA,YAAY,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QACxE;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AACxD,YAAA,YAAY,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QACxE;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxB,cAAc,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACzF;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACvD;uGAzIW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCH,+lEAoEA,4wHDvCY,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgBL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAlBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB,CAAC,MAAM,CAAC,EAAA,SAAA,EAGN;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+lEAAA,EAAA,MAAA,EAAA,CAAA,otHAAA,CAAA,EAAA;;sBAQ9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAsBA;;;AElCH,IAAI,oBAAoB,GAAG,CAAC;MAsJf,oBAAoB,CAAA;AAEd,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAChD,IAAA,WAAW,GAAG,CAAA,gBAAA,EAAmB,EAAE,oBAAoB,EAAE;IAClE,UAAU,GAAuB,EAAE;IACnC,iBAAiB,GAAwB,EAAE;AAEjB,IAAA,WAAW;AACL,IAAA,gBAAgB;AAC5B,IAAA,KAAK;IAExB,KAAK,GAAG,sBAAsB;IAC9B,WAAW,GAAG,wBAAwB;IAC/C,IACI,OAAO,CAAC,KAA4C,EAAA;AACtD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/D,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IACS,IAAI,GAAG,EAAE;IACT,SAAS,GAAG,KAAK;IACjB,QAAQ,GAAoD,IAAI;IAChE,QAAQ,GAAqE,IAAI;IACjF,cAAc,GAAqE,IAAI;IACvF,OAAO,GAAqE,IAAI;IAChF,WAAW,GAAsE,IAAI;IACrF,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAC5C,SAAS,GAAG,8BAA8B;IAC1C,eAAe,GAAG,EAAE;IACpB,sBAAsB,GAAG,EAAE;IAC3B,eAAe,GAAG,KAAK;IACvB,SAAS,GAAG,IAAI;IAChB,IAAI,GAAG,KAAK;IACZ,cAAc,GAA2B,YAAY;IACrD,YAAY,GAAyB,SAAS;IAC9C,UAAU,GAAuB,SAAS;IAC1C,iBAAiB,GAAG,CAAC;IACrB,UAAU,GACjB,CAAC,MAAM,EAAE,MAAM,KACb,CAAA,EAAG,MAAM,CAAC,KAAK,CAAA,CAAA,EAAI,MAAM,CAAC,WAAW,IAAI,EAAE,CAAA,CAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7E,IAAA,WAAW,GAClB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;AAE1B,IAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAC9C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IAElD,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;AACnB,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;IACS,MAAM,GAAG,EAAE;IACX,IAAI,GAAG,KAAK;IACZ,WAAW,GAAG,CAAC,CAAC;IACP,OAAO,GAAG,MAAM,CAAC,KAAK;gFAAC;AACvB,IAAA,cAAc,GAAmB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACnE,IAAA,gBAAgB,GAAwB;AACzD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,CAAC,CAAC;AACZ,SAAA;KACF;AAED,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;IACpC;AAEA,IAAA,IAAc,MAAM,GAAA;AAClB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,OAAO;IACnC;AAEA,IAAA,IAAc,eAAe,GAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IAC/C;AAEA,IAAA,IAAc,eAAe,GAAA;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW;IAC9C;AAEA,IAAA,IAAc,eAAe,GAAA;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE;AACzD,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,EAAE;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7E;AAEA,IAAA,IAAc,qBAAqB,GAAA;AACjC,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC9D;AAEA,IAAA,IAAc,aAAa,GAAA;QACzB,QACE,IAAI,CAAC,eAAe;aACnB,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IAElF;AAEQ,IAAA,OAAO,GAA8B,MAAM,SAAS;AAE5D,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,cAAc,GAAG,CAAC,KAAY,KAAU;AAC5C,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;YAC3B,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;gBAAE;AACrE,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,EAAE;oBACnC,IAAI,CAAC,KAAK,EAAE;gBACd;qBAAO;AACL,oBAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE;gBACrD;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB;AACF,QAAA,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MACxB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,CAClE;QAED,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IACE,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,gBAAgB,CAAC;YACzB,OAAO,CAAC,SAAS,CAAC;AAClB,YAAA,OAAO,CAAC,aAAa,CAAC,EACtB;YACA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QACjE;QAEA,IACE,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,gBAAgB,CAAC;YACzB,OAAO,CAAC,SAAS,CAAC;YAClB,OAAO,CAAC,aAAa,CAAC;AACtB,YAAA,OAAO,CAAC,aAAa,CAAC,EACtB;YACA,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACnB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC1B,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAChD;IAEU,OAAO,CAAC,KAAe,EAAE,MAAgB,EAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;IACxC;IAEU,SAAS,GAAA;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC3C,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,+BAA+B,EAAE;AACtC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,+BAA+B,EAAE;IACxC;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE;IAClB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,CAAC,KAAK,EAAE;QACd;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACvD;IAEU,KAAK,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACjB,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACxC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;IACtC;AAEU,IAAA,WAAW,CAAC,KAAY,EAAA;QAChC,IAAI,CAAC,MAAM,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC3C,IAAI,CAAC,+BAA+B,EAAE;AACtC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEU,IAAA,MAAM,CAAC,MAAyB,EAAA;QACxC,IAAI,MAAM,CAAC,QAAQ;YAAE;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEU,IAAA,KAAK,CAAC,KAAiB,EAAA;QAC/B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;YAClB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpB;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAClC,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;YAClB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB;QACF;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;YACtE,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,YAAA,IAAI,MAAM;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC;IACF;AAEU,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;AACrB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;AAC3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACnD,YAAA,IAAI,GAAG,CAAC,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;YAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AAC5B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB,IAAI,CAAC,0BAA0B,EAAE;gBACjC;YACF;QACF;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;IACrE;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AAEjC,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;YAClB;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACxF,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK;QAC9B;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,gBAAgB,CAAC,OAA2B,EAAA;AAClD,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9D;AAEQ,IAAA,eAAe,CAAC,MAAe,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnE,YAAA,OAAO,MAA2B;QACpC;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;AACjH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;AAC/G,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;cACrB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc;cAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;AAC3G,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACpB,cAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW;cACjD,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC;QAEhD,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;AACvD,YAAA,IAAI,WAAW,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACvC,YAAA,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACzB,YAAA,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;SAClC;IACH;AAEQ,IAAA,cAAc,CAAC,MAAe,EAAA;AACpC,QAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;AACvD,QAAA,OAAO,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM;IAC/C;IAEQ,eAAe,CACrB,MAAe,EACf,QAAkD,EAAA;AAElD,QAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAM;QAC9B;QAEA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAM;IAC7C;IAEQ,cAAc,CACpB,MAAe,EACf,QAAmE,EAAA;QAEnE,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;AACjG,QAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IACnE;IAEQ,iBAAiB,CACvB,MAAe,EACf,QAAiD,EAAA;QAEjD,OAAO,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC5F;IAEQ,QAAQ,CAAC,MAAe,EAAE,IAAY,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,SAAS;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,GAAG,KAAI;AACtD,YAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC5E,gBAAA,OAAO,SAAS;YAClB;AAEA,YAAA,OAAQ,OAAmC,CAAC,GAAG,CAAC;QAClD,CAAC,EAAE,MAAM,CAAC;IACZ;IAEQ,mBAAmB,CAAC,MAAe,EAAE,KAAQ,EAAA;AACnD,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE;AAC3F,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB;QAEA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;AAEA,QAAA,OAAO,EAAE;IACX;IAEQ,0BAA0B,GAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC;AAClF,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACjE;IAEQ,6BAA6B,GAAA;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACrC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;YACzE;QACF;AAEA,QAAA,GAAG,CAAC,qBAAqB,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE;AACnD,YAAA,GAAG,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACtF,QAAA,CAAC,CAAC;IACJ;IAEQ,+BAA+B,GAAA;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,GAAG;YAAE;AAC1C,QAAA,GAAG,CAAC,qBAAqB,CAAC,MAAK;YAC7B,GAAG,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7D,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;YAAE;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ;aACG,gBAAgB,CAAoB,uBAAuB;AAC3D,aAAA,OAAO,CAAC,CAAC,MAAM,KAAI;YAClB,IAAI,eAAe,GAAG,KAAK;YAE3B,MAAM,CAAC,gBAAgB,CAAc,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxE,gBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iCAAiC,CAAC;AAC3D,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,4BAA4B,CAAC;AAE1D,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW;gBACjC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC;gBACjD,eAAe,KAAK,SAAS;gBAE7B,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AAChD,oBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,CAAC;oBACxD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;gBACvE;AACF,YAAA,CAAC,CAAC;YAEF,IAAI,eAAe,EAAE;gBACnB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;YACxC;iBAAO;AACL,gBAAA,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;YACjC;AACF,QAAA,CAAC,CAAC;IACN;uGAxfW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbpB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAmBU,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7JpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8mTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnIS,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkJ5C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApJhC,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAA,QAAA,EAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkIT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0BAA0B,CAAC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8mTAAA,CAAA,EAAA;;sBAa9C,SAAS;uBAAC,aAAa;;sBACvB,SAAS;uBAAC,mBAAmB;;sBAC7B,SAAS;uBAAC,OAAO;;sBAEjB;;sBACA;;sBACA;;sBASA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAiBA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBAGA;;sBACA;;sBACA;;;AC7NH,IAAI,cAAc,GAAG,CAAC;MAyJT,QAAQ,CAAA;AAEF,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/B,UAAU,GAAG,yBAAyB,EAAE;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAChD,IAAA,WAAW,GAAG,CAAA,UAAA,EAAa,EAAE,cAAc,EAAE;AAEtB,IAAA,gBAAgB;AAC1B,IAAA,OAAO;AACT,IAAA,KAAK;IAExB,KAAK,GAAG,aAAa;IACrB,WAAW,GAAG,uBAAuB;IACrC,OAAO,GAAwB,EAAE;IACjC,IAAI,GAAG,EAAE;IACT,SAAS,GAAG,KAAK;IACjB,IAAI,GAAG,KAAK,CAAC,EAAE;6EAAC;IAChB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,eAAe,GACtB,KAAK,CAAmD,EAAE;wFAAC;IACpD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GAAG,KAAK,CAAC,KAAK;+EAAC;IACrB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,KAAK,CAAC,KAAK;8EAAC;IACpB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,MAAM,GACb,KAAK,CAAoD,EAAE;+EAAC;IACrD,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,KAAK,GAAG,MAAM,EAAQ;IACtB,KAAK,GAAG,KAAK,CAAC,EAAE;8EAAC;IACjB,YAAY,GAAG,KAAK,CAAiB,MAAM;qFAAC;IAC5C,SAAS,GAAG,6BAA6B;IACzC,eAAe,GAAG,EAAE;IACpB,sBAAsB,GAAG,EAAE;IAC3B,eAAe,GAAG,KAAK;IACvB,SAAS,GAAG,KAAK;IACjB,IAAI,GAAG,KAAK;IACZ,cAAc,GAA2B,YAAY;IACrD,YAAY,GAAyB,SAAS;IAC9C,UAAU,GAAuB,SAAS;AAC1C,IAAA,WAAW,GAClB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;AAE1B,IAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAC9C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;IAEhD,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;AACnB,IAAA,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;mFAC5C;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;mFAAC;AAC5D,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MACpD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAChC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EACnB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,KAAK,EAAE,CACb;gGACF;IACkB,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;qFAC1E;AACkB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MACrC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,uBAAuB,EAAE;iFACjD;IACS,IAAI,GAAG,KAAK;IACZ,WAAW,GAAG,CAAC,CAAC;AACP,IAAA,cAAc,GAAmB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACnE,IAAA,gBAAgB,GAAwB;AACzD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,CAAC,CAAC;AACZ,SAAA;KACF;AAED,IAAA,IAAc,OAAO,GAAA;AACnB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;IACpC;AAEA,IAAA,IAAc,eAAe,GAAA;AAC3B,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IAC/C;AAEA,IAAA,IAAc,eAAe,GAAA;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW;IAC9C;AAEA,IAAA,IAAc,MAAM,GAAA;AAClB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,OAAO;IACnC;AAEA,IAAA,IAAc,cAAc,GAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF;AAEQ,IAAA,QAAQ,GAA8B,MAAM,SAAS;AAE7D,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,cAAc,GAAG,CAAC,KAAY,KAAU;AAC5C,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;YAC3B,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;gBAAE;AACrE,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,EAAE;oBACnC,IAAI,CAAC,KAAK,EAAE;gBACd;qBAAO;AACL,oBAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE;gBACrD;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB;AACF,QAAA,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MACxB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,CAClE;IACH;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACvC;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC1B,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5C;IAEU,OAAO,CAAC,KAAe,EAAE,MAAgB,EAAA;QACjD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;IACxC;IAEU,MAAM,GAAA;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;IAC7C;IAEU,KAAK,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;AACrD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEU,IAAA,MAAM,CAAC,MAAyB,EAAA;QACxC,IAAI,MAAM,CAAC,QAAQ;YAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE;IACd;AAEU,IAAA,KAAK,CAAC,KAAiB,EAAA;QAC/B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;AAEU,IAAA,eAAe,CAAC,KAAiB,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC7B,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;YAClB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpB;YACA;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;YAClB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB;YACA;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;gBAChB;YACF;YAEA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,YAAA,IAAI,MAAM;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC;IACF;AAEU,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACjD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAChF,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,+BAA+B,EAAE;AACtC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEU,iBAAiB,GAAA;QACzB,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,+BAA+B,EAAE;IACxC;AAEQ,IAAA,UAAU,CAAC,SAAiB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE;AAC1B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;AAC3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACxD,YAAA,IAAI,GAAG,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YACrE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE;AACjC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB,IAAI,CAAC,0BAA0B,EAAE;gBACjC;YACF;QACF;IACF;IAEQ,iBAAiB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7D;AAEQ,IAAA,QAAQ,CAAC,KAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,0BAA0B,GAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC;AAClF,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACjE;IAEQ,6BAA6B,GAAA;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QACrC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;YACzE;QACF;AAEA,QAAA,GAAG,CAAC,qBAAqB,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE;AACnD,YAAA,GAAG,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACtF,QAAA,CAAC,CAAC;IACJ;IAEQ,+BAA+B,GAAA;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,GAAG;YAAE;AAC1C,QAAA,GAAG,CAAC,qBAAqB,CAAC,MAAK;YAC7B,GAAG,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7D,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;YAAE;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ;aACG,gBAAgB,CAAoB,uBAAuB;AAC3D,aAAA,OAAO,CAAC,CAAC,MAAM,KAAI;YAClB,IAAI,eAAe,GAAG,KAAK;YAE3B,MAAM,CAAC,gBAAgB,CAAc,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxE,gBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iCAAiC,CAAC;AAC3D,gBAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,4BAA4B,CAAC;AAE1D,gBAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW;gBACjC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC;gBACjD,eAAe,KAAK,SAAS;gBAE7B,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AAChD,oBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,CAAC;oBACxD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;gBACvE;AACF,YAAA,CAAC,CAAC;YAEF,IAAI,eAAe,EAAE;gBACnB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;YACxC;iBAAO;AACL,gBAAA,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC;YACjC;AACF,QAAA,CAAC,CAAC;IACN;uGAzUW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAbR;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC;AACvC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgBU,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7JpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8mTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtIS,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqJ5C,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAvJpB,SAAS;+BACE,WAAW,EAAA,OAAA,EACZ,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAA,QAAA,EAC9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqIT,EAAA,SAAA,EAEU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC;AACvC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,kBAAkB,EAAE,2BAA2B;qBAChD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8mTAAA,CAAA,EAAA;;sBAW9C,SAAS;uBAAC,mBAAmB;;sBAC7B,SAAS;uBAAC,SAAS;;sBACnB,SAAS;uBAAC,OAAO;;sBAEjB;;sBACA;;sBACA;;sBACA;;sBACA;;sBAiBA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;sBACA;;;MCvNU,SAAS,CAAA;AACH,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEvC,MAAM,GAAG,qBAAqB;IAC9B,SAAS,GAAG,kBAAkB;IAC9B,kBAAkB,GAAG,YAAY;IACjC,OAAO,GAAG,EAAE;IACZ,OAAO,GAAG,MAAM;IAChB,UAAU,GAAG,kBAAkB;IAC/B,YAAY,GAAG,8BAA8B;IAC7C,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,KAAK;IAChB,MAAM,GAAG,KAAK;IACd,WAAW,GAAyB,UAAU;IAEvD,IACI,OAAO,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AACA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE;IAC9B;IAEA,IACI,IAAI,CAAC,KAAuC,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AACA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAEmB,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAsB;IAEpD,cAAc,GAAG,MAAM,CAAC,IAAI;uFAAC;IAC7B,eAAe,GAAG,MAAM,CAAgB,EAAE;wFAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAU;mFAAC;IAC3D,gBAAgB,GAAG,MAAM,CAAC,EAAE;yFAAC;AAEhD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAAC,EACzE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC/C;AAEU,IAAA,aAAa,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B;QAEA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAI;AAClC,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;YACpC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACxE,YAAA,OAAO,UAAU;AACnB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,KAAa,EAAA;QACnC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;IAEU,eAAe,CAAC,IAAiB,EAAE,KAAa,EAAA;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC;AAEU,IAAA,kBAAkB,CAAC,IAAiB,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE;IACnD;AAEU,IAAA,SAAS,CAAC,IAAiB,EAAE,KAAa,EAAE,MAAc,EAAA;QAClE,OAAO,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE;IAC5C;IAEU,YAAY,GAAA;AACpB,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,WAAW,EAAE;IAC5D;AAEQ,IAAA,cAAc,CAAC,KAAoB,EAAA;QACzC,OAAO,CAAC,GAAG,KAAK;AACb,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAChC,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,YAAA,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ;YACrC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;AACnD,SAAA,CAAC,CAAC;IACP;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACvD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC;QAC5F,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC;AAEnD,QAAA,MAAM,WAAW,GAAG,YAAY,EAAE,SAAS,IAAI,EAAE;QACjD,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE;QAEzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAI;AAClC,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACpC,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrD,YAAA,OAAO,UAAU;AACnB,QAAA,CAAC,CAAC;IACJ;IAEQ,8BAA8B,CACpC,KAAoB,EACpB,UAAkB,EAClB,KAAK,GAAG,MAAM,EACd,SAAA,GAAsB,EAAE,EAAA;QAExB,IAAI,KAAK,GAA+D,IAAI;AAE5E,QAAA,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE;AACvD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;AACvC,gBAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;oBACpC,IAAI;oBACJ,SAAS;AACT,oBAAA,IAAI,EAAE,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM;AAClE,iBAAA,CAAC;YACJ;YAEA,MAAM,SAAS,GAAG,IAAI,CAAC,8BAA8B,CACnD,IAAI,CAAC,QAAQ,IAAI,EAAE,EACnB,UAAU,EACV,KAAK,EACL,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,CACtB;YAED,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;QAClD;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,iBAAiB,CACvB,MAAkE,EAClE,SAAqE,EAAA;AAErE,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,MAAM;AAC7B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;AAC7B,QAAA,OAAO,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,SAAS,GAAG,MAAM;IAC1D;IAEQ,YAAY,CAAC,QAAgB,EAAE,UAAkB,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK;QAC3B,IAAI,QAAQ,KAAK,GAAG;YAAE,OAAO,UAAU,KAAK,GAAG;AAC/C,QAAA,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG,CAAC;IACzE;AAEQ,IAAA,cAAc,CAAC,IAA+B,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACtD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG;AAAE,YAAA,OAAO,GAAG;AACzC,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE;QACtE,OAAO,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,eAAe;IACvF;uGApKW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,qcC1BtB,oiHAwGA,EAAA,MAAA,EAAA,CAAA,41IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnFY,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,kPAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKnC,SAAS,EAAA,UAAA,EAAA,CAAA;kBAPrB,SAAS;+BACE,YAAY,EAAA,OAAA,EACb,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAA,eAAA,EAG9B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,oiHAAA,EAAA,MAAA,EAAA,CAAA,41IAAA,CAAA,EAAA;;sBAM9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAQA;;sBASA;;sBACA;;;AEpDH,IAAI,WAAW,GAAG,CAAC;MAWN,KAAK,CAAA;AACP,IAAA,WAAW,GAAG,CAAA,OAAA,EAAU,EAAE,WAAW,EAAE;IAEvC,EAAE,GAAG,EAAE;IACP,KAAK,GAAG,KAAK;IACb,IAAI,GAAG,EAAE;IACT,QAAQ,GAAG,KAAK;IAChB,KAAK,GAA2B,IAAI;AAEH,IAAA,OAAO;AAEjD,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW;IACpC;uGAbW,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAL,KAAK,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EASL,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBZ;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGU,KAAK,EAAA,UAAA,EAAA,CAAA;kBATjB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;sBAIE;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCuD7B,MAAM,CAAA;AACA,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,IAAA,UAAU;IACV,cAAc,GAAG,CAAC;AAEM,IAAA,QAAQ;AACV,IAAA,OAAO;AACF,IAAA,UAAU;IAE7C,IACI,aAAa,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QACjF,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,mBAAmB,EAAE;IAC/C;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,WAAW;IACzB;IAES,OAAO,GAAkB,OAAO;IAChC,SAAS,GAAoB,QAAQ;IACrC,OAAO,GAAG,KAAK;IACf,IAAI,GAAG,KAAK;IACZ,SAAS,GAAG,UAAU;IACtB,cAAc,GAAG,KAAK;AAEZ,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;AAChD,IAAA,SAAS,GAAG,IAAI,YAAY,EAAS;IAE9C,IAAI,GAAqB,EAAE;IAC3B,WAAW,GAAG,CAAC;AAEzB,IAAA,IAAc,SAAS,GAAA;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI;IAC5C;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1E;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE;IAChC;AAEU,IAAA,MAAM,CAAC,KAAa,EAAE,KAAK,GAAG,KAAK,EAAA;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE;AACtD,YAAA,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC1D;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AACvD,YAAA,IAAI,KAAK;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACpC,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE;QAEjF,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC;YAC3C;QACF;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC;YAC1C;QACF;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC/E;AAEU,IAAA,KAAK,CAAC,GAAU,EAAA;AACxB,QAAA,OAAO,CAAA,EAAG,GAAG,CAAC,UAAU,UAAU;IACpC;AAEU,IAAA,OAAO,CAAC,GAAU,EAAA;AAC1B,QAAA,OAAO,CAAA,EAAG,GAAG,CAAC,UAAU,QAAQ;IAClC;IAEQ,QAAQ,GAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACnC,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvE;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC;YACpB;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;YAC5B;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC7C,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC;IACzD;AAEQ,IAAA,gBAAgB,CAAC,SAAiB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;AAC/B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;AAC3B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,GAAG,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ;AAAE,gBAAA,OAAO,IAAI;QAC7C;QACA,OAAO,IAAI,CAAC,WAAW;IACzB;IAEQ,iBAAiB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpD;IAEQ,gBAAgB,GAAA;AACtB,QAAA,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ;AAAE,gBAAA,OAAO,KAAK;QAC/C;QACA,OAAO,IAAI,CAAC,WAAW;IACzB;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE;IACnD;IAEQ,gBAAgB,CAAC,KAAa,EAAE,QAAwB,EAAA;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa;AACzD,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;YAAE;QAE9D,MAAM,OAAO,GAAG,CAAC;AACjB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO;AAC/D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU;AAClC,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,WAAW;AAE5C,QAAA,IAAI,QAAQ,GAAG,YAAY,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;QACpE;AAAO,aAAA,IAAI,MAAM,GAAG,UAAU,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC;AACZ,gBAAA,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO;gBACzC,QAAQ;AACT,aAAA,CAAC;QACJ;IACF;uGAzJW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAKA,KAAK,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7DZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wrHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArDS,gBAAgB,oJAAE,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyDvB,MAAM,EAAA,UAAA,EAAA,CAAA;kBA3DlB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,WACV,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAA,QAAA,EACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,wrHAAA,CAAA,EAAA;;sBAO9C,eAAe;uBAAC,KAAK;;sBACrB,SAAS;uBAAC,SAAS;;sBACnB,YAAY;uBAAC,WAAW;;sBAExB;;sBASA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;ACpGI,MAAM,qBAAqB,GAA0B;AAC1D,IAAA,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gDAAgD,EAAE;AAC5I,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,4CAA4C,EAAE;AAC7H,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE;AAC/H,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mDAAmD,EAAE;AAC9I,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mDAAmD,EAAE;AAC1I,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE;AACrH,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iCAAiC,EAAE;AAChH,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE;AAClG,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,qCAAqC,EAAE;AACtH,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,6CAA6C,EAAE;AACxI,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sDAAsD,EAAE;AACnJ,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,8CAA8C,EAAE;AAC3I,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC/F,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC,EAAE;AAC9H,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,4BAA4B,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE;AACxG,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,+BAA+B,EAAE;;AAGjH,MAAM,oBAAoB,GAA0B;AACzD,IAAA,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gDAAgD,EAAE;AAC5I,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,4CAA4C,EAAE;AAC7H,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE;AAC/H,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mDAAmD,EAAE;AAC9I,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mDAAmD,EAAE;AAC1I,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE;AACrH,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kCAAkC,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iCAAiC,EAAE;AAChH,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB,EAAE;AAClG,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,qCAAqC,EAAE;AACtH,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,6CAA6C,EAAE;AACxI,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sDAAsD,EAAE;AACnJ,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,8CAA8C,EAAE;AAC3I,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC/F,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,uCAAuC,EAAE;AAC9H,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,4BAA4B,EAAE;AACnH,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,EAAE;AACxG,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,+BAA+B,EAAE;;;AC9CxH,MAAM,iBAAiB,GAAG,gBAAgB;AAC1C,MAAM,gBAAgB,GAAG,eAAe;MAG3B,cAAc,CAAA;AACR,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;mFAAC;IACxD,IAAI,GAAG,MAAM,CAAc,OAAO;6EAAC;IACnC,MAAM,GAAG,QAAQ,CAAC,MACzB,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;+EAC1E;AAED,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE;AAEA,IAAA,OAAO,CAAC,IAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrB;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD;IAEQ,eAAe,CAAC,MAAe,EAAE,IAAiB,EAAA;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;QAC7C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;AACpD,QAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IACnC;IAEQ,oBAAoB,GAAA;QAC1B,OAAO,OAAO,MAAM,KAAK,WAAW;AAClC,YAAA,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;AACvC,YAAA,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO;IAC7D;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;YAAE;QAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC;AAC/D,QAAA,MAAM,QAAQ,GAAG,CAAC,KAA0B,KAAW,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;QACzF,KAAK,CAAC,gBAAgB,GAAG,QAAQ,EAAE,QAAQ,CAAC;IAC9C;uGAvCW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCcrB,cAAc,CAAA;IAChB,EAAE,GAAG,EAAE;IACP,OAAO,GAAG,EAAE;IACZ,QAAQ,GAAsB,KAAK;IACnC,IAAI,GAAkB,MAAM;IAC5B,QAAQ,GAAG,OAAO;IACa,SAAS,GAAG,KAAK;uGAN9C,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAML,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtB1B;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,syDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIU,cAAc,EAAA,UAAA,EAAA,CAAA;kBAlB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB;;;;;;;;;;;;GAYT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,syDAAA,CAAA,EAAA;;sBAG9C;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;ACJxC,IAAI,eAAe,GAAG,CAAC;MAMV,SAAS,CAAA;AACH,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,SAAS,GAAG,CAAA,WAAA,EAAc,EAAE,eAAe,EAAE;AAEtD,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,SAAS;IAEG,OAAO,GAA8B,EAAE;IAClD,iBAAiB,GAAsB,KAAK;IAC5C,aAAa,GAAkB,MAAM;IACrC,iBAAiB,GAAG,OAAO;IACG,kBAAkB,GAAG,GAAG;IACxB,kBAAkB,GAAG,EAAE;IACtB,kBAAkB,GAAG,KAAK;IAC1B,iBAAiB,GAAG,KAAK;IAGvD,gBAAgB,GAAA;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;IAGU,gBAAgB,GAAA;QACxB,IAAI,CAAC,YAAY,EAAE;IACrB;IAGU,aAAa,GAAA;QACrB,IAAI,CAAC,YAAY,EAAE;IACrB;IAGU,cAAc,GAAA;QACtB,IAAI,CAAC,YAAY,EAAE;IACrB;IAGU,gBAAgB,GAAA;QACxB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;AAGU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,IAAI,CAAC,OAAO,EAAE;IAC5C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEQ,IAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE;AACvD,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvE;AAEQ,IAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAA;AAClD,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvE;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE;AAEvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,gBAAgB;AAChE,QAAA,IAAI,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,EAAE;YACrD,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClD;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;YACzE,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3C;QAEA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC;IAC/F;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAClF;IAEQ,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU;QAE3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,gBAAgB,EAAE,IAAI,CAAC;AACpB,iBAAA,QAAQ;AACR,iBAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU;AACnC,iBAAA,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE;iBAC9B,sBAAsB,CAAC,KAAK;iBAC5B,QAAQ,CAAC,IAAI,CAAC;YACjB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC1D,YAAA,UAAU,EAAE,oBAAoB;AACjC,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU;IACxB;IAEQ,SAAS,GAAA;QACf,MAAM,MAAM,GAAG,CAAC;AAChB,QAAA,MAAM,GAAG,GAAmD;AAC1D,YAAA,GAAG,EAAE;AACH,gBAAA;AACE,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,CAAC,MAAM;AACjB,iBAAA;AACF,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA;AACE,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA;AACE,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,CAAC,MAAM;AACjB,iBAAA;AACF,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA;AACE,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,OAAO,EAAE,MAAM;AAChB,iBAAA;AACF,aAAA;SACF;AAED,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACpC;AAEA,IAAA,IAAY,iBAAiB,GAAA;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IAC1C;IAEQ,WAAW,GAAA;AACjB,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;AAEQ,IAAA,0BAA0B,CAChC,QAAiB,EAAA;QAEjB,OAAO,CAAC,CAAC,QAAQ,IAAI,OAAQ,QAA8C,CAAC,aAAa,KAAK,UAAU;IAC1G;uGAnLW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,6QAgBA,eAAe,CAAA,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EACf,eAAe,CAAA,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EACf,gBAAgB,iEAChB,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAnBzB,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAaE,KAAK;uBAAC,WAAW;;sBACjB;;sBACA;;sBACA;;sBACA,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;sBACpC,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;sBACpC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBACrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAErC,YAAY;uBAAC,YAAY;;sBAKzB,YAAY;uBAAC,YAAY;;sBAKzB,YAAY;uBAAC,SAAS;;sBAKtB,YAAY;uBAAC,UAAU;;sBAKvB,YAAY;uBAAC,YAAY;;sBAMzB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AC5ErC;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"telcomdev-ui.mjs","sources":["../../../projects/telcomdev-ui/src/lib/telcomdev-ui.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-iconos.ts","../../../projects/telcomdev-ui/src/lib/alerta/td-alerta.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icono-registry.ts","../../../projects/telcomdev-ui/src/lib/iconos/td-icon.ts","../../../projects/telcomdev-ui/src/lib/badge/td-badge.ts","../../../projects/telcomdev-ui/src/lib/button/td-button.ts","../../../projects/telcomdev-ui/src/lib/form-control/td-form-control.ts","../../../projects/telcomdev-ui/src/lib/checkbox/td-checkbox.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.ts","../../../projects/telcomdev-ui/src/lib/menu/td-menu.html","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.ts","../../../projects/telcomdev-ui/src/lib/data-table/td-data-table.html","../../../projects/telcomdev-ui/src/lib/date-picker/td-date-picker.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.model.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-ref.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-panel.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-actions.ts","../../../projects/telcomdev-ui/src/lib/dialog/td-dialog-close.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.ts","../../../projects/telcomdev-ui/src/lib/footer/td-footer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.ts","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.html","../../../projects/telcomdev-ui/src/lib/file-viewer/td-file-viewer.service.ts","../../../projects/telcomdev-ui/src/lib/file-upload/td-file-upload.ts","../../../projects/telcomdev-ui/src/lib/file-upload/td-file-upload.html","../../../projects/telcomdev-ui/src/lib/header/td-header.ts","../../../projects/telcomdev-ui/src/lib/header/td-header.html","../../../projects/telcomdev-ui/src/lib/input/td-input.ts","../../../projects/telcomdev-ui/src/lib/input/td-textarea.ts","../../../projects/telcomdev-ui/src/lib/layout/td-layout.ts","../../../projects/telcomdev-ui/src/lib/radio/td-radio-group.ts","../../../projects/telcomdev-ui/src/lib/radio/td-radio-group.html","../../../projects/telcomdev-ui/src/lib/select/td-autocomplete-select.ts","../../../projects/telcomdev-ui/src/lib/select/td-select.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.ts","../../../projects/telcomdev-ui/src/lib/sidebar/td-sidebar.html","../../../projects/telcomdev-ui/src/lib/tabs/td-tab.ts","../../../projects/telcomdev-ui/src/lib/tabs/td-tabs.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.model.ts","../../../projects/telcomdev-ui/src/lib/theme/td-theme.service.ts","../../../projects/telcomdev-ui/src/lib/tooltip/td-tooltip-panel.ts","../../../projects/telcomdev-ui/src/lib/tooltip/td-tooltip.directive.ts","../../../projects/telcomdev-ui/src/public-api.ts","../../../projects/telcomdev-ui/src/telcomdev-ui.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'td-telcomdev-ui',\n imports: [],\n template: ` <p>telcomdev-ui works!</p> `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: ``,\n})\nexport class TelcomdevUi {}\n","import { TdIconoDefinicion } from './td-icono.model';\n\nexport const TD_ICONOS = {\n home: {\n path: 'M3 10.5 12 3l9 7.5V21a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1V10.5Z',\n },\n dashboard: {\n path: 'M4 3h6a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm10 0h6a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm0 8h6a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1ZM4 14h6a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z',\n },\n folder: {\n path: 'M3 5a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Z',\n },\n settings: {\n path: 'M12 8.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Zm8.5 3.5c0-.5-.05-.98-.14-1.45l2.02-1.57-2-3.46-2.47 1a8.7 8.7 0 0 0-2.5-1.45L15 2.5h-4l-.4 2.57a8.7 8.7 0 0 0-2.51 1.45l-2.47-1-2 3.46 2.02 1.57a7.7 7.7 0 0 0 0 2.9l-2.02 1.57 2 3.46 2.47-1a8.7 8.7 0 0 0 2.5 1.45L11 21.5h4l.4-2.57a8.7 8.7 0 0 0 2.51-1.45l2.47 1 2-3.46-2.02-1.57c.09-.47.14-.95.14-1.45Z',\n },\n people: {\n path: 'M16 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM6.5 12a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7ZM16 13c-4 0-7 2-7 4.5V21h14v-3.5C23 15 20 13 16 13ZM6.5 14C2.9 14 1 15.8 1 18v3h6v-3.5c0-1.2.48-2.28 1.3-3.16A9.3 9.3 0 0 0 6.5 14Z',\n },\n person: {\n path: 'M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm0 2c-5 0-9 2.5-9 5.5V22h18v-2.5c0-3-4-5.5-9-5.5Z',\n },\n security: {\n path: 'M12 2 4 5v6c0 5.05 3.41 9.74 8 11 4.59-1.26 8-5.95 8-11V5l-8-3Zm-1 14-4-4 1.4-1.4 2.6 2.58 5.6-5.58L18 9l-7 7Z',\n },\n inventory: {\n path: 'm12 2 9 5-9 5-9-5 9-5Zm-7 8.5 6 3.33V22l-6-3.33V10.5Zm8 11.5v-8.17l6-3.33v8.17L13 22Z',\n },\n shopping_cart: {\n path: 'M7 18a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm10 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM6.2 6l.8 2h11.6l-1.9 5H8.1L4.3 3H1v2h2l3.6 9.6A2 2 0 0 0 8.5 16H19v-2H8.5l-.4-1H18a2 2 0 0 0 1.86-1.27L22 6H6.2Z',\n },\n receipt: {\n path: 'M5 2v20l3-2 4 2 4-2 3 2V2l-3 2-4-2-4 2-3-2Zm3 6h8v2H8V8Zm0 4h8v2H8v-2Z',\n },\n assessment: {\n path: 'M4 20h16v2H4a2 2 0 0 1-2-2V4h2v16Zm3-2H5v-6h2v6Zm4 0H9V7h2v11Zm4 0h-2V4h2v14Zm4 0h-2v-9h2v9Z',\n },\n description: {\n path: 'M6 2h8l5 5v15H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm7 1.5V8h4.5L13 3.5ZM8 12v2h8v-2H8Zm0 4v2h8v-2H8Z',\n },\n business: {\n path: 'M3 21V3h10v5h8v13h-7v-4h-2v4H3Zm3-14h2V5H6v2Zm4 0h2V5h-2v2Zm-4 4h2V9H6v2Zm4 0h2V9h-2v2Zm6 1h2v-2h-2v2Zm0 4h2v-2h-2v2Z',\n },\n chevron_left: {\n path: 'M14.7 5.3a1 1 0 0 1 0 1.4L9.4 12l5.3 5.3a1 1 0 1 1-1.4 1.4l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 0 1 1.4 0Z',\n },\n chevron_right: {\n path: 'M9.3 5.3a1 1 0 0 0 0 1.4l5.3 5.3-5.3 5.3a1 1 0 1 0 1.4 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.4 0Z',\n },\n sun: {\n path: 'M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0-5a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1Zm0 17a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1ZM2 12a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Zm17 0a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1ZM4.22 4.22a1 1 0 0 1 1.42 0l1.41 1.42a1 1 0 0 1-1.41 1.41L4.22 5.64a1 1 0 0 1 0-1.42Zm12.73 12.73a1 1 0 0 1 1.41 0l1.42 1.41a1 1 0 0 1-1.42 1.42l-1.41-1.42a1 1 0 0 1 0-1.41Zm2.83-12.73a1 1 0 0 1 0 1.42l-1.42 1.41a1 1 0 0 1-1.41-1.41l1.41-1.42a1 1 0 0 1 1.42 0ZM7.05 16.95a1 1 0 0 1 0 1.41l-1.41 1.42a1 1 0 0 1-1.42-1.42l1.42-1.41a1 1 0 0 1 1.41 0Z',\n },\n moon: {\n path: 'M20.5 15.2A8.5 8.5 0 0 1 8.8 3.5 9 9 0 1 0 20.5 15.2Z',\n },\n alert: {\n path: 'M12 2 1 21h22L12 2Zm-1 7h2v6h-2V9Zm0 8h2v2h-2v-2Z',\n },\n check: {\n path: 'm9.2 16.2-4.4-4.4-1.6 1.6 6 6L21 7.6 19.4 6 9.2 16.2Z',\n },\n close: {\n path: 'M6.4 5 12 10.6 17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6L6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5Z',\n },\n menu: {\n path: 'M3 6h18v2H3V6Zm0 5h18v2H3v-2Zm0 5h18v2H3v-2Z',\n },\n search: {\n path: 'M10.5 3a7.5 7.5 0 1 0 4.73 13.32L20.91 22 22 20.91l-5.68-5.68A7.5 7.5 0 0 0 10.5 3Zm0 2a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11Z',\n },\n visibility: {\n path: 'M12 4.5C6.5 4.5 2.1 8 1 12c1.1 4 5.5 7.5 11 7.5S21.9 16 23 12c-1.1-4-5.5-7.5-11-7.5Zm0 12a4.5 4.5 0 1 1 0-9 4.5 4.5 0 0 1 0 9Zm0-2a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z',\n },\n visibility_off: {\n path: 'm3.3 2 18.7 18.7-1.3 1.3-3.15-3.15A12.2 12.2 0 0 1 12 20C6.5 20 2.1 16.5 1 12a11.6 11.6 0 0 1 3.4-5.2L2 4.3 3.3 2Zm4.42 7.02A4.5 4.5 0 0 0 14.98 16l-1.55-1.55a2.5 2.5 0 0 1-3.88-3.88L7.72 9.02ZM12 4c5.5 0 9.9 3.5 11 8a11.2 11.2 0 0 1-2.53 4.35l-3.3-3.3A5.5 5.5 0 0 0 10.95 6.83L8.58 4.46A13.4 13.4 0 0 1 12 4Z',\n },\n notifications: {\n path: 'M12 22a2.5 2.5 0 0 0 2.45-2h-4.9A2.5 2.5 0 0 0 12 22Zm7-6v-5a7 7 0 0 0-5.5-6.84V3a1.5 1.5 0 0 0-3 0v1.16A7 7 0 0 0 5 11v5l-2 2v1h18v-1l-2-2Z',\n },\n chevron_down: {\n path: 'M5.3 8.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.4Z',\n },\n apps: {\n path: 'M4 3h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM4 15h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm12 0h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Z',\n },\n help: {\n path: 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-4.5a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Zm.2-9.5c-2 0-3.37 1.03-3.7 2.75l1.95.4c.17-.84.77-1.3 1.67-1.3 1 0 1.63.52 1.63 1.35 0 .67-.33 1.03-1.27 1.58-1.12.65-1.48 1.27-1.48 2.47V14h2v-.55c0-.67.2-.94 1.12-1.5 1.18-.72 1.88-1.58 1.88-2.9C16 7.25 14.5 6 12.2 6Z',\n },\n add: {\n path: 'M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6V5Z',\n },\n edit: {\n path: 'm16.86 3.49 3.65 3.65L8.65 19H5v-3.65L16.86 3.49ZM19.73 2.27a1.75 1.75 0 0 0-2.47 0l-1.35 1.35 3.65 3.65 1.35-1.35a1.75 1.75 0 0 0 0-2.47l-1.18-1.18Z',\n },\n delete: {\n path: 'M8 3h8l1 2h4v2H3V5h4l1-2Zm-2 6h12l-1 12H7L6 9Zm4 2v7h2v-7h-2Zm4 0v7h2v-7h-2Z',\n },\n toggle_on: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12Zm0 10a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n toggle_off: {\n path: 'M17 6H7a6 6 0 0 0 0 12h10a6 6 0 0 0 0-12ZM7 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z',\n },\n inbox: {\n path: 'M4 3h16l3 11v7H1v-7L4 3Zm1.5 2L3 14h5l1 2h6l1-2h5l-2.5-9h-13Z',\n },\n pdf: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M7.1 20v-6.5m0 1.1c.45-.75 1.25-1.15 2.05-1.05 1.25.15 1.85 1.25 1.7 2.65-.15 1.35-.9 2.2-2.05 2.15-.75-.05-1.35-.4-1.7-.95m7.85-5.9V18.4m0-3.8c-.45-.75-1.25-1.15-2.05-1.05-1.25.15-1.85 1.25-1.7 2.65.15 1.35.9 2.2 2.05 2.15.75-.05 1.35-.4 1.7-.95m2.15 1v-5.65c0-1.15.55-1.75 1.65-1.75.35 0 .65.05.9.15m-2.5 3.05h2.1',\n estilo: 'linea',\n grosor: 1.65,\n },\n save: {\n path: 'M5 3h12l4 4v14H3V5a2 2 0 0 1 2-2Zm1 2a1 1 0 0 0-1 1v13h14V8h-4V5H6Zm2 0v5h7V5H8Zm1 8h6a2 2 0 0 1 2 2v4H7v-4a2 2 0 0 1 2-2Z',\n },\n copy: {\n path: 'M8 3h11a2 2 0 0 1 2 2v11h-2V5H8V3ZM5 7h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Zm0 2v10h10V9H5Z',\n },\n download: {\n path: 'M11 3h2v10.17l3.59-3.58L18 11l-6 6-6-6 1.41-1.41L11 13.17V3ZM4 19h16v2H4v-2Z',\n },\n upload: {\n path: 'm12 3 6 6-1.41 1.41L13 6.83V17h-2V6.83l-3.59 3.58L6 9l6-6ZM4 19h16v2H4v-2Z',\n },\n print: {\n path: 'M7 3h10v4H7V3Zm10 12v6H7v-6h10Zm2-7a3 3 0 0 1 3 3v6h-3v-4H5v4H2v-6a3 3 0 0 1 3-3h14Zm-4 9H9v2h6v-2Zm4-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z',\n },\n excel: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M8 11h8v7.5H8V11Zm0 3.75h8M11.9 11v7.5',\n estilo: 'linea',\n grosor: 1.65,\n },\n xml: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M9.25 12l-2.5 3 2.5 3m5.5-6 2.5 3-2.5 3m-1.5-7-2.5 8',\n estilo: 'linea',\n grosor: 1.65,\n },\n zip: {\n path: 'M6.5 2.75h8l4.75 4.75v13.75H6.5a1.75 1.75 0 0 1-1.75-1.75v-15A1.75 1.75 0 0 1 6.5 2.75Zm8 0V7.5h4.75M10.25 2.75h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5m-3.5 2.25h3.5M12 11.75v3m-1.75 0h3.5v3.5h-3.5v-3.5Z',\n estilo: 'linea',\n grosor: 1.65,\n },\n file: {\n path: 'M6 2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm8 2H6v16h12V8h-4V4Zm2 2 2 2h-2V6Z',\n },\n image: {\n path: 'M4 3h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm0 2v14h16V5H4Zm3.5 2A2.5 2.5 0 1 1 5 9.5 2.5 2.5 0 0 1 7.5 7Zm12 10-4.5-5-3.2 3.5-2.3-2.5L4.5 18h15v-1Z',\n },\n calendar: {\n path: 'M7 2h2v2h6V2h2v2h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2V2ZM5 9v11h14V9H5Zm0-3v1h14V6H5Z',\n },\n clock: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n history: {\n path: 'M12 4a8 8 0 1 1-7.45 5H2l3.5-4L9 9H6.67A6 6 0 1 0 12 6V4Zm-1 3h2v4.59l3.2 3.2-1.41 1.42L11 12.41V7Z',\n },\n filter: {\n path: 'M3 4h18l-7 8v6l-4 2v-8L3 4Zm4.41 2L12 11.25 16.59 6H7.41Z',\n },\n refresh: {\n path: 'M17.65 6.35A7.95 7.95 0 0 0 12 4a8 8 0 1 0 7.75 10h-2.08A6 6 0 1 1 16.2 7.8L13 11h8V3l-3.35 3.35Z',\n },\n sort: {\n path: 'M7 3 3 7h3v11H3l4 4 4-4H8V7h3L7 3Zm10 0-4 4h3v11h-3l4 4 4-4h-3V7h3l-4-4Z',\n },\n more_vertical: {\n path: 'M12 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 6a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z',\n },\n more_horizontal: {\n path: 'M8 12a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Zm6 0a2 2 0 1 0-4 0 2 2 0 0 0 4 0Z',\n },\n arrow_back: {\n path: 'm11 5-7 7 7 7 1.41-1.41L7.83 13H21v-2H7.83l4.58-4.59L11 5Z',\n },\n arrow_forward: {\n path: 'm13 5-1.41 1.41L16.17 11H3v2h13.17l-4.58 4.59L13 19l7-7-7-7Z',\n },\n login: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n logout: {\n path: 'M4 3h9a2 2 0 0 1 2 2v4h-2V5H4v14h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Zm13 5 4 4-4 4v-3H8v-2h9V8Z',\n },\n lock: {\n path: 'M7 10V7a5 5 0 0 1 10 0v3h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm2 0h6V7a3 3 0 0 0-6 0v3Zm3 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n lock_open: {\n path: 'M7 10V7a5 5 0 0 1 9.9-1H14.8A3 3 0 0 0 9 7v3h9a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h1Zm5 4a2 2 0 0 0-1 3.73V19h2v-1.27A2 2 0 0 0 12 14Z',\n },\n mail: {\n path: 'M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Zm0 3.24V18h16V7.24l-8 5-8-5ZM18.53 6H5.47L12 10.08 18.53 6Z',\n },\n phone: {\n path: 'M6.62 2.5 10 6.2 7.9 8.3a15.5 15.5 0 0 0 7.8 7.8l2.1-2.1 3.7 3.38V20a2 2 0 0 1-2 2C9.84 22 2 14.16 2 4.5a2 2 0 0 1 2-2h2.62Z',\n },\n send: {\n path: 'm3 3 19 9-19 9 2-7 10-2-10-2-2-7Zm3.62 5.55.57 2L12 12l-4.81 1.45-.57 2L17.53 12 6.62 8.55Z',\n },\n location: {\n path: 'M12 2a8 8 0 0 1 8 8c0 5.5-8 12-8 12S4 15.5 4 10a8 8 0 0 1 8-8Zm0 2a6 6 0 0 0-6 6c0 3.55 3.92 7.68 6 9.65 2.08-1.97 6-6.1 6-9.65a6 6 0 0 0-6-6Zm0 3a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n language: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm6.92 6h-3.08a15.7 15.7 0 0 0-1.38-3.18A8.05 8.05 0 0 1 18.92 8ZM12 4c-.83 1.2-1.5 2.53-1.84 4h3.68A13.7 13.7 0 0 0 12 4ZM9.54 4.82A15.7 15.7 0 0 0 8.16 8H5.08a8.05 8.05 0 0 1 4.46-3.18ZM4.26 10A8.3 8.3 0 0 0 4 12c0 .69.09 1.36.26 2h3.55a17 17 0 0 1 0-4H4.26Zm5.57 0a14.6 14.6 0 0 0 0 4h4.34a14.6 14.6 0 0 0 0-4H9.83Zm6.36 0a17 17 0 0 1 0 4h3.55A8.3 8.3 0 0 0 20 12c0-.69-.09-1.36-.26-2h-3.55ZM5.08 16h3.08c.3 1.14.77 2.2 1.38 3.18A8.05 8.05 0 0 1 5.08 16Zm5.08 0c.34 1.47 1.01 2.8 1.84 4 .83-1.2 1.5-2.53 1.84-4h-3.68Zm4.3 3.18A15.7 15.7 0 0 0 15.84 16h3.08a8.05 8.05 0 0 1-4.46 3.18Z',\n },\n info: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 6h2v7h-2v-7Zm0-3h2v2h-2V7Z',\n },\n warning: {\n path: 'M12 2 1 21h22L12 2Zm0 4.03L19.53 19H4.47L12 6.03ZM11 10v5h2v-5h-2Zm0 6v2h2v-2h-2Z',\n },\n error: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1 3h2v7h-2V7Zm0 9h2v2h-2v-2Z',\n },\n check_circle: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-1.5 11.5-3-3 1.41-1.41 1.59 1.58 4.59-4.58 1.41 1.41-6 6Z',\n },\n cancel: {\n path: 'M12 2a10 10 0 1 1 0 20 10 10 0 0 1 0-20Zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm-3.3 3.3L12 10.59l3.3-3.3 1.4 1.42-3.29 3.29 3.3 3.3-1.42 1.4L12 13.41l-3.3 3.3-1.4-1.42 3.29-3.29-3.3-3.3L8.7 7.3Z',\n },\n star: {\n path: 'm12 2.5 2.94 5.96 6.58.96-4.76 4.64 1.12 6.56L12 17.53l-5.88 3.09 1.12-6.56-4.76-4.64 6.58-.96L12 2.5Z',\n },\n favorite: {\n path: 'M12 21s-9-5.4-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.6-9 12-9 12Z',\n },\n database: {\n path: 'M12 2C6.48 2 2 3.79 2 6v12c0 2.21 4.48 4 10 4s10-1.79 10-4V6c0-2.21-4.48-4-10-4Zm0 2c4.42 0 8 1.12 8 2s-3.58 2-8 2-8-1.12-8-2 3.58-2 8-2ZM4 9.2c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V12c0 .88-3.58 2-8 2s-8-1.12-8-2V9.2Zm0 6c1.83.82 4.69 1.3 8 1.3s6.17-.48 8-1.3V18c0 .88-3.58 2-8 2s-8-1.12-8-2v-2.8Z',\n },\n cloud: {\n path: 'M7.5 20A5.5 5.5 0 0 1 6.3 9.13 7 7 0 0 1 19 11.5h.5a4.25 4.25 0 0 1 0 8.5h-12Zm0-2h12a2.25 2.25 0 0 0 0-4.5h-2.4l-.05-1.2A5 5 0 0 0 7.9 10.1l-.42 1.05-1.12.17A3.5 3.5 0 0 0 7.5 18Z',\n },\n camera: {\n path: 'M8 4h8l1.5 2H21a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.5L8 4Zm4 4a5 5 0 1 0 0 10 5 5 0 0 0 0-10Zm0 2a3 3 0 1 1 0 6 3 3 0 0 1 0-6Z',\n },\n link: {\n path: 'M10.59 13.41a2 2 0 0 0 2.82 0l3-3a2 2 0 0 0-2.82-2.82l-1.3 1.29-1.41-1.41 1.3-1.3a4 4 0 1 1 5.65 5.66l-3 3a4 4 0 0 1-5.66 0l-.7-.71 1.41-1.41.71.7Zm2.82-2.82a2 2 0 0 0-2.82 0l-3 3a2 2 0 0 0 2.82 2.82l1.3-1.29 1.41 1.41-1.3 1.3a4 4 0 1 1-5.65-5.66l3-3a4 4 0 0 1 5.66 0l.7.71-1.41 1.41-.71-.7Z',\n },\n external_link: {\n path: 'M14 3h7v7h-2V6.41l-8.29 8.3-1.42-1.42L17.59 5H14V3ZM5 5h6v2H5v12h12v-6h2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2Z',\n },\n} satisfies Record<string, TdIconoDefinicion>;\n\nexport type TdIconoNombre = keyof typeof TD_ICONOS;\n\nexport const TD_ICONOS_NOMBRES = Object.freeze(\n Object.keys(TD_ICONOS) as TdIconoNombre[]\n);\n","export type TdAlertType = 'success' | 'error' | 'warning' | 'info' | 'question';\r\nexport type TdToastType = 'success' | 'error' | 'warning' | 'info' | 'neutral';\nimport { TdIconoDefinicion } from '../iconos/td-icono.model';\nimport { TD_ICONOS } from '../iconos/td-iconos';\n\nexport type TdToastPosition =\n | 'bottom-left'\r\n | 'bottom-right'\r\n | 'top-left'\r\n | 'top-right'\r\n | 'bottom-center'\r\n | 'top-center';\r\n\r\nexport type TdAlertaTipo = 'exito' | 'error' | 'advertencia' | 'info' | 'pregunta';\r\nexport type TdSnackbarTipo = TdToastType | 'exito' | 'advertencia';\r\nexport type TdSnackbarPosicion =\r\n | 'inferior-izquierda'\r\n | 'inferior-derecha'\r\n | 'superior-izquierda'\r\n | 'superior-derecha'\r\n | 'inferior-centro'\r\n | 'superior-centro';\r\n\r\ntype TdAnyAlertType = TdAlertType | TdAlertaTipo;\r\ntype TdAnyToastType = TdToastType | TdSnackbarTipo;\r\ntype TdAnyToastPosition = TdToastPosition | TdSnackbarPosicion;\r\n\r\nexport interface TdAlertOptions {\r\n title?: string;\r\n message?: string;\r\n type?: TdAnyAlertType;\r\n confirmText?: string;\r\n cancelText?: string;\r\n showCancel?: boolean;\r\n closeOnEscape?: boolean;\r\n closeOnBackdrop?: boolean;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport interface TdAlertaOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAnyAlertType;\r\n textoConfirmar?: string;\r\n textoCancelar?: string;\r\n mostrarCancelar?: boolean;\r\n cerrarConEscape?: boolean;\r\n cerrarConFondo?: boolean;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport interface TdToastOptions {\r\n title?: string;\r\n message?: string;\r\n type?: TdAnyToastType;\r\n position?: TdAnyToastPosition;\r\n duration?: number;\r\n actionText?: string;\r\n dismissible?: boolean;\r\n showProgress?: boolean;\r\n maxVisible?: number;\r\n}\r\n\r\nexport interface TdSnackbarOpciones {\r\n titulo?: string;\r\n mensaje?: string;\r\n tipo?: TdAnyToastType;\r\n posicion?: TdAnyToastPosition;\r\n duracion?: number;\r\n textoAccion?: string;\r\n cerrable?: boolean;\r\n mostrarProgreso?: boolean;\r\n maximoVisible?: number;\r\n}\r\n\r\ninterface TdAlertConfig {\r\n title: string;\r\n message: string;\r\n type: TdAlertType;\r\n confirmText: string;\r\n cancelText: string;\r\n showCancel: boolean;\r\n closeOnEscape: boolean;\r\n closeOnBackdrop: boolean;\r\n autoFocus: boolean;\r\n}\r\n\r\ninterface TdToastConfig {\n title: string;\n message: string;\n type: TdToastType;\n position: TdToastPosition;\n duration: number;\r\n actionText: string;\r\n dismissible: boolean;\r\n showProgress: boolean;\r\n maxVisible: number;\r\n}\r\n\r\nexport class TdAlert {\n private static readonly styleId = 'td-alert-styles';\n private static readonly hostId = 'td-alert-host';\n private static readonly toastWrapperId = 'td-toast-wrapper';\n private static readonly toastHostId = 'td-toast-host';\n private static readonly toastRootPrefix = 'td-toast-root';\n private static readonly alertZIndex = '2147483647';\n private static readonly toastQueue = new WeakMap<HTMLElement, HTMLElement[]>();\n private static scrollLockCount = 0;\n private static previousBodyOverflow = '';\n\r\n static success(message: string, title = 'Operación exitosa'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'success',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static error(message: string, title = 'Error'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'error',\r\n confirmText: 'Cerrar',\r\n });\r\n }\r\n\r\n static systemError(message: string, title = 'Error de sistema'): Promise<boolean> {\r\n return this.error(message, title);\r\n }\r\n\r\n static warning(message: string, title = 'Advertencia'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'warning',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static info(message: string, title = 'Información'): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'info',\r\n confirmText: 'Aceptar',\r\n });\r\n }\r\n\r\n static confirm(\r\n message: string,\r\n title = '¿Estás seguro?',\r\n confirmText = 'Sí, continuar',\r\n cancelText = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'question',\r\n confirmText,\r\n cancelText,\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static confirmDelete(\r\n message = 'Esta acción no se puede deshacer.',\r\n title = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title,\r\n message,\r\n type: 'warning',\r\n confirmText: 'Sí, eliminar',\r\n cancelText: 'Cancelar',\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static show(options: TdAlertOptions | TdAlertaOpciones): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.injectStyles();\r\n\r\n const config = this.normalizeAlertOptions(options);\r\n const previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;\r\n\r\n return new Promise<boolean>((resolve) => {\n this.lockBodyScroll();\n const host = this.getHost();\n\n const backdrop = document.createElement('dialog');\n backdrop.className = 'td-alert-dialog';\n this.applyAlertLayer(backdrop, this.alertZIndex);\n backdrop.setAttribute('aria-label', config.title || 'Alerta');\n\n const modal = document.createElement('div');\n modal.className = `td-alert-modal td-alert-modal--${config.type}`;\n modal.setAttribute('role', 'dialog');\n modal.setAttribute('aria-modal', 'true');\n modal.setAttribute('aria-labelledby', 'td-alert-title');\r\n\r\n const accent = document.createElement('span');\r\n accent.className = 'td-alert-accent';\r\n accent.setAttribute('aria-hidden', 'true');\r\n\r\n const icon = document.createElement('div');\n icon.className = `td-alert-icon td-alert-icon--${config.type}`;\n icon.appendChild(this.createIcon(this.getAlertIcon(config.type)));\n\r\n const title = document.createElement('h2');\r\n title.id = 'td-alert-title';\r\n title.className = 'td-alert-title';\r\n title.textContent = config.title;\r\n\r\n const message = document.createElement('p');\r\n message.className = 'td-alert-message';\r\n message.textContent = config.message;\r\n\r\n const actions = document.createElement('div');\r\n actions.className = 'td-alert-actions';\r\n\r\n const confirmButton = document.createElement('button');\r\n confirmButton.type = 'button';\r\n confirmButton.className = `td-alert-button td-alert-button--${config.type}`;\r\n confirmButton.textContent = config.confirmText;\r\n\r\n const cancelButton = document.createElement('button');\r\n cancelButton.type = 'button';\r\n cancelButton.className = 'td-alert-button td-alert-button--cancel';\r\n cancelButton.textContent = config.cancelText;\r\n\r\n let closed = false;\n const close = (result: boolean): void => {\n if (closed) return;\n closed = true;\n document.removeEventListener('keydown', onKeyDown);\n backdrop.classList.add('td-alert-dialog--leaving');\n\n window.setTimeout(() => {\n if (typeof backdrop.close === 'function' && backdrop.open) {\n backdrop.close();\n }\n backdrop.remove();\n this.unlockBodyScroll();\n previouslyFocused?.focus?.();\n resolve(result);\n }, 150);\n };\r\n\r\n const onKeyDown = (event: KeyboardEvent): void => {\r\n if (event.key === 'Escape' && config.closeOnEscape) {\r\n close(false);\r\n }\r\n\r\n if (event.key === 'Tab') {\r\n this.keepFocusInside(event, modal);\r\n }\r\n };\r\n\r\n confirmButton.addEventListener('click', () => close(true));\r\n cancelButton.addEventListener('click', () => close(false));\r\n\n if (config.closeOnBackdrop) {\n backdrop.addEventListener('click', (event) => {\n if (event.target === backdrop) {\n close(false);\n }\n });\n }\n\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n if (config.showCancel) {\r\n actions.appendChild(cancelButton);\r\n }\r\n\r\n actions.appendChild(confirmButton);\r\n\r\n const content = document.createElement('div');\r\n content.className = 'td-alert-content';\r\n\r\n content.appendChild(title);\r\n if (config.message) {\r\n content.appendChild(message);\r\n }\r\n\r\n content.appendChild(actions);\n modal.appendChild(accent);\n modal.appendChild(icon);\n modal.appendChild(content);\n backdrop.appendChild(modal);\n host.appendChild(backdrop);\n\n if (typeof backdrop.showModal === 'function') {\n backdrop.showModal();\n } else {\n backdrop.setAttribute('open', 'true');\n }\n\n if (config.autoFocus) {\n confirmButton.focus();\n }\n });\r\n }\r\n\r\n static notify(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n return this.toast(message, options);\r\n }\r\n\r\n static toast(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n if (typeof document === 'undefined') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n this.injectStyles();\r\n\r\n const config = this.normalizeToastOptions({ ...options, message });\n\n return new Promise<boolean>((resolve) => {\n const root = this.getToastRoot(config.position);\n const toast = document.createElement('section');\n toast.className = `td-toast td-toast--${config.type}`;\n toast.setAttribute('role', config.type === 'error' ? 'alert' : 'status');\n toast.setAttribute('aria-live', config.type === 'error' ? 'assertive' : 'polite');\n\r\n const icon = document.createElement('span');\n icon.className = 'td-toast-icon';\n icon.appendChild(this.createIcon(this.getToastIcon(config.type)));\n\r\n const content = document.createElement('span');\r\n content.className = 'td-toast-content';\r\n\r\n if (config.title) {\r\n const title = document.createElement('strong');\r\n title.textContent = config.title;\r\n content.appendChild(title);\r\n }\r\n\r\n const messageElement = document.createElement('small');\r\n messageElement.textContent = config.message;\r\n content.appendChild(messageElement);\r\n\n const actions = document.createElement('span');\n actions.className = 'td-toast-actions';\n\n let timeoutId: number | undefined;\n let frameId: number | undefined;\n let remainingDuration = config.duration;\n let progressRatio = 1;\n let timerStartedAt = 0;\n let closed = false;\n let activated = false;\n\n const progress = config.showProgress && config.duration > 0\n ? document.createElement('span')\n : null;\n\n if (progress) {\n progress.className = 'td-toast-progress';\n progress.style.transform = 'scaleX(1)';\n }\n\n const updateProgress = (): void => {\n if (!progress || config.duration <= 0 || timeoutId === undefined) {\n return;\n }\n\n const elapsed = Date.now() - timerStartedAt;\n const currentRemaining = Math.max(0, remainingDuration - elapsed);\n progressRatio = config.duration > 0 ? currentRemaining / config.duration : 0;\n progress.style.transform = `scaleX(${Math.max(0, Math.min(1, progressRatio))})`;\n\n if (currentRemaining > 0) {\n frameId = window.requestAnimationFrame(updateProgress);\n }\n };\n\n const close = (result: boolean): void => {\n if (closed) return;\n closed = true;\n if (timeoutId !== undefined) {\n window.clearTimeout(timeoutId);\n }\n if (frameId !== undefined) {\n window.cancelAnimationFrame(frameId);\n }\n\n toast.classList.add('td-toast--leaving');\n window.setTimeout(() => {\n const queue = this.getToastQueue(root);\n toast.remove();\n this.showNextQueuedToast(root, config.maxVisible);\n this.updateToastQueueIndicator(root);\n if (!root.querySelector('.td-toast') && queue.length === 0) {\n root.remove();\n this.cleanupToastLayer();\n }\n resolve(result);\n }, 160);\n };\r\n const pauseTimer = (): void => {\r\n if (closed || config.duration <= 0 || timeoutId === undefined) {\r\n return;\r\n }\r\n\r\n window.clearTimeout(timeoutId);\n timeoutId = undefined;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n progressRatio = config.duration > 0 ? remainingDuration / config.duration : 0;\n if (progress) {\n progress.style.transform = `scaleX(${Math.max(0, Math.min(1, progressRatio))})`;\n }\n if (frameId !== undefined) {\n window.cancelAnimationFrame(frameId);\n frameId = undefined;\n }\n toast.classList.add('td-toast--paused');\n };\n const resumeTimer = (): void => {\n if (closed || config.duration <= 0 || timeoutId !== undefined || remainingDuration <= 0) {\n return;\n }\r\n\n timerStartedAt = Date.now();\n timeoutId = window.setTimeout(() => close(false), remainingDuration);\n toast.classList.remove('td-toast--paused');\n if (progress) {\n frameId = window.requestAnimationFrame(updateProgress);\n }\n };\n\r\n if (config.actionText) {\r\n const action = document.createElement('button');\r\n action.type = 'button';\r\n action.className = 'td-toast-action';\r\n action.textContent = config.actionText;\r\n action.addEventListener('click', () => close(true));\r\n actions.appendChild(action);\r\n }\r\n\r\n if (config.dismissible) {\r\n const dismiss = document.createElement('button');\r\n dismiss.type = 'button';\n dismiss.className = 'td-toast-dismiss';\n dismiss.setAttribute('aria-label', 'Cerrar notificación');\n dismiss.appendChild(this.createIcon('close'));\n dismiss.addEventListener('click', () => close(false));\n actions.appendChild(dismiss);\n }\n\r\n toast.appendChild(icon);\n toast.appendChild(content);\n toast.appendChild(actions);\n\n if (progress) {\n toast.appendChild(progress);\n }\n\n const activateToast = (): void => {\n if (activated) {\n return;\n }\n activated = true;\n toast.addEventListener('pointerenter', pauseTimer);\n toast.addEventListener('pointerleave', resumeTimer);\n toast.addEventListener('focusin', pauseTimer);\n toast.addEventListener('focusout', resumeTimer);\n if (config.duration > 0) {\n resumeTimer();\n }\n };\n\n toast.addEventListener('td-toast-activate', () => activateToast(), { once: true });\n\n if (this.getVisibleToastCount(root) >= config.maxVisible) {\n this.getToastQueue(root).push(toast);\n this.updateToastQueueIndicator(root);\n return;\n }\n\n root.appendChild(toast);\n activateToast();\n });\n }\n\r\n static toastSuccess(message: string, title = 'Guardado'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'success' });\r\n }\r\n\r\n static toastError(message: string, title = 'No se pudo completar'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'error', duration: 6500 });\r\n }\r\n\r\n static toastWarning(message: string, title = 'Atención'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'warning', duration: 5600 });\r\n }\r\n\r\n static toastInfo(message: string, title = 'Información'): Promise<boolean> {\r\n return this.toast(message, { title, type: 'info' });\r\n }\r\n\r\n static snackbar(message: string, options: TdToastOptions | TdSnackbarOpciones = {}): Promise<boolean> {\r\n return this.toast(message, options);\r\n }\r\n\r\n static snackbarExito(message: string, titulo = 'Listo'): Promise<boolean> {\r\n return this.toastSuccess(message, titulo);\r\n }\r\n\r\n static snackbarError(message: string, titulo = 'No se pudo completar'): Promise<boolean> {\r\n return this.toastError(message, titulo);\r\n }\r\n\r\n static snackbarAdvertencia(message: string, titulo = 'Atención'): Promise<boolean> {\r\n return this.toastWarning(message, titulo);\r\n }\r\n\r\n static snackbarInfo(message: string, titulo = 'Información'): Promise<boolean> {\r\n return this.toastInfo(message, titulo);\r\n }\r\n\r\n static exito(mensaje: string, titulo = 'Operación exitosa'): Promise<boolean> {\r\n return this.success(mensaje, titulo);\r\n }\r\n\r\n static errorSistema(mensaje: string, titulo = 'Error de sistema'): Promise<boolean> {\r\n return this.systemError(mensaje, titulo);\r\n }\r\n\r\n static advertencia(mensaje: string, titulo = 'Advertencia'): Promise<boolean> {\r\n return this.warning(mensaje, titulo);\r\n }\r\n\r\n static confirmar(\r\n mensaje: string,\r\n titulo = '¿Estás seguro?',\r\n textoConfirmar = 'Sí, continuar',\r\n textoCancelar = 'Cancelar'\r\n ): Promise<boolean> {\r\n return this.confirm(mensaje, titulo, textoConfirmar, textoCancelar);\r\n }\r\n\r\n static confirmarEliminar(\r\n mensaje = 'Esta acción no se puede deshacer.',\r\n titulo = '¿Eliminar registro?'\r\n ): Promise<boolean> {\r\n return this.show({\r\n title: titulo,\r\n message: mensaje,\r\n type: 'warning',\r\n confirmText: 'Sí, eliminar',\r\n cancelText: 'Cancelar',\r\n showCancel: true,\r\n });\r\n }\r\n\r\n static notificar(options: TdSnackbarOpciones): Promise<boolean> {\r\n return this.toast(options.mensaje ?? '', options);\r\n }\r\n\r\n private static normalizeAlertOptions(options: TdAlertOptions | TdAlertaOpciones): TdAlertConfig {\r\n const legacy = options as TdAlertaOpciones;\r\n const modern = options as TdAlertOptions;\r\n\r\n return {\r\n title: modern.title ?? legacy.titulo ?? '',\r\n message: modern.message ?? legacy.mensaje ?? '',\r\n type: this.normalizeAlertType(modern.type ?? legacy.tipo ?? 'info'),\r\n confirmText: modern.confirmText ?? legacy.textoConfirmar ?? 'Aceptar',\r\n cancelText: modern.cancelText ?? legacy.textoCancelar ?? 'Cancelar',\r\n showCancel: modern.showCancel ?? legacy.mostrarCancelar ?? false,\r\n closeOnEscape: modern.closeOnEscape ?? legacy.cerrarConEscape ?? true,\r\n closeOnBackdrop: modern.closeOnBackdrop ?? legacy.cerrarConFondo ?? false,\r\n autoFocus: modern.autoFocus ?? legacy.autoFocus ?? true,\r\n };\r\n }\r\n\r\n private static normalizeToastOptions(options: TdToastOptions | TdSnackbarOpciones): TdToastConfig {\n const legacy = options as TdSnackbarOpciones;\n const modern = options as TdToastOptions;\n const explicitPosition = modern.position ?? legacy.posicion;\n const fallbackPosition = this.hasBlockingOverlayOpen() ? 'top-right' : 'bottom-left';\n\n return {\n title: modern.title ?? legacy.titulo ?? '',\n message: modern.message ?? legacy.mensaje ?? '',\n type: this.normalizeToastType(modern.type ?? legacy.tipo ?? 'neutral'),\n position: this.normalizeToastPosition(explicitPosition ?? fallbackPosition),\n duration: modern.duration ?? legacy.duracion ?? 4200,\n actionText: modern.actionText ?? legacy.textoAccion ?? '',\n dismissible: modern.dismissible ?? legacy.cerrable ?? true,\n showProgress: modern.showProgress ?? legacy.mostrarProgreso ?? true,\n maxVisible: modern.maxVisible ?? legacy.maximoVisible ?? 4,\n };\n }\n\n private static hasBlockingOverlayOpen(): boolean {\n if (typeof document === 'undefined') return false;\n\n return !!document.querySelector(\n '.cdk-overlay-pane.td-dialog-overlay, .td-alert-dialog[open], .td-alert-dialog'\n );\n }\n\r\n private static normalizeAlertType(type: TdAnyAlertType): TdAlertType {\r\n const map: Record<string, TdAlertType> = {\r\n exito: 'success',\r\n advertencia: 'warning',\r\n pregunta: 'question',\r\n success: 'success',\r\n error: 'error',\r\n warning: 'warning',\r\n info: 'info',\r\n question: 'question',\r\n };\r\n\r\n return map[type] ?? 'info';\r\n }\r\n\r\n private static normalizeToastType(type: TdAnyToastType): TdToastType {\r\n const map: Record<string, TdToastType> = {\r\n exito: 'success',\r\n advertencia: 'warning',\r\n success: 'success',\r\n error: 'error',\r\n warning: 'warning',\r\n info: 'info',\r\n neutral: 'neutral',\r\n };\r\n\r\n return map[type] ?? 'neutral';\r\n }\r\n\r\n private static normalizeToastPosition(position: TdAnyToastPosition): TdToastPosition {\r\n const map: Record<string, TdToastPosition> = {\r\n 'inferior-izquierda': 'bottom-left',\r\n 'inferior-derecha': 'bottom-right',\r\n 'superior-izquierda': 'top-left',\r\n 'superior-derecha': 'top-right',\r\n 'inferior-centro': 'bottom-center',\r\n 'superior-centro': 'top-center',\r\n 'bottom-left': 'bottom-left',\r\n 'bottom-right': 'bottom-right',\r\n 'top-left': 'top-left',\r\n 'top-right': 'top-right',\r\n 'bottom-center': 'bottom-center',\r\n 'top-center': 'top-center',\r\n };\r\n\r\n return map[position] ?? 'bottom-left';\r\n }\r\n\r\n private static getToastRoot(position: TdToastPosition): HTMLElement {\n const id = `${this.toastRootPrefix}-${position}`;\n const existing = document.getElementById(id);\n if (existing) {\n this.applyAlertLayer(existing, this.nextLayer(this.alertZIndex));\n const layer = this.getToastLayer();\n if (existing.parentElement !== layer) {\n layer.appendChild(existing);\n }\n return existing;\n }\n\n const root = document.createElement('div');\n root.id = id;\n root.className = `td-toast-root td-toast-root--${position}`;\n this.applyAlertLayer(root, this.nextLayer(this.alertZIndex));\n this.getToastLayer().appendChild(root);\n return root;\n }\n\n private static getToastLayer(): HTMLElement {\n const existing = document.getElementById(this.toastHostId);\n if (existing instanceof HTMLElement) {\n return this.bringToastLayerToFront(existing);\n }\n\n const host = document.createElement('div');\n host.id = this.toastHostId;\n host.className = 'td-toast-layer';\n this.applyAlertLayer(host, this.nextLayer(this.alertZIndex));\n host.setAttribute('aria-hidden', 'true');\n host.setAttribute('popover', 'manual');\n return this.bringToastLayerToFront(host);\n }\n\n private static bringToastLayerToFront(layer: HTMLElement): HTMLElement {\n const wrapper = this.getToastWrapper();\n if (layer.parentElement !== wrapper) {\n wrapper.appendChild(layer);\n }\n\n const toastPopover = layer as HTMLElement & {\n showPopover?: () => void;\n hidePopover?: () => void;\n matches?: (selectors: string) => boolean;\n };\n\n if (typeof toastPopover.showPopover === 'function' && !toastPopover.matches?.(':popover-open')) {\n toastPopover.showPopover();\n }\n\n return layer;\n }\n\n private static getToastWrapper(): HTMLElement {\n const existing = document.getElementById(this.toastWrapperId);\n if (existing instanceof HTMLElement) {\n const mountTarget = this.getToastMountTarget();\n if (existing.parentElement !== mountTarget) {\n mountTarget.appendChild(existing);\n }\n return existing;\n }\n\n const wrapper = document.createElement('div');\n wrapper.id = this.toastWrapperId;\n wrapper.className = 'cdk-global-overlay-wrapper td-toast-overlay-wrapper';\n this.applyAlertLayer(wrapper, this.nextLayer(this.alertZIndex));\n this.getToastMountTarget().appendChild(wrapper);\n return wrapper;\n }\n\n private static getToastMountTarget(): HTMLElement {\n return document.querySelector('.cdk-overlay-container') ?? document.body;\n }\n\n private static getHost(): HTMLElement {\n const existing = document.getElementById(this.hostId);\n if (existing) {\n document.body.appendChild(existing);\n return existing;\n }\n\n const host = document.createElement('div');\n host.id = this.hostId;\n host.className = 'td-alert-host';\n this.applyAlertLayer(host, this.alertZIndex);\n document.body.appendChild(host);\n return host;\n }\n\n private static applyAlertLayer(element: HTMLElement, zIndex: string): void {\n element.style.setProperty('z-index', zIndex, 'important');\n element.style.setProperty('isolation', 'isolate');\n }\n\n private static nextLayer(zIndex: string): string {\n const current = Number.parseInt(zIndex, 10);\n return Number.isFinite(current) ? String(current + 1) : zIndex;\n }\n\r\n private static getToastQueue(root: HTMLElement): HTMLElement[] {\n if (!this.toastQueue.has(root)) {\n this.toastQueue.set(root, []);\n }\n\n return this.toastQueue.get(root)!;\n }\n\n private static getVisibleToastCount(root: HTMLElement): number {\n return root.querySelectorAll(':scope > .td-toast').length;\n }\n\n private static showNextQueuedToast(root: HTMLElement, maxVisible: number): void {\n const queue = this.getToastQueue(root);\n const max = Math.max(1, maxVisible);\n\n while (this.getVisibleToastCount(root) < max && queue.length > 0) {\n const nextToast = queue.shift();\n if (!nextToast) {\n break;\n }\n\n root.appendChild(nextToast);\n nextToast.dispatchEvent(new CustomEvent('td-toast-activate'));\n }\n }\n\n private static updateToastQueueIndicator(root: HTMLElement): void {\n const queue = this.getToastQueue(root);\n const existing = root.querySelector<HTMLElement>(':scope > .td-toast-queue-indicator');\n\n if (!queue.length) {\n existing?.remove();\n return;\n }\n\n const indicator = existing ?? document.createElement('div');\n indicator.className = 'td-toast-queue-indicator';\n indicator.textContent = `+${queue.length} notificación${queue.length === 1 ? '' : 'es'}`;\n\n root.appendChild(indicator);\n }\n\n private static cleanupToastLayer(): void {\n const layer = document.getElementById(this.toastHostId);\n if (!(layer instanceof HTMLElement)) {\n return;\n }\n\n if (layer.querySelector('.td-toast-root')) {\n return;\n }\n\n const toastPopover = layer as HTMLElement & { hidePopover?: () => void; matches?: (selectors: string) => boolean };\n if (typeof toastPopover.hidePopover === 'function' && toastPopover.matches?.(':popover-open')) {\n toastPopover.hidePopover();\n }\n\n layer.remove();\n document.getElementById(this.toastWrapperId)?.remove();\n }\n\r\n private static getAlertIcon(type: TdAlertType): keyof typeof TD_ICONOS {\n const icons: Record<TdAlertType, keyof typeof TD_ICONOS> = {\n success: 'check_circle',\n error: 'error',\n warning: 'warning',\n info: 'info',\n question: 'help',\n };\n\n return icons[type];\n }\n\n private static getToastIcon(type: TdToastType): keyof typeof TD_ICONOS {\n const icons: Record<TdToastType, keyof typeof TD_ICONOS> = {\n success: 'check_circle',\n error: 'error',\n warning: 'warning',\n info: 'info',\n neutral: 'notifications',\n };\n\n return icons[type];\n }\n\n private static createIcon(name: keyof typeof TD_ICONOS): SVGSVGElement {\n const definition = TD_ICONOS[name] as TdIconoDefinicion;\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n svg.setAttribute('viewBox', definition.viewBox || '0 0 24 24');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('focusable', 'false');\n path.setAttribute('d', definition.path);\n\n if (definition.estilo === 'linea') {\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', 'currentColor');\n path.setAttribute('stroke-width', `${definition.grosor || 1.75}`);\n path.setAttribute('stroke-linecap', 'round');\n path.setAttribute('stroke-linejoin', 'round');\n } else {\n path.setAttribute('fill', 'currentColor');\n }\n\n svg.appendChild(path);\n return svg;\n }\n\r\n private static keepFocusInside(event: KeyboardEvent, container: HTMLElement): void {\r\n const focusables = Array.from(\r\n container.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n ).filter((element) => !element.hasAttribute('disabled'));\r\n\r\n if (!focusables.length) return;\r\n\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n const active = document.activeElement;\r\n\r\n if (event.shiftKey && active === first) {\r\n event.preventDefault();\r\n last.focus();\r\n } else if (!event.shiftKey && active === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n\r\n private static lockBodyScroll(): void {\r\n if (this.scrollLockCount === 0) {\r\n this.previousBodyOverflow = document.body.style.overflow;\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n this.scrollLockCount += 1;\r\n }\r\n\r\n private static unlockBodyScroll(): void {\r\n this.scrollLockCount = Math.max(0, this.scrollLockCount - 1);\r\n\r\n if (this.scrollLockCount === 0) {\r\n document.body.style.overflow = this.previousBodyOverflow;\r\n }\r\n }\r\n\r\n private static injectStyles(): void {\r\n if (document.getElementById(this.styleId)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = this.styleId;\r\n style.textContent = `\r\n .td-alert-dialog,\n .td-alert-host,\n .td-toast-overlay-wrapper,\n .td-toast-layer,\n .td-toast-root {\n --td-alert-z-index: var(--td-z-alert, 2147483647);\n box-sizing: border-box;\n font-family: var(--td-font-family, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n }\n\n .td-alert-host {\n position: fixed;\n inset: 0;\n z-index: var(--td-alert-z-index) !important;\n pointer-events: none;\n isolation: isolate;\n }\n\n .td-alert-dialog *,\n .td-toast-overlay-wrapper *,\n .td-toast-layer *,\n .td-toast-root * {\n box-sizing: border-box;\n }\n\n .td-toast-overlay-wrapper {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n .td-toast-layer {\n position: fixed;\n inset: 0;\n display: block;\n width: 100dvw;\n min-width: 100dvw;\n max-width: 100dvw;\n height: 100dvh;\n min-height: 100dvh;\n max-height: 100dvh;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n overflow: visible;\n pointer-events: none;\n }\n\n .td-alert-dialog {\n z-index: var(--td-alert-z-index) !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: min(100%, 100dvw);\n max-width: 100dvw;\n border: 0;\n margin: auto;\n padding: 1rem;\n pointer-events: auto;\n background: transparent;\n backdrop-filter: none;\n animation: td-alert-backdrop-in 160ms ease-out;\n }\n\n .td-alert-dialog::backdrop {\n background: transparent;\n }\n\r\n .td-alert-modal {\r\n position: relative;\r\n display: grid;\r\n width: min(100%, 455px);\r\n overflow: hidden;\r\n border: 1px solid color-mix(in srgb, var(--td-alert-glow, var(--td-color-primary, #3157a4)) 18%, rgba(255, 255, 255, 0.82));\r\n border-radius: 1.45rem;\r\n padding: 1.35rem;\r\n color: var(--td-color-text, #202b3d);\r\n background:\r\n linear-gradient(145deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.5)),\r\n color-mix(in srgb, var(--td-color-surface, #fff) 60%, transparent);\r\n text-align: center;\r\n box-shadow:\r\n 0 22px 58px rgba(15, 23, 42, 0.15),\r\n 0 0 0 1px rgba(255, 255, 255, 0.76) inset;\r\n backdrop-filter: blur(28px) saturate(155%);\r\n -webkit-backdrop-filter: blur(28px) saturate(155%);\r\n animation: td-alert-modal-in 210ms cubic-bezier(.16,1,.3,1);\r\n }\r\n\r\n .td-alert-modal::before {\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: inherit;\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.06) 58%, rgba(255, 255, 255, 0.14));\r\n opacity: 0.58;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-theme-dark .td-alert-modal {\r\n border-color: color-mix(in srgb, var(--td-alert-glow, var(--td-color-primary, #8aa7e6)) 22%, rgba(255, 255, 255, 0.16));\r\n background:\r\n linear-gradient(145deg, rgba(32, 36, 45, 0.78), rgba(17, 20, 26, 0.54)),\r\n color-mix(in srgb, var(--td-color-surface, #181b22) 66%, transparent);\r\n box-shadow:\r\n 0 24px 66px rgba(0, 0, 0, 0.34),\r\n 0 0 0 1px rgba(255, 255, 255, 0.1) inset;\r\n }\r\n\r\n .td-theme-dark .td-alert-modal::before {\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.018) 58%, rgba(255, 255, 255, 0.035));\r\n }\r\n\r\n .td-alert-modal::after {\r\n position: absolute;\r\n inset: 1px;\r\n z-index: 0;\r\n border-radius: calc(1.45rem - 1px);\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 46%);\r\n opacity: 0.36;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-alert-accent {\r\n display: none;\r\n }\r\n\r\n .td-alert-modal--success { --td-alert-glow: var(--td-color-success, #16784a); }\r\n .td-alert-modal--error { --td-alert-glow: var(--td-color-danger, #b93a3a); }\r\n .td-alert-modal--warning { --td-alert-glow: var(--td-color-warning, #a8660b); }\r\n .td-alert-modal--info { --td-alert-glow: var(--td-color-info, #2563a8); }\r\n .td-alert-modal--question { --td-alert-glow: var(--td-color-primary, #3157a4); }\r\n\r\n .td-alert-content {\r\n min-width: 0;\r\n position: relative;\r\n z-index: 1;\r\n }\r\n\r\n .td-alert-icon {\n z-index: 1;\n display: grid;\n width: 3.45rem;\r\n height: 3.45rem;\r\n margin: 0 auto 0.9rem;\r\n place-items: center;\r\n border: 1px solid color-mix(in srgb, currentColor 12%, transparent);\r\n border-radius: 1rem;\r\n font-size: 1.45rem;\r\n font-weight: 900;\r\n box-shadow: none;\n }\n\n .td-alert-icon svg,\n .td-toast-icon svg,\n .td-toast-dismiss svg {\n width: 1em;\n height: 1em;\n display: block;\n }\n\r\n .td-alert-icon--success {\r\n color: var(--td-color-success, #16784a);\r\n background: var(--td-color-success-soft, #e2f5eb);\r\n }\r\n\r\n .td-alert-icon--error {\r\n color: var(--td-color-danger, #b93a3a);\r\n background: var(--td-color-danger-soft, #fde7e7);\r\n }\r\n\r\n .td-alert-icon--warning {\r\n color: var(--td-color-warning, #a8660b);\r\n background: var(--td-color-warning-soft, #fff2d8);\r\n }\r\n\r\n .td-alert-icon--info {\r\n color: var(--td-color-info, #2563a8);\r\n background: var(--td-color-info-soft, #e4effb);\r\n }\r\n\r\n .td-alert-icon--question {\r\n color: var(--td-color-primary, #3157a4);\r\n background: var(--td-color-primary-soft, #eaf0fb);\r\n }\r\n\r\n .td-alert-title {\r\n margin: 0;\r\n color: var(--td-color-text, #202b3d);\r\n font-size: 1.18rem;\r\n line-height: 1.25;\r\n font-weight: 850;\r\n letter-spacing: -0.02em;\r\n }\r\n\r\n .td-alert-message {\r\n max-width: 23rem;\r\n margin: 0.55rem auto 0;\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 0.88rem;\r\n line-height: 1.55;\r\n }\r\n\r\n .td-alert-actions {\r\n display: flex;\r\n justify-content: center;\r\n gap: 0.65rem;\r\n margin-top: 1.45rem;\r\n }\r\n\r\n .td-alert-button {\r\n min-height: 2.55rem;\r\n border: 1px solid transparent;\r\n border-radius: 0.9rem;\r\n padding: 0.68rem 1.08rem;\r\n color: var(--td-color-on-primary, #ffffff);\r\n background: var(--td-color-primary, #3157a4);\r\n font-size: 0.8rem;\r\n font-weight: 800;\r\n cursor: pointer;\r\n box-shadow: 0 12px 24px color-mix(in srgb, var(--td-color-primary, #3157a4) 22%, transparent);\r\n transition: transform 150ms ease, filter 150ms ease, background 150ms ease, box-shadow 150ms ease;\r\n }\r\n\r\n .td-alert-button:hover {\r\n filter: brightness(1.02);\r\n transform: translateY(-2px);\r\n }\r\n\r\n .td-alert-button:active {\r\n transform: scale(0.98);\r\n }\r\n\r\n .td-alert-button:focus-visible {\r\n outline: 0;\r\n box-shadow: var(--td-focus-ring, 0 0 0 3px rgba(49, 87, 164, 0.18));\r\n }\r\n\r\n .td-alert-button--success { background: var(--td-color-success, #16784a); }\r\n .td-alert-button--error { background: var(--td-color-danger, #b93a3a); }\r\n .td-alert-button--warning { background: var(--td-color-warning, #a8660b); }\r\n .td-alert-button--info { background: var(--td-color-info, #2563a8); }\r\n .td-alert-button--question { background: var(--td-color-primary, #3157a4); }\r\n\r\n .td-alert-button--cancel {\r\n border-color: var(--td-color-border, #dde3ee);\r\n color: var(--td-color-text, #202b3d);\r\n background: var(--td-color-surface-soft, #f6f8fb);\r\n box-shadow: none;\r\n }\r\n\r\n .td-alert-dialog--leaving {\n animation: td-alert-backdrop-out 150ms ease-in forwards;\n }\n\n .td-alert-dialog--leaving .td-alert-modal {\n animation: td-alert-modal-out 150ms ease-in forwards;\n }\n\r\n .td-toast-root {\n position: fixed;\n z-index: calc(var(--td-alert-z-index) + 1) !important;\n display: grid;\n width: min(26rem, calc(100vw - 1.5rem));\n gap: 0.65rem;\n pointer-events: none;\n }\n\n .td-toast-queue-indicator {\n justify-self: start;\n max-width: 100%;\n border: 1px dashed color-mix(in srgb, var(--td-color-border, #dde3ee) 78%, transparent);\n border-radius: 999px;\n padding: 0.38rem 0.72rem;\n color: var(--td-color-text-muted, #66758b);\n background: color-mix(in srgb, var(--td-color-surface, #ffffff) 82%, transparent);\n font-size: 0.72rem;\n font-weight: 700;\n line-height: 1.2;\n backdrop-filter: blur(14px);\n -webkit-backdrop-filter: blur(14px);\n pointer-events: none;\n }\n\r\n .td-toast-root--bottom-left {\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n left: max(1rem, env(safe-area-inset-left));\r\n }\r\n\r\n .td-toast-root--bottom-right {\r\n right: max(1rem, env(safe-area-inset-right));\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n }\r\n\r\n .td-toast-root--top-left {\r\n top: max(1rem, env(safe-area-inset-top));\r\n left: max(1rem, env(safe-area-inset-left));\r\n }\r\n\r\n .td-toast-root--top-right {\r\n top: max(1rem, env(safe-area-inset-top));\r\n right: max(1rem, env(safe-area-inset-right));\r\n }\r\n\r\n .td-toast-root--bottom-center {\r\n bottom: max(1rem, env(safe-area-inset-bottom));\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n .td-toast-root--top-center {\r\n top: max(1rem, env(safe-area-inset-top));\r\n left: 50%;\r\n transform: translateX(-50%);\r\n }\r\n\r\n .td-toast {\r\n --td-toast-glow: var(--td-color-primary, #3157a4);\r\n position: relative;\r\n display: grid;\r\n grid-template-columns: auto minmax(0, 1fr) auto;\r\n align-items: start;\r\n gap: 0.72rem;\r\n width: 100%;\r\n overflow: hidden;\r\n border: 1px solid color-mix(in srgb, var(--td-toast-glow) 16%, rgba(255, 255, 255, 0.76));\r\n border-radius: 1.05rem;\r\n padding: 0.82rem 0.85rem;\r\n color: var(--td-color-text, #202b3d);\r\n background:\r\n linear-gradient(145deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.52)),\r\n color-mix(in srgb, var(--td-color-surface, #fff) 62%, transparent);\r\n box-shadow:\r\n 0 18px 42px rgba(15, 23, 42, 0.14),\r\n 0 0 0 1px rgba(255, 255, 255, 0.7) inset;\r\n backdrop-filter: blur(22px) saturate(145%);\r\n -webkit-backdrop-filter: blur(22px) saturate(145%);\r\n pointer-events: auto;\r\n animation: td-toast-in 180ms cubic-bezier(.2,.8,.2,1);\r\n }\r\n\r\n .td-toast::before {\r\n position: absolute;\r\n inset: 0;\r\n border-radius: inherit;\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.2), transparent 58%);\r\n opacity: 0.56;\r\n pointer-events: none;\r\n content: \"\";\r\n }\r\n\r\n .td-toast--leaving {\n animation: td-toast-out 160ms ease-in forwards;\n }\n\r\n .td-toast--success { --td-toast-glow: var(--td-color-success, #16784a); }\n .td-toast--error { --td-toast-glow: var(--td-color-danger, #b93a3a); }\r\n .td-toast--warning { --td-toast-glow: var(--td-color-warning, #a8660b); }\r\n .td-toast--info { --td-toast-glow: var(--td-color-info, #2563a8); }\r\n .td-toast--neutral { --td-toast-glow: var(--td-color-primary, #3157a4); }\r\n\r\n .td-toast-icon {\r\n position: relative;\r\n z-index: 1;\r\n display: grid;\r\n width: 1.9rem;\r\n height: 1.9rem;\r\n place-items: center;\r\n border-radius: var(--td-radius-md, 0.72rem);\r\n font-size: 0.92rem;\r\n font-weight: 900;\r\n }\r\n\r\n .td-toast--success .td-toast-icon {\r\n color: var(--td-color-success, #16784a);\r\n background: var(--td-color-success-soft, #e2f5eb);\r\n }\r\n .td-toast--error .td-toast-icon {\r\n color: var(--td-color-danger, #b93a3a);\r\n background: var(--td-color-danger-soft, #fde7e7);\r\n }\r\n .td-toast--warning .td-toast-icon {\r\n color: var(--td-color-warning, #a8660b);\r\n background: var(--td-color-warning-soft, #fff2d8);\r\n }\r\n .td-toast--info .td-toast-icon {\r\n color: var(--td-color-info, #2563a8);\r\n background: var(--td-color-info-soft, #e4effb);\r\n }\r\n .td-toast--neutral .td-toast-icon {\r\n color: var(--td-color-primary, #3157a4);\r\n background: var(--td-color-primary-soft, #eaf0fb);\r\n }\r\n\r\n .td-toast-content {\r\n position: relative;\r\n z-index: 1;\r\n display: grid;\r\n min-width: 0;\r\n gap: 0.18rem;\r\n padding-top: 0.12rem;\r\n }\r\n\r\n .td-toast-content strong {\r\n overflow: hidden;\r\n color: var(--td-color-text, #202b3d);\r\n font-size: 0.8rem;\r\n font-weight: 850;\r\n line-height: 1.25;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n }\r\n\r\n .td-toast-content small {\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 0.72rem;\r\n line-height: 1.45;\r\n }\r\n\r\n .td-toast-actions {\r\n position: relative;\r\n z-index: 1;\r\n display: flex;\r\n align-items: center;\r\n gap: 0.3rem;\r\n }\r\n\r\n .td-toast-action,\r\n .td-toast-dismiss {\r\n border: 0;\r\n border-radius: var(--td-radius-md, 0.75rem);\r\n color: var(--td-color-primary, #3157a4);\r\n background: transparent;\r\n font: inherit;\r\n font-weight: 800;\r\n cursor: pointer;\r\n }\r\n\r\n .td-toast-action {\r\n padding: 0.44rem 0.54rem;\r\n font-size: 0.7rem;\r\n }\r\n\r\n .td-toast-dismiss {\r\n display: grid;\r\n width: 1.7rem;\r\n height: 1.7rem;\r\n place-items: center;\r\n color: var(--td-color-text-muted, #66758b);\r\n font-size: 1.2rem;\r\n line-height: 1;\r\n }\r\n\r\n .td-toast-action:hover,\r\n .td-toast-dismiss:hover {\r\n background: var(--td-color-surface-soft, #f6f8fb);\r\n }\r\n\r\n .td-toast-action:focus-visible,\r\n .td-toast-dismiss:focus-visible {\r\n outline: 0;\r\n box-shadow: var(--td-focus-ring, 0 0 0 3px rgba(49, 87, 164, 0.18));\r\n }\r\n\r\n .td-toast-progress {\n position: absolute;\n z-index: 1;\n right: 0;\n bottom: 0;\n left: 0;\n height: 2px;\n background: currentColor;\n opacity: 0.24;\n transform-origin: left;\n will-change: transform;\n }\n\r\n .td-theme-dark .td-toast {\r\n border-color: color-mix(in srgb, var(--td-toast-glow) 20%, rgba(255, 255, 255, 0.16));\r\n background:\r\n linear-gradient(145deg, rgba(32, 36, 45, 0.76), rgba(17, 20, 26, 0.52)),\r\n color-mix(in srgb, var(--td-color-surface, #181b22) 66%, transparent);\r\n box-shadow:\r\n 0 20px 48px rgba(0, 0, 0, 0.34),\r\n 0 0 0 1px rgba(255, 255, 255, 0.1) inset;\r\n }\r\n\r\n .td-theme-dark .td-toast::before {\r\n background:\r\n linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 58%);\r\n }\r\n\r\n @keyframes td-alert-backdrop-in {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n }\r\n\r\n @keyframes td-alert-modal-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(12px) scale(0.96);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-alert-backdrop-out {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n }\r\n\r\n @keyframes td-alert-modal-out {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.97);\r\n }\r\n }\r\n\r\n @keyframes td-toast-in {\r\n from {\r\n opacity: 0;\r\n transform: translateY(10px) scale(0.98);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n }\r\n\r\n @keyframes td-toast-out {\r\n from {\r\n opacity: 1;\r\n transform: translateY(0) scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: translateY(8px) scale(0.98);\r\n }\r\n }\r\n\r\n @keyframes td-toast-progress {\r\n from { transform: scaleX(1); }\r\n to { transform: scaleX(0); }\r\n }\r\n\r\n @media (max-width: 520px) {\r\n .td-alert-modal {\r\n grid-template-columns: 1fr;\r\n border-radius: var(--td-radius-lg, 0.95rem);\r\n padding: 1.25rem;\r\n }\r\n\r\n .td-alert-icon {\r\n width: 3.25rem;\r\n height: 3.25rem;\r\n }\r\n\r\n .td-alert-actions {\r\n justify-content: stretch;\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .td-alert-button {\r\n width: 100%;\r\n }\r\n\r\n .td-toast-root {\r\n right: 0.75rem;\r\n left: 0.75rem;\r\n width: auto;\r\n transform: none;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\nexport class TdAlerta extends TdAlert {}\r\n","import { Injectable } from '@angular/core';\nimport { TdIconoDefinicion, TdIconoPersonalizado } from './td-icono.model';\nimport { TD_ICONOS } from './td-iconos';\n\n@Injectable({ providedIn: 'root' })\nexport class TdIconoRegistry {\n private readonly iconos = new Map<string, TdIconoDefinicion>(\n Object.entries(TD_ICONOS)\n );\n\n registrar(iconos: TdIconoPersonalizado): void {\n for (const [nombre, definicion] of Object.entries(iconos)) {\n const clave = this.normalizar(nombre);\n if (!clave) continue;\n\n this.iconos.set(\n clave,\n typeof definicion === 'string' ? { path: definicion } : definicion\n );\n }\n }\n\n obtener(nombre: string | null | undefined): TdIconoDefinicion {\n return this.iconos.get(this.normalizar(nombre)) ?? this.iconos.get('folder')!;\n }\n\n existe(nombre: string): boolean {\n return this.iconos.has(this.normalizar(nombre));\n }\n\n nombres(): string[] {\n return [...this.iconos.keys()];\n }\n\n private normalizar(nombre: string | null | undefined): string {\n return (nombre ?? '').trim().toLowerCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n inject,\n} from '@angular/core';\nimport { TdIconoRegistry } from './td-icono-registry';\n\n@Component({\n selector: 'td-icon',\n template: `\n <svg\n [attr.viewBox]=\"definicion().viewBox || '0 0 24 24'\"\n [attr.aria-hidden]=\"titulo ? null : 'true'\"\n [attr.aria-label]=\"titulo || null\"\n [attr.role]=\"titulo ? 'img' : null\"\n focusable=\"false\"\n >\n <path\n [attr.d]=\"definicion().path\"\n [attr.fill]=\"definicion().estilo === 'linea' ? 'none' : 'currentColor'\"\n [attr.stroke]=\"definicion().estilo === 'linea' ? 'currentColor' : 'none'\"\n [attr.stroke-width]=\"definicion().grosor || null\"\n [attr.stroke-linecap]=\"definicion().estilo === 'linea' ? 'round' : null\"\n [attr.stroke-linejoin]=\"definicion().estilo === 'linea' ? 'round' : null\"\n />\n </svg>\n `,\n styles: `\n :host {\n display: inline-flex;\n width: var(--td-icon-size, 1.25rem);\n height: var(--td-icon-size, 1.25rem);\n flex: 0 0 auto;\n color: inherit;\n line-height: 0;\n vertical-align: middle;\n }\n svg { width: 100%; height: 100%; }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdIcon {\n private readonly registry = inject(TdIconoRegistry);\n\n @Input() nombre = 'folder';\n @Input() titulo = '';\n\n @Input()\n set tamano(value: string | number) {\n this.tamanoCss = typeof value === 'number' ? `${value}px` : value;\n }\n\n protected tamanoCss = '1.25rem';\n\n @HostBinding('style.--td-icon-size')\n protected get tamanoHost(): string {\n return this.tamanoCss;\n }\n\n protected definicion() {\n return this.registry.obtener(this.nombre);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, booleanAttribute } from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdBadgeTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdBadgeVariant = 'soft' | 'solid' | 'outline';\nexport type TdBadgeSize = 'sm' | 'md' | 'lg';\nexport type TdBadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\n@Component({\n selector: 'td-badge',\n imports: [TdIcon],\n template: `\n <span\n [class]=\"\n isFloating\n ? 'td-badge-anchor td-badge-anchor--' + position\n : 'td-badge td-badge--' + tone + ' td-badge--' + variant + ' td-badge--' + size\n \"\n [class.td-badge--dot]=\"!isFloating && dot\"\n [class.td-badge--pill]=\"!isFloating && pill\"\n [class.td-badge--with-icon]=\"!isFloating && !!icon && !dot\"\n [attr.aria-label]=\"!isFloating ? ariaLabel || null : null\"\n >\n @if (!isFloating && dot) {\n <span class=\"td-badge__dot\" aria-hidden=\"true\"></span>\n } @else {\n @if (!isFloating && icon) {\n <td-icon [nombre]=\"icon\" />\n }\n <span class=\"td-badge__content\" [class.td-badge__content--floating]=\"isFloating\">\n <ng-content />\n </span>\n }\n\n @if (isFloating && !hidden) {\n <span\n class=\"td-badge td-badge--floating\"\n [class]=\"'td-badge td-badge--floating td-badge--' + tone + ' td-badge--' + variant + ' td-badge--' + size\"\n [class.td-badge--dot]=\"dot\"\n [class.td-badge--pill]=\"pill\"\n [class.td-badge--with-icon]=\"!!icon && !dot\"\n [attr.aria-label]=\"ariaLabel || null\"\n >\n @if (dot) {\n <span class=\"td-badge__dot\" aria-hidden=\"true\"></span>\n } @else {\n @if (icon) {\n <td-icon [nombre]=\"icon\" />\n }\n <span class=\"td-badge__content\">\n {{ value }}\n </span>\n }\n </span>\n }\n </span>\n `,\n styleUrl: './td-badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdBadge {\n @Input() tone: TdBadgeTone = 'primary';\n @Input() variant: TdBadgeVariant = 'soft';\n @Input() size: TdBadgeSize = 'md';\n @Input() value: string | number | null | undefined = undefined;\n @Input() position: TdBadgePosition = 'top-right';\n @Input() icon = '';\n @Input({ transform: booleanAttribute }) floating = false;\n @Input({ transform: booleanAttribute }) hidden = false;\n @Input({ transform: booleanAttribute }) dot = false;\n @Input({ transform: booleanAttribute }) pill = true;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n protected get isFloating(): boolean {\n return this.floating || (this.value !== undefined && this.value !== null && this.value !== '');\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport type TdButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost';\nexport type TdButtonTone = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\nexport type TdButtonSize = 'sm' | 'md' | 'lg';\nexport type TdButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'td-button',\n imports: [TdIcon],\n template: `\n <button\n class=\"td-button\"\n [class]=\"'td-button td-button--' + variant + ' td-button--' + tone + ' td-button--' + size\"\n [class.td-button--block]=\"block\"\n [class.td-button--loading]=\"loading\"\n [class.td-button--icon-only]=\"isIconOnly\"\n [type]=\"type\"\n [disabled]=\"disabled || loading\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n (click)=\"handleClick($event)\"\n >\n @if (loading) {\n <span class=\"td-button__spinner\" aria-hidden=\"true\"></span>\n } @else if (icon && iconPosition === 'start') {\n <td-icon [nombre]=\"icon\" />\n }\n\n <span\n #content\n class=\"td-button__content\"\n [class.td-button__content--hidden]=\"isIconOnly\"\n >\n <ng-content />\n </span>\n\n @if (!loading && icon && iconPosition === 'end') {\n <td-icon [nombre]=\"icon\" />\n }\n </button>\n `,\n styleUrl: './td-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdButton implements AfterContentChecked {\n @ViewChild('content', { static: true }) private readonly contentRef?: ElementRef<HTMLElement>;\n\n @Input() variant: TdButtonVariant = 'solid';\n @Input() tone: TdButtonTone = 'primary';\n @Input() size: TdButtonSize = 'md';\n @Input() type: TdButtonType = 'button';\n @Input() icon = '';\n @Input() iconPosition: 'start' | 'end' = 'start';\n @Input() disabled = false;\n @Input() loading = false;\n @Input() block = false;\n @Input({ transform: booleanAttribute }) iconOnly = false;\n @Input({ alias: 'aria-label' }) ariaLabel = '';\n\n @Output() readonly pressed = new EventEmitter<MouseEvent>();\n\n protected hasProjectedContent = false;\n\n protected get isIconOnly(): boolean {\n return !!this.icon && (this.iconOnly || !this.hasProjectedContent);\n }\n\n ngAfterContentChecked(): void {\n const element = this.contentRef?.nativeElement;\n if (!element) return;\n\n this.hasProjectedContent = !!element.textContent?.trim() || element.childElementCount > 0;\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled || this.loading) return;\n this.pressed.emit(event);\n }\n}\n","import {\n ChangeDetectorRef,\n inject,\n Injector,\n ModelSignal,\n OutputEmitterRef,\n signal,\n} from '@angular/core';\nimport { FORM_FIELD } from '@angular/forms/signals';\n\nexport interface TdFormControlBridge {\n readonly usesSignalForms: boolean;\n isDisabled(fieldDisabled: boolean): boolean;\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean;\n registerOnTouched(fn: () => void): void;\n setDisabledState(disabled: boolean): void;\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void;\n}\n\nexport type TdErrorDisplay = 'auto' | 'always' | 'touched' | 'dirty' | 'never';\n\n/**\n * Puente reutilizable entre Signal Forms y ControlValueAccessor.\n *\n * Los inputs del contrato se declaran en cada componente porque el compilador\n * de Signal Forms de Angular 21 necesita encontrarlos directamente allí.\n */\nexport function createTdFormControlBridge(): TdFormControlBridge {\n const injector = inject(Injector);\n const cdr = inject(ChangeDetectorRef);\n const cvaDisabled = signal(false);\n let onCvaTouched: () => void = () => undefined;\n\n const usesSignalForms = (): boolean =>\n !!injector.get(FORM_FIELD, null, { self: true, optional: true });\n\n return {\n get usesSignalForms(): boolean {\n return usesSignalForms();\n },\n isDisabled(fieldDisabled: boolean): boolean {\n return usesSignalForms() ? fieldDisabled : fieldDisabled || cvaDisabled();\n },\n shouldDisplayError(\n displayMode: TdErrorDisplay,\n invalid: boolean,\n hasErrorMessage: boolean,\n touched: boolean,\n dirty: boolean\n ): boolean {\n if (displayMode === 'never') return false;\n\n const hasErrorState = invalid || hasErrorMessage;\n if (!hasErrorState) return false;\n\n if (displayMode === 'always') return true;\n if (displayMode === 'touched') return touched;\n if (displayMode === 'dirty') return dirty;\n return touched || dirty;\n },\n registerOnTouched(fn: () => void): void {\n onCvaTouched = fn;\n },\n setDisabledState(disabled: boolean): void {\n if (!usesSignalForms()) cvaDisabled.set(disabled);\n cdr.markForCheck();\n },\n markTouched(touched: ModelSignal<boolean>, touch: OutputEmitterRef<void>): void {\n // Angular prioriza el CVA cuando el control también publica NG_VALUE_ACCESSOR,\n // incluso si está enlazado mediante [formField]. Mantener esta llamada permite\n // que Signal Forms marque el field como touched sin perder compatibilidad clásica.\n onCvaTouched();\n touched.set(true);\n touch.emit();\n },\n };\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormCheckboxControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet checkboxSequence = 0;\n\n@Component({\n selector: 'td-checkbox',\n imports: [TdIcon],\n template: `\n <label\n class=\"td-checkbox\"\n [class.td-checkbox--checked]=\"checked()\"\n [class.td-checkbox--disabled]=\"isDisabled()\"\n [class.td-checkbox--readonly]=\"readonly()\"\n [class.td-checkbox--error]=\"hasError()\"\n [class.td-checkbox--dark]=\"dark()\"\n [for]=\"inputId\"\n >\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n type=\"checkbox\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"descriptionId\"\n (change)=\"handleChange($event)\"\n (blur)=\"handleBlur()\"\n (click)=\"handleClick($event)\"\n />\n\n <span class=\"td-checkbox__box\" aria-hidden=\"true\">\n @if (checked()) {\n <td-icon nombre=\"check\" tamano=\".9rem\" />\n }\n </span>\n\n <span class=\"td-checkbox__content\">\n <span class=\"td-checkbox__label\">{{ label() }}</span>\n @if (description()) {\n <span class=\"td-checkbox__description\">{{ description() }}</span>\n }\n </span>\n </label>\n\n @if (displayError() || hint()) {\n <p\n class=\"td-checkbox__message\"\n [class.td-checkbox__message--error]=\"hasError()\"\n [id]=\"descriptionId\"\n >\n {{ displayError() || hint() }}\n </p>\n }\n `,\n styleUrl: './td-checkbox.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdCheckbox),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdCheckbox implements ControlValueAccessor, FormCheckboxControl {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-checkbox-${++checkboxSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n readonly id = input('');\n readonly label = input('Opción');\n readonly description = input('');\n readonly hint = input('');\n readonly dark = input(false);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly checked = model(false);\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n protected get inputId(): string {\n return this.id() || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.displayError() || this.hint()\n ? `${this.inputId}-description`\n : null;\n }\n\n private onChange: (checked: boolean) => void = () => undefined;\n\n writeValue(value: unknown): void {\n this.checked.set(value === true);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (checked: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleChange(event: Event): void {\n if (this.readonly()) {\n (event.target as HTMLInputElement).checked = this.checked();\n return;\n }\n\n const checked = (event.target as HTMLInputElement).checked === true;\n this.checked.set(checked);\n this.onChange(checked);\n }\n\n protected handleClick(event: MouseEvent): void {\n if (!this.readonly()) return;\n event.preventDefault();\n event.stopPropagation();\n }\n\n protected handleBlur(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TdBadge, TdBadgeTone } from '../badge';\nimport { TdIcon } from '../iconos';\nimport { TdMenuBadge, TdMenuItem, TdMenuPosicion, TdMenuSeleccion } from './td-menu.model';\n\n@Component({\n selector: 'td-menu',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon, TdBadge],\n templateUrl: './td-menu.html',\n styleUrl: './td-menu.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdMenu<T = unknown> {\n @Input() items: TdMenuItem<T>[] = [];\n @Input() etiqueta = '';\n @Input() icono = 'more_vertical';\n @Input() posicion: TdMenuPosicion = 'abajo-fin';\n @Input() ancho = '14rem';\n @Input() disabled = false;\n @Input() oscuro = false;\n @Input() ariaLabel = 'Abrir menu';\n\n @Output() readonly seleccion = new EventEmitter<TdMenuSeleccion<T>>();\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n\n protected abierto = false;\n\n protected get itemsVisibles(): TdMenuItem<T>[] {\n return this.items.filter((item) => item.visible ?? true);\n }\n\n protected badgeConfig(item: TdMenuItem<T>): TdMenuBadge | null {\n if (item.badge === undefined || item.badge === null || item.badge === '') return null;\n\n if (typeof item.badge === 'string' || typeof item.badge === 'number') {\n return {\n etiqueta: item.badge,\n tone: this.badgeTonePorTono(item.tono),\n variant: 'soft',\n size: 'sm',\n };\n }\n\n return {\n tone: this.badgeTonePorTono(item.tono),\n variant: 'soft',\n size: 'sm',\n ...item.badge,\n };\n }\n\n protected alternar(): void {\n if (this.disabled) return;\n this.establecerAbierto(!this.abierto);\n }\n\n protected cerrar(): void {\n this.establecerAbierto(false);\n }\n\n protected seleccionar(item: TdMenuItem<T>): void {\n if (item.deshabilitado) return;\n this.seleccion.emit({ item, id: item.id, data: item.data });\n this.cerrar();\n }\n\n protected posiciones(): CdkConnectedOverlay['positions'] {\n const offset = 8;\n const mapa: Record<TdMenuPosicion, CdkConnectedOverlay['positions']> = {\n 'abajo-inicio': [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'abajo-fin': [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n 'arriba-inicio': [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n 'arriba-fin': [\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n };\n\n return mapa[this.posicion];\n }\n\n private establecerAbierto(valor: boolean): void {\n if (this.abierto === valor) return;\n this.abierto = valor;\n this.abiertoChange.emit(valor);\n }\n\n private badgeTonePorTono(tono?: TdMenuItem<T>['tono']): TdBadgeTone {\n const mapa: Record<NonNullable<TdMenuItem<T>['tono']>, TdBadgeTone> = {\n neutro: 'neutral',\n primario: 'primary',\n exito: 'success',\n advertencia: 'warning',\n peligro: 'danger',\n };\n\n return mapa[tono || 'neutro'];\n }\n}\n","<button\n #origen=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"td-menu__trigger\"\n [class.td-menu__trigger--icon-only]=\"!etiqueta\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"abierto\"\n aria-haspopup=\"menu\"\n (click)=\"alternar()\"\n>\n @if (icono) {\n <td-icon [nombre]=\"icono\" />\n }\n @if (etiqueta) {\n <span>{{ etiqueta }}</span>\n <td-icon nombre=\"chevron_down\" tamano=\".95rem\" />\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origen\"\n [cdkConnectedOverlayOpen]=\"abierto\"\n [cdkConnectedOverlayPositions]=\"posiciones()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPanelClass]=\"'td-menu__overlay'\"\n (overlayOutsideClick)=\"cerrar()\"\n (detach)=\"cerrar()\"\n>\n <div\n class=\"td-menu\"\n [class.td-menu--oscuro]=\"oscuro\"\n [style.width]=\"ancho\"\n role=\"menu\"\n >\n @for (item of itemsVisibles; track item.id) {\n @if (item.separadorAntes) {\n <span class=\"td-menu__separador\" aria-hidden=\"true\"></span>\n }\n <button\n type=\"button\"\n role=\"menuitem\"\n [class]=\"'td-menu__item td-menu__item--' + (item.tono || 'neutro')\"\n [disabled]=\"item.deshabilitado\"\n (click)=\"seleccionar(item)\"\n >\n @if (item.icono) {\n <span class=\"td-menu__icono\">\n <td-icon [nombre]=\"item.icono\" />\n </span>\n }\n <span class=\"td-menu__texto\">\n <strong>{{ item.etiqueta }}</strong>\n @if (item.descripcion) {\n <small>{{ item.descripcion }}</small>\n }\n </span>\n @if (badgeConfig(item); as badge) {\n <td-badge\n class=\"td-menu__badge\"\n [tone]=\"badge.tone || 'neutral'\"\n [variant]=\"badge.variant || 'soft'\"\n [size]=\"badge.size || 'sm'\"\n [icon]=\"badge.icono || ''\"\n [dot]=\"badge.dot || false\"\n [pill]=\"badge.pill ?? true\"\n [ariaLabel]=\"badge.ariaLabel || ''\"\n >\n {{ badge.etiqueta }}\n </td-badge>\n }\n </button>\n } @empty {\n <div class=\"td-menu__vacio\">\n <td-icon nombre=\"inbox\" />\n <span>Sin opciones disponibles</span>\n </div>\n }\n </div>\n</ng-template>\n","import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TdIcon } from '../iconos';\nimport { TdMenu, TdMenuItem, TdMenuSeleccion } from '../menu';\nimport {\n TdDataTableAccion,\n TdDataTableAccionesPresentacion,\n TdDataTableAccionEvento,\n TdDataTableBoton,\n TdDataTableColumna,\n TdDataTableImagenEvento,\n TdDataTableTono,\n} from './td-data-table.model';\n\ninterface TdDataTableImagenActiva {\n src: string;\n alt: string;\n}\n\n@Component({\n selector: 'td-data-table',\n imports: [FormsModule, NgTemplateOutlet, ScrollingModule, TdIcon, TdMenu],\n templateUrl: './td-data-table.html',\n styleUrl: './td-data-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDataTable<T extends object> implements OnChanges, OnDestroy {\n @ViewChild(CdkVirtualScrollViewport)\n private viewport?: CdkVirtualScrollViewport;\n @ViewChild('imagenDialog')\n private imagenDialog?: ElementRef<HTMLDialogElement>;\n\n @Input() datos: T[] = [];\n @Input() columnas: TdDataTableColumna<T>[] = [];\n @Input() acciones: TdDataTableAccion<T>[] = [];\n @Input() accionesPresentacion: TdDataTableAccionesPresentacion = 'inline';\n @Input() botones: TdDataTableBoton[] = [];\n @Input() total = 0;\n @Input() cargando = false;\n @Input() puedeCargarMas = false;\n @Input() virtualizar = true;\n @Input() virtualizarDesde = 100;\n @Input() itemSize = 65;\n @Input() filasAntesDeCargar = 2;\n @Input() altura = 'min(620px, calc(100dvh - 18rem))';\n @Input() campoId: keyof T & string = 'id' as keyof T & string;\n @Input() oscuro = false;\n @Input() mostrarBusqueda = true;\n @Input() placeholderBusqueda = 'Buscar...';\n @Input() textoVacio = 'No hay registros disponibles';\n @Input() descripcionVacio = 'Prueba cambiando los filtros o vuelve más tarde.';\n @Input() debounceBusqueda = 250;\n\n @Output() readonly busquedaChange = new EventEmitter<string>();\n @Output() readonly accion = new EventEmitter<TdDataTableAccionEvento<T>>();\n @Output() readonly imagenClick = new EventEmitter<TdDataTableImagenEvento<T>>();\n @Output() readonly botonClick = new EventEmitter<TdDataTableBoton>();\n @Output() readonly cargarMas = new EventEmitter<void>();\n\n protected busqueda = '';\n protected imagenActiva: TdDataTableImagenActiva | null = null;\n private timeoutBusqueda: ReturnType<typeof setTimeout> | null = null;\n private datosAnteriores: T[] = [];\n private recalculoPendiente: ReturnType<typeof setTimeout> | null = null;\n private cargaIncrementalHabilitada = true;\n private scrollDeUsuarioPendiente = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['datos']) {\n const datosPrevios = (changes['datos'].previousValue as T[] | undefined) ?? this.datosAnteriores;\n const debeVolverAlInicio = this.debeVolverAlInicio(datosPrevios, this.datos);\n\n this.datosAnteriores = this.datos;\n this.scrollDeUsuarioPendiente = false;\n this.programarRecalculoViewport(debeVolverAlInicio);\n }\n\n if (changes['itemSize'] || changes['altura'] || changes['columnas'] || changes['acciones']) {\n this.programarRecalculoViewport(false);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n if (this.recalculoPendiente) clearTimeout(this.recalculoPendiente);\n }\n\n protected columnasGrid(): string {\n const columnas = this.columnas.map((columna) => columna.ancho ?? 'minmax(10rem, 1fr)');\n if (this.acciones.length) {\n columnas.push(this.accionesPresentacion === 'menu' ? 'minmax(5rem, auto)' : 'minmax(9rem, auto)');\n }\n return columnas.join(' ');\n }\n\n protected buscar(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.timeoutBusqueda = setTimeout(\n () => this.busquedaChange.emit(this.busqueda.trim()),\n this.debounceBusqueda\n );\n }\n\n protected limpiarBusqueda(): void {\n if (this.timeoutBusqueda) clearTimeout(this.timeoutBusqueda);\n this.busqueda = '';\n this.busquedaChange.emit('');\n }\n\n protected valor(fila: T, clave: keyof T & string): unknown {\n return (fila as Record<string, unknown>)[clave];\n }\n\n protected textoCelda(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n if (columna.formatear) return columna.formatear(valor, fila, indice);\n if (valor === null || valor === undefined || valor === '') return '—';\n if (columna.tipo === 'booleano') return valor ? 'Sí' : 'No';\n if (columna.tipo === 'estado') return valor ? 'Activo' : 'Inactivo';\n if (columna.tipo === 'fecha' || columna.tipo === 'fechaHora' || columna.tipo === 'hora') {\n return this.formatearFecha(valor, columna);\n }\n if (\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n ) {\n return this.formatearNumero(valor, columna);\n }\n return String(valor);\n }\n\n protected imagenSrc(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n const src = columna.imagen?.src?.(valor, fila, indice) ?? valor;\n return typeof src === 'string' ? src.trim() : '';\n }\n\n protected imagenAlt(columna: TdDataTableColumna<T>, fila: T, indice: number): string {\n const valor = this.valor(fila, columna.clave);\n return columna.imagen?.alt?.(valor, fila, indice) || this.textoCelda(columna, fila, indice);\n }\n\n protected imagenForma(columna: TdDataTableColumna<T>): string {\n return columna.imagen?.forma ?? 'redondeada';\n }\n\n protected tonoCelda(columna: TdDataTableColumna<T>, fila: T): TdDataTableTono {\n const valor = this.valor(fila, columna.clave);\n if (columna.tono) return columna.tono(valor, fila);\n if (columna.tipo === 'estado') return valor ? 'exito' : 'peligro';\n if (columna.tipo === 'booleano') return valor ? 'exito' : 'neutro';\n return 'neutro';\n }\n\n protected accionesVisibles(fila: T): TdDataTableAccion<T>[] {\n return this.acciones.filter((accion) => {\n if (accion.condicion && !accion.condicion(fila)) return false;\n return accion.visible?.(fila) ?? true;\n });\n }\n\n protected iconoAccion(accion: TdDataTableAccion<T>, fila: T): string {\n return typeof accion.icono === 'function' ? accion.icono(fila) : accion.icono;\n }\n\n protected tonoAccion(accion: TdDataTableAccion<T>, fila: T): TdDataTableTono {\n if (typeof accion.tono === 'function') return accion.tono(fila);\n return accion.tono ?? 'neutro';\n }\n\n protected usarMenuAcciones(fila: T): boolean {\n if (this.accionesPresentacion === 'menu') return true;\n if (this.accionesPresentacion === 'inline') return false;\n return this.accionesVisibles(fila).length > 3;\n }\n\n protected accionesMenu(fila: T): TdMenuItem<TdDataTableAccion<T>>[] {\n return this.accionesVisibles(fila).map((accion) => ({\n id: accion.id,\n etiqueta: accion.etiqueta,\n icono: this.iconoAccion(accion, fila),\n tono: this.tonoAccion(accion, fila),\n deshabilitado: accion.deshabilitada?.(fila) ?? false,\n data: accion,\n }));\n }\n\n protected botonesVisibles(): TdDataTableBoton[] {\n return this.botones.filter((boton) => boton.visible ?? true);\n }\n\n protected usaVirtualizacion(): boolean {\n return this.virtualizar && this.datos.length >= this.virtualizarDesde;\n }\n\n protected ejecutarAccion(\n accion: TdDataTableAccion<T>,\n fila: T,\n indice: number\n ): void {\n if (accion.deshabilitada?.(fila)) return;\n this.accion.emit({ accion, fila, indice });\n }\n\n protected ejecutarAccionMenu(\n evento: TdMenuSeleccion<TdDataTableAccion<T>>,\n fila: T,\n indice: number\n ): void {\n if (!evento.data) return;\n this.ejecutarAccion(evento.data, fila, indice);\n }\n\n protected abrirImagen(columna: TdDataTableColumna<T>, fila: T, indice: number): void {\n const src = this.imagenSrc(columna, fila, indice);\n if (!src || columna.imagen?.clickeable === false) return;\n const alt = this.imagenAlt(columna, fila, indice);\n this.imagenActiva = { src, alt };\n setTimeout(() => {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n });\n this.imagenClick.emit({\n columna,\n fila,\n indice,\n src,\n alt,\n });\n }\n\n protected cerrarImagen(): void {\n const dialog = this.imagenDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.imagenActiva = null;\n }\n\n protected cerrarImagenSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrarImagen();\n }\n }\n\n protected marcarScrollUsuario(): void {\n this.scrollDeUsuarioPendiente = true;\n }\n\n protected alDesplazarViewport(): void {\n if (!this.viewport) return;\n\n const distanciaAlFinal = this.viewport.measureScrollOffset('bottom');\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected alDesplazarLista(event: Event): void {\n const elemento = event.currentTarget as HTMLElement | null;\n if (!elemento) return;\n\n const distanciaAlFinal = elemento.scrollHeight - elemento.scrollTop - elemento.clientHeight;\n this.intentarCargarMas(distanciaAlFinal);\n }\n\n protected readonly trackFila = (_indice: number, fila: T): unknown =>\n (fila as Record<string, unknown>)[this.campoId] ?? fila;\n\n private programarRecalculoViewport(volverAlInicio: boolean): void {\n if (this.recalculoPendiente) {\n clearTimeout(this.recalculoPendiente);\n }\n\n this.recalculoPendiente = setTimeout(() => {\n this.recalculoPendiente = null;\n if (!this.viewport) return;\n\n if (volverAlInicio) {\n this.viewport.scrollToIndex(0, 'auto');\n }\n\n this.viewport.checkViewportSize();\n });\n }\n\n private debeVolverAlInicio(datosPrevios: T[], datosActuales: T[]): boolean {\n if (!datosPrevios.length || !datosActuales.length) {\n return false;\n }\n\n if (datosActuales.length < datosPrevios.length) {\n return true;\n }\n\n return !datosPrevios.every((filaPrevia, indice) =>\n this.claveFila(filaPrevia) === this.claveFila(datosActuales[indice])\n );\n }\n\n private claveFila(fila: T): unknown {\n return (fila as Record<string, unknown>)[this.campoId] ?? fila;\n }\n\n private intentarCargarMas(distanciaAlFinal: number): void {\n const umbralPx = this.itemSize * Math.max(0, this.filasAntesDeCargar);\n const zonaSeguraPx = umbralPx + this.itemSize;\n\n if (distanciaAlFinal > zonaSeguraPx) {\n this.cargaIncrementalHabilitada = true;\n return;\n }\n\n if (\n distanciaAlFinal <= umbralPx &&\n this.datos.length > 0 &&\n this.puedeCargarMas &&\n !this.cargando &&\n this.cargaIncrementalHabilitada &&\n this.scrollDeUsuarioPendiente\n ) {\n this.cargaIncrementalHabilitada = false;\n this.scrollDeUsuarioPendiente = false;\n this.cargarMas.emit();\n }\n }\n\n private formatearFecha(valor: unknown, columna: TdDataTableColumna<T>): string {\n const fecha = this.normalizarFecha(valor);\n if (!fecha) return '—';\n\n const opcionesPorTipo: Record<string, Intl.DateTimeFormatOptions> = {\n fecha: { day: '2-digit', month: '2-digit', year: 'numeric' },\n fechaHora: {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n },\n hora: { hour: '2-digit', minute: '2-digit' },\n };\n\n try {\n return new Intl.DateTimeFormat(\n columna.locale ?? 'es-PE',\n columna.formatoFecha ?? opcionesPorTipo[columna.tipo ?? 'fecha']\n ).format(fecha);\n } catch {\n return String(valor);\n }\n }\n\n private normalizarFecha(valor: unknown): Date | null {\n if (valor instanceof Date) return Number.isNaN(valor.getTime()) ? null : valor;\n if (typeof valor === 'number' || typeof valor === 'string') {\n const fecha = new Date(valor);\n return Number.isNaN(fecha.getTime()) ? null : fecha;\n }\n return null;\n }\n\n private formatearNumero(valor: unknown, columna: TdDataTableColumna<T>): string {\n const numero = typeof valor === 'number' ? valor : Number(valor);\n if (!Number.isFinite(numero)) return String(valor);\n\n const opciones: Intl.NumberFormatOptions = {\n ...(columna.formatoNumero ?? {}),\n };\n\n if (columna.tipo === 'decimal') {\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'moneda') {\n opciones.style = 'currency';\n opciones.currency = columna.moneda ?? 'PEN';\n opciones.minimumFractionDigits ??= columna.decimales ?? 2;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n if (columna.tipo === 'porcentaje') {\n opciones.style = 'percent';\n opciones.minimumFractionDigits ??= columna.decimales ?? 0;\n opciones.maximumFractionDigits ??= columna.decimales ?? 2;\n }\n\n try {\n return new Intl.NumberFormat(columna.locale ?? 'es-PE', opciones).format(numero);\n } catch {\n return String(valor);\n }\n }\n}\n","<section class=\"td-tabla\" [class.td-tabla--oscura]=\"oscuro\">\n <div class=\"td-tabla__toolbar\">\n <div class=\"td-tabla__filtros\">\n @if (mostrarBusqueda) {\n <label class=\"td-tabla__busqueda\">\n <td-icon nombre=\"search\" />\n <input\n type=\"search\"\n [(ngModel)]=\"busqueda\"\n [placeholder]=\"placeholderBusqueda\"\n (input)=\"buscar()\"\n />\n @if (busqueda) {\n <button type=\"button\" title=\"Limpiar búsqueda\" (click)=\"limpiarBusqueda()\">\n <td-icon nombre=\"close\" tamano=\"1rem\" />\n </button>\n }\n </label>\n }\n <ng-content select=\"[tdDataTableFilters]\" />\n </div>\n </div>\n\n <div class=\"td-tabla__superficie\">\n <div class=\"td-tabla__resumen\">\n <span><strong>{{ datos.length }}</strong> de {{ total || datos.length }} registros</span>\n <div class=\"td-tabla__resumen-acciones\">\n <ng-content select=\"[tdDataTableActions]\" />\n @for (boton of botonesVisibles(); track boton.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__boton td-tabla__boton--' + (boton.tono || 'neutro')\"\n [disabled]=\"boton.deshabilitado\"\n (click)=\"botonClick.emit(boton)\"\n >\n <td-icon [nombre]=\"boton.icono\" />\n <span>{{ boton.etiqueta }}</span>\n </button>\n }\n </div>\n </div>\n\n @if (datos.length) {\n <div class=\"td-tabla__scroll-x\">\n <div class=\"td-tabla__contenido\" [style.--td-tabla-columnas]=\"columnasGrid()\">\n <div class=\"td-tabla__encabezado\" role=\"row\">\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"columnheader\"\n [class]=\"'td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n {{ columna.encabezado }}\n </div>\n }\n @if (acciones.length) {\n <div role=\"columnheader\" class=\"td-tabla__alinear--centro\">Acciones</div>\n }\n </div>\n\n @if (usaVirtualizacion()) {\n <cdk-virtual-scroll-viewport\n class=\"td-tabla__viewport\"\n [itemSize]=\"itemSize\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarViewport()\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n <ng-container\n *cdkVirtualFor=\"let fila of datos; let indice = index; trackBy: trackFila\"\n >\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n </ng-container>\n </cdk-virtual-scroll-viewport>\n } @else {\n <div\n class=\"td-tabla__viewport td-tabla__viewport--normal\"\n [style.height]=\"altura\"\n (scroll)=\"alDesplazarLista($event)\"\n (wheel)=\"marcarScrollUsuario()\"\n (touchmove)=\"marcarScrollUsuario()\"\n (keydown.arrowdown)=\"marcarScrollUsuario()\"\n (keydown.pagedown)=\"marcarScrollUsuario()\"\n (keydown.end)=\"marcarScrollUsuario()\"\n >\n @for (fila of datos; track trackFila($index, fila); let indice = $index) {\n <ng-container\n [ngTemplateOutlet]=\"filaTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: fila, indice: indice }\"\n />\n }\n </div>\n }\n </div>\n </div>\n\n <ng-template #filaTemplate let-fila let-indice=\"indice\">\n <div\n class=\"td-tabla__fila\"\n role=\"row\"\n [style.height.px]=\"itemSize\"\n >\n @for (columna of columnas; track columna.clave) {\n <div\n role=\"cell\"\n [class]=\"'td-tabla__celda td-tabla__alinear--' + (columna.alineacion || 'inicio')\"\n >\n @if (columna.tipo === 'imagen') {\n @if (imagenSrc(columna, fila, indice); as src) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__imagen td-tabla__imagen--' + imagenForma(columna)\"\n [title]=\"imagenAlt(columna, fila, indice)\"\n (click)=\"abrirImagen(columna, fila, indice)\"\n >\n <img [src]=\"src\" [alt]=\"imagenAlt(columna, fila, indice)\" loading=\"lazy\" />\n </button>\n } @else {\n <span\n [class]=\"'td-tabla__imagen td-tabla__imagen--placeholder td-tabla__imagen--' + imagenForma(columna)\"\n >\n <td-icon [nombre]=\"columna.imagen?.placeholder || 'image'\" />\n </span>\n }\n } @else if (\n columna.tipo === 'estado' ||\n columna.tipo === 'booleano' ||\n columna.tipo === 'chip'\n ) {\n <span [class]=\"'td-tabla__chip td-tabla__chip--' + tonoCelda(columna, fila)\">\n {{ textoCelda(columna, fila, indice) }}\n </span>\n } @else {\n <span\n [class.td-tabla__numero]=\"\n columna.tipo === 'numero' ||\n columna.tipo === 'decimal' ||\n columna.tipo === 'moneda' ||\n columna.tipo === 'porcentaje'\n \"\n >\n {{ textoCelda(columna, fila, indice) }}\n </span>\n }\n </div>\n }\n\n @if (acciones.length) {\n <div class=\"td-tabla__acciones-fila\" role=\"cell\">\n @if (usarMenuAcciones(fila)) {\n <td-menu\n ariaLabel=\"Acciones de fila\"\n icono=\"more_vertical\"\n ancho=\"15rem\"\n [oscuro]=\"oscuro\"\n [items]=\"accionesMenu(fila)\"\n (seleccion)=\"ejecutarAccionMenu($event, fila, indice)\"\n />\n } @else {\n @for (accionFila of accionesVisibles(fila); track accionFila.id) {\n <button\n type=\"button\"\n [class]=\"'td-tabla__accion td-tabla__accion--' + tonoAccion(accionFila, fila)\"\n [title]=\"accionFila.etiqueta\"\n [disabled]=\"accionFila.deshabilitada?.(fila) ?? false\"\n (click)=\"ejecutarAccion(accionFila, fila, indice)\"\n >\n <td-icon [nombre]=\"iconoAccion(accionFila, fila)\" />\n <span class=\"td-tabla__sr-only\">{{ accionFila.etiqueta }}</span>\n </button>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n @if (cargando) {\n <div class=\"td-tabla__cargando\" role=\"status\" aria-live=\"polite\">\n <i aria-hidden=\"true\"></i>\n <span>Cargando más registros...</span>\n </div>\n }\n } @else if (!cargando) {\n <div class=\"td-tabla__vacio\">\n <span><td-icon nombre=\"inbox\" tamano=\"2.4rem\" /></span>\n <h3>{{ textoVacio }}</h3>\n <p>{{ descripcionVacio }}</p>\n </div>\n }\n\n @if (cargando && !datos.length) {\n <div class=\"td-tabla__skeleton\">\n @for (item of [1, 2, 3, 4, 5]; track item) {\n <span></span>\n }\n </div>\n }\n </div>\n</section>\n\n@if (imagenActiva; as imagen) {\n <dialog\n #imagenDialog\n class=\"td-tabla-imagen\"\n [attr.aria-label]=\"imagen.alt\"\n (click)=\"cerrarImagenSiBackdrop($event)\"\n (cancel)=\"cerrarImagen()\"\n (close)=\"imagenActiva = null\"\n >\n <section class=\"td-tabla-imagen__panel\">\n <header>\n <span>{{ imagen.alt }}</span>\n <button type=\"button\" aria-label=\"Cerrar\" (click)=\"cerrarImagen()\">\n <td-icon nombre=\"close\" />\n </button>\n </header>\n <div>\n <img [src]=\"imagen.src\" [alt]=\"imagen.alt\" />\n </div>\n </section>\n </dialog>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n forwardRef,\n input,\n Input,\n model,\n output,\n Output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { inject } from '@angular/core';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdDatePickerMode,\n TdDatePickerValue,\n TdDateRange,\n} from './td-date-picker.model';\n\ninterface CalendarDay {\n iso: string;\n day: number;\n currentMonth: boolean;\n today: boolean;\n disabled: boolean;\n}\n\ntype CalendarView = 'dias' | 'meses' | 'anios';\ntype TdDatePickerLimit = string | number | TdDateRange | null | undefined;\n\nlet datePickerSequence = 0;\n\n@Component({\n selector: 'td-date-picker',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-date-picker\"\n [class.td-date-picker--open]=\"open\"\n [class.td-date-picker--error]=\"hasError()\"\n [class.td-date-picker--disabled]=\"isDisabled()\"\n [class.td-date-picker--dark]=\"dark\"\n >\n <label [id]=\"labelId\">{{ label }}</label>\n <button\n type=\"button\"\n class=\"td-date-picker__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"labelId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"calendarId\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <td-icon nombre=\"calendar\" />\n <span [class.td-date-picker__placeholder]=\"!displayValue\">\n {{ displayValue || placeholder }}\n </span>\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <span\n class=\"td-date-picker__clear\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Limpiar fecha\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".92rem\" />\n </span>\n }\n <td-icon\n class=\"td-date-picker__chevron\"\n [class.td-date-picker__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </button>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-date-picker__message\" [class.td-date-picker__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayMatchWidth]=\"false\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <section\n class=\"td-calendar\"\n [class.td-calendar--dark]=\"dark\"\n [id]=\"calendarId\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"mode === 'rango' ? 'Seleccionar rango de fechas' : 'Seleccionar fecha'\"\n >\n <header class=\"td-calendar__header\">\n <button type=\"button\" [attr.aria-label]=\"previousLabel\" (click)=\"previousPage()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button\n type=\"button\"\n class=\"td-calendar__period\"\n [attr.aria-label]=\"periodButtonLabel\"\n (click)=\"changeCalendarView()\"\n >\n {{ periodLabel }}\n @if (calendarView !== 'anios') {\n <td-icon nombre=\"chevron_down\" tamano=\".85rem\" />\n }\n </button>\n <button type=\"button\" [attr.aria-label]=\"nextLabel\" (click)=\"nextPage()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </header>\n\n @if (mode === 'rango') {\n <div class=\"td-calendar__range-summary\">\n <span><small>Desde</small><strong>{{ rangeStartLabel }}</strong></span>\n <td-icon nombre=\"arrow_forward\" />\n <span><small>Hasta</small><strong>{{ rangeEndLabel }}</strong></span>\n </div>\n }\n\n @if (calendarView === 'dias') {\n <div class=\"td-calendar__weekdays\" aria-hidden=\"true\">\n @for (weekday of weekdays; track weekday) {\n <span>{{ weekday }}</span>\n }\n </div>\n\n <div class=\"td-calendar__grid\">\n @for (date of days; track date.iso) {\n <button\n type=\"button\"\n class=\"td-calendar__day\"\n [class.td-calendar__day--outside]=\"!date.currentMonth\"\n [class.td-calendar__day--today]=\"date.today\"\n [class.td-calendar__day--selected]=\"isSelected(date.iso)\"\n [class.td-calendar__day--range]=\"isInRange(date.iso)\"\n [class.td-calendar__day--range-start]=\"isRangeStart(date.iso)\"\n [class.td-calendar__day--range-end]=\"isRangeEnd(date.iso)\"\n [disabled]=\"date.disabled\"\n [attr.aria-label]=\"formatLong(date.iso)\"\n [attr.aria-pressed]=\"isSelected(date.iso)\"\n (mouseenter)=\"hoveredDate = date.iso\"\n (mouseleave)=\"hoveredDate = null\"\n (click)=\"selectDate(date)\"\n >\n {{ date.day }}\n </button>\n }\n </div>\n } @else if (calendarView === 'meses') {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--months\">\n @for (month of months; track month.index) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"month.index === viewDate.getMonth()\"\n [disabled]=\"month.disabled\"\n (click)=\"selectMonth(month.index)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n } @else {\n <div class=\"td-calendar__selector-grid td-calendar__selector-grid--years\">\n @for (year of years; track year.value) {\n <button\n type=\"button\"\n [class.td-calendar__selector--active]=\"year.value === viewDate.getFullYear()\"\n [class.td-calendar__selector--today]=\"year.value === currentYear\"\n [disabled]=\"year.disabled\"\n (click)=\"selectYear(year.value)\"\n >\n {{ year.value }}\n </button>\n }\n </div>\n }\n\n <footer class=\"td-calendar__footer\">\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"goToday()\">\n Hoy\n </button>\n <button type=\"button\" class=\"td-calendar__text-action\" (click)=\"close()\">\n Cerrar\n </button>\n </footer>\n </section>\n </ng-template>\n `,\n styleUrl: './td-date-picker.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdDatePicker),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDatePicker\n implements ControlValueAccessor, FormValueControl<TdDatePickerValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-date-picker-${++datePickerSequence}`;\n private readonly formatter = new Intl.DateTimeFormat('es-PE', {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n });\n private readonly monthFormatter = new Intl.DateTimeFormat('es-PE', {\n month: 'long',\n year: 'numeric',\n });\n private readonly longFormatter = new Intl.DateTimeFormat('es-PE', {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n });\n\n @Input() label = 'Fecha';\n @Input() placeholder = 'Selecciona una fecha';\n @Input() mode: TdDatePickerMode = 'fecha';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input({ alias: 'min' }) minDate: TdDatePickerLimit = null;\n @Input({ alias: 'max' }) maxDate: TdDatePickerLimit = null;\n @Input() clearable = true;\n @Input() dark = false;\n\n readonly value = model<TdDatePickerValue>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n @Output() readonly selectionChange = new EventEmitter<TdDatePickerValue>();\n @Output() readonly openedChange = new EventEmitter<boolean>();\n\n protected open = false;\n protected hoveredDate: string | null = null;\n protected viewDate = this.startOfMonth(new Date());\n protected calendarView: CalendarView = 'dias';\n protected readonly currentYear = new Date().getFullYear();\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get calendarId(): string {\n return `${this.generatedId}-calendar`;\n }\n\n protected get weekdays(): string[] {\n return ['L', 'M', 'X', 'J', 'V', 'S', 'D'];\n }\n\n protected get monthLabel(): string {\n const label = this.monthFormatter.format(this.viewDate);\n return label.charAt(0).toUpperCase() + label.slice(1);\n }\n\n protected get periodLabel(): string {\n if (this.calendarView === 'dias') return this.monthLabel;\n if (this.calendarView === 'meses') return String(this.viewDate.getFullYear());\n return `${this.yearPageStart} – ${this.yearPageStart + 11}`;\n }\n\n protected get periodButtonLabel(): string {\n if (this.calendarView === 'dias') return 'Elegir mes y año';\n if (this.calendarView === 'meses') return 'Elegir año';\n return 'Periodo de años';\n }\n\n protected get previousLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes anterior'\n : this.calendarView === 'meses'\n ? 'Año anterior'\n : 'Años anteriores';\n }\n\n protected get nextLabel(): string {\n return this.calendarView === 'dias'\n ? 'Mes siguiente'\n : this.calendarView === 'meses'\n ? 'Año siguiente'\n : 'Años siguientes';\n }\n\n protected get months(): { index: number; label: string; disabled: boolean }[] {\n const formatter = new Intl.DateTimeFormat('es-PE', { month: 'short' });\n const year = this.viewDate.getFullYear();\n return Array.from({ length: 12 }, (_, index) => {\n const label = formatter.format(new Date(year, index, 1)).replace('.', '');\n return {\n index,\n label: label.charAt(0).toUpperCase() + label.slice(1),\n disabled: !this.monthIntersectsLimits(year, index),\n };\n });\n }\n\n protected get years(): { value: number; disabled: boolean }[] {\n return Array.from({ length: 12 }, (_, index) => {\n const value = this.yearPageStart + index;\n return { value, disabled: !this.yearIntersectsLimits(value) };\n });\n }\n\n private get yearPageStart(): number {\n return Math.floor(this.viewDate.getFullYear() / 12) * 12;\n }\n\n protected get days(): CalendarDay[] {\n const first = this.startOfMonth(this.viewDate);\n const mondayOffset = (first.getDay() + 6) % 7;\n const start = new Date(first.getFullYear(), first.getMonth(), 1 - mondayOffset);\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index);\n const iso = this.toIso(date);\n return {\n iso,\n day: date.getDate(),\n currentMonth: date.getMonth() === this.viewDate.getMonth(),\n today: iso === this.toIso(new Date()),\n disabled:\n (typeof this.minDate === 'string' && iso < this.minDate) ||\n (typeof this.maxDate === 'string' && iso > this.maxDate),\n };\n });\n }\n\n protected get displayValue(): string {\n const current = this.value();\n if (typeof current === 'string') return this.format(current);\n if (current && typeof current === 'object') {\n if (!this.isValidIsoDate(current.inicio)) return '';\n return this.isValidIsoDate(current.fin)\n ? `${this.format(current.inicio)} — ${this.format(current.fin)}`\n : this.format(current.inicio);\n }\n return '';\n }\n\n protected get rangeStartLabel(): string {\n const inicio = this.currentRange()?.inicio;\n return this.isValidIsoDate(inicio) ? this.format(inicio) : 'Sin elegir';\n }\n\n protected get rangeEndLabel(): string {\n const fin = this.currentRange()?.fin;\n return this.isValidIsoDate(fin) ? this.format(fin) : 'Sin elegir';\n }\n\n private changed: (value: TdDatePickerValue) => void = () => undefined;\n\n writeValue(value: TdDatePickerValue): void {\n this.value.set(this.normalizeValue(value));\n this.syncViewToValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdDatePickerValue) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(): void {\n document.getElementById(this.labelId)?.parentElement?.querySelector<HTMLButtonElement>('button')?.focus();\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.syncViewToValue();\n this.calendarView = 'dias';\n this.open = true;\n this.openedChange.emit(true);\n this.cdr.markForCheck();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.hoveredDate = null;\n this.formBridge.markTouched(this.touched, this.touch);\n this.openedChange.emit(false);\n this.cdr.markForCheck();\n }\n\n protected previousPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() - 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() - 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected nextPage(): void {\n if (this.calendarView === 'dias') {\n this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);\n } else if (this.calendarView === 'meses') {\n this.viewDate = new Date(this.viewDate.getFullYear() + 1, this.viewDate.getMonth(), 1);\n } else {\n this.viewDate = new Date(this.viewDate.getFullYear() + 12, this.viewDate.getMonth(), 1);\n }\n }\n\n protected changeCalendarView(): void {\n if (this.calendarView === 'dias') {\n this.calendarView = 'meses';\n } else if (this.calendarView === 'meses') {\n this.calendarView = 'anios';\n }\n }\n\n protected selectMonth(month: number): void {\n this.viewDate = new Date(this.viewDate.getFullYear(), month, 1);\n this.calendarView = 'dias';\n }\n\n protected selectYear(year: number): void {\n this.viewDate = new Date(year, this.viewDate.getMonth(), 1);\n this.calendarView = 'meses';\n }\n\n protected goToday(): void {\n const today = this.toIso(new Date());\n if (\n (typeof this.minDate === 'string' && today < this.minDate) ||\n (typeof this.maxDate === 'string' && today > this.maxDate)\n ) return;\n this.viewDate = this.startOfMonth(new Date());\n this.calendarView = 'dias';\n this.selectDate(this.days.find((day) => day.iso === today) ?? {\n iso: today,\n day: new Date().getDate(),\n currentMonth: true,\n today: true,\n disabled: false,\n });\n }\n\n protected selectDate(date: CalendarDay): void {\n if (date.disabled) return;\n if (!date.currentMonth) {\n const parsed = this.fromIso(date.iso);\n this.viewDate = this.startOfMonth(parsed);\n }\n\n if (this.mode === 'fecha') {\n this.setValue(date.iso);\n this.close();\n return;\n }\n\n const range = this.currentRange();\n if (!range || range.fin) {\n this.setValue({ inicio: date.iso, fin: null });\n return;\n }\n\n this.setValue(\n date.iso < range.inicio\n ? { inicio: date.iso, fin: range.inicio }\n : { inicio: range.inicio, fin: date.iso }\n );\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected isSelected(iso: string): boolean {\n const current = this.value();\n if (typeof current === 'string') return current === iso;\n return !!current && (current.inicio === iso || current.fin === iso);\n }\n\n protected isRangeStart(iso: string): boolean {\n return this.currentRange()?.inicio === iso;\n }\n\n protected isRangeEnd(iso: string): boolean {\n return this.currentRange()?.fin === iso;\n }\n\n protected isInRange(iso: string): boolean {\n const range = this.currentRange();\n if (!range) return false;\n const end = range.fin ?? this.hoveredDate;\n if (!end) return false;\n const start = end < range.inicio ? end : range.inicio;\n const finish = end < range.inicio ? range.inicio : end;\n return iso > start && iso < finish;\n }\n\n protected formatLong(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.longFormatter.format(date) : iso;\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openPanel();\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'PageUp') {\n event.preventDefault();\n this.previousPage();\n } else if (event.key === 'PageDown') {\n event.preventDefault();\n this.nextPage();\n }\n }\n\n private currentRange(): TdDateRange | null {\n const current = this.value();\n return current && typeof current === 'object' ? current : null;\n }\n\n private setValue(value: TdDatePickerValue): void {\n this.value.set(value);\n this.changed(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private syncViewToValue(): void {\n const current = this.value();\n const iso = typeof current === 'string' ? current : current?.inicio;\n if (this.isValidIsoDate(iso)) this.viewDate = this.startOfMonth(this.fromIso(iso));\n }\n\n private normalizeValue(value: TdDatePickerValue): TdDatePickerValue {\n if (!value) return null;\n if (typeof value === 'string') return this.isValidIsoDate(value) ? value : null;\n if (!this.isValidIsoDate(value.inicio)) return null;\n return {\n inicio: value.inicio,\n fin: this.isValidIsoDate(value.fin) ? value.fin : null,\n };\n }\n\n private format(iso: string): string {\n const date = this.fromIso(iso);\n return this.isValidDate(date) ? this.formatter.format(date).replace('.', '') : '';\n }\n\n private fromIso(iso: string): Date {\n if (!this.isIsoDateText(iso)) return new Date(Number.NaN);\n const [year, month, day] = iso.split('-').map(Number);\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n )\n ? date\n : new Date(Number.NaN);\n }\n\n private isValidIsoDate(value: unknown): value is string {\n return typeof value === 'string' && this.isValidDate(this.fromIso(value));\n }\n\n private isIsoDateText(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n private isValidDate(value: Date): boolean {\n return !Number.isNaN(value.getTime());\n }\n\n private toIso(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n private startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n\n private monthIntersectsLimits(year: number, month: number): boolean {\n const first = this.toIso(new Date(year, month, 1));\n const last = this.toIso(new Date(year, month + 1, 0));\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n\n private yearIntersectsLimits(year: number): boolean {\n const first = `${year}-01-01`;\n const last = `${year}-12-31`;\n return !(\n (typeof this.minDate === 'string' && last < this.minDate) ||\n (typeof this.maxDate === 'string' && first > this.maxDate)\n );\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport type TdDialogTamano = 'pequeno' | 'mediano' | 'grande' | 'pantalla';\n\nexport interface TdDialogConfig<D = unknown> {\n data?: D;\n titulo?: string;\n subtitulo?: string;\n icono?: string;\n tamano?: TdDialogTamano;\n ancho?: string;\n alto?: string;\n maxAncho?: string;\n maxAlto?: string;\n mostrarCerrar?: boolean;\n cerrarAlNavegar?: boolean;\n deshabilitarCierre?: boolean;\n autoFocus?: 'dialog' | 'first-tabbable' | 'first-heading' | string | boolean;\n restaurarFoco?: boolean;\n oscuro?: boolean;\n draggable?: boolean;\n panelClass?: string | string[];\n ariaLabel?: string;\n}\n\nexport interface TdDialogPanelData<D = unknown> {\n component: Type<unknown>;\n config: TdDialogConfig<D>;\n fullscreen: boolean;\n}\n\nexport const TD_DIALOG_DATA = new InjectionToken<unknown>('TD_DIALOG_DATA');\nexport const TD_DIALOG_CONFIG = new InjectionToken<TdDialogConfig>('TD_DIALOG_CONFIG');\n\nexport interface TdDialogRefLike<R = unknown> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n close(result?: R): void;\n updateSize(width?: string | number, height?: string | number): this;\n}\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TdDialogRefLike } from './td-dialog.model';\n\nexport class TdDialogRef<R = unknown> implements TdDialogRefLike<R> {\n readonly closed: Observable<R | undefined>;\n readonly id: string;\n\n constructor(private readonly ref: DialogRef<R, unknown>) {\n this.closed = ref.closed;\n this.id = ref.id;\n }\n\n close(result?: R): void {\n this.ref.close(result);\n }\n\n updateSize(width?: string | number, height?: string | number): this {\n this.ref.updateSize(width, height);\n return this;\n }\n}\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { NgComponentOutlet } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, ViewChild, inject } from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Component({\n selector: 'td-dialog-panel',\n imports: [CdkDrag, CdkDragHandle, NgComponentOutlet, TdIcon],\n template: `\n <section\n class=\"td-dialog\"\n cdkDrag\n cdkDragRootElement=\".cdk-overlay-pane\"\n cdkDragBoundary=\".cdk-overlay-container\"\n [cdkDragDisabled]=\"!draggableEnabled\"\n [class.td-dialog--oscuro]=\"payload.config.oscuro\"\n [class.td-dialog--pantalla]=\"payload.fullscreen\"\n [class.td-dialog--draggable]=\"draggableEnabled\"\n [attr.aria-label]=\"payload.config.ariaLabel || payload.config.titulo || 'Diálogo'\"\n >\n @if (\n payload.config.titulo ||\n payload.config.subtitulo ||\n payload.config.icono ||\n payload.config.mostrarCerrar !== false\n ) {\n <header class=\"td-dialog__header\">\n <div class=\"td-dialog__drag-zone\" cdkDragHandle>\n @if (payload.config.icono) {\n <span class=\"td-dialog__icono\">\n <td-icon [nombre]=\"payload.config.icono\" tamano=\"1.25rem\" />\n </span>\n }\n <div class=\"td-dialog__titulos\">\n @if (payload.config.titulo) {\n <h2>{{ payload.config.titulo }}</h2>\n }\n @if (payload.config.subtitulo) {\n <p>{{ payload.config.subtitulo }}</p>\n }\n </div>\n </div>\n @if (payload.config.mostrarCerrar !== false) {\n <button\n type=\"button\"\n class=\"td-dialog__cerrar\"\n aria-label=\"Cerrar diálogo\"\n title=\"Cerrar\"\n (click)=\"dialogRef.close()\"\n >\n <td-icon nombre=\"close\" />\n </button>\n }\n </header>\n }\n\n <div #contentHost class=\"td-dialog__contenido\">\n <ng-container *ngComponentOutlet=\"payload.component\" />\n </div>\n </section>\n `,\n styleUrl: './td-dialog-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogPanel implements AfterViewInit {\n protected readonly payload = inject<TdDialogPanelData>(DIALOG_DATA);\n protected readonly dialogRef = inject(TdDialogRef);\n @ViewChild('contentHost', { read: ElementRef }) private contentHost?: ElementRef<HTMLElement>;\n\n ngAfterViewInit(): void {\n if (this.payload.config.autoFocus === false) {\n return;\n }\n\n queueMicrotask(() => this.focusFirstInteractiveElement());\n window.setTimeout(() => this.focusFirstInteractiveElement(), 40);\n }\n\n protected get draggableEnabled(): boolean {\n return !!this.payload.config.draggable && !this.payload.fullscreen && !this.isMobileLike();\n }\n\n private focusFirstInteractiveElement(): void {\n const host = this.contentHost?.nativeElement;\n if (!host) {\n return;\n }\n\n const target = host.querySelector<HTMLElement>(\n [\n '[data-td-autofocus]',\n '[cdkFocusInitial]',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ')\n );\n\n target?.focus?.();\n }\n\n private isMobileLike(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px), (pointer: coarse)').matches;\n }\n}\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { Injectable, Type, inject } from '@angular/core';\nimport { TD_DIALOG_CONFIG, TD_DIALOG_DATA, TdDialogConfig, TdDialogPanelData } from './td-dialog.model';\nimport { TdDialogPanel } from './td-dialog-panel';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Injectable({ providedIn: 'root' })\nexport class TdDialog {\n private readonly dialog = inject(Dialog);\n\n open<C, D = unknown, R = unknown>(\n component: Type<C>,\n config: TdDialogConfig<D> = {}\n ): TdDialogRef<R> {\n const size = config.tamano ?? 'mediano';\n const mobile =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(max-width: 600px)').matches;\n const fullscreen = size === 'pantalla' || (mobile && size !== 'pequeno');\n const width = fullscreen ? '100%' : config.ancho ?? this.widthFor(size);\n const maxWidth = fullscreen ? '100%' : config.maxAncho ?? 'calc(100vw - 2rem)';\n const maxHeight = fullscreen ? '100dvh' : config.maxAlto ?? 'calc(100dvh - 2rem)';\n let publicRef!: TdDialogRef<R>;\n\n const cdkRef = this.dialog.open<R, TdDialogPanelData<D>, TdDialogPanel>(\n TdDialogPanel,\n {\n data: { component, config, fullscreen },\n width,\n height: fullscreen ? '100dvh' : config.alto,\n maxWidth,\n maxHeight,\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n panelClass: this.panelClasses(config, fullscreen),\n disableClose: config.deshabilitarCierre ?? false,\n closeOnNavigation: config.cerrarAlNavegar ?? true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restaurarFoco ?? true,\n ariaLabel: config.ariaLabel ?? config.titulo,\n ariaModal: true,\n providers: (ref: DialogRef<R, TdDialogPanel>) => {\n publicRef = new TdDialogRef<R>(ref as DialogRef<R, unknown>);\n return [\n { provide: TD_DIALOG_DATA, useValue: config.data },\n { provide: TD_DIALOG_CONFIG, useValue: config },\n { provide: TdDialogRef, useValue: publicRef },\n ];\n },\n }\n );\n\n return publicRef ?? new TdDialogRef<R>(cdkRef as DialogRef<R, unknown>);\n }\n\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n private widthFor(size: TdDialogConfig['tamano']): string {\n const widths = {\n pequeno: 'min(28rem, calc(100vw - 2rem))',\n mediano: 'min(40rem, calc(100vw - 2rem))',\n grande: 'min(64rem, calc(100vw - 2rem))',\n pantalla: '100%',\n };\n return widths[size ?? 'mediano'];\n }\n\n private panelClasses(config: TdDialogConfig, fullscreen: boolean): string[] {\n const extra = Array.isArray(config.panelClass)\n ? config.panelClass\n : config.panelClass\n ? [config.panelClass]\n : [];\n return [\n 'td-dialog-overlay',\n `td-dialog-overlay--${config.tamano ?? 'mediano'}`,\n ...(fullscreen ? ['td-dialog-overlay--fullscreen'] : []),\n ...extra,\n ];\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'td-dialog-actions',\n template: `<ng-content />`,\n styles: `\n :host {\n position: sticky;\n z-index: 3;\n bottom: -1.5rem;\n display: flex;\n min-height: 3.7rem;\n flex: 0 0 auto;\n align-items: center;\n justify-content: flex-end;\n gap: .5rem;\n margin: auto -1.5rem -1.5rem;\n margin-top: auto;\n border-top: 1px solid var(--td-dialog-border, #e6e9f0);\n padding: .65rem 1.25rem;\n background: var(--td-dialog-footer, #fafbfc);\n box-shadow: 0 -8px 22px rgba(15, 23, 42, .035);\n }\n\n :host ::ng-deep td-button {\n display: inline-block;\n min-width: 0;\n }\n\n :host ::ng-deep button {\n display: inline-flex;\n min-height: 2.25rem;\n align-items: center;\n justify-content: center;\n gap: .45rem;\n border: 1px solid var(--td-dialog-border, #dfe3eb);\n border-radius: .6rem;\n padding: .5rem .85rem;\n color: var(--td-dialog-text, #263147);\n background: var(--td-dialog-surface, #fff);\n font: 750 .75rem/1 system-ui, sans-serif;\n cursor: pointer;\n }\n\n :host ::ng-deep button:hover { border-color: #9b91e3; background: #f7f5ff; }\n :host ::ng-deep button[tdDialogPrimary] {\n border-color: transparent;\n color: #fff;\n background: linear-gradient(135deg, #5746d8, #7657df);\n box-shadow: 0 7px 16px rgba(87, 70, 216, .2);\n }\n :host ::ng-deep button:disabled { opacity: .5; cursor: not-allowed; }\n\n @media (max-width: 520px) {\n :host {\n bottom: -1.1rem;\n display: grid;\n grid-auto-flow: row;\n grid-auto-rows: minmax(2.45rem, auto);\n grid-template-columns: minmax(0, 1fr);\n min-height: auto;\n align-items: stretch;\n justify-content: stretch;\n margin-right: -1.1rem;\n margin-bottom: -1.1rem;\n margin-left: -1.1rem;\n padding: .75rem 1.1rem;\n gap: .55rem;\n }\n\n :host ::ng-deep td-button {\n display: block;\n width: 100%;\n }\n\n :host ::ng-deep td-button:last-of-type {\n order: -1;\n }\n\n :host ::ng-deep button,\n :host ::ng-deep td-button .td-button {\n width: 100%;\n min-height: 2.45rem;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdDialogActions {}\n","import { Directive, HostListener, Input, inject } from '@angular/core';\nimport { TdDialogRef } from './td-dialog-ref';\n\n@Directive({\n selector: '[tdDialogClose]',\n})\nexport class TdDialogClose {\n private readonly dialogRef = inject(TdDialogRef);\n\n @Input('tdDialogClose') result: unknown;\n\n @HostListener('click')\n protected close(): void {\n this.dialogRef.close(this.result);\n }\n}\n\n@Directive({\n selector: '[tdDialogPrimary]',\n})\nexport class TdDialogPrimary {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'td-footer',\n templateUrl: './td-footer.html',\n styleUrl: './td-footer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFooter {\n @Input() empresa = 'TelcomDev';\n @Input() texto = 'Todos los derechos reservados.';\n @Input() version = '';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() anio = new Date().getFullYear();\n}\n","<footer\n class=\"td-footer\"\n [class.td-footer--oscuro]=\"oscuro\"\n [class.td-footer--compacto]=\"compacto\"\n>\n <div class=\"td-footer__identidad td-footer__identidad--desktop\">\n <span>© {{ anio }} {{ empresa }}</span>\n @if (texto) {\n <small>{{ texto }}</small>\n }\n </div>\n\n <div class=\"td-footer__identidad td-footer__identidad--mobile\">\n <span>© {{ anio }} {{ empresa }} Todos los derechos reservados</span>\n </div>\n\n <nav class=\"td-footer__enlaces\" aria-label=\"Enlaces del pie de página\">\n <ng-content select=\"[tdFooterLinks]\" />\n </nav>\n\n <div class=\"td-footer__final\">\n <ng-content select=\"[tdFooterActions]\" />\n @if (version) {\n <span class=\"td-footer__version\">v{{ version }}</span>\n }\n </div>\n</footer>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\nimport { TdFileAttachment, TdFileSource, TdFileViewerArchivo, TdFileViewerKind } from './td-file-viewer.model';\n\ntype PdfJsModule = typeof import('pdfjs-dist');\ntype PdfDocumentProxy = {\n numPages: number;\n getPage(pageNumber: number): Promise<{\n getViewport(options: { scale: number }): { width: number; height: number };\n render(options: { canvasContext: CanvasRenderingContext2D; viewport: object }): PdfRenderTask;\n }>;\n destroy?(): Promise<void>;\n};\ntype PdfRenderTask = { promise: Promise<void>; cancel(): void };\n\n@Component({\n selector: 'td-file-viewer',\n imports: [TdIcon],\n templateUrl: './td-file-viewer.html',\n styleUrl: './td-file-viewer.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileViewer {\n private readonly cdr = inject(ChangeDetectorRef);\n @ViewChild('visorDialog') private visorDialog?: ElementRef<HTMLDialogElement>;\n @ViewChild('pdfCanvas') private pdfCanvas?: ElementRef<HTMLCanvasElement>;\n\n private archivosNormalizados: TdFileAttachment[] = [];\n\n @Input()\n set archivos(value: TdFileViewerArchivo[] | null | undefined) {\n this.archivosNormalizados = (value ?? []).map((archivo, indice) => this.normalizarArchivo(archivo, indice));\n }\n\n get archivos(): TdFileAttachment[] {\n return this.archivosNormalizados;\n }\n\n @Input() titulo = 'Archivos adjuntos';\n @Input() descripcion = 'Visualiza imagenes, PDF y descarga otros formatos.';\n @Input() oscuro = false;\n @Input() compacto = false;\n @Input() showList = true;\n\n @Output() readonly seleccionar = new EventEmitter<TdFileAttachment>();\n @Output() readonly descargar = new EventEmitter<TdFileAttachment>();\n @Output() readonly closed = new EventEmitter<void>();\n\n protected seleccionado: TdFileAttachment | null = null;\n protected zoom = 1;\n protected rotacion = 0;\n protected pdfCargando = false;\n protected pdfError = '';\n protected pdfPaginaActual = 1;\n protected pdfTotalPaginas = 0;\n\n private pdfJs?: PdfJsModule;\n private pdfDocumento?: PdfDocumentProxy;\n private pdfRenderTask?: PdfRenderTask;\n private pdfRenderToken = 0;\n\n open(archivo: TdFileViewerArchivo): void {\n const normalizado = this.esAdjuntoNormalizado(archivo)\n ? archivo\n : this.normalizarArchivo(archivo, this.archivos.length);\n\n const existe = this.archivos.some((item) => item.id === normalizado.id);\n if (!existe) {\n this.archivosNormalizados = [normalizado, ...this.archivosNormalizados];\n }\n\n this.abrir(normalizado);\n }\n\n openByIndex(index: number): void {\n const archivo = this.archivos[index];\n if (!archivo) return;\n this.abrir(archivo);\n }\n\n close(): void {\n this.cerrar();\n }\n\n protected abrir(archivo: TdFileAttachment): void {\n this.limpiarPdf();\n this.seleccionado = archivo;\n this.zoom = 1;\n this.rotacion = 0;\n this.pdfPaginaActual = 1;\n setTimeout(() => {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog && !dialog.open) dialog.showModal();\n if (this.esPdf(archivo)) {\n void this.cargarPdf(archivo);\n }\n });\n this.seleccionar.emit(archivo);\n }\n\n protected cerrar(): void {\n const dialog = this.visorDialog?.nativeElement;\n if (dialog?.open) dialog.close();\n this.seleccionado = null;\n this.zoom = 1;\n this.rotacion = 0;\n this.limpiarPdf();\n this.closed.emit();\n }\n\n protected cerrarSiBackdrop(event: MouseEvent): void {\n if (event.target instanceof HTMLDialogElement) {\n this.cerrar();\n }\n }\n\n protected descargarArchivo(archivo: TdFileAttachment, event?: MouseEvent): void {\n event?.stopPropagation();\n this.descargar.emit(archivo);\n }\n\n protected tipoArchivo(archivo: TdFileAttachment): TdFileViewerKind {\n const tipo = `${archivo.tipo ?? ''} ${archivo.nombre} ${archivo.url}`.toLowerCase();\n if (tipo.includes('image/') || /\\.(png|jpe?g|gif|webp|svg)$/i.test(tipo)) return 'imagen';\n if (tipo.includes('pdf') || /\\.pdf(\\?|#|$)/i.test(tipo)) return 'pdf';\n if (tipo.includes('excel') || tipo.includes('spreadsheet') || /\\.(xls|xlsx|csv)(\\?|#|$)/i.test(tipo)) return 'excel';\n if (tipo.includes('xml') || /\\.xml(\\?|#|$)/i.test(tipo)) return 'xml';\n if (tipo.includes('zip') || /\\.(zip|rar|7z)(\\?|#|$)/i.test(tipo)) return 'zip';\n return 'archivo';\n }\n\n protected iconoArchivo(archivo: TdFileAttachment): string {\n const tipo = this.tipoArchivo(archivo);\n if (tipo === 'imagen') return 'image';\n if (tipo === 'archivo') return 'file';\n return tipo;\n }\n\n protected esImagen(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'imagen';\n }\n\n protected esPdf(archivo: TdFileAttachment | null): boolean {\n return !!archivo && this.tipoArchivo(archivo) === 'pdf';\n }\n\n protected tieneVistaPrevia(archivo: TdFileAttachment): boolean {\n return this.esImagen(archivo) || this.esPdf(archivo);\n }\n\n protected indiceSeleccionado(): number {\n return this.seleccionado\n ? this.archivos.findIndex((archivo) => archivo.id === this.seleccionado?.id)\n : -1;\n }\n\n protected seleccionarAnterior(): void {\n const indice = this.indiceSeleccionado();\n if (indice <= 0) return;\n this.abrir(this.archivos[indice - 1]);\n }\n\n protected seleccionarSiguiente(): void {\n const indice = this.indiceSeleccionado();\n if (indice < 0 || indice >= this.archivos.length - 1) return;\n this.abrir(this.archivos[indice + 1]);\n }\n\n protected cambiarZoom(delta: number): void {\n this.zoom = Math.min(2.5, Math.max(0.5, Number((this.zoom + delta).toFixed(2))));\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected restablecerZoom(): void {\n this.zoom = 1;\n this.rotacion = 0;\n if (this.esPdf(this.seleccionado) && this.pdfDocumento) {\n void this.renderizarPaginaPdf();\n }\n }\n\n protected rotar(): void {\n this.rotacion = (this.rotacion + 90) % 360;\n }\n\n protected paginaPdfAnterior(): void {\n if (this.pdfPaginaActual <= 1) return;\n this.pdfPaginaActual -= 1;\n void this.renderizarPaginaPdf();\n }\n\n protected paginaPdfSiguiente(): void {\n if (!this.pdfTotalPaginas || this.pdfPaginaActual >= this.pdfTotalPaginas) return;\n this.pdfPaginaActual += 1;\n void this.renderizarPaginaPdf();\n }\n\n protected tamanoLegible(archivo: TdFileAttachment): string {\n if (archivo.tamano === null || archivo.tamano === undefined || archivo.tamano === '') return '';\n if (typeof archivo.tamano === 'string') return archivo.tamano;\n\n const unidades = ['B', 'KB', 'MB', 'GB'];\n let valor = archivo.tamano;\n let indice = 0;\n while (valor >= 1024 && indice < unidades.length - 1) {\n valor /= 1024;\n indice += 1;\n }\n return `${valor.toFixed(indice ? 1 : 0)} ${unidades[indice]}`;\n }\n\n private async cargarPdf(archivo: TdFileAttachment): Promise<void> {\n const token = ++this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.pdfTotalPaginas = 0;\n this.cdr.markForCheck();\n\n try {\n const pdfjs = await this.obtenerPdfJs();\n const loadingTask = pdfjs.getDocument(this.obtenerFuentePdf(archivo));\n const documento = (await loadingTask.promise) as unknown as PdfDocumentProxy;\n if (token !== this.pdfRenderToken) {\n await documento.destroy?.();\n return;\n }\n\n this.pdfDocumento = documento;\n this.pdfTotalPaginas = documento.numPages;\n this.pdfPaginaActual = Math.min(Math.max(this.pdfPaginaActual, 1), documento.numPages || 1);\n this.pdfCargando = false;\n this.cdr.markForCheck();\n await this.renderizarPaginaPdf();\n } catch {\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo cargar la vista previa del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async renderizarPaginaPdf(): Promise<void> {\n if (!this.pdfDocumento || !this.pdfCanvas) return;\n\n const token = this.pdfRenderToken;\n this.pdfCargando = true;\n this.pdfError = '';\n this.cdr.markForCheck();\n\n try {\n this.pdfRenderTask?.cancel();\n const pagina = await this.pdfDocumento.getPage(this.pdfPaginaActual);\n if (token !== this.pdfRenderToken) return;\n\n const canvas = this.pdfCanvas.nativeElement;\n const contexto = canvas.getContext('2d');\n if (!contexto) throw new Error('Canvas context unavailable');\n\n const dpr = Math.max(window.devicePixelRatio || 1, 1);\n const viewport = pagina.getViewport({ scale: this.zoom });\n canvas.width = Math.floor(viewport.width * dpr);\n canvas.height = Math.floor(viewport.height * dpr);\n canvas.style.width = `${viewport.width}px`;\n canvas.style.height = `${viewport.height}px`;\n\n contexto.setTransform(dpr, 0, 0, dpr, 0, 0);\n contexto.clearRect(0, 0, viewport.width, viewport.height);\n\n const renderTask = pagina.render({ canvasContext: contexto, viewport }) as PdfRenderTask;\n this.pdfRenderTask = renderTask;\n await renderTask.promise;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.cdr.markForCheck();\n } catch (error) {\n if ((error as { name?: string })?.name === 'RenderingCancelledException') return;\n if (token !== this.pdfRenderToken) return;\n this.pdfCargando = false;\n this.pdfError = 'No se pudo renderizar esta pagina del PDF.';\n this.cdr.markForCheck();\n }\n }\n\n private async obtenerPdfJs(): Promise<PdfJsModule> {\n if (this.pdfJs) return this.pdfJs;\n\n const pdfjs = await import('pdfjs-dist');\n pdfjs.GlobalWorkerOptions.workerSrc = new URL(\n 'pdfjs-dist/build/pdf.worker.min.mjs',\n import.meta.url\n ).toString();\n this.pdfJs = pdfjs;\n return pdfjs;\n }\n\n private limpiarPdf(): void {\n this.pdfRenderToken += 1;\n this.pdfRenderTask?.cancel();\n this.pdfRenderTask = undefined;\n void this.pdfDocumento?.destroy?.();\n this.pdfDocumento = undefined;\n this.pdfCargando = false;\n this.pdfError = '';\n this.pdfPaginaActual = 1;\n this.pdfTotalPaginas = 0;\n }\n\n private normalizarArchivo(archivo: TdFileViewerArchivo, indice: number): TdFileAttachment {\n if (this.esAdjuntoNormalizado(archivo)) {\n return archivo;\n }\n\n const contentType = archivo.type || archivo.contentType || this.inferirContentType(archivo.fileName, archivo.file);\n const url = this.normalizarFileUrl(archivo.file, contentType);\n\n return {\n id: archivo.id ?? `${archivo.fileName}-${indice}`,\n nombre: archivo.fileName,\n url,\n tipo: contentType,\n tamano: archivo.size,\n descripcion: archivo.description,\n thumbnailUrl: archivo.thumbnailUrl,\n descargable: archivo.downloadable,\n };\n }\n\n private esAdjuntoNormalizado(archivo: TdFileViewerArchivo): archivo is TdFileAttachment {\n return 'nombre' in archivo && 'url' in archivo;\n }\n\n private normalizarFileUrl(file: string, contentType: string): string {\n const value = file.trim();\n if (!value) return '';\n if (/^(https?:|blob:|data:)/i.test(value)) return value;\n return `data:${contentType};base64,${value}`;\n }\n\n private inferirContentType(fileName: string, file: string): string {\n const value = `${fileName} ${file.slice(0, 80)}`.toLowerCase();\n if (value.includes('data:')) {\n const match = file.match(/^data:([^;,]+)/i);\n if (match?.[1]) return match[1];\n }\n if (/\\.(png)$/i.test(fileName)) return 'image/png';\n if (/\\.(jpe?g)$/i.test(fileName)) return 'image/jpeg';\n if (/\\.(gif)$/i.test(fileName)) return 'image/gif';\n if (/\\.(webp)$/i.test(fileName)) return 'image/webp';\n if (/\\.(svg)$/i.test(fileName)) return 'image/svg+xml';\n if (/\\.(pdf)$/i.test(fileName)) return 'application/pdf';\n if (/\\.(xlsx)$/i.test(fileName)) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (/\\.(xls)$/i.test(fileName)) return 'application/vnd.ms-excel';\n if (/\\.(csv)$/i.test(fileName)) return 'text/csv';\n if (/\\.(xml)$/i.test(fileName)) return 'application/xml';\n if (/\\.(zip)$/i.test(fileName)) return 'application/zip';\n return 'application/octet-stream';\n }\n\n private obtenerFuentePdf(archivo: TdFileAttachment): { url: string } | { data: Uint8Array } {\n const dataUrl = archivo.url.match(/^data:application\\/pdf[^,]*,(.+)$/i);\n if (!dataUrl?.[1]) return { url: archivo.url };\n return { data: this.base64ABytes(dataUrl[1]) };\n }\n\n private base64ABytes(base64: string): Uint8Array {\n const limpio = decodeURIComponent(base64).replace(/\\s/g, '');\n const binario = atob(limpio);\n const bytes = new Uint8Array(binario.length);\n for (let i = 0; i < binario.length; i += 1) {\n bytes[i] = binario.charCodeAt(i);\n }\n return bytes;\n }\n}\n","@if (showList) {\n <section\n class=\"td-file-viewer\"\n [class.td-file-viewer--dark]=\"oscuro\"\n [class.td-file-viewer--compact]=\"compacto\"\n >\n <header class=\"td-file-viewer__header\">\n <div>\n <span>{{ archivos.length }} archivo{{ archivos.length === 1 ? '' : 's' }}</span>\n <h3>{{ titulo }}</h3>\n @if (descripcion) {\n <p>{{ descripcion }}</p>\n }\n </div>\n </header>\n\n @if (archivos.length) {\n <div class=\"td-file-viewer__grid\">\n @for (archivo of archivos; track archivo.id) {\n <button type=\"button\" class=\"td-file-viewer__item\" (click)=\"abrir(archivo)\">\n <span class=\"td-file-viewer__preview\" [class.td-file-viewer__preview--image]=\"tipoArchivo(archivo) === 'imagen'\">\n @if (tipoArchivo(archivo) === 'imagen') {\n <img [src]=\"archivo.thumbnailUrl || archivo.url\" [alt]=\"archivo.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"1.55rem\" />\n }\n </span>\n\n <span class=\"td-file-viewer__meta\">\n <strong>{{ archivo.nombre }}</strong>\n @if (archivo.descripcion) {\n <small>{{ archivo.descripcion }}</small>\n }\n <em>\n {{ tieneVistaPrevia(archivo) ? 'Vista previa disponible' : 'Descarga / apertura externa' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </em>\n </span>\n\n @if (archivo.descargable !== false) {\n <span\n role=\"button\"\n tabindex=\"-1\"\n class=\"td-file-viewer__download\"\n title=\"Descargar\"\n (click)=\"descargarArchivo(archivo, $event)\"\n >\n <td-icon nombre=\"download\" tamano=\"1rem\" />\n </span>\n }\n </button>\n }\n </div>\n } @else {\n <div class=\"td-file-viewer__empty\">\n <td-icon nombre=\"file\" tamano=\"2rem\" />\n <strong>No hay adjuntos</strong>\n <span>Cuando existan archivos apareceran en esta zona.</span>\n </div>\n }\n </section>\n}\n\n@if (seleccionado; as archivo) {\n <dialog\n #visorDialog\n class=\"td-file-viewer-modal\"\n [class.td-file-viewer-modal--dark]=\"oscuro\"\n [attr.aria-label]=\"archivo.nombre\"\n (click)=\"cerrarSiBackdrop($event)\"\n (cancel)=\"cerrar()\"\n (close)=\"seleccionado = null\"\n >\n <section class=\"td-file-viewer-modal__panel\">\n <header class=\"td-file-viewer-modal__topbar\">\n <div class=\"td-file-viewer-modal__title\">\n <span class=\"td-file-viewer-modal__badge\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\".95rem\" />\n {{ tipoArchivo(archivo) }}\n </span>\n <h3>{{ archivo.nombre }}</h3>\n @if (archivo.descripcion || tamanoLegible(archivo)) {\n <p>\n {{ archivo.descripcion || 'Archivo adjunto' }}\n @if (tamanoLegible(archivo)) {\n - {{ tamanoLegible(archivo) }}\n }\n </p>\n }\n </div>\n\n <nav class=\"td-file-viewer-modal__toolbar\" aria-label=\"Acciones del visor\">\n <button type=\"button\" title=\"Anterior\" [disabled]=\"indiceSeleccionado() <= 0\" (click)=\"seleccionarAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <button type=\"button\" title=\"Siguiente\" [disabled]=\"indiceSeleccionado() >= archivos.length - 1\" (click)=\"seleccionarSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n\n @if (esImagen(archivo) || esPdf(archivo)) {\n <span class=\"td-file-viewer-modal__divider\"></span>\n <button type=\"button\" title=\"Alejar\" (click)=\"cambiarZoom(-0.1)\">\n <span aria-hidden=\"true\">-</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__zoom\" title=\"Restablecer zoom\" (click)=\"restablecerZoom()\">\n {{ (zoom * 100).toFixed(0) }}%\n </button>\n <button type=\"button\" title=\"Acercar\" (click)=\"cambiarZoom(0.1)\">\n <span aria-hidden=\"true\">+</span>\n </button>\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Ajustar\" (click)=\"restablecerZoom()\">\n Ajustar\n </button>\n @if (esImagen(archivo)) {\n <button type=\"button\" class=\"td-file-viewer-modal__text-action\" title=\"Rotar\" (click)=\"rotar()\">\n Rotar\n </button>\n }\n }\n\n <span class=\"td-file-viewer-modal__divider\"></span>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\" title=\"Abrir en nueva pestana\">\n <td-icon nombre=\"visibility\" />\n </a>\n @if (archivo.descargable !== false) {\n <a [href]=\"archivo.url\" [download]=\"archivo.nombre\" target=\"_blank\" rel=\"noopener\" title=\"Descargar\">\n <td-icon nombre=\"download\" />\n </a>\n }\n <button type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\" (click)=\"cerrar()\">\n <td-icon nombre=\"close\" />\n </button>\n </nav>\n </header>\n\n <div class=\"td-file-viewer-modal__workspace\">\n <main class=\"td-file-viewer-modal__canvas\">\n @if (esImagen(archivo)) {\n <img\n class=\"td-file-viewer-modal__image\"\n [src]=\"archivo.url\"\n [alt]=\"archivo.nombre\"\n [style.transform]=\"'scale(' + zoom + ') rotate(' + rotacion + 'deg)'\"\n />\n } @else if (esPdf(archivo)) {\n <section class=\"td-file-viewer-modal__pdf-shell\">\n <div class=\"td-file-viewer-modal__pdf-head\">\n <span>\n <td-icon nombre=\"pdf\" />\n Vista PDF\n </span>\n <div class=\"td-file-viewer-modal__pdf-pages\">\n <button type=\"button\" title=\"Pagina anterior\" [disabled]=\"pdfPaginaActual <= 1 || pdfCargando\" (click)=\"paginaPdfAnterior()\">\n <td-icon nombre=\"chevron_left\" />\n </button>\n <small>\n Pagina {{ pdfPaginaActual }} de {{ pdfTotalPaginas || '-' }}\n </small>\n <button type=\"button\" title=\"Pagina siguiente\" [disabled]=\"!pdfTotalPaginas || pdfPaginaActual >= pdfTotalPaginas || pdfCargando\" (click)=\"paginaPdfSiguiente()\">\n <td-icon nombre=\"chevron_right\" />\n </button>\n </div>\n </div>\n <div class=\"td-file-viewer-modal__pdf-canvas-wrap\">\n <canvas #pdfCanvas class=\"td-file-viewer-modal__pdf-canvas\"></canvas>\n\n @if (pdfCargando) {\n <div class=\"td-file-viewer-modal__pdf-state\">\n <span class=\"td-file-viewer-modal__spinner\"></span>\n <strong>Cargando PDF</strong>\n <small>Preparando pagina {{ pdfPaginaActual }}...</small>\n </div>\n }\n\n @if (pdfError) {\n <div class=\"td-file-viewer-modal__pdf-state td-file-viewer-modal__pdf-state--error\">\n <td-icon nombre=\"alert\" tamano=\"2rem\" />\n <strong>{{ pdfError }}</strong>\n <small>Prueba abrirlo en una nueva pestaña o descargarlo.</small>\n </div>\n }\n </div>\n </section>\n } @else {\n <div class=\"td-file-viewer-modal__fallback\">\n <span class=\"td-file-viewer-modal__fallback-icon\">\n <td-icon [nombre]=\"iconoArchivo(archivo)\" tamano=\"3rem\" />\n </span>\n <h4>Vista previa no disponible</h4>\n <p>Este tipo de archivo debe abrirse o descargarse con una aplicacion compatible.</p>\n <a [href]=\"archivo.url\" target=\"_blank\" rel=\"noopener\">\n Abrir archivo\n </a>\n </div>\n }\n </main>\n\n @if (archivos.length > 1) {\n <footer class=\"td-file-viewer-modal__strip\">\n @for (item of archivos; track item.id) {\n <button\n type=\"button\"\n [class.td-file-viewer-modal__thumb--active]=\"item.id === archivo.id\"\n [title]=\"item.nombre\"\n (click)=\"abrir(item)\"\n >\n @if (tipoArchivo(item) === 'imagen') {\n <img [src]=\"item.thumbnailUrl || item.url\" [alt]=\"item.nombre\" loading=\"lazy\" />\n } @else {\n <td-icon [nombre]=\"iconoArchivo(item)\" />\n }\n @if (!tieneVistaPrevia(item)) {\n <span class=\"td-file-viewer-modal__no-preview\">Sin preview</span>\n }\n </button>\n }\n </footer>\n }\n </div>\n </section>\n </dialog>\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, EnvironmentInjector, Injectable, inject } from '@angular/core';\nimport { take } from 'rxjs';\nimport { TdFileViewer } from './td-file-viewer';\nimport { TdFileViewerArchivo, TdFileViewerOpenOptions } from './td-file-viewer.model';\n\n@Injectable({ providedIn: 'root' })\nexport class TdFileViewerService {\n private readonly overlay = inject(Overlay);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private overlayRef?: OverlayRef;\n private componentRef?: ComponentRef<TdFileViewer>;\n\n open(\n archivo: TdFileViewerArchivo | TdFileViewerArchivo[],\n opciones: TdFileViewerOpenOptions = {}\n ): TdFileViewer {\n this.dispose();\n\n const archivos = Array.isArray(archivo) ? archivo : [archivo];\n const index = Math.min(Math.max(opciones.index ?? 0, 0), Math.max(archivos.length - 1, 0));\n\n this.overlayRef = this.overlay.create({\n disposeOnNavigation: true,\n positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n this.componentRef = this.overlayRef.attach(\n new ComponentPortal(TdFileViewer, null, this.environmentInjector)\n );\n\n this.componentRef.setInput('archivos', archivos);\n this.componentRef.setInput('showList', false);\n\n if (opciones.titulo !== undefined) this.componentRef.setInput('titulo', opciones.titulo);\n if (opciones.descripcion !== undefined) {\n this.componentRef.setInput('descripcion', opciones.descripcion);\n }\n if (opciones.oscuro !== undefined) this.componentRef.setInput('oscuro', opciones.oscuro);\n if (opciones.compacto !== undefined) this.componentRef.setInput('compacto', opciones.compacto);\n\n this.componentRef.instance.closed.pipe(take(1)).subscribe(() => this.dispose());\n\n queueMicrotask(() => this.componentRef?.instance.openByIndex(index));\n\n return this.componentRef.instance;\n }\n\n close(): void {\n this.componentRef?.instance.close();\n this.dispose();\n }\n\n private dispose(): void {\n this.componentRef?.destroy();\n this.componentRef = undefined;\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TdFileViewerService } from '../file-viewer';\nimport { TdIcon } from '../iconos';\nimport {\n TdFileUploadItem,\n TdFileUploadRejected,\n TdFileUploadValue,\n TdFileUploadVariant,\n} from './td-file-upload.model';\n\nlet fileUploadSequence = 0;\n\n@Component({\n selector: 'td-file-upload',\n imports: [TdIcon],\n templateUrl: './td-file-upload.html',\n styleUrl: './td-file-upload.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdFileUpload),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdFileUpload implements ControlValueAccessor {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly viewer = inject(TdFileViewerService);\n private readonly generatedId = `td-file-upload-${++fileUploadSequence}`;\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Seleccionar archivos';\n @Input() placeholder = 'Ningún archivo seleccionado';\n @Input() description = 'Arrastra tus archivos aquí o selecciónalos desde tu dispositivo.';\n @Input() hint = '';\n @Input() accept = '';\n @Input() multiple = false;\n @Input() maxFiles = 0;\n @Input() maxSizeMb = 0;\n @Input() variant: TdFileUploadVariant = 'dropzone';\n @Input() showPreview = true;\n @Input() clearable = true;\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() required = false;\n @Input() error = '';\n @Input() dark = false;\n\n @Output() readonly valueChange = new EventEmitter<TdFileUploadValue>();\n @Output() readonly filesChange = new EventEmitter<File[]>();\n @Output() readonly rejected = new EventEmitter<TdFileUploadRejected[]>();\n @Output() readonly preview = new EventEmitter<TdFileUploadItem>();\n @Output() readonly removed = new EventEmitter<TdFileUploadItem>();\n\n protected items: TdFileUploadItem[] = [];\n protected dragging = false;\n protected touched = false;\n protected rejectedItems: TdFileUploadRejected[] = [];\n\n private onChange: (value: TdFileUploadValue) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get isDisabled(): boolean {\n return this.disabled;\n }\n\n protected get selectedText(): string {\n if (!this.items.length) return this.placeholder;\n if (this.items.length === 1) return this.items[0]?.name ?? this.placeholder;\n return `${this.items.length} archivos seleccionados`;\n }\n\n protected get acceptText(): string {\n return this.accept || 'Cualquier archivo';\n }\n\n protected get hasError(): boolean {\n return !!this.error || !!this.rejectedItems.length;\n }\n\n protected get message(): string {\n return this.error || this.rejectedItems[0]?.message || this.hint;\n }\n\n writeValue(value: TdFileUploadValue): void {\n this.revokePreviewUrls();\n const files = value ? (Array.isArray(value) ? value : [value]) : [];\n this.items = files.map((file) => this.createItem(file));\n this.rejectedItems = [];\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdFileUploadValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n this.cdr.markForCheck();\n }\n\n protected browse(): void {\n if (this.isDisabled || this.readonly) return;\n this.nativeInput?.nativeElement.click();\n }\n\n protected handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.addFiles(Array.from(input.files ?? []));\n input.value = '';\n }\n\n protected handleDragOver(event: DragEvent): void {\n if (this.isDisabled || this.readonly) return;\n event.preventDefault();\n this.dragging = true;\n }\n\n protected handleDragLeave(event: DragEvent): void {\n if (!this.isLeavingHost(event)) return;\n this.dragging = false;\n }\n\n protected handleDrop(event: DragEvent): void {\n if (this.isDisabled || this.readonly) return;\n event.preventDefault();\n this.dragging = false;\n this.addFiles(Array.from(event.dataTransfer?.files ?? []));\n }\n\n protected remove(item: TdFileUploadItem, event?: MouseEvent): void {\n event?.stopPropagation();\n if (this.isDisabled || this.readonly) return;\n\n this.items = this.items.filter((current) => current.id !== item.id);\n this.revokePreviewUrl(item);\n this.removed.emit(item);\n this.emitValue();\n }\n\n protected clear(event?: MouseEvent): void {\n event?.stopPropagation();\n if (this.isDisabled || this.readonly) return;\n\n this.revokePreviewUrls();\n this.items = [];\n this.rejectedItems = [];\n this.emitValue();\n }\n\n protected markTouched(): void {\n if (this.touched) return;\n this.touched = true;\n this.onTouched();\n }\n\n protected async openPreview(item: TdFileUploadItem, event?: MouseEvent): Promise<void> {\n event?.stopPropagation();\n this.preview.emit(item);\n\n if (item.previewKind === 'file') return;\n\n const file = await this.fileToDataUrl(item.file);\n this.viewer.open(\n {\n file,\n fileName: item.name,\n type: item.type,\n size: item.size,\n description: item.sizeLabel,\n },\n { titulo: item.name, descripcion: 'Vista previa del archivo seleccionado.' }\n );\n }\n\n protected iconFor(item: TdFileUploadItem): string {\n if (item.previewKind === 'image') return 'image';\n if (item.previewKind === 'pdf') return 'pdf';\n if (item.extension === 'xlsx' || item.extension === 'xls') return 'excel';\n if (item.extension === 'xml') return 'xml';\n if (item.extension === 'zip' || item.extension === 'rar' || item.extension === '7z') return 'zip';\n return 'file';\n }\n\n private addFiles(files: File[]): void {\n this.markTouched();\n if (!files.length) return;\n\n const accepted: File[] = [];\n const rejected: TdFileUploadRejected[] = [];\n const availableSlots = this.resolveAvailableSlots();\n\n for (const file of files) {\n if (availableSlots !== null && accepted.length >= availableSlots) {\n rejected.push({\n file,\n reason: 'maxFiles',\n message: `Solo puedes seleccionar ${this.maxFiles} archivo(s).`,\n });\n continue;\n }\n\n const typeError = this.validateType(file);\n if (typeError) {\n rejected.push(typeError);\n continue;\n }\n\n const sizeError = this.validateSize(file);\n if (sizeError) {\n rejected.push(sizeError);\n continue;\n }\n\n accepted.push(file);\n }\n\n this.rejectedItems = rejected;\n if (rejected.length) this.rejected.emit(rejected);\n\n if (accepted.length) {\n const nextItems = accepted.map((file) => this.createItem(file));\n if (this.multiple) {\n this.items = [...this.items, ...nextItems];\n } else {\n this.revokePreviewUrls();\n this.items = nextItems.slice(0, 1);\n }\n this.emitValue();\n }\n\n this.cdr.markForCheck();\n }\n\n private resolveAvailableSlots(): number | null {\n if (!this.multiple) return 1;\n if (this.maxFiles <= 0) return null;\n return Math.max(this.maxFiles - this.items.length, 0);\n }\n\n private validateType(file: File): TdFileUploadRejected | null {\n const rules = this.accept\n .split(',')\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean);\n\n if (!rules.length) return null;\n\n const extension = this.extensionOf(file.name);\n const fileType = file.type.toLowerCase();\n const valid = rules.some((rule) => {\n if (rule.startsWith('.')) return rule.slice(1) === extension;\n if (rule.endsWith('/*')) return fileType.startsWith(rule.slice(0, -1));\n return fileType === rule;\n });\n\n return valid\n ? null\n : {\n file,\n reason: 'type',\n message: `El archivo \"${file.name}\" no tiene un formato permitido.`,\n };\n }\n\n private validateSize(file: File): TdFileUploadRejected | null {\n if (this.maxSizeMb <= 0) return null;\n const maxBytes = this.maxSizeMb * 1024 * 1024;\n return file.size <= maxBytes\n ? null\n : {\n file,\n reason: 'size',\n message: `El archivo \"${file.name}\" supera el máximo de ${this.maxSizeMb} MB.`,\n };\n }\n\n private emitValue(): void {\n const files = this.items.map((item) => item.file);\n const value: TdFileUploadValue = this.multiple ? files : files[0] ?? null;\n this.onChange(value);\n this.valueChange.emit(value);\n this.filesChange.emit(files);\n this.cdr.markForCheck();\n }\n\n private createItem(file: File): TdFileUploadItem {\n const extension = this.extensionOf(file.name);\n const previewKind = file.type.startsWith('image/')\n ? 'image'\n : file.type === 'application/pdf' || extension === 'pdf'\n ? 'pdf'\n : 'file';\n\n return {\n id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,\n file,\n name: file.name,\n size: file.size,\n sizeLabel: this.formatSize(file.size),\n type: file.type || this.typeFromExtension(extension),\n extension,\n previewKind,\n previewUrl: previewKind === 'image' ? URL.createObjectURL(file) : undefined,\n };\n }\n\n private extensionOf(name: string): string {\n return name.includes('.') ? name.split('.').pop()?.toLowerCase() || '' : '';\n }\n\n private typeFromExtension(extension: string): string {\n if (extension === 'pdf') return 'application/pdf';\n if (extension === 'xml') return 'application/xml';\n if (extension === 'xlsx') return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (extension === 'xls') return 'application/vnd.ms-excel';\n if (extension === 'zip') return 'application/zip';\n return 'application/octet-stream';\n }\n\n private formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const kb = bytes / 1024;\n if (kb < 1024) return `${kb.toFixed(kb >= 100 ? 0 : 1)} KB`;\n const mb = kb / 1024;\n return `${mb.toFixed(mb >= 100 ? 0 : 1)} MB`;\n }\n\n private fileToDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result ?? ''));\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(file);\n });\n }\n\n private isLeavingHost(event: DragEvent): boolean {\n const currentTarget = event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return currentTarget instanceof Node && !currentTarget.contains(relatedTarget as Node | null);\n }\n\n private revokePreviewUrls(): void {\n this.items.forEach((item) => this.revokePreviewUrl(item));\n }\n\n private revokePreviewUrl(item: TdFileUploadItem): void {\n if (item.previewUrl) URL.revokeObjectURL(item.previewUrl);\n }\n}\n","<div\n class=\"td-file-upload\"\n [class.td-file-upload--input]=\"variant === 'input'\"\n [class.td-file-upload--dropzone]=\"variant === 'dropzone'\"\n [class.td-file-upload--dragging]=\"dragging\"\n [class.td-file-upload--disabled]=\"isDisabled\"\n [class.td-file-upload--readonly]=\"readonly\"\n [class.td-file-upload--error]=\"hasError\"\n [class.td-file-upload--dark]=\"dark\"\n (dragover)=\"handleDragOver($event)\"\n (dragleave)=\"handleDragLeave($event)\"\n (drop)=\"handleDrop($event)\"\n (click)=\"variant === 'dropzone' ? browse() : null\"\n (blur)=\"markTouched()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"isDisabled || readonly\"\n [attr.aria-describedby]=\"message ? inputId + '-message' : null\"\n>\n <input\n #nativeInput\n class=\"td-file-upload__native\"\n [id]=\"inputId\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"isDisabled\"\n [required]=\"required\"\n (change)=\"handleInput($event)\"\n (blur)=\"markTouched()\"\n />\n\n @if (variant === 'input') {\n <label class=\"td-file-upload__label\" [for]=\"inputId\">{{ label }}</label>\n <div class=\"td-file-upload__input-shell\">\n <div class=\"td-file-upload__input-text\">\n <td-icon nombre=\"upload\" />\n <span>{{ selectedText }}</span>\n </div>\n <button\n type=\"button\"\n class=\"td-file-upload__button\"\n [disabled]=\"isDisabled || readonly\"\n (click)=\"browse(); $event.stopPropagation()\"\n >\n Seleccionar\n </button>\n </div>\n } @else {\n <div class=\"td-file-upload__hero\">\n <span class=\"td-file-upload__icon\">\n <td-icon nombre=\"cloud\" />\n </span>\n <div>\n <strong>{{ label }}</strong>\n <p>{{ description }}</p>\n </div>\n <button\n type=\"button\"\n class=\"td-file-upload__button\"\n [disabled]=\"isDisabled || readonly\"\n (click)=\"browse(); $event.stopPropagation()\"\n >\n Buscar archivo\n </button>\n </div>\n <div class=\"td-file-upload__meta\">\n <span>Formatos: {{ acceptText }}</span>\n @if (maxSizeMb > 0) {\n <span>Máx. {{ maxSizeMb }} MB</span>\n }\n @if (multiple && maxFiles > 0) {\n <span>Hasta {{ maxFiles }} archivos</span>\n }\n </div>\n }\n</div>\n\n@if (message) {\n <p\n class=\"td-file-upload__message\"\n [class.td-file-upload__message--error]=\"hasError\"\n [id]=\"inputId + '-message'\"\n >\n {{ message }}\n </p>\n}\n\n@if (showPreview && items.length) {\n <div\n class=\"td-file-upload__list\"\n [class.td-file-upload__list--gallery]=\"variant === 'dropzone'\"\n [class.td-file-upload__list--compact]=\"variant === 'input'\"\n [class.td-file-upload__list--dark]=\"dark\"\n >\n @for (item of items; track item.id) {\n <article class=\"td-file-upload__item\">\n <button\n type=\"button\"\n class=\"td-file-upload__thumb\"\n [class.td-file-upload__thumb--clickable]=\"item.previewKind !== 'file'\"\n [title]=\"item.previewKind !== 'file' ? 'Previsualizar' : item.name\"\n (click)=\"openPreview(item, $event)\"\n >\n @if (item.previewKind === 'image' && item.previewUrl) {\n <img [src]=\"item.previewUrl\" [alt]=\"item.name\" />\n } @else {\n <td-icon [nombre]=\"iconFor(item)\" />\n }\n </button>\n\n <div class=\"td-file-upload__item-info\">\n <strong>{{ item.name }}</strong>\n <span>{{ item.sizeLabel }} · {{ item.type || item.extension || 'archivo' }}</span>\n </div>\n\n <div class=\"td-file-upload__actions\">\n @if (item.previewKind !== 'file') {\n <button type=\"button\" title=\"Previsualizar\" (click)=\"openPreview(item, $event)\">\n <td-icon nombre=\"visibility\" />\n </button>\n }\n @if (clearable) {\n <button type=\"button\" title=\"Quitar\" (click)=\"remove(item, $event)\">\n <td-icon nombre=\"close\" />\n </button>\n }\n </div>\n </article>\n }\n\n @if (clearable && items.length > 1) {\n <button type=\"button\" class=\"td-file-upload__clear-all\" (click)=\"clear($event)\">\n Limpiar todo\n </button>\n }\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n booleanAttribute,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { TdIcon } from '../iconos';\n\nexport interface TdHeaderNotificacion {\n id: string | number;\n titulo: string;\n descripcion?: string;\n fecha?: string;\n icono?: string;\n leida?: boolean;\n}\n\nexport type TdHeaderAccionPerfil = 'perfil' | 'configuracion' | 'salir';\nexport type TdHeaderPerfilAccionTono = 'neutral' | 'primary' | 'danger';\n\nexport interface TdHeaderPerfilAccion {\n id: string;\n etiqueta: string;\n icono?: string;\n descripcion?: string;\n tono?: TdHeaderPerfilAccionTono;\n}\n\nconst TD_HEADER_ACCIONES_PERFIL: TdHeaderPerfilAccion[] = [\n { id: 'perfil', etiqueta: 'Mi perfil', icono: 'person' },\n { id: 'configuracion', etiqueta: 'Configuración', icono: 'settings' },\n { id: 'salir', etiqueta: 'Cerrar sesión', icono: 'close', tono: 'danger' },\n];\n\n@Component({\n selector: 'td-header',\n imports: [TdIcon],\n templateUrl: './td-header.html',\n styleUrl: './td-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdHeader {\n @Input() menuAbierto = true;\n @Input() mostrarMenu = true;\n @Input() usuario = '';\n @Input() cargo = '';\n @Input() avatarUrl = '';\n @Input() notificaciones: TdHeaderNotificacion[] = [];\n @Input() oscuro = false;\n @Input() fijo = true;\n @Input({ transform: booleanAttribute }) mostrarNotificaciones = true;\n @Input({ transform: booleanAttribute }) mostrarPerfil = true;\n @Input() perfilAcciones: TdHeaderPerfilAccion[] = TD_HEADER_ACCIONES_PERFIL;\n\n @Output() readonly menuToggle = new EventEmitter<void>();\n @Output() readonly notificacionSeleccionada = new EventEmitter<TdHeaderNotificacion>();\n @Output() readonly verTodasNotificaciones = new EventEmitter<void>();\n @Output() readonly accionPerfil = new EventEmitter<TdHeaderAccionPerfil>();\n @Output() readonly perfilAccionSeleccionada = new EventEmitter<TdHeaderPerfilAccion>();\n\n protected panelNotificacionesAbierto = false;\n protected panelPerfilAbierto = false;\n\n protected alternarMenu(): void {\n this.menuToggle.emit();\n }\n\n protected alternarNotificaciones(): void {\n this.panelNotificacionesAbierto = !this.panelNotificacionesAbierto;\n this.panelPerfilAbierto = false;\n }\n\n protected alternarPerfil(): void {\n this.panelPerfilAbierto = !this.panelPerfilAbierto;\n this.panelNotificacionesAbierto = false;\n }\n\n protected seleccionarNotificacion(notificacion: TdHeaderNotificacion): void {\n this.notificacionSeleccionada.emit(notificacion);\n this.panelNotificacionesAbierto = false;\n }\n\n protected emitirAccionPerfil(accion: TdHeaderPerfilAccion): void {\n this.perfilAccionSeleccionada.emit(accion);\n\n if (this.esAccionPerfilLegacy(accion.id)) {\n this.accionPerfil.emit(accion.id);\n }\n\n this.panelPerfilAbierto = false;\n }\n\n protected notificacionesNoLeidas(): number {\n return this.notificaciones.filter((item) => !item.leida).length;\n }\n\n protected inicialesUsuario(): string {\n const partes = this.usuario.trim().split(/\\s+/).filter(Boolean);\n return (\n partes\n .slice(0, 2)\n .map((parte) => parte.charAt(0))\n .join('') || 'U'\n ).toUpperCase();\n }\n\n protected accionesPerfilVisibles(): TdHeaderPerfilAccion[] {\n return this.perfilAcciones?.length ? this.perfilAcciones : TD_HEADER_ACCIONES_PERFIL;\n }\n\n private esAccionPerfilLegacy(id: string): id is TdHeaderAccionPerfil {\n return id === 'perfil' || id === 'configuracion' || id === 'salir';\n }\n\n @HostListener('document:keydown.escape')\n protected cerrarConEscape(): void {\n this.panelNotificacionesAbierto = false;\n this.panelPerfilAbierto = false;\n }\n}\n","<header\n class=\"td-header\"\n [class.td-header--oscuro]=\"oscuro\"\n [class.td-header--fijo]=\"fijo\"\n>\n <div class=\"td-header__inicio\">\n @if (mostrarMenu) {\n <button\n class=\"td-header__boton td-header__menu\"\n type=\"button\"\n [attr.aria-label]=\"menuAbierto ? 'Cerrar sidebar' : 'Abrir sidebar'\"\n [attr.aria-expanded]=\"menuAbierto\"\n (click)=\"alternarMenu()\"\n >\n <td-icon [nombre]=\"menuAbierto ? 'close' : 'menu'\" />\n </button>\n }\n\n <ng-content select=\"[tdHeaderStart]\" />\n </div>\n\n <div class=\"td-header__centro\">\n <ng-content select=\"[tdHeaderCenter]\" />\n </div>\n\n <div class=\"td-header__acciones\">\n <ng-content select=\"[tdHeaderActions]\" />\n\n @if (mostrarNotificaciones) {\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__boton td-header__notificaciones\"\n type=\"button\"\n aria-label=\"Notificaciones\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"panelNotificacionesAbierto\"\n (click)=\"alternarNotificaciones()\"\n >\n <td-icon nombre=\"notifications\" />\n @if (notificacionesNoLeidas() > 0) {\n <span>{{ notificacionesNoLeidas() > 99 ? '99+' : notificacionesNoLeidas() }}</span>\n }\n </button>\n\n @if (panelNotificacionesAbierto) {\n <section class=\"td-header__panel td-header__panel--notificaciones\">\n <header>\n <div>\n <strong>Notificaciones</strong>\n <small>{{ notificacionesNoLeidas() }} sin leer</small>\n </div>\n <td-icon nombre=\"notifications\" />\n </header>\n\n <div class=\"td-header__lista-notificaciones\">\n @for (notificacion of notificaciones; track notificacion.id) {\n <button\n type=\"button\"\n [class.td-header__notificacion--nueva]=\"!notificacion.leida\"\n (click)=\"seleccionarNotificacion(notificacion)\"\n >\n <span class=\"td-header__notificacion-icono\">\n <td-icon [nombre]=\"notificacion.icono || 'notifications'\" />\n </span>\n <span>\n <strong>{{ notificacion.titulo }}</strong>\n @if (notificacion.descripcion) {\n <small>{{ notificacion.descripcion }}</small>\n }\n @if (notificacion.fecha) {\n <time>{{ notificacion.fecha }}</time>\n }\n </span>\n </button>\n } @empty {\n <p class=\"td-header__vacio\">No tienes notificaciones.</p>\n }\n </div>\n\n @if (notificaciones.length) {\n <button\n class=\"td-header__ver-todas\"\n type=\"button\"\n (click)=\"verTodasNotificaciones.emit(); panelNotificacionesAbierto = false\"\n >\n Ver todas las notificaciones\n </button>\n }\n </section>\n }\n </div>\n }\n\n @if (mostrarPerfil && usuario) {\n <span class=\"td-header__separador\" aria-hidden=\"true\"></span>\n\n <div class=\"td-header__desplegable\">\n <button\n class=\"td-header__perfil\"\n type=\"button\"\n aria-label=\"Abrir perfil de usuario\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"panelPerfilAbierto\"\n (click)=\"alternarPerfil()\"\n >\n <span class=\"td-header__avatar\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <span class=\"td-header__usuario\">\n <strong>{{ usuario }}</strong>\n @if (cargo) {\n <small>{{ cargo }}</small>\n }\n </span>\n <td-icon nombre=\"chevron_down\" tamano=\"0.85rem\" />\n </button>\n\n @if (panelPerfilAbierto) {\n <section class=\"td-header__panel td-header__panel--perfil\">\n <div class=\"td-header__perfil-resumen\">\n <span class=\"td-header__avatar td-header__avatar--grande\">\n @if (avatarUrl) {\n <img [src]=\"avatarUrl\" [alt]=\"usuario\" />\n } @else {\n {{ inicialesUsuario() }}\n }\n </span>\n <div>\n <strong>{{ usuario }}</strong>\n <small>{{ cargo || 'Usuario' }}</small>\n </div>\n </div>\n <div class=\"td-header__perfil-opciones\">\n @for (accion of accionesPerfilVisibles(); track accion.id) {\n <button\n type=\"button\"\n [class.td-header__salir]=\"accion.tono === 'danger'\"\n (click)=\"emitirAccionPerfil(accion)\"\n >\n @if (accion.icono) {\n <td-icon [nombre]=\"accion.icono\" />\n }\n <span>\n <strong>{{ accion.etiqueta }}</strong>\n @if (accion.descripcion) {\n <small>{{ accion.descripcion }}</small>\n }\n </span>\n </button>\n }\n </div>\n </section>\n }\n </div>\n }\n </div>\n</header>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\n\nlet inputSequence = 0;\ndeclare const ngDevMode: boolean | undefined;\n\nexport type TdInputValue = string | number | null;\nexport type TdInputEmptyValue = 'auto' | 'null' | 'empty-string';\nexport type TdInputSanitizePreset =\n | 'none'\n | 'digits'\n | 'letters'\n | 'alphanumeric'\n | 'decimal'\n | 'uppercase'\n | 'lowercase'\n | 'trim';\nexport type TdInputSanitize = TdInputSanitizePreset | readonly TdInputSanitizePreset[];\nexport type TdInputMask =\n | 'none'\n | 'time'\n | 'time-seconds'\n | 'decimal'\n | `decimal(${number},${number})`\n | `decimal(${number}.${number})`;\nexport type TdInputSanitizeFn = (value: string) => string;\n\n@Component({\n selector: 'td-input',\n imports: [TdIcon],\n template: `\n <div\n class=\"td-input\"\n [class.td-input--focused]=\"focused()\"\n [class.td-input--error]=\"hasError()\"\n [class.td-input--disabled]=\"isDisabled()\"\n [class.td-input--dark]=\"dark\"\n [class.td-input--floating]=\"labelFloating()\"\n [class.td-input--with-icon]=\"!!icon\"\n [class.td-input--with-prefix]=\"!!prefix\"\n >\n <label [for]=\"inputId\">{{ label }}</label>\n\n <div class=\"td-input__control\">\n @if (icon) {\n <td-icon class=\"td-input__icon\" [nombre]=\"icon\" />\n }\n\n @if (prefix) {\n <span class=\"td-input__affix td-input__affix--prefix\">{{ prefix }}</span>\n }\n\n <input\n #nativeInput\n [id]=\"inputId\"\n [name]=\"name()\"\n [type]=\"resolvedType\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [min]=\"minValue()\"\n [max]=\"maxValue()\"\n [step]=\"step\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.pattern]=\"resolvedPattern()\"\n [attr.inputmode]=\"resolvedInputMode()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n />\n\n @if (suffix) {\n <span class=\"td-input__affix td-input__affix--suffix\">{{ suffix }}</span>\n }\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-input__action\" title=\"Limpiar\" (click)=\"clear()\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n\n @if (type === 'password') {\n <button\n type=\"button\"\n class=\"td-input__action\"\n [title]=\"passwordVisible ? 'Ocultar contraseña' : 'Mostrar contraseña'\"\n (click)=\"passwordVisible = !passwordVisible\"\n >\n <td-icon [nombre]=\"passwordVisible ? 'visibility_off' : 'visibility'\" />\n </button>\n }\n </div>\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-input__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-input__message\"\n [class.td-input__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-input__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-input__counter\"\n [class.td-input__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdInput),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdInput\n implements ControlValueAccessor, FormValueControl<TdInputValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-input-${++inputSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n private decimalMaskDigits = '';\n\n @ViewChild('nativeInput') private nativeInput?: ElementRef<HTMLInputElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search' | 'date' | 'time' = 'text';\n @Input() placeholder = '';\n @Input() autocomplete = 'off';\n @Input() icon = '';\n @Input() prefix = '';\n @Input() suffix = '';\n @Input() hint = '';\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() clearable = false;\n @Input() dark = false;\n readonly showCounter = input(true);\n @Input() emptyValue: TdInputEmptyValue = 'auto';\n @Input() sanitize: TdInputSanitize = 'none';\n @Input() sanitizeValue: TdInputSanitizeFn | null = null;\n @Input() mask: TdInputMask = 'none';\n @Input() integerDigits: number | null = null;\n @Input() decimalDigits: number | null = null;\n readonly minValue = input<string | number | null | undefined>(undefined, {\n alias: 'min',\n });\n readonly maxValue = input<string | number | null | undefined>(undefined, {\n alias: 'max',\n });\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n readonly pattern = input<readonly RegExp[]>([]);\n @Input() step: string | number | null = null;\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdInputValue>('');\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && String(currentValue).length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue() || this.type === 'date' || this.type === 'time'\n );\n protected readonly resolvedPattern = computed(() => {\n const patterns = this.pattern();\n if (!patterns.length) return null;\n if (patterns.length === 1) return patterns[0].source;\n return patterns.map((item) => `(?=${item.source})`).join('') + '.*';\n });\n protected readonly resolvedInputMode = computed(() => {\n if (this.mask === 'time' || this.mask === 'time-seconds') return 'numeric';\n if (this.isDecimalMask()) return 'decimal';\n const presets = this.sanitizePresets();\n if (presets.includes('digits')) return 'numeric';\n if (presets.includes('decimal')) return 'decimal';\n return null;\n });\n protected readonly focused = signal(false);\n protected passwordVisible = false;\n\n protected get inputId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.inputId}-description` : null;\n }\n\n protected get resolvedType(): string {\n if (this.isDecimalMask()) return 'text';\n return this.type === 'password' && this.passwordVisible ? 'text' : this.type;\n }\n\n private onChange: (value: TdInputValue) => void = () => undefined;\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.decimalMaskDigits = '';\n this.value.set(null);\n } else if (\n this.type === 'number' &&\n this.formBridge.usesSignalForms &&\n typeof value === 'number'\n ) {\n this.decimalMaskDigits = this.isDecimalMask()\n ? this.decimalDigitsFromProgrammaticValue(String(value))\n : '';\n this.value.set(value);\n } else {\n const textValue = String(value);\n if (this.isDecimalMask()) {\n this.decimalMaskDigits = this.decimalDigitsFromProgrammaticValue(textValue);\n }\n this.value.set(this.transformTextValue(textValue));\n }\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdInputValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeInput?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n if (this.isDecimalMask()) {\n this.handleDecimalMaskInput(inputElement, event);\n return;\n }\n\n const transformedValue = this.transformTextValue(inputElement.value);\n if (inputElement.value !== transformedValue) {\n inputElement.value = transformedValue;\n }\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.completeMaskOnBlur();\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.decimalMaskDigits = '';\n this.setValue(this.resolveEmptyValue());\n }\n\n private parseInputValue(value: string, inputElement: HTMLInputElement): TdInputValue {\n if (!value) {\n return this.resolveEmptyValue();\n }\n\n if (this.isDecimalMask() || this.type !== 'number' || !this.formBridge.usesSignalForms) {\n return value;\n }\n\n const numericValue = inputElement.valueAsNumber;\n return Number.isNaN(numericValue) ? null : numericValue;\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n\n if (this.formBridge.usesSignalForms && this.type === 'number') return null;\n return this.receivedNullValue ? null : '';\n }\n\n private transformTextValue(value: string): string {\n if (!value) return value;\n const sanitized = this.applySanitize(value);\n return this.applyMask(sanitized);\n }\n\n private applySanitize(value: string): string {\n const customValue = this.sanitizeValue ? this.sanitizeValue(value) : value;\n return this.sanitizePresets().reduce(\n (current, preset) => this.applySanitizePreset(current, preset),\n customValue\n );\n }\n\n private sanitizePresets(): TdInputSanitizePreset[] {\n const sanitize = this.sanitize;\n return typeof sanitize === 'string' ? [sanitize] : [...sanitize];\n }\n\n private applySanitizePreset(value: string, preset: TdInputSanitizePreset): string {\n switch (preset) {\n case 'digits':\n return value.replace(/\\D/g, '');\n case 'letters':\n return value.replace(/[^\\p{L}\\s]/gu, '');\n case 'alphanumeric':\n return value.replace(/[^\\p{L}\\p{N}]/gu, '');\n case 'decimal':\n return this.sanitizeDecimal(value);\n case 'uppercase':\n return value.toUpperCase();\n case 'lowercase':\n return value.toLowerCase();\n case 'trim':\n return value.trim();\n default:\n return value;\n }\n }\n\n private sanitizeDecimal(value: string): string {\n const normalized = value.replace(',', '.').replace(/[^\\d.]/g, '');\n const [integerPart, ...decimalParts] = normalized.split('.');\n const integerValue = this.limitDigits(integerPart, this.integerDigits);\n if (!decimalParts.length) return integerValue;\n\n const decimalValue = this.limitDigits(decimalParts.join(''), this.decimalDigits);\n return decimalValue.length || normalized.endsWith('.')\n ? `${integerValue}.${decimalValue}`\n : integerValue;\n }\n\n private limitDigits(value: string, limit: number | null): string {\n if (limit === null || limit === undefined || limit < 0) return value;\n return value.slice(0, limit);\n }\n\n private applyMask(value: string): string {\n if (this.mask === 'time') return this.maskTime(value);\n if (this.mask === 'time-seconds') return this.maskTimeSeconds(value);\n if (this.isDecimalMask()) return this.maskDecimal(value);\n return value;\n }\n\n private maskDecimal(value: string): string {\n return this.formatDecimalMaskDigits(value.replace(/\\D/g, ''));\n }\n\n private handleDecimalMaskInput(inputElement: HTMLInputElement, event: Event): void {\n const inputEvent = event as InputEvent;\n const inputType = inputEvent.inputType || '';\n const dataDigits = (inputEvent.data ?? '').replace(/\\D/g, '');\n const maxDigits = this.maxDecimalMaskDigits();\n\n if (inputType.startsWith('delete')) {\n this.decimalMaskDigits = this.decimalMaskDigits.slice(0, -1);\n } else if (dataDigits) {\n this.decimalMaskDigits = this.limitDigits(this.decimalMaskDigits + dataDigits, maxDigits);\n } else {\n this.decimalMaskDigits = this.limitDigits(\n this.decimalDigitsFromEditedValue(inputElement.value),\n maxDigits\n );\n }\n\n const transformedValue = this.formatDecimalMaskDigits(this.decimalMaskDigits);\n inputElement.value = transformedValue;\n this.moveCaretToEnd(inputElement);\n this.setValue(this.parseInputValue(transformedValue, inputElement));\n }\n\n private formatDecimalMaskDigits(digitsValue: string): string {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n const digits = this.limitDigits(digitsValue.replace(/\\D/g, ''), this.maxDecimalMaskDigits());\n\n if (!digits) return '';\n if (scale === 0) return this.limitDigits(digits, integerLimit);\n\n const padded = digits.padStart(scale + 1, '0');\n const splitIndex = padded.length - scale;\n const integerPart = this.limitDigits(padded.slice(0, splitIndex), integerLimit);\n const decimalPart = padded.slice(splitIndex);\n\n return `${integerPart || '0'}.${decimalPart}`;\n }\n\n private maxDecimalMaskDigits(): number | null {\n const config = this.resolveDecimalMaskConfig();\n const scale = config.decimalDigits;\n const integerLimit = config.integerDigits;\n return integerLimit && integerLimit > 0 ? integerLimit + scale : null;\n }\n\n private decimalDigitsFromEditedValue(value: string): string {\n return value.replace(/\\D/g, '').replace(/^0+(?=\\d)/, '');\n }\n\n private decimalDigitsFromProgrammaticValue(value: string): string {\n return this.decimalDigitsFromEditedValue(value);\n }\n\n private moveCaretToEnd(inputElement: HTMLInputElement): void {\n queueMicrotask(() => {\n const end = inputElement.value.length;\n try {\n inputElement.setSelectionRange(end, end);\n } catch {\n // type=\"number\" no soporta setSelectionRange en algunos navegadores.\n }\n });\n }\n\n private isDecimalMask(): boolean {\n return this.mask === 'decimal' || this.mask.startsWith('decimal(');\n }\n\n private resolveDecimalMaskConfig(): { integerDigits: number | null; decimalDigits: number } {\n const parsed = this.parseDecimalMask();\n const integerDigits = this.integerDigits ?? parsed?.integerDigits ?? null;\n const decimalDigits = this.decimalDigits ?? parsed?.decimalDigits ?? 2;\n\n return {\n integerDigits: integerDigits !== null ? Math.max(0, Math.trunc(integerDigits)) : null,\n decimalDigits: Math.max(0, Math.trunc(decimalDigits)),\n };\n }\n\n private parseDecimalMask(): { integerDigits: number; decimalDigits: number } | null {\n if (!this.mask.startsWith('decimal(')) return null;\n\n const match = /^decimal\\((\\d+)[,.](\\d+)\\)$/.exec(this.mask.trim());\n if (!match) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[TdInput] Máscara decimal inválida: \"${this.mask}\". Usa decimal(enteros,decimales), por ejemplo decimal(10,2).`\n );\n }\n return null;\n }\n\n return {\n integerDigits: Number(match[1]),\n decimalDigits: Number(match[2]),\n };\n }\n\n private maskTime(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (digits.length <= 2) return digits;\n return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n }\n\n private maskTimeSeconds(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}:${digits.slice(2)}`;\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}:${digits.slice(4)}`;\n }\n\n private completeMaskOnBlur(): void {\n if (this.mask !== 'time' && this.mask !== 'time-seconds') return;\n const currentValue = String(this.value() ?? '');\n if (!currentValue) return;\n\n const completedValue = this.mask === 'time'\n ? this.completeTimeValue(currentValue)\n : this.completeTimeSecondsValue(currentValue);\n\n if (completedValue !== currentValue) {\n this.setValue(completedValue);\n if (this.nativeInput) {\n this.nativeInput.nativeElement.value = completedValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n private completeTimeValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 4);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}00`\n : digits.padEnd(4, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}`;\n }\n\n private completeTimeSecondsValue(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 6);\n if (!digits) return '';\n\n const padded = digits.length === 1\n ? `0${digits}0000`\n : digits.padEnd(6, '0');\n const hour = this.clampNumber(Number(padded.slice(0, 2)), 0, 23);\n const minute = this.clampNumber(Number(padded.slice(2, 4)), 0, 59);\n const second = this.clampNumber(Number(padded.slice(4, 6)), 0, 59);\n\n return `${this.padTimePart(hour)}:${this.padTimePart(minute)}:${this.padTimePart(second)}`;\n }\n\n private clampNumber(value: number, min: number, max: number): number {\n if (Number.isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n }\n\n private padTimePart(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n private setValue(value: TdInputValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n signal,\n ViewChild,\n booleanAttribute,\n computed,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\n\nlet textareaSequence = 0;\n\nexport type TdTextareaValue = string | null;\nexport type TdTextareaEmptyValue = 'auto' | 'null' | 'empty-string';\n\n@Component({\n selector: 'td-textarea',\n template: `\n <div\n class=\"td-textarea\"\n [class.td-textarea--focused]=\"focused()\"\n [class.td-textarea--error]=\"hasError()\"\n [class.td-textarea--disabled]=\"isDisabled()\"\n [class.td-textarea--dark]=\"dark\"\n [class.td-textarea--floating]=\"labelFloating()\"\n >\n <label [for]=\"textareaId\">{{ label }}</label>\n\n <textarea\n #nativeTextarea\n [id]=\"textareaId\"\n [name]=\"name()\"\n [value]=\"value() ?? ''\"\n [placeholder]=\"labelFloating() ? placeholder : ''\"\n [rows]=\"rows\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.minlength]=\"resolvedMinLength()\"\n [attr.maxlength]=\"resolvedMaxLength()\"\n [attr.aria-describedby]=\"descriptionId\"\n [attr.aria-invalid]=\"hasError()\"\n (input)=\"handleInput($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n ></textarea>\n\n @if (clearable && value() && !isDisabled() && !readonly()) {\n <button type=\"button\" class=\"td-textarea__clear\" title=\"Limpiar\" (click)=\"clear()\">\n ×\n </button>\n }\n </div>\n\n @if (hasSupportingContent()) {\n <div class=\"td-textarea__support\" [id]=\"descriptionId\">\n @if (displayError() || hint) {\n <p\n class=\"td-textarea__message\"\n [class.td-textarea__message--error]=\"hasError()\"\n >\n {{ displayError() || hint }}\n </p>\n } @else {\n <span class=\"td-textarea__message\" aria-hidden=\"true\"></span>\n }\n\n @if (counterVisible()) {\n <span\n class=\"td-textarea__counter\"\n [class.td-textarea__counter--limit]=\"counterAtLimit()\"\n >\n {{ currentLength() }}/{{ resolvedMaxLength() }}\n </span>\n }\n </div>\n }\n `,\n styleUrl: './td-textarea.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdTextarea),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTextarea\n implements AfterViewInit, ControlValueAccessor, FormValueControl<TdTextareaValue> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedId = `td-textarea-${++textareaSequence}`;\n private readonly legacyMinLength = signal<number | null>(null);\n private readonly legacyMaxLength = signal<number | null>(null);\n private receivedNullValue = false;\n\n @ViewChild('nativeTextarea') private nativeTextarea?: ElementRef<HTMLTextAreaElement>;\n\n @Input() id = '';\n @Input() label = 'Campo';\n @Input() placeholder = '';\n @Input() hint = '';\n @Input() rows = 4;\n @Input() dark = false;\n @Input() clearable = false;\n @Input() emptyValue: TdTextareaEmptyValue = 'auto';\n @Input({ transform: booleanAttribute }) autoResize = true;\n @Input() maxAutoRows: number | null = 10;\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n readonly showCounter = input(true);\n readonly minLength = input<number | undefined>(undefined);\n readonly maxLength = input<number | undefined>(undefined);\n\n @Input()\n set minlength(value: number | null) {\n this.legacyMinLength.set(value);\n }\n\n @Input()\n set maxlength(value: number | null) {\n this.legacyMaxLength.set(value);\n }\n\n readonly value = model<TdTextareaValue>('');\n protected readonly focused = signal(false);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected readonly resolvedMinLength = computed(\n () => this.minLength() ?? this.legacyMinLength()\n );\n protected readonly resolvedMaxLength = computed(\n () => this.maxLength() ?? this.legacyMaxLength()\n );\n protected readonly currentLength = computed(\n () => String(this.value() ?? '').length\n );\n protected readonly counterVisible = computed(\n () => this.showCounter() && this.resolvedMaxLength() !== null &&\n this.resolvedMaxLength() !== undefined\n );\n protected readonly counterAtLimit = computed(() => {\n const maxLength = this.resolvedMaxLength();\n return maxLength !== null && maxLength !== undefined &&\n this.currentLength() >= maxLength;\n });\n protected readonly hasSupportingContent = computed(\n () => !!this.displayError() || !!this.hint || this.counterVisible()\n );\n protected readonly hasValue = computed(() => {\n const currentValue = this.value();\n return currentValue !== null && currentValue !== undefined && currentValue.length > 0;\n });\n protected readonly labelFloating = computed(\n () => this.focused() || this.hasValue()\n );\n\n protected get textareaId(): string {\n return this.id || this.generatedId;\n }\n\n protected get descriptionId(): string | null {\n return this.hasSupportingContent() ? `${this.textareaId}-description` : null;\n }\n\n private onChange: (value: TdTextareaValue) => void = () => undefined;\n\n ngAfterViewInit(): void {\n this.resizeTextarea();\n }\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) {\n this.receivedNullValue = true;\n this.value.set(null);\n } else {\n this.value.set(String(value));\n }\n queueMicrotask(() => this.resizeTextarea());\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: TdTextareaValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.nativeTextarea?.nativeElement.focus(options);\n }\n\n protected handleInput(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.setValue(textarea.value ? textarea.value : this.resolveEmptyValue());\n this.resizeTextarea();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected clear(): void {\n this.setValue(this.resolveEmptyValue());\n if (this.nativeTextarea) {\n this.nativeTextarea.nativeElement.value = this.value() ?? '';\n }\n this.resizeTextarea();\n }\n\n private setValue(value: TdTextareaValue): void {\n this.value.set(value);\n this.onChange(value);\n }\n\n private resolveEmptyValue(): string | null {\n if (this.emptyValue === 'null') return null;\n if (this.emptyValue === 'empty-string') return '';\n return this.receivedNullValue ? null : '';\n }\n\n private resizeTextarea(): void {\n if (!this.autoResize || !this.nativeTextarea) return;\n\n const textarea = this.nativeTextarea.nativeElement;\n textarea.style.height = 'auto';\n\n const lineHeight = Number.parseFloat(getComputedStyle(textarea).lineHeight || '20');\n const maxHeight = this.maxAutoRows && this.maxAutoRows > 0\n ? lineHeight * this.maxAutoRows\n : Number.POSITIVE_INFINITY;\n const nextHeight = Math.min(textarea.scrollHeight, maxHeight);\n\n textarea.style.height = `${nextHeight}px`;\n textarea.style.overflowY = textarea.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n booleanAttribute,\n inject,\n signal,\n} from '@angular/core';\n\n@Directive({\n selector: '[tdLayoutHeader]',\n})\nexport class TdLayoutHeaderSlot {}\n\n@Directive({\n selector: '[tdLayoutSidebar]',\n})\nexport class TdLayoutSidebarSlot {}\n\n@Directive({\n selector: '[tdLayoutContent]',\n})\nexport class TdLayoutContentSlot {}\n\n@Directive({\n selector: '[tdLayoutFooter]',\n})\nexport class TdLayoutFooterSlot {}\n\nexport type TdLayoutSidebarPlacement = 'auto' | 'inline' | 'overlay';\nexport type TdLayoutSectionSpan = 'content' | 'full';\nexport type TdLayoutMobileSidebarStyle = 'panel' | 'card';\n\n@Component({\n selector: 'td-layout, td-shell',\n template: `\n <div\n class=\"td-layout\"\n [class.td-layout--viewport]=\"fillViewport\"\n [class.td-layout--mobile]=\"mobile()\"\n [class.td-layout--has-header]=\"hasHeader\"\n [class.td-layout--sidebar]=\"hasSidebar\"\n [class.td-layout--sidebar-overlay]=\"sidebarAsOverlay()\"\n [class.td-layout--sidebar-open]=\"sidebarOpen\"\n [class.td-layout--header-full]=\"headerFullWidth()\"\n [class.td-layout--footer-full]=\"footerFullWidth()\"\n [class.td-layout--mobile-sidebar-card]=\"mobileSidebarStyle === 'card'\"\n [class.td-layout--mobile-sidebar-panel]=\"mobileSidebarStyle !== 'card'\"\n >\n <div class=\"td-layout__body\">\n @if (hasSidebar && sidebarAsOverlay() && sidebarOpen && closeSidebarOnBackdrop) {\n <button\n type=\"button\"\n class=\"td-layout__backdrop\"\n aria-label=\"Cerrar navegación\"\n (pointerdown)=\"closeSidebar()\"\n (click)=\"closeSidebar()\"\n ></button>\n }\n\n @if (hasHeader) {\n <div #headerHost class=\"td-layout__header\">\n <ng-content select=\"[tdLayoutHeader]\"></ng-content>\n </div>\n }\n\n @if (hasSidebar) {\n <aside #sidebarHost class=\"td-layout__sidebar\" [attr.aria-hidden]=\"sidebarAsOverlay() && !sidebarOpen\">\n <ng-content select=\"[tdLayoutSidebar]\"></ng-content>\n </aside>\n }\n\n <main class=\"td-layout__content\">\n <ng-content select=\"[tdLayoutContent]\"></ng-content>\n <ng-content></ng-content>\n </main>\n\n @if (hasFooter) {\n <div class=\"td-layout__footer\">\n <ng-content select=\"[tdLayoutFooter]\"></ng-content>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './td-layout.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdLayout implements AfterContentInit, AfterViewInit, OnDestroy {\n @ContentChild(TdLayoutHeaderSlot) private readonly headerSlot?: TdLayoutHeaderSlot;\n @ContentChild(TdLayoutSidebarSlot) private readonly sidebarSlot?: TdLayoutSidebarSlot;\n @ContentChild(TdLayoutFooterSlot) private readonly footerSlot?: TdLayoutFooterSlot;\n @ViewChild('headerHost', { read: ElementRef }) private readonly headerHost?: ElementRef<HTMLElement>;\n @ViewChild('sidebarHost', { read: ElementRef }) private readonly sidebarHost?: ElementRef<HTMLElement>;\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly sidebarOpenState = signal(true);\n protected readonly mobile = signal(false);\n private resizeObserver?: ResizeObserver;\n\n @Input({ transform: booleanAttribute }) fillViewport = true;\n @Input({ transform: booleanAttribute }) closeSidebarOnBackdrop = true;\n @Input() mobileBreakpoint = 960;\n @Input() sidebarPlacement: TdLayoutSidebarPlacement = 'auto';\n @Input() headerSpan: TdLayoutSectionSpan = 'content';\n @Input() footerSpan: TdLayoutSectionSpan = 'content';\n @Input() mobileSidebarStyle: TdLayoutMobileSidebarStyle = 'panel';\n\n @Input()\n set sidebarOpen(value: boolean) {\n this.sidebarOpenState.set(value);\n }\n get sidebarOpen(): boolean {\n return this.sidebarOpenState();\n }\n\n @Output() readonly sidebarOpenChange = new EventEmitter<boolean>();\n\n get hasHeader(): boolean {\n return !!this.headerSlot;\n }\n\n get hasSidebar(): boolean {\n return !!this.sidebarSlot;\n }\n\n get hasFooter(): boolean {\n return !!this.footerSlot;\n }\n\n ngAfterContentInit(): void {\n this.syncViewport();\n }\n\n ngAfterViewInit(): void {\n this.updateHeaderOffset();\n\n const header = this.headerHost?.nativeElement;\n if (!header || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.resizeObserver = new ResizeObserver(() => this.updateHeaderOffset());\n this.resizeObserver.observe(header);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n @HostListener('window:resize')\n protected syncViewport(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n this.mobile.set(window.innerWidth <= this.mobileBreakpoint);\n this.updateHeaderOffset();\n }\n\n @HostListener('window:scroll')\n protected syncOverlayPosition(): void {\n this.updateHeaderOffset();\n }\n\n @HostListener('document:pointerdown', ['$event'])\n protected handlePointerDownOutside(event: PointerEvent): void {\n if (!this.closeSidebarOnBackdrop || !this.sidebarOpen || !this.sidebarAsOverlay()) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof Node)) {\n return;\n }\n\n const sidebar = this.sidebarHost?.nativeElement;\n const header = this.headerHost?.nativeElement;\n\n if (sidebar?.contains(target) || header?.contains(target)) {\n return;\n }\n\n this.closeSidebar();\n }\n\n protected sidebarAsOverlay(): boolean {\n if (this.sidebarPlacement === 'overlay') {\n return true;\n }\n\n if (this.sidebarPlacement === 'inline') {\n return false;\n }\n\n return this.mobile();\n }\n\n protected headerFullWidth(): boolean {\n if (this.mobile()) {\n return true;\n }\n\n return this.headerSpan === 'full';\n }\n\n protected footerFullWidth(): boolean {\n if (this.mobile()) {\n return false;\n }\n\n return this.footerSpan === 'full';\n }\n\n public openSidebar(): void {\n this.setSidebarOpen(true);\n }\n\n public closeSidebar(): void {\n this.setSidebarOpen(false);\n }\n\n public toggleSidebar(): void {\n this.setSidebarOpen(!this.sidebarOpen);\n }\n\n private updateHeaderOffset(): void {\n const host = this.hostRef.nativeElement;\n const header = this.headerHost?.nativeElement;\n const headerHeight = header?.offsetHeight ?? 0;\n const viewportOffset = header ? Math.max(header.getBoundingClientRect().bottom, 0) : headerHeight;\n host.style.setProperty('--td-layout-mobile-header-size', `${headerHeight}px`);\n host.style.setProperty('--td-layout-mobile-header-offset', `${viewportOffset}px`);\n }\n\n private setSidebarOpen(value: boolean): void {\n if (this.sidebarOpen === value) {\n return;\n }\n\n this.sidebarOpenState.set(value);\n this.sidebarOpenChange.emit(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport { TdRadioDirection, TdRadioOption, TdRadioVariant } from './td-radio.model';\n\nlet radioSequence = 0;\n\n@Component({\n selector: 'td-radio-group',\n imports: [TdIcon],\n templateUrl: './td-radio-group.html',\n styleUrl: './td-radio-group.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdRadioGroup),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdRadioGroup<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly generatedName = `td-radio-${++radioSequence}`;\n\n @Input() options: TdRadioOption<T>[] = [];\n @Input() label = '';\n @Input() hint = '';\n @Input() dark = false;\n @Input() direction: TdRadioDirection = 'vertical';\n @Input() variant: TdRadioVariant = 'default';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n\n readonly value = model<T | null>(null);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n\n private onChange: (value: T | null) => void = () => undefined;\n\n protected get groupName(): string {\n return this.name() || this.generatedName;\n }\n\n protected get messageId(): string | null {\n return this.displayError() || this.hint ? `${this.groupName}-message` : null;\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n protected isSelected(option: TdRadioOption<T>): boolean {\n return this.compareWith(option.value, this.value());\n }\n\n protected optionId(index: number): string {\n return `${this.groupName}-${index}`;\n }\n\n protected select(option: TdRadioOption<T>): void {\n if (this.isDisabled() || this.readonly() || option.disabled) return;\n if (this.isSelected(option)) {\n this.markTouched();\n return;\n }\n\n this.value.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option.value);\n this.markTouched();\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent, index: number): void {\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft', 'Home', 'End'].includes(event.key)) {\n return;\n }\n\n event.preventDefault();\n const enabled = this.options\n .map((option, optionIndex) => ({ option, optionIndex }))\n .filter((item) => !item.option.disabled);\n\n if (!enabled.length) return;\n\n const currentPosition = enabled.findIndex((item) => item.optionIndex === index);\n let nextPosition = currentPosition;\n\n if (event.key === 'Home') nextPosition = 0;\n if (event.key === 'End') nextPosition = enabled.length - 1;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextPosition = (currentPosition + 1 + enabled.length) % enabled.length;\n }\n if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n nextPosition = (currentPosition - 1 + enabled.length) % enabled.length;\n }\n\n const next = enabled[nextPosition];\n if (!next) return;\n this.select(next.option);\n queueMicrotask(() => document.getElementById(this.optionId(next.optionIndex))?.focus());\n }\n\n protected markTouched(): void {\n this.formBridge.markTouched(this.touched, this.touch);\n }\n}\n","<div\n class=\"td-radio\"\n [class.td-radio--horizontal]=\"direction === 'horizontal'\"\n [class.td-radio--card]=\"variant === 'card'\"\n [class.td-radio--disabled]=\"isDisabled()\"\n [class.td-radio--readonly]=\"readonly()\"\n [class.td-radio--error]=\"hasError()\"\n [class.td-radio--dark]=\"dark\"\n role=\"radiogroup\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"messageId\"\n>\n @if (label) {\n <span class=\"td-radio__legend\">{{ label }}</span>\n }\n\n <div class=\"td-radio__options\">\n @for (option of options; track option.value; let index = $index) {\n <label\n class=\"td-radio__option\"\n [class.td-radio__option--selected]=\"isSelected(option)\"\n [class.td-radio__option--disabled]=\"option.disabled || isDisabled()\"\n [for]=\"optionId(index)\"\n >\n <input\n [id]=\"optionId(index)\"\n type=\"radio\"\n [name]=\"groupName\"\n [checked]=\"isSelected(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n [required]=\"required()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-invalid]=\"hasError()\"\n (change)=\"select(option)\"\n (blur)=\"markTouched()\"\n (keydown)=\"handleKeydown($event, index)\"\n />\n\n <span class=\"td-radio__control\" aria-hidden=\"true\"></span>\n\n @if (option.icon) {\n <span class=\"td-radio__icon\">\n <td-icon [nombre]=\"option.icon\" />\n </span>\n }\n\n <span class=\"td-radio__content\">\n <span class=\"td-radio__label\">{{ option.label }}</span>\n @if (option.description) {\n <span class=\"td-radio__description\">{{ option.description }}</span>\n }\n </span>\n </label>\n }\n </div>\n</div>\n\n@if (displayError() || hint) {\n <p\n class=\"td-radio__message\"\n [class.td-radio__message--error]=\"hasError()\"\n [id]=\"messageId\"\n >\n {{ displayError() || hint }}\n </p>\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n effect,\n forwardRef,\n inject,\n input,\n Input,\n model,\n OnChanges,\n output,\n Output,\n signal,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet autocompleteSequence = 0;\n\n@Component({\n selector: 'td-autocomplete-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select td-select--autocomplete\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--floating]=\"labelFloating\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [for]=\"inputId\">{{ label }}</label>\n }\n <div class=\"td-select__trigger\">\n <td-icon class=\"td-select__leading\" nombre=\"search\" />\n <input\n #searchInput\n [id]=\"inputId\"\n type=\"search\"\n autocomplete=\"off\"\n role=\"combobox\"\n [value]=\"search\"\n [placeholder]=\"labelFloating || !hasVisibleLabel ? placeholder : ''\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (focus)=\"handleFocus()\"\n (input)=\"handleInput($event)\"\n (keydown)=\"handleKeydown($event)\"\n (blur)=\"handleBlur()\"\n />\n @if (clearable && (value() !== null || search) && !isDisabled()) {\n <button type=\"button\" class=\"td-select__clear\" title=\"Limpiar\" (click)=\"clear($event)\">\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!filteredOptions.length) {\n <div class=\"td-select-panel__empty-state\">\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n @if (emptyActionDescription) {\n <small class=\"td-select-panel__empty-description\">{{ emptyActionDescription }}</small>\n }\n @if (shouldShowEmptyAction) {\n <button\n type=\"button\"\n class=\"td-select-panel__empty-action td-select-panel__empty-action--option\"\n [disabled]=\"isDisabled()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"emitEmptyAction($event)\"\n >\n @if (emptyActionIcon) {\n <td-icon [nombre]=\"emptyActionIcon\" />\n }\n <span>{{ emptyActionText }}</span>\n </button>\n }\n </div>\n }\n @for (option of filteredOptions; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdAutocompleteSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdAutocompleteSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null>, OnChanges {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-autocomplete-${++autocompleteSequence}`;\n private rawOptions: readonly unknown[] = [];\n private normalizedOptions: TdSelectOption<T>[] = [];\n\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Buscar y seleccionar';\n @Input() placeholder = 'Escribe para buscar...';\n @Input()\n set options(value: readonly unknown[] | null | undefined) {\n this.rawOptions = value ?? [];\n this.normalizedOptions = this.normalizeOptions(this.rawOptions);\n this.syncSearchWithValue();\n }\n get options(): TdSelectOption<T>[] {\n return this.normalizedOptions;\n }\n @Input() hint = '';\n @Input() hideLabel = false;\n @Input() valueKey: string | ((option: unknown) => T | null) | null = null;\n @Input() labelKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() descriptionKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() iconKey: string | ((option: unknown) => string | null | undefined) | null = null;\n @Input() disabledKey: string | ((option: unknown) => boolean | null | undefined) | null = null;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No se encontraron resultados';\n @Input() emptyActionText = '';\n @Input() emptyActionDescription = '';\n @Input() emptyActionIcon = 'add';\n @Input() clearable = true;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() minimumCharacters = 0;\n @Input() filterWith: (option: TdSelectOption<T>, search: string) => boolean =\n (option, search) =>\n `${option.label} ${option.description ?? ''}`.toLocaleLowerCase().includes(search);\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly searchChange = new EventEmitter<string>();\n @Output() readonly emptyAction = new EventEmitter<string>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected search = '';\n protected open = false;\n protected activeIndex = -1;\n protected readonly focused = signal(false);\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get inputId(): string {\n return `${this.generatedId}-input`;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get filteredOptions(): TdSelectOption<T>[] {\n const normalized = this.search.trim().toLocaleLowerCase();\n if (normalized.length < this.minimumCharacters) return [];\n return this.options.filter((option) => this.filterWith(option, normalized));\n }\n\n protected get shouldShowEmptyAction(): boolean {\n return !!this.emptyActionText.trim() && !!this.search.trim();\n }\n\n protected get labelFloating(): boolean {\n return (\n this.hasVisibleLabel &&\n (this.focused() || this.open || !!this.search.trim() || this.value() !== null)\n );\n }\n\n private changed: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n\n effect(() => {\n this.value();\n this.syncSearchWithValue();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['valueKey'] ||\n changes['labelKey'] ||\n changes['descriptionKey'] ||\n changes['iconKey'] ||\n changes['disabledKey']\n ) {\n this.normalizedOptions = this.normalizeOptions(this.rawOptions);\n }\n\n if (\n changes['valueKey'] ||\n changes['labelKey'] ||\n changes['descriptionKey'] ||\n changes['iconKey'] ||\n changes['disabledKey'] ||\n changes['compareWith']\n ) {\n this.syncSearchWithValue();\n }\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.syncSearchWithValue();\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.changed = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.searchInput?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open = true;\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n protected handleFocus(): void {\n this.focused.set(true);\n this.openPanel();\n }\n\n protected handleBlur(): void {\n this.focused.set(false);\n if (!this.search.trim() && this.value() === null) {\n this.close();\n }\n this.formBridge.markTouched(this.touched, this.touch);\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.syncSearchWithValue();\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected emitEmptyAction(event: MouseEvent): void {\n event.stopPropagation();\n const currentSearch = this.search.trim();\n this.close();\n this.emptyAction.emit(currentSearch);\n }\n\n protected handleInput(event: Event): void {\n this.search = (event.target as HTMLInputElement).value;\n this.value.set(null);\n this.changed(null);\n this.searchChange.emit(this.search);\n this.openPanel();\n this.activeIndex = this.firstEnabledIndex();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.value.set(option.value);\n this.search = option.label;\n this.changed(option.value);\n this.selectionChange.emit(option.value);\n this.close();\n this.cdr.markForCheck();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n this.search = '';\n this.changed(null);\n this.selectionChange.emit(null);\n this.searchChange.emit('');\n this.openPanel();\n queueMicrotask(() => this.searchInput?.nativeElement.focus());\n this.cdr.markForCheck();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n } else if (event.key === 'Enter' && this.open && this.activeIndex >= 0) {\n event.preventDefault();\n const option = this.filteredOptions[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private moveActive(direction: number): void {\n const options = this.filteredOptions;\n if (!options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < options.length; index++) {\n next = (next + direction + options.length) % options.length;\n if (!options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.filteredOptions.findIndex((option) => !option.disabled);\n }\n\n private syncSearchWithValue(): void {\n const currentValue = this.value();\n\n if (currentValue === null) {\n if (!this.focused() && !this.open) {\n this.search = '';\n }\n this.cdr.markForCheck();\n return;\n }\n\n const selected = this.options.find((option) => this.compare(option.value, currentValue));\n if (selected) {\n this.search = selected.label;\n }\n\n this.cdr.markForCheck();\n }\n\n private normalizeOptions(options: readonly unknown[]): TdSelectOption<T>[] {\n return options.map((option) => this.normalizeOption(option));\n }\n\n private normalizeOption(option: unknown): TdSelectOption<T> {\n if (this.isSelectOption(option) && !this.valueKey && !this.labelKey) {\n return option as TdSelectOption<T>;\n }\n\n const value = this.valueKey ? this.readOptionValue(option, this.valueKey) : this.readOptionValue(option, 'value');\n const label = this.labelKey ? this.readOptionText(option, this.labelKey) : this.readOptionText(option, 'label');\n const description = this.descriptionKey\n ? this.readOptionText(option, this.descriptionKey)\n : this.readOptionText(option, 'description');\n const icon = this.iconKey ? this.readOptionText(option, this.iconKey) : this.readOptionText(option, 'icon');\n const disabled = this.disabledKey\n ? !!this.readOptionUnknown(option, this.disabledKey)\n : !!this.readOptionUnknown(option, 'disabled');\n\n return {\n value,\n label: label || this.fallbackOptionLabel(option, value),\n ...(description ? { description } : {}),\n ...(icon ? { icon } : {}),\n ...(disabled ? { disabled } : {}),\n };\n }\n\n private isSelectOption(option: unknown): option is TdSelectOption<T> {\n if (!option || typeof option !== 'object') return false;\n return 'value' in option && 'label' in option;\n }\n\n private readOptionValue(\n option: unknown,\n accessor: string | ((option: unknown) => T | null)\n ): T {\n if (typeof accessor === 'function') {\n return accessor(option) as T;\n }\n\n return this.readPath(option, accessor) as T;\n }\n\n private readOptionText(\n option: unknown,\n accessor: string | ((option: unknown) => string | null | undefined)\n ): string {\n const value = typeof accessor === 'function' ? accessor(option) : this.readPath(option, accessor);\n return value === null || value === undefined ? '' : String(value);\n }\n\n private readOptionUnknown(\n option: unknown,\n accessor: string | ((option: unknown) => unknown)\n ): unknown {\n return typeof accessor === 'function' ? accessor(option) : this.readPath(option, accessor);\n }\n\n private readPath(source: unknown, path: string): unknown {\n if (!path.trim()) return undefined;\n return path.split('.').reduce<unknown>((current, key) => {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[key];\n }, source);\n }\n\n private fallbackOptionLabel(option: unknown, value: T): string {\n if (typeof option === 'string' || typeof option === 'number' || typeof option === 'boolean') {\n return String(option);\n }\n\n if (value !== null && value !== undefined) {\n return String(value);\n }\n\n return '';\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n ScrollStrategy,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n model,\n output,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n DisabledReason,\n FormValueControl,\n ValidationError,\n WithOptionalFieldTree,\n} from '@angular/forms/signals';\nimport { createTdFormControlBridge, TdErrorDisplay } from '../form-control';\nimport { TdIcon } from '../iconos';\nimport {\n TdSelectOption,\n TdSelectAppearance,\n TdSelectOverflowText,\n TdSelectScrollBehavior,\n} from './td-select.model';\n\nlet selectSequence = 0;\n\n@Component({\n selector: 'td-select',\n imports: [CdkConnectedOverlay, CdkOverlayOrigin, TdIcon],\n template: `\n <div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n class=\"td-select\"\n [class.td-select--open]=\"open\"\n [class.td-select--error]=\"hasError()\"\n [class.td-select--disabled]=\"isDisabled()\"\n [class.td-select--dark]=\"dark\"\n [class.td-select--filled]=\"appearance === 'filled'\"\n [class.td-select--standard]=\"appearance === 'standard'\"\n [class.td-select--no-label]=\"!hasVisibleLabel\"\n >\n @if (hasVisibleLabel) {\n <label [id]=\"labelId\">{{ label }}</label>\n }\n <div\n #trigger\n class=\"td-select__trigger\"\n role=\"combobox\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-readonly]=\"readonly()\"\n [attr.aria-required]=\"required()\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-labelledby]=\"hasVisibleLabel ? labelId : null\"\n [attr.aria-label]=\"hasVisibleLabel ? null : accessibleLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"listId\"\n (click)=\"toggle()\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (selectedOption?.icon) {\n <td-icon class=\"td-select__leading\" [nombre]=\"selectedOption!.icon!\" />\n }\n <span [class.td-select__placeholder]=\"!selectedOption\">\n {{ selectedOption?.label || placeholder }}\n </span>\n @if (clearable && selectedOption && !isDisabled()) {\n <button\n type=\"button\"\n class=\"td-select__clear\"\n title=\"Limpiar selección\"\n (click)=\"clear($event)\"\n >\n <td-icon nombre=\"close\" tamano=\".95rem\" />\n </button>\n }\n <td-icon\n class=\"td-select__chevron\"\n [class.td-select__chevron--open]=\"open\"\n nombre=\"chevron_down\"\n />\n </div>\n </div>\n\n @if (displayError() || hint) {\n <p class=\"td-select__message\" [class.td-select__message--error]=\"hasError()\">\n {{ displayError() || hint }}\n </p>\n }\n\n <ng-template\n cdkConnectedOverlay\n #connectedOverlay=\"cdkConnectedOverlay\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayMatchWidth]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"12\"\n [cdkConnectedOverlayPush]=\"false\"\n (attach)=\"onOverlayAttached()\"\n (overlayOutsideClick)=\"close()\"\n (overlayKeydown)=\"handleOverlayKeydown($event)\"\n (detach)=\"close()\"\n >\n <div\n #panel\n class=\"td-select-panel\"\n [class.td-select-panel--dark]=\"dark\"\n [class.td-select-panel--wrap]=\"overflowText === 'wrap'\"\n [class.td-select-panel--marquee]=\"overflowText === 'marquee'\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @if (!options.length) {\n <div class=\"td-select-panel__empty-state\">\n <p class=\"td-select-panel__empty\">{{ emptyText }}</p>\n @if (emptyActionDescription) {\n <small class=\"td-select-panel__empty-description\">{{ emptyActionDescription }}</small>\n }\n @if (emptyActionText) {\n <button\n type=\"button\"\n class=\"td-select-panel__empty-action td-select-panel__empty-action--option\"\n [disabled]=\"isDisabled()\"\n (click)=\"emitEmptyAction($event)\"\n >\n @if (emptyActionIcon) {\n <td-icon [nombre]=\"emptyActionIcon\" />\n }\n <span>{{ emptyActionText }}</span>\n </button>\n }\n </div>\n }\n @for (option of options; track option.value; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n [class.td-select-panel__option--active]=\"index === activeIndex\"\n [class.td-select-panel__option--selected]=\"compare(option.value, value())\"\n [attr.aria-selected]=\"compare(option.value, value())\"\n [disabled]=\"option.disabled\"\n (click)=\"select(option)\"\n >\n @if (option.icon) {\n <td-icon [nombre]=\"option.icon\" />\n }\n <span>\n <strong>{{ option.label }}</strong>\n @if (option.description) {\n <small>{{ option.description }}</small>\n }\n </span>\n @if (compare(option.value, value())) {\n <td-icon class=\"td-select-panel__check\" nombre=\"check\" />\n }\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './td-select.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TdSelect),\n multi: true,\n },\n ],\n host: {\n '[hidden]': 'hidden()',\n '[attr.aria-busy]': 'pending() ? \"true\" : null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSelect<T = unknown>\n implements ControlValueAccessor, FormValueControl<T | null> {\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly formBridge = createTdFormControlBridge();\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly scrollStrategies = inject(ScrollStrategyOptions);\n private readonly generatedId = `td-select-${++selectSequence}`;\n\n @ViewChild(CdkConnectedOverlay) private connectedOverlay?: CdkConnectedOverlay;\n @ViewChild('trigger') private trigger?: ElementRef<HTMLElement>;\n @ViewChild('panel') private panel?: ElementRef<HTMLElement>;\n\n @Input() label = 'Seleccionar';\n @Input() placeholder = 'Selecciona una opción';\n @Input() options: TdSelectOption<T>[] = [];\n @Input() hint = '';\n @Input() hideLabel = false;\n readonly name = input('');\n readonly disabled = input(false);\n readonly disabledReasons =\n input<readonly WithOptionalFieldTree<DisabledReason>[]>([]);\n readonly readonly = input(false);\n readonly hidden = input(false);\n readonly invalid = input(false);\n readonly pending = input(false);\n readonly dirty = input(false);\n readonly required = input(false);\n readonly errors =\n input<readonly WithOptionalFieldTree<ValidationError>[]>([]);\n readonly touched = model(false);\n readonly touch = output<void>();\n readonly error = input('');\n readonly errorDisplay = input<TdErrorDisplay>('auto');\n @Input() emptyText = 'No hay opciones disponibles';\n @Input() emptyActionText = '';\n @Input() emptyActionDescription = '';\n @Input() emptyActionIcon = 'add';\n @Input() clearable = false;\n @Input() dark = false;\n @Input() scrollBehavior: TdSelectScrollBehavior = 'reposition';\n @Input() overflowText: TdSelectOverflowText = 'marquee';\n @Input() appearance: TdSelectAppearance = 'outline';\n @Input() compareWith: (first: T | null, second: T | null) => boolean =\n (first, second) => Object.is(first, second);\n\n @Output() readonly selectionChange = new EventEmitter<T | null>();\n @Output() readonly emptyAction = new EventEmitter<void>();\n\n readonly value = model<T | null>(null);\n protected readonly isDisabled = computed(() =>\n this.formBridge.isDisabled(this.disabled())\n );\n protected readonly fieldError = computed(() => this.errors()[0]?.message || '');\n protected readonly shouldDisplayFieldError = computed(() =>\n this.formBridge.shouldDisplayError(\n this.errorDisplay(),\n this.invalid(),\n !!this.fieldError(),\n this.touched(),\n this.dirty()\n )\n );\n protected readonly displayError = computed(() =>\n this.error() || (this.shouldDisplayFieldError() ? this.fieldError() : '')\n );\n protected readonly hasError = computed(() =>\n !!this.error() || this.shouldDisplayFieldError()\n );\n protected open = false;\n protected activeIndex = -1;\n protected readonly scrollStrategy: ScrollStrategy = this.scrollStrategies.reposition();\n protected readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n protected get labelId(): string {\n return `${this.generatedId}-label`;\n }\n\n protected get hasVisibleLabel(): boolean {\n return !this.hideLabel && !!this.label.trim();\n }\n\n protected get accessibleLabel(): string {\n return this.label.trim() || this.placeholder;\n }\n\n protected get listId(): string {\n return `${this.generatedId}-list`;\n }\n\n protected get selectedOption(): TdSelectOption<T> | undefined {\n return this.options.find((option) => this.compare(option.value, this.value()));\n }\n\n private onChange: (value: T | null) => void = () => undefined;\n\n constructor() {\n const scrollListener = (event: Event): void => {\n const target = event.target;\n if (target instanceof Element && target.closest('.td-select-panel')) return;\n if (this.open) {\n if (this.scrollBehavior === 'close') {\n this.close();\n } else {\n this.connectedOverlay?.overlayRef?.updatePosition();\n }\n this.cdr.markForCheck();\n }\n };\n\n this.document.addEventListener('scroll', scrollListener, true);\n this.destroyRef.onDestroy(() =>\n this.document.removeEventListener('scroll', scrollListener, true)\n );\n }\n\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.formBridge.registerOnTouched(fn);\n }\n\n setDisabledState(disabled: boolean): void {\n this.formBridge.setDisabledState(disabled);\n }\n\n focus(options?: FocusOptions): void {\n this.trigger?.nativeElement.focus(options);\n }\n\n protected compare(first: T | null, second: T | null): boolean {\n return this.compareWith(first, second);\n }\n\n protected toggle(): void {\n if (this.isDisabled() || this.readonly()) return;\n this.open ? this.close() : this.openPanel();\n }\n\n protected close(): void {\n if (!this.open) return;\n this.open = false;\n this.formBridge.markTouched(this.touched, this.touch);\n this.cdr.markForCheck();\n }\n\n protected select(option: TdSelectOption<T>): void {\n if (option.disabled) return;\n this.setValue(option.value);\n this.close();\n }\n\n protected clear(event: MouseEvent): void {\n event.stopPropagation();\n this.setValue(null);\n }\n\n protected emitEmptyAction(event: MouseEvent): void {\n event.stopPropagation();\n this.close();\n this.emptyAction.emit();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n return;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(1);\n }\n return;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n } else {\n this.moveActive(-1);\n }\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.open) {\n this.openPanel();\n return;\n }\n\n const option = this.options[this.activeIndex];\n if (option) this.select(option);\n }\n }\n\n protected handleOverlayKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n private openPanel(): void {\n this.open = true;\n const selectedIndex = this.options.findIndex((option) =>\n this.compare(option.value, this.value())\n );\n this.activeIndex = selectedIndex >= 0 ? selectedIndex : this.firstEnabledIndex();\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n this.cdr.markForCheck();\n }\n\n protected onOverlayAttached(): void {\n this.scheduleOverlayPositionUpdate();\n this.scheduleOverflowTextMeasurement();\n }\n\n private moveActive(direction: number): void {\n if (!this.options.length) return;\n let next = this.activeIndex;\n for (let index = 0; index < this.options.length; index++) {\n next = (next + direction + this.options.length) % this.options.length;\n if (!this.options[next]?.disabled) {\n this.activeIndex = next;\n this.scrollActiveOptionIntoView();\n return;\n }\n }\n }\n\n private firstEnabledIndex(): number {\n return this.options.findIndex((option) => !option.disabled);\n }\n\n private setValue(value: T | null): void {\n this.value.set(value);\n this.onChange(value);\n this.selectionChange.emit(value);\n this.cdr.markForCheck();\n }\n\n private scrollActiveOptionIntoView(): void {\n const panel = this.panel?.nativeElement;\n if (!panel || this.activeIndex < 0) return;\n const options = panel.querySelectorAll<HTMLButtonElement>('button[role=\"option\"]');\n options[this.activeIndex]?.scrollIntoView({ block: 'nearest' });\n }\n\n private scheduleOverlayPositionUpdate(): void {\n const win = this.document.defaultView;\n if (!win) {\n queueMicrotask(() => this.connectedOverlay?.overlayRef?.updatePosition());\n return;\n }\n\n win.requestAnimationFrame(() => {\n this.connectedOverlay?.overlayRef?.updatePosition();\n win.requestAnimationFrame(() => this.connectedOverlay?.overlayRef?.updatePosition());\n });\n }\n\n private scheduleOverflowTextMeasurement(): void {\n const win = this.document.defaultView;\n if (this.overflowText === 'wrap' || !win) return;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => this.measureOverflowText());\n });\n }\n\n private measureOverflowText(): void {\n if (this.overflowText === 'wrap') return;\n const panel = this.panel?.nativeElement;\n if (!panel) return;\n\n panel\n .querySelectorAll<HTMLButtonElement>('button[role=\"option\"]')\n .forEach((button) => {\n let optionOverflows = false;\n\n button.querySelectorAll<HTMLElement>('strong, small').forEach((element) => {\n element.classList.remove('td-select-panel__text--overflow');\n element.style.removeProperty('--td-select-marquee-window');\n\n const width = element.clientWidth;\n const overflows = element.scrollWidth > width + 1;\n optionOverflows ||= overflows;\n\n if (overflows && this.overflowText === 'marquee') {\n element.classList.add('td-select-panel__text--overflow');\n element.style.setProperty('--td-select-marquee-window', `${width}px`);\n }\n });\n\n if (optionOverflows) {\n button.title = button.innerText.trim();\n } else {\n button.removeAttribute('title');\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { NavigationEnd, Router, RouterLink } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { MenuSidebar, TdSidebarSeleccion } from './menu-sidebar';\n\nexport type TdSidebarModoCerrado = 'compacto' | 'oculto';\n\n@Component({\n selector: 'td-sidebar',\n imports: [NgTemplateOutlet, RouterLink, TdIcon],\n templateUrl: './td-sidebar.html',\n styleUrl: './td-sidebar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdSidebar {\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n\n @Input() titulo = 'Gestión Corporativa';\n @Input() subtitulo = 'Central Platform';\n @Input() etiquetaNavegacion = 'Navegación';\n @Input() logoUrl = '';\n @Input() logoAlt = 'Logo';\n @Input() textoCarga = 'Cargando menú...';\n @Input() mensajeVacio = 'No hay opciones disponibles.';\n @Input() error = '';\n @Input() cargando = false;\n @Input() oscuro = false;\n @Input() modoCerrado: TdSidebarModoCerrado = 'compacto';\n\n @Input()\n set abierto(value: boolean) {\n this.abiertoInterno.set(value);\n }\n get abierto(): boolean {\n return this.abiertoInterno();\n }\n\n @Input()\n set menu(value: MenuSidebar[] | null | undefined) {\n this.menuNormalizado.set(this.normalizarMenu(value ?? []));\n this.expandirRutaActual();\n }\n get menu(): MenuSidebar[] {\n return this.menuNormalizado();\n }\n\n @Output() readonly abiertoChange = new EventEmitter<boolean>();\n @Output() readonly seleccionar = new EventEmitter<TdSidebarSeleccion>();\n\n protected readonly abiertoInterno = signal(true);\n protected readonly menuNormalizado = signal<MenuSidebar[]>([]);\n protected readonly expandidos = signal<ReadonlySet<string>>(new Set<string>());\n protected readonly rutaSeleccionada = signal('');\n\n constructor() {\n this.router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.expandirRutaActual());\n }\n\n protected alternarGrupo(clave: string): void {\n if (!this.abiertoInterno()) {\n this.abiertoInterno.set(true);\n this.abiertoChange.emit(true);\n }\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n siguientes.has(clave) ? siguientes.delete(clave) : siguientes.add(clave);\n return siguientes;\n });\n }\n\n protected estaExpandido(clave: string): boolean {\n return this.expandidos().has(clave);\n }\n\n protected seleccionarItem(item: MenuSidebar, nivel: number): void {\n this.seleccionar.emit({ item, nivel });\n }\n\n protected esItemSeleccionado(item: MenuSidebar): boolean {\n const ruta = this.normalizarRuta(item.ruta);\n return !!ruta && ruta === this.rutaSeleccionada();\n }\n\n protected claveItem(item: MenuSidebar, padre: string, indice: number): string {\n return `${padre}/${item.nombre}-${indice}`;\n }\n\n protected inicialMarca(): string {\n return (this.titulo.trim().charAt(0) || 'T').toUpperCase();\n }\n\n private normalizarMenu(items: MenuSidebar[]): MenuSidebar[] {\n return [...items]\n .sort((a, b) => a.orden - b.orden)\n .map((item) => ({\n ...item,\n icono: item.icono?.trim() || 'folder',\n subMenus: this.normalizarMenu(item.subMenus ?? []),\n }));\n }\n\n private expandirRutaActual(): void {\n const rutaActual = this.normalizarRuta(this.router.url);\n const coincidencia = this.buscarMejorCoincidenciaPorRuta(this.menuNormalizado(), rutaActual);\n this.rutaSeleccionada.set(coincidencia?.ruta ?? '');\n\n const clavesPadre = coincidencia?.ancestros ?? [];\n if (!clavesPadre.length) return;\n\n this.expandidos.update((actuales) => {\n const siguientes = new Set(actuales);\n clavesPadre.forEach((clave) => siguientes.add(clave));\n return siguientes;\n });\n }\n\n private buscarMejorCoincidenciaPorRuta(\n items: MenuSidebar[],\n rutaActual: string,\n padre = 'raiz',\n ancestros: string[] = []\n ): { ruta: string; ancestros: string[]; peso: number } | null {\n let mejor: { ruta: string; ancestros: string[]; peso: number } | null = null;\n\n for (let indice = 0; indice < items.length; indice += 1) {\n const item = items[indice];\n const clave = this.claveItem(item, padre, indice);\n const ruta = this.normalizarRuta(item.ruta);\n\n if (this.rutaCoincide(ruta, rutaActual)) {\n mejor = this.mejorCoincidencia(mejor, {\n ruta,\n ancestros,\n peso: ruta === rutaActual ? Number.MAX_SAFE_INTEGER : ruta.length,\n });\n }\n\n const resultado = this.buscarMejorCoincidenciaPorRuta(\n item.subMenus ?? [],\n rutaActual,\n clave,\n [...ancestros, clave]\n );\n\n mejor = this.mejorCoincidencia(mejor, resultado);\n }\n\n return mejor;\n }\n\n private mejorCoincidencia(\n actual: { ruta: string; ancestros: string[]; peso: number } | null,\n candidata: { ruta: string; ancestros: string[]; peso: number } | null\n ): { ruta: string; ancestros: string[]; peso: number } | null {\n if (!candidata) return actual;\n if (!actual) return candidata;\n return candidata.peso > actual.peso ? candidata : actual;\n }\n\n private rutaCoincide(rutaMenu: string, rutaActual: string): boolean {\n if (!rutaMenu) return false;\n if (rutaMenu === '/') return rutaActual === '/';\n return rutaActual === rutaMenu || rutaActual.startsWith(`${rutaMenu}/`);\n }\n\n private normalizarRuta(ruta: string | null | undefined): string {\n if (!ruta) return '';\n const limpia = ruta.split('?')[0].split('#')[0].trim();\n if (!limpia || limpia === '/') return '/';\n const conSlashInicial = limpia.startsWith('/') ? limpia : `/${limpia}`;\n return conSlashInicial.endsWith('/') ? conSlashInicial.slice(0, -1) : conSlashInicial;\n }\n}\n","<aside\n class=\"td-sidebar\"\n [class.td-sidebar--compacto]=\"!abiertoInterno() && modoCerrado === 'compacto'\"\n [class.td-sidebar--oculto]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n [class.td-sidebar--oscuro]=\"oscuro\"\n [attr.aria-hidden]=\"!abiertoInterno() && modoCerrado === 'oculto'\"\n>\n <header class=\"td-sidebar__marca\">\n <div class=\"td-sidebar__logo\">\n @if (logoUrl) {\n <img [src]=\"logoUrl\" [alt]=\"logoAlt\" />\n } @else {\n <span>{{ inicialMarca() }}</span>\n }\n </div>\n\n @if (abiertoInterno()) {\n <div class=\"td-sidebar__marca-texto\">\n <small>{{ subtitulo }}</small>\n <strong>{{ titulo }}</strong>\n </div>\n }\n\n </header>\n\n <div class=\"td-sidebar__encabezado\">\n @if (abiertoInterno()) {\n <span>{{ etiquetaNavegacion }}</span>\n } @else {\n <span aria-hidden=\"true\">•••</span>\n }\n </div>\n\n <nav class=\"td-sidebar__nav\" aria-label=\"Menú principal\">\n @if (cargando) {\n <p class=\"td-sidebar__estado\">{{ textoCarga }}</p>\n } @else if (error) {\n <p class=\"td-sidebar__estado td-sidebar__estado--error\">{{ error }}</p>\n } @else if (!menuNormalizado().length) {\n <p class=\"td-sidebar__estado\">{{ mensajeVacio }}</p>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{ items: menuNormalizado(), nivel: 0, padre: 'raiz' }\"\n />\n }\n </nav>\n</aside>\n\n<ng-template #listaMenu let-items=\"items\" let-nivel=\"nivel\" let-padre=\"padre\">\n <ul class=\"td-sidebar__lista\" [class.td-sidebar__lista--anidada]=\"nivel > 0\">\n @for (item of items; track item) {\n @let clave = claveItem(item, padre, $index);\n @let tieneHijos = item.subMenus.length > 0;\n\n <li class=\"td-sidebar__item\">\n @if (tieneHijos) {\n <button\n class=\"td-sidebar__enlace\"\n type=\"button\"\n [class.td-sidebar__enlace--ruta-activa]=\"esItemSeleccionado(item)\"\n [attr.aria-expanded]=\"estaExpandido(clave)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"alternarGrupo(clave)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n <td-icon\n class=\"td-sidebar__flecha\"\n [class.td-sidebar__flecha--abierta]=\"estaExpandido(clave)\"\n nombre=\"chevron_right\"\n />\n }\n </button>\n } @else {\n <a\n class=\"td-sidebar__enlace\"\n [routerLink]=\"item.ruta || '/'\"\n [class.td-sidebar__enlace--ruta-activa]=\"esItemSeleccionado(item)\"\n [attr.title]=\"!abiertoInterno() ? item.nombre : null\"\n (click)=\"seleccionarItem(item, nivel)\"\n >\n <td-icon class=\"td-sidebar__icono\" [nombre]=\"item.icono || 'folder'\" />\n @if (abiertoInterno()) {\n <span>{{ item.nombre }}</span>\n }\n </a>\n }\n\n @if (abiertoInterno() && tieneHijos && estaExpandido(clave)) {\n <ng-container\n [ngTemplateOutlet]=\"listaMenu\"\n [ngTemplateOutletContext]=\"{\n items: item.subMenus,\n nivel: nivel + 1,\n padre: clave\n }\"\n />\n }\n </li>\n }\n </ul>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet tabSequence = 0;\n\n@Component({\n selector: 'td-tab',\n template: `\n <ng-template>\n <ng-content />\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTab {\n readonly generatedId = `td-tab-${++tabSequence}`;\n\n @Input() id = '';\n @Input() label = 'Tab';\n @Input() icon = '';\n @Input() disabled = false;\n @Input() badge: string | number | null = null;\n\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<unknown>;\n\n get resolvedId(): string {\n return this.id || this.generatedId;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TdIcon } from '../iconos';\nimport { TdTab } from './td-tab';\n\nexport type TdTabsVariant = 'linea' | 'pastilla' | 'contenida';\nexport type TdTabsAlignment = 'inicio' | 'centro' | 'fin';\n\n@Component({\n selector: 'td-tabs',\n imports: [NgTemplateOutlet, TdIcon],\n template: `\n <section\n class=\"td-tabs\"\n [class.td-tabs--dark]=\"dark\"\n [class.td-tabs--stretch]=\"stretch\"\n [class]=\"'td-tabs td-tabs--' + variant + ' td-tabs--align-' + alignment +\n (dark ? ' td-tabs--dark' : '') + (stretch ? ' td-tabs--stretch' : '')\"\n >\n <div\n #tabList\n class=\"td-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown)=\"handleKeydown($event)\"\n >\n @for (tab of tabs; track tab.resolvedId; let index = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"td-tabs__tab\"\n role=\"tab\"\n [id]=\"tabId(tab)\"\n [class.td-tabs__tab--active]=\"index === activeIndex\"\n [disabled]=\"tab.disabled\"\n [attr.tabindex]=\"index === activeIndex ? 0 : -1\"\n [attr.aria-selected]=\"index === activeIndex\"\n [attr.aria-controls]=\"panelId(tab)\"\n (click)=\"select(index)\"\n >\n @if (tab.icon) {\n <td-icon [nombre]=\"tab.icon\" />\n }\n <span>{{ tab.label }}</span>\n @if (tab.badge !== null) {\n <small>{{ tab.badge }}</small>\n }\n </button>\n }\n </div>\n\n @if (activeTab; as tab) {\n <div\n class=\"td-tabs__panel\"\n role=\"tabpanel\"\n [id]=\"panelId(tab)\"\n [attr.aria-labelledby]=\"tabId(tab)\"\n [attr.tabindex]=\"panelFocusable ? 0 : null\"\n >\n <ng-container [ngTemplateOutlet]=\"tab.content\" />\n </div>\n }\n </section>\n `,\n styleUrl: './td-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTabs implements AfterContentInit, OnDestroy {\n private readonly cdr = inject(ChangeDetectorRef);\n private tabsChange?: Subscription;\n private requestedIndex = 0;\n\n @ContentChildren(TdTab) private tabQuery!: QueryList<TdTab>;\n @ViewChild('tabList') private tabList?: ElementRef<HTMLDivElement>;\n @ViewChildren('tabButton') private tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n @Input()\n set selectedIndex(value: number) {\n this.requestedIndex = Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n if (this.tabQuery) this.applyRequestedIndex();\n }\n get selectedIndex(): number {\n return this.activeIndex;\n }\n\n @Input() variant: TdTabsVariant = 'linea';\n @Input() alignment: TdTabsAlignment = 'inicio';\n @Input() stretch = false;\n @Input() dark = false;\n @Input() ariaLabel = 'Pestañas';\n @Input() panelFocusable = false;\n\n @Output() readonly selectedIndexChange = new EventEmitter<number>();\n @Output() readonly tabChange = new EventEmitter<TdTab>();\n\n protected tabs: readonly TdTab[] = [];\n protected activeIndex = 0;\n\n protected get activeTab(): TdTab | null {\n return this.tabs[this.activeIndex] ?? null;\n }\n\n ngAfterContentInit(): void {\n this.syncTabs();\n this.tabsChange = this.tabQuery.changes.subscribe(() => this.syncTabs());\n }\n\n ngOnDestroy(): void {\n this.tabsChange?.unsubscribe();\n }\n\n protected select(index: number, focus = false): void {\n const tab = this.tabs[index];\n if (!tab || tab.disabled || index === this.activeIndex) {\n if (focus && tab && !tab.disabled) this.focusButton(index);\n return;\n }\n\n this.activeIndex = index;\n this.requestedIndex = index;\n this.selectedIndexChange.emit(index);\n this.tabChange.emit(tab);\n this.cdr.markForCheck();\n queueMicrotask(() => {\n this.ensureTabVisible(index, focus ? 'auto' : 'smooth');\n if (focus) this.focusButton(index);\n });\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n const horizontalKeys = ['ArrowLeft', 'ArrowRight'];\n if (!horizontalKeys.includes(event.key) && !['Home', 'End'].includes(event.key)) return;\n\n event.preventDefault();\n if (event.key === 'Home') {\n this.select(this.firstEnabledIndex(), true);\n return;\n }\n if (event.key === 'End') {\n this.select(this.lastEnabledIndex(), true);\n return;\n }\n this.select(this.nextEnabledIndex(event.key === 'ArrowRight' ? 1 : -1), true);\n }\n\n protected tabId(tab: TdTab): string {\n return `${tab.resolvedId}-trigger`;\n }\n\n protected panelId(tab: TdTab): string {\n return `${tab.resolvedId}-panel`;\n }\n\n private syncTabs(): void {\n this.tabs = this.tabQuery.toArray();\n this.applyRequestedIndex();\n this.cdr.markForCheck();\n queueMicrotask(() => this.ensureTabVisible(this.activeIndex, 'auto'));\n }\n\n private applyRequestedIndex(): void {\n if (!this.tabs.length) {\n this.activeIndex = 0;\n return;\n }\n\n const requested = Math.min(this.requestedIndex, this.tabs.length - 1);\n if (!this.tabs[requested]?.disabled) {\n this.activeIndex = requested;\n return;\n }\n\n const firstEnabled = this.firstEnabledIndex();\n this.activeIndex = firstEnabled >= 0 ? firstEnabled : 0;\n }\n\n private nextEnabledIndex(direction: number): number {\n if (!this.tabs.length) return 0;\n let next = this.activeIndex;\n for (let index = 0; index < this.tabs.length; index++) {\n next = (next + direction + this.tabs.length) % this.tabs.length;\n if (!this.tabs[next]?.disabled) return next;\n }\n return this.activeIndex;\n }\n\n private firstEnabledIndex(): number {\n return this.tabs.findIndex((tab) => !tab.disabled);\n }\n\n private lastEnabledIndex(): number {\n for (let index = this.tabs.length - 1; index >= 0; index--) {\n if (!this.tabs[index]?.disabled) return index;\n }\n return this.activeIndex;\n }\n\n private focusButton(index: number): void {\n this.tabButtons.get(index)?.nativeElement.focus();\n }\n\n private ensureTabVisible(index: number, behavior: ScrollBehavior): void {\n const list = this.tabList?.nativeElement;\n const button = this.tabButtons?.get(index)?.nativeElement;\n if (!list || !button || list.scrollWidth <= list.clientWidth) return;\n\n const padding = 8;\n const visibleStart = list.scrollLeft + padding;\n const visibleEnd = list.scrollLeft + list.clientWidth - padding;\n const tabStart = button.offsetLeft;\n const tabEnd = tabStart + button.offsetWidth;\n\n if (tabStart < visibleStart) {\n list.scrollTo({ left: Math.max(0, tabStart - padding), behavior });\n } else if (tabEnd > visibleEnd) {\n list.scrollTo({\n left: tabEnd - list.clientWidth + padding,\n behavior,\n });\n }\n }\n}\n","export type TdThemeMode = 'light' | 'dark' | 'system';\n\nexport interface TdThemePaletteColor {\n name: string;\n cssVariable: string;\n value: string;\n usage: string;\n}\n\nexport const TD_THEME_LIGHT_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#3157A4', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#254680', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#EAF0FB', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#16784A', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#A8660B', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#B93A3A', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#2563A8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#FFFFFF', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#F6F8FB', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#EDF1F6', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#DDE3EE', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#C8D1DF', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#202B3D', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#66758B', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 18px 46px ...', usage: 'Floating panels and overlays.' },\n];\n\nexport const TD_THEME_DARK_COLORS: TdThemePaletteColor[] = [\n { name: 'Font family', cssVariable: '--td-font-family', value: 'Inter, system-ui', usage: 'Base typography for every TelcomDev component.' },\n { name: 'Primary', cssVariable: '--td-color-primary', value: '#8AA7E6', usage: 'Main actions, focus and active navigation.' },\n { name: 'Primary hover', cssVariable: '--td-color-primary-hover', value: '#A8BDF0', usage: 'Hover state for primary actions.' },\n { name: 'Primary soft', cssVariable: '--td-color-primary-soft', value: '#1F2B45', usage: 'Selected rows, subtle badges and active surfaces.' },\n { name: 'On primary', cssVariable: '--td-color-on-primary', value: '#FFFFFF', usage: 'Text and icons placed over solid semantic colors.' },\n { name: 'Success', cssVariable: '--td-color-success', value: '#56C28D', usage: 'Positive states and confirmations.' },\n { name: 'Warning', cssVariable: '--td-color-warning', value: '#E2A84D', usage: 'Preventive states and attention.' },\n { name: 'Danger', cssVariable: '--td-color-danger', value: '#F07878', usage: 'Errors and destructive actions.' },\n { name: 'Info', cssVariable: '--td-color-info', value: '#79A9E8', usage: 'Informational states.' },\n { name: 'Surface', cssVariable: '--td-color-surface', value: '#181B22', usage: 'Inputs, dialogs, tables and panels.' },\n { name: 'Surface soft', cssVariable: '--td-color-surface-soft', value: '#20242D', usage: 'Headers, subtle backgrounds and table bars.' },\n { name: 'Surface muted', cssVariable: '--td-color-surface-muted', value: '#272D38', usage: 'Neutral buttons, chips and disabled/subtle surfaces.' },\n { name: 'Border', cssVariable: '--td-color-border', value: '#343B49', usage: 'Outlines, separators and dividers.' },\n { name: 'Border strong', cssVariable: '--td-color-border-strong', value: '#465164', usage: 'Checkboxes, avatars and emphasized outlines.' },\n { name: 'Text', cssVariable: '--td-color-text', value: '#EEF2F8', usage: 'Main content text.' },\n { name: 'Muted text', cssVariable: '--td-color-text-muted', value: '#A7B0BE', usage: 'Metadata, hints and secondary labels.' },\n { name: 'Focus ring', cssVariable: '--td-focus-ring', value: '0 0 0 3px ...', usage: 'Keyboard and focus states.' },\n { name: 'Radius md', cssVariable: '--td-radius-md', value: '0.75rem', usage: 'Default control radius.' },\n { name: 'Shadow md', cssVariable: '--td-shadow-md', value: '0 20px 54px ...', usage: 'Floating panels and overlays.' },\n];\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { TdThemeMode } from './td-theme.model';\n\nconst THEME_CLASS_LIGHT = 'td-theme-light';\nconst THEME_CLASS_DARK = 'td-theme-dark';\n\n@Injectable({ providedIn: 'root' })\nexport class TdThemeService {\n private readonly document = inject(DOCUMENT);\n private readonly systemDark = signal(this.readSystemPreference());\n readonly mode = signal<TdThemeMode>('light');\n readonly isDark = computed(() =>\n this.mode() === 'dark' || (this.mode() === 'system' && this.systemDark())\n );\n\n constructor() {\n this.listenSystemPreference();\n effect(() => this.applyThemeClass(this.isDark(), this.mode()));\n }\n\n setMode(mode: TdThemeMode): void {\n this.mode.set(mode);\n }\n\n toggle(): void {\n this.mode.set(this.isDark() ? 'light' : 'dark');\n }\n\n private applyThemeClass(isDark: boolean, mode: TdThemeMode): void {\n const element = this.document.documentElement;\n element.classList.toggle(THEME_CLASS_DARK, isDark);\n element.classList.toggle(THEME_CLASS_LIGHT, !isDark);\n element.dataset['tdTheme'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n private listenSystemPreference(): void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const query = window.matchMedia('(prefers-color-scheme: dark)');\n const listener = (event: MediaQueryListEvent): void => this.systemDark.set(event.matches);\n query.addEventListener?.('change', listener);\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, booleanAttribute } from '@angular/core';\nimport { TdTooltipPosition, TdTooltipTone } from './td-tooltip.model';\n\n@Component({\n selector: 'td-tooltip-panel',\n template: `\n <div\n class=\"td-tooltip\"\n [class]=\"'td-tooltip td-tooltip--' + tone + ' td-tooltip--' + position\"\n [class.td-tooltip--multiline]=\"multiline\"\n [id]=\"id\"\n role=\"tooltip\"\n [style.max-width]=\"maxWidth\"\n >\n {{ content }}\n <span class=\"td-tooltip__arrow\" aria-hidden=\"true\"></span>\n </div>\n `,\n styleUrl: './td-tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TdTooltipPanel {\n @Input() id = '';\n @Input() content = '';\n @Input() position: TdTooltipPosition = 'top';\n @Input() tone: TdTooltipTone = 'dark';\n @Input() maxWidth = '18rem';\n @Input({ transform: booleanAttribute }) multiline = false;\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n Renderer2,\n ViewContainerRef,\n booleanAttribute,\n ComponentRef,\n inject,\n numberAttribute,\n} from '@angular/core';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TdTooltipPosition, TdTooltipTone } from './td-tooltip.model';\nimport { TdTooltipPanel } from './td-tooltip-panel';\n\nlet tooltipSequence = 0;\n\n@Directive({\n selector: '[tdTooltip]',\n standalone: true,\n})\nexport class TdTooltip implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly renderer = inject(Renderer2);\n private readonly tooltipId = `td-tooltip-${++tooltipSequence}`;\n\n private overlayRef?: OverlayRef;\n private panelRef?: ComponentRef<TdTooltipPanel>;\n private showTimer?: ReturnType<typeof setTimeout>;\n private hideTimer?: ReturnType<typeof setTimeout>;\n\n @Input('tdTooltip') content: string | null | undefined = '';\n @Input() tdTooltipPosition: TdTooltipPosition = 'top';\n @Input() tdTooltipTone: TdTooltipTone = 'dark';\n @Input() tdTooltipMaxWidth = '18rem';\n @Input({ transform: numberAttribute }) tdTooltipShowDelay = 250;\n @Input({ transform: numberAttribute }) tdTooltipHideDelay = 80;\n @Input({ transform: booleanAttribute }) tdTooltipMultiline = false;\n @Input({ transform: booleanAttribute }) tdTooltipDisabled = false;\n\n @HostListener('mouseenter')\n protected handleMouseEnter(): void {\n this.scheduleShow();\n }\n\n @HostListener('mouseleave')\n protected handleMouseLeave(): void {\n this.scheduleHide();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.scheduleShow();\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.scheduleHide();\n }\n\n @HostListener('touchstart')\n protected handleTouchStart(): void {\n this.showNow();\n this.scheduleHide(2200);\n }\n\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') this.hideNow();\n }\n\n ngOnDestroy(): void {\n this.clearTimers();\n this.destroyOverlay();\n }\n\n private scheduleShow(delay = this.tdTooltipShowDelay): void {\n if (this.tdTooltipDisabled || !this.normalizedContent) return;\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n this.showTimer = setTimeout(() => this.showNow(), Math.max(0, delay));\n }\n\n private scheduleHide(delay = this.tdTooltipHideDelay): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.hideTimer = setTimeout(() => this.hideNow(), Math.max(0, delay));\n }\n\n private showNow(): void {\n if (this.tdTooltipDisabled || !this.normalizedContent) return;\n\n const overlayRef = this.ensureOverlay();\n const positionStrategy = overlayRef.getConfig().positionStrategy;\n if (this.isFlexiblePositionStrategy(positionStrategy)) {\n positionStrategy.withPositions(this.positions());\n }\n\n if (!overlayRef.hasAttached()) {\n const portal = new ComponentPortal(TdTooltipPanel, this.viewContainerRef);\n this.panelRef = overlayRef.attach(portal);\n }\n\n this.panelRef?.setInput('id', this.tooltipId);\n this.panelRef?.setInput('content', this.normalizedContent);\n this.panelRef?.setInput('position', this.tdTooltipPosition);\n this.panelRef?.setInput('tone', this.tdTooltipTone);\n this.panelRef?.setInput('maxWidth', this.tdTooltipMaxWidth);\n this.panelRef?.setInput('multiline', this.tdTooltipMultiline);\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', this.tooltipId);\n }\n\n private hideNow(): void {\n this.overlayRef?.detach();\n this.panelRef = undefined;\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n }\n\n private ensureOverlay(): OverlayRef {\n if (this.overlayRef) return this.overlayRef;\n\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(this.positions())\n .withFlexibleDimensions(false)\n .withPush(true),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'td-tooltip-overlay',\n });\n\n return this.overlayRef;\n }\n\n private positions(): ConnectedPosition[] {\n const offset = 8;\n const map: Record<TdTooltipPosition, ConnectedPosition[]> = {\n top: [\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -offset,\n },\n ],\n bottom: [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: offset,\n },\n ],\n left: [\n {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -offset,\n },\n ],\n right: [\n {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: offset,\n },\n ],\n };\n\n return map[this.tdTooltipPosition];\n }\n\n private get normalizedContent(): string {\n return String(this.content ?? '').trim();\n }\n\n private clearTimers(): void {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n }\n\n private destroyOverlay(): void {\n this.hideNow();\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n }\n\n private isFlexiblePositionStrategy(\n strategy: unknown,\n ): strategy is FlexibleConnectedPositionStrategy {\n return !!strategy && typeof (strategy as FlexibleConnectedPositionStrategy).withPositions === 'function';\n }\n}\n","/*\n * Public API Surface of telcomdev-ui\n */\n\nexport * from './lib/telcomdev-ui';\nexport * from './lib/alerta';\nexport * from './lib/badge';\nexport * from './lib/button';\nexport * from './lib/checkbox';\nexport * from './lib/data-table';\nexport * from './lib/date-picker';\nexport * from './lib/dialog';\nexport * from './lib/footer';\nexport * from './lib/form-control';\nexport * from './lib/file-viewer';\nexport * from './lib/file-upload';\nexport * from './lib/header';\nexport * from './lib/iconos';\nexport * from './lib/input';\nexport * from './lib/layout';\nexport * from './lib/menu';\nexport * from './lib/radio';\nexport * from './lib/select';\nexport * from './lib/sidebar';\nexport * from './lib/tabs';\nexport * from './lib/theme';\nexport * from './lib/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}