@cocoar/ui 0.1.0 → 0.1.1

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":"cocoar-ui-components.mjs","sources":["../../../../libs/ui/components/src/lib/display/icon/coar-icon-registry.ts","../../../../libs/ui/components/src/lib/display/icon/core-icons.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon-built-in-registry.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon.service.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon.component.ts","../../../../libs/ui/components/src/lib/forms/_base/coar-control-value-accessor.ts","../../../../libs/ui/components/src/lib/forms/text-input/coar-text-input.component.ts","../../../../libs/ui/components/src/lib/forms/text-input/coar-text-input.component.html","../../../../libs/ui/components/src/lib/forms/number-input/coar-number-input.component.ts","../../../../libs/ui/components/src/lib/forms/number-input/coar-number-input.component.html","../../../../libs/ui/components/src/lib/forms/password-input/coar-password-input.component.ts","../../../../libs/ui/components/src/lib/forms/password-input/coar-password-input.component.html","../../../../libs/ui/components/src/lib/forms/checkbox/coar-checkbox.component.ts","../../../../libs/ui/components/src/lib/forms/checkbox/coar-checkbox.component.html","../../../../libs/ui/components/src/lib/forms/radio/coar-radio-group.component.ts","../../../../libs/ui/components/src/lib/forms/radio/coar-radio-group.component.html","../../../../libs/ui/components/src/lib/forms/radio/coar-radio.component.ts","../../../../libs/ui/components/src/lib/forms/radio/coar-radio.component.html","../../../../libs/ui/components/src/lib/display/scrollbar/coar-scrollbar.directive.ts","../../../../libs/ui/components/src/lib/forms/select/coar-select-base.ts","../../../../libs/ui/components/src/lib/forms/select/coar-single-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-single-select.component.html","../../../../libs/ui/components/src/lib/forms/select/coar-multi-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-multi-select.component.html","../../../../libs/ui/components/src/lib/forms/select/coar-tag-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-tag-select.component.html","../../../../libs/ui/components/src/lib/forms/switch/coar-switch.component.ts","../../../../libs/ui/components/src/lib/forms/switch/coar-switch.component.html","../../../../libs/ui/components/src/lib/forms/index.ts","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-helpers.ts","../../../../libs/ui/components/src/lib/date-time/scrollable-calendar/coar-scrollable-calendar.component.ts","../../../../libs/ui/components/src/lib/date-time/scrollable-calendar/coar-scrollable-calendar.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-format.ts","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-picker-base.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-picker/coar-plain-date-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-picker/coar-plain-date-picker.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-time-helpers.ts","../../../../libs/ui/components/src/lib/date-time/time-picker/coar-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/time-picker/coar-time-picker.component.html","../../../../libs/ui/components/src/lib/date-time/plain-date-time-picker/coar-plain-date-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-time-picker/coar-plain-date-time-picker.component.html","../../../../libs/ui/components/src/lib/date-time/zoned-date-time-picker/coar-zoned-date-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/zoned-date-time-picker/coar-zoned-date-time-picker.component.html","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover-group.service.ts","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover.component.ts","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover.component.html","../../../../libs/ui/components/src/lib/date-time/mini-calendar/coar-mini-calendar.component.ts","../../../../libs/ui/components/src/lib/date-time/mini-calendar/coar-mini-calendar.component.html","../../../../libs/ui/components/src/lib/date-time/month-list/coar-month-list.component.ts","../../../../libs/ui/components/src/lib/date-time/month-list/coar-month-list.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-time-format.ts","../../../../libs/ui/components/src/lib/date-time/index.ts","../../../../libs/ui/components/src/lib/display/button/coar-button.component.ts","../../../../libs/ui/components/src/lib/display/button/coar-button.component.html","../../../../libs/ui/components/src/lib/display/badge/coar-badge.component.ts","../../../../libs/ui/components/src/lib/display/badge/coar-badge.component.html","../../../../libs/ui/components/src/lib/display/tag/coar-tag.component.ts","../../../../libs/ui/components/src/lib/display/tag/coar-tag.component.html","../../../../libs/ui/components/src/lib/display/card/coar-card.component.ts","../../../../libs/ui/components/src/lib/display/card/coar-card.component.html","../../../../libs/ui/components/src/lib/display/note/coar-note.component.ts","../../../../libs/ui/components/src/lib/display/note/coar-note.component.html","../../../../libs/ui/components/src/lib/display/divider/coar-divider.component.ts","../../../../libs/ui/components/src/lib/display/divider/coar-divider.component.html","../../../../libs/ui/components/src/lib/display/table/coar-table.component.ts","../../../../libs/ui/components/src/lib/display/label/coar-label.component.ts","../../../../libs/ui/components/src/lib/display/avatar/coar-avatar.component.ts","../../../../libs/ui/components/src/lib/display/avatar/coar-avatar.component.html","../../../../libs/ui/components/src/lib/display/avatar/initials.pipe.ts","../../../../libs/ui/components/src/lib/display/code-block/coar-code-block.component.ts","../../../../libs/ui/components/src/lib/display/code-block/coar-code-block.component.html","../../../../libs/ui/components/src/lib/display/progress-bar/coar-progress-bar.component.ts","../../../../libs/ui/components/src/lib/display/progress-bar/coar-progress-bar.component.html","../../../../libs/ui/components/src/lib/display/spinner/coar-spinner.component.ts","../../../../libs/ui/components/src/lib/display/spinner/coar-spinner.component.html","../../../../libs/ui/components/src/lib/display/index.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab.component.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab-group.component.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab-group.component.html","../../../../libs/ui/components/src/lib/navigation/sidebar/coar-sidebar.component.ts","../../../../libs/ui/components/src/lib/navigation/sidebar/coar-sidebar.component.html","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb-item.component.ts","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb.component.ts","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb.component.html","../../../../libs/ui/components/src/lib/navigation/pagination/coar-pagination.component.ts","../../../../libs/ui/components/src/lib/navigation/pagination/coar-pagination.component.html","../../../../libs/ui/components/src/lib/navigation/navbar/coar-navbar.component.ts","../../../../libs/ui/components/src/lib/navigation/navbar/coar-navbar.component.html","../../../../libs/ui/components/src/lib/navigation/index.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip.service.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip-overlay.component.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip-overlay.component.html","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip.directive.ts","../../../../libs/ui/components/src/lib/overlay/popconfirm/coar-popconfirm.directive.ts","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog-shell.component.ts","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog-shell.component.html","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog.service.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.component.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.component.html","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast-container.component.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast-container.component.html","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.service.ts","../../../../libs/ui/components/src/lib/overlay/index.ts","../../../../libs/ui/components/src/cocoar-ui-components.ts"],"sourcesContent":["import { type Provider, InjectionToken, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { catchError, shareReplay } from 'rxjs/operators';\n\nexport interface CoarIconSource {\n getIcon(name: string): Observable<string | null>;\n getAvailableIconKeys?(): Observable<readonly string[]>;\n clearCache?(): void;\n clearIconCache?(name: string): void;\n}\n\nexport type CoarIconSourceEntry = Readonly<{\n key: string;\n source: CoarIconSource;\n}>;\n\nexport const COAR_ICON_SOURCE_ENTRY = new InjectionToken<CoarIconSourceEntry>(\n 'COAR_ICON_SOURCE_ENTRY'\n);\n\nexport const COAR_DEFAULT_ICON_SOURCE_KEY = new InjectionToken<string>(\n 'COAR_DEFAULT_ICON_SOURCE_KEY'\n);\n\nexport type ProvideCoarIconSourceOptions = Readonly<{\n key: string;\n source: CoarIconSource;\n}>;\n\nexport function provideCoarIconSource(options: ProvideCoarIconSourceOptions): Provider {\n return {\n provide: COAR_ICON_SOURCE_ENTRY,\n useValue: {\n key: options.key,\n source: options.source,\n },\n multi: true,\n };\n}\n\nexport type ProvideCoarIconMapSourceOptions = Readonly<{\n key: string;\n icons: Readonly<Record<string, string>>;\n}>;\n\nexport function provideCoarIconMapSource(options: ProvideCoarIconMapSourceOptions): Provider {\n return provideCoarIconSource({\n key: options.key,\n source: new CoarIconMapSource(options.icons),\n });\n}\n\nexport function provideCoarDefaultIconSource(key: string): Provider {\n return {\n provide: COAR_DEFAULT_ICON_SOURCE_KEY,\n useValue: key,\n multi: true,\n };\n}\n\nexport type ProvideCoarHttpIconSourceOptions = Readonly<{\n key: string;\n getUrl: (iconName: string) => string;\n getAvailableIconKeys?: (http: HttpClient) => Observable<readonly string[]>;\n}>;\n\nexport function provideCoarHttpIconSource(options: ProvideCoarHttpIconSourceOptions): Provider {\n return {\n provide: COAR_ICON_SOURCE_ENTRY,\n multi: true,\n useFactory: () => {\n const http = inject(HttpClient);\n const getAvailableIconKeys = options.getAvailableIconKeys;\n return {\n key: options.key,\n source: new CoarHttpIconSource(\n http,\n options.getUrl,\n getAvailableIconKeys ? () => getAvailableIconKeys(http) : undefined\n ),\n };\n },\n };\n}\n\nclass CoarIconMapSource implements CoarIconSource {\n constructor(private readonly icons: Readonly<Record<string, string>>) {}\n\n public getIcon(name: string): Observable<string | null> {\n return of(this.icons[name] ?? null);\n }\n\n public getAvailableIconKeys(): Observable<readonly string[]> {\n return of(Object.keys(this.icons).sort());\n }\n}\n\nclass CoarHttpIconSource implements CoarIconSource {\n private readonly cache = new Map<string, Observable<string | null>>();\n private iconKeys$?: Observable<readonly string[]>;\n\n public readonly getAvailableIconKeys?: () => Observable<readonly string[]>;\n\n constructor(\n private readonly http: HttpClient,\n private readonly getUrl: (iconName: string) => string,\n getAvailableIconKeysFactory?: () => Observable<readonly string[]>\n ) {\n if (getAvailableIconKeysFactory) {\n this.getAvailableIconKeys = () => {\n if (!this.iconKeys$) {\n this.iconKeys$ = getAvailableIconKeysFactory().pipe(shareReplay(1));\n }\n return this.iconKeys$;\n };\n }\n }\n\n public getIcon(name: string): Observable<string | null> {\n const cached = this.cache.get(name);\n if (cached) return cached;\n\n const request$ = this.http\n .get(this.getUrl(name), {\n responseType: 'text',\n })\n .pipe(\n catchError(() => of(null)),\n shareReplay(1)\n );\n\n this.cache.set(name, request$);\n return request$;\n }\n\n public clearCache(): void {\n this.cache.clear();\n this.iconKeys$ = undefined;\n }\n\n public clearIconCache(name: string): void {\n this.cache.delete(name);\n }\n}\n","/**\n * Built-in icon registry.\n *\n * ⚠️ DO NOT EDIT THIS FILE MANUALLY\n *\n * This file is auto-generated from /assets/icons/*.svg files.\n * To add new icons:\n * 1. Add SVG files to /assets/icons/\n * 2. Run: npm run build:icons\n * 3. Commit the generated file\n *\n * Icons are inlined as strings for maximum portability.\n *\n * Generated: 2026-01-24T16:22:29.873Z\n * Source: C:\\git\\cocoar\\cocoar-ui\\assets\\icons\n */\n\nexport const CORE_ICONS = {\n 'add-list': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m10 18h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m21 17h-6c-.6 0-1-.4-1-1s.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m18 20c-.6 0-1-.4-1-1v-6c0-.6.4-1 1-1s1 .4 1 1v6c0 .6-.4 1-1 1z\"/></g><g><path d=\"m14 13h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m14 8h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g></svg>`,\n 'add-user': `<svg fill=\"none\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m17 6c0 2.76142-2.2386 5-5 5-2.76142 0-5-2.23858-5-5s2.23858-5 5-5c2.7614 0 5 2.23858 5 5zm-5 4c2.2091 0 4-1.79086 4-4s-1.7909-4-4-4c-2.20914 0-4 1.79086-4 4s1.79086 4 4 4zm-2 3c-3.86599 0-7 3.134-7 7 0 1.6569 1.34315 3 3 3h6.5c.2761 0 .5-.2239.5-.5s-.2239-.5-.5-.5h-6.5c-1.10457 0-2-.8954-2-2 0-3.3137 2.68629-6 6-6h4.5c.2761 0 .5-.2239.5-.5 0-.2762-.2239-.5-.5-.5zm9 2c.2761 0 .5.2239.5.5v3h3c.2761 0 .5.2239.5.5s-.2239.5-.5.5h-3v3c0 .2761-.2239.5-.5.5s-.5-.2239-.5-.5v-3h-3c-.2761 0-.5-.2239-.5-.5s.2239-.5.5-.5h3v-3c0-.2761.2239-.5.5-.5z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'add': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"_03_Login\" data-name=\"03 Login\"><path d=\"m256 512a25 25 0 0 1 -25-25v-462a25 25 0 0 1 50 0v462a25 25 0 0 1 -25 25z\"/><path d=\"m487 281h-462a25 25 0 0 1 0-50h462a25 25 0 0 1 0 50z\"/></g></svg>`,\n 'arrow-right': `<svg id=\"Layer_2\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 2\"><path d=\"m22.707 11.293-7-7a1 1 0 0 0 -1.414 1.414l5.293 5.293h-17.586a1 1 0 0 0 0 2h17.586l-5.293 5.293a1 1 0 1 0 1.414 1.414l7-7a1 1 0 0 0 0-1.414z\"/></svg>`,\n 'back': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m9 14c-.3 0-.5-.1-.7-.3l-4-4c-.4-.4-.4-1 0-1.4l4-4c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-3.3 3.3 3.3 3.3c.4.4.4 1 0 1.4-.2.2-.4.3-.7.3z\"/><path d=\"m14 19h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c2.3 0 4-1.5 4-3.5s-1.7-3.5-4-3.5h-9c-.6 0-1-.4-1-1s.4-1 1-1h9c3.4 0 6 2.4 6 5.5s-2.6 5.5-6 5.5z\"/></svg>`,\n 'bin': `<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M436,60h-75V45c0-24.813-20.187-45-45-45H196c-24.813,0-45,20.187-45,45v15H76c-24.813,0-45,20.187-45,45 c0,19.928,13.025,36.861,31.005,42.761L88.76,470.736C90.687,493.875,110.385,512,133.604,512h244.792 c23.22,0,42.918-18.125,44.846-41.271l26.753-322.969C467.975,141.861,481,124.928,481,105C481,80.187,460.813,60,436,60z M181,45 c0-8.271,6.729-15,15-15h120c8.271,0,15,6.729,15,15v15H181V45z M393.344,468.246c-0.643,7.712-7.208,13.754-14.948,13.754 H133.604c-7.739,0-14.305-6.042-14.946-13.747L92.294,150h327.412L393.344,468.246z M436,120H76c-8.271,0-15-6.729-15-15 s6.729-15,15-15h360c8.271,0,15,6.729,15,15S444.271,120,436,120z\"/></g></g><g><g><path d=\"M195.971,436.071l-15-242c-0.513-8.269-7.67-14.558-15.899-14.043c-8.269,0.513-14.556,7.631-14.044,15.899l15,242.001 c0.493,7.953,7.097,14.072,14.957,14.072C189.672,452,196.504,444.684,195.971,436.071z\"/></g></g><g><g><path d=\"M256,180c-8.284,0-15,6.716-15,15v242c0,8.284,6.716,15,15,15s15-6.716,15-15V195C271,186.716,264.284,180,256,180z\"/></g></g><g><g><path d=\"M346.927,180.029c-8.25-0.513-15.387,5.774-15.899,14.043l-15,242c-0.511,8.268,5.776,15.386,14.044,15.899 c8.273,0.512,15.387-5.778,15.899-14.043l15-242C361.483,187.659,355.196,180.541,346.927,180.029z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'calendar world': `<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"Line_Expand\" data-name=\"Line Expand\" viewBox=\"0 0 64 64\" width=\"512\" height=\"512\"><path d=\"M60,5H57V4a3,3,0,0,0-6,0V5H47V4a3,3,0,0,0-6,0V5H23V4a3,3,0,0,0-6,0V5H13V4A3,3,0,0,0,7,4V5H4A3.0033,3.0033,0,0,0,1,8V60a3.0033,3.0033,0,0,0,3,3H60a3.0033,3.0033,0,0,0,3-3V8A3.0033,3.0033,0,0,0,60,5ZM53,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM43,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM19,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM9,4a1,1,0,0,1,2,0V8A1,1,0,0,1,9,8ZM61,60a1.0009,1.0009,0,0,1-1,1H4a1.0009,1.0009,0,0,1-1-1V15H61Zm0-47H3V8A1.0009,1.0009,0,0,1,4,7H7V8a3,3,0,0,0,6,0V7h4V8a3,3,0,0,0,6,0V7H41V8a3,3,0,0,0,6,0V7h4V8a3,3,0,0,0,6,0V7h3a1.0009,1.0009,0,0,1,1,1Z\"/><path d=\"M32,58A20,20,0,1,0,12,38,20.0226,20.0226,0,0,0,32,58Zm-6.3613-6.1118-.9817,2.5293c-.3407-.153-.6778-.3126-1.007-.4859l-.7086-3.644a.4686.4686,0,0,1,.11-.398l.8095-.8994A2.897,2.897,0,0,0,22.41,44.2417l-1.212-.3032-1.77-4.3257V38.5146l2.584-1.8457a.4625.4625,0,0,1,.7168.2632l.1582.6319a.9991.9991,0,0,0,.97.7573h4.4385a.4587.4587,0,0,1,.4287.29l.9893,2.4741a1,1,0,0,0,.7324.6094l1.9014.38a.8564.8564,0,0,1,.5664,1.28L31.333,45.99l-.6855.2286a2.4582,2.4582,0,0,0-1.6836,2.3349v1.0947l-2.9073,1.7447A1.0034,1.0034,0,0,0,25.6387,51.8882ZM50,38a17.9166,17.9166,0,0,1-4.1123,11.4387L44.793,48.125a1.1151,1.1151,0,0,1-.2569-.7109v-6.11a.9937.9937,0,0,0-.1562-.5361l-2.8272-4.45A2.4575,2.4575,0,0,0,38.8779,35.25l-1.0654.2661a.4669.4669,0,0,1-.3672-.0635l-3.1728-2.1152-.4668-2.7978a.4629.4629,0,0,1,.1679-.437l1.9971-1.5977a1.6938,1.6938,0,0,1,2.1875.1035l1.2773,1.2778a1.0036,1.0036,0,0,0,.3555.23L45.22,32.1509a.998.998,0,0,0,.7451-.0176L48.5866,31.01A17.9008,17.9008,0,0,1,50,38ZM32,20a18.005,18.005,0,0,1,15.6959,9.2161l-2.149.9211-4.8506-1.8188-1.124-1.1246A3.5789,3.5789,0,0,0,37.01,26.1431a3.6767,3.6767,0,0,0-2.2891.8L32.7246,28.54a2.4641,2.4641,0,0,0-.8916,2.3277l.5381,3.2256a1.0032,1.0032,0,0,0,.4316.6674l3.5332,2.3555a2.4614,2.4614,0,0,0,1.962.34l1.0644-.2662a.462.462,0,0,1,.502.2l2.6718,4.2051v5.8189a3.1158,3.1158,0,0,0,.7207,1.9917l1.2553,1.5069a17.9222,17.9222,0,0,1-17.99,4.2286l.8577-2.21,3.0986-1.8594a1.0009,1.0009,0,0,0,.4854-.8574V48.5532a.4606.4606,0,0,1,.3164-.4375l1.0361-.3457a1.0008,1.0008,0,0,0,.541-.4341l1.7715-2.9526a2.8553,2.8553,0,0,0-1.8887-4.27l-1.37-.274-.7881-1.97a2.4494,2.4494,0,0,0-2.2861-1.5483H24.6348a2.463,2.463,0,0,0-1.503-1.5869,2.4383,2.4383,0,0,0-.9892-.1328v-.898L27.23,29.2524a1.0019,1.0019,0,0,0,.3223-.5537l.5185-2.5571.6338-.0112a2.3017,2.3017,0,0,0,1.0947-4.3028L27.584,20.5707A17.9126,17.9126,0,0,1,32,20Zm-6.9856,1.4116,3.7971,2.1553a.3015.3015,0,0,1-.1426.5635l-1.4365.0258a1.0022,1.0022,0,0,0-.9629.8013L25.6582,27.97l-5.1738,4.5279a.9968.9968,0,0,0-.3418.7524v1.4336l-.9385-.2349-.5059-1.5151a.9987.9987,0,0,0-.8486-.6787l-2.79-.28A18.0822,18.0822,0,0,1,25.0144,21.4116ZM14.4824,33.9269l2.5235.2533.4746,1.4219a.9982.9982,0,0,0,.706.6538l.7135.1784-1.0523.7517a1.0016,1.0016,0,0,0-.419.814v1.81a1.0051,1.0051,0,0,0,.0742.3784l2.0352,4.9761a1,1,0,0,0,.6836.5918l1.7041.4262a.8963.8963,0,0,1,.4492,1.47l-.81.9a2.4766,2.4766,0,0,0-.5869,2.1162l.3485,1.7926a17.8392,17.8392,0,0,1-6.8446-18.5337Z\"/></svg>`,\n 'calendar-home': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m2 50.6162109c0 2.0571289 1.6767578 3.7304688 3.7382812 3.7304688h24.3808594v3.7202148c0 .5522461.4472656 1 1 1h8.1279297c.003418.000061.0063477.0019531.0097656.0019531h9.8408203c.003418 0 .0063477-.0018921.0097656-.0019531h8.1220703c.5527344 0 1-.4477539 1-1v-14.6279297h2.2080078c.6347656 0 1.2011719-.3813477 1.4433594-.972168.2441406-.5966797.1064453-1.2744141-.3525391-1.7265625-.0039062-.003418-.0068359-.0063477-.0107422-.0097656l-12.5703125-12.036438v-16.0265502c0-2.0571289-1.6777344-3.730957-3.7392578-3.730957h-2.1220703v-2.3500977c0-.9125977-.7421875-1.6552734-1.6552734-1.6552734h-2.9980469c-.9130859 0-1.6552734.7426758-1.6552734 1.6552734v2.3500977h-22.6074218v-2.3500977c0-.9125977-.7421875-1.6552734-1.6552734-1.6552734h-2.9980469c-.9130859 0-1.65625.7426758-1.65625 1.6552734v2.3500977h-2.1220703c-2.0615234 0-3.7382812 1.6738281-3.7382812 3.730957v37.9487304zm46.0976562 6.4506836h-7.8408203v-11.6967773h7.8408203zm9.1318359-15.6279297c-.5527344 0-1 .4477539-1 1v14.6279297h-6.1318359v-12.6967773c0-.5522461-.4472656-1-1-1h-9.8408203c-.5527344 0-1 .4477539-1 1v12.6967773h-6.1376953v-3.7056885c0-.005127.0029297-.0093994.0029297-.0145264s-.0029297-.0093994-.0029297-.0145264v-10.8931885c0-.5522461-.4472656-1-1-1h-2.1259766l15.1806641-14.5463867 3.0609131 2.9307861c.0048828.0050049.0098877.0093994.0150146.0142822l12.1164551 11.6013184h-2.1367188zm-11.96875-16.2749023c-.6074219-.5786133-1.5625-.578125-2.1757812.0024414l-16.2412109 15.5629883c-.4697266.4477539-.6171875 1.1245117-.3779297 1.7241211.2402344.5986328.8144531.9853516 1.4628906.9853516h2.1904297v8.9077148h-24.3808594c-.9580078 0-1.7382812-.7763672-1.7382812-1.7304688v-29.5507812h42.9472656v5.713501l-1.6865234-1.6148682zm-6.4833984-18.2329102h2.3085938v3.0005493c0 .001709-.0009766.0031128-.0009766.0048218v2.9970703h-2.3076172v-6.0024414zm-26.6074219 0v6.0024414h-2.3085938v-2.9970703c0-.001709-.0009766-.0031128-.0009766-.0048218v-3.0005493h2.3095703zm-6.4316406 4.0053711h2.1220703v2.3413086c0 .2288208.046875.4467773.1311035.6452026.2514648.59375.8398438 1.0115356 1.5241699 1.0115356h3c.9121094 0 1.6542969-.7421875 1.6542969-1.6542969v-2.34375h22.6074219v2.34375c0 .9121094.7412109 1.6542969 1.6533203 1.6542969h3.0009766c.6843262 0 1.2724609-.4179077 1.5234375-1.0117798.0842285-.1983032.1308594-.4162598.1308594-.6449585v-2.3413086h2.1220703c.9589844 0 1.7392578.7763672 1.7392578 1.730957v6.3979492h-42.9472656v-6.3979492c0-.9545898.7802734-1.730957 1.7382812-1.730957z\"/><path d=\"m12.6396484 23.8325195h-3.3183594c-1.2636719 0-2.2919922 1.0288086-2.2919922 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2919922 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2924805v-3.0942383c0-.1616211.1308594-.2929688.2919922-.2929688h3.3183594c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m22.3017578 23.8325195h-3.3183594c-1.2646484 0-2.2929688 1.0288086-2.2929688 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1616211.1318359-.2929688.2929688-.2929688h3.3183594c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m31.9628906 23.8325195h-3.3173828c-1.2646484 0-2.2929688 1.0288086-2.2929688 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3173828c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3173828c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1616211.1318359-.2929688.2929688-.2929688h3.3173828c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m41.3330078 23.8320312h-3.0244141c-1.2636719 0-2.2919922 1.027832-2.2919922 2.2915039v2.8447266c0 .5522461.4472656 1 1 1s1-.4477539 1-1v-2.8447266c0-.1582031.1337891-.2915039.2919922-.2915039h3.0244141c.5527344 0 1-.4477539 1-1s-.4472656-1-1-1z\"/><path d=\"m12.6396484 32.9257812h-3.3183594c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2919922 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2924805v-3.0942383c0-.1611328.1308594-.2924805.2919922-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m22.3017578 32.9257812h-3.3183594c-1.2646484 0-2.2929688 1.0283203-2.2929688 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1611328.1318359-.2924805.2929688-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m31.8496094 32.9223633h-3.2041016c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2919922v3.0166016c0 .5522461.4472656 1 1 1s1-.4477539 1-1v-3.0166016c0-.1582031.1337891-.2919922.2919922-.2919922h3.2041016c.5527344 0 1-.4477539 1-1s-.4472656-1-1-1z\"/><path d=\"m12.6396484 42.0185547h-3.3183594c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2929688 2.2919922 2.2929688h3.3183594c1.2646484 0 2.2929688-1.0288086 2.2929688-2.2929688v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1616211-.1318359.2929688-.2929688.2929688h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2929688v-3.0942383c0-.1611328.1308594-.2924805.2919922-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m22.3017578 42.0185547h-3.3183594c-1.2646484 0-2.2929688 1.0283203-2.2929688 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2929688 2.2929688 2.2929688h3.3183594c1.2646484 0 2.2929688-1.0288086 2.2929688-2.2929688v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1616211-.1318359.2929688-.2929688.2929688h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2929688v-3.0942383c0-.1611328.1318359-.2924805.2929688-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m26.3525391 47.4052734c0 1.2641602 1.0283203 2.2929688 2.2929688 2.2929688.5527344 0 1-.4477539 1-1s-.4472656-1-1-1c-.1611328 0-.2929688-.1313477-.2929688-.2929688v-2.2563477c0-.5522461-.4472656-1-1-1s-1 .4477539-1 1z\"/></svg>`,\n 'calendar': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"512\" height=\"512\"><g id=\"_01_align_center\" data-name=\"01 align center\"><path d=\"M21,2H18V0H16V2H8V0H6V2H3A3,3,0,0,0,0,5V24H24V5A3,3,0,0,0,21,2ZM2,5A1,1,0,0,1,3,4H21a1,1,0,0,1,1,1V8H2ZM2,22V10H22V22Z\"/><rect x=\"15\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"15\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"17\" width=\"2\" height=\"2\"/></g></svg>`,\n 'caret-right': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m190.06 414 163.12-139.78a24 24 0 0 0 0-36.44l-163.12-139.78c-15.57-13.34-39.62-2.28-39.62 18.22v279.6c0 20.5 24.05 31.56 39.62 18.18z\"/></svg>`,\n 'chat': `<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 60 60\" style=\"enable-background:new 0 0 60 60;\" xml:space=\"preserve\"><g><path d=\"M10,25.465h13c0.553,0,1-0.448,1-1s-0.447-1-1-1H10c-0.553,0-1,0.448-1,1S9.447,25.465,10,25.465z\"/><path d=\"M36,29.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,29.465,36,29.465z\"/><path d=\"M36,35.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,35.465,36,35.465z\"/><path d=\"M54.072,2.535L19.93,2.465c-3.27,0-5.93,2.66-5.93,5.93v5.124l-8.07,0.017c-3.27,0-5.93,2.66-5.93,5.93v21.141 c0,3.27,2.66,5.929,5.93,5.929H12v10c0,0.413,0.254,0.784,0.64,0.933c0.117,0.045,0.239,0.067,0.36,0.067 c0.276,0,0.547-0.115,0.74-0.327l9.704-10.675l16.626-0.068c3.27,0,5.93-2.66,5.93-5.929v-0.113l5.26,5.786 c0.193,0.212,0.464,0.327,0.74,0.327c0.121,0,0.243-0.022,0.36-0.067c0.386-0.149,0.64-0.52,0.64-0.933v-10h1.07 c3.27,0,5.93-2.66,5.93-5.929V8.465C60,5.196,57.341,2.536,54.072,2.535z M44,40.536c0,2.167-1.763,3.929-3.934,3.929l-17.07,0.07 c-0.28,0.001-0.548,0.12-0.736,0.327L14,53.949v-8.414c0-0.552-0.447-1-1-1H5.93c-2.167,0-3.93-1.763-3.93-3.929V19.465 c0-2.167,1.763-3.93,3.932-3.93l9.068-0.019c0,0,0,0,0,0c0.001,0,0.001,0,0.002,0l25.068-0.052c2.167,0,3.93,1.763,3.93,3.93 v18.441V40.536z M58,29.606c0,2.167-1.763,3.929-3.93,3.929H52c-0.553,0-1,0.448-1,1v8.414l-5-5.5V19.395 c0-3.27-2.66-5.93-5.932-5.93L16,13.514v-5.12c0-2.167,1.763-3.93,3.928-3.93l34.141,0.07c0.001,0,0.001,0,0.002,0 c2.167,0,3.93,1.763,3.93,3.93V29.606z\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'check': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M497.36,69.995c-7.532-7.545-19.753-7.558-27.285-0.032L238.582,300.845l-83.522-90.713 c-7.217-7.834-19.419-8.342-27.266-1.126c-7.841,7.217-8.343,19.425-1.126,27.266l97.126,105.481 c3.557,3.866,8.535,6.111,13.784,6.22c0.141,0.006,0.277,0.006,0.412,0.006c5.101,0,10.008-2.026,13.623-5.628L497.322,97.286 C504.873,89.761,504.886,77.54,497.36,69.995z\"/></g></g><g><g><path d=\"M492.703,236.703c-10.658,0-19.296,8.638-19.296,19.297c0,119.883-97.524,217.407-217.407,217.407 c-119.876,0-217.407-97.524-217.407-217.407c0-119.876,97.531-217.407,217.407-217.407c10.658,0,19.297-8.638,19.297-19.296 C275.297,8.638,266.658,0,256,0C114.84,0,0,114.84,0,256c0,141.154,114.84,256,256,256c141.154,0,256-114.846,256-256 C512,245.342,503.362,236.703,492.703,236.703z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'chevron-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>`,\n 'chevron-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`,\n 'chevron-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`,\n 'chevron-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"18 15 12 9 6 15\"></polyline></svg>`,\n 'chevrons-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline></svg>`,\n 'chevrons-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline></svg>`,\n 'clipboard': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 438.891 438.891\" style=\"enable-background:new 0 0 438.891 438.891;\" xml:space=\"preserve\"><g><g><g><path d=\"M347.968,57.503h-39.706V39.74c0-5.747-6.269-8.359-12.016-8.359h-30.824c-7.314-20.898-25.6-31.347-46.498-31.347 c-20.668-0.777-39.467,11.896-46.498,31.347h-30.302c-5.747,0-11.494,2.612-11.494,8.359v17.763H90.923 c-23.53,0.251-42.78,18.813-43.886,42.318v299.363c0,22.988,20.898,39.706,43.886,39.706h257.045 c22.988,0,43.886-16.718,43.886-39.706V99.822C390.748,76.316,371.498,57.754,347.968,57.503z M151.527,52.279h28.735 c5.016-0.612,9.045-4.428,9.927-9.404c3.094-13.474,14.915-23.146,28.735-23.51c13.692,0.415,25.335,10.117,28.212,23.51 c0.937,5.148,5.232,9.013,10.449,9.404h29.78v41.796H151.527V52.279z M370.956,399.185c0,11.494-11.494,18.808-22.988,18.808 H90.923c-11.494,0-22.988-7.314-22.988-18.808V99.822c1.066-11.964,10.978-21.201,22.988-21.42h39.706v26.645 c0.552,5.854,5.622,10.233,11.494,9.927h154.122c5.98,0.327,11.209-3.992,12.016-9.927V78.401h39.706 c12.009,0.22,21.922,9.456,22.988,21.42V399.185z\"/><path d=\"M179.217,233.569c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,233.962,179.427,233.761,179.217,233.569z\"/><path d=\"M329.16,256.034H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,256.034,329.16,256.034z\"/><path d=\"M179.217,149.977c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.364-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,150.37,179.427,150.169,179.217,149.977z\"/><path d=\"M329.16,172.442H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,172.442,329.16,172.442z\"/><path d=\"M179.217,317.16c-3.919-4.131-10.425-4.363-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,317.554,179.427,317.353,179.217,317.16z\"/><path d=\"M329.16,339.626H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,339.626,329.16,339.626z\"/></g></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'close': `<svg id=\"Capa_1\" enable-background=\"new 0 0 320.591 320.591\" height=\"512\" viewBox=\"0 0 320.591 320.591\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"close_1_\"><path d=\"m30.391 318.583c-7.86.457-15.59-2.156-21.56-7.288-11.774-11.844-11.774-30.973 0-42.817l257.812-257.813c12.246-11.459 31.462-10.822 42.921 1.424 10.362 11.074 10.966 28.095 1.414 39.875l-259.331 259.331c-5.893 5.058-13.499 7.666-21.256 7.288z\"/><path d=\"m287.9 318.583c-7.966-.034-15.601-3.196-21.257-8.806l-257.813-257.814c-10.908-12.738-9.425-31.908 3.313-42.817 11.369-9.736 28.136-9.736 39.504 0l259.331 257.813c12.243 11.462 12.876 30.679 1.414 42.922-.456.487-.927.958-1.414 1.414-6.35 5.522-14.707 8.161-23.078 7.288z\"/></g></g></svg>`,\n 'comments': `<svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m480.052 369.741c49.476-69.417 41.913-164.522-25.665-226.473-30.877-28.305-70.24-45.926-112.761-50.847-.265-.326-.536-.649-.833-.958-36.991-38.425-90.135-60.463-145.805-60.463-105.939 0-194.988 78.933-194.988 180 0 35.435 11.007 69.404 31.916 98.741l-29.209 91.706c-1.836 5.764-.03 12.065 4.579 15.982 4.617 3.924 11.13 4.678 16.511 1.941l88.827-45.167c18.242 7.855 37.586 13.009 57.618 15.354 38.642 40.636 92.073 61.443 146.738 61.443 28.416 0 56.729-5.791 82.36-16.798l88.831 45.169c2.151 1.094 4.48 1.629 6.795 1.629 10.123 0 17.38-9.865 14.295-19.553zm-361.374-25.72c-4.201-1.995-9.088-1.929-13.233.179l-63.267 32.17 20.66-64.866c1.504-4.723.579-9.883-2.473-13.788-19.866-25.43-30.367-55.415-30.367-86.716 0-82.71 74.014-150 164.99-150 36.636 0 71.905 11.099 100.514 31.086-96.348 9.688-173.51 84.942-173.51 178.914 0 29.228 7.492 57.366 21.617 82.576-8.552-2.547-16.881-5.732-24.931-9.555zm287.845 60.178c-4.085-2.077-8.976-2.202-13.233-.178-23.385 11.108-49.772 16.979-76.31 16.979-90.976 0-164.99-67.29-164.99-150s74.014-150 164.99-150 164.99 67.29 164.99 150c0 31.301-10.501 61.286-30.368 86.715-3.051 3.905-3.976 9.065-2.473 13.788l20.66 64.866z\"/><circle cx=\"255.984\" cy=\"271\" r=\"15\"/><circle cx=\"315.981\" cy=\"271\" r=\"15\"/><circle cx=\"375.977\" cy=\"271\" r=\"15\"/></svg>`,\n 'copy': `<svg height=\"682.66669pt\" viewBox=\"-21 -21 682.66669 682.66669\" width=\"682.66669pt\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m565 640h-340c-41.359375 0-75-33.640625-75-75v-340c0-41.359375 33.640625-75 75-75h340c41.359375 0 75 33.640625 75 75v340c0 41.359375-33.640625 75-75 75zm-340-440c-13.785156 0-25 11.214844-25 25v340c0 13.785156 11.214844 25 25 25h340c13.785156 0 25-11.214844 25-25v-340c0-13.785156-11.214844-25-25-25zm-125 240h-25c-13.785156 0-25-11.214844-25-25v-340c0-13.785156 11.214844-25 25-25h340c13.785156 0 25 11.214844 25 25v23.75h50v-23.75c0-41.359375-33.640625-75-75-75h-340c-41.359375 0-75 33.640625-75 75v340c0 41.359375 33.640625 75 75 75h25zm0 0\"/></svg>`,\n 'customers': `<svg id=\"Capa_1\" enable-background=\"new 0 0 183.729 183.729\" height=\"512\" viewBox=\"0 0 183.729 183.729\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"Line_1_\"><path d=\"m4.213 137.816h33.391v41.739c0 2.305 1.869 4.174 4.174 4.174h100.174c2.305 0 4.174-1.869 4.174-4.174v-41.739h33.391c2.305 0 4.174-1.869 4.174-4.174v-59.394c0-8.692-5.388-16.474-13.523-19.534l-12.021-4.55c11.569-11.249 11.827-29.747.578-41.316s-29.747-11.827-41.316-.578c-5.676 5.52-8.869 13.107-8.848 21.024-10.503-5.284-22.888-5.284-33.391 0 .042-16.136-13.005-29.251-29.141-29.294s-29.252 13.004-29.295 29.14c-.021 7.917 3.172 15.504 8.848 21.024l-12.021 4.55c-8.135 3.059-13.522 10.841-13.522 19.534v59.395c0 2.305 1.868 4.173 4.174 4.173zm41.739-19.325c.003-4.574 2.499-8.782 6.511-10.977l15.903-8.64 18.198 76.508h-40.612zm61.314-21.579-11.228 47.082v-35.395c0-2.305-1.869-4.174-4.174-4.174s-4.174 1.869-4.174 4.174v35.395l-11.227-47.082c9.785 4.452 21.018 4.452 30.803 0zm30.512 78.47h-40.612l18.198-76.508 15.903 8.64c4.012 2.195 6.509 6.404 6.511 10.977zm29.217-112.696c4.977 1.759 8.315 6.45 8.348 11.729v55.054h-29.217v-10.977c-.033-7.612-4.208-14.602-10.894-18.24l-18.032-9.81c7.797-7.122 12.236-17.197 12.23-27.757-.004-1.86-.158-3.716-.459-5.551 2.849.901 5.819 1.365 8.807 1.377 4.101.003 8.155-.865 11.896-2.546zm-50.087-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87-9.344 20.87-20.87 20.87c-4.418-.045-8.706-1.508-12.23-4.174-1.899-3.887-4.454-7.417-7.555-10.435-.699-2.015-1.066-4.129-1.085-6.261zm4.174 33.391c0 16.136-13.081 29.217-29.217 29.217s-29.218-13.081-29.218-29.217 13.081-29.217 29.217-29.217 29.218 13.081 29.218 29.217zm-96-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87c-.001 2.188-.368 4.361-1.085 6.428-3.085 2.967-5.64 6.44-7.555 10.268-3.524 2.666-7.811 4.129-12.23 4.174-11.526-.001-20.87-9.344-20.87-20.87zm-16.696 44.953c.102-5.217 3.428-9.823 8.348-11.562l17.53-6.553c3.688 1.595 7.668 2.405 11.687 2.379 2.988-.012 5.958-.477 8.807-1.377-.301 1.835-.455 3.692-.459 5.551.017 10.531 4.454 20.571 12.23 27.673l-18.031 9.892c-6.686 3.638-10.861 10.628-10.894 18.24v10.977h-29.218z\"/></g></g></svg>`,\n 'down': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m4.93934 10.9393c.58579-.5857 1.53553-.5857 2.12132 0l8.93934 8.9394 8.9393-8.9394c.5858-.5857 1.5356-.5857 2.1214 0 .5857.5858.5857 1.5356 0 2.1214l-10 10c-.5858.5857-1.5356.5857-2.1214 0l-9.99996-10c-.58579-.5858-.58579-1.5356 0-2.1214z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'earth-day': `<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"Line_Expand\" data-name=\"Line Expand\" viewBox=\"0 0 64 64\" width=\"512\" height=\"512\"><path d=\"M40,49a1,1,0,0,0,1-1,2.0006,2.0006,0,1,1,3.5947,1.2793L39.2031,56.396A1,1,0,0,0,40,58h6a1,1,0,0,0,0-2H42.0117l4.1768-5.5132A4.076,4.076,0,0,0,47,48a4,4,0,0,0-8,0A1,1,0,0,0,40,49Z\"/><path d=\"M50,49a1,1,0,0,0,1-1,2.0006,2.0006,0,1,1,3.5947,1.2793L49.2031,56.396A1,1,0,0,0,50,58h6a1,1,0,0,0,0-2H52.0117l4.1768-5.5132A4.076,4.076,0,0,0,57,48a4,4,0,0,0-8,0A1,1,0,0,0,50,49Z\"/><path d=\"M61,31H58a3,3,0,0,0-6,0H49.2586A25.0887,25.0887,0,1,0,32,48.98V61a3.0033,3.0033,0,0,0,3,3H61a3.0033,3.0033,0,0,0,3-3V34A3.0033,3.0033,0,0,0,61,31Zm-7,0a1,1,0,0,1,2,0v3a1,1,0,0,1-2,0Zm-6-6a22.9818,22.9818,0,0,1-.8094,6H44a3.0033,3.0033,0,0,0-3-3,2.96,2.96,0,0,0-.894.1512l-3.2622-5.1351a2.8447,2.8447,0,0,0-3.0928-1.2349l-1.3438.3365a.8421.8421,0,0,1-.6748-.1172l-4.1035-2.7354-.6074-3.646a.8493.8493,0,0,1,.3066-.8007l2.5137-2.0113a2.4218,2.4218,0,0,1,3.123.1431l1.6143,1.6138a1.005,1.005,0,0,0,.3555.2295l6.8564,2.5717a1.0032,1.0032,0,0,0,.7451-.0175l3.55-1.5214A22.8635,22.8635,0,0,1,48,25Zm-6,6v3a1,1,0,0,1-2,0V31a1,1,0,0,1,2,0ZM34.3625,4a23.08,23.08,0,0,1,6.7121,4.5715H38.2715L35.9932,6.293A.9964.9964,0,0,0,34.97,6.0513l-2.32.7729-2.3535-.47a.9149.9149,0,0,1,.0547-1.8032ZM16.1954,3.7551,21.1025,6.54a.6438.6438,0,0,1-.3056,1.2037l-1.8145.0327a1.0022,1.0022,0,0,0-.9629.8012L17.23,12.47l-6.6016,5.7779A.9972.9972,0,0,0,10.2861,19v2.1479l-1.6533-.4135-.6846-2.0508A.9987.9987,0,0,0,7.1,18.0049l-3.8765-.3894A23.1132,23.1132,0,0,1,16.1954,3.7551Zm-4.1817,34.75a2.8631,2.8631,0,0,0-.6768,2.4453l.5717,2.9446A22.9558,22.9558,0,0,1,2.6537,19.5685l3.6022.3617.6533,1.9575a.9982.9982,0,0,0,.706.6538l1.4546.3637-.4477.32A4.2138,4.2138,0,0,0,7.1709,28.249L9.5029,33.95a1,1,0,0,0,.6836.5918l2.1524.5381a1.3964,1.3964,0,0,1,.6992,2.2881ZM17.21,42.6382l-1.3444,3.4654q-.8406-.3654-1.6456-.7943L13.3,40.57a.8528.8528,0,0,1,.2012-.727l1.0244-1.1372a3.3966,3.3966,0,0,0-1.7022-5.5664l-1.6611-.4151-2.14-5.2324a2.2125,2.2125,0,0,1,.7617-2.6392l2.4472-1.748a.8451.8451,0,0,1,1.3125.4824l.1993.7984a1.0007,1.0007,0,0,0,.9707.7578h5.6074a.8411.8411,0,0,1,.7851.5317L22.3574,28.8a1.001,1.001,0,0,0,.7324.6089l2.4.48a1.3448,1.3448,0,0,1,.89,2.01L24.333,35.3115l-.958.3189a2.8433,2.8433,0,0,0-1.9463,2.7v1.5317l-3.8008,2.28A1.0034,1.0034,0,0,0,17.21,42.6382ZM32,34V46.89a22.7726,22.7726,0,0,1-14.2653-.0731l1.2165-3.1361,3.9922-2.3951a1.0008,1.0008,0,0,0,.4853-.8574V38.3306a.8447.8447,0,0,1,.5791-.8028l1.3086-.436a1.0008,1.0008,0,0,0,.541-.4341l2.2373-3.729a3.3447,3.3447,0,0,0-2.2119-5l-1.8691-.374-1.05-2.6226a2.8322,2.8322,0,0,0-2.6426-1.7885H15.4951l-.0107-.0406a2.8313,2.8313,0,0,0-3.1983-2.1167V19.4536l6.5147-5.7012a1.0012,1.0012,0,0,0,.3222-.5537l.6973-3.437,1.0127-.018a2.6436,2.6436,0,0,0,1.2559-4.9429L18.708,2.882a22.861,22.861,0,0,1,11.365-.3113,2.9143,2.9143,0,0,0-.17,5.7442l2.6143.5225a.9924.9924,0,0,0,.5127-.0317l1.9853-.6617L37.15,10.2783a.9993.9993,0,0,0,.707.293h5.0358a23.0723,23.0723,0,0,1,2.3158,3.4555l-3.0908,1.3248L35.84,12.9966l-1.4609-1.461a4.2624,4.2624,0,0,0-3.0508-1.25,4.3982,4.3982,0,0,0-2.7363.96l-2.5137,2.0112a2.85,2.85,0,0,0-1.0293,2.6905l.6787,4.0742a.9971.9971,0,0,0,.4317.6675l4.4638,2.9756a2.8513,2.8513,0,0,0,2.27.3935l1.3437-.3364a.8466.8466,0,0,1,.92.3672L38.4985,29.35A2.98,2.98,0,0,0,38,31H35A3.0033,3.0033,0,0,0,32,34ZM62,61a1.0009,1.0009,0,0,1-1,1H35a1.0009,1.0009,0,0,1-1-1V41H62Zm0-22H34V34a1.0009,1.0009,0,0,1,1-1h3v1a3,3,0,0,0,6,0V33h8v1a3,3,0,0,0,6,0V33h3a1.0009,1.0009,0,0,1,1,1Z\"/></svg>`,\n 'employee': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m44.585 14.585c0-6.939-5.646-12.585-12.585-12.585s-12.585 5.646-12.585 12.585 5.646 12.585 12.585 12.585 12.585-5.646 12.585-12.585zm-23.17 0c0-5.837 4.749-10.585 10.585-10.585s10.585 4.748 10.585 10.585-4.749 10.585-10.585 10.585-10.585-4.748-10.585-10.585z\"/><path d=\"m36.468 28.62s-.003 0-.005 0c-.073 0-.143-.011-.216-.011h-8.492c-.073 0-.143.01-.215.011-.003 0-.006 0-.01 0-9.353.122-16.926 7.758-16.926 17.139v15.241c0 .553.448 1 1 1h40.793c.552 0 1-.447 1-1v-15.241c0-9.382-7.575-17.019-16.929-17.139zm-4.468 7.477h1.306l4.436 18.002-5.741 5.515-5.741-5.515 4.436-18.002h1.306zm0-2h-1.432l-1.507-3.488h5.879l-1.507 3.488h-1.432zm-19.397 11.662c0-8.066 6.341-14.661 14.298-15.107l1.959 4.533-4.681 18.996c-.085.347.021.713.278.96l5.059 4.859h-16.913zm38.794 14.241h-16.913l5.059-4.859c.257-.247.364-.613.278-.96l-4.681-18.996 1.959-4.533c7.956.446 14.298 7.042 14.298 15.107z\"/></svg>`,\n 'eye-closed': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.26408 6.66615C1.57529 6.4126 2.03769 6.45387 2.29687 6.75831C4.01035 8.77104 7.1184 11.2826 12 11.2826C16.8815 11.2826 19.9895 8.77106 21.703 6.75833C21.9622 6.45389 22.4246 6.41263 22.7358 6.66617C23.047 6.91972 23.0892 7.37206 22.83 7.67651C22.3016 8.29723 21.6469 8.96667 20.8577 9.60857C20.9001 9.65503 20.937 9.7077 20.9669 9.7661L22.9224 13.5921C23.1035 13.9465 22.9567 14.3774 22.5945 14.5546C22.2322 14.7318 21.7917 14.5881 21.6106 14.2338L19.6856 10.4674C18.4652 11.2689 16.9983 11.959 15.2651 12.3565L16.1412 16.6418C16.2206 17.0303 15.9631 17.4082 15.5659 17.4859C15.1688 17.5636 14.7825 17.3117 14.703 16.9232L13.8209 12.6086C13.2402 12.6793 12.6334 12.7173 12 12.7173C11.3665 12.7173 10.7597 12.6793 10.1789 12.6086L9.29684 16.9232C9.21741 17.3117 8.83107 17.5636 8.43393 17.4859C8.03679 17.4082 7.77924 17.0303 7.85866 16.6418L8.73478 12.3564C7.30485 12.0285 6.0562 11.5014 4.97768 10.8769L2.32003 14.3434C2.07703 14.6603 1.61738 14.7246 1.29337 14.4869C0.96937 14.2491 0.903705 13.7995 1.14671 13.4825L3.75501 10.0804C2.6858 9.30207 1.8295 8.45132 1.16987 7.67649C0.910686 7.37204 0.952866 6.9197 1.26408 6.66615Z\" fill=\"black\"/></svg>`,\n 'eye-off': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`,\n 'eye-open': `<svg clip-rule=\"evenodd\" fill-rule=\"evenodd\" height=\"512\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Icon\"><path d=\"m12 10.75c-2.346 0-4.25 1.904-4.25 4.25s1.904 4.25 4.25 4.25 4.25-1.904 4.25-4.25-1.904-4.25-4.25-4.25zm0 1.5c1.518 0 2.75 1.232 2.75 2.75s-1.232 2.75-2.75 2.75-2.75-1.232-2.75-2.75 1.232-2.75 2.75-2.75z\"/><path d=\"m22.53 12.97s-.604-.604-1.514-1.515c-4.98-4.979-13.052-4.979-18.032 0-.91.911-1.514 1.515-1.514 1.515-.293.292-.293.768 0 1.06.292.293.768.293 1.06 0 0 0 .604-.604 1.515-1.514 4.393-4.394 11.517-4.394 15.91 0 .911.91 1.515 1.514 1.515 1.514.292.293.768.293 1.06 0 .293-.292.293-.768 0-1.06z\"/><path d=\"m18.85 6.867-1.5 2.598c-.206.358-.083.817.275 1.024s.818.084 1.025-.274l1.5-2.598c.206-.359.083-.818-.275-1.025s-.818-.084-1.025.275z\"/><path d=\"m11.25 5.5v3c0 .414.336.75.75.75s.75-.336.75-.75v-3c0-.414-.336-.75-.75-.75s-.75.336-.75.75z\"/><path d=\"m3.85 7.617 1.5 2.598c.207.358.667.481 1.025.274s.481-.666.275-1.024l-1.5-2.598c-.207-.359-.667-.482-1.025-.275s-.481.666-.275 1.025z\"/></g></svg>`,\n 'eye': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle></svg>`,\n 'globe': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M256,0C114.508,0,0,114.497,0,256c0,141.492,114.497,256,256,256c141.492,0,256-114.497,256-256 C512,114.508,397.503,0,256,0z M156.946,52.753c-7.747,21.099-14.25,42.547-19.499,64.295 c-15.341-4.661-30.432-10.25-45.243-16.762C110.958,80.583,132.812,64.54,156.946,52.753z M72.338,124.24 c19.171,8.878,38.791,16.3,58.802,22.253c-5.806,30.993-9.126,62.538-9.914,94.507H30.502 C33.265,198.559,47.728,158.39,72.338,124.24z M72.338,387.76C47.728,353.61,33.265,313.441,30.502,271h90.724 c0.788,31.969,4.108,63.514,9.914,94.507C111.129,371.46,91.51,378.882,72.338,387.76z M92.204,411.715 c14.811-6.513,29.901-12.102,45.243-16.762c5.25,21.748,11.752,43.196,19.499,64.295 C132.824,447.467,110.968,431.427,92.204,411.715z M241,481.498c-15.754-1.025-31.197-3.655-46.135-7.825 c-11.865-28.12-21.335-56.952-28.398-86.363c24.318-5.437,49.199-8.616,74.533-9.515V481.498z M241,347.777 c-27.448,0.907-54.405,4.307-80.751,10.175c-5.234-28.529-8.25-57.55-9.013-86.952H241V347.777z M241,241h-89.764 c0.763-29.402,3.779-58.423,9.013-86.952c26.346,5.868,53.303,9.268,80.751,10.175V241z M241,134.205 c-25.334-0.899-50.215-4.078-74.533-9.515C173.53,95.279,183,66.447,194.865,38.327c14.938-4.17,30.381-6.8,46.135-7.825V134.205z M439.662,124.24c24.61,34.15,39.073,74.319,41.836,116.76h-90.724c-0.788-31.969-4.108-63.514-9.914-94.507 C400.871,140.54,420.49,133.118,439.662,124.24z M419.796,100.285c-14.811,6.513-29.901,12.102-45.243,16.762 c-5.25-21.748-11.752-43.196-19.499-64.295C379.176,64.533,401.032,80.573,419.796,100.285z M271,30.502 c15.754,1.025,31.197,3.655,46.135,7.825C329,66.447,338.47,95.279,345.533,124.69c-24.318,5.437-49.199,8.616-74.533,9.515 V30.502z M271,164.223c27.448-0.907,54.405-4.307,80.751-10.175c5.234,28.529,8.25,57.55,9.013,86.952H271V164.223z M317.134,473.672c-14.937,4.171-30.38,6.801-46.134,7.826V377.795c25.334,0.899,50.215,4.078,74.533,9.515 C338.469,416.721,329,445.553,317.134,473.672z M271,347.777V271h89.764c-0.763,29.402-3.779,58.423-9.013,86.952 C325.405,352.084,298.448,348.684,271,347.777z M355.054,459.247c7.747-21.099,14.25-42.547,19.499-64.295 c15.341,4.661,30.432,10.25,45.243,16.762C401.042,431.417,379.188,447.46,355.054,459.247z M439.662,387.76 c-19.171-8.878-38.791-16.3-58.802-22.253c5.806-30.993,9.126-62.538,9.914-94.507h90.724 C478.735,313.441,464.272,353.61,439.662,387.76z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'home': `<svg id=\"Layer_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m498.147 222.58-57.298-57.298v-150.282c0-8.284-6.716-15-15-15h-64.267c-8.284 0-15 6.716-15 15v56.017l-57.174-57.174c-8.926-8.927-20.794-13.843-33.418-13.843-12.625 0-24.494 4.916-33.42 13.843l-208.738 208.739c-18.428 18.427-18.428 48.411 0 66.838 8.927 8.927 20.795 13.843 33.419 13.843 2.645 0 5.253-.229 7.812-.651v154.223c0 30.419 24.748 55.166 55.167 55.166h97.561c8.284 0 15-6.716 15-15v-113.534h66.4v113.533c0 8.284 6.716 15 15 15h97.56c30.419 0 55.166-24.747 55.166-55.166v-154.223c2.558.423 5.165.651 7.81.651h.003c12.622 0 24.49-4.916 33.419-13.844 8.926-8.926 13.842-20.794 13.843-33.418-.002-12.624-4.918-24.493-13.845-33.42zm-121.564-192.58h34.267v105.283l-34.267-34.268zm25.167 452h-82.56v-113.533c0-8.284-6.716-15-15-15h-96.4c-8.284 0-15 6.716-15 15v113.533h-82.561c-13.877 0-25.167-11.289-25.167-25.166v-171.809l170.928-170.924 170.926 170.926v171.808c0 13.876-11.289 25.165-25.166 25.165zm75.186-213.795c-3.263 3.262-7.598 5.058-12.208 5.058-4.609-.001-8.944-1.796-12.204-5.055-.001-.001-.002-.002-.004-.004l-185.923-185.923c-5.856-5.859-15.354-5.857-21.213 0l-185.925 185.922c-.002.002-.003.003-.005.005-3.26 3.26-7.593 5.055-12.203 5.055s-8.945-1.795-12.206-5.056c-6.73-6.73-6.73-17.682 0-24.412l208.738-208.739c3.26-3.26 7.596-5.056 12.207-5.056 4.61 0 8.945 1.796 12.205 5.056l82.781 82.78 125.958 125.957c6.731 6.73 6.731 17.683.002 24.412z\"/></svg>`,\n 'important-1': `<svg id=\"Layer_1\" enable-background=\"new 0 0 100 100\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m53.6308289 62.660614h-7.3402634c-2.3325844 0-4.2989349-1.739502-4.5834389-4.0546722l-6.2579918-50.924778c-.3383217-2.7531052 1.8096237-5.1811638 4.5834389-5.1811638h19.9348373c2.7766304 0 4.9254341 2.4327488 4.5825768 5.1881289l-6.3365822 50.924778c-.287693 2.3120809-2.2526665 4.0477071-4.5825767 4.0477071z\"/><path d=\"m63.6071815 83.8928223c0 7.4706039-6.1365699 13.6071777-13.6071815 13.6071777s-13.6071815-6.1365738-13.6071815-13.6071777c0-7.4706116 6.13657-13.6071777 13.6071815-13.6071777s13.6071815 6.1365585 13.6071815 13.6071777\"/></svg>`,\n 'important': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m46.0722656 25.6606445c-.390625.390625-.390625 1.0239258 0 1.4140625 1.3154297 1.315918 2.0400391 3.0649414 2.0400391 4.925293s-.7246094 3.609375-2.0400391 4.925293c-.390625.3901367-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c1.6933594-1.6933594 2.6259766-3.9448242 2.6259766-6.3393555s-.9326172-4.6459961-2.6259766-6.3393555c-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m50.9248047 20.8085938c-.390625.390625-.390625 1.0234375 0 1.4140625 5.390625 5.3911133 5.390625 14.1635742 0 19.5546875-.390625.390625-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c6.1708984-6.1708984 6.1708984-16.2119141 0-22.3828125-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m17.9277344 25.6606445c-.390625-.390625-1.0234375-.390625-1.4140625 0-1.6933594 1.6933594-2.6259766 3.9448242-2.6259766 6.3393555s.9326172 4.6459961 2.6259766 6.3393555c.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0239258 0-1.4140625-1.3154297-1.315918-2.0400391-3.0649414-2.0400391-4.925293s.7246094-3.609375 2.0400391-4.925293c.390625-.3901367.390625-1.0234375 0-1.4140625z\"/><path d=\"m13.0751953 20.8085938c-.390625-.390625-1.0234375-.390625-1.4140625 0-6.1708984 6.1708984-6.1708984 16.2119141 0 22.3828125.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0234375 0-1.4140625-5.390625-5.3911133-5.390625-14.1635742 0-19.5546875.390625-.390625.390625-1.0234375 0-1.4140625z\"/><path d=\"m39.2626953 2h-14.5253906c-.2744141 0-.5361328.112793-.7255859.3115234-.1884766.1987305-.2871094.4663086-.2734375.7402344l2.0253906 38.9492188c.0283203.5317383.4667969.9482422.9990234.9482422h10.4746094c.5322266 0 .9707031-.4165039.9990234-.9482422l2.0253907-38.9492188c.0136719-.2739258-.0849609-.5415039-.2734375-.7402344-.1894531-.1987305-.4511719-.3115234-.7255859-.3115234zm-2.9746094 38.9492188h-8.5761719l-1.9208984-36.9492188h12.4179688l-1.9208984 36.9492188z\"/><path d=\"m32 47.3198242c-4.046875 0-7.3398438 3.2924805-7.3398438 7.3398438s3.2929688 7.340332 7.3398438 7.340332 7.3398438-3.2929688 7.3398438-7.340332-3.2929688-7.3398438-7.3398438-7.3398438zm0 12.6801758c-2.9443359 0-5.3398438-2.3955078-5.3398438-5.340332 0-2.9443359 2.3955078-5.3398438 5.3398438-5.3398438s5.3398438 2.3955078 5.3398438 5.3398438c0 2.9448242-2.3955078 5.340332-5.3398438 5.340332z\"/></svg>`,\n 'key': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M463.743,48.257c-64.343-64.343-169.037-64.342-233.38,0c-43.946,43.946-59.206,108.725-40.185,167.483L4.395,401.524 C1.581,404.337,0,408.153,0,412.132v84.866C0,505.284,6.717,512,15.002,512h84.866c3.98,0,7.794-1.581,10.609-4.395l21.22-21.22 c3.241-3.242,4.823-7.787,4.293-12.341l-2.648-22.783l31.584-2.977c7.172-0.676,12.852-6.355,13.528-13.527l2.979-31.588 l22.785,2.648c4.254,0.497,8.512-0.851,11.71-3.698c3.196-2.846,5.025-6.923,5.025-11.204v-27.938h27.43 c3.949,0,7.738-1.557,10.547-4.333l37.272-36.842c58.772,19.051,123.583,3.794,167.542-40.166 C528.085,217.294,528.085,112.599,463.743,48.257z M442.527,260.421c-37.866,37.865-94.666,49.684-144.703,30.114 c-5.522-2.159-11.796-0.865-16.011,3.302l-39.593,39.136H205.95c-8.285,0-15.002,6.717-15.002,15.002v26.093l-21.28-2.473 c-4.009-0.465-8.035,0.703-11.172,3.241c-3.136,2.539-5.118,6.234-5.497,10.252l-3.253,34.489l-34.486,3.25 c-4.018,0.379-7.713,2.36-10.253,5.497c-2.539,3.136-3.708,7.164-3.242,11.172l3.582,30.804l-11.694,11.697h-63.65v-63.649 l188.097-188.097c4.214-4.214,5.535-10.523,3.364-16.073c-19.572-50.038-7.751-106.836,30.114-144.703 c52.646-52.644,138.304-52.644,190.948,0C495.17,122.118,495.17,207.777,442.527,260.421z\"/></g></g><g><g><path d=\"M421.309,90.69c-17.548-17.549-46.102-17.548-63.649,0c-17.548,17.548-17.548,46.101,0,63.649 c17.547,17.548,46.101,17.55,63.649,0C438.857,136.791,438.857,108.238,421.309,90.69z M400.093,133.123 c-5.849,5.849-15.366,5.85-21.216,0c-5.849-5.849-5.849-15.366,0-21.216c5.865-5.864,15.352-5.864,21.216,0 C405.957,117.771,405.956,127.259,400.093,133.123z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'left': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m21.0607 4.93934c.5857.58579.5857 1.53553 0 2.12132l-8.9394 8.93934 8.9394 8.9393c.5857.5858.5857 1.5356 0 2.1214-.5858.5857-1.5356.5857-2.1214 0l-9.99996-10c-.58579-.5858-.58579-1.5356 0-2.1214l9.99996-9.99996c.5858-.58579 1.5356-.58579 2.1214 0z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'list': `<svg viewBox=\"0 0 25 25\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Todo\"><path d=\"m20.4 12.349a.5.5 0 0 1 -.5.5h-8.612a.5.5 0 0 1 0-1h8.612a.5.5 0 0 1 .5.5zm-9.112-5.549h8.612a.5.5 0 0 0 0-1h-8.612a.5.5 0 0 0 0 1zm-2.9-2.271-2.05 2.418-.84-1.1a.5.5 0 1 0 -.795.606l1.217 1.6a.5.5 0 0 0 .385.2h.013a.5.5 0 0 0 .382-.185l2.451-2.895a.5.5 0 1 0 -.763-.647zm11.512 13.371h-8.612a.5.5 0 0 0 0 1h8.612a.5.5 0 0 0 0-1zm-10.8-5.551a2.249 2.249 0 1 1 -2.251-2.249 2.252 2.252 0 0 1 2.251 2.249zm-1 0a1.249 1.249 0 1 0 -1.251 1.251 1.25 1.25 0 0 0 1.251-1.251zm1 6.053a2.249 2.249 0 1 1 -2.249-2.249 2.251 2.251 0 0 1 2.249 2.247zm-1 0a1.249 1.249 0 1 0 -1.251 1.248 1.25 1.25 0 0 0 1.251-1.25z\"/></g></svg>`,\n 'load': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m12 23c-6.1 0-11-4.9-11-11 0-.6.4-1 1-1s1 .4 1 1c0 5 4 9 9 9s9-4 9-9-4-9-9-9c-.6 0-1-.4-1-1s.4-1 1-1c6.1 0 11 4.9 11 11s-4.9 11-11 11z\" fill=\"rgb(0,0,0)\"/></g></svg>`,\n 'location': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M341.476,338.285c54.483-85.493,47.634-74.827,49.204-77.056C410.516,233.251,421,200.322,421,166 C421,74.98,347.139,0,256,0C165.158,0,91,74.832,91,166c0,34.3,10.704,68.091,31.19,96.446l48.332,75.84 C118.847,346.227,31,369.892,31,422c0,18.995,12.398,46.065,71.462,67.159C143.704,503.888,198.231,512,256,512 c108.025,0,225-30.472,225-90C481,369.883,393.256,346.243,341.476,338.285z M147.249,245.945 c-0.165-0.258-0.337-0.51-0.517-0.758C129.685,221.735,121,193.941,121,166c0-75.018,60.406-136,135-136 c74.439,0,135,61.009,135,136c0,27.986-8.521,54.837-24.646,77.671c-1.445,1.906,6.094-9.806-110.354,172.918L147.249,245.945z M256,482c-117.994,0-195-34.683-195-60c0-17.016,39.568-44.995,127.248-55.901l55.102,86.463 c2.754,4.322,7.524,6.938,12.649,6.938s9.896-2.617,12.649-6.938l55.101-86.463C411.431,377.005,451,404.984,451,422 C451,447.102,374.687,482,256,482z\"/></g></g><g><g><path d=\"M256,91c-41.355,0-75,33.645-75,75s33.645,75,75,75c41.355,0,75-33.645,75-75S297.355,91,256,91z M256,211 c-24.813,0-45-20.187-45-45s20.187-45,45-45s45,20.187,45,45S280.813,211,256,211z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'lock': `<svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Layer_11\" fill=\"rgb(0,0,0)\" data-name=\"Layer 11\"><path d=\"m24 11.57h-.53v-3.1a7.47 7.47 0 1 0 -14.94 0v3.1h-.53a4 4 0 0 0 -4 4v11.43a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-11.43a4 4 0 0 0 -4-4zm-13.47-3.1a5.47 5.47 0 1 1 10.94 0v3.1h-10.94zm15.47 18.53a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2-2v-11.43a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\"/><path d=\"m16 17.926a1.948 1.948 0 0 0 -1.354 3.348v2.371a1 1 0 0 0 1 1h.708a1 1 0 0 0 1-1v-2.371a1.948 1.948 0 0 0 -1.354-3.348z\"/></g></svg>`,\n 'minus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m18 11h-12c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\" fill=\"rgb(0,0,0)\"/></svg>`,\n 'padlock': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M96,437v30c0,16.569,13.431,30,30,30h300c16.569,0,30-13.431,30-30V247c0-16.569-13.431-30-30-30H126c-16.569,0-30,13.431-30,30v30&#10;&#9;&#9;\"/><rect x=\"56\" y=\"277\" style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" width=\"80\" height=\"160\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"136\" y1=\"357\" x2=\"56\" y2=\"357\"/><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M196,217v-62c0-44.183,35.817-80,80-80h0c44.183,0,80,35.817,80,80v62h60v-62c0-77.32-62.68-140-140-140h0&#10;&#9;&#9;c-77.32,0-140,62.68-140,140v62H196z\"/><circle style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" cx=\"276\" cy=\"357\" r=\"30\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"276\" y1=\"387\" x2=\"276\" y2=\"417\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'plus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-rule=\"evenodd\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"><path d=\"m12.0313 4.25c.4142.00054.7496.33677.749.75098l-.0183 14.00002c-.0006.4142-.3368.7495-.751.749s-.7496-.3368-.749-.751l.0183-13.99998c.0006-.41422.3368-.74956.751-.74902z\"/><path d=\"m4.25 12c0-.4142.33579-.75.75-.75h14c.4142 0 .75.3358.75.75s-.3358.75-.75.75h-14c-.41421 0-.75-.3358-.75-.75z\"/></g></svg>`,\n 'question': `<svg id=\"Layer_1\" enable-background=\"new 0 0 64 64\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"LWPOLYLINE\"><g><path d=\"m31.321 38.904c-.006 0-.012 0-.018 0-1.104-.01-1.992-.913-1.982-2.018l.009-1c0-.057.003-.115.009-.172.277-2.909 2.208-4.692 3.761-6.125.526-.486 1.024-.945 1.448-1.424.517-.583 1.267-1.777.478-3.218-.909-1.664-3.129-2.135-4.854-1.74-1.802.412-2.466 1.951-2.702 2.831-.286 1.067-1.383 1.7-2.45 1.415-1.067-.286-1.7-1.383-1.415-2.45.797-2.977 2.865-5.052 5.673-5.695 3.779-.863 7.585.664 9.256 3.719 1.391 2.544 1.01 5.529-.995 7.791-.557.628-1.152 1.178-1.728 1.709-1.435 1.325-2.332 2.211-2.484 3.49l-.008.903c-.008 1.101-.902 1.984-1.998 1.984z\"/></g></g><g id=\"POINT\"><g><path d=\"m31.32 44.9c-.52 0-1.04-.21-1.41-.58-.38-.37-.59-.89-.59-1.42 0-.52.21-1.04.59-1.41.74-.74 2.08-.74 2.82 0 .38.37.59.89.59 1.41 0 .53-.21 1.04-.58 1.42-.38.37-.89.58-1.42.58z\"/></g></g><g id=\"CIRCLE_2_\"><g><path d=\"m31.923 57.997c-2.275 0-4.53-.296-6.703-.881-9.364-2.519-16.696-10.276-18.679-19.763-2.021-9.665 1.709-19.825 9.504-25.884 4.506-3.503 10.189-5.433 16.003-5.433 4.025 0 8.022.936 11.56 2.705 8.737 4.371 14.382 13.503 14.382 23.266 0 7.966-3.759 15.644-10.055 20.538-4.522 3.516-10.209 5.452-16.012 5.452zm.126-47.961c-4.929 0-9.741 1.63-13.548 4.591-6.597 5.128-9.755 13.727-8.044 21.907 1.678 8.025 7.881 14.588 15.803 16.719 1.834.493 3.74.744 5.663.744h.001c4.918 0 9.732-1.637 13.557-4.61 5.329-4.142 8.51-10.639 8.51-17.38 0-8.261-4.777-15.989-12.171-19.688-2.986-1.493-6.364-2.283-9.771-2.283z\"/></g></g></g></svg>`,\n 'right': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m10.9393 4.93934c.5858-.58579 1.5356-.58579 2.1214 0l10 9.99996c.5857.5858.5857 1.5356 0 2.1214l-10 10c-.5858.5857-1.5356.5857-2.1214 0-.5857-.5858-.5857-1.5356 0-2.1214l8.9394-8.9393-8.9394-8.93934c-.5857-.58579-.5857-1.53553 0-2.12132z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'setting': `<svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m489.514 296.695-21.3-17.534c-14.59-12.011-14.564-34.335.001-46.322l21.299-17.534c15.157-12.479 19.034-33.877 9.218-50.882l-42.058-72.846c-9.818-17.004-30.292-24.344-48.674-17.458l-25.835 9.679c-17.696 6.628-37.016-4.551-40.117-23.161l-4.535-27.214c-3.228-19.366-19.821-33.423-39.455-33.423h-84.115c-19.635 0-36.229 14.057-39.456 33.424l-4.536 27.213c-3.107 18.643-22.453 29.778-40.116 23.162l-25.835-9.68c-18.383-6.886-38.855.455-48.674 17.458l-42.057 72.845c-9.817 17.003-5.941 38.402 9.218 50.882l21.299 17.534c14.592 12.012 14.563 34.334 0 46.322l-21.3 17.534c-15.158 12.48-19.035 33.879-9.218 50.882l42.058 72.846c9.818 17.003 30.286 24.344 48.674 17.458l25.834-9.679c17.699-6.631 37.015 4.556 40.116 23.161l4.536 27.212c3.228 19.369 19.822 33.426 39.456 33.426h84.115c19.634 0 36.228-14.057 39.455-33.424l4.535-27.212c3.106-18.638 22.451-29.781 40.117-23.161l25.836 9.678c18.387 6.887 38.856-.454 48.674-17.458l42.059-72.847c9.815-17.003 5.938-38.402-9.219-50.881zm-67.481 103.728-25.835-9.679c-41.299-15.471-86.37 10.63-93.605 54.043l-4.535 27.213h-84.115l-4.536-27.213c-7.249-43.497-52.386-69.484-93.605-54.043l-25.835 9.679-42.057-72.846 21.299-17.534c34.049-28.03 33.978-80.114 0-108.086l-21.299-17.534 42.058-72.846 25.834 9.679c41.3 15.47 86.37-10.63 93.605-54.043l4.535-27.213h84.115l4.535 27.213c7.25 43.502 52.389 69.481 93.605 54.043l25.835-9.679 42.067 72.836s-.003.003-.011.009l-21.298 17.534c-34.048 28.028-33.98 80.113-.001 108.086l21.3 17.534zm-166.033-243.09c-54.405 0-98.667 44.262-98.667 98.667s44.262 98.667 98.667 98.667 98.667-44.262 98.667-98.667-44.262-98.667-98.667-98.667zm0 157.334c-32.349 0-58.667-26.318-58.667-58.667s26.318-58.667 58.667-58.667 58.667 26.318 58.667 58.667-26.318 58.667-58.667 58.667z\"/></svg>`,\n 'settings': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M493.758,234.717h-86.347c-10.076,0-18.242,8.166-18.242,18.242c0,10.076,8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242C512,242.884,503.834,234.717,493.758,234.717z\"/></g></g><g><g><path d=\"M275.458,234.717H18.242C8.166,234.717,0,242.884,0,252.96c0,10.076,8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242C293.701,242.884,285.534,234.717,275.458,234.717z\"/></g></g><g><g><path d=\"M341.131,169.045c-46.275,0-83.914,37.646-83.914,83.914c0,46.275,37.646,83.915,83.914,83.915 c46.268,0,83.914-37.64,83.914-83.915C425.045,206.691,387.405,169.045,341.131,169.045z M341.131,300.39 c-26.153,0-47.43-21.277-47.43-47.43c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.436,21.277,47.436,47.43 C388.567,279.113,367.29,300.39,341.131,300.39z\"/></g></g><g><g><path d=\"M104.589,385.52H18.242C8.166,385.52,0,393.687,0,403.763s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,385.52,104.589,385.52z\"/></g></g><g><g><path d=\"M493.758,385.52H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,385.52,493.758,385.52z\"/></g></g><g><g><path d=\"M170.869,319.848c-46.269,0-83.914,37.64-83.914,83.914s37.646,83.915,83.914,83.915s83.914-37.646,83.914-83.914 S217.138,319.848,170.869,319.848z M170.869,451.199c-26.153,0-47.43-21.277-47.43-47.43c0-26.159,21.277-47.436,47.43-47.436 c26.153,0,47.43,21.277,47.43,47.436C218.299,429.922,197.023,451.199,170.869,451.199z\"/></g></g><g><g><path d=\"M104.589,89.995H18.242C8.166,89.995,0,98.162,0,108.238s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,89.995,104.589,89.995z\"/></g></g><g><g><path d=\"M493.758,89.995H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,89.995,493.758,89.995z\"/></g></g><g><g><path d=\"M170.869,24.323c-46.269,0-83.914,37.646-83.914,83.914c0,46.268,37.646,83.914,83.914,83.914s83.914-37.64,83.914-83.914 C254.784,61.963,217.138,24.323,170.869,24.323z M170.869,155.667c-26.153,0-47.43-21.277-47.43-47.43 c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.43,21.277,47.43,47.43C218.299,134.391,197.023,155.667,170.869,155.667z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'square-rounded-dashed': `<svg fill=\"none\" height=\"25\" viewBox=\"0 0 24 25\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m11.9979 2.0271h.0042c.6824 0 1.3167 0 1.9043.00498.4142.00351.7471.34213.7436.75633s-.3422.74713-.7564.74362c-.5806-.00493-1.2089-.00493-1.8936-.00493s-1.313 0-1.8937.00493c-.41416.00351-.75278-.32942-.75629-.74362s.32941-.75282.74359-.75633c.5876-.00498 1.2219-.00498 1.9043-.00498zm-4.96054.86429c.07573.40723-.19299.79875-.60022.87449-.9433.17544-1.55071.46794-2.01557.93279-.46485.46486-.75735 1.07227-.93279 2.01557-.07574.40723-.46726.67595-.87449.60022-.40723-.07574-.67596-.46727-.60022-.8745.21113-1.13518.60236-2.05746 1.34684-2.80195.74449-.74449 1.66677-1.13572 2.80195-1.34684.40723-.07574.79876.19299.8745.60022zm9.92524 0c.0758-.40723.4673-.67596.8745-.60022 1.1352.21112 2.0575.60236 2.802 1.34684.7445.74449 1.1357 1.66677 1.3468 2.80195.0758.40723-.193.79876-.6002.8745-.4072.07573-.7987-.19299-.8745-.60022-.1754-.9433-.4679-1.55071-.9328-2.01557-.4648-.46485-1.0722-.75735-2.0155-.93279-.4073-.07574-.676-.46726-.6003-.87449zm-14.45129 6.73574c.4142.00351.74713.34213.74362.75637-.00492.5806-.00493 1.2089-.00493 1.8936s.00001 1.3131.00493 1.8937c.00351.4142-.32942.7528-.74362.7563-.41419.0036-.75282-.3294-.75633-.7436-.00498-.5876-.00498-1.2219-.00498-1.9043v-.0042c0-.6824 0-1.3167.00498-1.9043.00351-.41416.34213-.74709.75633-.74357zm18.97739 0c.4142-.00352.7528.32941.7563.74357.005.5878.005 1.2223.005 1.9048v.0039c0 .6823 0 1.3166-.005 1.9041-.0035.4142-.3421.7472-.7563.7436-.4142-.0035-.7471-.3421-.7436-.7563.0049-.5806.0049-1.209.0049-1.8937s0-1.313-.0049-1.8936c-.0035-.41424.3294-.75286.7436-.75637zm-18.87441 7.61257c.40723-.0757.79875.193.87449.6003.17544.9433.46794 1.5507.93279 2.0155.46486.4649 1.07227.7574 2.01557.9328.40723.0758.67595.4673.60022.8745-.07574.4072-.46727.676-.8745.6002-1.13518-.2111-2.05746-.6023-2.80195-1.3468s-1.13571-1.6668-1.34684-2.802c-.07574-.4072.19299-.7987.60022-.8745zm18.77141 0c.4072.0758.676.4673.6002.8745-.2111 1.1352-.6023 2.0575-1.3468 2.802s-1.6668 1.1357-2.802 1.3468c-.4072.0758-.7987-.193-.8745-.6002-.0757-.4072.193-.7987.6003-.8745.9433-.1754 1.5507-.4679 2.0155-.9328.4649-.4648.7574-1.0722.9328-2.0155.0758-.4073.4673-.676.8745-.6003zm-12.03552 4.5261c.00351-.4142.34214-.7471.75632-.7436.5806.0049 1.2089.0049 1.8935.0049.6847 0 1.313 0 1.8936-.0049.4142-.0035.7529.3294.7564.7436s-.3294.7528-.7436.7563c-.5876.005-1.2218.005-1.9041.005h-.0039c-.6824 0-1.3169 0-1.9046-.005-.4142-.0035-.74713-.3421-.74362-.7563z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'time': `<svg id=\"Capa_1\" enable-background=\"new 0 0 359.286 359.286\" height=\"512\" viewBox=\"0 0 359.286 359.286\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g><path d=\"m179.643 359.286c99.043 0 179.643-80.6 179.643-179.643s-80.599-179.643-179.643-179.643-179.643 80.6-179.643 179.643 80.6 179.643 179.643 179.643zm0-335.334c85.869 0 155.691 69.821 155.691 155.691s-69.821 155.691-155.691 155.691-155.691-69.821-155.691-155.691 69.822-155.691 155.691-155.691z\"/><path d=\"m232.039 236.89c2.216 1.796 4.85 2.635 7.485 2.635 3.533 0 7.006-1.557 9.341-4.491 4.132-5.15 3.293-12.695-1.856-16.827l-55.39-44.312v-90.061c0-6.587-5.389-11.976-11.976-11.976s-11.976 5.389-11.976 11.976v95.81c0 3.653 1.677 7.066 4.491 9.341z\"/></g></g></svg>`,\n 'trash': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/></svg>`,\n 'up': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m14.9393 8.93934c.5858-.58579 1.5356-.58579 2.1214 0l10 9.99996c.5857.5858.5857 1.5356 0 2.1214-.5858.5857-1.5356.5857-2.1214 0l-8.9393-8.9394-8.93934 8.9394c-.58579.5857-1.53553.5857-2.12132 0-.58579-.5858-.58579-1.5356 0-2.1214z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'user': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>`,\n 'users': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M437.76,195.421c14.561-14.261,23.04-33.742,23.04-54.621c0-42.346-34.45-76.8-76.8-76.8 c-13.992,0-27.758,3.846-39.825,11.125c-4.033,2.438-5.333,7.679-2.9,11.717c2.433,4.038,7.683,5.325,11.717,2.9 c9.408-5.675,20.125-8.675,31.008-8.675c32.933,0,59.733,26.796,59.733,59.733c0,20.283-10.158,38.979-27.208,50.037 c-14.317,9.392-32.467,12.1-49.042,7.379c-4.483-1.292-9.25,1.325-10.55,5.858c-1.292,4.533,1.333,9.254,5.867,10.55 c6.9,1.975,14.033,2.975,21.2,2.975c13.418,0,26.388-3.66,37.903-10.27c43.806,15.873,73.03,57.232,73.03,104.137v42.667h-77.812 c-6.044-56.996-41.902-106.872-94.205-130.555c16.644-16.946,26.95-40.138,26.95-65.711C349.867,106.108,307.758,64,256,64 c-51.758,0-93.867,42.108-93.867,93.867c0,25.581,10.312,48.78,26.965,65.728c-17.602,7.997-33.927,19.185-47.773,32.952 c-26.543,26.619-42.695,60.784-46.529,97.588H17.067v-42.667c0-29.55,11.542-57.412,32.467-78.425 c11.519-11.446,25.543-20.178,40.643-25.666C101.694,213.96,114.625,217.6,128,217.6c7.167,0,14.3-1,21.2-2.975 c4.533-1.296,7.158-6.017,5.867-10.55c-1.3-4.533-6.067-7.146-10.55-5.858c-16.567,4.729-34.708,2.025-49.083-7.4 c-17.008-11.038-27.167-29.733-27.167-50.017c0-32.937,26.8-59.733,59.733-59.733c10.883,0,21.6,3,31.008,8.675 c4.05,2.425,9.275,1.125,11.717-2.9c2.433-4.037,1.133-9.279-2.9-11.717C155.758,67.846,141.992,64,128,64 c-42.35,0-76.8,34.454-76.8,76.8c0,20.863,8.465,40.329,22.984,54.577c-13.533,6.291-26.032,14.976-36.717,25.59 C13.308,245.233,0,277.371,0,311.467v51.2c0,4.713,3.817,8.533,8.533,8.533h85.333v68.267c0,4.713,3.817,8.533,8.533,8.533h307.2 c4.717,0,8.533-3.821,8.533-8.533V371.2h85.333c4.717,0,8.533-3.821,8.533-8.533v-51.2 C512,261.012,482.678,216.128,437.76,195.421z M179.2,157.867c0-42.346,34.45-76.8,76.8-76.8c42.35,0,76.8,34.454,76.8,76.8 s-34.45,76.8-76.8,76.8C213.65,234.667,179.2,200.212,179.2,157.867z M401.067,430.933H110.933V371.2 c0-38.692,15.083-75.129,42.45-102.579c14.417-14.34,31.895-25.463,50.634-32.659c14.895,9.947,32.767,15.771,51.983,15.771 c19.248,0,37.151-5.841,52.06-15.818c55.778,21.431,93.007,75.205,93.007,135.285V430.933z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'world': `<svg height=\"512pt\" viewBox=\"0 0 512 512\" width=\"512pt\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m256 512c-141.160156 0-256-114.839844-256-256s114.839844-256 256-256 256 114.839844 256 256-114.839844 256-256 256zm0-494.933594c-131.746094 0-238.933594 107.1875-238.933594 238.933594s107.1875 238.933594 238.933594 238.933594 238.933594-107.1875 238.933594-238.933594-107.1875-238.933594-238.933594-238.933594zm0 0\"/><path d=\"m284.980469 438.664062c-11.597657 0-22.511719-6.980468-27.035157-18.296874l-9.351562-23.378907c-.488281-1.203125-.886719-2.457031-1.210938-3.738281l-16.179687-64.726562c-.214844-.851563-.523437-1.671876-.914063-2.457032l-8.6875-17.363281c-2.535156-5.078125-8.140624-7.621094-13.660156-6.289063l-8.261718 2.0625c-8.761719 2.1875-18.191407.136719-25.234376-5.503906l-27.007812-21.597656c-6.9375-5.5625-10.914062-13.839844-10.914062-22.714844v-9.140625c0-6.101562 1.878906-11.9375 5.421874-16.894531l32.6875-45.765625c5.453126-7.636719 14.304688-12.183594 23.671876-12.183594h17.863281c5.289062 0 10.46875 1.441407 14.972656 4.15625l30.953125 18.566407c2.566406 1.554687 5.605469 2.082031 8.539062 1.484374l18.511719-3.710937c13.421875-2.6875 27.058594 4.496094 32.441407 17.074219l16.410156 38.289062c.992187 2.304688 2.714844 4.285156 4.855468 5.554688l16.8125 10.097656c7.191407 4.316406 12.175782 11.535156 13.660157 19.789062 1.484375 8.269532-.671875 16.765626-5.914063 23.320313l-14.933594 18.671875c-1.695312 2.125-2.636718 4.796875-2.636718 7.507812v26.941407c0 7.660156-3.105469 15.164062-8.523438 20.574219l-9.25 9.25c-.699218.699218-1.304687 1.476562-1.808594 2.3125l-20.386718 33.980468c-3.566406 5.9375-9.15625 10.425782-15.734375 12.617188-3.011719 1.035156-6.109375 1.511718-9.15625 1.511718zm-74.003907-153.695312c10.804688 0 20.855469 6.019531 25.898438 16.105469l8.6875 17.363281c.949219 1.894531 1.691406 3.902344 2.203125 5.957031l16.179687 64.726563c.128907.519531.296876 1.023437.496094 1.519531l9.359375 23.40625c2.363281 5.886719 8.917969 8.933594 14.96875 6.9375 2.710938-.914063 5.023438-2.765625 6.507813-5.230469l20.378906-33.972656c1.21875-2.023438 2.6875-3.90625 4.371094-5.589844l9.257812-9.265625c2.242188-2.238281 3.523438-5.335937 3.523438-8.5v-26.941406c0-6.578125 2.261718-13.019531 6.375-18.164063l14.941406-18.671874c2.203125-2.75 3.0625-6.171876 2.449219-9.636719-.625-3.464844-2.628907-6.371094-5.648438-8.183594l-16.804687-10.085937c-5.261719-3.148438-9.332032-7.808594-11.765625-13.472657l-16.417969-38.296875c-2.226562-5.199218-7.859375-8.148437-13.40625-7.058594l-18.515625 3.710938c-7.117187 1.445312-14.457031.148438-20.679687-3.582031l-30.964844-18.578125c-1.871094-1.125-4.003906-1.714844-6.1875-1.714844h-17.859375c-3.875 0-7.527344 1.886719-9.78125 5.035156l-32.691407 45.765625c-1.464843 2.046875-2.242187 4.460938-2.242187 6.980469v9.136719c0 3.671875 1.644531 7.09375 4.511719 9.394531l27 21.589844c2.910156 2.332031 6.820312 3.199218 10.4375 2.28125l8.25-2.058594c2.390625-.613281 4.796875-.90625 7.167968-.90625zm0 0\"/><path d=\"m384 426.667969c-2.253906 0-4.421875-.890625-6.03125-2.5l-17.070312-17.066407c-2.011719-2.015624-2.890626-4.910156-2.328126-7.707031l8.535157-42.667969c.332031-1.644531 1.140625-3.164062 2.328125-4.359374l25.601562-25.601563c2.226563-2.226563 5.503906-3.054687 8.507813-2.132813 3.011719.90625 5.273437 3.40625 5.886719 6.496094l8.53125 42.664063c.417968 2.082031.042968 4.242187-1.046876 6.070312l-25.601562 42.664063c-1.347656 2.253906-3.667969 3.753906-6.269531 4.078125-.351563.035156-.703125.0625-1.042969.0625zm-7.808594-28.410157 6.109375 6.121094 18.28125-30.464844-4.761719-23.800781-12.503906 12.503907zm0 0\"/><path d=\"m477.832031 237.074219c-13.40625 0-25.402343-9.199219-28.800781-22.65625-2.003906-7.953125-4.511719-14.773438-7.441406-20.285157-1.859375-3.5-5.203125-5.734374-9.1875-6.144531-4.363282-.433593-8.613282 1.339844-11.4375 4.753907-17.175782 20.761718-33.910156 30.363281-49.78125 28.570312-19.234375-2.203125-28.570313-20.445312-28.960938-21.222656-39.546875-79.097656-110.191406-72.261719-110.890625-72.132813-.316406.035157-.625.050781-.941406.050781-4.742187 0-10.007813 1.144532-15.632813 3.386719-18.859374 7.546875-39.695312 1.886719-51.855468-14.070312-11.914063-15.648438-11.84375-35.992188.179687-51.8125l.988281-1.289063c5.992188-7.699218 15.15625-12.597656 25.121094-13.40625 32.171875-2.613281 56.089844-18.089844 71.101563-46.011718 1.550781-2.894532 4.640625-4.660157 7.917969-4.480469 124.570312 5.855469 226.226562 99.890625 241.714843 223.597656.554688 4.457031-2.429687 8.585937-6.84375 9.429687-6.902343 1.339844-14.089843 2.511719-21.359375 3.472657-1.304687.164062-2.609375.25-3.890625.25zm-46.746093-66.21875c1.015624 0 2.03125.058593 3.046874.160156 9.746094.992187 17.953126 6.503906 22.527344 15.105469 3.578125 6.722656 6.582032 14.839844 8.917969 24.113281 1.605469 6.351563 7.570313 10.515625 13.882813 9.667969 4.175781-.554688 8.320312-1.183594 12.390624-1.867188-17.457031-109.78125-108.046874-192.769531-219.238281-200.371094-13.105469 21.878907-37.589843 46.539063-82.03125 50.160157-5.210937.425781-9.964843 2.933593-13.046875 6.894531l-.84375 1.089844c-8.824218 11.605468-5.878906 23.707031-.203125 31.171875 5.75 7.554687 17.558594 14.339843 31.9375 8.570312 7.492188-2.996093 14.738281-4.539062 21.539063-4.609375 3.449218-.316406 22.84375-1.519531 46.957031 6.878906 23.878906 8.3125 57.242187 27.996094 80.566406 74.640626.023438.058593 5.707031 10.835937 15.734375 11.914062 9.632813 1.203125 21.5625-6.742188 34.59375-22.503906 5.8125-7.023438 14.335938-11.015625 23.269532-11.015625zm0 0\"/><path d=\"m30.632812 238.933594h-20.785156c-2.414062 0-4.71875-1.023438-6.332031-2.816406-1.613281-1.792969-2.398437-4.179688-2.148437-6.585938 4.929687-47.96875 23.363281-93.457031 53.324218-131.570312 2.5-3.179688 6.894532-4.171876 10.519532-2.351563l32.035156 16.015625c13.386718 6.699219 22.859375 19.515625 25.316406 34.285156l.660156 3.902344c3.402344 20.460938-6.769531 40.445312-25.320312 49.722656l-16.691406 8.34375c-4.640626 2.324219-8.617188 5.839844-11.503907 10.15625-8.726562 13.082032-23.328125 20.898438-39.074219 20.898438zm-11.144531-17.066406h11.144531c10.019532 0 19.320313-4.976563 24.875-13.3125 4.523438-6.792969 10.777344-12.304688 18.074219-15.957032l16.691407-8.347656c11.8125-5.894531 18.289062-18.625 16.121093-31.648438l-.65625-3.898437c0-.011719 0-.011719 0-.011719-1.570312-9.402344-7.597656-17.550781-16.121093-21.816406l-25.71875-12.859375c-23.59375 31.863281-38.820313 68.84375-44.410157 107.851563zm0 0\"/><path d=\"m104.378906 460.039062c-1.867187 0-3.710937-.605468-5.238281-1.789062-55.910156-43.4375-91.648437-108.597656-98.03125-178.773438-.339844-3.6875 1.742187-7.160156 5.136719-8.621093l8.933594-3.832031c17.878906-7.660157 38.316406-3.71875 52.070312 10.035156l15.8125 15.8125c4.234375 4.234375 9.574219 7.09375 15.445312 8.269531 22.035157 4.414063 38.015626 23.910156 38.015626 46.378906v2.363281c0 12.859376-3.761719 25.300782-10.894532 35.984376-4.226562 6.332031-6.894531 13.6875-7.742187 21.242187l-5.035157 45.34375c-.339843 3.066406-2.3125 5.71875-5.152343 6.921875-1.066407.445312-2.191407.664062-3.320313.664062zm-85.632812-175.972656c6.828125 58.019532 35.132812 111.929688 78.902344 150.765625l3.285156-29.617187c1.140625-10.257813 4.769531-20.226563 10.496094-28.828125 5.253906-7.875 8.027343-17.039063 8.027343-26.511719v-2.363281c0-14.363281-10.214843-26.828125-24.300781-29.644531-9.191406-1.835938-17.554688-6.308594-24.167969-12.9375l-15.8125-15.8125c-8.796875-8.78125-21.851562-11.304688-33.277343-6.417969zm0 0\"/></svg>`,\n 'x': `<svg id=\"Icons\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m4.59 59.41a2 2 0 0 0 2.83 0l24.58-24.58 24.59 24.58a2 2 0 0 0 2.83-2.83l-24.59-24.58 24.58-24.59a2 2 0 0 0 -2.83-2.83l-24.58 24.59-24.59-24.58a2 2 0 0 0 -2.82 2.82l24.58 24.59-24.58 24.59a2 2 0 0 0 0 2.82z\"/></svg>`,\n};\n\nexport type CoreIconName = keyof typeof CORE_ICONS | (string & {});\n","import { type Provider } from '@angular/core';\nimport { CORE_ICONS } from './core-icons';\nimport { provideCoarIconMapSource } from './coar-icon-registry';\n\nexport const COAR_BUILTIN_ICON_SOURCE_KEY = 'coar-builtin' as const;\n\n/**\n * Overrides (and/or adds) built-in icons while keeping the built-in set as a base.\n *\n * This registers a map source under the fixed key `coar-builtin`, so it replaces the\n * built-in fallback source inside `CoarIconService`.\n */\nexport function provideCoarIconBuiltInOverrides(\n overrides: Readonly<Record<string, string>>\n): Provider {\n return provideCoarIconMapSource({\n key: COAR_BUILTIN_ICON_SOURCE_KEY,\n icons: {\n ...CORE_ICONS,\n ...overrides,\n },\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport {\n COAR_DEFAULT_ICON_SOURCE_KEY,\n COAR_ICON_SOURCE_ENTRY,\n type CoarIconSource,\n type CoarIconSourceEntry,\n} from './coar-icon-registry';\nimport { CORE_ICONS } from './core-icons';\nimport { COAR_BUILTIN_ICON_SOURCE_KEY } from './coar-icon-built-in-registry';\n\nexport type CoarIconRegisteredSource = Readonly<{\n key: string;\n isDefault: boolean;\n canProvideIconKeys: boolean;\n}>;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoarIconService {\n private readonly builtInSource: CoarIconSource = {\n getIcon: (name) => of(CORE_ICONS[name as keyof typeof CORE_ICONS] ?? null),\n getAvailableIconKeys: () => of(Object.keys(CORE_ICONS).sort()),\n };\n\n private readonly sourceEntries = [\n { key: COAR_BUILTIN_ICON_SOURCE_KEY, source: this.builtInSource },\n ...(((inject(COAR_ICON_SOURCE_ENTRY, { optional: true }) ?? []) as CoarIconSourceEntry[]) ??\n []),\n ] as const;\n private readonly defaultSourceOverrides = (inject(COAR_DEFAULT_ICON_SOURCE_KEY, {\n optional: true,\n }) ?? []) as string[] | null;\n\n private readonly sourceByKey = new Map(\n this.sourceEntries.map((entry) => [entry.key, entry.source] as const)\n );\n\n /**\n * Get an icon by name from a specific icon source.\n *\n * - If `sourceKey` is omitted, the default source is used.\n * - If no source is configured, this throws to make misconfiguration obvious.\n */\n getIcon(name: string, sourceKey?: string): Observable<string | null> {\n const source = this.getSourceOrThrow(sourceKey);\n return source.getIcon(name);\n }\n\n /**\n * List all registered icon sources.\n *\n * This is useful for UIs that allow users to browse icons grouped by source.\n */\n getRegisteredSources(): ReadonlyArray<CoarIconRegisteredSource> {\n const defaultKey = this.getDefaultSourceKeyOrThrow();\n return Array.from(this.sourceByKey.entries()).map(([key, source]) => ({\n key,\n isDefault: key === defaultKey,\n canProvideIconKeys: typeof source.getAvailableIconKeys === 'function',\n }));\n }\n\n /**\n * Get the available icon keys from a specific source.\n *\n * Throws if the source does not support listing keys.\n */\n getAvailableIconKeys(sourceKey?: string): Observable<readonly string[]> {\n const entry = this.getSourceEntryOrThrow(sourceKey);\n if (!entry.source.getAvailableIconKeys) {\n throw new Error(\n `Coar icon source \"${entry.key}\" does not support listing available icon keys.`\n );\n }\n return entry.source.getAvailableIconKeys();\n }\n\n clearCache(): void {\n for (const source of this.sourceByKey.values()) {\n source.clearCache?.();\n }\n }\n\n clearIconCache(name: string): void {\n for (const source of this.sourceByKey.values()) {\n source.clearIconCache?.(name);\n }\n }\n\n private getSourceOrThrow(sourceKey?: string): CoarIconSource {\n const effectiveKey = sourceKey ?? this.getDefaultSourceKeyOrThrow();\n const source = this.sourceByKey.get(effectiveKey);\n if (!source) {\n throw new Error(`Unknown Coar icon source key: \"${effectiveKey}\".`);\n }\n\n return source;\n }\n\n private getSourceEntryOrThrow(sourceKey?: string): CoarIconSourceEntry {\n const effectiveKey = sourceKey ?? this.getDefaultSourceKeyOrThrow();\n const source = this.sourceByKey.get(effectiveKey);\n if (!source) {\n throw new Error(`Unknown Coar icon source key: \"${effectiveKey}\".`);\n }\n\n return { key: effectiveKey, source };\n }\n\n private getDefaultSourceKeyOrThrow(): string {\n const overrideKey = this.defaultSourceOverrides\n ? this.defaultSourceOverrides[this.defaultSourceOverrides.length - 1]\n : undefined;\n if (overrideKey) {\n if (!this.sourceByKey.has(overrideKey)) {\n throw new Error(\n `Default Coar icon source key \"${overrideKey}\" was provided but no source with that key is registered.`\n );\n }\n return overrideKey;\n }\n\n return COAR_BUILTIN_ICON_SOURCE_KEY;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n signal,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { CoarIconService } from './coar-icon.service';\n\nexport type CoarIconSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'auto';\n\n/**\n * COAR Icon Component\n *\n * Icon component supporting DI-provided icon registries.\n *\n * Usage:\n * ```html\n * <coar-icon name=\"settings\" size=\"m\"></coar-icon>\n * ```\n *\n * Size tokens:\n * - xs = 12px\n * - s = 16px\n * - m = 20px (default)\n * - l = 24px\n * - xl = 32px\n * - auto = fills parent container (use padding on parent to control)\n */\n@Component({\n selector: 'coar-icon',\n standalone: true,\n imports: [],\n template: `\n @if (name()) {\n @if (sanitizedSvg(); as svg) {\n <div\n class=\"coar-icon\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [class.coar-icon--spin]=\"spin()\"\n [style.transform]=\"'rotate(' + rotate() + 'deg)'\"\n [style.color]=\"color()\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n [style.transition]=\"getRotateTransitionValue()\"\n [innerHTML]=\"svg\"\n ></div>\n } @else if (isLoading()) {\n <div\n class=\"coar-icon coar-icon--loading\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n ></div>\n }\n }\n @if (label()) {\n <span class=\"coar-icon__label\">{{ label() }}</span>\n } @else {\n <span class=\"coar-icon__label\">\n <ng-content></ng-content>\n </span>\n }\n `,\n styleUrl: './coar-icon.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.icon-name]': 'name()',\n },\n})\nexport class CoarIconComponent {\n private readonly iconService = inject(CoarIconService);\n private readonly sanitizer = inject(DomSanitizer);\n\n private iconLoadVersion = 0;\n\n /**\n * Icon identifier.\n * Examples: \"settings\", \"user\"\n */\n name = input<string>();\n\n /**\n * Optional icon source key.\n *\n * - If omitted, the default source is used.\n * - If multiple sources are registered, this can be used to target a specific one.\n */\n source = input<string | undefined>();\n\n /**\n * Icon size. Defaults to 'm' (20px).\n * Can be a preset token (xs, s, m, l, xl, auto) or a custom CSS value (e.g., '42px', '3rem').\n */\n size = input<CoarIconSize | string>('m');\n\n /**\n * Rotation angle in degrees (0, 90, 180, 270, or any number).\n */\n rotate = input<number>(0);\n\n /**\n * Rotation transition animation.\n * - Empty/undefined: No animation\n * - Number: Duration in milliseconds (e.g., 300)\n * - String: Full CSS transition value (e.g., '0.3s ease-in-out', '500ms cubic-bezier(0.4, 0, 0.2, 1)')\n */\n rotateTransition = input<number | string>();\n\n /**\n * Enable continuous spinning animation.\n */\n spin = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Icon color. Can be any valid CSS color value.\n * Examples: 'red', '#ff0000', 'rgb(255, 0, 0)', 'var(--coar-text-semantic-error-bold)'\n * Use 'inherit' to inherit the parent element's color.\n */\n color = input<string>('inherit');\n\n /**\n * Optional text label to display next to the icon.\n */\n label = input<string | number>();\n\n /**\n * Signal holding the sanitized SVG HTML ready for rendering.\n */\n protected sanitizedSvg = signal<SafeHtml | null>(null);\n\n /**\n * Signal indicating whether an icon is currently being loaded.\n */\n protected isLoading = signal(false);\n\n /**\n * Check if the size is a preset token (xs, s, m, l, xl, auto).\n */\n protected isPresetSize(size: string): boolean {\n return ['xs', 's', 'm', 'l', 'xl', 'auto'].includes(size);\n }\n\n /**\n * Compute the CSS transition value for rotation.\n */\n protected getRotateTransitionValue(): string | null {\n const transition = this.rotateTransition();\n if (!transition) return null;\n\n if (typeof transition === 'number') {\n return `transform ${transition}ms ease-in-out`;\n }\n\n if (!transition.includes('transform')) {\n return `transform ${transition}`;\n }\n\n return transition;\n }\n\n constructor() {\n effect(() => {\n const iconName = this.name();\n const sourceKey = this.source();\n if (!iconName) {\n this.iconLoadVersion++;\n this.sanitizedSvg.set(null);\n this.isLoading.set(false);\n return;\n }\n\n const loadVersion = ++this.iconLoadVersion;\n\n // Clear any previously rendered SVG so the template can show the loading placeholder.\n this.sanitizedSvg.set(null);\n this.isLoading.set(true);\n\n const subscription = this.resolveIcon$(iconName, sourceKey)\n .pipe(\n finalize(() => {\n if (loadVersion === this.iconLoadVersion) {\n this.isLoading.set(false);\n }\n })\n )\n .subscribe((svg) => {\n if (loadVersion !== this.iconLoadVersion) {\n return;\n }\n\n if (!svg) {\n this.sanitizedSvg.set(null);\n return;\n }\n\n this.sanitizedSvg.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n });\n\n // Important: cancel in-flight icon loads if `name` changes or the component is destroyed.\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Resolve an icon name to an SVG string.\n *\n * This is kept as a single observable chain so callers can cancel it.\n */\n private resolveIcon$(name: string, sourceKey: string | undefined): Observable<string | null> {\n return this.iconService.getIcon(name, sourceKey).pipe(catchError(() => of(null)));\n }\n}\n","import { forwardRef, type Provider, type Type, signal } from '@angular/core';\r\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function coarProvideValueAccessor(type: () => Type<ControlValueAccessor>): Provider {\r\n return {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(type),\r\n multi: true,\r\n };\r\n}\r\n\r\nexport abstract class CoarControlValueAccessor<T> implements ControlValueAccessor {\r\n protected readonly cvaDisabled = signal(false);\r\n\r\n protected cvaOnChange: (value: T) => void = () => undefined;\r\n protected cvaOnTouched: () => void = () => undefined;\r\n\r\n public registerOnChange(fn: (value: T) => void): void {\r\n this.cvaOnChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: () => void): void {\r\n this.cvaOnTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n public abstract writeValue(value: T | null): void;\r\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarTextInputSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-text-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-text-input.component.html',\n styleUrl: './coar-text-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTextInputComponent)],\n host: {\n '[class.coar-text-input--xs]': 'size() === \"xs\"',\n '[class.coar-text-input--s]': 'size() === \"s\"',\n '[class.coar-text-input--m]': 'size() === \"m\"',\n '[class.coar-text-input--l]': 'size() === \"l\"',\n '[class.coar-text-input--multiline]': 'isMultiline()',\n },\n})\nexport class CoarTextInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /** Current input value (two-way bindable with [(value)]) */\n value = model<string>('');\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarTextInputSize>('m');\n\n /** Number of visible text rows (1 = single-line input, 2+ = textarea) */\n rows = input<number>(1);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute */\n autocomplete = input<string>('');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when input value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected inputRef =\n viewChild<ElementRef<HTMLInputElement | HTMLTextAreaElement>>('inputElement');\n\n protected isMultiline = computed(() => this.rows() > 1);\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-text-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const newValue = target.value;\n this.value.set(newValue);\n this.valueChange.emit(newValue);\n this.cvaOnChange(newValue);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-text-input-clear\" [class.coar-text-input-clear--multiline]=\"isMultiline()\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n HostListener,\n afterNextRender,\n DestroyRef,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent, CoarIconSize } from '../../display/icon/coar-icon.component';\nimport { CoarControlValueAccessor, coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { Maskito } from '@maskito/core';\nimport { maskitoNumberOptionsGenerator } from '@maskito/kit';\nimport { of } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { CoarLocalizationService } from '@cocoar/localization';\n\n/** Configuration for number formatting */\nexport interface NumberFormatConfig {\n readonly decimal: string;\n readonly thousand: string;\n}\n\nexport type CoarNumberInputSize = 'xs' | 's' | 'm' | 'l';\nexport type CoarNumberInputStepperButtons = 'none' | 'increment' | 'decrement' | 'both';\n\n/**\n * Transform function for stepperButtons input.\n * Accepts boolean (attribute pattern) or explicit string values.\n * - true | '' (attribute present) → 'both'\n * - false | 'false' → 'none'\n * - 'increment' | 'decrement' | 'both' | 'none' → validated and passed through\n */\nfunction transformStepperButtons(value: boolean | string): CoarNumberInputStepperButtons {\n // Boolean false or string 'false' → no buttons\n if (value === false || value === 'false') return 'none';\n\n // Boolean true or empty string (attribute present) → both buttons\n if (value === true || value === '' || value === 'true') return 'both';\n\n // Validate and pass through string values\n if (value === 'increment' || value === 'decrement' || value === 'both' || value === 'none') {\n return value;\n }\n\n // Invalid value → default to none\n return 'none';\n}\n\n@Component({\n selector: 'coar-number-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-number-input.component.html',\n styleUrl: './coar-number-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarNumberInputComponent)],\n host: {\n '[class.coar-number-input--xs]': 'size() === \"xs\"',\n '[class.coar-number-input--s]': 'size() === \"s\"',\n '[class.coar-number-input--m]': 'size() === \"m\"',\n '[class.coar-number-input--l]': 'size() === \"l\"',\n },\n})\nexport class CoarNumberInputComponent extends CoarControlValueAccessor<number | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(navigator.language),\n {\n initialValue: this.localizationService?.languageState.value ?? navigator.language,\n }\n );\n private maskitoInstance?: Maskito;\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current numeric value.\n * Using model() for two-way binding support.\n */\n value = model<number | null>(null);\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarNumberInputSize>('m');\n\n /** Minimum allowed value */\n min = input<number | undefined>(undefined);\n\n /** Maximum allowed value */\n max = input<number | undefined>(undefined);\n\n /** Step increment for arrows and keyboard */\n step = input<number>(1);\n\n /** Number of decimal places to display */\n decimals = input<number>(0);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Controls visibility of increment/decrement stepper buttons.\n * Supports both boolean attribute pattern and granular string control:\n * - No attribute → no buttons\n * - `stepperButtons` (attribute) → both buttons\n * - `stepperButtons=\"increment\"` → only increment\n * - `stepperButtons=\"decrement\"` → only decrement\n * - `stepperButtons=\"both\"` → both buttons (explicit)\n * - `stepperButtons=\"none\"` → no buttons (explicit)\n */\n stepperButtons = input<CoarNumberInputStepperButtons, boolean | string>('none', {\n transform: transformStepperButtons,\n });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /**\n * Locale identifier for number formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Number format configuration (decimal and thousand separators).\n * If not provided, uses locale service default or falls back to { decimal: '.', thousand: '' }.\n */\n numberFormat = input<NumberFormatConfig>();\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Emits when input value changes */\n valueChange = output<number | null>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected displayValue = signal<string>('');\n protected isFocused = signal(false);\n protected isDragging = signal(false);\n protected dragStartX = signal(0);\n protected dragStartValue = signal(0);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-number-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n protected iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<CoarNumberInputSize, CoarIconSize> = {\n xs: 'xs',\n s: 'xs',\n m: 's',\n l: 'm',\n };\n return sizeMap[this.size()];\n });\n\n protected showIncrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'increment' || mode === 'both';\n });\n\n protected showDecrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'decrement' || mode === 'both';\n });\n\n protected canDecrement = computed(() => {\n const val = this.value();\n const minVal = this.min();\n if (val === null) return true;\n if (minVal === undefined) return true;\n return val > minVal;\n });\n\n protected canIncrement = computed(() => {\n const val = this.value();\n const maxVal = this.max();\n if (val === null) return true;\n if (maxVal === undefined) return true;\n return val < maxVal;\n });\n\n constructor() {\n super();\n // Sync displayValue when value changes from outside\n effect(() => {\n const newValue = this.value();\n this.displayValue.set(this.formatValue(newValue));\n });\n\n // Initialize Maskito for number validation\n afterNextRender(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (inputElement) {\n this.initializeMaskito(inputElement);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n });\n }\n\n /**\n * Cached number format configuration with priority chain:\n * 1. numberFormat input (explicit config object)\n * 2. Browser Intl.NumberFormat detection with locale\n * 3. Hardcoded fallback { decimal: '.', thousand: '' }\n */\n private readonly resolvedNumberFormat = computed<NumberFormatConfig>(() => {\n // Priority 1: Explicit config object\n const format = this.numberFormat();\n if (format) {\n return format;\n }\n\n // Priority 2: Use Intl.NumberFormat to detect format for the locale\n const locale = this.locale() ?? this.currentLanguage() ?? navigator.language;\n if (locale) {\n try {\n const formatter = new Intl.NumberFormat(locale);\n const parts = formatter.formatToParts(1000.1);\n return {\n decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.',\n thousand: parts.find((p) => p.type === 'group')?.value ?? '',\n };\n } catch {\n // Intl failed, fall through to fallback\n }\n }\n\n // Priority 3: Fallback\n return { decimal: '.', thousand: '' };\n });\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.resolvedNumberFormat();\n\n const maskOptions = maskitoNumberOptionsGenerator({\n decimalSeparator: format.decimal,\n thousandSeparator: format.thousand,\n maximumFractionDigits: this.decimals(),\n min: this.min(),\n max: this.max(),\n });\n\n this.maskitoInstance = new Maskito(inputElement, maskOptions);\n }\n\n protected formatValue(value: number | null): string {\n if (value === null) return '';\n const format = this.resolvedNumberFormat();\n // Format with locale-specific decimal separator\n const formatted = value.toFixed(this.decimals());\n // Replace period with the configured decimal separator\n return formatted.replace('.', format.decimal);\n }\n\n /**\n * Parse locale-formatted string (respects component's decimal/thousand separators).\n * Used when user types or pastes into the input field.\n */\n protected parseValue(str: string): number | null {\n if (str.trim() === '') return null;\n const format = this.resolvedNumberFormat();\n // Remove thousand separators first (before converting decimal)\n const withoutThousands = format.thousand ? str.replace(new RegExp(`\\\\${format.thousand}`, 'g'), '') : str;\n // Replace locale-specific decimal separator with period for parseFloat\n const normalized = withoutThousands.replace(format.decimal, '.');\n const parsed = parseFloat(normalized);\n if (isNaN(parsed)) return null;\n return parsed;\n }\n\n protected clampValue(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n let clamped = value;\n if (minVal !== undefined && clamped < minVal) clamped = minVal;\n if (maxVal !== undefined && clamped > maxVal) clamped = maxVal;\n return clamped;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.displayValue.set(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.commitValue();\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected commitValue(): void {\n const parsed = this.parseValue(this.displayValue());\n if (parsed !== null) {\n const clamped = this.clampValue(parsed);\n const rounded = parseFloat(clamped.toFixed(this.decimals()));\n this.value.set(rounded);\n // Don't reformat - Maskito already has the value formatted correctly\n // this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n } else {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n }\n\n public writeValue(value: number | null): void {\n this.value.set(value);\n }\n\n protected onClear(): void {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected increment(): void {\n if (this.isDisabled() || this.readonly() || !this.canIncrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current + this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected decrement(): void {\n if (this.isDisabled() || this.readonly() || !this.canDecrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current - this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.increment();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.decrement();\n }\n }\n\n // Figma-style drag to change value\n protected onDragStart(event: MouseEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n event.preventDefault();\n this.isDragging.set(true);\n this.dragStartX.set(event.clientX);\n this.dragStartValue.set(this.value() ?? 0);\n document.body.style.cursor = 'ew-resize';\n }\n\n @HostListener('document:mousemove', ['$event'])\n protected onDragMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n const deltaX = event.clientX - this.dragStartX();\n // Sensitivity: 1 step per 10 pixels\n const sensitivity = 10;\n const stepCount = Math.round(deltaX / sensitivity);\n const newValue = this.clampValue(this.dragStartValue() + stepCount * this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n @HostListener('document:mouseup')\n protected onDragEnd(): void {\n if (this.isDragging()) {\n this.isDragging.set(false);\n document.body.style.cursor = '';\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <button type=\"button\" class=\"coar-number-input-clear\" [class.coar-number-input-clear--hidden]=\"!showClearButton()\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarPasswordInputSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-password-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-password-input.component.html',\n styleUrl: './coar-password-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPasswordInputComponent)],\n host: {\n '[class.coar-password-input--xs]': 'size() === \"xs\"',\n '[class.coar-password-input--s]': 'size() === \"s\"',\n '[class.coar-password-input--m]': 'size() === \"m\"',\n '[class.coar-password-input--l]': 'size() === \"l\"',\n },\n})\nexport class CoarPasswordInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current password value.\n * Using model() for two-way binding support.\n */\n value = model<string>('');\n\n /** Input size - matches other form elements for consistent layouts */\n size = input<CoarPasswordInputSize>('m');\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute for browser autofill */\n autocomplete = input<string>('current-password');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when password value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected showPassword = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected inputType = computed(() => (this.showPassword() ? 'text' : 'password'));\n protected toggleIcon = computed(() => (this.showPassword() ? 'eye-open' : 'eye-closed'));\n protected toggleAriaLabel = computed(() =>\n this.showPassword() ? 'Hide password' : 'Show password'\n );\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-password-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.valueChange.emit(target.value);\n this.cvaOnChange(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected togglePasswordVisibility(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.showPassword.update((v) => !v);\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-password-input-clear\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Toggle Visibility -->\n <button type=\"button\" class=\"coar-password-input-toggle\" tabindex=\"-1\" [attr.aria-label]=\"toggleAriaLabel()\" (click)=\"togglePasswordVisibility()\">\n <coar-icon [name]=\"toggleIcon()\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarCheckboxSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-checkbox',\n standalone: true,\n imports: [],\n templateUrl: './coar-checkbox.component.html',\n styleUrl: './coar-checkbox.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarCheckboxComponent)],\n host: {\n '[class.coar-checkbox--xs]': 'size() === \"xs\"',\n '[class.coar-checkbox--s]': 'size() === \"s\"',\n '[class.coar-checkbox--m]': 'size() === \"m\"',\n '[class.coar-checkbox--l]': 'size() === \"l\"',\n '[class.coar-checkbox--disabled]': 'isDisabled()',\n '[class.coar-checkbox--readonly]': 'readonly()',\n '[class.coar-checkbox--error]': 'hasError()',\n },\n})\nexport class CoarCheckboxComponent extends CoarControlValueAccessor<boolean | undefined> {\n /** Label text displayed next to the checkbox */\n label = input<string>('');\n\n /**\n * Checkbox checked state: true for checked, false for unchecked, undefined for pristine.\n * Using model() for two-way binding support.\n */\n checked = model<boolean | undefined>(undefined);\n\n /**\n * Sets the checkbox to indeterminate state (visual only).\n * Typically used for \"select all\" checkboxes when some children are selected.\n * The indeterminate state is cleared when the user clicks the checkbox.\n */\n indeterminate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Disables the checkbox (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Prevents changes but keeps normal appearance and focus */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the checkbox */\n error = input<string>('');\n\n /** Hint text displayed below the checkbox */\n hint = input<string>('');\n\n /** Checkbox size - matches input/button heights for consistent layouts */\n size = input<CoarCheckboxSize>('m');\n\n /** HTML id attribute for the checkbox element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Value submitted with form when checked */\n value = input<string>('');\n\n // Note: checkedChange output is implicitly provided by the model() declaration above.\n // Use [(checked)] for two-way binding or (checkedChange) to listen for changes.\n\n protected isFocused = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('checkboxElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected isChecked = computed(() => this.checked() === true);\n protected isIndeterminate = computed(() => this.indeterminate());\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-checkbox-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n constructor() {\n super();\n // Set indeterminate state on native input element\n effect(() => {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.indeterminate = this.isIndeterminate();\n }\n });\n }\n\n public writeValue(value: boolean | undefined | null): void {\n this.checked.set(value ?? undefined);\n }\n\n protected onChange(event: Event): void {\n if (this.readonly()) {\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n target.checked = this.isChecked();\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newState = target.checked;\n\n this.checked.set(newState); // This also emits through the implicit checkedChange output\n this.cvaOnChange(newState);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-checkbox-wrapper\" [class.coar-checkbox-focused]=\"isFocused()\">\n <!-- Hidden native checkbox -->\n <input\n #checkboxElement\n type=\"checkbox\"\n class=\"coar-checkbox-input\"\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : isChecked()\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom checkbox visual -->\n <span class=\"coar-checkbox-box\" [class.coar-checkbox-checked]=\"isChecked()\" [class.coar-checkbox-indeterminate]=\"isIndeterminate()\">\n <!-- Checkmark icon (always rendered, visibility controlled by CSS) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-check\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.5 4.5L6.5 11.5L3 8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Indeterminate icon (minus) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-indeterminate\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 8H12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </span>\n\n <!-- Label text -->\n @if (label()) {\n <span class=\"coar-checkbox-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-checkbox-required\">*</span>\n }\n </span>\n }\n</label>\n\n<!-- Hint/Error Message (always rendered, 1 line reserved) -->\n<div [id]=\"messageId()\"\n class=\"coar-checkbox-message\"\n [class.coar-checkbox-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n forwardRef,\n input,\n model,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\nimport { CoarRadioComponent } from './coar-radio.component';\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\nexport type RadioGroupSize = 's' | 'm' | 'l';\n\n/**\n * Radio group component for single-choice selection.\n *\n * @example\n * ```html\n * <coar-radio-group [(ngModel)]=\"selectedValue\" name=\"options\">\n * <coar-radio value=\"a\">Option A</coar-radio>\n * <coar-radio value=\"b\">Option B</coar-radio>\n * <coar-radio value=\"c\" [disabled]=\"true\">Option C (disabled)</coar-radio>\n * </coar-radio-group>\n * ```\n */\n@Component({\n selector: 'coar-radio-group',\n standalone: true,\n imports: [],\n templateUrl: './coar-radio-group.component.html',\n styleUrl: './coar-radio-group.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarRadioGroupComponent)],\n host: {\n role: 'radiogroup',\n '[class.coar-radio-group--horizontal]': 'orientation() === \"horizontal\"',\n '[class.coar-radio-group--vertical]': 'orientation() === \"vertical\"',\n '[class.coar-radio-group--s]': 'size() === \"s\"',\n '[class.coar-radio-group--m]': 'size() === \"m\"',\n '[class.coar-radio-group--l]': 'size() === \"l\"',\n '[class.coar-radio-group--disabled]': 'isDisabled()',\n '[class.coar-radio-group--error]': 'hasError()',\n '[attr.aria-label]': 'label()',\n '[attr.aria-required]': 'required() || null',\n '[attr.aria-describedby]': 'hasMessage() ? messageId() : null',\n },\n})\nexport class CoarRadioGroupComponent<T = unknown> extends CoarControlValueAccessor<T> {\n /** Currently selected value */\n value = model<T | undefined>(undefined);\n\n /** Group name for radio inputs */\n name = input.required<string>();\n\n /** Accessible label for the group */\n label = input<string>('');\n\n /** Layout orientation */\n orientation = input<RadioGroupOrientation>('vertical');\n\n /** Size of radio buttons */\n size = input<RadioGroupSize>('m');\n\n /** Disables all radio buttons in the group */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the group as required */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display */\n error = input<string>('');\n\n /** Hint text displayed below the group */\n hint = input<string>('');\n\n /** Emits when selection changes */\n valueChange = output<T>();\n\n /** Query all child radio components */\n private readonly radios = contentChildren(forwardRef(() => CoarRadioComponent));\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected hasMessage = computed(() => this.displayMessage().length > 0);\n private readonly autoId = `coar-radio-group-${cryptoRandomId()}`;\n protected messageId = computed(() => `${this.autoId}-message`);\n\n /** Called by child radio when selected */\n selectValue(newValue: T): void {\n if (this.isDisabled()) return;\n\n this.value.set(newValue);\n this.valueChange.emit(newValue);\n this.cvaOnChange(newValue);\n }\n\n /** Check if a value is currently selected */\n isSelected(checkValue: T): boolean {\n return this.value() === checkValue;\n }\n\n /** Check if group is disabled (exposed for child components) */\n isGroupDisabled(): boolean {\n return this.isDisabled();\n }\n\n // CVA implementation\n override writeValue(value: T): void {\n this.value.set(value);\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-radio-group\">\n <ng-content />\n</div>\n\n<!-- Hint/Error Message (always rendered, 1 line reserved) -->\n<div class=\"coar-form-field-message\"\n [id]=\"messageId()\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarRadioGroupComponent } from './coar-radio-group.component';\n\n/**\n * Individual radio button, must be used inside a coar-radio-group.\n *\n * @example\n * ```html\n * <coar-radio value=\"option1\">Option 1</coar-radio>\n * ```\n */\n@Component({\n selector: 'coar-radio',\n standalone: true,\n imports: [],\n templateUrl: './coar-radio.component.html',\n styleUrl: './coar-radio.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-radio--checked]': 'isChecked()',\n '[class.coar-radio--disabled]': 'isDisabled()',\n '[class.coar-radio--focused]': 'isFocused()',\n '[class.coar-radio--s]': 'groupSize() === \"s\"',\n '[class.coar-radio--m]': 'groupSize() === \"m\"',\n '[class.coar-radio--l]': 'groupSize() === \"l\"',\n '[class.coar-radio--error]': 'groupHasError()',\n '(click)': 'onClick($event)',\n },\n})\nexport class CoarRadioComponent<T = unknown> {\n private readonly group = inject(CoarRadioGroupComponent, { optional: true });\n\n /** Value of this radio option */\n value = input.required<T>();\n\n /** Disables this specific radio button */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('radioInput');\n protected isFocused = signal(false);\n\n protected isChecked = computed(() => {\n if (!this.group) return false;\n return this.group.isSelected(this.value());\n });\n\n protected isDisabled = computed(() => {\n return this.disabled() || (this.group?.isGroupDisabled() ?? false);\n });\n\n protected groupSize = computed(() => this.group?.size() ?? 'm');\n protected groupHasError = computed(() => (this.group?.error() ?? '').length > 0);\n\n protected radioName = computed(() => {\n return this.group?.name() ?? '';\n });\n\n private readonly autoId = `coar-radio-${cryptoRandomId()}`;\n protected inputId = computed(() => this.autoId);\n\n protected onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n return;\n }\n this.select();\n }\n\n protected onInputChange(): void {\n if (this.isDisabled()) return;\n this.select();\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n }\n\n private select(): void {\n if (this.group && !this.isChecked()) {\n this.group.selectValue(this.value());\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-radio__label\" [for]=\"inputId()\">\n <input\n #radioInput\n type=\"radio\"\n class=\"coar-radio__input\"\n [id]=\"inputId()\"\n [name]=\"radioName()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onInputChange()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n <span class=\"coar-radio__control\">\n <span class=\"coar-radio__dot\"></span>\n </span>\n <span class=\"coar-radio__text\">\n <ng-content />\n </span>\n</label>\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n AfterViewInit,\n NgZone,\n inject,\n input,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { OverlayScrollbars, ClickScrollPlugin, type PartialOptions } from 'overlayscrollbars';\n\n/**\n * Theme options for the scrollbar appearance.\n * - 'dark': Dark scrollbar theme (default)\n * - 'light': Light scrollbar theme\n */\nexport type CoarScrollbarTheme = 'dark' | 'light';\n\n/**\n * Auto-hide behavior for the scrollbar.\n * - 'never': Scrollbars are always visible\n * - 'scroll': Scrollbars hide when not scrolling\n * - 'leave': Scrollbars hide when pointer leaves the element\n * - 'move': Scrollbars hide when pointer stops moving\n */\nexport type CoarScrollbarAutoHide = 'never' | 'scroll' | 'leave' | 'move';\n\n/**\n * Overflow behavior for each axis.\n * - 'hidden': Content is clipped, no scrollbar\n * - 'scroll': Always show scrollbar\n * - 'visible-hidden': Content visible but no scrollbar\n * - 'visible-scroll': Content visible with scrollbar\n */\nexport type CoarScrollbarOverflow = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\n\n/**\n * Directive that applies custom overlay scrollbars to an element.\n *\n * Uses OverlayScrollbars library to replace native scrollbars with\n * styleable overlay scrollbars while preserving native scroll behavior.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <div coarScrollbar>Scrollable content</div>\n *\n * <!-- With options -->\n * <div coarScrollbar [theme]=\"'light'\" [autoHide]=\"'scroll'\">\n * Scrollable content\n * </div>\n *\n * <!-- Horizontal only -->\n * <div coarScrollbar [overflowX]=\"'scroll'\" [overflowY]=\"'hidden'\">\n * Horizontal scrollable content\n * </div>\n * ```\n */\n@Directive({\n selector: '[coarScrollbar]',\n exportAs: 'coarScrollbar',\n standalone: true,\n host: {\n // Prevents flickering during initialization\n 'data-overlayscrollbars-initialize': '',\n },\n})\nexport class CoarScrollbarDirective implements AfterViewInit, OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n\n /** Theme for scrollbar appearance */\n readonly theme = input<CoarScrollbarTheme>('dark');\n\n /** Auto-hide behavior for scrollbars */\n readonly autoHide = input<CoarScrollbarAutoHide>('leave');\n\n /** Delay in ms before auto-hide triggers */\n readonly autoHideDelay = input<number>(400);\n\n /** Whether clicking the track scrolls to that position */\n readonly clickScroll = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Overflow behavior for x-axis */\n readonly overflowX = input<CoarScrollbarOverflow>('scroll');\n\n /** Overflow behavior for y-axis */\n readonly overflowY = input<CoarScrollbarOverflow>('scroll');\n\n /** Whether to defer initialization until browser is idle */\n readonly defer = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Overscroll behavior to prevent scroll chaining to parent elements.\n * - 'auto': Default browser behavior (scroll chains to parent)\n * - 'contain': Prevents scroll chaining when reaching scroll boundaries\n * - 'none': Prevents scroll chaining and disables bounce effects\n */\n readonly overscrollBehavior = input<'auto' | 'contain' | 'none'>('auto');\n\n private osInstance: OverlayScrollbars | null = null;\n private initialized = false;\n private contentObserver: MutationObserver | null = null;\n private updateDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n // Register the ClickScrollPlugin for click-to-scroll functionality\n OverlayScrollbars.plugin(ClickScrollPlugin);\n\n // React to input changes and update options\n effect(() => {\n // Read all inputs to track them (signals must be read to be tracked)\n this.theme();\n this.autoHide();\n this.autoHideDelay();\n this.clickScroll();\n this.overflowX();\n this.overflowY();\n\n if (this.osInstance && this.initialized) {\n this.osInstance.options(this.buildOptions());\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.defer()) {\n // Defer initialization to browser idle time for better performance\n this.deferInitialization();\n } else {\n this.initialize();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n /**\n * Returns the OverlayScrollbars instance or null if not initialized.\n */\n getInstance(): OverlayScrollbars | null {\n return this.osInstance;\n }\n\n /**\n * Scrolls to the specified position.\n */\n scrollTo(options: { x?: number; y?: number }): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n if (options.x !== undefined) {\n viewport.scrollLeft = options.x;\n }\n if (options.y !== undefined) {\n viewport.scrollTop = options.y;\n }\n }\n }\n\n /**\n * Scrolls to the bottom of the scrollable content.\n */\n scrollToBottom(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = viewport.scrollHeight;\n }\n }\n\n /**\n * Scrolls to the top of the scrollable content.\n */\n scrollToTop(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = 0;\n }\n }\n\n /**\n * Updates the scrollbar (useful after dynamic content changes).\n */\n update(): void {\n this.osInstance?.update(true);\n }\n\n private deferInitialization(): void {\n // Use requestIdleCallback if available, otherwise setTimeout\n if (typeof requestIdleCallback === 'function') {\n requestIdleCallback(() => this.initialize(), { timeout: 2000 });\n } else {\n setTimeout(() => this.initialize(), 0);\n }\n }\n\n private initialize(): void {\n // Run outside Angular zone to avoid unnecessary change detection\n this.ngZone.runOutsideAngular(() => {\n this.osInstance = OverlayScrollbars(this.elementRef.nativeElement, this.buildOptions());\n this.initialized = true;\n\n // Apply overscroll-behavior to the viewport element to prevent scroll chaining\n const overscroll = this.overscrollBehavior();\n if (overscroll !== 'auto') {\n const viewport = this.osInstance.elements().viewport;\n if (viewport) {\n viewport.style.overscrollBehavior = overscroll;\n }\n }\n\n // Watch for descendant attribute changes (e.g. class toggles from expand/collapse\n // animations using grid-template-rows) that change content size without triggering\n // OverlayScrollbars' built-in observers.\n this.observeContentChanges();\n });\n }\n\n private observeContentChanges(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (!viewport) return;\n\n this.contentObserver = new MutationObserver(() => {\n if (this.updateDebounceTimer) clearTimeout(this.updateDebounceTimer);\n this.updateDebounceTimer = setTimeout(() => {\n this.osInstance?.update(true);\n }, 50);\n });\n\n this.contentObserver.observe(viewport, {\n attributes: true,\n attributeFilter: ['class'],\n subtree: true,\n });\n }\n\n private buildOptions(): PartialOptions {\n return {\n scrollbars: {\n theme: `os-theme-${this.theme()}`,\n autoHide: this.autoHide(),\n autoHideDelay: this.autoHideDelay(),\n clickScroll: this.clickScroll(),\n },\n overflow: {\n x: this.overflowX(),\n y: this.overflowY(),\n },\n };\n }\n\n private destroy(): void {\n this.contentObserver?.disconnect();\n this.contentObserver = null;\n if (this.updateDebounceTimer) {\n clearTimeout(this.updateDebounceTimer);\n this.updateDebounceTimer = null;\n }\n this.osInstance?.destroy();\n this.osInstance = null;\n this.initialized = false;\n }\n}\n","import {\n signal,\n input,\n computed,\n effect,\n ElementRef,\n inject,\n booleanAttribute,\n DestroyRef,\n Directive,\n viewChild,\n} from '@angular/core';\nimport { CoarControlValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport type { Placement } from '@cocoar/ui/overlay';\n\nexport type CoarSelectSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Visual appearance of the select trigger.\n * - 'outline': Default bordered input style\n * - 'inline': Borderless, transparent background - blends into surrounding content\n */\nexport type CoarSelectAppearance = 'outline' | 'inline';\n\n/** Dropdown position relative to the trigger */\nexport type CoarDropdownPosition = 'top' | 'bottom';\n\n/**\n * Base class providing shared functionality for all select components.\n * Handles dropdown state, keyboard navigation, and common styling.\n * Subclasses override openDropdown() to use the overlay system.\n */\n@Directive()\nexport abstract class CoarSelectBase<T> extends CoarControlValueAccessor<T> {\n protected readonly elementRef = inject(ElementRef);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Label text displayed above the select */\n label = input<string>('');\n\n /** Placeholder text shown when no option is selected */\n placeholder = input<string>('Select an option...');\n\n /** Available options to choose from */\n options = input<CoarSelectOption[]>([]);\n\n /** Select size - matches button/input heights for consistent layouts */\n size = input<CoarSelectSize>('m');\n\n /**\n * Visual appearance of the select trigger.\n * - 'outline': Default bordered input style\n * - 'inline': Borderless, transparent - blends into surrounding content\n */\n appearance = input<CoarSelectAppearance>('outline');\n\n /** Disables the select (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the select read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the select as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the select */\n error = input<string>('');\n\n /** Hint text displayed below the select */\n hint = input<string>('');\n\n /** HTML id attribute for the select element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Enable search/filter functionality within the dropdown */\n searchable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Search input placeholder when searchable is enabled */\n searchPlaceholder = input<string>('Search...');\n\n /**\n * Comparison function to match values with options.\n * Use this when value objects come from different sources (e.g., API vs form).\n *\n * @example\n * ```typescript\n * // Compare Country objects by their ID\n * compareById = (a: Country | null, b: Country | null) => a?.id === b?.id;\n * ```\n */\n compareWith = input<(o1: unknown, o2: unknown) => boolean>();\n\n /** Force dropdown position ('auto' calculates based on available space) */\n dropdownPositionPreference = input<'auto' | 'top' | 'bottom'>('auto');\n\n // ============================================================\n // View References (shared across all select components)\n // ============================================================\n\n /** Reference to the scrollbar directive for scroll control */\n protected scrollbarRef = viewChild(CoarScrollbarDirective);\n\n /** Reference to the options list container for scroll-into-view */\n protected optionsListRef = viewChild<ElementRef<HTMLDivElement>>('optionsList');\n\n /** Reference to the search input for focusing (when searchable) */\n protected searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n /** DOM id for the dropdown search input (when searchable). */\n protected searchInputId = computed(() => `${this.inputId()}-search`);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Whether the dropdown is currently open */\n protected isOpen = signal(false);\n\n /** Whether the select is focused */\n protected isFocused = signal(false);\n\n /** Current search/filter query */\n protected searchQuery = signal('');\n\n /** Currently highlighted option index for keyboard navigation */\n protected highlightedIndex = signal(-1);\n\n /** Current dropdown position */\n protected dropdownPosition = signal<CoarDropdownPosition>('bottom');\n\n /** Combined disabled state from input and CVA */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Whether there's an error to display */\n protected hasError = computed(() => this.error().length > 0);\n\n /** Message to display (error takes priority over hint) */\n protected displayMessage = computed(() => this.error() || this.hint());\n\n /** Generated unique ID for the select element */\n private readonly autoId = `coar-select-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n\n /** ID for the message element (for aria-describedby) */\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n /** ID for the listbox element */\n protected listboxId = computed(() => `${this.inputId()}-listbox`);\n\n /** Filtered options based on search query */\n protected filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n if (!query) return this.options();\n return this.options().filter((option) => option.label.toLowerCase().includes(query));\n });\n\n /**\n * Options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayOptions = computed(() => {\n const options = this.filteredOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted.\n * When reversed, converts display index to data index.\n */\n protected isHighlighted(displayIndex: number): boolean {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index.\n * When reversed, converts display index to data index.\n */\n protected setHighlightFromDisplay(displayIndex: number): void {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n constructor() {\n super();\n\n // Reset highlighted index when options change\n effect(() => {\n this.filteredOptions();\n this.highlightedIndex.set(-1);\n });\n\n // Close dropdown on outside click (can be disabled by subclasses that render the panel outside host DOM).\n this.installOutsideClickHandler();\n }\n\n /** Toggle dropdown open/closed state */\n protected toggleDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n /**\n * Open the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected openDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /**\n * Close the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected closeDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /** Handle keyboard navigation */\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.openDropdown();\n // Auto-highlight first option when opening\n this.highlightFirstOption();\n } else if (this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeDropdown();\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option farthest from trigger\n if (this.dropdownPosition() === 'bottom') {\n this.highlightFirstOption();\n } else {\n // Top dropdown is visually reversed, so last index appears at visual top\n this.highlightLastOption();\n }\n } else {\n // ArrowDown always moves DOWN visually\n // Bottom dropdown: down = next index; Top dropdown (reversed): down = previous index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightNextOption();\n } else {\n this.highlightPreviousOption();\n }\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option nearest to trigger\n if (this.dropdownPosition() === 'top') {\n // Top dropdown is visually reversed, so first index appears at visual bottom (nearest)\n this.highlightFirstOption();\n } else {\n this.highlightLastOption();\n }\n } else {\n // ArrowUp always moves UP visually\n // Bottom dropdown: up = previous index; Top dropdown (reversed): up = next index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightPreviousOption();\n } else {\n this.highlightNextOption();\n }\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightFirstOption();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightLastOption();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n /** Move highlight to the next available option */\n protected highlightNextOption(): void {\n const options = this.filteredOptions();\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex < options.length) {\n if (!options[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Move highlight to the previous available option */\n protected highlightPreviousOption(): void {\n const options = this.filteredOptions();\n let prevIndex = this.highlightedIndex() - 1;\n\n while (prevIndex >= 0) {\n if (!options[prevIndex].disabled) {\n this.highlightedIndex.set(prevIndex);\n this.scrollToHighlighted();\n return;\n }\n prevIndex--;\n }\n }\n\n /** Move highlight to the first available option */\n protected highlightFirstOption(): void {\n const options = this.filteredOptions();\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Move highlight to the last available option */\n protected highlightLastOption(): void {\n const options = this.filteredOptions();\n for (let i = options.length - 1; i >= 0; i--) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Scroll the highlighted option into view */\n protected scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const selector = this.highlightedOptionSelector;\n const highlightedEl = listEl?.querySelector(selector);\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected focusSearchInput(): void {\n if (!this.searchable()) return;\n\n const refEl = this.searchInputRef()?.nativeElement;\n if (refEl) {\n refEl.focus();\n return;\n }\n\n const domEl =\n typeof document !== 'undefined'\n ? (document.getElementById(this.searchInputId()) as HTMLInputElement | null)\n : null;\n\n domEl?.focus();\n }\n\n protected scrollOptionsToBottom(): void {\n const scrollbar = this.scrollbarRef();\n if (scrollbar) {\n scrollbar.scrollToBottom();\n return;\n }\n\n const listEl = this.getOptionsListElement();\n if (!listEl) return;\n listEl.scrollTop = listEl.scrollHeight;\n }\n\n protected getOptionsListElement(): HTMLDivElement | null {\n const refEl = this.optionsListRef()?.nativeElement;\n if (refEl) return refEl;\n\n return typeof document !== 'undefined'\n ? (document.getElementById(this.listboxId()) as HTMLDivElement | null)\n : null;\n }\n\n /**\n * CSS selector for the highlighted option element.\n * Each component defines its own selector based on its CSS class naming.\n */\n protected abstract get highlightedOptionSelector(): string;\n\n /** Handle focus event */\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n /** Handle blur event */\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Handle search input changes */\n protected onSearchInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n }\n\n /** Whether this select should close on document clicks outside its host element. */\n protected shouldCloseOnOutsideClick(): boolean {\n return true;\n }\n\n /** Setup click outside handler to close dropdown. */\n protected installOutsideClickHandler(): void {\n if (!this.shouldCloseOnOutsideClick()) return;\n\n const handleClick = (event: MouseEvent) => {\n if (!this.isOpen()) return;\n if (this.elementRef.nativeElement.contains(event.target)) return;\n this.closeDropdown();\n };\n\n // Use setTimeout to avoid issues with the current click event\n setTimeout(() => {\n document.addEventListener('click', handleClick);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('click', handleClick);\n });\n });\n }\n\n /**\n * Resolve dropdown placement based on available viewport space.\n * Shared across all select subclasses that use the overlay system.\n */\n protected resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const preference = this.dropdownPositionPreference();\n if (preference === 'top') return 'top';\n if (preference === 'bottom') return 'bottom';\n\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n /**\n * ID of the currently highlighted option element, for `aria-activedescendant`.\n * Converts the data-level highlightedIndex to the display-level DOM id.\n * Subclasses that use a different options list (e.g. tag-select) override this.\n */\n protected activeDescendantId = computed(() => {\n const index = this.highlightedIndex();\n const options = this.filteredOptions();\n if (index < 0 || index >= options.length) return null;\n\n const displayIndex =\n this.dropdownPosition() === 'top' ? options.length - 1 - index : index;\n\n return `${this.inputId()}-option-${displayIndex}`;\n });\n\n /** Abstract method to select the currently highlighted option */\n protected abstract selectHighlightedOption(): void;\n\n /** Abstract method to get the display text for the current selection */\n abstract getDisplayText(): string;\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n output,\n computed,\n viewChild,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Single-select dropdown component.\n *\n * Allows selecting one option from a list with keyboard navigation,\n * search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-single-select\n * label=\"Country\"\n * [options]=\"countries\"\n * [(value)]=\"selectedCountry\"\n * placeholder=\"Select a country\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-single-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-single-select.component.html',\n styleUrl: './coar-single-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarSingleSelectComponent)],\n host: {\n '[class.coar-single-select--xs]': 'size() === \"xs\"',\n '[class.coar-single-select--s]': 'size() === \"s\"',\n '[class.coar-single-select--m]': 'size() === \"m\"',\n '[class.coar-single-select--l]': 'size() === \"l\"',\n '[class.coar-single-select--inline]': 'appearance() === \"inline\"',\n '[class.coar-single-select--disabled]': 'isDisabled()',\n '[class.coar-single-select--readonly]': 'readonly()',\n '[class.coar-single-select--error]': 'hasError()',\n '[class.coar-single-select--open]': 'isOpen()',\n },\n})\nexport class CoarSingleSelectComponent<T = unknown> extends CoarSelectBase<T | null> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<T | null>(null);\n\n /** Whether to show a clear button when a value is selected */\n clearable = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected value changes */\n valueChange = output<T | null>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-select-option--highlighted';\n }\n\n /** The currently selected option object */\n protected selectedOption = computed(() => {\n const currentValue = this.value();\n if (currentValue === null || currentValue === undefined) return null;\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().find((opt) => compare(opt.value, currentValue)) ?? null;\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const selected = this.selectedOption();\n return selected?.label ?? '';\n }\n\n /** Write value from forms API */\n writeValue(value: T | null): void {\n this.value.set(value);\n }\n\n /** Select an option by its value */\n selectOption(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n this.value.set(option.value);\n this.valueChange.emit(option.value);\n this.cvaOnChange(option.value);\n this.closeDropdown();\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.selectOption(option);\n }\n }\n }\n\n /** Clear the current selection */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return compare(this.value(), option.value);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // The dropdown panel is rendered via @cocoar/ui/overlay (attached to document.body),\n // so hostElement.contains(event.target) would treat clicks inside the panel as \"outside\".\n // We rely on overlay dismissal (outsideClick) instead.\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n\n if (this.searchable()) {\n this.searchInputRef()?.nativeElement.focus();\n }\n\n if (this.dropdownPosition() === 'top') {\n this.scrollbarRef()?.scrollToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n const chromeHeight = 2;\n\n return chromeHeight + searchHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Value or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOption()\">\n @if (selectedOption(); as option) {\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-select-value-icon\" />\n }\n {{ option.label }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-select-clear\" tabindex=\"-1\" aria-label=\"Clear selection\" (click)=\"clearSelection($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon name=\"caret-right\" source=\"coar-builtin\" size=\"auto\" class=\"coar-select-arrow\" [class.coar-select-arrow--open]=\"isOpen()\" />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-select-option\"\n [class.coar-select-option--selected]=\"isSelected(option)\"\n [class.coar-select-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-select-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"selectOption($any(option))\"\n (keydown.enter)=\"selectOption($any(option))\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-select-option-icon\" />\n }\n <span class=\"coar-select-option-label\">{{ option.label }}</span>\n @if (isSelected(option)) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"s\" class=\"coar-select-option-check\" />\n }\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n viewChild,\n ElementRef,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Multi-select dropdown component.\n *\n * Allows selecting multiple options from a list with checkboxes,\n * keyboard navigation, search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-multi-select\n * label=\"Skills\"\n * [options]=\"skills\"\n * [(value)]=\"selectedSkills\"\n * placeholder=\"Select skills...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-multi-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-multi-select.component.html',\n styleUrl: './coar-multi-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarMultiSelectComponent)],\n host: {\n '[class.coar-multi-select--xs]': 'size() === \"xs\"',\n '[class.coar-multi-select--s]': 'size() === \"s\"',\n '[class.coar-multi-select--m]': 'size() === \"m\"',\n '[class.coar-multi-select--l]': 'size() === \"l\"',\n '[class.coar-multi-select--disabled]': 'isDisabled()',\n '[class.coar-multi-select--readonly]': 'readonly()',\n '[class.coar-multi-select--error]': 'hasError()',\n '[class.coar-multi-select--open]': 'isOpen()',\n },\n})\nexport class CoarMultiSelectComponent<T = unknown> extends CoarSelectBase<T[]> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Whether to show a clear button when values are selected */\n clearable = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Maximum number of selected items to display before showing count */\n maxDisplayItems = input<number>(3);\n\n /** Whether to show \"Select All\" option */\n showSelectAll = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-multi-option--highlighted';\n }\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().filter((opt) => currentValues.some((val) => compare(val, opt.value)));\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n /** Whether all options are selected */\n protected allSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n return enabledOptions.length > 0 && enabledOptions.every((opt) => this.isSelected(opt));\n });\n\n /** Whether some but not all options are selected */\n protected someSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n const selectedCount = enabledOptions.filter((opt) => this.isSelected(opt)).length;\n return selectedCount > 0 && selectedCount < enabledOptions.length;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const currentValues = this.value();\n if (currentValues.length === 0) return '';\n\n const selected = this.selectedOptions();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Get labels from matching options\n const labels = currentValues.map((val) => {\n const opt = selected.find((o) => compare(o.value, val));\n return opt?.label ?? String(val);\n });\n\n if (labels.length <= this.maxDisplayItems()) {\n return labels.join(', ');\n }\n return `${labels.length} selected`;\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Toggle selection of an option */\n toggleOption(option: CoarSelectOption<T>, event?: Event): void {\n event?.stopPropagation();\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const index = currentValues.findIndex((val) => compare(val, option.value));\n\n if (index === -1) {\n currentValues.push(option.value);\n } else {\n currentValues.splice(index, 1);\n }\n\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.toggleOption(option);\n }\n }\n }\n\n /** Toggle all options */\n protected toggleAll(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.allSelected()) {\n // Deselect all\n this.value.set([]);\n } else {\n // Select all non-disabled options\n const allValues = this.options()\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value as T);\n this.value.set(allValues);\n }\n\n this.valueChange.emit(this.value());\n this.cvaOnChange(this.value());\n }\n\n /** Clear all selections */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n this.valueChange.emit([]);\n this.cvaOnChange([]);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.value().some((val) => compare(val, option.value));\n }\n\n /** Handle keyboard for multi-select (space toggles instead of closing) */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (event.key === ' ' && this.isOpen() && this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n return;\n }\n\n if (event.key === 'Enter' && this.isOpen()) {\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else {\n this.closeDropdown();\n }\n return;\n }\n\n super.onKeyDown(event);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui/overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n this.focusSearchInput();\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n\n const selectAllHeight = this.showSelectAll() && !this.searchQuery() ? 37 : 0;\n\n const chromeHeight = 2;\n return chromeHeight + searchHeight + selectAllHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Values or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOptions().length\">\n @if (selectedOptions().length) {\n {{ getDisplayText() }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Selection Count Badge -->\n @if (selectedOptions().length > 0) {\n <span class=\"coar-multi-count\">{{ selectedOptions().length }}</span>\n }\n\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-select-clear\" tabindex=\"-1\" aria-label=\"Clear all selections\" (click)=\"clearSelection($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon name=\"caret-right\" source=\"coar-builtin\" size=\"auto\" class=\"coar-select-arrow\" [class.coar-select-arrow--open]=\"isOpen()\" />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Select All Option -->\n @if (showSelectAll() && !searchQuery()) {\n <div\n class=\"coar-multi-option coar-multi-option--select-all\"\n tabindex=\"-1\"\n role=\"option\"\n [attr.aria-selected]=\"allSelected()\"\n (click)=\"toggleAll($event)\"\n (keydown.enter)=\"toggleAll($event)\"\n >\n <span\n class=\"coar-multi-checkbox\"\n [class.coar-multi-checkbox--checked]=\"allSelected()\"\n [class.coar-multi-checkbox--indeterminate]=\"someSelected()\"\n >\n @if (allSelected()) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"auto\" />\n } @else if (someSelected()) {\n <coar-icon name=\"minus\" source=\"coar-builtin\" size=\"auto\" />\n }\n </span>\n <span class=\"coar-multi-option-label\">Select All</span>\n </div>\n <div class=\"coar-multi-divider\"></div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-multi-option\"\n [class.coar-multi-option--selected]=\"isSelected(option)\"\n [class.coar-multi-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-multi-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"toggleOption($any(option), $event)\"\n (keydown.enter)=\"toggleOption($any(option), $event)\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n <span class=\"coar-multi-checkbox\" [class.coar-multi-checkbox--checked]=\"isSelected(option)\">\n @if (isSelected(option)) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"auto\" />\n }\n </span>\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-multi-option-icon\" />\n }\n <span class=\"coar-multi-option-label\">{{ option.label }}</span>\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n viewChild,\n ElementRef,\n booleanAttribute,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Tag-based multi-select component.\n *\n * Displays selected items as removable tag chips with support for\n * creating new tags on-the-fly (optional), keyboard navigation,\n * and full forms integration.\n *\n * @example\n * ```html\n * <coar-tag-select\n * label=\"Tags\"\n * [options]=\"availableTags\"\n * [(value)]=\"selectedTags\"\n * [allowCreate]=\"true\"\n * placeholder=\"Add tags...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-tag-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-tag-select.component.html',\n styleUrl: './coar-tag-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTagSelectComponent)],\n host: {\n '[class.coar-tag-select--xs]': 'size() === \"xs\"',\n '[class.coar-tag-select--s]': 'size() === \"s\"',\n '[class.coar-tag-select--m]': 'size() === \"m\"',\n '[class.coar-tag-select--l]': 'size() === \"l\"',\n '[class.coar-tag-select--disabled]': 'isDisabled()',\n '[class.coar-tag-select--readonly]': 'readonly()',\n '[class.coar-tag-select--error]': 'hasError()',\n '[class.coar-tag-select--open]': 'isOpen()',\n '[class.coar-tag-select--focused]': 'isFocused()',\n },\n})\nexport class CoarTagSelectComponent<T = string> extends CoarSelectBase<T[]> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Allow creating new tags that don't exist in options */\n allowCreate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number of tags that can be selected (0 = unlimited) */\n maxTags = input<number>(0);\n\n /** Text shown when creating a new tag */\n createPrefix = input<string>('Create: ');\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** Emits when a new tag is created */\n tagCreated = output<T>();\n\n /**\n * Reference to the inline search input (tag-select uses inline input, not dropdown search).\n * This is separate from the base class searchInputRef.\n */\n protected inlineInputRef = viewChild<ElementRef<HTMLInputElement>>('inlineInput');\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-tag-option--highlighted';\n }\n\n /**\n * Override: tag-select uses availableOptions (excluding already-selected),\n * and may have a \"Create\" option at the end.\n */\n protected override activeDescendantId = computed(() => {\n const index = this.highlightedIndex();\n const available = this.availableOptions();\n\n // Create option\n if (this.showCreateOption() && index === available.length) {\n return `${this.inputId()}-option-create`;\n }\n\n if (index < 0 || index >= available.length) return null;\n\n const displayIndex =\n this.dropdownPosition() === 'top' ? available.length - 1 - index : index;\n\n return `${this.inputId()}-option-${displayIndex}`;\n });\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Map values to options, creating virtual options for created tags or unknown values\n return currentValues.map((val) => {\n const existing = this.options().find((opt) => compare(opt.value, val));\n if (existing) return existing;\n\n // Created tag or value without matching option - return a virtual option\n return {\n value: val,\n label: String(val),\n } as CoarSelectOption<T>;\n });\n });\n\n /** Available options that aren't already selected */\n protected availableOptions = computed(() => {\n const selectedValues = this.value();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.filteredOptions().filter(\n (opt) => !selectedValues.some((val) => compare(val, opt.value))\n );\n });\n\n /**\n * Available options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayAvailableOptions = computed(() => {\n const options = this.availableOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected isAvailableHighlighted(displayIndex: number): boolean {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected setAvailableHighlightFromDisplay(displayIndex: number): void {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n /** Whether the max tags limit has been reached */\n protected maxReached = computed(() => {\n const max = this.maxTags();\n return max > 0 && this.value().length >= max;\n });\n\n /** Whether to show the \"Create\" option */\n protected showCreateOption = computed(() => {\n const query = this.searchQuery().trim();\n if (!this.allowCreate() || !query || this.maxReached()) return false;\n\n // Check if the query matches an existing option exactly\n const exactMatch = this.options().some(\n (opt) => opt.label.toLowerCase() === query.toLowerCase()\n );\n if (exactMatch) return false;\n\n // Check if already selected\n const alreadySelected = this.value().some(\n (val) => String(val).toLowerCase() === query.toLowerCase()\n );\n return !alreadySelected;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n return this.selectedOptions()\n .map((opt) => opt.label)\n .join(', ');\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Add a tag from an option */\n addTag(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly() || this.maxReached()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const alreadySelected = currentValues.some((val) => compare(val, option.value));\n\n if (!alreadySelected) {\n currentValues.push(option.value);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Remove a tag by value */\n removeTag(tagValue: T, event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const currentValues = this.value().filter((v) => !compare(v, tagValue));\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Create a new tag from the search query */\n protected createTag(): void {\n if (!this.allowCreate() || this.maxReached()) return;\n\n const query = this.searchQuery().trim();\n if (!query) return;\n\n const newValue = query as unknown as T;\n const currentValues = [...this.value()];\n\n if (!currentValues.includes(newValue)) {\n currentValues.push(newValue);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n this.tagCreated.emit(newValue);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const available = this.availableOptions();\n const index = this.highlightedIndex();\n\n // Check if highlighting the \"Create\" option\n if (this.showCreateOption() && index === available.length) {\n this.createTag();\n return;\n }\n\n if (index >= 0 && index < available.length) {\n const option = available[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.addTag(option);\n }\n }\n }\n\n /** Handle keyboard for tag-select */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Backspace':\n if (!this.searchQuery() && this.value().length > 0) {\n // Remove last tag\n const lastValue = this.value()[this.value().length - 1];\n this.removeTag(lastValue);\n }\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else if (this.showCreateOption()) {\n this.createTag();\n }\n break;\n\n case ',':\n case 'Tab':\n if (this.showCreateOption() && this.searchQuery().trim()) {\n event.preventDefault();\n this.createTag();\n } else if (event.key === 'Tab') {\n this.closeDropdown();\n }\n break;\n\n default:\n super.onKeyDown(event);\n }\n }\n\n /** Handle input changes */\n protected onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n\n if (!this.isOpen() && target.value) {\n this.openDropdown();\n }\n }\n\n /** Focus the inline input */\n protected focusInput(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.inlineInputRef()?.nativeElement.focus();\n }\n }\n\n /** Handle input focus */\n protected onInputFocus(): void {\n this.isFocused.set(true);\n if (!this.maxReached()) {\n this.openDropdown();\n }\n }\n\n /** Handle input blur */\n protected onInputBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Override to calculate highlighted index including create option */\n protected override highlightNextOption(): void {\n const available = this.availableOptions();\n const maxIndex = this.showCreateOption() ? available.length : available.length - 1;\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex <= maxIndex) {\n // Create option is always enabled\n if (nextIndex === available.length && this.showCreateOption()) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n\n if (nextIndex < available.length && !available[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Scroll highlighted option into view */\n protected override scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const highlightedEl = listEl?.querySelector('.coar-tag-option--highlighted');\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui/overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 200;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayAvailableOptions().length + (this.showCreateOption() ? 1 : 0);\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const chromeHeight = 2;\n return chromeHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Tag Input Container -->\n <div\n class=\"coar-tag-container\"\n #trigger\n [class.coar-tag-container--focused]=\"isFocused()\"\n [class.coar-tag-container--disabled]=\"isDisabled()\"\n [class.coar-tag-container--readonly]=\"readonly()\"\n [class.coar-tag-container--error]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n tabindex=\"-1\"\n (click)=\"focusInput()\"\n (keydown.enter)=\"focusInput()\"\n >\n <!-- Selected Tags -->\n @for (option of selectedOptions(); track option.value) {\n <span class=\"coar-tag\" [class.coar-tag--disabled]=\"isDisabled()\">\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"auto\" class=\"coar-tag-icon\" />\n }\n <span class=\"coar-tag-label\">{{ option.label }}</span>\n @if (!isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"coar-tag-remove\"\n tabindex=\"-1\"\n aria-label=\"Remove {{ option.label }}\"\n (click)=\"removeTag($any(option.value), $event)\"\n >\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n </span>\n }\n\n <!-- Inline Input -->\n @if (!maxReached()) {\n <input\n #inlineInput\n type=\"text\"\n class=\"coar-tag-input\"\n [id]=\"inputId()\"\n [placeholder]=\"selectedOptions().length ? '' : placeholder()\"\n [value]=\"searchQuery()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n />\n }\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayAvailableOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-tag-option\"\n [class.coar-tag-option--highlighted]=\"isAvailableHighlighted(i)\"\n [class.coar-tag-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"false\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"addTag($any(option))\"\n (keydown.enter)=\"addTag($any(option))\"\n (mouseenter)=\"setAvailableHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-tag-option-icon\" />\n }\n <span class=\"coar-tag-option-label\">{{ option.label }}</span>\n </div>\n }\n\n <!-- Create New Option -->\n @if (showCreateOption()) {\n <div\n class=\"coar-tag-option coar-tag-option--create\"\n [class.coar-tag-option--highlighted]=\"highlightedIndex() === availableOptions().length\"\n [id]=\"inputId() + '-option-create'\"\n tabindex=\"-1\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n (click)=\"createTag()\"\n (keydown.enter)=\"createTag()\"\n (mouseenter)=\"highlightedIndex.set(availableOptions().length)\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" size=\"s\" class=\"coar-tag-option-icon\" />\n <span class=\"coar-tag-option-label\">{{ createPrefix() }}{{ searchQuery() }}</span>\n </div>\n }\n\n @if (!displayAvailableOptions().length && !showCreateOption()) {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No matching options\n } @else {\n No more options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n computed,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarSwitchSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-switch',\n standalone: true,\n imports: [],\n templateUrl: './coar-switch.component.html',\n styleUrl: './coar-switch.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarSwitchComponent)],\n host: {\n '[class.coar-switch--s]': 'size() === \"s\"',\n '[class.coar-switch--m]': 'size() === \"m\"',\n '[class.coar-switch--l]': 'size() === \"l\"',\n '[class.coar-switch--disabled]': 'isDisabled()',\n '[class.coar-switch--readonly]': 'readonly()',\n '[class.coar-switch--checked]': 'checked()',\n },\n})\nexport class CoarSwitchComponent extends CoarControlValueAccessor<boolean> {\n /** Label text displayed next to the switch */\n label = input<string>('');\n\n /** Switch checked state */\n checked = model<boolean>(false);\n\n /** Disables the switch */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Prevents changes but keeps normal appearance */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Switch size */\n size = input<CoarSwitchSize>('m');\n\n /** HTML id attribute */\n id = input<string>('');\n\n /** HTML name attribute */\n name = input<string>('');\n\n /** Label position relative to the switch */\n labelPosition = input<'before' | 'after'>('after');\n\n protected isFocused = signal(false);\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n private readonly autoId = `coar-switch-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n\n public writeValue(value: boolean | null): void {\n this.checked.set(value ?? false);\n }\n\n protected onToggle(event: Event): void {\n if (this.readonly()) {\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n target.checked = this.checked();\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newState = target.checked;\n\n this.checked.set(newState);\n this.cvaOnChange(newState);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-switch-wrapper\" [class.coar-switch-focused]=\"isFocused()\">\n @if (labelPosition() === 'before' && label()) {\n <span class=\"coar-switch-label\">{{ label() }}</span>\n }\n\n <!-- Hidden native input -->\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"coar-switch-input\"\n [id]=\"inputId()\"\n [name]=\"name()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n (change)=\"onToggle($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom track + thumb -->\n <span class=\"coar-switch-track\" [class.coar-switch-track--checked]=\"checked()\">\n <span class=\"coar-switch-thumb\"></span>\n </span>\n\n @if (labelPosition() === 'after' && label()) {\n <span class=\"coar-switch-label\">{{ label() }}</span>\n }\n</label>\n","// Form controls (CVA-based)\nexport * from './text-input';\nexport * from './number-input';\nexport * from './password-input';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './select';\nexport * from './switch';\n\n// CVA base class\nexport * from './_base/coar-control-value-accessor';\n","import { Temporal } from '@js-temporal/polyfill';\n\nimport type { DateFormatConfig } from './coar-date-format';\n\nexport function coarDetectDateFormatPatternFromIntl(\n locale: string\n): DateFormatConfig['pattern'] | null {\n try {\n const formatter = new Intl.DateTimeFormat(locale);\n const parts = formatter.formatToParts(new Date(2024, 0, 15));\n\n const dayIndex = parts.findIndex((p) => p.type === 'day');\n const monthIndex = parts.findIndex((p) => p.type === 'month');\n const yearIndex = parts.findIndex((p) => p.type === 'year');\n\n if (dayIndex === -1 || monthIndex === -1 || yearIndex === -1) {\n return null;\n }\n\n if (dayIndex < monthIndex && monthIndex < yearIndex) return 'dd.mm.yyyy';\n if (monthIndex < dayIndex && dayIndex < yearIndex) return 'mm/dd/yyyy';\n if (yearIndex < monthIndex && monthIndex < dayIndex) return 'yyyy-mm-dd';\n\n return null;\n } catch {\n return null;\n }\n}\n\nexport function coarGetDateSeparatorForPattern(\n pattern: DateFormatConfig['pattern']\n): '.' | '/' | '-' {\n if (pattern.includes('.')) return '.';\n if (pattern.includes('/')) return '/';\n return '-';\n}\n\nexport function coarGetLocalizedWeekdays(locale: string, firstDayOfWeek: 1 | 7): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n\n // Jan 1, 2024 is a Monday - use this as reference for day mapping.\n const weekdays: string[] = [];\n for (let i = 0; i < 7; i++) {\n const date = new Date(2024, 0, 1 + i);\n weekdays.push(formatter.format(date));\n }\n\n // weekdays is now [Mon, Tue, Wed, Thu, Fri, Sat, Sun].\n if (firstDayOfWeek === 7) {\n const sunday = weekdays.pop();\n if (sunday) {\n weekdays.unshift(sunday);\n }\n }\n\n return weekdays;\n}\n\nexport function coarFormatPlainDate(\n date: Temporal.PlainDate,\n pattern: DateFormatConfig['pattern']\n): string {\n const sep = coarGetDateSeparatorForPattern(pattern);\n const day = String(date.day).padStart(2, '0');\n const month = String(date.month).padStart(2, '0');\n const year = String(date.year);\n\n switch (pattern) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n return `${day}${sep}${month}${sep}${year}`;\n case 'mm/dd/yyyy':\n return `${month}${sep}${day}${sep}${year}`;\n case 'yyyy-mm-dd':\n return `${year}${sep}${month}${sep}${day}`;\n default:\n return `${day}${sep}${month}${sep}${year}`;\n }\n}\n\nexport function coarParsePlainDateFromInput(\n text: string,\n pattern: DateFormatConfig['pattern'],\n constraints?: {\n min?: Temporal.PlainDate | null;\n max?: Temporal.PlainDate | null;\n }\n): Temporal.PlainDate | null {\n if (!text) return null;\n\n const sep = coarGetDateSeparatorForPattern(pattern);\n const parts = text.split(sep);\n if (parts.length !== 3) return null;\n\n if (parts.some((p) => p.length === 0 || !/^\\d+$/.test(p))) return null;\n\n let year: number;\n let month: number;\n let day: number;\n\n try {\n switch (pattern) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n day = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'mm/dd/yyyy':\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'yyyy-mm-dd':\n year = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n day = parseInt(parts[2], 10);\n break;\n default:\n return null;\n }\n\n if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {\n return null;\n }\n\n const date = Temporal.PlainDate.from({ year, month, day });\n\n const minDate = constraints?.min ?? null;\n const maxDate = constraints?.max ?? null;\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return null;\n }\n\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return null;\n }\n\n return date;\n } catch {\n return null;\n }\n}\n\nexport function coarTemporalPlainDateToDate(date: Temporal.PlainDate): Date {\n return new Date(date.year, date.month - 1, date.day);\n}\n\nexport function coarCalculateIsoWeekNumber(date: Temporal.PlainDate): number {\n const jsDate = coarTemporalPlainDateToDate(date);\n\n const dayOfWeek = jsDate.getDay() || 7;\n jsDate.setDate(jsDate.getDate() + 4 - dayOfWeek);\n\n const yearStart = new Date(jsDate.getFullYear(), 0, 1);\n return Math.ceil(((jsDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n}\n\nexport function coarClampPlainDate(\n date: Temporal.PlainDate,\n constraints?: {\n min?: Temporal.PlainDate | null;\n max?: Temporal.PlainDate | null;\n }\n): Temporal.PlainDate {\n const minDate = constraints?.min ?? null;\n const maxDate = constraints?.max ?? null;\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return minDate;\n }\n\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return maxDate;\n }\n\n return date;\n}\n\nexport interface CoarCalendarGridCell {\n readonly date: Temporal.PlainDate;\n readonly isOutsideMonth: boolean;\n}\n\n/**\n * Returns a fixed 6x7 calendar grid (42 cells) for the given month.\n * Includes leading/trailing days from adjacent months to fill the grid.\n */\nexport function coarGetCalendarGridDates(\n viewMonth: Temporal.PlainYearMonth,\n firstDayOfWeek: 1 | 7\n): CoarCalendarGridCell[] {\n const firstDay = viewMonth.toPlainDate({ day: 1 });\n const daysInMonth = viewMonth.daysInMonth;\n\n const startDayOfWeek = firstDay.dayOfWeek; // Temporal: 1=Mon ... 7=Sun\n\n let daysFromPrevMonth: number;\n if (firstDayOfWeek === 1) {\n // Monday first: Monday=0, Tuesday=1, ..., Sunday=6\n daysFromPrevMonth = (startDayOfWeek - 1 + 7) % 7;\n } else {\n // Sunday first: Sunday=0, Monday=1, ..., Saturday=6\n // Temporal uses: Sunday=7, so we convert via modulo\n daysFromPrevMonth = startDayOfWeek % 7;\n }\n\n const cells: CoarCalendarGridCell[] = [];\n\n if (daysFromPrevMonth > 0) {\n const prevMonth = viewMonth.subtract({ months: 1 });\n const prevMonthDays = prevMonth.daysInMonth;\n for (let i = daysFromPrevMonth - 1; i >= 0; i--) {\n const day = prevMonth.toPlainDate({ day: prevMonthDays - i });\n cells.push({ date: day, isOutsideMonth: true });\n }\n }\n\n for (let d = 1; d <= daysInMonth; d++) {\n const day = viewMonth.toPlainDate({ day: d });\n cells.push({ date: day, isOutsideMonth: false });\n }\n\n const remainingDays = 42 - cells.length;\n const nextMonth = viewMonth.add({ months: 1 });\n for (let d = 1; d <= remainingDays; d++) {\n const day = nextMonth.toPlainDate({ day: d });\n cells.push({ date: day, isOutsideMonth: true });\n }\n\n return cells;\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n NgZone,\n output,\n signal,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport type { DateFormatConfig } from '../_shared/coar-date-format';\nimport type { CoarDateMarker } from '../_shared/coar-date-marker';\nimport {\n coarCalculateIsoWeekNumber,\n coarClampPlainDate,\n coarDetectDateFormatPatternFromIntl,\n coarGetCalendarGridDates,\n coarGetLocalizedWeekdays,\n} from '../_shared/coar-date-helpers';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\n\nimport {\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\n/**\n * Represents a single month view in the scrollable calendar.\n */\nexport interface CoarCalendarMonth {\n readonly yearMonth: Temporal.PlainYearMonth;\n readonly monthName: string;\n readonly year: number;\n readonly days: CoarCalendarDay[];\n readonly weekNumbers: number[];\n}\n\n/**\n * Represents a single day cell in the calendar.\n */\nexport interface CoarCalendarDay {\n readonly date: Temporal.PlainDate;\n readonly day: number;\n readonly isOutsideMonth: boolean;\n readonly isToday: boolean;\n readonly isSelected: boolean;\n readonly isFocused: boolean;\n readonly isDisabled: boolean;\n readonly isWeekend: boolean;\n readonly markers: CoarDateMarker[];\n readonly markerCssClass: string;\n readonly markerTooltip: string | null;\n}\n\n/**\n * Scrollable calendar component displaying multiple months vertically.\n *\n * Uses CSS `content-visibility: auto` for virtualization to optimize performance\n * when displaying many months. The calendar scrolls vertically and syncs with\n * an external month list for navigation.\n *\n * @example\n * ```html\n * <coar-scrollable-calendar\n * [(value)]=\"selectedDate\"\n * [(activeMonth)]=\"visibleMonth\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-scrollable-calendar',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-scrollable-calendar.component.html',\n styleUrl: './coar-scrollable-calendar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class CoarScrollableCalendarComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n private readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n private readonly ngZone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // View References\n // ============================================================\n\n /** Reference to the scroll container */\n protected scrollContainerRef = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n /** Reference to the scrollbar directive */\n protected scrollbarDirective = viewChild(CoarScrollbarDirective);\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Current selected date (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Currently visible/active month (two-way bindable, syncs with scroll position) */\n activeMonth = model<Temporal.PlainYearMonth>(Temporal.Now.plainDateISO().toPlainYearMonth());\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /** Date format configuration (pattern and first day of week) */\n dateFormatConfig = input<DateFormatConfig>();\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days (Saturday/Sunday) with a subtle background */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates (holidays, events, etc.) */\n markers = input<CoarDateMarker[]>([]);\n\n /**\n * Number of months to display before and after the current year.\n * Default: 12 months before, 12 months after (2 years total + current year).\n * @deprecated Use infinite scroll instead - this input is kept for backwards compatibility\n */\n monthRange = input<{ before: number; after: number }>({ before: 12, after: 12 });\n\n /**\n * Maximum number of months to keep in the DOM at once.\n * Default: 25 (roughly 2 years). Lower values improve performance but may cause\n * more frequent loading when scrolling quickly.\n */\n maxMonthsInDom = input<number>(25);\n\n /**\n * Number of months to load when reaching the edge of the current range.\n * Default: 6 (half a year at a time).\n */\n monthsToLoad = input<number>(6);\n\n // ============================================================\n // Outputs\n // ============================================================\n\n /** Emitted when a date is clicked */\n dateSelected = output<Temporal.PlainDate>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Focused date for keyboard navigation */\n protected readonly focusedDate = signal<Temporal.PlainDate | null>(null);\n\n /**\n * Today's date based on the configured timezone.\n * Reactive: updates when timezone changes.\n */\n protected readonly today = computed(() => {\n const tz = this.timeZoneService?.currentTimeZone();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n /** Flag to prevent scroll events while programmatically scrolling */\n private isScrollingProgrammatically = false;\n\n /** Flag to track when activeMonth is updated from scroll handler (prevents effect feedback loop) */\n private isUpdatingFromScroll = false;\n\n /** Flag to prevent multiple concurrent infinite scroll loads */\n private isLoadingMonths = false;\n\n /** Becomes true once the actual scroll viewport element is available (OverlayScrollbars initialized). */\n private readonly scrollViewportReady = signal(false);\n\n /** Becomes true once the calendar is properly scrolled to the active month. Prevents visible flickering. */\n protected readonly isScrollPositioned = signal(false);\n\n /** The earliest month currently in the DOM */\n private earliestMonth = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth().subtract({ months: 12 })\n );\n\n /** The latest month currently in the DOM */\n private latestMonth = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth().add({ months: 12 })\n );\n\n /** Signal-based months array for infinite scroll */\n protected months = signal<CoarCalendarMonth[]>([]);\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /**\n * Minimum month boundary derived from min date input.\n * Infinite scroll will not load months before this.\n */\n private minMonth = computed(() => {\n const minDate = this.min();\n return minDate ? minDate.toPlainYearMonth() : null;\n });\n\n /**\n * Maximum month boundary derived from max date input.\n * Infinite scroll will not load months after this.\n */\n private maxMonth = computed(() => {\n const maxDate = this.max();\n return maxDate ? maxDate.toPlainYearMonth() : null;\n });\n\n /**\n * Effective locale for calendar display.\n * Priority: input locale > locale service language > browser locale\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be 'de' or 'de-AT'. Using effectiveLocale() ensures the per-instance\n // locale input is respected.\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n // Convert 0-6 (Sun-Sat) format to ISO 1-7 (Mon-Sun) format\n // 0 (Sun) -> 7, 1 (Mon) -> 1, 2 (Tue) -> 2, ..., 6 (Sat) -> 6\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n // Fallback: detect pattern from Intl, default firstDayOfWeek to Monday\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n protected firstDayOfWeek = computed(() => this.effectiveDateFormat().firstDayOfWeek);\n\n protected daysOfWeek = computed(() => {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date?.dayNamesShort?.length === 7) {\n // dayNamesShort is [Mon, Tue, Wed, Thu, Fri, Sat, Sun] (Monday-first)\n const names = [...localeData.date.dayNamesShort];\n if (this.firstDayOfWeek() === 7) {\n // Sunday first: move Sunday from end to front\n const sunday = names.pop()!;\n names.unshift(sunday);\n }\n return names;\n }\n return coarGetLocalizedWeekdays(this.effectiveLocale(), this.firstDayOfWeek());\n });\n\n /**\n * Weekday headers with weekend flag for styling.\n * Returns array of { name, isWeekend } for each day.\n */\n protected weekdayHeaders = computed(() => {\n const names = this.daysOfWeek();\n const firstDay = this.firstDayOfWeek();\n\n return names.map((name, index) => {\n // Calculate which ISO day of week this is (1=Mon, 7=Sun)\n // If firstDayOfWeek is 1 (Monday): index 0=Mon(1), index 5=Sat(6), index 6=Sun(7)\n // If firstDayOfWeek is 7 (Sunday): index 0=Sun(7), index 1=Mon(1), index 6=Sat(6)\n let isoDayOfWeek: number;\n if (firstDay === 1) {\n isoDayOfWeek = index + 1; // 0->1(Mon), 5->6(Sat), 6->7(Sun)\n } else {\n isoDayOfWeek = index === 0 ? 7 : index; // 0->7(Sun), 1->1(Mon), 6->6(Sat)\n }\n const isWeekend = isoDayOfWeek === 6 || isoDayOfWeek === 7;\n return { name, isWeekend };\n });\n });\n\n // ============================================================\n // Constructor & Effects\n // ============================================================\n\n /** Flag to track pending scroll after month loading */\n private pendingScrollTarget: Temporal.PlainYearMonth | null = null;\n\n /** Track previous marker/value/min/max/focusedDate/locale state to avoid unnecessary rebuilds */\n private lastMarkersLength = 0;\n private lastValueString = '';\n private lastHighlightWeekends = false;\n private lastMinString = '';\n private lastMaxString = '';\n private lastFocusedDateString = '';\n private lastLocale = '';\n\n private readonly monthScrollTopInsetPx = 0;\n\n constructor() {\n // Initialize the months array\n this.initializeMonths();\n\n // Scroll to active month on initial render and set up scroll listener\n afterNextRender(() => {\n this.setupScrollListener();\n });\n\n // Watch for external activeMonth changes and scroll to it\n effect(() => {\n const isViewportReady = this.scrollViewportReady();\n const month = this.activeMonth();\n\n if (!isViewportReady) return;\n // Only scroll if not triggered by our own scroll handler or programmatic scroll\n if (!this.isScrollingProgrammatically && !this.isUpdatingFromScroll) {\n // Ensure the month is in the DOM before scrolling\n this.scrollToMonthWithLoad(month);\n }\n });\n\n // Rebuild months when markers, value, highlightWeekends, min/max, focusedDate, or locale changes\n // Min/max affects the isDisabled state of individual days\n // Locale affects month names\n effect(() => {\n const markers = this.markers();\n const value = this.value();\n const highlightWeekends = this.highlightWeekends();\n const min = this.min();\n const max = this.max();\n const focusedDate = this.focusedDate();\n const locale = this.effectiveLocale();\n\n // Check if anything actually changed\n const valueString = value?.toString() ?? '';\n const markersLength = markers.length;\n const minString = min?.toString() ?? '';\n const maxString = max?.toString() ?? '';\n const focusedDateString = focusedDate?.toString() ?? '';\n\n if (\n markersLength !== this.lastMarkersLength ||\n valueString !== this.lastValueString ||\n highlightWeekends !== this.lastHighlightWeekends ||\n minString !== this.lastMinString ||\n maxString !== this.lastMaxString ||\n focusedDateString !== this.lastFocusedDateString ||\n locale !== this.lastLocale\n ) {\n this.lastMarkersLength = markersLength;\n this.lastValueString = valueString;\n this.lastHighlightWeekends = highlightWeekends;\n this.lastMinString = minString;\n this.lastMaxString = maxString;\n this.lastFocusedDateString = focusedDateString;\n this.lastLocale = locale;\n\n // Only rebuild if we have months (after initialization)\n if (this.months().length > 0) {\n this.rebuildMonths();\n }\n }\n });\n\n // Watch for min/max input changes and constrain months array\n // This is needed because inputs are not available in the constructor\n effect(() => {\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n const currentMonths = this.months();\n\n // Only run if we have months (after initialization)\n if (currentMonths.length === 0) return;\n\n this.constrainMonthsToRange(minMonth, maxMonth);\n });\n\n // Initialize focused date: default to value or today\n effect(() => {\n const val = this.value();\n if (val && !this.focusedDate()) {\n this.focusedDate.set(val);\n }\n });\n\n effect(() => {\n if (this.value()) return;\n if (this.focusedDate()) return;\n this.focusedDate.set(this.today());\n });\n }\n\n /**\n * Constrains the months array to respect min/max boundaries.\n * Removes months outside the allowed range and updates boundary signals.\n */\n private constrainMonthsToRange(\n minMonth: Temporal.PlainYearMonth | null,\n maxMonth: Temporal.PlainYearMonth | null\n ): void {\n const currentMonths = this.months();\n if (currentMonths.length === 0) return;\n\n const currentEarliest = this.earliestMonth();\n const currentLatest = this.latestMonth();\n\n // Determine new boundaries\n let newEarliest = currentEarliest;\n let newLatest = currentLatest;\n\n if (minMonth && Temporal.PlainYearMonth.compare(newEarliest, minMonth) < 0) {\n newEarliest = minMonth;\n }\n if (maxMonth && Temporal.PlainYearMonth.compare(newLatest, maxMonth) > 0) {\n newLatest = maxMonth;\n }\n\n // Check if we need to trim the months array\n const needsTrim =\n Temporal.PlainYearMonth.compare(newEarliest, currentEarliest) !== 0 ||\n Temporal.PlainYearMonth.compare(newLatest, currentLatest) !== 0;\n\n if (!needsTrim) return;\n\n // Filter months to only include those within the new boundaries\n const filteredMonths = currentMonths.filter((month) => {\n const ym = month.yearMonth;\n const afterOrAtMin = Temporal.PlainYearMonth.compare(ym, newEarliest) >= 0;\n const beforeOrAtMax = Temporal.PlainYearMonth.compare(ym, newLatest) <= 0;\n return afterOrAtMin && beforeOrAtMax;\n });\n\n // Update boundary signals and months array\n this.earliestMonth.set(newEarliest);\n this.latestMonth.set(newLatest);\n this.months.set(filteredMonths);\n }\n\n /**\n * Rebuilds all months to update day states (selected, markers, etc.)\n */\n private rebuildMonths(): void {\n const currentMonths = this.months();\n if (currentMonths.length === 0) return;\n\n const updatedMonths = currentMonths.map((month) => this.createCalendarMonth(month.yearMonth));\n this.months.set(updatedMonths);\n }\n\n /**\n * Scrolls to a month, loading it first if necessary.\n */\n private scrollToMonthWithLoad(targetMonth: Temporal.PlainYearMonth): void {\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n // Check if month is already in range\n const isInRange =\n Temporal.PlainYearMonth.compare(targetMonth, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(targetMonth, latest) <= 0;\n\n if (isInRange) {\n // Month is already loaded, scroll to it instantly\n // Using instant scroll to avoid timing issues with infinite scroll detection\n // Smooth scroll could still be animating when the programmatic flag resets,\n // causing checkInfiniteScroll to trigger and load more months\n this.scrollToMonth(targetMonth, false);\n } else {\n // Need to load months first, then scroll\n // Block infinite scroll and scroll events during targeted navigation\n this.isScrollingProgrammatically = true;\n this.pendingScrollTarget = targetMonth;\n this.loadMonthsToReach(targetMonth);\n }\n }\n\n /**\n * Loads months to reach a target month that's outside the current range.\n */\n private loadMonthsToReach(targetMonth: Temporal.PlainYearMonth): void {\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n if (Temporal.PlainYearMonth.compare(targetMonth, earliest) < 0) {\n // Target is before our range - load earlier months\n const monthsNeeded =\n (earliest.year - targetMonth.year) * 12 + (earliest.month - targetMonth.month);\n this.loadEarlierMonthsSync(monthsNeeded + 3); // Add buffer\n } else {\n // Target is after our range - load later months\n const monthsNeeded =\n (targetMonth.year - latest.year) * 12 + (targetMonth.month - latest.month);\n this.loadLaterMonthsSync(monthsNeeded + 3); // Add buffer\n }\n }\n\n /**\n * Sets up scroll listener on the OverlayScrollbars viewport element.\n * Native scroll events don't fire on the original element when using OverlayScrollbars.\n */\n private setupScrollListener(): void {\n const maxAttempts = 50;\n const attemptDelayMs = 50;\n let attempts = 0;\n\n const tryAttach = () => {\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) {\n attempts++;\n if (attempts <= maxAttempts) {\n setTimeout(tryAttach, attemptDelayMs);\n }\n return;\n }\n\n this.scrollViewportReady.set(true);\n\n // Listen to scroll events on the actual scroll viewport element.\n // Native scroll events won't fire on the host element when using OverlayScrollbars.\n const scrollHandler = () => this.onScroll();\n this.ngZone.runOutsideAngular(() => {\n viewport.addEventListener('scroll', scrollHandler, { passive: true });\n });\n\n this.destroyRef.onDestroy(() => {\n viewport.removeEventListener('scroll', scrollHandler);\n });\n\n // OverlayScrollbars initialization can reset the scroll position.\n // Re-align after the viewport exists (effect already triggered by scrollViewportReady).\n this.ensureMonthAlignedInViewport(this.activeMonth());\n };\n\n tryAttach();\n }\n\n private getScrollViewportElement(): HTMLElement | null {\n const osViewport = this.scrollbarDirective()?.getInstance()?.elements().viewport;\n if (osViewport) return osViewport;\n\n const container = this.scrollContainerRef()?.nativeElement ?? null;\n if (!container) return null;\n\n const firstChild = container.firstElementChild as HTMLElement | null;\n if (firstChild && firstChild.scrollHeight > firstChild.clientHeight) return firstChild;\n if (container.scrollHeight > container.clientHeight) return container;\n\n return firstChild ?? container;\n }\n\n private ensureMonthAlignedInViewport(targetMonth: Temporal.PlainYearMonth): void {\n let attempts = 0;\n const maxAttempts = 40;\n\n this.isScrollingProgrammatically = true;\n\n const tryAlign = () => {\n attempts++;\n\n const container = this.scrollContainerRef()?.nativeElement;\n const viewport = this.getScrollViewportElement();\n if (!container || !viewport) {\n if (attempts < maxAttempts) requestAnimationFrame(tryAlign);\n else {\n this.isScrollingProgrammatically = false;\n // Show calendar even if alignment failed to avoid permanent invisible state\n this.isScrollPositioned.set(true);\n }\n return;\n }\n\n const monthId = this.getMonthElementId(targetMonth);\n const monthElement = container.querySelector(`#${monthId}`) as HTMLElement | null;\n if (!monthElement) {\n if (attempts < maxAttempts) requestAnimationFrame(tryAlign);\n else {\n this.isScrollingProgrammatically = false;\n this.isScrollPositioned.set(true);\n }\n return;\n }\n\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n const offset = monthRect.top - viewportRect.top - this.monthScrollTopInsetPx;\n\n if (Math.abs(offset) > 1) {\n viewport.scrollTop = viewport.scrollTop + offset;\n }\n\n // Calendar is now visible at correct position - show it immediately on first successful alignment\n if (!this.isScrollPositioned()) {\n this.isScrollPositioned.set(true);\n }\n\n if (attempts < maxAttempts) {\n requestAnimationFrame(tryAlign);\n return;\n }\n\n setTimeout(() => {\n this.isScrollingProgrammatically = false;\n }, 50);\n };\n\n requestAnimationFrame(tryAlign);\n }\n\n private scrollMonthElementToTop(monthElement: HTMLElement, smooth: boolean): void {\n const viewport = this.getScrollViewportElement();\n\n if (viewport) {\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n const currentScrollTop = viewport.scrollTop;\n const targetScrollTop =\n currentScrollTop + (monthRect.top - viewportRect.top) - this.monthScrollTopInsetPx;\n\n this.isScrollingProgrammatically = true;\n viewport.scrollTo({\n top: targetScrollTop,\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n setTimeout(\n () => {\n this.isScrollingProgrammatically = false;\n },\n smooth ? 500 : 50\n );\n return;\n }\n\n this.isScrollingProgrammatically = true;\n monthElement.scrollIntoView({\n behavior: smooth ? 'smooth' : 'instant',\n block: 'start',\n });\n\n setTimeout(\n () => {\n this.isScrollingProgrammatically = false;\n },\n smooth ? 500 : 50\n );\n }\n\n /**\n * Initializes the months array with an initial range around today.\n * Respects min/max date constraints when setting boundaries.\n */\n private initializeMonths(): void {\n const baseMonth = this.today().toPlainYearMonth();\n const range = this.monthRange();\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n\n // Calculate initial range boundaries\n let earliest = baseMonth.subtract({ months: range.before });\n let latest = baseMonth.add({ months: range.after });\n\n // Clamp to min/max constraints\n if (minMonth && Temporal.PlainYearMonth.compare(earliest, minMonth) < 0) {\n earliest = minMonth;\n }\n if (maxMonth && Temporal.PlainYearMonth.compare(latest, maxMonth) > 0) {\n latest = maxMonth;\n }\n\n // Set the range boundaries\n this.earliestMonth.set(earliest);\n this.latestMonth.set(latest);\n\n // Generate initial months\n const initialMonths: CoarCalendarMonth[] = [];\n let current = this.earliestMonth();\n const end = this.latestMonth();\n\n while (Temporal.PlainYearMonth.compare(current, end) <= 0) {\n initialMonths.push(this.createCalendarMonth(current));\n current = current.add({ months: 1 });\n }\n\n this.months.set(initialMonths);\n }\n\n /**\n * Checks if we need to load more months based on scroll position.\n * Respects min/max constraints - won't load beyond boundaries.\n */\n private checkInfiniteScroll(): void {\n if (this.isLoadingMonths || this.isScrollingProgrammatically) {\n return;\n }\n\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) return;\n\n const scrollTop = viewport.scrollTop;\n const scrollHeight = viewport.scrollHeight;\n const clientHeight = viewport.clientHeight;\n const threshold = 500; // pixels from edge to trigger load\n\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n const currentEarliest = this.earliestMonth();\n const currentLatest = this.latestMonth();\n\n // Check if near top - load earlier months (only if not at min boundary)\n const canLoadEarlier =\n !minMonth || Temporal.PlainYearMonth.compare(currentEarliest, minMonth) > 0;\n if (scrollTop < threshold && canLoadEarlier) {\n this.loadEarlierMonths(this.monthsToLoad());\n }\n\n // Check if near bottom - load later months (only if not at max boundary)\n const canLoadLater = !maxMonth || Temporal.PlainYearMonth.compare(currentLatest, maxMonth) < 0;\n if (scrollHeight - scrollTop - clientHeight < threshold && canLoadLater) {\n this.loadLaterMonths(this.monthsToLoad());\n }\n }\n\n /**\n * Loads earlier months and maintains scroll position.\n * Respects min date constraint - won't load beyond minMonth.\n */\n private loadEarlierMonths(count: number): void {\n if (this.isLoadingMonths) return;\n\n const minMonth = this.minMonth();\n const currentEarliest = this.earliestMonth();\n\n // Check if already at min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(currentEarliest, minMonth) <= 0) {\n return;\n }\n\n this.isLoadingMonths = true;\n\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n const scrollHeightBefore = viewport?.scrollHeight ?? 0;\n\n // Generate new months, stopping at min boundary\n const newMonths: CoarCalendarMonth[] = [];\n let current = currentEarliest;\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.subtract({ months: 1 });\n\n // Stop if we've reached the min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(nextMonth, minMonth) < 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.unshift(this.createCalendarMonth(current));\n }\n\n // Only proceed if we have months to add\n if (newMonths.length === 0) {\n this.isLoadingMonths = false;\n return;\n }\n\n this.earliestMonth.set(current);\n\n // Add new months to the beginning\n this.ngZone.run(() => {\n this.months.update((months: CoarCalendarMonth[]) => [...newMonths, ...months]);\n\n // Trim from the end if we have too many months\n this.trimMonthsFromEnd();\n });\n\n // Maintain scroll position after DOM update\n requestAnimationFrame(() => {\n if (viewport) {\n const scrollHeightAfter = viewport.scrollHeight;\n const addedHeight = scrollHeightAfter - scrollHeightBefore;\n viewport.scrollTop += addedHeight;\n }\n this.isLoadingMonths = false;\n this.checkPendingScroll();\n });\n }\n\n /**\n * Loads later months.\n * Respects max date constraint - won't load beyond maxMonth.\n */\n private loadLaterMonths(count: number): void {\n if (this.isLoadingMonths) return;\n\n const maxMonth = this.maxMonth();\n const currentLatest = this.latestMonth();\n\n // Check if already at max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(currentLatest, maxMonth) >= 0) {\n return;\n }\n\n this.isLoadingMonths = true;\n\n // Generate new months, stopping at max boundary\n const newMonths: CoarCalendarMonth[] = [];\n let current = currentLatest;\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.add({ months: 1 });\n\n // Stop if we've exceeded the max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(nextMonth, maxMonth) > 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.push(this.createCalendarMonth(current));\n }\n\n // Only proceed if we have months to add\n if (newMonths.length === 0) {\n this.isLoadingMonths = false;\n return;\n }\n\n this.latestMonth.set(current);\n\n // Add new months to the end\n this.ngZone.run(() => {\n this.months.update((months: CoarCalendarMonth[]) => [...months, ...newMonths]);\n\n // Trim from the beginning if we have too many months\n this.trimMonthsFromBeginning();\n });\n\n // Small delay to allow DOM to update\n requestAnimationFrame(() => {\n this.isLoadingMonths = false;\n this.checkPendingScroll();\n });\n }\n\n /**\n * Loads earlier months synchronously (for targeted navigation).\n * Does not maintain scroll position - caller handles scrolling.\n * Respects min date constraint.\n */\n private loadEarlierMonthsSync(count: number): void {\n const minMonth = this.minMonth();\n\n // Generate new months, respecting min constraint\n const newMonths: CoarCalendarMonth[] = [];\n let current = this.earliestMonth();\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.subtract({ months: 1 });\n\n // Stop if we've reached the min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(nextMonth, minMonth) < 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.unshift(this.createCalendarMonth(current));\n }\n\n if (newMonths.length === 0) return;\n\n this.earliestMonth.set(current);\n\n // Add new months to the beginning (no trimming for targeted navigation)\n this.months.update((months: CoarCalendarMonth[]) => [...newMonths, ...months]);\n\n // Schedule scroll after DOM update\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkPendingScroll();\n });\n });\n }\n\n /**\n * Loads later months synchronously (for targeted navigation).\n * Respects max date constraint.\n */\n private loadLaterMonthsSync(count: number): void {\n const maxMonth = this.maxMonth();\n\n // Generate new months, respecting max constraint\n const newMonths: CoarCalendarMonth[] = [];\n let current = this.latestMonth();\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.add({ months: 1 });\n\n // Stop if we've exceeded the max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(nextMonth, maxMonth) > 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.push(this.createCalendarMonth(current));\n }\n\n if (newMonths.length === 0) return;\n\n this.latestMonth.set(current);\n\n // Add new months to the end (no trimming for targeted navigation)\n this.months.update((months: CoarCalendarMonth[]) => [...months, ...newMonths]);\n\n // Schedule scroll after DOM update\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkPendingScroll();\n });\n });\n }\n\n /**\n * Checks if there's a pending scroll target and scrolls to it if available.\n */\n private checkPendingScroll(): void {\n if (!this.pendingScrollTarget) return;\n\n const target = this.pendingScrollTarget;\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n // Check if target is now in range\n const isInRange =\n Temporal.PlainYearMonth.compare(target, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(target, latest) <= 0;\n\n if (isInRange) {\n this.pendingScrollTarget = null;\n\n // Scroll to the target month (instant, no animation)\n const container = this.scrollContainerRef()?.nativeElement;\n if (container) {\n const monthId = this.getMonthElementId(target);\n const monthElement = container.querySelector(`#${monthId}`);\n if (monthElement) {\n this.scrollMonthElementToTop(monthElement as HTMLElement, false);\n }\n }\n\n // Update activeMonth after instant scroll (onScroll won't fire for instant jumps)\n this.isUpdatingFromScroll = true;\n this.activeMonth.set(target);\n\n // Reset flags after a short delay to allow any queued scroll events to be ignored\n setTimeout(() => {\n this.isScrollingProgrammatically = false;\n this.isUpdatingFromScroll = false;\n }, 100);\n }\n }\n\n /**\n * Trims months from the end of the array to stay within maxMonthsInDom.\n */\n private trimMonthsFromEnd(): void {\n const max = this.maxMonthsInDom();\n const currentMonths = this.months();\n\n if (currentMonths.length > max) {\n const trimCount = currentMonths.length - max;\n const trimmed = currentMonths.slice(0, -trimCount);\n this.months.set(trimmed);\n this.latestMonth.set(trimmed[trimmed.length - 1].yearMonth);\n }\n }\n\n /**\n * Trims months from the beginning of the array to stay within maxMonthsInDom.\n */\n private trimMonthsFromBeginning(): void {\n const max = this.maxMonthsInDom();\n const currentMonths = this.months();\n\n if (currentMonths.length > max) {\n const trimCount = currentMonths.length - max;\n const trimmed = currentMonths.slice(trimCount);\n this.months.set(trimmed);\n this.earliestMonth.set(trimmed[0].yearMonth);\n }\n }\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /**\n * Scrolls to a specific month in the calendar.\n *\n * @param yearMonth - The month to scroll to\n * @param smooth - Whether to use smooth scrolling animation\n */\n scrollToMonth(yearMonth: Temporal.PlainYearMonth, smooth = true): void {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const monthId = this.getMonthElementId(yearMonth);\n const monthElement = container.querySelector(`#${monthId}`);\n if (!monthElement) return;\n\n this.scrollMonthElementToTop(monthElement as HTMLElement, smooth);\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n /** Handle scroll events to update active month */\n protected onScroll(): void {\n if (this.isScrollingProgrammatically) {\n return;\n }\n\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const viewport = this.getScrollViewportElement() ?? container;\n\n // Find the month element with the most visible area\n const monthElements = container.querySelectorAll('[data-year-month]');\n const viewportRect = viewport.getBoundingClientRect();\n const containerTop = viewportRect.top;\n const containerBottom = viewportRect.bottom;\n\n let mostVisibleMonth: Temporal.PlainYearMonth | null = null;\n let maxVisibleArea = 0;\n\n for (let i = 0; i < monthElements.length; i++) {\n const element = monthElements[i];\n const rect = element.getBoundingClientRect();\n\n // Calculate visible portion of this month element\n const visibleTop = Math.max(rect.top, containerTop);\n const visibleBottom = Math.min(rect.bottom, containerBottom);\n const visibleHeight = Math.max(0, visibleBottom - visibleTop);\n\n if (visibleHeight > maxVisibleArea) {\n maxVisibleArea = visibleHeight;\n const yearMonthStr = element.getAttribute('data-year-month');\n if (yearMonthStr) {\n mostVisibleMonth = Temporal.PlainYearMonth.from(yearMonthStr);\n }\n }\n }\n\n if (mostVisibleMonth && !mostVisibleMonth.equals(this.activeMonth())) {\n // Set flag to prevent effect from triggering scroll\n this.isUpdatingFromScroll = true;\n // Run inside Angular zone since scroll listener runs outside\n this.ngZone.run(() => {\n this.activeMonth.set(mostVisibleMonth);\n });\n // Reset flag after a microtask to ensure effect has run\n queueMicrotask(() => {\n this.isUpdatingFromScroll = false;\n });\n }\n\n // Check if we need to load more months (infinite scroll)\n this.checkInfiniteScroll();\n }\n\n /** Handle keyboard navigation */\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const focused = this.focusedDate();\n if (focused) {\n this.selectDate(focused);\n }\n break;\n }\n case 'ArrowLeft':\n event.preventDefault();\n this.moveFocus(-1, 'day');\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.moveFocus(1, 'day');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-7, 'day');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(7, 'day');\n break;\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(-1, 'year');\n } else {\n this.moveFocus(-1, 'month');\n }\n break;\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(1, 'year');\n } else {\n this.moveFocus(1, 'month');\n }\n break;\n case 'Home':\n event.preventDefault();\n this.focusedDate.set(this.today());\n this.scrollToFocusedDate(this.today());\n break;\n }\n }\n\n /** Handle date selection */\n protected selectDate(date: Temporal.PlainDate): void {\n if (this.isDateDisabled(date)) return;\n\n this.value.set(date);\n this.dateSelected.emit(date);\n this.focusedDate.set(date);\n }\n\n // ============================================================\n // Helper Methods\n // ============================================================\n\n /**\n * Moves keyboard focus by the given amount and unit.\n * Clamps to min/max, auto-scrolls to keep the focused date visible.\n */\n private moveFocus(amount: number, unit: 'day' | 'month' | 'year'): void {\n const current = this.focusedDate() ?? this.value() ?? this.today();\n\n let newDate: Temporal.PlainDate;\n switch (unit) {\n case 'day':\n newDate = current.add({ days: amount });\n break;\n case 'month':\n newDate = current.add({ months: amount });\n break;\n case 'year':\n newDate = current.add({ years: amount });\n break;\n }\n\n newDate = coarClampPlainDate(newDate, { min: this.min(), max: this.max() });\n\n this.focusedDate.set(newDate);\n this.scrollToFocusedDate(newDate);\n }\n\n /**\n * Scrolls to ensure the focused date's month is visible, then focuses the button element.\n */\n private scrollToFocusedDate(date: Temporal.PlainDate): void {\n const targetMonth = date.toPlainYearMonth();\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n const isInRange =\n Temporal.PlainYearMonth.compare(targetMonth, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(targetMonth, latest) <= 0;\n\n if (!isInRange) {\n this.scrollToMonthWithLoad(targetMonth);\n this.focusDateButtonAfterDelay(date);\n return;\n }\n\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const monthId = this.getMonthElementId(targetMonth);\n const monthElement = container.querySelector(`#${monthId}`) as HTMLElement | null;\n\n if (monthElement) {\n const viewport = this.getScrollViewportElement();\n if (viewport) {\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n\n const isAbove = monthRect.bottom < viewportRect.top;\n const isBelow = monthRect.top > viewportRect.bottom;\n\n if (isAbove || isBelow) {\n this.scrollMonthElementToTop(monthElement, false);\n }\n }\n }\n\n this.focusDateButton(date);\n }\n\n private focusDateButton(date: Temporal.PlainDate): void {\n requestAnimationFrame(() => {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const dateStr = date.toString();\n const button = container.querySelector(\n `button[data-date=\"${dateStr}\"]`\n ) as HTMLElement | null;\n if (button) {\n button.focus();\n }\n });\n }\n\n private focusDateButtonAfterDelay(date: Temporal.PlainDate): void {\n setTimeout(() => {\n this.focusDateButton(date);\n }, 200);\n }\n\n /** Generate a unique element ID for a month */\n protected getMonthElementId(yearMonth: Temporal.PlainYearMonth): string {\n return `month-${yearMonth.year}-${yearMonth.month}`;\n }\n\n /** Check if a date is disabled (outside min/max range) */\n protected isDateDisabled(date: Temporal.PlainDate): boolean {\n const minDate = this.min();\n const maxDate = this.max();\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return true;\n }\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return true;\n }\n return false;\n }\n\n /** Create a calendar month object */\n private createCalendarMonth(yearMonth: Temporal.PlainYearMonth): CoarCalendarMonth {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const monthName = localeData?.date?.monthNames?.[yearMonth.month - 1]\n ?? new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(yearMonth.year, yearMonth.month - 1, 1));\n\n const gridCells = coarGetCalendarGridDates(yearMonth, this.firstDayOfWeek());\n const days = gridCells.map((cell) => this.createCalendarDay(cell.date, cell.isOutsideMonth));\n\n // Calculate week numbers (one per row, 6 rows)\n const weekNumbers: number[] = [];\n for (let row = 0; row < 6; row++) {\n const firstDayOfRow = gridCells[row * 7];\n weekNumbers.push(coarCalculateIsoWeekNumber(firstDayOfRow.date));\n }\n\n return {\n yearMonth,\n monthName,\n year: yearMonth.year,\n days,\n weekNumbers,\n };\n }\n\n /** Create a calendar day object */\n private createCalendarDay(date: Temporal.PlainDate, isOutsideMonth: boolean): CoarCalendarDay {\n const selectedDate = this.value();\n const focused = this.focusedDate();\n const dayOfWeek = date.dayOfWeek; // 1=Mon, 7=Sun\n\n // Find markers for this date (check if date falls within marker range)\n const dateMarkers = this.markers().filter((marker) => {\n const afterStart = Temporal.PlainDate.compare(date, marker.startDate) >= 0;\n const beforeEnd = marker.endDate\n ? Temporal.PlainDate.compare(date, marker.endDate) <= 0\n : Temporal.PlainDate.compare(date, marker.startDate) === 0;\n return afterStart && beforeEnd;\n });\n\n // Get CSS class from first marker if available\n const markerCssClass = dateMarkers.length > 0 ? (dateMarkers[0].cssClass ?? '') : '';\n\n // Build tooltip from marker descriptions\n const markerTooltip =\n dateMarkers.length > 0\n ? dateMarkers\n .map((m) => m.description)\n .filter(Boolean)\n .join('\\n') || null\n : null;\n\n return {\n date,\n day: date.day,\n isOutsideMonth,\n isToday: Temporal.PlainDate.compare(date, this.today()) === 0,\n isSelected: selectedDate ? Temporal.PlainDate.compare(date, selectedDate) === 0 : false,\n isFocused: focused ? Temporal.PlainDate.compare(date, focused) === 0 : false,\n isDisabled: this.isDateDisabled(date),\n isWeekend: dayOfWeek === 6 || dayOfWeek === 7, // Saturday or Sunday\n markers: dateMarkers,\n markerCssClass,\n markerTooltip,\n };\n }\n}\n","<div class=\"coar-scrollable-calendar\">\n <!-- Weekday headers -->\n <div class=\"coar-scrollable-calendar__weekdays\" [class.coar-scrollable-calendar__weekdays--with-weeks]=\"showWeekNumbers()\">\n @if (showWeekNumbers()) {\n <span class=\"coar-scrollable-calendar__week-spacer\"></span>\n }\n @for (header of weekdayHeaders(); track header.name) {\n <span class=\"coar-scrollable-calendar__weekday\" [class.coar-scrollable-calendar__weekday--weekend]=\"highlightWeekends() && header.isWeekend\">{{\n header.name\n }}</span>\n }\n </div>\n\n <!-- Scrollable months container with fade effect -->\n <div class=\"coar-scrollable-calendar__months-wrapper\" [class.coar-scrollable-calendar__months-wrapper--ready]=\"isScrollPositioned()\">\n <div #scrollContainer class=\"coar-scrollable-calendar__months\" coarScrollbar [overflowX]=\"'hidden'\" [autoHide]=\"'leave'\">\n @for (month of months(); track month.yearMonth.toString()) {\n <div [id]=\"getMonthElementId(month.yearMonth)\" [attr.data-year-month]=\"month.yearMonth.toString()\" class=\"coar-scrollable-calendar__month\">\n <!-- Month header -->\n <div class=\"coar-scrollable-calendar__month-header\" [class.coar-scrollable-calendar__month-header--with-weeks]=\"showWeekNumbers()\">\n <span class=\"coar-scrollable-calendar__month-name\">{{ month.monthName }}</span>\n <span class=\"coar-scrollable-calendar__month-year\">{{ month.year }}</span>\n </div>\n\n <!-- Days grid -->\n <div class=\"coar-scrollable-calendar__grid\" [class.coar-scrollable-calendar__grid--with-weeks]=\"showWeekNumbers()\" role=\"grid\">\n @for (day of month.days; track day.date.toString(); let i = $index) {\n @if (showWeekNumbers() && i % 7 === 0) {\n <span class=\"coar-scrollable-calendar__week-number\">\n {{ month.weekNumbers[i / 7] }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"coar-scrollable-calendar__day\"\n [class.coar-scrollable-calendar__day--outside]=\"day.isOutsideMonth\"\n [class.coar-scrollable-calendar__day--today]=\"day.isToday\"\n [class.coar-scrollable-calendar__day--selected]=\"day.isSelected\"\n [class.coar-scrollable-calendar__day--focused]=\"day.isFocused\"\n [class.coar-scrollable-calendar__day--disabled]=\"day.isDisabled\"\n [class.coar-scrollable-calendar__day--weekend]=\"highlightWeekends() && day.isWeekend\"\n [class.coar-scrollable-calendar__day--marked]=\"day.markers.length > 0\"\n [class]=\"day.markerCssClass\"\n [disabled]=\"day.isDisabled\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n [attr.data-date]=\"day.date.toString()\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","/**\n * Shared date formatting configuration.\n *\n * Note: This config is intentionally small so it can be used by multiple UI components\n * (date picker, future calendar, etc.) without pulling in Angular-only code.\n */\nexport interface DateFormatConfig {\n /** Date format pattern: 'dd.mm.yyyy', 'dd/mm/yyyy', 'mm/dd/yyyy', 'yyyy-mm-dd' */\n readonly pattern: 'dd.mm.yyyy' | 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy-mm-dd';\n\n /** First day of week: 1 = Monday, 7 = Sunday */\n readonly firstDayOfWeek: 1 | 7;\n}\n\n/**\n * Maps date format patterns to Maskito date modes.\n * Used by all picker components that initialize Maskito input masks.\n */\nexport const COAR_DATE_FORMAT_TO_MASKITO_MODE: Record<\n DateFormatConfig['pattern'],\n 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy/mm/dd'\n> = {\n 'dd.mm.yyyy': 'dd/mm/yyyy',\n 'dd/mm/yyyy': 'dd/mm/yyyy',\n 'mm/dd/yyyy': 'mm/dd/yyyy',\n 'yyyy-mm-dd': 'yyyy/mm/dd',\n};\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef, type Placement } from '@cocoar/ui/overlay';\nimport {\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\nimport type { DateFormatConfig } from './coar-date-format';\nimport type { CoarDateMarker } from './coar-date-marker';\nimport {\n coarDetectDateFormatPatternFromIntl,\n coarGetDateSeparatorForPattern,\n} from './coar-date-helpers';\nimport { CoarControlValueAccessor } from '../../forms/_base/coar-control-value-accessor';\n\n/**\n * Shared size type for date/datetime pickers.\n */\nexport type CoarDatePickerSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Month item structure for the month list.\n */\nexport interface CoarMonthItem {\n readonly month: number;\n readonly name: string;\n readonly isActive: boolean;\n readonly yearMonth: Temporal.PlainYearMonth;\n}\n\n/**\n * Base class for date and datetime picker components.\n *\n * Provides shared functionality:\n * - Localization service integration\n * - Date format configuration resolution\n * - Month list navigation\n * - Overlay management\n * - Common state computations\n *\n * @template T - The value type (PlainDate or PlainDateTime)\n */\n@Directive()\nexport abstract class CoarDatePickerBase<T> extends CoarControlValueAccessor<T | null> {\n // ============================================================\n // Injected Services\n // ============================================================\n\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly overlayBuilder = createOverlayBuilder();\n protected readonly localizationService = inject(CoarLocalizationService, { optional: true });\n protected readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n protected readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n\n protected overlayRef: OverlayRef | null = null;\n\n /** Current language from localization service (reactive) */\n protected readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n /**\n * Current timezone from timezone service (reactive).\n * Used for calculating \"today\" correctly across timezone boundaries and DST.\n */\n protected readonly currentTimeZone = this.timeZoneService?.currentTimeZone;\n\n /**\n * Today's date based on the configured timezone.\n *\n * This is a computed signal that reacts to timezone changes.\n * Uses the timezone service if available, otherwise falls back to system timezone.\n *\n * Important for DST: At 11 PM in Vienna on March 30th, it might already be\n * March 31st in New York. This computed ensures \"today\" is always correct\n * for the configured timezone.\n */\n protected readonly today = computed(() => {\n const tz = this.currentTimeZone?.();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n // ============================================================\n // Common Inputs\n // ============================================================\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text when no value is selected */\n placeholder = input<string>('');\n\n /** Size variant */\n size = input<CoarDatePickerSize>('m');\n\n /** Whether the picker is readonly */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the picker is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the field is required */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message (empty string = no error) */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Date format configuration (pattern and first day of week).\n * If not provided, uses locale service default or falls back to European format.\n */\n dateFormatConfig = input<DateFormatConfig>();\n\n /**\n * Whether to show the current month button (floating action button that scrolls to current month).\n */\n showTodayMonthButton = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates */\n markers = input<CoarDateMarker[]>([]);\n\n /** Whether to show a clear button when a value is selected */\n clearable = input<boolean, unknown>(true, {\n transform: (v: unknown) => (v === '' ? true : booleanAttribute(v)),\n });\n\n /**\n * Minimum year in the year stepper.\n * Default: current year - 100\n */\n minYear = input<number>(Temporal.Now.plainDateISO().year - 100);\n\n /**\n * Maximum year in the year stepper.\n * Default: current year + 50\n */\n maxYear = input<number>(Temporal.Now.plainDateISO().year + 50);\n\n // ============================================================\n // Common Outputs\n // ============================================================\n\n /** Emitted when the picker opens */\n opened = output<void>();\n\n /** Emitted when the picker closes */\n closed = output<void>();\n\n // ============================================================\n // View Queries (resolved from subclass templates)\n // ============================================================\n\n /** Reference to the trigger element */\n protected triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n /** Reference to the panel template */\n protected panelTemplateRef = viewChild<TemplateRef<unknown>>('panelTemplate');\n\n // ============================================================\n // ID Generation\n // ============================================================\n\n /** Unique ID for this component instance. Subclasses must set this with their selector prefix. */\n protected abstract readonly uid: string;\n\n /** ID for the label element */\n protected labelId = computed(() => `${this.uid}-label`);\n\n /** ID for the input element */\n protected inputId = computed(() => `${this.uid}-input`);\n\n /** ID for the panel */\n protected panelId = computed(() => `${this.uid}-panel`);\n\n /** ID for the message element */\n protected messageId = computed(() => `${this.uid}-message`);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Whether the panel is open */\n protected isOpen = signal(false);\n\n /** Panel position (determined before opening) */\n protected panelPosition = signal<'top' | 'bottom'>('bottom');\n\n /** Display value for the input field */\n protected displayValue = signal('');\n\n /** Currently visible month in the calendar (synced with month list) */\n protected activeMonth = signal<Temporal.PlainYearMonth | null>(null);\n\n // ============================================================\n // Computed: Date Format Configuration\n // ============================================================\n\n /**\n * Effective date format configuration.\n * Resolution order:\n * 1. Explicit dateFormatConfig input\n * 2. Localization data store (based on current language)\n * 3. Intl.DateTimeFormat detection from locale\n * 4. Default: European format (dd.mm.yyyy)\n */\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale key.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be a language code ('de') or a full BCP 47 tag ('de-AT').\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n /** Get the date format pattern */\n protected dateFormat = computed(() => this.effectiveDateFormat().pattern);\n\n /** Get the separator character */\n protected separator = computed(() => coarGetDateSeparatorForPattern(this.dateFormat()));\n\n /**\n * Effective locale.\n * Resolution order:\n * 1. Explicit locale input\n * 2. Current language from localization service\n * 3. Browser's navigator.language\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n // ============================================================\n // Computed: Common State\n // ============================================================\n\n /** Whether the picker has an error state */\n protected hasError = computed(() => this.error().length > 0);\n\n /** The message to display (error takes priority over hint) */\n protected displayMessage = computed(() => this.error() || this.hint());\n\n /** Whether the picker is disabled (including CVA disabled state) */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.getValue() !== null && !this.isDisabled() && !this.readonly();\n });\n\n // ============================================================\n // Abstract Methods (subclasses must implement)\n // ============================================================\n\n /**\n * Get the current value. Subclasses implement this to access their typed model.\n */\n protected abstract getValue(): T | null;\n\n /**\n * Get the resolved active month based on the current value.\n * For date picker: value?.toPlainYearMonth()\n * For datetime picker: value?.toPlainDate().toPlainYearMonth()\n */\n protected abstract resolvedActiveMonth(): Temporal.PlainYearMonth;\n\n /**\n * Get the selected date as a PlainDate for marker filtering.\n * For date picker: value()\n * For datetime/zoned pickers: selectedDate() (extracted from value)\n */\n protected abstract getSelectedPlainDate(): Temporal.PlainDate | null;\n\n /**\n * Reset the value to null. Called by clearValue().\n * Subclasses set their model to null, emit valueChange, and handle extra state (e.g. pendingTime).\n */\n protected abstract resetValue(): void;\n\n /**\n * Estimated panel height for overlay placement calculation.\n */\n protected abstract estimatePanelHeight(): number;\n\n // ============================================================\n // Computed: Selected Date Markers\n // ============================================================\n\n /**\n * Markers for the currently selected date.\n */\n protected selectedDateMarkers = computed((): CoarDateMarker[] => {\n const date = this.getSelectedPlainDate();\n if (!date) return [];\n\n return this.markers().filter((marker) => {\n const afterStart = Temporal.PlainDate.compare(date, marker.startDate) >= 0;\n const beforeEnd = marker.endDate\n ? Temporal.PlainDate.compare(date, marker.endDate) <= 0\n : Temporal.PlainDate.compare(date, marker.startDate) === 0;\n return afterStart && beforeEnd;\n });\n });\n\n // ============================================================\n // Computed: Month List\n // ============================================================\n\n /** Current year from activeMonth */\n protected currentYear = computed(() => this.resolvedActiveMonth().year);\n\n /** Current month number from activeMonth (1-12) */\n protected currentMonthNumber = computed(() => this.resolvedActiveMonth().month);\n\n /** Whether previous year button is disabled */\n protected isPrevYearDisabled = computed(() => this.currentYear() <= this.minYear());\n\n /** Whether next year button is disabled */\n protected isNextYearDisabled = computed(() => this.currentYear() >= this.maxYear());\n\n /**\n * Month list items for the current year.\n */\n protected monthItems = computed((): CoarMonthItem[] => {\n const year = this.currentYear();\n const currentMonth = this.currentMonthNumber();\n const locale = this.effectiveLocale();\n\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const cachedMonthNames = localeData?.date?.monthNamesShort;\n\n const formatter = cachedMonthNames ? undefined : new Intl.DateTimeFormat(locale, { month: 'short' });\n\n const items: CoarMonthItem[] = [];\n\n for (let m = 1; m <= 12; m++) {\n const name = cachedMonthNames?.[m - 1]\n ?? formatter!.format(new Date(year, m - 1, 1));\n const yearMonth = Temporal.PlainYearMonth.from({ year, month: m });\n\n items.push({\n month: m,\n name,\n isActive: m === currentMonth,\n yearMonth,\n });\n }\n\n return items;\n });\n\n /** Direction for the \"jump to today\" FAB */\n protected todayMonthScrollDirection = computed((): 'up' | 'down' | 'hidden' => {\n const active = this.resolvedActiveMonth();\n const todayMonth = this.today().toPlainYearMonth();\n const comparison = Temporal.PlainYearMonth.compare(active, todayMonth);\n if (comparison === 0) return 'hidden';\n return comparison > 0 ? 'up' : 'down';\n });\n\n /** Whether to show the today month FAB */\n protected showTodayMonthFab = computed(() => {\n return this.showTodayMonthButton() && this.todayMonthScrollDirection() !== 'hidden';\n });\n\n // ============================================================\n // Month Navigation Methods\n // ============================================================\n\n /** Navigate to previous year */\n protected previousYear(): void {\n if (this.isPrevYearDisabled()) return;\n const current = this.resolvedActiveMonth();\n this.activeMonth.set(current.subtract({ years: 1 }));\n }\n\n /** Navigate to next year */\n protected nextYear(): void {\n if (this.isNextYearDisabled()) return;\n const current = this.resolvedActiveMonth();\n this.activeMonth.set(current.add({ years: 1 }));\n }\n\n /** Select a month from the list */\n protected selectMonth(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n }\n\n /** Scroll to today's month */\n protected scrollToTodayMonth(): void {\n this.activeMonth.set(this.today().toPlainYearMonth());\n }\n\n /** Handle active month change from calendar scroll */\n protected onActiveMonthChanged(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n }\n\n // ============================================================\n // Overlay Helpers\n // ============================================================\n\n /**\n * Resolve overlay placement based on available viewport space.\n */\n protected resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n /**\n * Close the picker panel.\n */\n closePanel(): void {\n if (!this.isOpen()) return;\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n /**\n * Toggle the picker panel.\n */\n togglePanel(): void {\n if (this.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n /**\n * Open the picker panel.\n */\n openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.panelTemplateRef();\n if (!trigger || !template) return;\n\n const verticalPlacement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.panelPosition.set(verticalPlacement === 'top' ? 'top' : 'bottom');\n\n const triggerWidth = trigger.getBoundingClientRect().width;\n const panelMinWidth = this.showWeekNumbers() ? 528 : 480;\n\n const horizontalAlignment = triggerWidth >= panelMinWidth ? '-end' : '';\n const placement = `${verticalPlacement}${horizontalAlignment}` as Placement;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({\n placement,\n offset: 4,\n flip: false,\n shift: true,\n })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content' })\n .fromTemplate(template)\n .open({});\n\n this.overlayRef = ref;\n this.isOpen.set(true);\n this.opened.emit();\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.onPanelClosed();\n this.closed.emit();\n });\n }\n\n /**\n * Hook called when the panel closes. Override in subclasses for cleanup.\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected onPanelClosed(): void {}\n\n /**\n * Clear the selected value.\n */\n clearValue(event: Event): void {\n event.stopPropagation();\n this.resetValue();\n this.cvaOnChange(null);\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onTriggerClick(): void {\n this.togglePanel();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for backward compatibility\nexport type CoarPlainDatePickerSize = CoarDatePickerSize;\n\n/**\n * Date picker component with scrollable calendar.\n *\n * Returns strongly-typed `Temporal.PlainDate` values (timezone-independent, date only).\n *\n * Features:\n * - Two-column layout: scrollable calendar on left, month list on right\n * - No time selection (use `coar-plain-date-time-picker` if time is needed)\n * - CSS-based virtualization for smooth scrolling through months\n *\n * @example\n * ```html\n * <coar-plain-date-picker\n * [(value)]=\"birthDate\"\n * label=\"Date of Birth\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-plain-date-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n ],\n templateUrl: './coar-plain-date-picker.component.html',\n styleUrl: './coar-plain-date-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPlainDatePickerComponent)],\n host: {\n '[class.coar-plain-date-picker--xs]': 'size() === \"xs\"',\n '[class.coar-plain-date-picker--s]': 'size() === \"s\"',\n '[class.coar-plain-date-picker--m]': 'size() === \"m\"',\n '[class.coar-plain-date-picker--l]': 'size() === \"l\"',\n '[class.coar-plain-date-picker--disabled]': 'isDisabled()',\n '[class.coar-plain-date-picker--readonly]': 'readonly()',\n '[class.coar-plain-date-picker--error]': 'hasError()',\n '[class.coar-plain-date-picker--open]': 'isOpen()',\n },\n})\nexport class CoarPlainDatePickerComponent extends CoarDatePickerBase<Temporal.PlainDate> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Date Picker Specific Inputs\n // ============================================================\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /** Whether to close the panel after selecting a date (default: false to allow viewing events) */\n closeOnSelect = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.PlainDate | null>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-plain-date-picker-${CoarPlainDatePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n // ============================================================\n // Computed Values (Date Picker Specific)\n // ============================================================\n\n /** Get placeholder text based on date format */\n protected inputPlaceholder = computed(() => {\n return this.dateFormat().toUpperCase();\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.PlainDate | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.value();\n }\n\n protected override estimatePanelHeight(): number {\n return 340;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.valueChange.emit(null);\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value\n effect(() => {\n const val = this.value();\n if (val) {\n this.displayValue.set(coarFormatPlainDate(val, this.dateFormat()));\n } else {\n this.displayValue.set('');\n }\n });\n\n // Keep Maskito config in sync\n effect(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /** Handle date selection from calendar */\n protected onDateSelected(date: Temporal.PlainDate): void {\n this.value.set(date);\n this.valueChange.emit(date);\n this.cvaOnChange(date);\n\n if (this.closeOnSelect()) {\n this.closePanel();\n }\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.PlainDate | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.PlainDate.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = coarParsePlainDateFromInput(text, this.dateFormat(), {\n min: this.min(),\n max: this.max(),\n });\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = coarParsePlainDateFromInput(currentText, this.dateFormat(), {\n min: this.min(),\n max: this.max(),\n });\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(coarFormatPlainDate(val, this.dateFormat()));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.min();\n const maxDate = this.max();\n\n const options = maskitoDateOptionsGenerator({\n mode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n}\n","<div class=\"coar-plain-date-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-plain-date-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-plain-date-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-plain-date-picker-trigger\"\n [class.coar-plain-date-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-plain-date-picker-trigger--readonly]=\"readonly()\"\n [class.coar-plain-date-picker-trigger--error]=\"hasError()\"\n [class.coar-plain-date-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-plain-date-picker-clear\"\n [class.coar-plain-date-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-plain-date-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-plain-date-picker-panel\"\n [class.coar-plain-date-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date picker\"\n >\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-plain-date-picker-calendar-column\">\n <coar-scrollable-calendar\n [value]=\"value()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-plain-date-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n\n <!-- Right Column: Month List -->\n <div class=\"coar-plain-date-picker-side-column\">\n <!-- Year Stepper -->\n <div class=\"coar-plain-date-picker-year-stepper\">\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-plain-date-picker-year\">{{ currentYear() }}</span>\n <button type=\"button\" class=\"coar-plain-date-picker-year-btn\" [disabled]=\"isNextYearDisabled()\" (click)=\"nextYear()\" aria-label=\"Next year\">\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-plain-date-picker-month-list-wrapper\">\n <div class=\"coar-plain-date-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-plain-date-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-month-item\"\n [class.coar-plain-date-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-plain-date-picker-events\">\n <div class=\"coar-plain-date-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-plain-date-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-plain-date-picker-event-item\">\n <span class=\"coar-plain-date-picker-event-dot\"></span>\n <div class=\"coar-plain-date-picker-event-details\">\n <span class=\"coar-plain-date-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-plain-date-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","/**\n * Time formatting and parsing utilities.\n *\n * Provides locale-aware time formatting with 12h/24h detection,\n * time parsing, and hour/minute manipulation with wrap-around support.\n */\n\n/**\n * AM/PM period indicator.\n */\nexport type CoarTimePeriod = 'AM' | 'PM';\n\n/**\n * Parsed time value with hours (0-23) and minutes (0-59).\n */\nexport interface CoarTimeValue {\n readonly hours: number;\n readonly minutes: number;\n}\n\n/**\n * Detects whether the given locale uses 12-hour time format.\n *\n * Uses Intl.DateTimeFormat to check if the locale's default time format\n * includes a dayPeriod (AM/PM indicator).\n *\n * @param locale - BCP 47 locale identifier (e.g., 'en-US', 'de-AT')\n * @returns true if locale uses 12-hour format, false for 24-hour format\n *\n * @example\n * ```ts\n * coarDetect12HourFormat('en-US'); // true (US uses 12h)\n * coarDetect12HourFormat('de-DE'); // false (Germany uses 24h)\n * coarDetect12HourFormat('en-GB'); // false (UK uses 24h)\n * ```\n */\nexport function coarDetect12HourFormat(locale: string): boolean {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: 'numeric',\n });\n\n const parts = formatter.formatToParts(new Date(2024, 0, 1, 14, 30));\n return parts.some((part) => part.type === 'dayPeriod');\n } catch {\n // Default to 24-hour format on error\n return false;\n }\n}\n\n/**\n * Formats a time value as a string.\n *\n * @param hours - Hours (0-23)\n * @param minutes - Minutes (0-59)\n * @param use24Hour - true for 24h format (\"14:30\"), false for 12h format (\"2:30 PM\")\n * @returns Formatted time string\n *\n * @example\n * ```ts\n * coarFormatTime(14, 30, true); // \"14:30\"\n * coarFormatTime(14, 30, false); // \"2:30 PM\"\n * coarFormatTime(0, 5, true); // \"00:05\"\n * coarFormatTime(0, 5, false); // \"12:05 AM\"\n * ```\n */\nexport function coarFormatTime(hours: number, minutes: number, use24Hour: boolean): string {\n const paddedMinutes = String(minutes).padStart(2, '0');\n\n if (use24Hour) {\n const paddedHours = String(hours).padStart(2, '0');\n return `${paddedHours}:${paddedMinutes}`;\n }\n\n // 12-hour format\n const period: CoarTimePeriod = hours >= 12 ? 'PM' : 'AM';\n let displayHours = hours % 12;\n if (displayHours === 0) {\n displayHours = 12; // 0 and 12 both display as 12\n }\n\n return `${displayHours}:${paddedMinutes} ${period}`;\n}\n\n/**\n * Parses a time string into hours and minutes.\n *\n * Supports both 24-hour and 12-hour formats:\n * - 24h: \"14:30\", \"08:00\", \"23:59\"\n * - 12h: \"2:30 PM\", \"12:00 AM\", \"11:59 pm\"\n *\n * @param text - Time string to parse\n * @returns Parsed time value or null if invalid\n *\n * @example\n * ```ts\n * coarParseTimeInput(\"14:30\"); // { hours: 14, minutes: 30 }\n * coarParseTimeInput(\"2:30 PM\"); // { hours: 14, minutes: 30 }\n * coarParseTimeInput(\"12:00 AM\"); // { hours: 0, minutes: 0 }\n * coarParseTimeInput(\"invalid\"); // null\n * ```\n */\nexport function coarParseTimeInput(text: string): CoarTimeValue | null {\n if (!text || typeof text !== 'string') {\n return null;\n }\n\n const trimmed = text.trim().toUpperCase();\n\n // Try 12-hour format first (e.g., \"2:30 PM\")\n const match12h = trimmed.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/);\n if (match12h) {\n let hours = parseInt(match12h[1], 10);\n const minutes = parseInt(match12h[2], 10);\n const period = match12h[3] as CoarTimePeriod;\n\n if (hours < 1 || hours > 12 || minutes < 0 || minutes > 59) {\n return null;\n }\n\n // Convert to 24-hour format\n if (period === 'AM') {\n hours = hours === 12 ? 0 : hours;\n } else {\n // PM\n hours = hours === 12 ? 12 : hours + 12;\n }\n\n return { hours, minutes };\n }\n\n // Try 24-hour format (e.g., \"14:30\")\n const match24h = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n if (match24h) {\n const hours = parseInt(match24h[1], 10);\n const minutes = parseInt(match24h[2], 10);\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null;\n }\n\n return { hours, minutes };\n }\n\n return null;\n}\n\n/**\n * Converts 24-hour format hours to 12-hour format.\n *\n * @param hours24 - Hours in 24-hour format (0-23)\n * @returns Object with 12-hour hours (1-12) and period (AM/PM)\n *\n * @example\n * ```ts\n * coarConvertTo12Hour(0); // { hours: 12, period: 'AM' }\n * coarConvertTo12Hour(12); // { hours: 12, period: 'PM' }\n * coarConvertTo12Hour(14); // { hours: 2, period: 'PM' }\n * coarConvertTo12Hour(23); // { hours: 11, period: 'PM' }\n * ```\n */\nexport function coarConvertTo12Hour(hours24: number): { hours: number; period: CoarTimePeriod } {\n const period: CoarTimePeriod = hours24 >= 12 ? 'PM' : 'AM';\n let hours = hours24 % 12;\n if (hours === 0) {\n hours = 12;\n }\n return { hours, period };\n}\n\n/**\n * Converts 12-hour format to 24-hour format.\n *\n * @param hours12 - Hours in 12-hour format (1-12)\n * @param period - AM or PM\n * @returns Hours in 24-hour format (0-23)\n *\n * @example\n * ```ts\n * coarConvertTo24Hour(12, 'AM'); // 0\n * coarConvertTo24Hour(12, 'PM'); // 12\n * coarConvertTo24Hour(2, 'PM'); // 14\n * coarConvertTo24Hour(11, 'PM'); // 23\n * ```\n */\nexport function coarConvertTo24Hour(hours12: number, period: CoarTimePeriod): number {\n if (period === 'AM') {\n return hours12 === 12 ? 0 : hours12;\n }\n // PM\n return hours12 === 12 ? 12 : hours12 + 12;\n}\n\n/**\n * Increments hours with wrap-around.\n *\n * @param hours - Current hours (0-23)\n * @param delta - Amount to change (positive or negative)\n * @returns New hours value (0-23), wrapped around\n *\n * @example\n * ```ts\n * coarIncrementHours(23, 1); // 0 (wraps from 23 to 0)\n * coarIncrementHours(0, -1); // 23 (wraps from 0 to 23)\n * coarIncrementHours(14, 2); // 16\n * ```\n */\nexport function coarIncrementHours(hours: number, delta: number): number {\n const newHours = (hours + delta) % 24;\n return newHours < 0 ? newHours + 24 : newHours;\n}\n\n/**\n * Increments minutes with wrap-around and optional hour carry.\n *\n * @param minutes - Current minutes (0-59)\n * @param delta - Amount to change (positive or negative)\n * @param step - Minute step interval (default: 1)\n * @returns Object with new minutes and hour delta (for carry-over)\n *\n * @example\n * ```ts\n * coarIncrementMinutes(55, 5); // { minutes: 0, hourDelta: 1 }\n * coarIncrementMinutes(0, -5); // { minutes: 55, hourDelta: -1 }\n * coarIncrementMinutes(30, 15, 15); // { minutes: 45, hourDelta: 0 }\n * ```\n */\nexport function coarIncrementMinutes(\n minutes: number,\n delta: number,\n step = 1\n): { minutes: number; hourDelta: number } {\n const actualDelta = delta * step;\n const totalMinutes = minutes + actualDelta;\n\n let hourDelta = 0;\n let newMinutes = totalMinutes;\n\n if (totalMinutes >= 60) {\n hourDelta = Math.floor(totalMinutes / 60);\n newMinutes = totalMinutes % 60;\n } else if (totalMinutes < 0) {\n // For negative values, we need to calculate proper wrap-around\n hourDelta = Math.floor(totalMinutes / 60); // This will be negative\n newMinutes = ((totalMinutes % 60) + 60) % 60;\n }\n\n return { minutes: newMinutes, hourDelta };\n}\n\n/**\n * Rounds minutes to the nearest step.\n *\n * @param minutes - Current minutes (0-59)\n * @param step - Minute step interval\n * @returns Rounded minutes value\n *\n * @example\n * ```ts\n * coarRoundMinutesToStep(7, 5); // 5\n * coarRoundMinutesToStep(8, 5); // 10\n * coarRoundMinutesToStep(22, 15); // 15\n * coarRoundMinutesToStep(23, 15); // 30\n * ```\n */\nexport function coarRoundMinutesToStep(minutes: number, step: number): number {\n return Math.round(minutes / step) * step;\n}\n\n/**\n * Gets valid minute values for a given step.\n *\n * @param step - Minute step interval (1, 5, 10, or 15)\n * @returns Array of valid minute values\n *\n * @example\n * ```ts\n * coarGetValidMinutes(15); // [0, 15, 30, 45]\n * coarGetValidMinutes(5); // [0, 5, 10, 15, ..., 55]\n * coarGetValidMinutes(1); // [0, 1, 2, ..., 59]\n * ```\n */\nexport function coarGetValidMinutes(step: 1 | 5 | 10 | 15): number[] {\n const values: number[] = [];\n for (let m = 0; m < 60; m += step) {\n values.push(m);\n }\n return values;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { of } from 'rxjs';\n\nimport { CoarLocalizationService } from '@cocoar/localization';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../../forms/_base/coar-control-value-accessor';\nimport {\n type CoarTimePeriod,\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarConvertTo12Hour,\n coarConvertTo24Hour,\n coarIncrementHours,\n coarIncrementMinutes,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\n\nexport type CoarTimePickerSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Time picker component with hours, minutes, and optional AM/PM selection.\n *\n * Supports both 12-hour and 24-hour formats, with locale-aware auto-detection.\n * Values wrap around at boundaries (23→00, 59→00 with hour increment).\n *\n * @example\n * ```html\n * <!-- Basic usage with auto 12h/24h detection -->\n * <coar-time-picker [(value)]=\"selectedTime\" />\n *\n * <!-- Force 24-hour format with 15-minute steps -->\n * <coar-time-picker\n * [(value)]=\"selectedTime\"\n * [use24Hour]=\"true\"\n * [minuteStep]=\"15\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-time-picker',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-time-picker.component.html',\n styleUrl: './coar-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTimePickerComponent)],\n host: {\n '[class.coar-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-time-picker--s]': 'size() === \"s\"',\n '[class.coar-time-picker--m]': 'size() === \"m\"',\n '[class.coar-time-picker--l]': 'size() === \"l\"',\n '[class.coar-time-picker--disabled]': 'isDisabled()',\n '[class.coar-time-picker--readonly]': 'readonly()',\n },\n})\nexport class CoarTimePickerComponent extends CoarControlValueAccessor<CoarTimeValue | null> {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Size variant */\n size = input<CoarTimePickerSize>('m');\n\n /** Whether the picker is readonly */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the picker is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether to use 24-hour format.\n * - true: Always use 24h format (00-23)\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /**\n * Step interval for minute selection.\n * Minutes will snap to multiples of this value.\n */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Locale identifier for 12h/24h format detection.\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Label for screen readers (visually hidden).\n */\n ariaLabel = input<string>('Time');\n\n /**\n * Minimum allowed time (hours and minutes in 24h format).\n * Used to constrain time selection when on a min date boundary.\n */\n minTime = input<CoarTimeValue | null>(null);\n\n /**\n * Maximum allowed time (hours and minutes in 24h format).\n * Used to constrain time selection when on a max date boundary.\n */\n maxTime = input<CoarTimeValue | null>(null);\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current time value (two-way bindable with [(value)]) */\n value = model<CoarTimeValue | null>(null);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Internal hours value (0-23) */\n protected hours = signal<number>(9);\n\n /** Internal minutes value (0-59) */\n protected minutes = signal<number>(0);\n\n /** AM/PM period for 12-hour mode */\n protected period = signal<CoarTimePeriod>('AM');\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /** Effective locale for 12h/24h detection */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n /** Whether to display in 12-hour format */\n protected is12HourFormat = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return false;\n if (setting === false) return true;\n // 'auto' - detect from locale\n return coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Display hours value (1-12 for 12h mode, 0-23 for 24h mode) */\n protected displayHours = computed(() => {\n const h = this.hours();\n if (this.is12HourFormat()) {\n const { hours } = coarConvertTo12Hour(h);\n return hours;\n }\n return h;\n });\n\n /** Display minutes (always 0-59, padded) */\n protected displayMinutes = computed(() => {\n return this.minutes();\n });\n\n /** Minimum hours value for display */\n protected minHours = computed(() => (this.is12HourFormat() ? 1 : 0));\n\n /** Maximum hours value for display */\n protected maxHours = computed(() => (this.is12HourFormat() ? 12 : 23));\n\n /** Whether the picker is disabled (input or CVA) */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Convert time to total minutes for comparison */\n private timeToMinutes(time: CoarTimeValue): number {\n return time.hours * 60 + time.minutes;\n }\n\n /** Whether increment hours button is disabled (would exceed max) */\n protected isIncrementHoursDisabled = computed(() => {\n const maxTime = this.maxTime();\n if (!maxTime) return false;\n const currentMinutes = this.minutes();\n const nextHours = (this.hours() + 1) % 24;\n // Can't increment if next hour would exceed max\n return (\n this.timeToMinutes({ hours: nextHours, minutes: currentMinutes }) >\n this.timeToMinutes(maxTime)\n );\n });\n\n /** Whether decrement hours button is disabled (would go below min) */\n protected isDecrementHoursDisabled = computed(() => {\n const minTime = this.minTime();\n if (!minTime) return false;\n const currentMinutes = this.minutes();\n const prevHours = (this.hours() - 1 + 24) % 24;\n // Can't decrement if previous hour would be below min\n return (\n this.timeToMinutes({ hours: prevHours, minutes: currentMinutes }) <\n this.timeToMinutes(minTime)\n );\n });\n\n /** Whether increment minutes button is disabled */\n protected isIncrementMinutesDisabled = computed(() => {\n const maxTime = this.maxTime();\n if (!maxTime) return false;\n const step = this.minuteStep();\n let nextMinutes = this.minutes() + step;\n let nextHours = this.hours();\n if (nextMinutes >= 60) {\n nextMinutes = nextMinutes % 60;\n nextHours = (nextHours + 1) % 24;\n }\n return (\n this.timeToMinutes({ hours: nextHours, minutes: nextMinutes }) > this.timeToMinutes(maxTime)\n );\n });\n\n /** Whether decrement minutes button is disabled */\n protected isDecrementMinutesDisabled = computed(() => {\n const minTime = this.minTime();\n if (!minTime) return false;\n const step = this.minuteStep();\n let prevMinutes = this.minutes() - step;\n let prevHours = this.hours();\n if (prevMinutes < 0) {\n prevMinutes = 60 + prevMinutes;\n prevHours = (prevHours - 1 + 24) % 24;\n }\n return (\n this.timeToMinutes({ hours: prevHours, minutes: prevMinutes }) < this.timeToMinutes(minTime)\n );\n });\n\n /** Whether AM period is disabled (min time is in PM) */\n protected isAmDisabled = computed(() => {\n const minTime = this.minTime();\n // AM is disabled if minimum time starts at 12:00 (noon) or later\n return minTime !== null && minTime.hours >= 12;\n });\n\n /** Whether PM period is disabled (max time is before noon) */\n protected isPmDisabled = computed(() => {\n const maxTime = this.maxTime();\n // PM is disabled if maximum time is before 12:00 (noon)\n return maxTime !== null && maxTime.hours < 12;\n });\n\n // ============================================================\n // Constructor & Effects\n // ============================================================\n\n constructor() {\n super();\n\n // Sync external value to internal state\n effect(() => {\n const val = this.value();\n if (val) {\n this.hours.set(val.hours);\n this.minutes.set(coarRoundMinutesToStep(val.minutes, this.minuteStep()));\n // Update period based on hours\n this.period.set(val.hours >= 12 ? 'PM' : 'AM');\n }\n });\n }\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /** Increment hours by 1 */\n incrementHours(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isIncrementHoursDisabled()) return;\n\n if (this.is12HourFormat()) {\n // In 12h mode, increment display hours (1-12) and handle period switch\n const currentDisplay = this.displayHours();\n let newDisplay = currentDisplay + 1;\n\n if (newDisplay > 12) {\n newDisplay = 1;\n }\n\n // Convert back to 24h\n const new24h = coarConvertTo24Hour(newDisplay, this.period());\n this.hours.set(new24h);\n\n // Toggle AM/PM when going from 11→12\n if (currentDisplay === 11) {\n this.togglePeriod();\n return; // togglePeriod will emit the value\n }\n } else {\n const newHours = coarIncrementHours(this.hours(), 1);\n this.hours.set(newHours);\n }\n\n this.emitValue();\n }\n\n /** Decrement hours by 1 */\n decrementHours(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isDecrementHoursDisabled()) return;\n\n if (this.is12HourFormat()) {\n const currentDisplay = this.displayHours();\n let newDisplay = currentDisplay - 1;\n\n if (newDisplay < 1) {\n newDisplay = 12;\n }\n\n // Convert back to 24h\n const new24h = coarConvertTo24Hour(newDisplay, this.period());\n this.hours.set(new24h);\n\n // Toggle AM/PM when going from 12→11\n if (currentDisplay === 12) {\n this.togglePeriod();\n return; // togglePeriod will emit the value\n }\n } else {\n const newHours = coarIncrementHours(this.hours(), -1);\n this.hours.set(newHours);\n }\n\n this.emitValue();\n }\n\n /** Increment minutes by step */\n incrementMinutes(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isIncrementMinutesDisabled()) return;\n\n const step = this.minuteStep();\n const { minutes: newMinutes, hourDelta } = coarIncrementMinutes(this.minutes(), 1, step);\n\n this.minutes.set(newMinutes);\n\n if (hourDelta !== 0) {\n // Carry over to hours\n const newHours = coarIncrementHours(this.hours(), hourDelta);\n this.hours.set(newHours);\n // Update period if needed\n this.period.set(newHours >= 12 ? 'PM' : 'AM');\n }\n\n this.emitValue();\n }\n\n /** Decrement minutes by step */\n decrementMinutes(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isDecrementMinutesDisabled()) return;\n\n const step = this.minuteStep();\n const { minutes: newMinutes, hourDelta } = coarIncrementMinutes(this.minutes(), -1, step);\n\n this.minutes.set(newMinutes);\n\n if (hourDelta !== 0) {\n // Carry over to hours\n const newHours = coarIncrementHours(this.hours(), hourDelta);\n this.hours.set(newHours);\n // Update period if needed\n this.period.set(newHours >= 12 ? 'PM' : 'AM');\n }\n\n this.emitValue();\n }\n\n /** Toggle between AM and PM */\n togglePeriod(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (!this.is12HourFormat()) return;\n\n const newPeriod: CoarTimePeriod = this.period() === 'AM' ? 'PM' : 'AM';\n // Check if the new period is allowed\n if (newPeriod === 'AM' && this.isAmDisabled()) return;\n if (newPeriod === 'PM' && this.isPmDisabled()) return;\n this.period.set(newPeriod);\n\n // Update 24h hours based on new period\n const displayH = this.displayHours();\n const new24h = coarConvertTo24Hour(displayH, newPeriod);\n this.hours.set(new24h);\n\n this.emitValue();\n }\n\n /** Set specific period (AM or PM) */\n setPeriod(period: CoarTimePeriod): void {\n if (this.isDisabled() || this.readonly()) return;\n if (!this.is12HourFormat()) return;\n if (this.period() === period) return;\n // Check if the new period is allowed\n if (period === 'AM' && this.isAmDisabled()) return;\n if (period === 'PM' && this.isPmDisabled()) return;\n\n this.period.set(period);\n\n // Update 24h hours based on new period\n const displayH = this.displayHours();\n const new24h = coarConvertTo24Hour(displayH, period);\n this.hours.set(new24h);\n\n this.emitValue();\n }\n\n // ============================================================\n // Keyboard Handlers\n // ============================================================\n\n /** Handle keyboard events on hours spinner */\n onHoursKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementHours();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrementHours();\n break;\n }\n }\n\n /** Handle keyboard events on minutes spinner */\n onMinutesKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementMinutes();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrementMinutes();\n break;\n }\n }\n\n /** Handle keyboard events on period selector */\n onPeriodKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n event.preventDefault();\n this.togglePeriod();\n break;\n }\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: CoarTimeValue | null): void {\n if (value) {\n this.hours.set(value.hours);\n this.minutes.set(coarRoundMinutesToStep(value.minutes, this.minuteStep()));\n this.period.set(value.hours >= 12 ? 'PM' : 'AM');\n } else {\n // Reset to default\n this.hours.set(9);\n this.minutes.set(0);\n this.period.set('AM');\n }\n }\n\n // ============================================================\n // Private Methods\n // ============================================================\n\n /** Emit the current value */\n private emitValue(): void {\n const newValue: CoarTimeValue = {\n hours: this.hours(),\n minutes: this.minutes(),\n };\n this.value.set(newValue);\n this.cvaOnTouched();\n }\n}\n","<div class=\"coar-time-picker\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n <!-- Hours Spinner -->\n <div class=\"coar-time-picker__spinner coar-time-picker__hours\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || isIncrementHoursDisabled()\"\n (click)=\"incrementHours()\"\n tabindex=\"-1\"\n aria-label=\"Increase hours\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"displayHours()\"\n [attr.aria-valuemin]=\"minHours()\"\n [attr.aria-valuemax]=\"maxHours()\"\n aria-label=\"Hours\"\n (keydown)=\"onHoursKeydown($event)\"\n >\n {{ displayHours().toString().padStart(2, '0') }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || isDecrementHoursDisabled()\"\n (click)=\"decrementHours()\"\n tabindex=\"-1\"\n aria-label=\"Decrease hours\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n\n <!-- Separator -->\n <span class=\"coar-time-picker__separator\" aria-hidden=\"true\">:</span>\n\n <!-- Minutes Spinner -->\n <div class=\"coar-time-picker__spinner coar-time-picker__minutes\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || isIncrementMinutesDisabled()\"\n (click)=\"incrementMinutes()\"\n tabindex=\"-1\"\n aria-label=\"Increase minutes\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"displayMinutes()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"59\"\n aria-label=\"Minutes\"\n (keydown)=\"onMinutesKeydown($event)\"\n >\n {{ displayMinutes().toString().padStart(2, '0') }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || isDecrementMinutesDisabled()\"\n (click)=\"decrementMinutes()\"\n tabindex=\"-1\"\n aria-label=\"Decrease minutes\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n\n <!-- AM/PM Selector (12-hour mode only) -->\n @if (is12HourFormat()) {\n <div class=\"coar-time-picker__spinner coar-time-picker__period\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || (period() === 'AM' ? isPmDisabled() : isAmDisabled())\"\n (click)=\"togglePeriod()\"\n tabindex=\"-1\"\n aria-label=\"Toggle AM/PM\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value coar-time-picker__period-value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"period() === 'AM' ? 0 : 1\"\n aria-valuemin=\"0\"\n aria-valuemax=\"1\"\n [attr.aria-valuetext]=\"period()\"\n aria-label=\"AM/PM\"\n (keydown)=\"onPeriodKeydown($event)\"\n >\n {{ period() }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || (period() === 'AM' ? isPmDisabled() : isAmDisabled())\"\n (click)=\"togglePeriod()\"\n tabindex=\"-1\"\n aria-label=\"Toggle AM/PM\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateTimeOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarTimePickerComponent } from '../time-picker/coar-time-picker.component';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport {\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarFormatTime,\n coarParseTimeInput,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for backward compatibility\nexport type CoarPlainDateTimePickerSize = CoarDatePickerSize;\n\n/**\n * Date-time picker component with scrollable calendar and time selection.\n *\n * Returns strongly-typed `Temporal.PlainDateTime` values (timezone-independent).\n *\n * Features:\n * - Two-column layout: scrollable calendar on left, month list + time picker on right\n * - Locale-aware time format (12h/24h auto-detection)\n * - CSS-based virtualization for smooth scrolling through months\n * - Min/max datetime constraints with time clamping\n *\n * @example\n * ```html\n * <coar-plain-date-time-picker\n * [(value)]=\"appointmentDateTime\"\n * label=\"Appointment\"\n * [minuteStep]=\"15\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-plain-date-time-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n CoarTimePickerComponent,\n ],\n templateUrl: './coar-plain-date-time-picker.component.html',\n styleUrl: './coar-plain-date-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPlainDateTimePickerComponent)],\n host: {\n '[class.coar-plain-date-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-plain-date-time-picker--s]': 'size() === \"s\"',\n '[class.coar-plain-date-time-picker--m]': 'size() === \"m\"',\n '[class.coar-plain-date-time-picker--l]': 'size() === \"l\"',\n '[class.coar-plain-date-time-picker--disabled]': 'isDisabled()',\n '[class.coar-plain-date-time-picker--readonly]': 'readonly()',\n '[class.coar-plain-date-time-picker--error]': 'hasError()',\n '[class.coar-plain-date-time-picker--open]': 'isOpen()',\n },\n})\nexport class CoarPlainDateTimePickerComponent extends CoarDatePickerBase<Temporal.PlainDateTime> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Date-Time Picker Specific Inputs\n // ============================================================\n\n /** Minimum selectable datetime */\n min = input<Temporal.PlainDateTime | null>(null);\n\n /** Maximum selectable datetime */\n max = input<Temporal.PlainDateTime | null>(null);\n\n /**\n * Whether to use 24-hour time format.\n * - true: Always use 24h format\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /** Step interval for minute selection (1, 5, 10, or 15) */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Default time to use when selecting a date without existing time.\n */\n defaultTime = input<CoarTimeValue>({ hours: 9, minutes: 0 });\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDateTime | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.PlainDateTime | null>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-plain-date-time-picker-${CoarPlainDateTimePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n /** Pending time value (stored until a date is selected) */\n protected pendingTime = signal<CoarTimeValue | null>(null);\n\n // ============================================================\n // Computed Values (Date-Time Picker Specific)\n // ============================================================\n\n /** Get placeholder text based on date and time format */\n protected inputPlaceholder = computed(() => {\n const datePart = this.dateFormat().toUpperCase();\n const use24h = this.effectiveUse24Hour();\n return use24h ? `${datePart} HH:MM` : `${datePart} HH:MM AM/PM`;\n });\n\n /** Whether to use 24-hour time format */\n protected effectiveUse24Hour = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return true;\n if (setting === false) return false;\n return !coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Extract date portion from value */\n protected selectedDate = computed((): Temporal.PlainDate | null => {\n const val = this.value();\n return val ? val.toPlainDate() : null;\n });\n\n /** Extract time portion from value */\n protected selectedTime = computed((): CoarTimeValue | null => {\n const val = this.value();\n if (!val) return this.pendingTime();\n return { hours: val.hour, minutes: val.minute };\n });\n\n /** Min date for calendar constraints */\n protected minDate = computed((): Temporal.PlainDate | null => {\n const val = this.min();\n return val ? val.toPlainDate() : null;\n });\n\n /** Max date for calendar constraints */\n protected maxDate = computed((): Temporal.PlainDate | null => {\n const val = this.max();\n return val ? val.toPlainDate() : null;\n });\n\n /**\n * Effective minimum time constraint for the time picker.\n * Only applies when the selected date equals the minimum date boundary.\n */\n protected effectiveMinTime = computed((): CoarTimeValue | null => {\n const minDateTime = this.min();\n const selected = this.selectedDate();\n if (!minDateTime || !selected) return null;\n\n const minDatePart = minDateTime.toPlainDate();\n // Only constrain time if selected date is exactly on the min boundary\n if (Temporal.PlainDate.compare(selected, minDatePart) === 0) {\n return { hours: minDateTime.hour, minutes: minDateTime.minute };\n }\n return null;\n });\n\n /**\n * Effective maximum time constraint for the time picker.\n * Only applies when the selected date equals the maximum date boundary.\n */\n protected effectiveMaxTime = computed((): CoarTimeValue | null => {\n const maxDateTime = this.max();\n const selected = this.selectedDate();\n if (!maxDateTime || !selected) return null;\n\n const maxDatePart = maxDateTime.toPlainDate();\n // Only constrain time if selected date is exactly on the max boundary\n if (Temporal.PlainDate.compare(selected, maxDatePart) === 0) {\n return { hours: maxDateTime.hour, minutes: maxDateTime.minute };\n }\n return null;\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainDate().toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.PlainDateTime | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.selectedDate();\n }\n\n protected override estimatePanelHeight(): number {\n return 400;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.pendingTime.set(null);\n this.valueChange.emit(null);\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value\n effect(() => {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n });\n\n // Keep Maskito config in sync\n effect(() => {\n // Track format dependencies\n this.dateFormat();\n this.separator();\n this.minDate();\n this.maxDate();\n\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /** Handle date selection from calendar */\n protected onDateSelected(date: Temporal.PlainDate): void {\n const time = this.selectedTime() ?? this.defaultTime();\n let dateTime = date.toPlainDateTime({\n hour: time.hours,\n minute: coarRoundMinutesToStep(time.minutes, this.minuteStep()),\n });\n\n // Clamp datetime to min/max bounds when selecting a boundary date\n dateTime = this.clampDateTimeToRange(dateTime);\n\n this.value.set(dateTime);\n this.valueChange.emit(dateTime);\n this.cvaOnChange(dateTime);\n }\n\n /** Handle time changes from time picker */\n protected onTimeChanged(time: CoarTimeValue | null): void {\n if (!time) return;\n\n const currentDate = this.selectedDate();\n if (currentDate) {\n let dateTime = currentDate.toPlainDateTime({\n hour: time.hours,\n minute: time.minutes,\n });\n\n // Clamp datetime to min/max bounds\n dateTime = this.clampDateTimeToRange(dateTime);\n\n this.value.set(dateTime);\n this.valueChange.emit(dateTime);\n this.cvaOnChange(dateTime);\n } else {\n this.pendingTime.set(time);\n }\n }\n\n /**\n * Clamps a PlainDateTime to be within the min/max range.\n * Returns the original value if it's within range, otherwise returns the nearest boundary.\n */\n private clampDateTimeToRange(dateTime: Temporal.PlainDateTime): Temporal.PlainDateTime {\n const minDateTime = this.min();\n const maxDateTime = this.max();\n\n if (minDateTime && Temporal.PlainDateTime.compare(dateTime, minDateTime) < 0) {\n return minDateTime;\n }\n if (maxDateTime && Temporal.PlainDateTime.compare(dateTime, maxDateTime) > 0) {\n return maxDateTime;\n }\n return dateTime;\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.PlainDateTime | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.pendingTime.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.PlainDateTime.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = this.parseValueFromInput(text);\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = this.parseValueFromInput(currentText);\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private formatValue(val: Temporal.PlainDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n\n private parseValueFromInput(text: string): Temporal.PlainDateTime | null {\n if (!text) return null;\n\n // DateTime: try to parse date and time\n // Format: \"DD.MM.YYYY HH:MM\" or \"DD.MM.YYYY HH:MM AM/PM\"\n const parts = text.split(' ');\n if (parts.length < 2) return null;\n\n const datePart = parts[0];\n const date = coarParsePlainDateFromInput(datePart, this.dateFormat(), {\n min: this.minDate(),\n max: this.maxDate(),\n });\n\n if (!date) return null;\n\n // Parse time part\n const timePart = parts.slice(1).join(' ');\n const time = coarParseTimeInput(timePart);\n if (!time) return null;\n\n return date.toPlainDateTime({ hour: time.hours, minute: time.minutes });\n }\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n const options = maskitoDateTimeOptionsGenerator({\n dateMode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n timeMode: 'HH:MM',\n dateSeparator: separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n}\n","<div class=\"coar-plain-date-time-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-plain-date-time-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-plain-date-time-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-plain-date-time-picker-trigger\"\n [class.coar-plain-date-time-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-plain-date-time-picker-trigger--readonly]=\"readonly()\"\n [class.coar-plain-date-time-picker-trigger--error]=\"hasError()\"\n [class.coar-plain-date-time-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-plain-date-time-picker-clear\"\n [class.coar-plain-date-time-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-plain-date-time-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-plain-date-time-picker-panel\"\n [class.coar-plain-date-time-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date time picker\"\n >\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-plain-date-time-picker-calendar-column\">\n <coar-scrollable-calendar\n [value]=\"selectedDate()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-plain-date-time-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n\n <!-- Right Column: Month List + Time Picker -->\n <div class=\"coar-plain-date-time-picker-side-column\">\n <!-- Year Stepper -->\n <div class=\"coar-plain-date-time-picker-year-stepper\">\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-plain-date-time-picker-year\">{{ currentYear() }}</span>\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-year-btn\"\n [disabled]=\"isNextYearDisabled()\"\n (click)=\"nextYear()\"\n aria-label=\"Next year\"\n >\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-plain-date-time-picker-month-list-wrapper\">\n <div class=\"coar-plain-date-time-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-plain-date-time-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-month-item\"\n [class.coar-plain-date-time-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Time Picker -->\n <div class=\"coar-plain-date-time-picker-time-section\">\n <coar-time-picker\n [value]=\"selectedTime()\"\n [use24Hour]=\"use24Hour()\"\n [minuteStep]=\"minuteStep()\"\n [locale]=\"effectiveLocale()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [minTime]=\"effectiveMinTime()\"\n [maxTime]=\"effectiveMaxTime()\"\n (valueChange)=\"onTimeChanged($event)\"\n />\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-plain-date-time-picker-events\">\n <div class=\"coar-plain-date-time-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-plain-date-time-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-plain-date-time-picker-event-item\">\n <span class=\"coar-plain-date-time-picker-event-dot\"></span>\n <div class=\"coar-plain-date-time-picker-event-details\">\n <span class=\"coar-plain-date-time-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-plain-date-time-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateTimeOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarTimePickerComponent } from '../time-picker/coar-time-picker.component';\nimport { CoarSingleSelectComponent } from '../../forms/select/coar-single-select.component';\nimport { CoarSelectOption } from '../../forms/select/coar-select-option.interface';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport {\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarFormatTime,\n coarParseTimeInput,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for convenience\nexport type CoarZonedDateTimePickerSize = CoarDatePickerSize;\n\n/**\n * A timezone item for display in the picker list.\n */\ninterface TimezoneItem {\n /** Full IANA ID (e.g., 'Europe/Vienna') */\n id: string;\n /** City name for display (e.g., 'Vienna') */\n city: string;\n /** UTC offset for display (e.g., 'UTC+1') */\n offset: string;\n}\n\n/**\n * A group of timezones by continent/region.\n */\ninterface TimezoneGroup {\n /** Group name (e.g., 'Europe', 'America') */\n name: string;\n /** Timezones in this group */\n items: TimezoneItem[];\n}\n\n/**\n * Zoned date-time picker component with full timezone support.\n *\n * Returns strongly-typed `Temporal.ZonedDateTime` values that include:\n * - The local date and time (user's intent)\n * - The IANA timezone (context)\n * - The instant (derived UTC moment)\n *\n * Key concepts:\n * - **Value timezone**: Where the event \"lives\" - persisted with the value\n * - **Display timezone**: User's viewing lens (from CoarTimeZoneService)\n *\n * This picker captures complete user intent, allowing you to:\n * - Store the local time + timezone as source of truth\n * - Derive the UTC instant for queries and ordering\n * - Recalculate instants if DST rules change\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <coar-zoned-date-time-picker\n * [(value)]=\"meetingDateTime\"\n * label=\"Meeting Time\"\n * />\n *\n * <!-- With explicit timezone -->\n * <coar-zoned-date-time-picker\n * [(value)]=\"meetingDateTime\"\n * [timeZone]=\"'Europe/Vienna'\"\n * label=\"Meeting Time\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-zoned-date-time-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n CoarTimePickerComponent,\n CoarSingleSelectComponent,\n ],\n templateUrl: './coar-zoned-date-time-picker.component.html',\n styleUrl: './coar-zoned-date-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarZonedDateTimePickerComponent)],\n host: {\n '[class.coar-zoned-date-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-zoned-date-time-picker--s]': 'size() === \"s\"',\n '[class.coar-zoned-date-time-picker--m]': 'size() === \"m\"',\n '[class.coar-zoned-date-time-picker--l]': 'size() === \"l\"',\n '[class.coar-zoned-date-time-picker--disabled]': 'isDisabled()',\n '[class.coar-zoned-date-time-picker--readonly]': 'readonly()',\n '[class.coar-zoned-date-time-picker--error]': 'hasError()',\n '[class.coar-zoned-date-time-picker--open]': 'isOpen()',\n },\n})\nexport class CoarZonedDateTimePickerComponent extends CoarDatePickerBase<Temporal.ZonedDateTime> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Zoned Date-Time Picker Specific Inputs\n // ============================================================\n\n /**\n * The timezone for the value.\n *\n * This represents where the event \"lives\" - it's persisted with the value.\n * If not provided, uses the timezone from CoarTimeZoneService.\n *\n * Examples: 'Europe/Vienna', 'America/New_York', 'UTC'\n */\n timeZone = input<string | null>(null);\n\n /** Minimum selectable datetime (in the value's timezone) */\n min = input<Temporal.ZonedDateTime | null>(null);\n\n /** Maximum selectable datetime (in the value's timezone) */\n max = input<Temporal.ZonedDateTime | null>(null);\n\n /**\n * Whether to use 24-hour time format.\n * - true: Always use 24h format\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /** Step interval for minute selection (1, 5, 10, or 15) */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Default time to use when selecting a date without existing time.\n */\n defaultTime = input<CoarTimeValue>({ hours: 9, minutes: 0 });\n\n /**\n * Filter patterns for available timezone options.\n *\n * Supports wildcards:\n * - `*` matches any characters\n * - Patterns are case-insensitive\n *\n * If not provided or empty, all IANA timezones are available.\n *\n * @example\n * // Only European timezones\n * [timezoneFilter]=\"['Europe/*']\"\n *\n * // European + specific US cities\n * [timezoneFilter]=\"['Europe/*', 'America/New_York', 'America/Los_Angeles']\"\n *\n * // Anything containing 'New'\n * [timezoneFilter]=\"['*New*']\"\n */\n timezoneFilter = input<string[]>([]);\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.ZonedDateTime | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.ZonedDateTime | null>();\n\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-zoned-date-time-picker-${CoarZonedDateTimePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n /** Reference to the timezone search input */\n protected tzSearchInputRef = viewChild<ElementRef<HTMLInputElement>>('tzSearchInput');\n\n /** Reference to the timezone list container */\n protected tzListRef = viewChild<ElementRef<HTMLElement>>('tzList');\n\n /** Pending time value (stored until a date is selected) */\n protected pendingTime = signal<CoarTimeValue | null>(null);\n\n /**\n * Display timezone - the user's viewing lens.\n * This can be freely changed without affecting the stored value.\n * Defaults to the user's timezone from CoarTimeZoneService.\n */\n protected displayTimeZone = signal<string | null>(null);\n\n /**\n * Whether the value timezone is being edited (unlocked inline select mode).\n */\n protected isEditingValueTimeZone = signal<boolean>(false);\n\n /**\n * Whether the side column is showing the timezone picker instead of normal content.\n */\n protected isSelectingDisplayTimezone = signal<boolean>(false);\n\n /**\n * Search query for timezone filtering in the inline timezone picker.\n */\n protected timezoneSearchQuery = signal<string>('');\n\n // ============================================================\n // Computed Values (Zoned Date-Time Picker Specific)\n // ============================================================\n\n /**\n * The value's timezone (where the event \"lives\").\n * This is the intent timezone - stored with the value.\n */\n protected valueTimeZone = computed((): string | null => {\n const val = this.value();\n return val ? val.timeZoneId : null;\n });\n\n /**\n * Effective display timezone for viewing.\n * Priority: explicit display selection > service timezone > UTC fallback\n */\n protected effectiveDisplayTimeZone = computed((): string => {\n const explicit = this.displayTimeZone();\n if (explicit) return explicit;\n\n const fromService = this.currentTimeZone?.();\n if (fromService) return fromService;\n\n return 'UTC';\n });\n\n /**\n * The current working timezone for the picker UI.\n * When creating new values, this determines the timezone used.\n * When editing, this is the display timezone (value TZ is preserved).\n */\n protected currentWorkingTimeZone = computed((): string => {\n // If showing location timezone, use value's timezone\n if (this.timezoneIndicatorState() === 'location') {\n return this.valueTimeZone() ?? this.effectiveDisplayTimeZone();\n }\n return this.effectiveDisplayTimeZone();\n });\n\n /**\n * The user's timezone from the service (or UTC fallback).\n * This is the user's \"home\" timezone.\n */\n protected userTimeZone = computed((): string => {\n return this.currentTimeZone?.() ?? 'UTC';\n });\n\n /**\n * Whether the location timezone differs from the user's timezone.\n * Used to determine if toggle functionality should be available.\n */\n protected locationDiffersFromUser = computed((): boolean => {\n const locationTz = this.valueTimeZone();\n if (!locationTz) return false;\n return locationTz !== this.userTimeZone();\n });\n\n /**\n * Timezone indicator state for the icon.\n * - 'home': Showing value in user's timezone\n * - 'location': Showing value in event's location timezone\n * - 'world': Showing value in a third timezone (neither user nor location)\n */\n protected timezoneIndicatorState = computed((): 'home' | 'location' | 'world' => {\n const displayTz = this.effectiveDisplayTimeZone();\n const userTz = this.userTimeZone();\n const locationTz = this.valueTimeZone();\n\n if (displayTz === userTz) {\n return 'home';\n }\n if (locationTz && displayTz === locationTz) {\n return 'location';\n }\n return 'world';\n });\n\n /**\n * Whether the display timezone differs from the value timezone.\n * Used to show/hide the timezone indicator.\n * @deprecated Use timezoneIndicatorState instead for icon logic\n */\n protected timeZonesDiffer = computed((): boolean => {\n const valueTz = this.valueTimeZone();\n if (!valueTz) return false;\n return valueTz !== this.effectiveDisplayTimeZone();\n });\n\n /**\n * Short display name for the value timezone.\n * Format: \"Vienna (UTC+1)\"\n */\n protected valueTimeZoneDisplayName = computed((): string => {\n const tz = this.valueTimeZone();\n if (!tz) return '';\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short display name for the display timezone (user's home TZ).\n * Format: \"Vienna (UTC+1)\"\n */\n protected displayTimeZoneDisplayName = computed((): string => {\n const tz = this.effectiveDisplayTimeZone();\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short display name for the currently shown timezone (based on toggle state).\n * This reflects what the user is actually seeing in the input.\n * Format: \"Vienna (UTC+1)\" or \"New York (UTC-5)\"\n */\n protected currentTimeZoneDisplayName = computed((): string => {\n const tz = this.currentWorkingTimeZone();\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short abbreviation for the display timezone badge.\n * Shows just the city name or a short form (max ~6 chars).\n * E.g., 'Europe/Vienna' → 'VIE', 'America/New_York' → 'NYC'\n */\n protected displayTimeZoneAbbreviation = computed((): string => {\n const tz = this.effectiveDisplayTimeZone();\n return this.getTimezoneAbbreviation(tz);\n });\n\n /**\n * UTC offset string for the value timezone.\n */\n protected valueTimeZoneOffset = computed((): string => {\n const tz = this.valueTimeZone();\n if (!tz) return '';\n return this.getOffsetForTimeZone(tz);\n });\n\n /**\n * UTC offset string for the display timezone.\n */\n protected displayTimeZoneOffset = computed((): string => {\n return this.getOffsetForTimeZone(this.effectiveDisplayTimeZone());\n });\n\n /**\n * The value formatted in the VALUE timezone (intent).\n * Always shows what the time means in the original context.\n */\n protected valueInValueTimeZone = computed((): string => {\n const val = this.value();\n if (!val) return '';\n return this.formatZonedDateTime(val);\n });\n\n /**\n * The value formatted in the DISPLAY timezone (user's view).\n */\n protected valueInDisplayTimeZone = computed((): string => {\n const val = this.value();\n if (!val) return '';\n\n const displayTz = this.effectiveDisplayTimeZone();\n if (val.timeZoneId === displayTz) {\n return this.formatZonedDateTime(val);\n }\n\n // Convert to display timezone\n const inDisplayTz = val.toInstant().toZonedDateTimeISO(displayTz);\n return this.formatZonedDateTime(inDisplayTz);\n });\n\n /**\n * The currently displayed value based on which timezone view is active.\n */\n protected currentDisplayedValue = computed((): string => {\n if (this.timezoneIndicatorState() === 'location') {\n return this.valueInValueTimeZone();\n }\n return this.valueInDisplayTimeZone();\n });\n\n /**\n * Computed info for timezone display in trigger tooltip and panel.\n * Returns both display and value timezone info.\n */\n protected popoverTimeZoneInfo = computed(() => {\n const displayTz = this.effectiveDisplayTimeZone();\n const valueTz = this.valueTimeZone();\n\n return {\n displayTzName: this.displayTimeZoneDisplayName(),\n displayTzOffset: this.getOffsetForTimeZone(displayTz),\n valueTzName: this.valueTimeZoneDisplayName(),\n valueTzOffset: valueTz ? this.getOffsetForTimeZone(valueTz) : '',\n };\n });\n\n /** All IANA timezones from the browser */\n private readonly allTimezones: string[] = ['UTC', ...Intl.supportedValuesOf('timeZone')];\n\n /**\n * Filtered timezone options for the select dropdowns.\n * If timezoneFilter is empty, all timezones are available.\n * Supports wildcards: 'Europe/*', '*New*', etc.\n */\n protected readonly timezoneOptions = computed<CoarSelectOption<string>[]>(() => {\n const filters = this.timezoneFilter();\n\n if (!filters || filters.length === 0) {\n // No filter: return all timezones\n return this.allTimezones.map((tz) => ({ value: tz, label: tz }));\n }\n\n // Convert wildcard patterns to regex\n const regexPatterns = filters.map((pattern) => {\n // Escape regex special chars except *, then convert * to .*\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*');\n return new RegExp(`^${escaped}$`, 'i');\n });\n\n // Filter timezones that match any pattern\n const filtered = this.allTimezones.filter((tz) =>\n regexPatterns.some((regex) => regex.test(tz))\n );\n\n return filtered.map((tz) => ({ value: tz, label: tz }));\n });\n\n /**\n * Grouped timezone list for the inline timezone picker.\n * Groups by continent with sticky headers.\n */\n protected readonly groupedTimezoneList = computed<TimezoneGroup[]>(() => {\n const options = this.timezoneOptions();\n const query = this.timezoneSearchQuery().toLowerCase().trim();\n\n let timezones = options.map((o) => o.value);\n\n // Filter by search query (searches both ID and display label)\n if (query) {\n timezones = timezones.filter((tz) => {\n const label = this.formatTimezoneShort(tz);\n return tz.toLowerCase().includes(query) || label.toLowerCase().includes(query);\n });\n }\n\n // Group by continent/region (exclude UTC - not a real location)\n const groups = new Map<string, TimezoneItem[]>();\n\n for (const tz of timezones) {\n // Skip UTC - it's not a real location, use PlainDateTimePicker instead\n if (tz === 'UTC') {\n continue;\n }\n\n const parts = tz.split('/');\n const continent = parts[0];\n const city = this.extractCityName(tz);\n const offset = 'UTC' + this.getOffsetForTimeZoneCompact(tz);\n\n if (!groups.has(continent)) {\n groups.set(continent, []);\n }\n groups.get(continent)!.push({ id: tz, city, offset });\n }\n\n // Convert to array and sort alphabetically by continent\n const result: TimezoneGroup[] = [];\n\n const sortedContinents = [...groups.keys()].sort();\n for (const continent of sortedContinents) {\n const items = groups.get(continent)!;\n // Sort items within group by city name\n items.sort((a, b) => a.city.localeCompare(b.city));\n result.push({ name: continent, items });\n }\n\n return result;\n });\n\n /**\n * Extract the city name from a timezone ID.\n * E.g., 'Europe/Vienna' → 'Vienna', 'America/Argentina/Buenos_Aires' → 'Buenos Aires'\n */\n private extractCityName(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n const parts = tz.split('/');\n const cityPart = parts[parts.length - 1];\n return cityPart.replace(/_/g, ' ');\n }\n\n /**\n * Get a short abbreviation for a timezone (for the badge).\n * Uses common abbreviations for well-known cities, otherwise extracts from city name.\n */\n private getTimezoneAbbreviation(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n // Common abbreviations for popular timezones\n const abbreviations: Record<string, string> = {\n 'Europe/Vienna': 'VIE',\n 'Europe/London': 'LON',\n 'Europe/Paris': 'PAR',\n 'Europe/Berlin': 'BER',\n 'Europe/Zurich': 'ZRH',\n 'Europe/Amsterdam': 'AMS',\n 'Europe/Brussels': 'BRU',\n 'Europe/Madrid': 'MAD',\n 'Europe/Rome': 'ROM',\n 'Europe/Warsaw': 'WAW',\n 'Europe/Prague': 'PRG',\n 'Europe/Budapest': 'BUD',\n 'Europe/Stockholm': 'STO',\n 'Europe/Oslo': 'OSL',\n 'Europe/Copenhagen': 'CPH',\n 'Europe/Helsinki': 'HEL',\n 'Europe/Athens': 'ATH',\n 'Europe/Istanbul': 'IST',\n 'Europe/Moscow': 'MOW',\n 'America/New_York': 'NYC',\n 'America/Los_Angeles': 'LAX',\n 'America/Chicago': 'CHI',\n 'America/Denver': 'DEN',\n 'America/Phoenix': 'PHX',\n 'America/Toronto': 'YYZ',\n 'America/Vancouver': 'YVR',\n 'America/Mexico_City': 'MEX',\n 'America/Sao_Paulo': 'SAO',\n 'America/Buenos_Aires': 'BUE',\n 'America/Lima': 'LIM',\n 'America/Bogota': 'BOG',\n 'Asia/Tokyo': 'TYO',\n 'Asia/Shanghai': 'SHA',\n 'Asia/Hong_Kong': 'HKG',\n 'Asia/Singapore': 'SIN',\n 'Asia/Seoul': 'SEL',\n 'Asia/Taipei': 'TPE',\n 'Asia/Bangkok': 'BKK',\n 'Asia/Jakarta': 'JKT',\n 'Asia/Mumbai': 'BOM',\n 'Asia/Delhi': 'DEL',\n 'Asia/Kolkata': 'CCU',\n 'Asia/Dubai': 'DXB',\n 'Asia/Riyadh': 'RUH',\n 'Asia/Tel_Aviv': 'TLV',\n 'Australia/Sydney': 'SYD',\n 'Australia/Melbourne': 'MEL',\n 'Australia/Perth': 'PER',\n 'Australia/Brisbane': 'BNE',\n 'Pacific/Auckland': 'AKL',\n 'Pacific/Honolulu': 'HNL',\n 'Africa/Cairo': 'CAI',\n 'Africa/Johannesburg': 'JNB',\n 'Africa/Lagos': 'LOS',\n 'Africa/Nairobi': 'NBO',\n 'Africa/Accra': 'ACC',\n };\n\n if (abbreviations[tz]) {\n return abbreviations[tz];\n }\n\n // Fallback: Extract first 3-4 letters of city name, uppercase\n const city = this.extractCityName(tz);\n return city.substring(0, 3).toUpperCase();\n }\n\n /**\n * Format a timezone ID to a short display format.\n * E.g., 'Europe/Vienna' → 'Vienna (UTC+1)'\n */\n protected formatTimezoneShort(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n const city = this.extractCityName(tz);\n const offset = this.getOffsetForTimeZoneCompact(tz);\n\n return `${city} (UTC${offset})`;\n }\n\n /**\n * Get a compact UTC offset string for a timezone.\n * E.g., '+1', '-5', '+5:30'\n */\n private getOffsetForTimeZoneCompact(tz: string): string {\n const instant = Temporal.Now.instant();\n const zoned = instant.toZonedDateTimeISO(tz);\n\n const offsetNs = zoned.offsetNanoseconds;\n const offsetMinutes = Math.floor(offsetNs / 60_000_000_000);\n\n if (offsetMinutes === 0) return '+0';\n\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absMinutes / 60);\n const mins = absMinutes % 60;\n\n if (mins === 0) {\n return `${sign}${hours}`;\n }\n return `${sign}${hours}:${String(mins).padStart(2, '0')}`;\n }\n\n /** Get placeholder text based on date and time format */\n protected inputPlaceholder = computed(() => {\n const datePart = this.dateFormat().toUpperCase();\n const use24h = this.effectiveUse24Hour();\n return use24h ? `${datePart} HH:MM` : `${datePart} HH:MM AM/PM`;\n });\n\n /** Whether to use 24-hour time format */\n protected effectiveUse24Hour = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return true;\n if (setting === false) return false;\n return !coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Extract date portion from value */\n /**\n * The value converted to the current working (display) timezone.\n * Used to extract date/time for the calendar and time picker.\n */\n protected valueInWorkingTimeZone = computed((): Temporal.ZonedDateTime | null => {\n const val = this.value();\n if (!val) return null;\n\n const workingTz = this.currentWorkingTimeZone();\n const valueTz = val.timeZoneId;\n\n // If same timezone, no conversion needed\n if (workingTz === valueTz) return val;\n\n // Convert to working timezone\n return val.toInstant().toZonedDateTimeISO(workingTz);\n });\n\n /** Extract date portion from value in working timezone */\n protected selectedDate = computed((): Temporal.PlainDate | null => {\n const val = this.valueInWorkingTimeZone();\n return val ? val.toPlainDate() : null;\n });\n\n /** Extract time portion from value in working timezone */\n protected selectedTime = computed((): CoarTimeValue | null => {\n const val = this.valueInWorkingTimeZone();\n if (!val) return this.pendingTime();\n return { hours: val.hour, minutes: val.minute };\n });\n\n /** Min date for calendar constraints */\n protected minDate = computed((): Temporal.PlainDate | null => {\n const val = this.min();\n return val ? val.toPlainDate() : null;\n });\n\n /** Max date for calendar constraints */\n protected maxDate = computed((): Temporal.PlainDate | null => {\n const val = this.max();\n return val ? val.toPlainDate() : null;\n });\n\n /**\n * Effective minimum time constraint for the time picker.\n * Only applies when the selected date equals the minimum date boundary.\n */\n protected effectiveMinTime = computed((): CoarTimeValue | null => {\n const minDateTime = this.min();\n const selected = this.selectedDate();\n if (!minDateTime || !selected) return null;\n\n const minDatePart = minDateTime.toPlainDate();\n if (Temporal.PlainDate.compare(selected, minDatePart) === 0) {\n return { hours: minDateTime.hour, minutes: minDateTime.minute };\n }\n return null;\n });\n\n /**\n * Effective maximum time constraint for the time picker.\n * Only applies when the selected date equals the maximum date boundary.\n */\n protected effectiveMaxTime = computed((): CoarTimeValue | null => {\n const maxDateTime = this.max();\n const selected = this.selectedDate();\n if (!maxDateTime || !selected) return null;\n\n const maxDatePart = maxDateTime.toPlainDate();\n if (Temporal.PlainDate.compare(selected, maxDatePart) === 0) {\n return { hours: maxDateTime.hour, minutes: maxDateTime.minute };\n }\n return null;\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainDate().toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n /**\n * The derived instant (UTC) from the current value.\n * Null if no value is selected.\n */\n protected derivedInstant = computed((): Temporal.Instant | null => {\n const val = this.value();\n return val ? val.toInstant() : null;\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.ZonedDateTime | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.selectedDate();\n }\n\n protected override estimatePanelHeight(): number {\n return 400;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.pendingTime.set(null);\n this.valueChange.emit(null);\n }\n\n protected override onPanelClosed(): void {\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value (in current display timezone)\n effect(() => {\n const displayed = this.currentDisplayedValue();\n this.displayValue.set(displayed);\n });\n\n // Keep Maskito config in sync\n effect(() => {\n this.dateFormat();\n this.separator();\n this.minDate();\n this.maxDate();\n\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /**\n * Handle date selection from calendar.\n * The date/time is edited in the current working timezone,\n * but the value timezone is preserved (unless explicitly changed).\n */\n protected onDateSelected(date: Temporal.PlainDate): void {\n const time = this.selectedTime() ?? this.defaultTime();\n const valueTz = this.valueTimeZone();\n\n const plainDateTime = date.toPlainDateTime({\n hour: time.hours,\n minute: coarRoundMinutesToStep(time.minutes, this.minuteStep()),\n });\n\n // If we have an existing value, preserve its timezone (intent)\n // Otherwise use the display timezone for new values\n const targetTz = valueTz ?? this.effectiveDisplayTimeZone();\n\n // If editing in display timezone but value has different timezone,\n // we need to convert the selected time to the value timezone\n const workingTz = this.currentWorkingTimeZone();\n let zonedDateTime: Temporal.ZonedDateTime;\n\n if (workingTz !== targetTz) {\n // User is editing in display timezone, convert to value timezone\n const inWorkingTz = plainDateTime.toZonedDateTime(workingTz);\n zonedDateTime = inWorkingTz.toInstant().toZonedDateTimeISO(targetTz);\n } else {\n zonedDateTime = plainDateTime.toZonedDateTime(targetTz);\n }\n\n // Clamp to min/max bounds\n zonedDateTime = this.clampZonedDateTimeToRange(zonedDateTime);\n\n this.value.set(zonedDateTime);\n this.valueChange.emit(zonedDateTime);\n this.cvaOnChange(zonedDateTime);\n }\n\n /**\n * Handle time changes from time picker.\n * Preserves the value timezone (intent).\n */\n protected onTimeChanged(time: CoarTimeValue | null): void {\n if (!time) return;\n\n const currentDate = this.selectedDate();\n if (currentDate) {\n const valueTz = this.valueTimeZone();\n const targetTz = valueTz ?? this.effectiveDisplayTimeZone();\n const workingTz = this.currentWorkingTimeZone();\n\n const plainDateTime = currentDate.toPlainDateTime({\n hour: time.hours,\n minute: time.minutes,\n });\n\n let zonedDateTime: Temporal.ZonedDateTime;\n\n if (workingTz !== targetTz) {\n const inWorkingTz = plainDateTime.toZonedDateTime(workingTz);\n zonedDateTime = inWorkingTz.toInstant().toZonedDateTimeISO(targetTz);\n } else {\n zonedDateTime = plainDateTime.toZonedDateTime(targetTz);\n }\n\n zonedDateTime = this.clampZonedDateTimeToRange(zonedDateTime);\n\n this.value.set(zonedDateTime);\n this.valueChange.emit(zonedDateTime);\n this.cvaOnChange(zonedDateTime);\n } else {\n this.pendingTime.set(time);\n }\n }\n\n /**\n * Handle display timezone change (viewing lens).\n * This does NOT change the value - only how it's displayed.\n */\n protected onDisplayTimeZoneChanged(newTimeZone: string | null): void {\n this.displayTimeZone.set(newTimeZone);\n }\n\n /**\n * Start the inline timezone picker (replaces side column content).\n */\n protected startSelectingDisplayTimezone(): void {\n this.timezoneSearchQuery.set('');\n this.isSelectingDisplayTimezone.set(true);\n // Focus the search input and scroll to active timezone after the view updates\n setTimeout(() => {\n this.tzSearchInputRef()?.nativeElement.focus();\n this.scrollToActiveTimezone();\n });\n }\n\n /**\n * Scroll the timezone list to show the currently active timezone.\n */\n private scrollToActiveTimezone(): void {\n const listEl = this.tzListRef()?.nativeElement;\n if (!listEl) return;\n\n const activeItem = listEl.querySelector(\n '.coar-zoned-date-time-picker-tz-picker-item--active'\n ) as HTMLElement;\n if (!activeItem) return;\n\n // Scroll the item into view, centered in the list\n activeItem.scrollIntoView({ block: 'center', behavior: 'instant' });\n }\n\n /**\n * Cancel the inline timezone picker.\n */\n protected cancelSelectingDisplayTimezone(): void {\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n /**\n * Close the timezone picker when clicking outside of it (e.g., on the calendar).\n */\n protected closeTimezonePickerOnOutsideClick(): void {\n if (this.isSelectingDisplayTimezone()) {\n this.cancelSelectingDisplayTimezone();\n }\n }\n\n /**\n * Select a timezone from the inline timezone picker.\n */\n protected selectDisplayTimezone(tz: string): void {\n this.displayTimeZone.set(tz);\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n /**\n * Handle search input change in the inline timezone picker.\n */\n protected onTimezoneSearchChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.timezoneSearchQuery.set(input.value);\n }\n\n /**\n * Toggle between showing value in user timezone vs location timezone.\n * Used by the indicator icon in the trigger.\n *\n * Behavior:\n * - home (user TZ) → switch to location TZ\n * - location (event TZ) → switch to user TZ\n * - world (other TZ) → switch to user TZ\n */\n protected toggleTimeZoneView(): void {\n const state = this.timezoneIndicatorState();\n const locationTz = this.valueTimeZone();\n const userTz = this.userTimeZone();\n\n if (state === 'home' && locationTz && locationTz !== userTz) {\n // Home → Location: show in event timezone\n this.displayTimeZone.set(locationTz);\n } else {\n // Location or World → Home: show in user timezone\n this.displayTimeZone.set(userTz);\n }\n }\n\n /**\n * Start editing the value timezone.\n */\n protected startEditingValueTimeZone(): void {\n // Close display timezone picker if open\n this.cancelSelectingDisplayTimezone();\n this.isEditingValueTimeZone.set(true);\n }\n\n /**\n * Cancel editing the value timezone.\n */\n protected cancelEditingValueTimeZone(): void {\n this.isEditingValueTimeZone.set(false);\n }\n\n /**\n * Change the value timezone (intent).\n * This is an EXPLICIT action - the value's local time stays the same,\n * but it's now interpreted in a different timezone.\n */\n protected onValueTimeZoneChanged(newTimeZone: string | null): void {\n if (!newTimeZone) return;\n\n const currentValue = this.value();\n if (currentValue) {\n // Keep the same local date/time, but change the timezone (intent)\n const plainDateTime = currentValue.toPlainDateTime();\n const newZonedDateTime = plainDateTime.toZonedDateTime(newTimeZone);\n\n this.value.set(newZonedDateTime);\n this.valueChange.emit(newZonedDateTime);\n this.cvaOnChange(newZonedDateTime);\n }\n\n // Auto-lock after selection\n this.isEditingValueTimeZone.set(false);\n }\n\n /**\n * Clamps a ZonedDateTime to be within the min/max range.\n */\n private clampZonedDateTimeToRange(zonedDateTime: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n const minDateTime = this.min();\n const maxDateTime = this.max();\n\n if (minDateTime) {\n const minInstant = minDateTime.toInstant();\n const valueInstant = zonedDateTime.toInstant();\n if (Temporal.Instant.compare(valueInstant, minInstant) < 0) {\n // Return min in the value's timezone for consistency\n return minInstant.toZonedDateTimeISO(zonedDateTime.timeZoneId);\n }\n }\n\n if (maxDateTime) {\n const maxInstant = maxDateTime.toInstant();\n const valueInstant = zonedDateTime.toInstant();\n if (Temporal.Instant.compare(valueInstant, maxInstant) > 0) {\n return maxInstant.toZonedDateTimeISO(zonedDateTime.timeZoneId);\n }\n }\n\n return zonedDateTime;\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.ZonedDateTime | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.pendingTime.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.ZonedDateTime.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = this.parseValueFromInput(text);\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = this.parseValueFromInput(currentText);\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private formatValue(val: Temporal.ZonedDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n\n private parseValueFromInput(text: string): Temporal.ZonedDateTime | null {\n if (!text) return null;\n\n const parts = text.split(' ');\n if (parts.length < 2) return null;\n\n const datePart = parts[0];\n const date = coarParsePlainDateFromInput(datePart, this.dateFormat(), {\n min: this.minDate(),\n max: this.maxDate(),\n });\n\n if (!date) return null;\n\n const timePart = parts.slice(1).join(' ');\n const time = coarParseTimeInput(timePart);\n if (!time) return null;\n\n const plainDateTime = date.toPlainDateTime({ hour: time.hours, minute: time.minutes });\n // Parse input in the value timezone (preserving the event's intent)\n // If no value exists yet, use the display timezone as the initial timezone\n const targetTz = this.valueTimeZone() ?? this.effectiveDisplayTimeZone();\n return plainDateTime.toZonedDateTime(targetTz);\n }\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n const options = maskitoDateTimeOptionsGenerator({\n dateMode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n timeMode: 'HH:MM',\n dateSeparator: separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n\n /**\n * Get UTC offset string for a given timezone.\n */\n private getOffsetForTimeZone(tz: string): string {\n const val = this.value();\n const instant = val?.toInstant() ?? Temporal.Now.instant();\n const zoned = instant.toZonedDateTimeISO(tz);\n\n const offsetNs = zoned.offsetNanoseconds;\n const offsetMinutes = Math.floor(offsetNs / 60_000_000_000);\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absMinutes / 60);\n const mins = absMinutes % 60;\n\n return `${sign}${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}`;\n }\n\n /**\n * Format a ZonedDateTime for display.\n */\n private formatZonedDateTime(val: Temporal.ZonedDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n}\n","<div class=\"coar-zoned-date-time-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-zoned-date-time-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-zoned-date-time-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-zoned-date-time-picker-trigger\"\n [class.coar-zoned-date-time-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-zoned-date-time-picker-trigger--readonly]=\"readonly()\"\n [class.coar-zoned-date-time-picker-trigger--error]=\"hasError()\"\n [class.coar-zoned-date-time-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-zoned-date-time-picker-clear\"\n [class.coar-zoned-date-time-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-zoned-date-time-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Inline Timezone Display (between input and icon) -->\n <span class=\"coar-zoned-date-time-picker-tz-inline\" [class.coar-zoned-date-time-picker-tz-inline--hidden]=\"!value()\">\n {{ currentTimeZoneDisplayName() }}\n </span>\n\n <!-- Timezone Indicator Icon (always rendered to prevent layout shift) -->\n <button type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-indicator\"\n [class.coar-zoned-date-time-picker-tz-indicator--hidden]=\"!value()\"\n [class.coar-zoned-date-time-picker-tz-indicator--clickable]=\"locationDiffersFromUser() || timezoneIndicatorState() !== 'home'\"\n [class.coar-zoned-date-time-picker-tz-indicator--disabled]=\"!locationDiffersFromUser() && timezoneIndicatorState() === 'home'\"\n tabindex=\"-1\"\n [attr.aria-disabled]=\"!locationDiffersFromUser() && timezoneIndicatorState() === 'home' ? 'true' : null\"\n [attr.aria-label]=\"\n locationDiffersFromUser()\n ? 'Toggle timezone view. Currently showing ' +\n popoverTimeZoneInfo().displayTzName +\n '. Click to show ' +\n (timezoneIndicatorState() === 'home' ? popoverTimeZoneInfo().valueTzName : popoverTimeZoneInfo().displayTzName)\n : 'Timezone: ' + popoverTimeZoneInfo().displayTzName\n \"\n (click)=\"toggleTimeZoneView()\"\n [title]=\"\n locationDiffersFromUser()\n ? 'Viewing: ' +\n popoverTimeZoneInfo().displayTzName +\n ' (' +\n popoverTimeZoneInfo().displayTzOffset +\n ')&#10;Location: ' +\n popoverTimeZoneInfo().valueTzName +\n ' (' +\n popoverTimeZoneInfo().valueTzOffset +\n ')&#10;Click to toggle'\n : popoverTimeZoneInfo().displayTzName + ' (' + popoverTimeZoneInfo().displayTzOffset + ')'\n \"\n >\n <!-- Icon based on which timezone is currently shown -->\n @switch (timezoneIndicatorState()) {\n @case ('home') {\n <coar-icon name=\"home\" source=\"coar-builtin\" size=\"s\" />\n }\n @case ('location') {\n <coar-icon name=\"location\" source=\"coar-builtin\" size=\"s\" />\n }\n @case ('world') {\n <coar-icon name=\"world\" source=\"coar-builtin\" size=\"s\" />\n }\n }\n </button>\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-zoned-date-time-picker-panel\"\n [class.coar-zoned-date-time-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date time picker\"\n >\n <!-- Main content: two columns side by side -->\n <div class=\"coar-zoned-date-time-picker-panel-body\">\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-zoned-date-time-picker-calendar-column\" (click)=\"closeTimezonePickerOnOutsideClick()\" (keydown.escape)=\"closeTimezonePickerOnOutsideClick()\" tabindex=\"-1\">\n <coar-scrollable-calendar\n [value]=\"selectedDate()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-zoned-date-time-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n <!-- Right Column: Month List + Time Picker + Timezone OR Timezone Picker -->\n <div class=\"coar-zoned-date-time-picker-side-column\">\n <!-- Unified Header: Year Stepper OR Timezone Search -->\n <div class=\"coar-zoned-date-time-picker-side-header\">\n @if (isSelectingDisplayTimezone()) {\n <!-- Timezone Search Mode -->\n <input\n #tzSearchInput\n type=\"text\"\n class=\"coar-zoned-date-time-picker-tz-search-input\"\n placeholder=\"Search timezone...\"\n aria-label=\"Search timezone\"\n [value]=\"timezoneSearchQuery()\"\n (input)=\"onTimezoneSearchChange($event)\"\n autocomplete=\"off\"\n />\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-search-close\"\n (click)=\"cancelSelectingDisplayTimezone()\"\n aria-label=\"Close timezone picker\"\n >\n <coar-icon name=\"back\" size=\"s\" />\n </button>\n } @else {\n <!-- Year Stepper Mode -->\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-zoned-date-time-picker-year\">{{ currentYear() }}</span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-year-btn\"\n [disabled]=\"isNextYearDisabled()\"\n (click)=\"nextYear()\"\n aria-label=\"Next year\"\n >\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n }\n </div>\n\n @if (isSelectingDisplayTimezone()) {\n <!-- Timezone Picker List (grouped by continent) -->\n <div #tzList class=\"coar-zoned-date-time-picker-tz-picker-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n @for (group of groupedTimezoneList(); track group.name) {\n <div class=\"coar-zoned-date-time-picker-tz-group\">\n <div class=\"coar-zoned-date-time-picker-tz-group-header\">{{ group.name }}</div>\n @for (item of group.items; track item.id) {\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-picker-item\"\n [class.coar-zoned-date-time-picker-tz-picker-item--active]=\"item.id === effectiveDisplayTimeZone()\"\n [title]=\"item.id\"\n (click)=\"selectDisplayTimezone(item.id)\"\n >\n <span class=\"coar-zoned-date-time-picker-tz-city\">{{ item.city }}</span>\n <span class=\"coar-zoned-date-time-picker-tz-offset\">{{ item.offset }}</span>\n </button>\n }\n </div>\n }\n @if (groupedTimezoneList().length === 0) {\n <div class=\"coar-zoned-date-time-picker-tz-picker-empty\">No timezones found</div>\n }\n </div>\n } @else {\n <!-- Normal Mode: Months, Time, Timezone -->\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-zoned-date-time-picker-month-list-wrapper\">\n <div class=\"coar-zoned-date-time-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-zoned-date-time-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-month-item\"\n [class.coar-zoned-date-time-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Time Picker -->\n <div class=\"coar-zoned-date-time-picker-time-section\">\n <coar-time-picker\n [value]=\"selectedTime()\"\n [use24Hour]=\"use24Hour()\"\n [minuteStep]=\"minuteStep()\"\n [locale]=\"effectiveLocale()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [minTime]=\"effectiveMinTime()\"\n [maxTime]=\"effectiveMaxTime()\"\n (valueChange)=\"onTimeChanged($event)\"\n />\n </div>\n\n <!-- Display Timezone Section (in side column) -->\n <div class=\"coar-zoned-date-time-picker-display-tz-section\">\n <span class=\"coar-zoned-date-time-picker-display-tz-label\">Display Timezone</span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-display-tz-button\"\n (click)=\"startSelectingDisplayTimezone()\"\n [title]=\"effectiveDisplayTimeZone()\"\n aria-label=\"Change display timezone\"\n >\n <span class=\"coar-zoned-date-time-picker-display-tz-value\">{{ displayTimeZoneDisplayName() }}</span>\n <coar-icon name=\"down\" size=\"xs\" />\n </button>\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-zoned-date-time-picker-events\">\n <div class=\"coar-zoned-date-time-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-zoned-date-time-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-zoned-date-time-picker-event-item\">\n <span class=\"coar-zoned-date-time-picker-event-dot\"></span>\n <div class=\"coar-zoned-date-time-picker-event-details\">\n <span class=\"coar-zoned-date-time-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-zoned-date-time-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n <!-- End panel-body -->\n\n <!-- Event Timezone Footer (full width, one-liner) -->\n <div class=\"coar-zoned-date-time-picker-footer\" [class.coar-zoned-date-time-picker-footer--differs]=\"timeZonesDiffer()\">\n @if (!value()) {\n <!-- No value: show placeholder to prevent layout shift -->\n <span class=\"coar-zoned-date-time-picker-footer-tz-section\">\n <span class=\"coar-zoned-date-time-picker-footer-tz coar-zoned-date-time-picker-footer-tz--placeholder\">{{\n valueTimeZoneDisplayName()\n }}</span>\n </span>\n <span class=\"coar-zoned-date-time-picker-footer-datetime coar-zoned-date-time-picker-footer-datetime--placeholder\"> — </span>\n } @else if (isEditingValueTimeZone()) {\n <!-- Editing mode: show select -->\n <coar-single-select\n class=\"coar-zoned-date-time-picker-value-tz-select\"\n [options]=\"timezoneOptions()\"\n [value]=\"valueTimeZone()\"\n [searchable]=\"true\"\n [placeholder]=\"'Select timezone'\"\n size=\"xs\"\n (valueChange)=\"onValueTimeZoneChanged($event)\"\n appearance=\"inline\"\n />\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-value-tz-cancel\"\n (click)=\"cancelEditingValueTimeZone()\"\n aria-label=\"Cancel timezone change\"\n >\n <coar-icon name=\"x\" size=\"xs\" />\n </button>\n } @else {\n <!-- Display mode: Location icon + timezone + datetime + settings -->\n <span class=\"coar-zoned-date-time-picker-footer-tz-section\">\n <coar-icon name=\"location\" size=\"s\" />\n <span class=\"coar-zoned-date-time-picker-footer-tz\">{{ valueTimeZoneDisplayName() }}</span>\n </span>\n <span class=\"coar-zoned-date-time-picker-footer-datetime\">\n {{ valueInValueTimeZone() }}\n </span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-footer-lock\"\n (click)=\"startEditingValueTimeZone()\"\n aria-label=\"Change event timezone\"\n title=\"Click to change the event's timezone\"\n >\n <coar-icon name=\"setting\" size=\"xs\" />\n </button>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\" class=\"coar-form-field-message\" [class.coar-form-field-message--error]=\"hasError()\" [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import { Injectable } from '@angular/core';\n\n/**\n * Local coordination for popovers inside the same container (e.g. a date picker panel).\n *\n * Provided by a parent component to ensure only one popover in that scope is open at a time.\n */\n@Injectable()\nexport class CoarPopoverGroupService {\n private activeId: string | null = null;\n private activeClose: (() => void) | null = null;\n\n requestOpen(id: string, close: () => void): void {\n if (this.activeId && this.activeId !== id) {\n this.activeClose?.();\n }\n\n this.activeId = id;\n this.activeClose = close;\n }\n\n notifyClosed(id: string): void {\n if (this.activeId === id) {\n this.activeId = null;\n this.activeClose = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostListener,\n effect,\n inject,\n input,\n signal,\n viewChild,\n booleanAttribute,\n TemplateRef,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, filter } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarPopoverGroupService } from './coar-popover-group.service';\n\n/**\n * A lightweight, hover/focus popover for rich tooltip-like content.\n *\n * Uses the overlay system for positioning with automatic placement and viewport clamping.\n */\n@Component({\n selector: 'coar-popover',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-popover.component.html',\n styleUrl: './coar-popover.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarPopoverComponent {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly popoverGroup = inject(CoarPopoverGroupService, { optional: true });\n private readonly overlayBuilder = createOverlayBuilder();\n\n private static nextId = 0;\n private readonly popoverId = `coar-popover-${CoarPopoverComponent.nextId++}`;\n protected readonly panelId = `${this.popoverId}-panel`;\n\n private overlayRef: OverlayRef | null = null;\n protected readonly isOpen = signal(false);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.close();\n });\n }\n\n /** Disable popover behavior (still renders trigger content). */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable hover/focus behavior (desktop-friendly). Default: false */\n openOnHover = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable click/tap behavior (touch-friendly). Default: false */\n openOnClick = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should receive pointer events. Default: true */\n interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When a concrete placement is set, fall back to best-fit when it doesn't fit. Default: false */\n fallbackToBestFit = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should be clamped into the viewport. Default: true */\n clampToViewport = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When true, the popover is \"pinned\" open via click and won't close on hover out. */\n protected readonly pinnedByClick = signal(false);\n\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly hoveringTrigger = signal(false);\n private readonly hoveringPanel = signal(false);\n\n private readonly closeOnDisable = effect(() => {\n if (this.disabled()) {\n this.close();\n }\n });\n\n private readonly syncClampToViewport = effect(() => {\n // Applied when opening the overlay.\n void this.clampToViewport();\n });\n\n private readonly syncFallbackToBestFit = effect(() => {\n // Relevant for concrete placements; popover uses best-fit placement list.\n void this.fallbackToBestFit();\n });\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n private readonly panelTemplateRef = viewChild<TemplateRef<unknown>>('panelTemplate');\n\n private getAnchorElement(): HTMLElement | null {\n const triggerContainer = this.triggerRef()?.nativeElement ?? null;\n if (!triggerContainer) return null;\n\n // Prefer anchoring to the projected trigger element so positioning stays tied\n // to the interactive target rather than a full-width wrapper.\n return (\n triggerContainer.querySelector('[coarPopoverTrigger], [coarpopovertrigger]') ??\n triggerContainer\n );\n }\n\n private readonly closeOnDocumentClick = fromEvent<MouseEvent>(document, 'click')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(() => this.isOpen()),\n filter(() => this.openOnClick()),\n filter(() => this.pinnedByClick()),\n filter((event) => {\n const target = event.target as Node | null;\n if (!target) return false;\n\n const trigger = this.getAnchorElement();\n if (trigger && trigger.contains(target)) return false;\n\n const panel = document.getElementById(this.panelId);\n if (panel && panel.contains(target)) return false;\n\n return true;\n })\n )\n .subscribe(() => this.close());\n\n private openInternal(source: 'hover' | 'click'): void {\n if (this.disabled()) return;\n\n const trigger = this.getAnchorElement();\n if (!trigger) return;\n\n if (this.overlayRef) {\n if (source === 'click') {\n this.pinnedByClick.set(true);\n }\n return;\n }\n\n const template = this.panelTemplateRef();\n if (!template) return;\n\n // Scope-level coordination (e.g. date picker): opening one closes others.\n this.popoverGroup?.requestOpen(this.popoverId, () => this.close());\n\n if (source === 'click') {\n this.pinnedByClick.set(true);\n } else {\n this.pinnedByClick.set(false);\n }\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({\n placement: ['bottom', 'top', 'right', 'left'],\n offset: 6,\n flip: false,\n shift: this.clampToViewport(),\n })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: false, escapeKey: true })\n .size({ mode: 'content' })\n .a11y({ role: 'tooltip' })\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n this.isOpen.set(true);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.pinnedByClick.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n });\n }\n\n onMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringTrigger.set(true);\n this.clearCloseTimer();\n this.openInternal('hover');\n }\n\n onMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringTrigger.set(false);\n this.scheduleHoverClose();\n }\n\n onPanelMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringPanel.set(true);\n this.clearCloseTimer();\n }\n\n onPanelMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringPanel.set(false);\n this.scheduleHoverClose();\n }\n\n onFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onPanelFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onTriggerClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n if (this.disabled()) return;\n\n // Prevent the global document click handler from immediately closing.\n event.stopPropagation();\n\n if (!this.isOpen()) {\n this.openInternal('click');\n return;\n }\n\n // If opened via hover, treat click as \"pin\". If already pinned, toggle closed.\n if (!this.pinnedByClick()) {\n this.pinnedByClick.set(true);\n return;\n }\n\n this.close();\n }\n\n @HostListener('click', ['$event'])\n onHostClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n // Only toggle when the click originated from the projected trigger.\n if (!target.closest('[coarPopoverTrigger]')) return;\n\n this.onTriggerClick(event);\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.pinnedByClick.set(false);\n this.clearCloseTimer();\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n }\n\n onFocusOut(event: FocusEvent): void {\n if (this.pinnedByClick()) return;\n\n const nextTarget = event.relatedTarget as Node | null;\n\n // Close only when focus fully leaves the popover (trigger + panel).\n const trigger = this.triggerRef()?.nativeElement ?? null;\n const panel = document.getElementById(this.panelId);\n if (\n (trigger && nextTarget && trigger.contains(nextTarget)) ||\n (panel && nextTarget && panel.contains(nextTarget))\n ) {\n return;\n }\n\n this.close();\n }\n\n onPanelFocusOut(event: FocusEvent): void {\n this.onFocusOut(event);\n }\n\n private scheduleHoverClose(): void {\n this.clearCloseTimer();\n this.closeTimer = setTimeout(() => {\n if (this.pinnedByClick()) return;\n if (this.hoveringTrigger() || this.hoveringPanel()) return;\n this.close();\n }, 80);\n }\n\n private clearCloseTimer(): void {\n if (!this.closeTimer) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n}\n","<div\n class=\"coar-popover\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n>\n <span\n #trigger\n class=\"coar-popover-trigger\"\n >\n <ng-content select=\"[coarPopoverTrigger]\"></ng-content>\n </span>\n\n <ng-template #panelTemplate>\n <div\n class=\"coar-popover-panel coar-popover-panel--overlay\"\n [attr.id]=\"panelId\"\n [style.pointer-events]=\"interactive() ? 'auto' : 'none'\"\n role=\"tooltip\"\n (mouseenter)=\"onPanelMouseEnter()\"\n (mouseleave)=\"onPanelMouseLeave()\"\n (focusin)=\"onPanelFocusIn()\"\n (focusout)=\"onPanelFocusOut($event)\"\n >\n <div\n class=\"coar-popover-content\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n <ng-content select=\"[coarPopoverContent]\"></ng-content>\n </div>\n </div>\n </ng-template>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport type { DateFormatConfig } from '../_shared/coar-date-format';\nimport type { CoarDateMarker } from '../_shared/coar-date-marker';\nimport {\n coarCalculateIsoWeekNumber,\n coarDetectDateFormatPatternFromIntl,\n coarGetCalendarGridDates,\n coarGetLocalizedWeekdays,\n coarClampPlainDate,\n} from '../_shared/coar-date-helpers';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarPopoverComponent } from '../../overlay/popover/coar-popover.component';\nimport { CoarPopoverGroupService } from '../../overlay/popover/coar-popover-group.service';\nimport {\n CoarI18nPipe,\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\n@Component({\n selector: 'coar-mini-calendar',\n standalone: true,\n imports: [CoarIconComponent, CoarPopoverComponent, CoarI18nPipe],\n templateUrl: './coar-mini-calendar.component.html',\n styleUrl: './coar-mini-calendar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CoarPopoverGroupService],\n})\nexport class CoarMiniCalendarComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n private readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n /** Current selected date (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /** Date format configuration (pattern and first day of week) */\n dateFormatConfig = input<DateFormatConfig>();\n\n /** Whether to show a \"Today\" button */\n showTodayButton = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days (Saturday/Sunday) with a subtle background */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates (holidays, events, etc.) */\n markers = input<CoarDateMarker[]>([]);\n\n /** Maximum number of lines shown in the marker popover (including \"+N\" line). */\n protected readonly markerPopoverMaxLines = 5;\n\n /** Visible markers before switching to \"+N other events\". */\n protected readonly markerPopoverVisibleMarkers = 4;\n\n /**\n * Today's date based on the configured timezone.\n * Reactive: updates when timezone changes.\n */\n protected readonly today = computed(() => {\n const tz = this.timeZoneService?.currentTimeZone();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n /** Currently viewed month/year in the calendar */\n protected viewDate = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth()\n );\n\n /** Focused date in the calendar (for keyboard navigation) */\n protected focusedDate = signal<Temporal.PlainDate | null>(null);\n\n /**\n * Effective locale for calendar month/year display.\n * Priority: input locale > locale service language > browser locale\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be 'de' or 'de-AT'. Using effectiveLocale() ensures the per-instance\n // locale input is respected.\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n // Convert 0-6 (Sun-Sat) format to ISO 1-7 (Mon-Sun) format\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n // Fallback: detect pattern from Intl, default firstDayOfWeek to Monday\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n protected firstDayOfWeek = computed(() => this.effectiveDateFormat().firstDayOfWeek);\n\n protected daysOfWeek = computed(() => {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date?.dayNamesShort?.length === 7) {\n // dayNamesShort is [Mon, Tue, Wed, Thu, Fri, Sat, Sun] (Monday-first)\n const names = [...localeData.date.dayNamesShort];\n if (this.firstDayOfWeek() === 7) {\n // Sunday first: move Sunday from end to front\n const sunday = names.pop()!;\n names.unshift(sunday);\n }\n return names;\n }\n return coarGetLocalizedWeekdays(this.effectiveLocale(), this.firstDayOfWeek());\n });\n\n protected calendarDays = computed(() => {\n const viewMonth = this.viewDate();\n const grid = coarGetCalendarGridDates(viewMonth, this.firstDayOfWeek());\n return grid.map((cell) => this.createCalendarDay(cell.date, cell.isOutsideMonth));\n });\n\n protected viewMonth = computed(() => {\n const viewMonth = this.viewDate();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n return localeData?.date?.monthNames?.[viewMonth.month - 1]\n ?? new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(viewMonth.year, viewMonth.month - 1, 1));\n });\n\n protected viewYear = computed(() => this.viewDate().year);\n\n protected weekNumbers = computed(() => {\n const days = this.calendarDays();\n const weeks: number[] = [];\n\n for (let i = 0; i < 6; i++) {\n const firstDayOfWeek = days[i * 7];\n if (firstDayOfWeek) {\n const weekNum =\n firstDayOfWeek.date.weekOfYear ?? coarCalculateIsoWeekNumber(firstDayOfWeek.date);\n weeks.push(weekNum);\n }\n }\n\n return weeks;\n });\n\n constructor() {\n // Keep the view month in sync when a value is provided/changed.\n effect(() => {\n const val = this.value();\n if (!val) return;\n this.viewDate.set(val.toPlainYearMonth());\n\n // Set a sensible default focus when a value arrives.\n if (!this.focusedDate()) {\n this.focusedDate.set(val);\n }\n });\n\n // Default focus when no value is set.\n effect(() => {\n if (this.value()) return;\n if (this.focusedDate()) return;\n this.focusedDate.set(this.today());\n });\n }\n\n previousMonth(): void {\n this.viewDate.update((d) => d.subtract({ months: 1 }));\n }\n\n nextMonth(): void {\n this.viewDate.update((d) => d.add({ months: 1 }));\n }\n\n previousYear(): void {\n this.viewDate.update((d) => d.subtract({ years: 1 }));\n }\n\n nextYear(): void {\n this.viewDate.update((d) => d.add({ years: 1 }));\n }\n\n goToToday(): void {\n this.viewDate.set(this.today().toPlainYearMonth());\n this.focusedDate.set(this.today());\n }\n\n selectDate(date: Temporal.PlainDate): void {\n if (this.isDateDisabled(date)) return;\n\n this.value.set(date);\n this.focusedDate.set(date);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const focused = this.focusedDate();\n if (focused) {\n this.selectDate(focused);\n }\n break;\n }\n case 'ArrowLeft':\n event.preventDefault();\n this.moveFocus(-1, 'day');\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.moveFocus(1, 'day');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-7, 'day');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(7, 'day');\n break;\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(-1, 'year');\n } else {\n this.moveFocus(-1, 'month');\n }\n break;\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(1, 'year');\n } else {\n this.moveFocus(1, 'month');\n }\n break;\n case 'Home':\n event.preventDefault();\n this.goToToday();\n break;\n }\n }\n\n protected getVisibleMarkers(markers: CoarDateMarker[]): CoarDateMarker[] {\n if (markers.length <= this.markerPopoverMaxLines) {\n return markers;\n }\n return markers.slice(0, this.markerPopoverVisibleMarkers);\n }\n\n protected getHiddenMarkerCount(markers: CoarDateMarker[]): number {\n if (markers.length <= this.markerPopoverMaxLines) {\n return 0;\n }\n return Math.max(0, markers.length - this.markerPopoverVisibleMarkers);\n }\n\n private getMarkersForDate(date: Temporal.PlainDate): CoarDateMarker[] {\n const markers = this.markers();\n const matches: CoarDateMarker[] = [];\n\n for (const marker of markers) {\n const start = marker.startDate;\n const end = marker.endDate ?? marker.startDate;\n\n if (\n Temporal.PlainDate.compare(date, start) >= 0 &&\n Temporal.PlainDate.compare(date, end) <= 0\n ) {\n matches.push(marker);\n }\n }\n\n return matches;\n }\n\n private isDateDisabled(date: Temporal.PlainDate): boolean {\n const minDate = this.min();\n const maxDate = this.max();\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) return true;\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) return true;\n\n return false;\n }\n\n private moveFocus(amount: number, unit: 'day' | 'month' | 'year'): void {\n const current = this.focusedDate() ?? this.value() ?? this.today();\n\n let newDate: Temporal.PlainDate;\n switch (unit) {\n case 'day':\n newDate = current.add({ days: amount });\n break;\n case 'month':\n newDate = current.add({ months: amount });\n break;\n case 'year':\n newDate = current.add({ years: amount });\n break;\n }\n\n newDate = coarClampPlainDate(newDate, { min: this.min(), max: this.max() });\n\n this.focusedDate.set(newDate);\n this.viewDate.set(newDate.toPlainYearMonth());\n }\n\n private createCalendarDay(date: Temporal.PlainDate, isOutsideMonth: boolean): CalendarDay {\n const selected = this.value();\n const focused = this.focusedDate();\n\n const dayOfWeek = date.dayOfWeek;\n const markers = this.getMarkersForDate(date);\n\n return {\n date,\n day: date.day,\n isOutsideMonth,\n isToday: Temporal.PlainDate.compare(date, this.today()) === 0,\n isSelected: selected ? Temporal.PlainDate.compare(date, selected) === 0 : false,\n isFocused: focused ? Temporal.PlainDate.compare(date, focused) === 0 : false,\n isDisabled: this.isDateDisabled(date),\n isWeekend: dayOfWeek === 6 || dayOfWeek === 7,\n markers,\n markerCssClass: markers[0]?.cssClass ?? null,\n };\n }\n}\n\ninterface CalendarDay {\n date: Temporal.PlainDate;\n day: number;\n isOutsideMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isFocused: boolean;\n isDisabled: boolean;\n isWeekend: boolean;\n markers: CoarDateMarker[];\n markerCssClass: string | null;\n}\n","<div class=\"coar-mini-calendar\" role=\"application\" (keydown)=\"onKeydown($event)\">\n <div class=\"coar-mini-calendar-header\">\n <button type=\"button\" class=\"coar-mini-calendar-nav\" aria-label=\"Previous year\" (click)=\"previousYear()\">\n <coar-icon name=\"chevrons-left\" source=\"coar-builtin\" size=\"s\" />\n </button>\n <button type=\"button\" class=\"coar-mini-calendar-nav\" aria-label=\"Previous month\" (click)=\"previousMonth()\">\n <coar-icon name=\"chevron-left\" source=\"coar-builtin\" size=\"s\" />\n </button>\n\n <span class=\"coar-mini-calendar-month-year\">\n <span class=\"coar-mini-calendar-month\">{{ viewMonth() }}</span>\n <span class=\"coar-mini-calendar-year\">{{ viewYear() }}</span>\n </span>\n\n <button type=\"button\" class=\"coar-mini-calendar-nav coar-mini-calendar-nav--next\" aria-label=\"Next month\" (click)=\"nextMonth()\">\n <coar-icon name=\"chevron-right\" source=\"coar-builtin\" size=\"s\" />\n </button>\n <button type=\"button\" class=\"coar-mini-calendar-nav coar-mini-calendar-nav--next\" aria-label=\"Next year\" (click)=\"nextYear()\">\n <coar-icon name=\"chevrons-right\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <div class=\"coar-mini-calendar-weekdays\" [class.coar-mini-calendar-weekdays--with-weeks]=\"showWeekNumbers()\">\n @if (showWeekNumbers()) {\n <span class=\"coar-mini-calendar-week-spacer\"></span>\n }\n @for (day of daysOfWeek(); track day) {\n <span class=\"coar-mini-calendar-weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"coar-mini-calendar-grid\" [class.coar-mini-calendar-grid--with-weeks]=\"showWeekNumbers()\" role=\"grid\">\n @for (day of calendarDays(); track day.date.toString(); let i = $index) {\n @if (showWeekNumbers() && i % 7 === 0) {\n <span class=\"coar-mini-calendar-week-number\">{{ weekNumbers()[i / 7] }}</span>\n }\n\n <coar-popover [disabled]=\"day.isDisabled || day.markers.length === 0\" [openOnClick]=\"true\" [openOnHover]=\"true\" [interactive]=\"false\">\n <button\n coarPopoverTrigger\n type=\"button\"\n class=\"coar-mini-calendar-day\"\n [class.coar-mini-calendar-day--outside]=\"day.isOutsideMonth\"\n [class.coar-mini-calendar-day--today]=\"day.isToday\"\n [class.coar-mini-calendar-day--selected]=\"day.isSelected\"\n [class.coar-mini-calendar-day--focused]=\"day.isFocused\"\n [class.coar-mini-calendar-day--disabled]=\"day.isDisabled\"\n [class.coar-mini-calendar-day--weekend]=\"highlightWeekends() && day.isWeekend\"\n [class.coar-mini-calendar-day--marked]=\"day.markers.length > 0\"\n [class]=\"day.markerCssClass\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.day }}\n </button>\n\n @if (day.markers.length > 0) {\n <div coarPopoverContent class=\"coar-mini-calendar-marker-popover\">\n <div class=\"coar-mini-calendar-marker-popover__list\">\n @for (marker of getVisibleMarkers(day.markers); track marker.description) {\n <div class=\"coar-mini-calendar-marker-popover__item\">\n {{ marker.description }}\n </div>\n }\n\n @if (getHiddenMarkerCount(day.markers) > 0) {\n <div class=\"coar-mini-calendar-marker-popover__more\">+{{ getHiddenMarkerCount(day.markers) }} other events</div>\n }\n </div>\n </div>\n }\n </coar-popover>\n }\n </div>\n\n @if (showTodayButton()) {\n <div class=\"coar-mini-calendar-footer\">\n <button type=\"button\" class=\"coar-mini-calendar-today\" (click)=\"selectDate(today())\">{{ 'common.today' | coarI18n }}</button>\n </div>\n }\n</div>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarLocalizationService, CoarLocalizationDataStore } from '@cocoar/localization';\n\n/**\n * Month list component for date/time picker navigation.\n *\n * Displays a vertical list of month names with a year stepper at the top.\n * The list height adapts to its container and becomes scrollable if all\n * 12 months don't fit.\n *\n * @example\n * ```html\n * <coar-month-list\n * [(activeMonth)]=\"visibleMonth\"\n * [minYear]=\"1920\"\n * [maxYear]=\"2100\"\n * (monthSelected)=\"onMonthSelected($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-month-list',\n standalone: true,\n imports: [CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-month-list.component.html',\n styleUrl: './coar-month-list.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarMonthListComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // View References\n // ============================================================\n\n /** Reference to the months container */\n private monthsContainerRef = viewChild<ElementRef<HTMLElement>>('monthsContainer');\n\n /** Reference to the scrollbar directive for programmatic scrolling */\n private scrollbarDirective = viewChild(CoarScrollbarDirective);\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Currently active/visible month (two-way bindable) */\n activeMonth = model<Temporal.PlainYearMonth>(Temporal.Now.plainDateISO().toPlainYearMonth());\n\n /**\n * Locale identifier for month name formatting.\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Minimum year that can be selected.\n * Default: current year - 100\n */\n minYear = input<number>(Temporal.Now.plainDateISO().year - 100);\n\n /**\n * Maximum year that can be selected.\n * Default: current year + 50\n */\n maxYear = input<number>(Temporal.Now.plainDateISO().year + 50);\n\n // ============================================================\n // Outputs\n // ============================================================\n\n /** Emitted when a month is selected from the list */\n monthSelected = output<Temporal.PlainYearMonth>();\n\n /** Emitted when the year changes via stepper */\n yearChanged = output<number>();\n\n // ============================================================\n // Constructor\n // ============================================================\n\n constructor() {\n // Scroll to center the active month initially (with delay for OverlayScrollbars init)\n afterNextRender(() => {\n // OverlayScrollbars defers initialization, so we need a small delay\n setTimeout(() => this.scrollToActiveMonth(), 150);\n });\n\n // Scroll to active month when it changes\n effect(() => {\n // Read the active month to track changes\n this.activeMonth();\n // Scroll to make the active month visible (with small delay for DOM update)\n setTimeout(() => this.scrollToActiveMonth(), 0);\n });\n }\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /** Effective locale for month name formatting */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n /** Current year from activeMonth */\n protected currentYear = computed(() => this.activeMonth().year);\n\n /** Current month number from activeMonth (1-12) */\n protected currentMonthNumber = computed(() => this.activeMonth().month);\n\n /** Whether previous year button is disabled */\n protected isPrevYearDisabled = computed(() => this.currentYear() <= this.minYear());\n\n /** Whether next year button is disabled */\n protected isNextYearDisabled = computed(() => this.currentYear() >= this.maxYear());\n\n /** List of month items for display */\n protected monthItems = computed(() => {\n const year = this.currentYear();\n const currentMonth = this.currentMonthNumber();\n const locale = this.effectiveLocale();\n\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const cachedMonthNames = localeData?.date?.monthNames;\n\n const formatter = cachedMonthNames ? undefined : new Intl.DateTimeFormat(locale, { month: 'long' });\n\n const items: Array<{\n month: number;\n name: string;\n isActive: boolean;\n yearMonth: Temporal.PlainYearMonth;\n }> = [];\n\n for (let m = 1; m <= 12; m++) {\n const name = cachedMonthNames?.[m - 1]\n ?? formatter!.format(new Date(year, m - 1, 1));\n const yearMonth = Temporal.PlainYearMonth.from({ year, month: m });\n\n items.push({\n month: m,\n name,\n isActive: m === currentMonth,\n yearMonth,\n });\n }\n\n return items;\n });\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /** Navigate to previous year */\n previousYear(): void {\n if (this.isPrevYearDisabled()) return;\n\n const current = this.activeMonth();\n const newYear = current.year - 1;\n const newMonth = Temporal.PlainYearMonth.from({\n year: newYear,\n month: current.month,\n });\n\n this.activeMonth.set(newMonth);\n this.yearChanged.emit(newYear);\n }\n\n /** Navigate to next year */\n nextYear(): void {\n if (this.isNextYearDisabled()) return;\n\n const current = this.activeMonth();\n const newYear = current.year + 1;\n const newMonth = Temporal.PlainYearMonth.from({\n year: newYear,\n month: current.month,\n });\n\n this.activeMonth.set(newMonth);\n this.yearChanged.emit(newYear);\n }\n\n /** Select a specific month */\n selectMonth(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n this.monthSelected.emit(yearMonth);\n }\n\n // ============================================================\n // Private Methods\n // ============================================================\n\n /**\n * Scrolls the month list to make the active month visible.\n * Works with OverlayScrollbars by scrolling its viewport element directly.\n */\n private scrollToActiveMonth(): void {\n // Get the OverlayScrollbars instance and its viewport\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) return;\n\n // Find the active month button within the viewport's content\n const activeButton = viewport.querySelector('.coar-month-list__month--active') as HTMLElement;\n if (!activeButton) return;\n\n // Calculate scroll position to make the active month visible\n const buttonTop = activeButton.offsetTop;\n const buttonHeight = activeButton.offsetHeight;\n const viewportHeight = viewport.clientHeight;\n const currentScrollTop = viewport.scrollTop;\n\n // Check if button is above the visible area\n if (buttonTop < currentScrollTop) {\n viewport.scrollTop = buttonTop;\n }\n // Check if button is below the visible area\n else if (buttonTop + buttonHeight > currentScrollTop + viewportHeight) {\n viewport.scrollTop = buttonTop + buttonHeight - viewportHeight;\n }\n // Otherwise it's already visible, no scroll needed\n }\n}\n","<div class=\"coar-month-list\">\n <!-- Year Stepper -->\n <div class=\"coar-month-list__year-stepper\">\n <button type=\"button\" class=\"coar-month-list__year-btn\" [disabled]=\"isPrevYearDisabled()\" (click)=\"previousYear()\" aria-label=\"Previous year\">\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n\n <span class=\"coar-month-list__year\">{{ currentYear() }}</span>\n\n <button type=\"button\" class=\"coar-month-list__year-btn\" [disabled]=\"isNextYearDisabled()\" (click)=\"nextYear()\" aria-label=\"Next year\">\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List -->\n <div #monthsContainer class=\"coar-month-list__months\" coarScrollbar [overflowX]=\"'hidden'\" [autoHide]=\"'leave'\" role=\"listbox\" aria-label=\"Months\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-month-list__month\"\n [class.coar-month-list__month--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n</div>\n","/**\n * Shared time formatting configuration.\n *\n * Note: This config is intentionally small so it can be used by multiple UI components\n * (time picker, date-time picker, etc.) without pulling in Angular-only code.\n */\nexport interface TimeFormatConfig {\n /**\n * Whether to use 24-hour format (true) or 12-hour format with AM/PM (false).\n * When set to 'auto', the format is detected from the user's locale.\n */\n readonly use24Hour: boolean | 'auto';\n\n /**\n * Step interval for minute selection.\n * For example, 5 means minutes can only be 0, 5, 10, 15, etc.\n */\n readonly minuteStep: 1 | 5 | 10 | 15;\n}\n\n/**\n * Default time format configuration.\n */\nexport const COAR_DEFAULT_TIME_FORMAT: TimeFormatConfig = {\n use24Hour: 'auto',\n minuteStep: 5,\n};\n","// Date/time pickers\nexport * from './plain-date-picker';\nexport * from './plain-date-time-picker';\nexport * from './zoned-date-time-picker';\nexport * from './time-picker';\n\n// Calendar components\nexport * from './scrollable-calendar';\nexport * from './mini-calendar';\nexport * from './month-list';\n\n// Date utilities (Temporal-based)\nexport * from './_shared/coar-date-format';\nexport * from './_shared/coar-date-helpers';\nexport * from './_shared/coar-date-marker';\nexport * from './_shared/coar-time-format';\nexport * from './_shared/coar-time-helpers';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarIconComponent, CoarIconSize } from '../icon/coar-icon.component';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost';\nexport type ButtonSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-button',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-button.component.html',\n styleUrl: './coar-button.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-button-host]': 'true',\n '[class.coar-button--full-width]': 'fullWidth()',\n },\n})\nexport class CoarButtonComponent {\n /** Button visual variant */\n variant = input<ButtonVariant>('primary');\n\n /** Button size */\n size = input<ButtonSize>('m');\n\n /** Whether the button is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the button is in loading state */\n loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Button type attribute */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n /** Icon to display before the label */\n iconStart = input<string | undefined>(undefined);\n\n /** Icon to display after the label */\n iconEnd = input<string | undefined>(undefined);\n\n /** Whether the button should take full width */\n fullWidth = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Optional aria-label applied to the underlying <button> element */\n ariaLabel = input<string>('');\n\n /** Emitted when the button is clicked (not emitted when disabled or loading) */\n clicked = output<MouseEvent>();\n\n /** Maps button size to appropriate icon size */\n protected readonly iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<ButtonSize, CoarIconSize> = {\n xs: 'xs',\n s: 's',\n m: 'm',\n l: 'l',\n };\n return sizeMap[this.size()];\n });\n\n protected onClick(event: MouseEvent): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n}\n","<button\n class=\"coar-button\"\n [class.coar-button--primary]=\"variant() === 'primary'\"\n [class.coar-button--secondary]=\"variant() === 'secondary'\"\n [class.coar-button--tertiary]=\"variant() === 'tertiary'\"\n [class.coar-button--danger]=\"variant() === 'danger'\"\n [class.coar-button--ghost]=\"variant() === 'ghost'\"\n [class.coar-button--xs]=\"size() === 'xs'\"\n [class.coar-button--s]=\"size() === 's'\"\n [class.coar-button--m]=\"size() === 'm'\"\n [class.coar-button--l]=\"size() === 'l'\"\n [class.coar-button--loading]=\"loading()\"\n [class.coar-button--loading-overlay]=\"loading() && !iconStart() && !iconEnd()\"\n [class.coar-button--disabled]=\"disabled()\"\n [class.coar-button--full-width]=\"fullWidth()\"\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-disabled]=\"disabled() || loading() ? 'true' : null\"\n [attr.aria-busy]=\"loading()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onClick($event)\"\n>\n <!-- Loading Spinner: Centered overlay when no icons, inline replacement when icons exist -->\n @if (loading() && !iconStart() && !iconEnd()) {\n <!-- Overlay spinner (centered, content hidden via opacity) -->\n <span class=\"coar-button__spinner coar-button__spinner--overlay\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n }\n\n <!-- Icon Start: Show spinner instead when loading -->\n @if (loading() && iconStart()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconStart()) {\n <span class=\"coar-button__icon coar-button__icon--start\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconStart()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <!-- Content -->\n <span class=\"coar-button__content\">\n <ng-content />\n </span>\n\n <!-- Icon End: Show spinner instead when loading (only if no iconStart) -->\n @if (loading() && !iconStart() && iconEnd()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconEnd()) {\n <span class=\"coar-button__icon coar-button__icon--end\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconEnd()\" [size]=\"iconSize()\" />\n </span>\n }\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n booleanAttribute,\n} from '@angular/core';\n\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\nexport type BadgeSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'auto';\n\n@Component({\n selector: 'coar-badge',\n standalone: true,\n imports: [],\n templateUrl: './coar-badge.component.html',\n styleUrl: './coar-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-badge-host]': 'true',\n '[class.coar-badge-host--auto]': 'size() === \"auto\"',\n '[class.coar-badge-host--pulse]': 'pulse()',\n },\n})\nexport class CoarBadgeComponent {\n /** Content to display in the badge (number, text, or icon) */\n content = input<string | number>('');\n\n /** Badge visual variant */\n variant = input<BadgeVariant>('primary');\n\n /** Badge size */\n size = input<BadgeSize>('m');\n\n /** Whether the badge should pulse/animate (for notifications) */\n pulse = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show as a dot without content */\n dot = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number to display (shows \"99+\" if exceeded) */\n max = input<number | null>(null);\n\n /** Whether to show a border around the badge */\n bordered = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Computed display value */\n protected displayValue = computed(() => {\n if (this.dot()) {\n return '';\n }\n\n const content = this.content();\n const max = this.max();\n\n if (typeof content === 'number' && max !== null && content > max) {\n return `${max}+`;\n }\n\n return String(content);\n });\n}\n","<span\n class=\"coar-badge\"\n [class.coar-badge--primary]=\"variant() === 'primary'\"\n [class.coar-badge--secondary]=\"variant() === 'secondary'\"\n [class.coar-badge--success]=\"variant() === 'success'\"\n [class.coar-badge--warning]=\"variant() === 'warning'\"\n [class.coar-badge--error]=\"variant() === 'error'\"\n [class.coar-badge--info]=\"variant() === 'info'\"\n [class.coar-badge--xs]=\"size() === 'xs'\"\n [class.coar-badge--s]=\"size() === 's'\"\n [class.coar-badge--m]=\"size() === 'm'\"\n [class.coar-badge--l]=\"size() === 'l'\"\n [class.coar-badge--xl]=\"size() === 'xl'\"\n [class.coar-badge--auto]=\"size() === 'auto'\"\n [class.coar-badge--dot]=\"dot()\"\n [class.coar-badge--bordered]=\"bordered()\"\n role=\"status\"\n [attr.aria-label]=\"displayValue() || 'status indicator'\"\n>\n @if (!dot() && displayValue()) {\n <span class=\"coar-badge__content\">{{ displayValue() }}</span>\n }\n</span>\n","import { ChangeDetectionStrategy, Component, input, output, booleanAttribute } from '@angular/core';\n\n/**\n * Tag semantic variants - mirrors CardVariant for visual consistency.\n * Tags are the \"little brother\" of Cards with the same variant system.\n */\nexport type TagVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\n\n/**\n * Tag size variants.\n * - s: Compact tags for dense UIs (10px font)\n * - m: Default size (12px font)\n * - l: Larger tags for emphasis (14px font)\n */\nexport type TagSize = 's' | 'm' | 'l';\n\n/**\n * CoarTagComponent\n *\n * A compact label component for categorizing, labeling, or marking content.\n * Shares the same variant system as CoarCard for visual consistency.\n *\n * Unlike badges (pill-shaped, for counts/notifications), tags use\n * slight rounding and support interactive features like closing.\n *\n * @example\n * ```html\n * <coar-tag>Default</coar-tag>\n * <coar-tag variant=\"success\">Published</coar-tag>\n * <coar-tag variant=\"warning\" closable (closed)=\"onRemove()\">Draft</coar-tag>\n * ```\n */\n@Component({\n selector: 'coar-tag',\n standalone: true,\n templateUrl: './coar-tag.component.html',\n styleUrl: './coar-tag.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-tag',\n // Size\n '[class.coar-tag--s]': 'size() === \"s\"',\n '[class.coar-tag--m]': 'size() === \"m\"',\n '[class.coar-tag--l]': 'size() === \"l\"',\n // Elevated (box-shadow for depth)\n '[class.coar-tag--elevated]': 'elevated()',\n // Borderless (no border)\n '[class.coar-tag--borderless]': 'borderless()',\n // Variants\n '[class.coar-tag--neutral]': 'variant() === \"neutral\"',\n '[class.coar-tag--success]': 'variant() === \"success\"',\n '[class.coar-tag--warning]': 'variant() === \"warning\"',\n '[class.coar-tag--error]': 'variant() === \"error\"',\n '[class.coar-tag--info]': 'variant() === \"info\"',\n '[class.coar-tag--accent]': 'variant() === \"accent\"',\n },\n})\nexport class CoarTagComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-tag elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the tag, leaving only background color.\n * By default (false), tags have a visible border matching their variant.\n * Use as boolean attribute: `<coar-tag borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Tag semantic variant - matches Card variants */\n variant = input<TagVariant>('neutral');\n\n /** Tag size */\n size = input<TagSize>('m');\n\n /** Whether the tag can be closed/removed */\n closable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Emitted when the close button is clicked */\n closed = output<void>();\n\n /** Handle close button click */\n protected onClose(event: MouseEvent): void {\n event.stopPropagation();\n this.closed.emit();\n }\n}\n","<span class=\"coar-tag__content\">\n <ng-content />\n</span>\n@if (closable()) {\n<button type=\"button\" class=\"coar-tag__close\" aria-label=\"Remove tag\" (click)=\"onClose($event)\">\n <svg class=\"coar-tag__close-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n</button>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type CardVariant = 'neutral' | 'outlined' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type CardPadding = 'none' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-card',\n standalone: true,\n imports: [],\n templateUrl: './coar-card.component.html',\n styleUrls: ['./coar-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-card]': 'true',\n // Elevated (box-shadow for depth)\n '[class.coar-card--elevated]': 'elevated()',\n // Borderless (no border) - default is false, so cards have borders by default\n '[class.coar-card--borderless]': 'borderless()',\n // Variants\n '[class.coar-card--neutral]': 'variant() === \"neutral\"',\n '[class.coar-card--outlined]': 'variant() === \"outlined\"',\n '[class.coar-card--success]': 'variant() === \"success\"',\n '[class.coar-card--warning]': 'variant() === \"warning\"',\n '[class.coar-card--error]': 'variant() === \"error\"',\n '[class.coar-card--info]': 'variant() === \"info\"',\n '[class.coar-card--accent]': 'variant() === \"accent\"',\n // Padding\n '[class.coar-card--padding-none]': 'padding() === \"none\"',\n '[class.coar-card--padding-s]': 'padding() === \"s\"',\n '[class.coar-card--padding-m]': 'padding() === \"m\"',\n '[class.coar-card--padding-l]': 'padding() === \"l\"',\n },\n})\nexport class CoarCardComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-card elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the card, leaving only background color.\n * By default (false), cards have a visible border matching their variant.\n * Use as boolean attribute: `<coar-card borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Card semantic variant */\n variant = input<CardVariant>('neutral');\n\n /** Card padding size */\n padding = input<CardPadding>('m');\n}\n","<ng-content select=\"[coar-card-header]\" />\n<ng-content />\n<ng-content select=\"[coar-card-footer]\" />\n<ng-content select=\"[coar-card-inset]\" />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type NoteVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type NotePadding = 's' | 'm' | 'l';\n\n/**\n * A callout/note component for highlighting information.\n *\n * Features a colored left border and subtle background.\n * Use for tips, warnings, important information, or behavioral notes.\n *\n * @example\n * ```html\n * <coar-note variant=\"info\">\n * <strong>Note:</strong> This is important information.\n * </coar-note>\n *\n * <coar-note variant=\"warning\" padding=\"l\">\n * <h4>Warning</h4>\n * <p>Be careful with this action.</p>\n * </coar-note>\n * ```\n */\n@Component({\n selector: 'coar-note',\n standalone: true,\n imports: [],\n templateUrl: './coar-note.component.html',\n styleUrls: ['./coar-note.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-note]': 'true',\n // Variants\n '[class.coar-note--neutral]': 'variant() === \"neutral\"',\n '[class.coar-note--success]': 'variant() === \"success\"',\n '[class.coar-note--warning]': 'variant() === \"warning\"',\n '[class.coar-note--error]': 'variant() === \"error\"',\n '[class.coar-note--info]': 'variant() === \"info\"',\n '[class.coar-note--accent]': 'variant() === \"accent\"',\n // Padding\n '[class.coar-note--padding-s]': 'padding() === \"s\"',\n '[class.coar-note--padding-m]': 'padding() === \"m\"',\n '[class.coar-note--padding-l]': 'padding() === \"l\"',\n },\n})\nexport class CoarNoteComponent {\n /**\n * Note semantic variant.\n * Determines the left border color and background tint.\n * @default 'neutral'\n */\n variant = input<NoteVariant>('neutral');\n\n /**\n * Note padding size.\n * @default 'm'\n */\n padding = input<NotePadding>('m');\n}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Content alignment options for the divider.\n * - 'center': Content is centered with lines on both sides (default)\n * - 'left': Content is aligned left with line on the right\n * - 'right': Content is aligned right with line on the left\n */\nexport type DividerAlign = 'left' | 'center' | 'right';\n\n/**\n * Visual style variants for the divider line.\n * - 'subtle': Light, unobtrusive divider (default)\n * - 'strong': More prominent divider\n */\nexport type DividerVariant = 'subtle' | 'strong';\n\n/**\n * A flexible divider component for visually separating content sections.\n *\n * Supports optional content (text, icons, etc.) via ng-content that can be\n * aligned left, center, or right. When content is present, the divider line\n * splits around it.\n *\n * @example\n * <!-- Simple divider -->\n * <coar-divider />\n *\n * @example\n * <!-- Divider with centered text -->\n * <coar-divider>OR</coar-divider>\n *\n * @example\n * <!-- Divider with left-aligned content -->\n * <coar-divider align=\"left\">Section Title</coar-divider>\n */\n@Component({\n selector: 'coar-divider',\n standalone: true,\n templateUrl: './coar-divider.component.html',\n styleUrl: './coar-divider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': '\"horizontal\"',\n '[class.coar-divider]': 'true',\n '[class.coar-divider--subtle]': 'variant() === \"subtle\"',\n '[class.coar-divider--strong]': 'variant() === \"strong\"',\n '[class.coar-divider--left]': 'align() === \"left\"',\n '[class.coar-divider--center]': 'align() === \"center\"',\n '[class.coar-divider--right]': 'align() === \"right\"',\n },\n})\nexport class CoarDividerComponent {\n /** Content alignment when ng-content is provided */\n align = input<DividerAlign>('center');\n\n /** Visual style variant */\n variant = input<DividerVariant>('subtle');\n\n /** Width of the divider as a percentage (0-100) */\n width = input<number>(90);\n\n /** Spacing above the divider in pixels */\n spacingTop = input<number>(0);\n\n /** Spacing below the divider in pixels */\n spacingBottom = input<number>(0);\n}\n","<div class=\"coar-divider__container\" [style.width.%]=\"width()\" [style.margin-top.px]=\"spacingTop()\" [style.margin-bottom.px]=\"spacingBottom()\">\n <div class=\"coar-divider__line coar-divider__line--before\"></div>\n <div class=\"coar-divider__content\">\n <ng-content />\n </div>\n <div class=\"coar-divider__line coar-divider__line--after\"></div>\n</div>\n","import { Component, input, ChangeDetectionStrategy, booleanAttribute } from '@angular/core';\n\nexport type CoarTableVariant = 'default' | 'plain' | 'bordered';\n\n/**\n * A simple table component that provides consistent styling.\n *\n * Default styling uses alternating row colors (zebra stripes) for readability.\n * Use 'plain' variant for no stripes, or 'bordered' for full cell borders.\n *\n * Usage:\n * ```html\n * <coar-table>\n * <thead>\n * <tr>\n * <th>Property</th>\n * <th>Type</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td><code>name</code></td>\n * <td><code>string</code></td>\n * </tr>\n * </tbody>\n * </coar-table>\n * ```\n */\n@Component({\n selector: 'coar-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"coar-table-wrapper\">\n <table class=\"coar-table\">\n <ng-content />\n </table>\n </div>\n `,\n styleUrl: './coar-table.component.css',\n host: {\n '[class.coar-table--plain]': 'variant() === \"plain\"',\n '[class.coar-table--bordered]': 'variant() === \"bordered\"',\n '[class.coar-table--compact]': 'compact()',\n '[class.coar-table--hover]': 'hover()',\n },\n})\nexport class CoarTableComponent {\n /** Visual variant of the table: default (zebra stripes), plain (no stripes), bordered (cell borders) */\n variant = input<CoarTableVariant>('default');\n\n /** Whether to use compact padding */\n compact = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether rows should highlight on hover */\n hover = input<boolean, unknown>(true, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Available sizes for the label component.\n * Matches the component size system used by buttons and inputs.\n */\nexport type CoarLabelSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Standalone label component for consistent form labeling across the design system.\n *\n * @example\n * ```html\n * <coar-label size=\"s\" [required]=\"true\">Email Address</coar-label>\n * <coar-text-input size=\"s\" placeholder=\"your@email.com\" />\n * ```\n */\n@Component({\n selector: 'coar-label',\n standalone: true,\n template: `\n @if (text()) {\n {{ text() }}\n } @else {\n <ng-content></ng-content>\n } @if (required()) {\n <span class=\"coar-label-required\" aria-hidden=\"true\">*</span>\n }\n `,\n styleUrl: './coar-label.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-label--xs]': 'size() === \"xs\"',\n '[class.coar-label--s]': 'size() === \"s\"',\n '[class.coar-label--m]': 'size() === \"m\"',\n '[class.coar-label--l]': 'size() === \"l\"',\n '[attr.for]': 'for() ?? null',\n },\n})\nexport class CoarLabelComponent {\n /**\n * Size of the label. Should match the size of the associated input/form element.\n * @default 'm'\n */\n readonly size = input<CoarLabelSize>('m');\n\n /**\n * Whether to show a required indicator (*) after the label text.\n * @default false\n */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The ID of the form element this label is associated with.\n * Sets the 'for' attribute for accessibility.\n */\n readonly for = input<string | undefined>(undefined);\n\n readonly text = input<string>('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n booleanAttribute,\n} from '@angular/core';\n\nexport type AvatarSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';\nexport type AvatarShape = 'circle' | 'square';\n\n/**\n * Avatar component for displaying user profile images with fallback to initials.\n *\n * @example\n * ```html\n * <!-- With image -->\n * <coar-avatar [src]=\"user.avatarUrl\" [name]=\"user.fullName\" />\n *\n * <!-- Initials fallback (no image) -->\n * <coar-avatar [name]=\"user.fullName\" />\n *\n * <!-- With status indicator -->\n * <coar-avatar [name]=\"user.fullName\">\n * <coar-badge dot variant=\"success\" />\n * </coar-avatar>\n * ```\n */\n@Component({\n selector: 'coar-avatar',\n standalone: true,\n imports: [],\n templateUrl: './coar-avatar.component.html',\n styleUrl: './coar-avatar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-avatar--xs]': 'size() === \"xs\"',\n '[class.coar-avatar--s]': 'size() === \"s\"',\n '[class.coar-avatar--m]': 'size() === \"m\"',\n '[class.coar-avatar--l]': 'size() === \"l\"',\n '[class.coar-avatar--xl]': 'size() === \"xl\"',\n '[class.coar-avatar--xxl]': 'size() === \"xxl\"',\n '[class.coar-avatar--square]': 'shape() === \"square\"',\n '[class.coar-avatar--clickable]': 'clickable()',\n '[attr.role]': 'clickable() ? \"button\" : null',\n '[attr.tabindex]': 'clickable() ? 0 : null',\n },\n})\nexport class CoarAvatarComponent {\n /** Image URL for the avatar */\n src = input<string>('');\n\n /** User's full name (used for initials fallback and alt text) */\n name = input<string>('');\n\n /** Avatar size */\n size = input<AvatarSize>('m');\n\n /** Avatar shape */\n shape = input<AvatarShape>('circle');\n\n /** Whether the avatar is interactive (clickable) */\n clickable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Custom initials override (otherwise computed from name) */\n initials = input<string>('');\n\n /** Background color for initials (auto-generated from name if not set) */\n bgColor = input<string>('');\n\n /** Whether the image failed to load */\n protected imageError = signal(false);\n\n /** Show initials when no image or image failed */\n protected showInitials = computed(() => {\n return !this.src() || this.imageError();\n });\n\n /** Computed initials from name (max 3 characters) */\n protected displayInitials = computed(() => {\n const customInitials = this.initials();\n if (customInitials) return customInitials.slice(0, 3).toUpperCase();\n\n const name = this.name().trim();\n if (!name) return '?';\n\n // Simply take first 3 characters\n return name.slice(0, 3).toUpperCase();\n });\n\n /** Generate consistent background color from name */\n protected computedBgColor = computed(() => {\n const customBg = this.bgColor();\n if (customBg) return customBg;\n\n const name = this.name();\n if (!name) return 'var(--coar-background-neutral-tertiary)';\n\n // Generate a consistent hue from the name\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const hue = Math.abs(hash % 360);\n return `hsl(${hue}, 45%, 65%)`;\n });\n\n /** Handle image load error */\n protected onImageError(): void {\n this.imageError.set(true);\n }\n\n /** Handle image load success */\n protected onImageLoad(): void {\n this.imageError.set(false);\n }\n}\n","<div class=\"coar-avatar\">\n @if (showInitials()) {\n <span class=\"coar-avatar__initials\" [style.background-color]=\"computedBgColor()\" [attr.aria-label]=\"name() || 'Avatar'\">\n {{ displayInitials() }}\n </span>\n } @else {\n <img class=\"coar-avatar__image\" [src]=\"src()\" [alt]=\"name() || 'Avatar'\" (error)=\"onImageError()\" (load)=\"onImageLoad()\" />\n }\n\n <!-- Status indicator slot (for badge) -->\n <div class=\"coar-avatar__status\">\n <ng-content />\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe that extracts initials from a name string.\n *\n * Takes the first character of each word and concatenates them.\n * Useful with CoarAvatarComponent to display initials instead of raw text.\n *\n * @example\n * ```html\n * <!-- Single name: \"A\" -->\n * {{ 'Alice' | coarInitials }}\n *\n * <!-- Two names: \"AJ\" -->\n * {{ 'Alice Johnson' | coarInitials }}\n *\n * <!-- Three names: \"AJD\" -->\n * {{ 'Alice Jane Doe' | coarInitials }}\n *\n * <!-- With avatar -->\n * <coar-avatar [name]=\"'Alice Johnson' | coarInitials\" />\n * ```\n */\n@Pipe({\n name: 'coarInitials',\n standalone: true,\n})\nexport class CoarInitialsPipe implements PipeTransform {\n /**\n * Extract initials from a name.\n * @param value - The name string to extract initials from\n * @param maxLength - Maximum number of initials to return (default: 3)\n * @returns Uppercase initials string\n */\n transform(value: string | null | undefined, maxLength = 3): string {\n if (!value) return '';\n\n const parts = value.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '';\n\n const initials = parts\n .map((part) => part[0])\n .slice(0, maxLength)\n .join('');\n\n return initials.toUpperCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n afterNextRender,\n computed,\n input,\n signal,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarButtonComponent } from '../button/coar-button.component';\nimport Prism from 'prismjs';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-scss';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-markup';\n\nexport type CodeBlockVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\n\n@Component({\n selector: 'coar-code-block',\n standalone: true,\n imports: [CoarButtonComponent],\n templateUrl: './coar-code-block.component.html',\n styleUrl: './coar-code-block.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-code-block--elevated]': 'elevated()',\n '[class.coar-code-block--neutral]': 'variant() === \"neutral\"',\n '[class.coar-code-block--success]': 'variant() === \"success\"',\n '[class.coar-code-block--warning]': 'variant() === \"warning\"',\n '[class.coar-code-block--error]': 'variant() === \"error\"',\n '[class.coar-code-block--info]': 'variant() === \"info\"',\n '[class.coar-code-block--accent]': 'variant() === \"accent\"',\n },\n})\nexport class CoarCodeBlockComponent {\n private readonly injector = inject(Injector);\n /** The code to display */\n code = input.required<string>();\n\n /** Language for syntax highlighting */\n language = input<string>('html');\n\n /** Title/label for the code block */\n title = input<string>('');\n\n /** Whether the code block can be collapsed */\n collapsible = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether the code block starts collapsed */\n collapsed = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show the copy button */\n showCopy = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to hide the border and border-radius */\n borderless = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Adds a box-shadow for elevation/depth */\n elevated = input(false, { transform: booleanAttribute });\n\n /** Whether to show line numbers */\n showLineNumbers = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Semantic variant for the header area */\n variant = input<CodeBlockVariant>('neutral');\n\n /** Maximum height before scrolling (0 = no limit) */\n maxHeight = input<number>(0);\n\n /** Internal collapsed state */\n protected isCollapsed = signal(false);\n\n /** Copy feedback state */\n protected copyFeedback = signal<'idle' | 'copied' | 'error'>('idle');\n\n /** Highlighted code HTML */\n protected highlightedCode = computed(() => {\n const code = this.code();\n const lang = this.mapLanguage(this.language());\n\n const grammar = Prism.languages[lang];\n if (grammar) {\n return Prism.highlight(code, grammar, lang);\n }\n return this.escapeHtml(code);\n });\n\n /** Highlighted code split by line for optional line-number rendering */\n protected highlightedLines = computed(() => this.highlightedCode().split('\\n'));\n\n constructor() {\n // Signal inputs can be bound after construction; apply the initial collapsed state once\n // the component has been rendered.\n afterNextRender(\n () => {\n this.isCollapsed.set(this.collapsed());\n },\n { injector: this.injector }\n );\n }\n\n /** Map common language aliases to Prism language names */\n private mapLanguage(lang: string): string {\n const langMap: Record<string, string> = {\n html: 'markup',\n xml: 'markup',\n svg: 'markup',\n ts: 'typescript',\n js: 'javascript',\n sh: 'bash',\n shell: 'bash',\n };\n return langMap[lang.toLowerCase()] || lang.toLowerCase();\n }\n\n /** Escape HTML for plain text fallback */\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n /** Toggle collapsed state */\n toggleCollapsed(): void {\n if (this.collapsible()) {\n this.isCollapsed.set(!this.isCollapsed());\n }\n }\n\n /** Copy code to clipboard */\n async copyCode(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.code());\n this.copyFeedback.set('copied');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n } catch {\n this.copyFeedback.set('error');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n }\n }\n\n /** Get lines for line numbers */\n get lines(): number[] {\n return this.code()\n .split('\\n')\n .map((_, i) => i + 1);\n }\n}\n","<div class=\"coar-code-block\" [class.collapsed]=\"isCollapsed()\" [class.borderless]=\"borderless()\">\n <!-- Header -->\n <div class=\"coar-code-header\">\n <div class=\"coar-code-header-left\">\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"coar-code-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n aria-label=\"Toggle code visibility\"\n >\n <svg class=\"coar-code-chevron\" [class.rotated]=\"!isCollapsed()\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 4L10 8L6 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n } @if (title()) {\n <span class=\"coar-code-title\">{{ title() }}</span>\n } @else {\n <span class=\"coar-code-language\">{{ language() }}</span>\n }\n </div>\n\n <div class=\"coar-code-header-right\">\n @if (showCopy()) {\n <coar-button\n size=\"xs\"\n variant=\"secondary\"\n [iconStart]=\"copyFeedback() === 'copied' ? 'check' : 'copy'\"\n (clicked)=\"copyCode()\"\n [ariaLabel]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n [attr.aria-label]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n >\n {{ copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy' }}\n </coar-button>\n }\n </div>\n </div>\n\n <!-- Code Content -->\n @if (!isCollapsed()) {\n <div class=\"coar-code-content\" [style.max-height]=\"maxHeight() ? maxHeight() + 'px' : null\">\n @if (showLineNumbers()) {\n <pre class=\"coar-code-pre\" aria-label=\"Code\">\n <div class=\"coar-code-lines-grid\">\n @for (line of highlightedLines(); track $index) {\n <div class=\"coar-code-line\">\n <span class=\"coar-code-line-number\">{{ $index + 1 }}</span>\n <span class=\"coar-code-line-content\" [innerHTML]=\"line || '\\u200b'\"></span>\n </div>\n }\n </div>\n </pre>\n } @else {\n <pre class=\"coar-code-pre\"><code class=\"coar-code\" [innerHTML]=\"highlightedCode()\"></code></pre>\n }\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n booleanAttribute,\n} from '@angular/core';\n\nexport type CoarProgressBarVariant = 'accent' | 'success' | 'warning' | 'error';\nexport type CoarProgressBarSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-progress-bar',\n standalone: true,\n imports: [],\n templateUrl: './coar-progress-bar.component.html',\n styleUrl: './coar-progress-bar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'progressbar',\n '[class.coar-progress-bar--s]': 'size() === \"s\"',\n '[class.coar-progress-bar--m]': 'size() === \"m\"',\n '[class.coar-progress-bar--l]': 'size() === \"l\"',\n '[class.coar-progress-bar--accent]': 'variant() === \"accent\"',\n '[class.coar-progress-bar--success]': 'variant() === \"success\"',\n '[class.coar-progress-bar--warning]': 'variant() === \"warning\"',\n '[class.coar-progress-bar--error]': 'variant() === \"error\"',\n '[class.coar-progress-bar--indeterminate]': 'indeterminate()',\n '[attr.aria-valuenow]': 'indeterminate() ? null : percentage()',\n '[attr.aria-valuemin]': '\"0\"',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-label]': 'label() || null',\n },\n})\nexport class CoarProgressBarComponent {\n /** Current progress value (0 to max) */\n value = input<number>(0);\n\n /** Maximum progress value */\n max = input<number>(100);\n\n /** Visual variant */\n variant = input<CoarProgressBarVariant>('accent');\n\n /** Bar height size */\n size = input<CoarProgressBarSize>('m');\n\n /** Whether to show an indeterminate animation */\n indeterminate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Accessible label for the progress bar */\n label = input<string>('');\n\n /** Whether to display the percentage text */\n showValue = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Computed percentage clamped to 0-100 */\n protected percentage = computed(() => {\n const max = this.max();\n if (max <= 0) return 0;\n return Math.round(Math.min(100, Math.max(0, (this.value() / max) * 100)));\n });\n}\n","<div class=\"coar-progress-bar-container\">\n <div\n class=\"coar-progress-bar-fill\"\n [style.width.%]=\"indeterminate() ? 100 : percentage()\"\n ></div>\n</div>\n@if (showValue() && !indeterminate()) {\n <span class=\"coar-progress-bar-value\">{{ percentage() }}%</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\nexport type CoarSpinnerSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-spinner',\n standalone: true,\n imports: [],\n templateUrl: './coar-spinner.component.html',\n styleUrl: './coar-spinner.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[class.coar-spinner--xs]': 'size() === \"xs\"',\n '[class.coar-spinner--s]': 'size() === \"s\"',\n '[class.coar-spinner--m]': 'size() === \"m\"',\n '[class.coar-spinner--l]': 'size() === \"l\"',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class CoarSpinnerComponent {\n /** Spinner size */\n size = input<CoarSpinnerSize>('m');\n\n /** Accessible label */\n label = input<string>('Loading');\n}\n","<svg\n class=\"coar-spinner-svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <!-- Background arc -->\n <circle\n class=\"coar-spinner-bg\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke-width=\"3\"\n />\n <!-- Spinning arc -->\n <circle\n class=\"coar-spinner-arc\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n</svg>\n","// Display/presentation components\nexport * from './button';\nexport * from './badge';\nexport * from './tag';\nexport * from './card';\nexport * from './note';\nexport * from './divider';\nexport * from './table';\nexport * from './label';\nexport * from './icon';\nexport * from './avatar';\nexport * from './code-block';\nexport * from './scrollbar';\nexport * from './progress-bar';\nexport * from './spinner';\n// Link is CSS-only (no Angular component) — import via @import '@cocoar/ui/styles/link/coar-link.css'\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n TemplateRef,\n Type,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Loading strategy for tab content:\n * - 'lazy': Content is only rendered when tab is active (default)\n * - 'eager': Content is always rendered, hidden when inactive\n */\nexport type TabLoadingStrategy = 'eager' | 'lazy';\n\n/**\n * Content type that can be passed to a tab.\n * Either a TemplateRef (from ng-template) or a Component class.\n */\nexport type TabContent = TemplateRef<unknown> | Type<unknown>;\n\n/**\n * Individual tab definition for use within CoarTabGroup.\n *\n * The tab label is provided as content projected into the component.\n * This allows simple text, icons, badges, or any custom HTML.\n *\n * @example Simple text label\n * ```html\n * <coar-tab id=\"home\" [content]=\"homeTemplate\">Home</coar-tab>\n * ```\n *\n * @example With icon\n * ```html\n * <coar-tab id=\"settings\" [content]=\"SettingsComponent\">⚙️ Settings</coar-tab>\n * ```\n *\n * @example Rich label with badge\n * ```html\n * <coar-tab id=\"messages\" [content]=\"messagesTemplate\">\n * Messages <span class=\"badge\">5</span>\n * </coar-tab>\n * ```\n */\n@Component({\n selector: 'coar-tab',\n standalone: true,\n template: `<ng-template #labelContent><ng-content /></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabComponent {\n /** Unique identifier for the tab */\n id = input.required<string>();\n\n /** Whether the tab is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The content to display in the tab panel.\n * Can be either a TemplateRef (from ng-template) or a Component class.\n */\n content = input.required<TabContent>();\n\n /**\n * Inputs to pass when content is a Component.\n * Ignored when content is a TemplateRef.\n */\n contentInputs = input<Record<string, unknown>>({});\n\n /**\n * Loading strategy for the tab content.\n * - 'lazy' (default): Content is only rendered when tab becomes active\n * - 'eager': Content is always rendered, just hidden when inactive\n */\n loadingStrategy = input<TabLoadingStrategy>('lazy');\n\n /** Template reference for the projected label content */\n labelTemplate = viewChild.required<TemplateRef<unknown>>('labelContent');\n\n /**\n * Whether the content is a Component (vs a TemplateRef)\n */\n get isComponent(): boolean {\n const c = this.content();\n return typeof c === 'function';\n }\n\n /**\n * Get content as TemplateRef (returns null if it's a component)\n */\n get templateContent(): TemplateRef<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? null : c;\n }\n\n /**\n * Get content as Component type (returns null if it's a template)\n */\n get componentContent(): Type<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? c : null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n input,\n output,\n signal,\n effect,\n AfterContentInit,\n} from '@angular/core';\nimport { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { CoarTabComponent } from './coar-tab.component';\n\n@Component({\n selector: 'coar-tab-group',\n standalone: true,\n imports: [CommonModule, NgComponentOutlet],\n templateUrl: './coar-tab-group.component.html',\n styleUrl: './coar-tab-group.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabGroupComponent implements AfterContentInit {\n /** The currently active tab id */\n activeTab = input<string>('');\n\n /** Emits when the active tab changes */\n activeTabChange = output<string>();\n\n /** All tab components projected into this group */\n tabs = contentChildren(CoarTabComponent);\n\n /** Internal active tab state */\n protected internalActiveTab = signal<string>('');\n\n constructor() {\n effect(() => {\n const externalTab = this.activeTab();\n if (externalTab) {\n this.internalActiveTab.set(externalTab);\n }\n });\n }\n\n ngAfterContentInit(): void {\n if (!this.internalActiveTab() && this.tabs().length > 0) {\n const firstTabId = this.tabs()[0].id();\n this.internalActiveTab.set(firstTabId);\n }\n }\n\n /** Check if a tab is currently active */\n isActive(tabId: string): boolean {\n const activeId = this.internalActiveTab();\n if (activeId) {\n return activeId === tabId;\n }\n return this.tabs()[0]?.id() === tabId;\n }\n\n /**\n * Determines whether the content of a tab should be rendered.\n * - For 'eager' strategy: always render (content stays in DOM)\n * - For 'lazy' strategy: only render when active\n */\n shouldRenderContent(tab: CoarTabComponent): boolean {\n if (tab.loadingStrategy() === 'eager') {\n return true;\n }\n // Default is lazy: only render when active\n return this.isActive(tab.id());\n }\n\n /** Select a tab by its id */\n selectTab(tabId: string): void {\n const tab = this.tabs().find((t) => t.id() === tabId);\n if (tab && !tab.disabled()) {\n this.internalActiveTab.set(tabId);\n this.activeTabChange.emit(tabId);\n }\n }\n\n /** Handle keyboard navigation */\n onKeydown(event: KeyboardEvent, currentTabId: string): void {\n const tabsArray = this.tabs().filter((t) => !t.disabled());\n const currentIndex = tabsArray.findIndex((t) => t.id() === currentTabId);\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabsArray.length - 1;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newIndex = currentIndex < tabsArray.length - 1 ? currentIndex + 1 : 0;\n event.preventDefault();\n break;\n case 'Home':\n newIndex = 0;\n event.preventDefault();\n break;\n case 'End':\n newIndex = tabsArray.length - 1;\n event.preventDefault();\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n const newTab = tabsArray[newIndex];\n this.selectTab(newTab.id());\n const tabButton = document.querySelector(`[data-tab-id=\"${newTab.id()}\"]`) as HTMLElement;\n tabButton?.focus();\n }\n }\n}\n","<div class=\"coar-tab-group\">\n <div class=\"coar-tab-list\" role=\"tablist\">\n @for (tab of tabs(); track tab.id()) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"coar-tab-button\"\n [class.active]=\"isActive(tab.id())\"\n [class.disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"isActive(tab.id())\"\n [attr.aria-controls]=\"'panel-' + tab.id()\"\n [attr.id]=\"tab.id()\"\n [attr.data-tab-id]=\"tab.id()\"\n [attr.tabindex]=\"isActive(tab.id()) ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"selectTab(tab.id())\"\n (keydown)=\"onKeydown($event, tab.id())\"\n >\n <span class=\"coar-tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()\" />\n </span>\n </button>\n }\n </div>\n\n <div class=\"coar-tab-content\">\n @for (tab of tabs(); track tab.id()) {\n <div\n role=\"tabpanel\"\n class=\"coar-tab-panel\"\n [class.active]=\"isActive(tab.id())\"\n [attr.id]=\"'panel-' + tab.id()\"\n [attr.aria-labelledby]=\"tab.id()\"\n [hidden]=\"!isActive(tab.id())\"\n >\n @if (shouldRenderContent(tab)) {\n <!-- Component content -->\n @if (tab.isComponent) {\n <ng-container *ngComponentOutlet=\"$any(tab.componentContent); inputs: tab.contentInputs()\" />\n }\n <!-- Template content -->\n @else if (tab.templateContent) {\n <ng-container [ngTemplateOutlet]=\"tab.templateContent\" />\n } }\n </div>\n }\n </div>\n</div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\n\n/**\n * CoarSidebar: A three-part layout component for navigation sidebars.\n *\n * Provides three distinct slots via content projection:\n * - **Header** (`[coar-sidebar-header]`): Fixed at top, for logo/title/branding\n * - **Content** (default slot): Scrollable area for navigation menu or other content\n * - **Footer** (`[coar-sidebar-footer]`): Fixed at bottom, for actions/settings/user info\n *\n * Responsibilities:\n * - Provide consistent sidebar layout structure\n * - Apply design tokens for width, spacing, colors\n * - Handle scrolling behavior (only content area scrolls)\n * - Support left/right positioning\n *\n * @example\n * ```html\n * <coar-sidebar>\n * <div coar-sidebar-header>\n * <h2>Navigation</h2>\n * </div>\n *\n * <coar-menu borderless>\n * <coar-menu-item routerLink=\"/home\" routerLinkActive=\"active\">Home</coar-menu-item>\n * <coar-menu-item routerLink=\"/about\" routerLinkActive=\"active\">About</coar-menu-item>\n * </coar-menu>\n *\n * <div coar-sidebar-footer>\n * <button>Settings</button>\n * </div>\n * </coar-sidebar>\n * ```\n */\n@Component({\n selector: 'coar-sidebar',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-sidebar.component.html',\n styleUrl: './coar-sidebar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-sidebar',\n '[class.coar-sidebar--collapsed]': 'collapsed()',\n '[class.coar-sidebar--position-right]': 'position() === \"right\"',\n },\n})\nexport class CoarSidebarComponent {\n /**\n * Sidebar position: left or right side of screen.\n * Default is 'left'.\n */\n readonly position = input<'left' | 'right'>('left');\n\n /**\n * Collapsed state for narrow/icon-only sidebar.\n * Use as boolean attribute: `<coar-sidebar collapsed>` or `[collapsed]=\"true\"`\n */\n readonly collapsed = input(false, { transform: booleanAttribute });\n}\n","<div class=\"coar-sidebar__header\">\n <ng-content select=\"[coar-sidebar-header]\" />\n</div>\n\n<div class=\"coar-sidebar__content\" coarScrollbar [overflowX]=\"'hidden'\" [defer]=\"false\">\n <ng-content />\n</div>\n\n<div class=\"coar-sidebar__footer\">\n <ng-content select=\"[coar-sidebar-footer]\" />\n</div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'coar-breadcrumb-item',\n standalone: true,\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-breadcrumb-item',\n '[class.coar-breadcrumb-item--active]': 'active()',\n '[attr.aria-current]': 'active() ? \"page\" : null',\n },\n})\nexport class CoarBreadcrumbItemComponent {\n readonly active = input<boolean, unknown>(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n ElementRef,\n input,\n} from '@angular/core';\nimport { CoarBreadcrumbItemComponent } from './coar-breadcrumb-item.component';\n\n@Component({\n selector: 'coar-breadcrumb',\n standalone: true,\n templateUrl: './coar-breadcrumb.component.html',\n styleUrl: './coar-breadcrumb.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-breadcrumb',\n },\n})\nexport class CoarBreadcrumbComponent {\n readonly separator = input<string>('/');\n readonly items = contentChildren(CoarBreadcrumbItemComponent, { read: ElementRef });\n\n constructor() {\n effect(() => {\n const sep = this.separator();\n const itemEls = this.items();\n itemEls.forEach((elRef) => {\n elRef.nativeElement.setAttribute('data-separator', sep);\n });\n });\n }\n}\n","<nav aria-label=\"Breadcrumb\">\n <ol class=\"coar-breadcrumb-list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\n\nexport type PaginationPageItem = { type: 'page'; page: number } | { type: 'ellipsis' };\n\n@Component({\n selector: 'coar-pagination',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-pagination.component.html',\n styleUrl: './coar-pagination.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-pagination',\n '[class.coar-pagination--disabled]': 'disabled()',\n },\n})\nexport class CoarPaginationComponent {\n readonly totalItems = input.required<number>();\n readonly pageSize = input<number>(10);\n readonly currentPage = model<number>(1);\n readonly maxVisiblePages = input<number>(5);\n readonly showFirstLast = input<boolean, unknown>(true, { transform: booleanAttribute });\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n readonly pageChanged = output<number>();\n\n readonly totalPages = computed(() => Math.max(1, Math.ceil(this.totalItems() / this.pageSize())));\n\n readonly canGoPrev = computed(() => this.currentPage() > 1);\n readonly canGoNext = computed(() => this.currentPage() < this.totalPages());\n\n readonly visiblePages = computed<PaginationPageItem[]>(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n const maxVisible = this.maxVisiblePages();\n\n if (total <= maxVisible) {\n return Array.from({ length: total }, (_, i) => ({ type: 'page' as const, page: i + 1 }));\n }\n\n const items: PaginationPageItem[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n let startPage = Math.max(2, current - halfVisible);\n let endPage = Math.min(total - 1, current + halfVisible);\n\n if (current <= halfVisible + 1) {\n endPage = Math.min(total - 1, maxVisible - 1);\n }\n if (current >= total - halfVisible) {\n startPage = Math.max(2, total - maxVisible + 2);\n }\n\n items.push({ type: 'page', page: 1 });\n\n if (startPage > 2) {\n items.push({ type: 'ellipsis' });\n }\n\n for (let i = startPage; i <= endPage; i++) {\n items.push({ type: 'page', page: i });\n }\n\n if (endPage < total - 1) {\n items.push({ type: 'ellipsis' });\n }\n\n if (total > 1) {\n items.push({ type: 'page', page: total });\n }\n\n return items;\n });\n\n goToPage(page: number): void {\n if (this.disabled() || page < 1 || page > this.totalPages() || page === this.currentPage()) {\n return;\n }\n this.currentPage.set(page);\n this.pageChanged.emit(page);\n }\n\n trackByItem(_index: number, item: PaginationPageItem): string {\n return item.type === 'page' ? `page-${item.page}` : `ellipsis-${_index}`;\n }\n}\n","<nav aria-label=\"Pagination\" class=\"coar-pagination-nav\">\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoPrev()\"\n [attr.aria-label]=\"'Go to first page'\"\n (click)=\"goToPage(1)\"\n >\n <coar-icon name=\"chevrons-left\" size=\"s\"></coar-icon>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoPrev()\"\n [attr.aria-label]=\"'Go to previous page'\"\n (click)=\"goToPage(currentPage() - 1)\"\n >\n <coar-icon name=\"chevron-left\" size=\"s\"></coar-icon>\n </button>\n\n @for (item of visiblePages(); track trackByItem($index, item)) {\n @if (item.type === 'ellipsis') {\n <span class=\"coar-pagination-ellipsis\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--page\"\n [class.coar-pagination-button--active]=\"item.page === currentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"item.page === currentPage() ? 'page' : null\"\n [attr.aria-label]=\"'Go to page ' + item.page\"\n (click)=\"goToPage(item.page)\"\n >\n {{ item.page }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoNext()\"\n [attr.aria-label]=\"'Go to next page'\"\n (click)=\"goToPage(currentPage() + 1)\"\n >\n <coar-icon name=\"chevron-right\" size=\"s\"></coar-icon>\n </button>\n\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoNext()\"\n [attr.aria-label]=\"'Go to last page'\"\n (click)=\"goToPage(totalPages())\"\n >\n <coar-icon name=\"chevrons-right\" size=\"s\"></coar-icon>\n </button>\n }\n</nav>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'coar-navbar',\n standalone: true,\n templateUrl: './coar-navbar.component.html',\n styleUrl: './coar-navbar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'banner',\n 'class': 'coar-navbar',\n '[class.coar-navbar--elevated]': 'elevated()',\n '[class.coar-navbar--bordered]': 'bordered()',\n },\n})\nexport class CoarNavbarComponent {\n readonly elevated = input<boolean, unknown>(true, { transform: booleanAttribute });\n readonly bordered = input<boolean, unknown>(false, { transform: booleanAttribute });\n}\n","<ng-content select=\"[coar-navbar-start]\"></ng-content>\n<div class=\"coar-navbar-spacer\"></div>\n<ng-content select=\"[coar-navbar-center]\"></ng-content>\n<div class=\"coar-navbar-spacer\"></div>\n<ng-content select=\"[coar-navbar-end]\"></ng-content>\n","// Navigation/container components\nexport * from './tabs';\nexport * from './sidebar';\nexport * from './breadcrumb';\nexport * from './pagination';\nexport * from './navbar';\n","import { Injectable } from '@angular/core';\n\ntype TooltipOpenReason = 'hover' | 'focus';\n\ninterface ActiveTooltip {\n id: string;\n closeImmediate: () => void;\n closeOnHoverLost: () => void;\n trigger: HTMLElement;\n reason: TooltipOpenReason;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CoarTooltipService {\n private active: ActiveTooltip | null = null;\n\n private trackingCleanup: (() => void) | null = null;\n\n requestOpen(\n id: string,\n closeImmediate: () => void,\n closeOnHoverLost: () => void,\n trigger: HTMLElement,\n reason: TooltipOpenReason\n ): void {\n const previous = this.active;\n\n if (previous && previous.id !== id) {\n previous.closeImmediate();\n }\n\n this.active = { id, closeImmediate, closeOnHoverLost, trigger, reason };\n\n if (reason === 'hover') {\n this.ensurePointerTracking();\n } else {\n this.stopPointerTracking();\n }\n }\n\n notifyClosed(id: string): void {\n if (this.active?.id !== id) return;\n this.active = null;\n this.stopPointerTracking();\n }\n\n private ensurePointerTracking(): void {\n if (this.trackingCleanup) return;\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n\n const capture = true;\n\n const closeIfHoverLost = (): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n this.active.closeImmediate();\n };\n\n const onPointerMove = (event: PointerEvent | MouseEvent): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n\n // Prefer hit-testing when available, but fall back to geometry checks for environments\n // that don't implement elementFromPoint (e.g. certain test runners).\n if (typeof document.elementFromPoint === 'function') {\n const el = document.elementFromPoint(event.clientX, event.clientY);\n if (el && this.active.trigger.contains(el)) return;\n this.active.closeOnHoverLost();\n return;\n }\n\n const rect = this.active.trigger.getBoundingClientRect();\n const withinX = event.clientX >= rect.left && event.clientX <= rect.right;\n const withinY = event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n if (withinX && withinY) return;\n this.active.closeOnHoverLost();\n };\n\n const onScroll = (): void => closeIfHoverLost();\n const onBlur = (): void => closeIfHoverLost();\n const onVisibilityChange = (): void => {\n if (document.hidden) {\n closeIfHoverLost();\n }\n };\n\n document.addEventListener('pointermove', onPointerMove, { capture, passive: true });\n window.addEventListener('scroll', onScroll, { capture, passive: true });\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n this.trackingCleanup = () => {\n document.removeEventListener('pointermove', onPointerMove, capture);\n window.removeEventListener('scroll', onScroll, capture);\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n this.trackingCleanup = null;\n };\n }\n\n private stopPointerTracking(): void {\n this.trackingCleanup?.();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Injector,\n TemplateRef,\n Type,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CoarTooltipOverlayContent = string | TemplateRef<unknown> | Type<unknown>;\n\n@Component({\n selector: 'coar-tooltip-overlay',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './coar-tooltip-overlay.component.html',\n styleUrl: './coar-tooltip-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTooltipOverlayComponent {\n readonly tooltipId = input<string>('');\n\n readonly content = input<CoarTooltipOverlayContent | null>(null);\n\n /** Context passed to template content via ngTemplateOutletContext. */\n readonly context = input<object | null>(null);\n\n /** Injector for dynamic component content via NgComponentOutlet. */\n readonly contentInjector = input<Injector | null>(null);\n\n @HostBinding('attr.id')\n protected get hostId(): string | null {\n return this.tooltipId() ? this.tooltipId() : null;\n }\n\n @HostBinding('attr.role')\n protected readonly role = 'tooltip';\n\n protected readonly kind = computed<'text' | 'template' | 'component' | 'none'>(() => {\n const value = this.content();\n if (value == null) return 'none';\n if (typeof value === 'string') return 'text';\n if (value instanceof TemplateRef) return 'template';\n return 'component';\n });\n\n protected readonly text = computed(() => {\n const value = this.content();\n return typeof value === 'string' ? value : '';\n });\n\n protected readonly templateRef = computed(() => {\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n protected readonly componentType = computed<Type<unknown> | null>(() => {\n const value = this.content();\n if (value == null) return null;\n if (typeof value === 'string') return null;\n if (value instanceof TemplateRef) return null;\n return value as Type<unknown>;\n });\n}\n","@if (kind() === 'text') {\n <span class=\"coar-tooltip-text\">{{ text() }}</span>\n} @else if (kind() === 'template') {\n <ng-container\n [ngTemplateOutlet]=\"templateRef()\"\n [ngTemplateOutletContext]=\"context() ?? {}\"\n />\n} @else if (kind() === 'component') {\n <ng-container\n *ngComponentOutlet=\"componentType(); injector: (contentInjector() ?? undefined)\"\n />\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\n\nimport { createOverlayBuilder, type OverlayRef, type Placement } from '@cocoar/ui/overlay';\n\nimport { CoarTooltipService } from './coar-tooltip.service';\nimport {\n CoarTooltipOverlayComponent,\n type CoarTooltipOverlayContent,\n} from './coar-tooltip-overlay.component';\n\n/** Tooltip placement preference - all 12 standard placements plus 'auto' for best-fit */\ntype TooltipPlacement =\n | 'auto'\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end';\n\n@Directive({\n selector: '[coarTooltip]',\n exportAs: 'coarTooltip',\n standalone: true,\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class CoarTooltipDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly tooltipService = inject(CoarTooltipService);\n\n /** Tooltip content (string, TemplateRef, or Component type). */\n readonly coarTooltip = input<CoarTooltipOverlayContent | null>(null);\n\n /** Optional context for TemplateRef tooltips. */\n readonly coarTooltipContext = input<object | null>(null);\n\n /** Disable tooltip behavior. */\n readonly coarTooltipDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placement preference. Default: 'top'. Use 'auto' for best-fit. */\n readonly coarTooltipPlacement = input<TooltipPlacement>('top');\n\n /** Delay (ms) before opening on hover/focus. Default: 0 */\n readonly coarTooltipOpenDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Delay (ms) before closing on leave/blur. Default: 0 */\n readonly coarTooltipCloseDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Whether the tooltip should be clamped into the viewport. Default: true */\n readonly coarTooltipClampToViewport = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /** When placement is explicit (not auto), fall back to best-fit when it doesn't fit. Default: false */\n readonly coarTooltipFallbackToBestFit = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n private readonly tooltipId = `coar-tooltip-${cryptoRandomId()}`;\n\n private overlayRef: OverlayRef | null = null;\n private readonly overlayBuilder = createOverlayBuilder();\n\n private openTimerId: number | null = null;\n private closeTimerId: number | null = null;\n\n private openReason: 'hover' | 'focus' | null = null;\n\n private readonly hasContent = computed(() => {\n const value = this.coarTooltip();\n return value != null && value !== '';\n });\n\n constructor() {\n effect(() => {\n if (this.coarTooltipDisabled()) {\n this.close(true);\n }\n\n // Track these inputs so updates are observed; if an overlay is open,\n // we re-open to apply content/config changes predictably.\n this.coarTooltip();\n this.coarTooltipContext();\n this.coarTooltipPlacement();\n this.coarTooltipClampToViewport();\n this.coarTooltipFallbackToBestFit();\n\n const currentOpenReason = this.openReason;\n const hasOpenOverlay = this.overlayRef != null;\n\n // When the tooltip is open and config changes, re-open to apply changes.\n // Overlays do not support updating spec/content in-place.\n if (!this.coarTooltipDisabled() && hasOpenOverlay && currentOpenReason && this.hasContent()) {\n this.close(true);\n Promise.resolve().then(() => this.openInternal(currentOpenReason));\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearTimers();\n this.close(true);\n });\n }\n\n private clearTimers(): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n }\n\n private openInternal(reason: 'hover' | 'focus'): void {\n if (this.coarTooltipDisabled()) return;\n if (!this.hasContent()) return;\n\n const trigger = this.elementRef.nativeElement;\n\n // Ensure only one tooltip at a time across the app.\n this.tooltipService.requestOpen(\n this.tooltipId,\n () => this.close(true),\n () => this.scheduleClose('hover'),\n trigger,\n reason\n );\n\n this.openReason = reason;\n\n if (this.overlayRef) {\n this.overlayRef.updatePosition();\n trigger.setAttribute('aria-describedby', this.tooltipId);\n return;\n }\n\n const content = this.coarTooltip();\n if (!content) return;\n\n const position = this.resolveOverlayPosition();\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position(position)\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: false, escapeKey: true })\n .size({ mode: 'content' })\n .a11y({ role: 'tooltip' })\n .fromComponent(CoarTooltipOverlayComponent)\n .open({\n tooltipId: this.tooltipId,\n content,\n context: this.coarTooltipContext(),\n contentInjector: this.injector,\n });\n\n this.overlayRef = ref;\n\n trigger.setAttribute('aria-describedby', this.tooltipId);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.openReason = null;\n trigger.removeAttribute('aria-describedby');\n this.tooltipService.notifyClosed(this.tooltipId);\n });\n }\n\n private resolveOverlayPosition(): {\n placement: Placement | readonly Placement[];\n offset: number;\n flip: boolean;\n shift: boolean;\n } {\n const preference = this.coarTooltipPlacement();\n const clampToViewport = this.coarTooltipClampToViewport();\n const fallbackToBestFit = this.coarTooltipFallbackToBestFit();\n\n if (preference === 'auto') {\n return {\n placement: ['top', 'bottom', 'left', 'right'] as const,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n const requested = toOverlayPlacement(preference);\n\n if (fallbackToBestFit) {\n const candidates = ['top', 'bottom', 'left', 'right'] as const;\n const rest = candidates.filter((p) => p !== requested);\n\n return {\n placement: [requested, ...rest],\n offset: 6,\n flip: true,\n shift: clampToViewport,\n };\n }\n\n return {\n placement: requested,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n private scheduleOpen(reason: 'hover' | 'focus'): void {\n this.clearTimers();\n\n const delay = Math.max(0, Number(this.coarTooltipOpenDelay()) || 0);\n if (delay === 0) {\n this.openInternal(reason);\n return;\n }\n\n this.openTimerId = window.setTimeout(() => {\n this.openTimerId = null;\n this.openInternal(reason);\n }, delay);\n }\n\n private scheduleClose(reason: 'hover' | 'focus'): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n\n if (this.openReason !== reason) return;\n\n const delay = Math.max(0, Number(this.coarTooltipCloseDelay()) || 0);\n if (delay === 0) {\n this.close(true);\n return;\n }\n\n if (this.closeTimerId != null) return;\n\n this.closeTimerId = window.setTimeout(() => {\n this.closeTimerId = null;\n this.close(true);\n }, delay);\n }\n\n onMouseEnter(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('hover');\n }\n\n onMouseLeave(): void {\n this.scheduleClose('hover');\n }\n\n onFocusIn(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('focus');\n }\n\n onFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && this.elementRef.nativeElement.contains(nextTarget)) {\n return;\n }\n\n this.scheduleClose('focus');\n }\n\n close(immediate = false): void {\n if (immediate) {\n this.clearTimers();\n }\n\n this.openReason = null;\n\n const trigger = this.elementRef.nativeElement;\n trigger.removeAttribute('aria-describedby');\n\n const ref = this.overlayRef;\n if (!ref) return;\n\n this.overlayRef = null;\n ref.close();\n this.tooltipService.notifyClosed(this.tooltipId);\n }\n\n open(): void {\n const trigger = this.elementRef.nativeElement;\n const active = (\n typeof document !== 'undefined' ? document.activeElement : null\n ) as Element | null;\n const reason: 'hover' | 'focus' = active && trigger.contains(active) ? 'focus' : 'hover';\n this.clearTimers();\n this.openInternal(reason);\n }\n\n toggle(): void {\n if (this.overlayRef) {\n this.close(true);\n return;\n }\n this.open();\n }\n}\n\nfunction toOverlayPlacement(preference: Exclude<TooltipPlacement, 'auto'>): Placement {\n // Now that overlay supports all 12 placements, pass them through directly\n return preference as Placement;\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, filter } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\nimport { CoarButtonComponent } from '../../display/button/coar-button.component';\n\nexport type PopconfirmPlacement = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Popconfirm directive for confirming actions with a small anchored popover.\n *\n * Intercepts clicks on the host element, shows a confirmation popover,\n * and either proceeds with the action (confirm) or cancels.\n *\n * @example\n * ```html\n * <button coarPopconfirm=\"Delete this user?\" (onConfirm)=\"deleteUser()\">\n * Delete\n * </button>\n *\n * <button\n * [coarPopconfirm]=\"'Revoke all sessions?'\"\n * popconfirmTitle=\"Warning\"\n * confirmText=\"Revoke\"\n * confirmVariant=\"danger\"\n * (onConfirm)=\"revokeSessions()\"\n * >\n * Revoke\n * </button>\n * ```\n */\n@Directive({\n selector: '[coarPopconfirm]',\n standalone: true,\n})\nexport class CoarPopconfirmDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlayBuilder = createOverlayBuilder();\n\n private overlayRef: OverlayRef | null = null;\n\n /** Confirmation message to display */\n coarPopconfirm = input.required<string>();\n\n /** Optional title above the message */\n popconfirmTitle = input<string>('');\n\n /** Text for the confirm button */\n confirmText = input<string>('OK');\n\n /** Text for the cancel button */\n cancelText = input<string>('Cancel');\n\n /** Variant for confirm button */\n confirmVariant = input<'primary' | 'danger'>('primary');\n\n /** Placement relative to trigger element */\n placement = input<PopconfirmPlacement>('top');\n\n /** Whether popconfirm is disabled */\n popconfirmDisabled = input<boolean>(false);\n\n /** Emitted when user confirms */\n confirmed = output<void>();\n\n /** Emitted when user cancels */\n cancelled = output<void>();\n\n /** Whether the popconfirm is currently open */\n protected readonly isOpen = signal(false);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.close();\n });\n\n // Close on escape\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(() => this.isOpen()),\n filter((event) => event.key === 'Escape')\n )\n .subscribe(() => {\n this.cancel();\n });\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.popconfirmDisabled()) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open(): void {\n if (this.overlayRef) return;\n\n const trigger = this.elementRef.nativeElement;\n\n this.overlayRef = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position(this.getPlacementConfig())\n .backdrop({ kind: 'none' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .a11y({ role: 'dialog' })\n .fromComponent(CoarPopconfirmPanelComponent)\n .open({\n message: this.coarPopconfirm(),\n title: this.popconfirmTitle(),\n confirmText: this.confirmText(),\n cancelText: this.cancelText(),\n confirmVariant: this.confirmVariant(),\n placement: this.placement(),\n onConfirm: () => this.confirm(),\n onCancel: () => this.cancel(),\n });\n\n this.isOpen.set(true);\n }\n\n private close(): void {\n this.overlayRef?.close();\n this.overlayRef = null;\n this.isOpen.set(false);\n }\n\n private confirm(): void {\n this.confirmed.emit();\n this.close();\n }\n\n private cancel(): void {\n this.cancelled.emit();\n this.close();\n }\n\n private getPlacementConfig() {\n const placement = this.placement();\n const placementMap: Record<PopconfirmPlacement, ('top' | 'bottom' | 'left' | 'right')[]> = {\n top: ['top', 'bottom', 'left', 'right'],\n bottom: ['bottom', 'top', 'left', 'right'],\n left: ['left', 'right', 'top', 'bottom'],\n right: ['right', 'left', 'top', 'bottom'],\n };\n return { placement: placementMap[placement], offset: 8 };\n }\n}\n\n/**\n * Internal panel component for popconfirm content.\n */\n@Component({\n selector: 'coar-popconfirm-panel',\n standalone: true,\n imports: [CoarButtonComponent],\n host: {\n '[attr.data-placement]': 'placement()',\n },\n template: `\n <div class=\"coar-popconfirm-panel\">\n @if (title()) {\n <div class=\"coar-popconfirm-panel__title\">{{ title() }}</div>\n }\n <div class=\"coar-popconfirm-panel__message\">{{ message() }}</div>\n <div class=\"coar-popconfirm-panel__actions\">\n <coar-button size=\"s\" variant=\"secondary\" (clicked)=\"onCancel()?.()\">\n {{ cancelText() }}\n </coar-button>\n <coar-button\n size=\"s\"\n [variant]=\"confirmVariant() === 'danger' ? 'danger' : 'primary'\"\n (clicked)=\"onConfirm()?.()\"\n >\n {{ confirmText() }}\n </coar-button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.15));\n }\n\n .coar-popconfirm-panel {\n position: relative;\n padding: 0.75rem;\n background: var(--coar-background-neutral-primary);\n border: 1px solid var(--coar-border-neutral-tertiary);\n border-radius: var(--coar-radius-sm);\n max-width: 280px;\n font-family: var(--coar-body-base-family);\n }\n\n /* Arrow pseudo-element */\n .coar-popconfirm-panel::before {\n content: '';\n position: absolute;\n width: 10px;\n height: 10px;\n background: var(--coar-background-neutral-primary);\n border: 1px solid var(--coar-border-neutral-tertiary);\n transform: rotate(45deg);\n }\n\n /* Top placement - arrow at bottom pointing down */\n :host([data-placement='top']) .coar-popconfirm-panel::before {\n bottom: -6px;\n left: 50%;\n margin-left: -5px;\n border-top: none;\n border-left: none;\n }\n\n /* Bottom placement - arrow at top pointing up */\n :host([data-placement='bottom']) .coar-popconfirm-panel::before {\n top: -6px;\n left: 50%;\n margin-left: -5px;\n border-bottom: none;\n border-right: none;\n }\n\n /* Left placement - arrow at right pointing right */\n :host([data-placement='left']) .coar-popconfirm-panel::before {\n right: -6px;\n top: 50%;\n margin-top: -5px;\n border-bottom: none;\n border-left: none;\n }\n\n /* Right placement - arrow at left pointing left */\n :host([data-placement='right']) .coar-popconfirm-panel::before {\n left: -6px;\n top: 50%;\n margin-top: -5px;\n border-top: none;\n border-right: none;\n }\n\n .coar-popconfirm-panel__title {\n font-weight: 600;\n font-size: var(--coar-body-base-size);\n color: var(--coar-text-neutral-primary);\n margin-bottom: 0.25rem;\n }\n\n .coar-popconfirm-panel__message {\n font-size: var(--coar-body-small-size);\n color: var(--coar-text-neutral-secondary);\n margin-bottom: 0.75rem;\n line-height: 1.4;\n }\n\n .coar-popconfirm-panel__actions {\n display: flex;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarPopconfirmPanelComponent {\n /** Confirmation message to display */\n message = input<string>('');\n\n /** Optional title above the message */\n title = input<string>('');\n\n /** Text for the confirm button */\n confirmText = input<string>('OK');\n\n /** Text for the cancel button */\n cancelText = input<string>('Cancel');\n\n /** Variant for confirm button */\n confirmVariant = input<'primary' | 'danger'>('primary');\n\n /** Placement for arrow positioning */\n placement = input<PopconfirmPlacement>('top');\n\n /** Callback when user confirms */\n onConfirm = input<(() => void) | undefined>(undefined);\n\n /** Callback when user cancels */\n onCancel = input<(() => void) | undefined>(undefined);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n Type,\n inject,\n input,\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\n\nimport { COAR_OVERLAY_REF } from '@cocoar/ui/overlay';\nimport { CoarButtonComponent } from '../../display/button/coar-button.component';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { type CoarDialogSize } from './coar-dialog.types';\n\n@Component({\n selector: 'coar-dialog-shell',\n standalone: true,\n imports: [NgComponentOutlet, NgTemplateOutlet, CoarButtonComponent, CoarIconComponent],\n templateUrl: './coar-dialog-shell.component.html',\n styleUrl: './coar-dialog-shell.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarDialogShellComponent {\n private readonly overlayRef = inject(COAR_OVERLAY_REF);\n\n readonly dialogTitle = input<string>('');\n readonly dialogSize = input<CoarDialogSize>('m');\n readonly showCloseButton = input<boolean>(true);\n\n readonly contentComponent = input<Type<unknown> | null>(null);\n readonly contentTemplate = input<TemplateRef<unknown> | null>(null);\n readonly contentContext = input<unknown>(null);\n readonly componentInputs = input<Record<string, unknown>>({});\n\n readonly confirmMode = input<boolean>(false);\n readonly confirmMessage = input<string>('');\n readonly confirmText = input<string>('Confirm');\n readonly cancelText = input<string>('Cancel');\n readonly confirmVariant = input<string>('primary');\n\n protected onClose(): void {\n this.overlayRef.close();\n }\n\n protected onConfirm(): void {\n this.overlayRef.close(true);\n }\n\n protected onCancel(): void {\n this.overlayRef.close(false);\n }\n}\n","<div class=\"coar-dialog\" [class]=\"'coar-dialog--' + dialogSize()\">\n @if (dialogTitle() || showCloseButton()) {\n <div class=\"coar-dialog-header\">\n @if (dialogTitle()) {\n <h2 class=\"coar-dialog-title\" id=\"dialog-title\">{{ dialogTitle() }}</h2>\n }\n @if (showCloseButton()) {\n <button class=\"coar-dialog-close\" (click)=\"onClose()\" aria-label=\"Close dialog\">\n <coar-icon name=\"x\" size=\"s\" />\n </button>\n }\n </div>\n }\n\n <div class=\"coar-dialog-body\">\n @if (confirmMode()) {\n <p>{{ confirmMessage() }}</p>\n } @else if (contentComponent()) {\n <ng-container *ngComponentOutlet=\"contentComponent(); inputs: componentInputs()\" />\n } @else if (contentTemplate()) {\n <ng-container *ngTemplateOutlet=\"contentTemplate(); context: contentContext()\" />\n }\n </div>\n\n @if (confirmMode()) {\n <div class=\"coar-dialog-footer\">\n <coar-button variant=\"secondary\" (clicked)=\"onCancel()\">{{ cancelText() }}</coar-button>\n <coar-button [variant]=\"confirmVariant() === 'danger' ? 'danger' : 'primary'\" (clicked)=\"onConfirm()\">{{ confirmText() }}</coar-button>\n </div>\n }\n</div>\n","import { Injectable, TemplateRef, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport {\n createOverlayBuilder,\n coarModalPreset,\n type OverlayRef,\n CoarOverlayOpenBuilder,\n} from '@cocoar/ui/overlay';\n\nimport { CoarDialogShellComponent } from './coar-dialog-shell.component';\nimport {\n type CoarDialogConfig,\n type CoarDialogRef,\n type CoarConfirmOptions,\n} from './coar-dialog.types';\n\nfunction wrapOverlayRef<TResult>(overlayRef: OverlayRef): CoarDialogRef<TResult> {\n return {\n close(result?: TResult): void {\n overlayRef.close(result);\n },\n get afterClosed$(): Observable<TResult | undefined> {\n return overlayRef.afterClosed$ as Observable<TResult | undefined>;\n },\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CoarDialogService {\n private readonly overlayBuilder: CoarOverlayOpenBuilder;\n\n constructor() {\n this.overlayBuilder = createOverlayBuilder(coarModalPreset);\n }\n\n openComponent<C, TResult = unknown>(\n component: Type<C>,\n config: CoarDialogConfig<TResult> = {},\n inputs?: Record<string, unknown>\n ): CoarDialogRef<TResult> {\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: config.title ?? '',\n dialogSize: config.size ?? 'm',\n showCloseButton: config.showCloseButton ?? true,\n contentComponent: component,\n contentTemplate: null,\n contentContext: null,\n componentInputs: inputs ?? {},\n confirmMode: false,\n confirmMessage: '',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n });\n\n return wrapOverlayRef<TResult>(overlayRef);\n }\n\n openTemplate<TCtx, TResult = unknown>(\n template: TemplateRef<TCtx>,\n config: CoarDialogConfig<TResult> = {},\n context?: TCtx\n ): CoarDialogRef<TResult> {\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: config.title ?? '',\n dialogSize: config.size ?? 'm',\n showCloseButton: config.showCloseButton ?? true,\n contentComponent: null,\n contentTemplate: template,\n contentContext: context ?? null,\n componentInputs: {},\n confirmMode: false,\n confirmMessage: '',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n });\n\n return wrapOverlayRef<TResult>(overlayRef);\n }\n\n confirm(options: CoarConfirmOptions): CoarDialogRef<boolean> {\n const config: CoarDialogConfig<boolean> = {\n title: options.title,\n size: 's',\n closeOnBackdropClick: true,\n closeOnEscape: true,\n showCloseButton: false,\n };\n\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: options.title,\n dialogSize: 's',\n showCloseButton: false,\n contentComponent: null,\n contentTemplate: null,\n contentContext: null,\n componentInputs: {},\n confirmMode: true,\n confirmMessage: options.message,\n confirmText: options.confirmText ?? 'Confirm',\n cancelText: options.cancelText ?? 'Cancel',\n confirmVariant: options.confirmVariant ?? 'primary',\n });\n\n return wrapOverlayRef<boolean>(overlayRef);\n }\n\n private buildDialogOverlay<TResult>(config: CoarDialogConfig<TResult>): CoarOverlayOpenBuilder {\n let builder = this.overlayBuilder.fork();\n\n builder = builder.dismiss({\n outsideClick: config.closeOnBackdropClick ?? true,\n escapeKey: config.closeOnEscape ?? true,\n });\n\n if (config.ariaLabel || config.ariaDescribedBy) {\n builder = builder.a11y({\n role: 'dialog',\n label: config.ariaLabel,\n describedBy: config.ariaDescribedBy,\n });\n }\n\n if (config.panelClass) {\n builder = builder.panelClass(config.panelClass);\n }\n\n return builder;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { type CoarToastVariant } from './coar-toast.types';\n\nconst ICON_MAP: Record<CoarToastVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n};\n\n@Component({\n selector: 'coar-toast',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-toast.component.html',\n styleUrl: './coar-toast.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-toast--no-title]': '!title()',\n },\n})\nexport class CoarToastComponent {\n private readonly destroyRef = inject(DestroyRef);\n private timer: ReturnType<typeof setTimeout> | null = null;\n private startTime = 0;\n private remaining = 0;\n\n readonly variant = input<CoarToastVariant>('info');\n readonly title = input<string>('');\n readonly message = input<string>('');\n readonly duration = input<number>(5000);\n readonly dismissible = input<boolean>(true);\n readonly showProgress = input<boolean>(true);\n readonly action = input<{ label: string; callback: () => void } | null>(null);\n\n readonly dismissed = output<void>();\n readonly actionClicked = output<void>();\n\n readonly isPaused = signal(false);\n\n readonly iconName = computed(() => ICON_MAP[this.variant()]);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.clearTimer();\n });\n }\n\n startAutoClose(): void {\n const dur = this.duration();\n if (dur <= 0) return;\n\n this.remaining = dur;\n this.startTime = Date.now();\n this.timer = setTimeout(() => {\n this.dismissed.emit();\n }, this.remaining);\n }\n\n onMouseEnter(): void {\n if (this.duration() <= 0) return;\n this.isPaused.set(true);\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.remaining = Math.max(0, this.remaining - (Date.now() - this.startTime));\n }\n }\n\n onMouseLeave(): void {\n if (this.duration() <= 0) return;\n this.isPaused.set(false);\n\n if (this.remaining > 0) {\n this.startTime = Date.now();\n this.timer = setTimeout(() => {\n this.dismissed.emit();\n }, this.remaining);\n }\n }\n\n onDismiss(): void {\n this.clearTimer();\n this.dismissed.emit();\n }\n\n onAction(): void {\n const actionFn = this.action();\n if (actionFn) {\n actionFn.callback();\n }\n this.actionClicked.emit();\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\n","<div class=\"coar-toast\"\n [class]=\"'coar-toast--' + variant()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n [attr.role]=\"variant() === 'error' ? 'alert' : null\">\n <div class=\"coar-toast-icon\">\n <coar-icon [name]=\"iconName()\" size=\"s\" />\n </div>\n <div class=\"coar-toast-content\">\n @if (title()) {\n <div class=\"coar-toast-title\">{{ title() }}</div>\n }\n <div class=\"coar-toast-message\">{{ message() }}</div>\n </div>\n <div class=\"coar-toast-actions\">\n @if (action()) {\n <button class=\"coar-toast-action-btn\" (click)=\"onAction()\" [attr.aria-label]=\"action()!.label\">\n {{ action()!.label }}\n </button>\n }\n @if (dismissible()) {\n <button class=\"coar-toast-close\" (click)=\"onDismiss()\" aria-label=\"Dismiss notification\">\n <coar-icon name=\"x\" size=\"xs\" />\n </button>\n }\n </div>\n @if (showProgress() && duration() > 0) {\n <div class=\"coar-toast-progress\">\n <div class=\"coar-toast-progress-bar\"\n [style.animation-duration.ms]=\"duration()\"\n [class.coar-toast-progress-bar--paused]=\"isPaused()\"></div>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n QueryList,\n ViewChildren,\n signal,\n} from '@angular/core';\n\nimport { CoarToastComponent } from './coar-toast.component';\nimport { type CoarToastVariant } from './coar-toast.types';\n\nexport interface InternalToast {\n id: number;\n variant: CoarToastVariant;\n title: string;\n message: string;\n duration: number;\n dismissible: boolean;\n showProgress: boolean;\n action: { label: string; callback: () => void } | null;\n onDismiss: () => void;\n}\n\n@Component({\n selector: 'coar-toast-container',\n standalone: true,\n imports: [CoarToastComponent],\n templateUrl: './coar-toast-container.component.html',\n styleUrl: './coar-toast-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"coar-toast-container--\" + position()',\n },\n})\nexport class CoarToastContainerComponent {\n @ViewChildren(CoarToastComponent) toastComponents!: QueryList<CoarToastComponent>;\n\n readonly toasts = signal<InternalToast[]>([]);\n readonly position = signal<string>('top-right');\n\n private pendingAutoClose = new Set<number>();\n\n addToast(toast: InternalToast): void {\n const current = this.toasts();\n // Limit to 5 visible toasts max\n const limited = current.length >= 5 ? current.slice(1) : current;\n this.toasts.set([...limited, toast]);\n\n if (toast.duration > 0) {\n this.pendingAutoClose.add(toast.id);\n }\n }\n\n removeToast(id: number): void {\n this.pendingAutoClose.delete(id);\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n removeAll(): void {\n this.pendingAutoClose.clear();\n this.toasts.set([]);\n }\n\n onDismissed(id: number): void {\n const toast = this.toasts().find((t) => t.id === id);\n if (toast) {\n toast.onDismiss();\n }\n this.removeToast(id);\n }\n\n startAutoCloseForLatest(): void {\n // Use setTimeout to let the view update before querying view children\n setTimeout(() => {\n const components = this.toastComponents?.toArray() ?? [];\n for (const comp of components) {\n comp.startAutoClose();\n }\n });\n }\n}\n","@for (toast of toasts(); track toast.id) {\n <coar-toast\n [variant]=\"toast.variant\"\n [title]=\"toast.title\"\n [message]=\"toast.message\"\n [duration]=\"toast.duration\"\n [dismissible]=\"toast.dismissible\"\n [showProgress]=\"toast.showProgress\"\n [action]=\"toast.action\"\n (dismissed)=\"onDismissed(toast.id)\"\n (actionClicked)=\"onDismissed(toast.id)\"\n />\n}\n","import {\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n Injectable,\n createComponent,\n inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { CoarToastContainerComponent, type InternalToast } from './coar-toast-container.component';\nimport { type CoarToastConfig, type CoarToastRef, type CoarToastPosition } from './coar-toast.types';\n\nconst DEFAULT_DURATION = 5000;\nconst ERROR_DURATION = 0;\n\n@Injectable({ providedIn: 'root' })\nexport class CoarToastService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n\n private containerRef: ComponentRef<CoarToastContainerComponent> | null = null;\n private nextId = 0;\n\n success(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'success' });\n }\n\n error(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'error' });\n }\n\n warning(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'warning' });\n }\n\n info(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'info' });\n }\n\n show(config: CoarToastConfig): CoarToastRef {\n const container = this.getOrCreateContainer(config.position ?? 'top-right');\n const id = this.nextId++;\n const variant = config.variant ?? 'info';\n const duration = config.duration ?? (variant === 'error' ? ERROR_DURATION : DEFAULT_DURATION);\n const afterDismissed$ = new Subject<void>();\n\n const internalToast: InternalToast = {\n id,\n variant,\n title: config.title ?? '',\n message: config.message,\n duration,\n dismissible: config.dismissible ?? true,\n showProgress: config.showProgress ?? true,\n action: config.action ?? null,\n onDismiss: () => {\n afterDismissed$.next();\n afterDismissed$.complete();\n },\n };\n\n container.instance.addToast(internalToast);\n container.instance.startAutoCloseForLatest();\n\n const ref: CoarToastRef = {\n dismiss: () => {\n container.instance.onDismissed(id);\n },\n afterDismissed$: afterDismissed$.asObservable(),\n };\n\n return ref;\n }\n\n dismissAll(): void {\n if (this.containerRef) {\n this.containerRef.instance.removeAll();\n }\n }\n\n private getOrCreateContainer(position: CoarToastPosition): ComponentRef<CoarToastContainerComponent> {\n if (!this.containerRef) {\n this.containerRef = createComponent(CoarToastContainerComponent, {\n environmentInjector: this.injector,\n });\n this.appRef.attachView(this.containerRef.hostView);\n document.body.appendChild(this.containerRef.location.nativeElement);\n }\n\n this.containerRef.instance.position.set(position);\n return this.containerRef;\n }\n}\n","// Overlay/popover components\nexport * from './popover';\nexport * from './tooltip';\nexport * from './popconfirm';\nexport * from './dialog';\nexport * from './toast';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cryptoRandomId"],"mappings":"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"}
1
+ {"version":3,"file":"cocoar-ui-components.mjs","sources":["../../../../libs/ui/components/src/lib/display/icon/coar-icon-registry.ts","../../../../libs/ui/components/src/lib/display/icon/core-icons.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon-built-in-registry.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon.service.ts","../../../../libs/ui/components/src/lib/display/icon/coar-icon.component.ts","../../../../libs/ui/components/src/lib/forms/_base/coar-control-value-accessor.ts","../../../../libs/ui/components/src/lib/forms/text-input/coar-text-input.component.ts","../../../../libs/ui/components/src/lib/forms/text-input/coar-text-input.component.html","../../../../libs/ui/components/src/lib/forms/number-input/coar-number-input.component.ts","../../../../libs/ui/components/src/lib/forms/number-input/coar-number-input.component.html","../../../../libs/ui/components/src/lib/forms/password-input/coar-password-input.component.ts","../../../../libs/ui/components/src/lib/forms/password-input/coar-password-input.component.html","../../../../libs/ui/components/src/lib/forms/checkbox/coar-checkbox.component.ts","../../../../libs/ui/components/src/lib/forms/checkbox/coar-checkbox.component.html","../../../../libs/ui/components/src/lib/forms/radio/coar-radio-group.component.ts","../../../../libs/ui/components/src/lib/forms/radio/coar-radio-group.component.html","../../../../libs/ui/components/src/lib/forms/radio/coar-radio.component.ts","../../../../libs/ui/components/src/lib/forms/radio/coar-radio.component.html","../../../../libs/ui/components/src/lib/display/scrollbar/coar-scrollbar.directive.ts","../../../../libs/ui/components/src/lib/forms/select/coar-select-base.ts","../../../../libs/ui/components/src/lib/forms/select/coar-single-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-single-select.component.html","../../../../libs/ui/components/src/lib/forms/select/coar-multi-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-multi-select.component.html","../../../../libs/ui/components/src/lib/forms/select/coar-tag-select.component.ts","../../../../libs/ui/components/src/lib/forms/select/coar-tag-select.component.html","../../../../libs/ui/components/src/lib/forms/switch/coar-switch.component.ts","../../../../libs/ui/components/src/lib/forms/switch/coar-switch.component.html","../../../../libs/ui/components/src/lib/forms/index.ts","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-helpers.ts","../../../../libs/ui/components/src/lib/date-time/scrollable-calendar/coar-scrollable-calendar.component.ts","../../../../libs/ui/components/src/lib/date-time/scrollable-calendar/coar-scrollable-calendar.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-format.ts","../../../../libs/ui/components/src/lib/date-time/_shared/coar-date-picker-base.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-picker/coar-plain-date-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-picker/coar-plain-date-picker.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-time-helpers.ts","../../../../libs/ui/components/src/lib/date-time/time-picker/coar-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/time-picker/coar-time-picker.component.html","../../../../libs/ui/components/src/lib/date-time/plain-date-time-picker/coar-plain-date-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/plain-date-time-picker/coar-plain-date-time-picker.component.html","../../../../libs/ui/components/src/lib/date-time/zoned-date-time-picker/coar-zoned-date-time-picker.component.ts","../../../../libs/ui/components/src/lib/date-time/zoned-date-time-picker/coar-zoned-date-time-picker.component.html","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover-group.service.ts","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover.component.ts","../../../../libs/ui/components/src/lib/overlay/popover/coar-popover.component.html","../../../../libs/ui/components/src/lib/date-time/mini-calendar/coar-mini-calendar.component.ts","../../../../libs/ui/components/src/lib/date-time/mini-calendar/coar-mini-calendar.component.html","../../../../libs/ui/components/src/lib/date-time/month-list/coar-month-list.component.ts","../../../../libs/ui/components/src/lib/date-time/month-list/coar-month-list.component.html","../../../../libs/ui/components/src/lib/date-time/_shared/coar-time-format.ts","../../../../libs/ui/components/src/lib/date-time/index.ts","../../../../libs/ui/components/src/lib/display/button/coar-button.component.ts","../../../../libs/ui/components/src/lib/display/button/coar-button.component.html","../../../../libs/ui/components/src/lib/display/badge/coar-badge.component.ts","../../../../libs/ui/components/src/lib/display/badge/coar-badge.component.html","../../../../libs/ui/components/src/lib/display/tag/coar-tag.component.ts","../../../../libs/ui/components/src/lib/display/tag/coar-tag.component.html","../../../../libs/ui/components/src/lib/display/card/coar-card.component.ts","../../../../libs/ui/components/src/lib/display/card/coar-card.component.html","../../../../libs/ui/components/src/lib/display/note/coar-note.component.ts","../../../../libs/ui/components/src/lib/display/note/coar-note.component.html","../../../../libs/ui/components/src/lib/display/divider/coar-divider.component.ts","../../../../libs/ui/components/src/lib/display/divider/coar-divider.component.html","../../../../libs/ui/components/src/lib/display/table/coar-table.component.ts","../../../../libs/ui/components/src/lib/display/label/coar-label.component.ts","../../../../libs/ui/components/src/lib/display/avatar/coar-avatar.component.ts","../../../../libs/ui/components/src/lib/display/avatar/coar-avatar.component.html","../../../../libs/ui/components/src/lib/display/avatar/initials.pipe.ts","../../../../libs/ui/components/src/lib/display/code-block/coar-code-block.component.ts","../../../../libs/ui/components/src/lib/display/code-block/coar-code-block.component.html","../../../../libs/ui/components/src/lib/display/progress-bar/coar-progress-bar.component.ts","../../../../libs/ui/components/src/lib/display/progress-bar/coar-progress-bar.component.html","../../../../libs/ui/components/src/lib/display/spinner/coar-spinner.component.ts","../../../../libs/ui/components/src/lib/display/spinner/coar-spinner.component.html","../../../../libs/ui/components/src/lib/display/index.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab.component.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab-group.component.ts","../../../../libs/ui/components/src/lib/navigation/tabs/coar-tab-group.component.html","../../../../libs/ui/components/src/lib/navigation/sidebar/coar-sidebar.component.ts","../../../../libs/ui/components/src/lib/navigation/sidebar/coar-sidebar.component.html","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb-item.component.ts","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb.component.ts","../../../../libs/ui/components/src/lib/navigation/breadcrumb/coar-breadcrumb.component.html","../../../../libs/ui/components/src/lib/navigation/pagination/coar-pagination.component.ts","../../../../libs/ui/components/src/lib/navigation/pagination/coar-pagination.component.html","../../../../libs/ui/components/src/lib/navigation/navbar/coar-navbar.component.ts","../../../../libs/ui/components/src/lib/navigation/navbar/coar-navbar.component.html","../../../../libs/ui/components/src/lib/navigation/index.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip.service.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip-overlay.component.ts","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip-overlay.component.html","../../../../libs/ui/components/src/lib/overlay/tooltip/coar-tooltip.directive.ts","../../../../libs/ui/components/src/lib/overlay/popconfirm/coar-popconfirm.directive.ts","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog-shell.component.ts","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog-shell.component.html","../../../../libs/ui/components/src/lib/overlay/dialog/coar-dialog.service.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.component.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.component.html","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast-container.component.ts","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast-container.component.html","../../../../libs/ui/components/src/lib/overlay/toast/coar-toast.service.ts","../../../../libs/ui/components/src/lib/overlay/index.ts","../../../../libs/ui/components/src/cocoar-ui-components.ts"],"sourcesContent":["import { type Provider, InjectionToken, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { catchError, shareReplay } from 'rxjs/operators';\n\nexport interface CoarIconSource {\n getIcon(name: string): Observable<string | null>;\n getAvailableIconKeys?(): Observable<readonly string[]>;\n clearCache?(): void;\n clearIconCache?(name: string): void;\n}\n\nexport type CoarIconSourceEntry = Readonly<{\n key: string;\n source: CoarIconSource;\n}>;\n\nexport const COAR_ICON_SOURCE_ENTRY = new InjectionToken<CoarIconSourceEntry>(\n 'COAR_ICON_SOURCE_ENTRY'\n);\n\nexport const COAR_DEFAULT_ICON_SOURCE_KEY = new InjectionToken<string>(\n 'COAR_DEFAULT_ICON_SOURCE_KEY'\n);\n\nexport type ProvideCoarIconSourceOptions = Readonly<{\n key: string;\n source: CoarIconSource;\n}>;\n\nexport function provideCoarIconSource(options: ProvideCoarIconSourceOptions): Provider {\n return {\n provide: COAR_ICON_SOURCE_ENTRY,\n useValue: {\n key: options.key,\n source: options.source,\n },\n multi: true,\n };\n}\n\nexport type ProvideCoarIconMapSourceOptions = Readonly<{\n key: string;\n icons: Readonly<Record<string, string>>;\n}>;\n\nexport function provideCoarIconMapSource(options: ProvideCoarIconMapSourceOptions): Provider {\n return provideCoarIconSource({\n key: options.key,\n source: new CoarIconMapSource(options.icons),\n });\n}\n\nexport function provideCoarDefaultIconSource(key: string): Provider {\n return {\n provide: COAR_DEFAULT_ICON_SOURCE_KEY,\n useValue: key,\n multi: true,\n };\n}\n\nexport type ProvideCoarHttpIconSourceOptions = Readonly<{\n key: string;\n getUrl: (iconName: string) => string;\n getAvailableIconKeys?: (http: HttpClient) => Observable<readonly string[]>;\n}>;\n\nexport function provideCoarHttpIconSource(options: ProvideCoarHttpIconSourceOptions): Provider {\n return {\n provide: COAR_ICON_SOURCE_ENTRY,\n multi: true,\n useFactory: () => {\n const http = inject(HttpClient);\n const getAvailableIconKeys = options.getAvailableIconKeys;\n return {\n key: options.key,\n source: new CoarHttpIconSource(\n http,\n options.getUrl,\n getAvailableIconKeys ? () => getAvailableIconKeys(http) : undefined\n ),\n };\n },\n };\n}\n\nclass CoarIconMapSource implements CoarIconSource {\n constructor(private readonly icons: Readonly<Record<string, string>>) {}\n\n public getIcon(name: string): Observable<string | null> {\n return of(this.icons[name] ?? null);\n }\n\n public getAvailableIconKeys(): Observable<readonly string[]> {\n return of(Object.keys(this.icons).sort());\n }\n}\n\nclass CoarHttpIconSource implements CoarIconSource {\n private readonly cache = new Map<string, Observable<string | null>>();\n private iconKeys$?: Observable<readonly string[]>;\n\n public readonly getAvailableIconKeys?: () => Observable<readonly string[]>;\n\n constructor(\n private readonly http: HttpClient,\n private readonly getUrl: (iconName: string) => string,\n getAvailableIconKeysFactory?: () => Observable<readonly string[]>\n ) {\n if (getAvailableIconKeysFactory) {\n this.getAvailableIconKeys = () => {\n if (!this.iconKeys$) {\n this.iconKeys$ = getAvailableIconKeysFactory().pipe(shareReplay(1));\n }\n return this.iconKeys$;\n };\n }\n }\n\n public getIcon(name: string): Observable<string | null> {\n const cached = this.cache.get(name);\n if (cached) return cached;\n\n const request$ = this.http\n .get(this.getUrl(name), {\n responseType: 'text',\n })\n .pipe(\n catchError(() => of(null)),\n shareReplay(1)\n );\n\n this.cache.set(name, request$);\n return request$;\n }\n\n public clearCache(): void {\n this.cache.clear();\n this.iconKeys$ = undefined;\n }\n\n public clearIconCache(name: string): void {\n this.cache.delete(name);\n }\n}\n","/**\n * Built-in icon registry.\n *\n * ⚠️ DO NOT EDIT THIS FILE MANUALLY\n *\n * This file is auto-generated from /assets/icons/*.svg files.\n * To add new icons:\n * 1. Add SVG files to /assets/icons/\n * 2. Run: pnpm build:icons\n * 3. Commit the generated file\n *\n * Icons are inlined as strings for maximum portability.\n */\n\nexport const CORE_ICONS = {\n 'add-list': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m10 18h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m21 17h-6c-.6 0-1-.4-1-1s.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m18 20c-.6 0-1-.4-1-1v-6c0-.6.4-1 1-1s1 .4 1 1v6c0 .6-.4 1-1 1z\"/></g><g><path d=\"m14 13h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m14 8h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g></svg>`,\n 'add-user': `<svg fill=\"none\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m17 6c0 2.76142-2.2386 5-5 5-2.76142 0-5-2.23858-5-5s2.23858-5 5-5c2.7614 0 5 2.23858 5 5zm-5 4c2.2091 0 4-1.79086 4-4s-1.7909-4-4-4c-2.20914 0-4 1.79086-4 4s1.79086 4 4 4zm-2 3c-3.86599 0-7 3.134-7 7 0 1.6569 1.34315 3 3 3h6.5c.2761 0 .5-.2239.5-.5s-.2239-.5-.5-.5h-6.5c-1.10457 0-2-.8954-2-2 0-3.3137 2.68629-6 6-6h4.5c.2761 0 .5-.2239.5-.5 0-.2762-.2239-.5-.5-.5zm9 2c.2761 0 .5.2239.5.5v3h3c.2761 0 .5.2239.5.5s-.2239.5-.5.5h-3v3c0 .2761-.2239.5-.5.5s-.5-.2239-.5-.5v-3h-3c-.2761 0-.5-.2239-.5-.5s.2239-.5.5-.5h3v-3c0-.2761.2239-.5.5-.5z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'add': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"_03_Login\" data-name=\"03 Login\"><path d=\"m256 512a25 25 0 0 1 -25-25v-462a25 25 0 0 1 50 0v462a25 25 0 0 1 -25 25z\"/><path d=\"m487 281h-462a25 25 0 0 1 0-50h462a25 25 0 0 1 0 50z\"/></g></svg>`,\n 'arrow-right': `<svg id=\"Layer_2\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 2\"><path d=\"m22.707 11.293-7-7a1 1 0 0 0 -1.414 1.414l5.293 5.293h-17.586a1 1 0 0 0 0 2h17.586l-5.293 5.293a1 1 0 1 0 1.414 1.414l7-7a1 1 0 0 0 0-1.414z\"/></svg>`,\n 'back': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m9 14c-.3 0-.5-.1-.7-.3l-4-4c-.4-.4-.4-1 0-1.4l4-4c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-3.3 3.3 3.3 3.3c.4.4.4 1 0 1.4-.2.2-.4.3-.7.3z\"/><path d=\"m14 19h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c2.3 0 4-1.5 4-3.5s-1.7-3.5-4-3.5h-9c-.6 0-1-.4-1-1s.4-1 1-1h9c3.4 0 6 2.4 6 5.5s-2.6 5.5-6 5.5z\"/></svg>`,\n 'bin': `<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M436,60h-75V45c0-24.813-20.187-45-45-45H196c-24.813,0-45,20.187-45,45v15H76c-24.813,0-45,20.187-45,45 c0,19.928,13.025,36.861,31.005,42.761L88.76,470.736C90.687,493.875,110.385,512,133.604,512h244.792 c23.22,0,42.918-18.125,44.846-41.271l26.753-322.969C467.975,141.861,481,124.928,481,105C481,80.187,460.813,60,436,60z M181,45 c0-8.271,6.729-15,15-15h120c8.271,0,15,6.729,15,15v15H181V45z M393.344,468.246c-0.643,7.712-7.208,13.754-14.948,13.754 H133.604c-7.739,0-14.305-6.042-14.946-13.747L92.294,150h327.412L393.344,468.246z M436,120H76c-8.271,0-15-6.729-15-15 s6.729-15,15-15h360c8.271,0,15,6.729,15,15S444.271,120,436,120z\"/></g></g><g><g><path d=\"M195.971,436.071l-15-242c-0.513-8.269-7.67-14.558-15.899-14.043c-8.269,0.513-14.556,7.631-14.044,15.899l15,242.001 c0.493,7.953,7.097,14.072,14.957,14.072C189.672,452,196.504,444.684,195.971,436.071z\"/></g></g><g><g><path d=\"M256,180c-8.284,0-15,6.716-15,15v242c0,8.284,6.716,15,15,15s15-6.716,15-15V195C271,186.716,264.284,180,256,180z\"/></g></g><g><g><path d=\"M346.927,180.029c-8.25-0.513-15.387,5.774-15.899,14.043l-15,242c-0.511,8.268,5.776,15.386,14.044,15.899 c8.273,0.512,15.387-5.778,15.899-14.043l15-242C361.483,187.659,355.196,180.541,346.927,180.029z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'calendar-home': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m2 50.6162109c0 2.0571289 1.6767578 3.7304688 3.7382812 3.7304688h24.3808594v3.7202148c0 .5522461.4472656 1 1 1h8.1279297c.003418.000061.0063477.0019531.0097656.0019531h9.8408203c.003418 0 .0063477-.0018921.0097656-.0019531h8.1220703c.5527344 0 1-.4477539 1-1v-14.6279297h2.2080078c.6347656 0 1.2011719-.3813477 1.4433594-.972168.2441406-.5966797.1064453-1.2744141-.3525391-1.7265625-.0039062-.003418-.0068359-.0063477-.0107422-.0097656l-12.5703125-12.036438v-16.0265502c0-2.0571289-1.6777344-3.730957-3.7392578-3.730957h-2.1220703v-2.3500977c0-.9125977-.7421875-1.6552734-1.6552734-1.6552734h-2.9980469c-.9130859 0-1.6552734.7426758-1.6552734 1.6552734v2.3500977h-22.6074218v-2.3500977c0-.9125977-.7421875-1.6552734-1.6552734-1.6552734h-2.9980469c-.9130859 0-1.65625.7426758-1.65625 1.6552734v2.3500977h-2.1220703c-2.0615234 0-3.7382812 1.6738281-3.7382812 3.730957v37.9487304zm46.0976562 6.4506836h-7.8408203v-11.6967773h7.8408203zm9.1318359-15.6279297c-.5527344 0-1 .4477539-1 1v14.6279297h-6.1318359v-12.6967773c0-.5522461-.4472656-1-1-1h-9.8408203c-.5527344 0-1 .4477539-1 1v12.6967773h-6.1376953v-3.7056885c0-.005127.0029297-.0093994.0029297-.0145264s-.0029297-.0093994-.0029297-.0145264v-10.8931885c0-.5522461-.4472656-1-1-1h-2.1259766l15.1806641-14.5463867 3.0609131 2.9307861c.0048828.0050049.0098877.0093994.0150146.0142822l12.1164551 11.6013184h-2.1367188zm-11.96875-16.2749023c-.6074219-.5786133-1.5625-.578125-2.1757812.0024414l-16.2412109 15.5629883c-.4697266.4477539-.6171875 1.1245117-.3779297 1.7241211.2402344.5986328.8144531.9853516 1.4628906.9853516h2.1904297v8.9077148h-24.3808594c-.9580078 0-1.7382812-.7763672-1.7382812-1.7304688v-29.5507812h42.9472656v5.713501l-1.6865234-1.6148682zm-6.4833984-18.2329102h2.3085938v3.0005493c0 .001709-.0009766.0031128-.0009766.0048218v2.9970703h-2.3076172v-6.0024414zm-26.6074219 0v6.0024414h-2.3085938v-2.9970703c0-.001709-.0009766-.0031128-.0009766-.0048218v-3.0005493h2.3095703zm-6.4316406 4.0053711h2.1220703v2.3413086c0 .2288208.046875.4467773.1311035.6452026.2514648.59375.8398438 1.0115356 1.5241699 1.0115356h3c.9121094 0 1.6542969-.7421875 1.6542969-1.6542969v-2.34375h22.6074219v2.34375c0 .9121094.7412109 1.6542969 1.6533203 1.6542969h3.0009766c.6843262 0 1.2724609-.4179077 1.5234375-1.0117798.0842285-.1983032.1308594-.4162598.1308594-.6449585v-2.3413086h2.1220703c.9589844 0 1.7392578.7763672 1.7392578 1.730957v6.3979492h-42.9472656v-6.3979492c0-.9545898.7802734-1.730957 1.7382812-1.730957z\"/><path d=\"m12.6396484 23.8325195h-3.3183594c-1.2636719 0-2.2919922 1.0288086-2.2919922 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2919922 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2924805v-3.0942383c0-.1616211.1308594-.2929688.2919922-.2929688h3.3183594c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m22.3017578 23.8325195h-3.3183594c-1.2646484 0-2.2929688 1.0288086-2.2929688 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1616211.1318359-.2929688.2929688-.2929688h3.3183594c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m31.9628906 23.8325195h-3.3173828c-1.2646484 0-2.2929688 1.0288086-2.2929688 2.2929688v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3173828c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2929688-2.2929688-2.2929688zm.2929688 5.387207c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3173828c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1616211.1318359-.2929688.2929688-.2929688h3.3173828c.1611328 0 .2929688.1313477.2929688.2929688z\"/><path d=\"m41.3330078 23.8320312h-3.0244141c-1.2636719 0-2.2919922 1.027832-2.2919922 2.2915039v2.8447266c0 .5522461.4472656 1 1 1s1-.4477539 1-1v-2.8447266c0-.1582031.1337891-.2915039.2919922-.2915039h3.0244141c.5527344 0 1-.4477539 1-1s-.4472656-1-1-1z\"/><path d=\"m12.6396484 32.9257812h-3.3183594c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2919922 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2924805v-3.0942383c0-.1611328.1308594-.2924805.2919922-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m22.3017578 32.9257812h-3.3183594c-1.2646484 0-2.2929688 1.0283203-2.2929688 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2924805 2.2929688 2.2924805h3.3183594c1.2646484 0 2.2929688-1.0283203 2.2929688-2.2924805v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1611328-.1318359.2924805-.2929688.2924805h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2924805v-3.0942383c0-.1611328.1318359-.2924805.2929688-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m31.8496094 32.9223633h-3.2041016c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2919922v3.0166016c0 .5522461.4472656 1 1 1s1-.4477539 1-1v-3.0166016c0-.1582031.1337891-.2919922.2919922-.2919922h3.2041016c.5527344 0 1-.4477539 1-1s-.4472656-1-1-1z\"/><path d=\"m12.6396484 42.0185547h-3.3183594c-1.2636719 0-2.2919922 1.0283203-2.2919922 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2929688 2.2919922 2.2929688h3.3183594c1.2646484 0 2.2929688-1.0288086 2.2929688-2.2929688v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1616211-.1318359.2929688-.2929688.2929688h-3.3183594c-.1611328 0-.2919922-.1313477-.2919922-.2929688v-3.0942383c0-.1611328.1308594-.2924805.2919922-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m22.3017578 42.0185547h-3.3183594c-1.2646484 0-2.2929688 1.0283203-2.2929688 2.2924805v3.0942383c0 1.2641602 1.0283203 2.2929688 2.2929688 2.2929688h3.3183594c1.2646484 0 2.2929688-1.0288086 2.2929688-2.2929688v-3.0942383c0-1.2641602-1.0283203-2.2924805-2.2929688-2.2924805zm.2929688 5.3867188c0 .1616211-.1318359.2929688-.2929688.2929688h-3.3183594c-.1611328 0-.2929688-.1313477-.2929688-.2929688v-3.0942383c0-.1611328.1318359-.2924805.2929688-.2924805h3.3183594c.1611328 0 .2929688.1313477.2929688.2924805z\"/><path d=\"m26.3525391 47.4052734c0 1.2641602 1.0283203 2.2929688 2.2929688 2.2929688.5527344 0 1-.4477539 1-1s-.4472656-1-1-1c-.1611328 0-.2929688-.1313477-.2929688-.2929688v-2.2563477c0-.5522461-.4472656-1-1-1s-1 .4477539-1 1z\"/></svg>`,\n 'calendar-world': `<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"Line_Expand\" data-name=\"Line Expand\" viewBox=\"0 0 64 64\" width=\"512\" height=\"512\"><path d=\"M60,5H57V4a3,3,0,0,0-6,0V5H47V4a3,3,0,0,0-6,0V5H23V4a3,3,0,0,0-6,0V5H13V4A3,3,0,0,0,7,4V5H4A3.0033,3.0033,0,0,0,1,8V60a3.0033,3.0033,0,0,0,3,3H60a3.0033,3.0033,0,0,0,3-3V8A3.0033,3.0033,0,0,0,60,5ZM53,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM43,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM19,4a1,1,0,0,1,2,0V8a1,1,0,0,1-2,0ZM9,4a1,1,0,0,1,2,0V8A1,1,0,0,1,9,8ZM61,60a1.0009,1.0009,0,0,1-1,1H4a1.0009,1.0009,0,0,1-1-1V15H61Zm0-47H3V8A1.0009,1.0009,0,0,1,4,7H7V8a3,3,0,0,0,6,0V7h4V8a3,3,0,0,0,6,0V7H41V8a3,3,0,0,0,6,0V7h4V8a3,3,0,0,0,6,0V7h3a1.0009,1.0009,0,0,1,1,1Z\"/><path d=\"M32,58A20,20,0,1,0,12,38,20.0226,20.0226,0,0,0,32,58Zm-6.3613-6.1118-.9817,2.5293c-.3407-.153-.6778-.3126-1.007-.4859l-.7086-3.644a.4686.4686,0,0,1,.11-.398l.8095-.8994A2.897,2.897,0,0,0,22.41,44.2417l-1.212-.3032-1.77-4.3257V38.5146l2.584-1.8457a.4625.4625,0,0,1,.7168.2632l.1582.6319a.9991.9991,0,0,0,.97.7573h4.4385a.4587.4587,0,0,1,.4287.29l.9893,2.4741a1,1,0,0,0,.7324.6094l1.9014.38a.8564.8564,0,0,1,.5664,1.28L31.333,45.99l-.6855.2286a2.4582,2.4582,0,0,0-1.6836,2.3349v1.0947l-2.9073,1.7447A1.0034,1.0034,0,0,0,25.6387,51.8882ZM50,38a17.9166,17.9166,0,0,1-4.1123,11.4387L44.793,48.125a1.1151,1.1151,0,0,1-.2569-.7109v-6.11a.9937.9937,0,0,0-.1562-.5361l-2.8272-4.45A2.4575,2.4575,0,0,0,38.8779,35.25l-1.0654.2661a.4669.4669,0,0,1-.3672-.0635l-3.1728-2.1152-.4668-2.7978a.4629.4629,0,0,1,.1679-.437l1.9971-1.5977a1.6938,1.6938,0,0,1,2.1875.1035l1.2773,1.2778a1.0036,1.0036,0,0,0,.3555.23L45.22,32.1509a.998.998,0,0,0,.7451-.0176L48.5866,31.01A17.9008,17.9008,0,0,1,50,38ZM32,20a18.005,18.005,0,0,1,15.6959,9.2161l-2.149.9211-4.8506-1.8188-1.124-1.1246A3.5789,3.5789,0,0,0,37.01,26.1431a3.6767,3.6767,0,0,0-2.2891.8L32.7246,28.54a2.4641,2.4641,0,0,0-.8916,2.3277l.5381,3.2256a1.0032,1.0032,0,0,0,.4316.6674l3.5332,2.3555a2.4614,2.4614,0,0,0,1.962.34l1.0644-.2662a.462.462,0,0,1,.502.2l2.6718,4.2051v5.8189a3.1158,3.1158,0,0,0,.7207,1.9917l1.2553,1.5069a17.9222,17.9222,0,0,1-17.99,4.2286l.8577-2.21,3.0986-1.8594a1.0009,1.0009,0,0,0,.4854-.8574V48.5532a.4606.4606,0,0,1,.3164-.4375l1.0361-.3457a1.0008,1.0008,0,0,0,.541-.4341l1.7715-2.9526a2.8553,2.8553,0,0,0-1.8887-4.27l-1.37-.274-.7881-1.97a2.4494,2.4494,0,0,0-2.2861-1.5483H24.6348a2.463,2.463,0,0,0-1.503-1.5869,2.4383,2.4383,0,0,0-.9892-.1328v-.898L27.23,29.2524a1.0019,1.0019,0,0,0,.3223-.5537l.5185-2.5571.6338-.0112a2.3017,2.3017,0,0,0,1.0947-4.3028L27.584,20.5707A17.9126,17.9126,0,0,1,32,20Zm-6.9856,1.4116,3.7971,2.1553a.3015.3015,0,0,1-.1426.5635l-1.4365.0258a1.0022,1.0022,0,0,0-.9629.8013L25.6582,27.97l-5.1738,4.5279a.9968.9968,0,0,0-.3418.7524v1.4336l-.9385-.2349-.5059-1.5151a.9987.9987,0,0,0-.8486-.6787l-2.79-.28A18.0822,18.0822,0,0,1,25.0144,21.4116ZM14.4824,33.9269l2.5235.2533.4746,1.4219a.9982.9982,0,0,0,.706.6538l.7135.1784-1.0523.7517a1.0016,1.0016,0,0,0-.419.814v1.81a1.0051,1.0051,0,0,0,.0742.3784l2.0352,4.9761a1,1,0,0,0,.6836.5918l1.7041.4262a.8963.8963,0,0,1,.4492,1.47l-.81.9a2.4766,2.4766,0,0,0-.5869,2.1162l.3485,1.7926a17.8392,17.8392,0,0,1-6.8446-18.5337Z\"/></svg>`,\n 'calendar': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"512\" height=\"512\"><g id=\"_01_align_center\" data-name=\"01 align center\"><path d=\"M21,2H18V0H16V2H8V0H6V2H3A3,3,0,0,0,0,5V24H24V5A3,3,0,0,0,21,2ZM2,5A1,1,0,0,1,3,4H21a1,1,0,0,1,1,1V8H2ZM2,22V10H22V22Z\"/><rect x=\"15\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"15\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"17\" width=\"2\" height=\"2\"/></g></svg>`,\n 'caret-right': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m190.06 414 163.12-139.78a24 24 0 0 0 0-36.44l-163.12-139.78c-15.57-13.34-39.62-2.28-39.62 18.22v279.6c0 20.5 24.05 31.56 39.62 18.18z\"/></svg>`,\n 'chat': `<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 60 60\" style=\"enable-background:new 0 0 60 60;\" xml:space=\"preserve\"><g><path d=\"M10,25.465h13c0.553,0,1-0.448,1-1s-0.447-1-1-1H10c-0.553,0-1,0.448-1,1S9.447,25.465,10,25.465z\"/><path d=\"M36,29.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,29.465,36,29.465z\"/><path d=\"M36,35.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,35.465,36,35.465z\"/><path d=\"M54.072,2.535L19.93,2.465c-3.27,0-5.93,2.66-5.93,5.93v5.124l-8.07,0.017c-3.27,0-5.93,2.66-5.93,5.93v21.141 c0,3.27,2.66,5.929,5.93,5.929H12v10c0,0.413,0.254,0.784,0.64,0.933c0.117,0.045,0.239,0.067,0.36,0.067 c0.276,0,0.547-0.115,0.74-0.327l9.704-10.675l16.626-0.068c3.27,0,5.93-2.66,5.93-5.929v-0.113l5.26,5.786 c0.193,0.212,0.464,0.327,0.74,0.327c0.121,0,0.243-0.022,0.36-0.067c0.386-0.149,0.64-0.52,0.64-0.933v-10h1.07 c3.27,0,5.93-2.66,5.93-5.929V8.465C60,5.196,57.341,2.536,54.072,2.535z M44,40.536c0,2.167-1.763,3.929-3.934,3.929l-17.07,0.07 c-0.28,0.001-0.548,0.12-0.736,0.327L14,53.949v-8.414c0-0.552-0.447-1-1-1H5.93c-2.167,0-3.93-1.763-3.93-3.929V19.465 c0-2.167,1.763-3.93,3.932-3.93l9.068-0.019c0,0,0,0,0,0c0.001,0,0.001,0,0.002,0l25.068-0.052c2.167,0,3.93,1.763,3.93,3.93 v18.441V40.536z M58,29.606c0,2.167-1.763,3.929-3.93,3.929H52c-0.553,0-1,0.448-1,1v8.414l-5-5.5V19.395 c0-3.27-2.66-5.93-5.932-5.93L16,13.514v-5.12c0-2.167,1.763-3.93,3.928-3.93l34.141,0.07c0.001,0,0.001,0,0.002,0 c2.167,0,3.93,1.763,3.93,3.93V29.606z\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'check': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M497.36,69.995c-7.532-7.545-19.753-7.558-27.285-0.032L238.582,300.845l-83.522-90.713 c-7.217-7.834-19.419-8.342-27.266-1.126c-7.841,7.217-8.343,19.425-1.126,27.266l97.126,105.481 c3.557,3.866,8.535,6.111,13.784,6.22c0.141,0.006,0.277,0.006,0.412,0.006c5.101,0,10.008-2.026,13.623-5.628L497.322,97.286 C504.873,89.761,504.886,77.54,497.36,69.995z\"/></g></g><g><g><path d=\"M492.703,236.703c-10.658,0-19.296,8.638-19.296,19.297c0,119.883-97.524,217.407-217.407,217.407 c-119.876,0-217.407-97.524-217.407-217.407c0-119.876,97.531-217.407,217.407-217.407c10.658,0,19.297-8.638,19.297-19.296 C275.297,8.638,266.658,0,256,0C114.84,0,0,114.84,0,256c0,141.154,114.84,256,256,256c141.154,0,256-114.846,256-256 C512,245.342,503.362,236.703,492.703,236.703z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'chevron-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>`,\n 'chevron-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`,\n 'chevron-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`,\n 'chevron-up': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"18 15 12 9 6 15\"></polyline></svg>`,\n 'chevrons-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline></svg>`,\n 'chevrons-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline></svg>`,\n 'clipboard': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 438.891 438.891\" style=\"enable-background:new 0 0 438.891 438.891;\" xml:space=\"preserve\"><g><g><g><path d=\"M347.968,57.503h-39.706V39.74c0-5.747-6.269-8.359-12.016-8.359h-30.824c-7.314-20.898-25.6-31.347-46.498-31.347 c-20.668-0.777-39.467,11.896-46.498,31.347h-30.302c-5.747,0-11.494,2.612-11.494,8.359v17.763H90.923 c-23.53,0.251-42.78,18.813-43.886,42.318v299.363c0,22.988,20.898,39.706,43.886,39.706h257.045 c22.988,0,43.886-16.718,43.886-39.706V99.822C390.748,76.316,371.498,57.754,347.968,57.503z M151.527,52.279h28.735 c5.016-0.612,9.045-4.428,9.927-9.404c3.094-13.474,14.915-23.146,28.735-23.51c13.692,0.415,25.335,10.117,28.212,23.51 c0.937,5.148,5.232,9.013,10.449,9.404h29.78v41.796H151.527V52.279z M370.956,399.185c0,11.494-11.494,18.808-22.988,18.808 H90.923c-11.494,0-22.988-7.314-22.988-18.808V99.822c1.066-11.964,10.978-21.201,22.988-21.42h39.706v26.645 c0.552,5.854,5.622,10.233,11.494,9.927h154.122c5.98,0.327,11.209-3.992,12.016-9.927V78.401h39.706 c12.009,0.22,21.922,9.456,22.988,21.42V399.185z\"/><path d=\"M179.217,233.569c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,233.962,179.427,233.761,179.217,233.569z\"/><path d=\"M329.16,256.034H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,256.034,329.16,256.034z\"/><path d=\"M179.217,149.977c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.364-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,150.37,179.427,150.169,179.217,149.977z\"/><path d=\"M329.16,172.442H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,172.442,329.16,172.442z\"/><path d=\"M179.217,317.16c-3.919-4.131-10.425-4.363-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,317.554,179.427,317.353,179.217,317.16z\"/><path d=\"M329.16,339.626H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,339.626,329.16,339.626z\"/></g></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'close': `<svg id=\"Capa_1\" enable-background=\"new 0 0 320.591 320.591\" height=\"512\" viewBox=\"0 0 320.591 320.591\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"close_1_\"><path d=\"m30.391 318.583c-7.86.457-15.59-2.156-21.56-7.288-11.774-11.844-11.774-30.973 0-42.817l257.812-257.813c12.246-11.459 31.462-10.822 42.921 1.424 10.362 11.074 10.966 28.095 1.414 39.875l-259.331 259.331c-5.893 5.058-13.499 7.666-21.256 7.288z\"/><path d=\"m287.9 318.583c-7.966-.034-15.601-3.196-21.257-8.806l-257.813-257.814c-10.908-12.738-9.425-31.908 3.313-42.817 11.369-9.736 28.136-9.736 39.504 0l259.331 257.813c12.243 11.462 12.876 30.679 1.414 42.922-.456.487-.927.958-1.414 1.414-6.35 5.522-14.707 8.161-23.078 7.288z\"/></g></g></svg>`,\n 'comments': `<svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m480.052 369.741c49.476-69.417 41.913-164.522-25.665-226.473-30.877-28.305-70.24-45.926-112.761-50.847-.265-.326-.536-.649-.833-.958-36.991-38.425-90.135-60.463-145.805-60.463-105.939 0-194.988 78.933-194.988 180 0 35.435 11.007 69.404 31.916 98.741l-29.209 91.706c-1.836 5.764-.03 12.065 4.579 15.982 4.617 3.924 11.13 4.678 16.511 1.941l88.827-45.167c18.242 7.855 37.586 13.009 57.618 15.354 38.642 40.636 92.073 61.443 146.738 61.443 28.416 0 56.729-5.791 82.36-16.798l88.831 45.169c2.151 1.094 4.48 1.629 6.795 1.629 10.123 0 17.38-9.865 14.295-19.553zm-361.374-25.72c-4.201-1.995-9.088-1.929-13.233.179l-63.267 32.17 20.66-64.866c1.504-4.723.579-9.883-2.473-13.788-19.866-25.43-30.367-55.415-30.367-86.716 0-82.71 74.014-150 164.99-150 36.636 0 71.905 11.099 100.514 31.086-96.348 9.688-173.51 84.942-173.51 178.914 0 29.228 7.492 57.366 21.617 82.576-8.552-2.547-16.881-5.732-24.931-9.555zm287.845 60.178c-4.085-2.077-8.976-2.202-13.233-.178-23.385 11.108-49.772 16.979-76.31 16.979-90.976 0-164.99-67.29-164.99-150s74.014-150 164.99-150 164.99 67.29 164.99 150c0 31.301-10.501 61.286-30.368 86.715-3.051 3.905-3.976 9.065-2.473 13.788l20.66 64.866z\"/><circle cx=\"255.984\" cy=\"271\" r=\"15\"/><circle cx=\"315.981\" cy=\"271\" r=\"15\"/><circle cx=\"375.977\" cy=\"271\" r=\"15\"/></svg>`,\n 'copy': `<svg height=\"682.66669pt\" viewBox=\"-21 -21 682.66669 682.66669\" width=\"682.66669pt\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m565 640h-340c-41.359375 0-75-33.640625-75-75v-340c0-41.359375 33.640625-75 75-75h340c41.359375 0 75 33.640625 75 75v340c0 41.359375-33.640625 75-75 75zm-340-440c-13.785156 0-25 11.214844-25 25v340c0 13.785156 11.214844 25 25 25h340c13.785156 0 25-11.214844 25-25v-340c0-13.785156-11.214844-25-25-25zm-125 240h-25c-13.785156 0-25-11.214844-25-25v-340c0-13.785156 11.214844-25 25-25h340c13.785156 0 25 11.214844 25 25v23.75h50v-23.75c0-41.359375-33.640625-75-75-75h-340c-41.359375 0-75 33.640625-75 75v340c0 41.359375 33.640625 75 75 75h25zm0 0\"/></svg>`,\n 'customers': `<svg id=\"Capa_1\" enable-background=\"new 0 0 183.729 183.729\" height=\"512\" viewBox=\"0 0 183.729 183.729\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"Line_1_\"><path d=\"m4.213 137.816h33.391v41.739c0 2.305 1.869 4.174 4.174 4.174h100.174c2.305 0 4.174-1.869 4.174-4.174v-41.739h33.391c2.305 0 4.174-1.869 4.174-4.174v-59.394c0-8.692-5.388-16.474-13.523-19.534l-12.021-4.55c11.569-11.249 11.827-29.747.578-41.316s-29.747-11.827-41.316-.578c-5.676 5.52-8.869 13.107-8.848 21.024-10.503-5.284-22.888-5.284-33.391 0 .042-16.136-13.005-29.251-29.141-29.294s-29.252 13.004-29.295 29.14c-.021 7.917 3.172 15.504 8.848 21.024l-12.021 4.55c-8.135 3.059-13.522 10.841-13.522 19.534v59.395c0 2.305 1.868 4.173 4.174 4.173zm41.739-19.325c.003-4.574 2.499-8.782 6.511-10.977l15.903-8.64 18.198 76.508h-40.612zm61.314-21.579-11.228 47.082v-35.395c0-2.305-1.869-4.174-4.174-4.174s-4.174 1.869-4.174 4.174v35.395l-11.227-47.082c9.785 4.452 21.018 4.452 30.803 0zm30.512 78.47h-40.612l18.198-76.508 15.903 8.64c4.012 2.195 6.509 6.404 6.511 10.977zm29.217-112.696c4.977 1.759 8.315 6.45 8.348 11.729v55.054h-29.217v-10.977c-.033-7.612-4.208-14.602-10.894-18.24l-18.032-9.81c7.797-7.122 12.236-17.197 12.23-27.757-.004-1.86-.158-3.716-.459-5.551 2.849.901 5.819 1.365 8.807 1.377 4.101.003 8.155-.865 11.896-2.546zm-50.087-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87-9.344 20.87-20.87 20.87c-4.418-.045-8.706-1.508-12.23-4.174-1.899-3.887-4.454-7.417-7.555-10.435-.699-2.015-1.066-4.129-1.085-6.261zm4.174 33.391c0 16.136-13.081 29.217-29.217 29.217s-29.218-13.081-29.218-29.217 13.081-29.217 29.217-29.217 29.218 13.081 29.218 29.217zm-96-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87c-.001 2.188-.368 4.361-1.085 6.428-3.085 2.967-5.64 6.44-7.555 10.268-3.524 2.666-7.811 4.129-12.23 4.174-11.526-.001-20.87-9.344-20.87-20.87zm-16.696 44.953c.102-5.217 3.428-9.823 8.348-11.562l17.53-6.553c3.688 1.595 7.668 2.405 11.687 2.379 2.988-.012 5.958-.477 8.807-1.377-.301 1.835-.455 3.692-.459 5.551.017 10.531 4.454 20.571 12.23 27.673l-18.031 9.892c-6.686 3.638-10.861 10.628-10.894 18.24v10.977h-29.218z\"/></g></g></svg>`,\n 'down': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m4.93934 10.9393c.58579-.5857 1.53553-.5857 2.12132 0l8.93934 8.9394 8.9393-8.9394c.5858-.5857 1.5356-.5857 2.1214 0 .5857.5858.5857 1.5356 0 2.1214l-10 10c-.5858.5857-1.5356.5857-2.1214 0l-9.99996-10c-.58579-.5858-.58579-1.5356 0-2.1214z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'earth-day': `<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"Line_Expand\" data-name=\"Line Expand\" viewBox=\"0 0 64 64\" width=\"512\" height=\"512\"><path d=\"M40,49a1,1,0,0,0,1-1,2.0006,2.0006,0,1,1,3.5947,1.2793L39.2031,56.396A1,1,0,0,0,40,58h6a1,1,0,0,0,0-2H42.0117l4.1768-5.5132A4.076,4.076,0,0,0,47,48a4,4,0,0,0-8,0A1,1,0,0,0,40,49Z\"/><path d=\"M50,49a1,1,0,0,0,1-1,2.0006,2.0006,0,1,1,3.5947,1.2793L49.2031,56.396A1,1,0,0,0,50,58h6a1,1,0,0,0,0-2H52.0117l4.1768-5.5132A4.076,4.076,0,0,0,57,48a4,4,0,0,0-8,0A1,1,0,0,0,50,49Z\"/><path d=\"M61,31H58a3,3,0,0,0-6,0H49.2586A25.0887,25.0887,0,1,0,32,48.98V61a3.0033,3.0033,0,0,0,3,3H61a3.0033,3.0033,0,0,0,3-3V34A3.0033,3.0033,0,0,0,61,31Zm-7,0a1,1,0,0,1,2,0v3a1,1,0,0,1-2,0Zm-6-6a22.9818,22.9818,0,0,1-.8094,6H44a3.0033,3.0033,0,0,0-3-3,2.96,2.96,0,0,0-.894.1512l-3.2622-5.1351a2.8447,2.8447,0,0,0-3.0928-1.2349l-1.3438.3365a.8421.8421,0,0,1-.6748-.1172l-4.1035-2.7354-.6074-3.646a.8493.8493,0,0,1,.3066-.8007l2.5137-2.0113a2.4218,2.4218,0,0,1,3.123.1431l1.6143,1.6138a1.005,1.005,0,0,0,.3555.2295l6.8564,2.5717a1.0032,1.0032,0,0,0,.7451-.0175l3.55-1.5214A22.8635,22.8635,0,0,1,48,25Zm-6,6v3a1,1,0,0,1-2,0V31a1,1,0,0,1,2,0ZM34.3625,4a23.08,23.08,0,0,1,6.7121,4.5715H38.2715L35.9932,6.293A.9964.9964,0,0,0,34.97,6.0513l-2.32.7729-2.3535-.47a.9149.9149,0,0,1,.0547-1.8032ZM16.1954,3.7551,21.1025,6.54a.6438.6438,0,0,1-.3056,1.2037l-1.8145.0327a1.0022,1.0022,0,0,0-.9629.8012L17.23,12.47l-6.6016,5.7779A.9972.9972,0,0,0,10.2861,19v2.1479l-1.6533-.4135-.6846-2.0508A.9987.9987,0,0,0,7.1,18.0049l-3.8765-.3894A23.1132,23.1132,0,0,1,16.1954,3.7551Zm-4.1817,34.75a2.8631,2.8631,0,0,0-.6768,2.4453l.5717,2.9446A22.9558,22.9558,0,0,1,2.6537,19.5685l3.6022.3617.6533,1.9575a.9982.9982,0,0,0,.706.6538l1.4546.3637-.4477.32A4.2138,4.2138,0,0,0,7.1709,28.249L9.5029,33.95a1,1,0,0,0,.6836.5918l2.1524.5381a1.3964,1.3964,0,0,1,.6992,2.2881ZM17.21,42.6382l-1.3444,3.4654q-.8406-.3654-1.6456-.7943L13.3,40.57a.8528.8528,0,0,1,.2012-.727l1.0244-1.1372a3.3966,3.3966,0,0,0-1.7022-5.5664l-1.6611-.4151-2.14-5.2324a2.2125,2.2125,0,0,1,.7617-2.6392l2.4472-1.748a.8451.8451,0,0,1,1.3125.4824l.1993.7984a1.0007,1.0007,0,0,0,.9707.7578h5.6074a.8411.8411,0,0,1,.7851.5317L22.3574,28.8a1.001,1.001,0,0,0,.7324.6089l2.4.48a1.3448,1.3448,0,0,1,.89,2.01L24.333,35.3115l-.958.3189a2.8433,2.8433,0,0,0-1.9463,2.7v1.5317l-3.8008,2.28A1.0034,1.0034,0,0,0,17.21,42.6382ZM32,34V46.89a22.7726,22.7726,0,0,1-14.2653-.0731l1.2165-3.1361,3.9922-2.3951a1.0008,1.0008,0,0,0,.4853-.8574V38.3306a.8447.8447,0,0,1,.5791-.8028l1.3086-.436a1.0008,1.0008,0,0,0,.541-.4341l2.2373-3.729a3.3447,3.3447,0,0,0-2.2119-5l-1.8691-.374-1.05-2.6226a2.8322,2.8322,0,0,0-2.6426-1.7885H15.4951l-.0107-.0406a2.8313,2.8313,0,0,0-3.1983-2.1167V19.4536l6.5147-5.7012a1.0012,1.0012,0,0,0,.3222-.5537l.6973-3.437,1.0127-.018a2.6436,2.6436,0,0,0,1.2559-4.9429L18.708,2.882a22.861,22.861,0,0,1,11.365-.3113,2.9143,2.9143,0,0,0-.17,5.7442l2.6143.5225a.9924.9924,0,0,0,.5127-.0317l1.9853-.6617L37.15,10.2783a.9993.9993,0,0,0,.707.293h5.0358a23.0723,23.0723,0,0,1,2.3158,3.4555l-3.0908,1.3248L35.84,12.9966l-1.4609-1.461a4.2624,4.2624,0,0,0-3.0508-1.25,4.3982,4.3982,0,0,0-2.7363.96l-2.5137,2.0112a2.85,2.85,0,0,0-1.0293,2.6905l.6787,4.0742a.9971.9971,0,0,0,.4317.6675l4.4638,2.9756a2.8513,2.8513,0,0,0,2.27.3935l1.3437-.3364a.8466.8466,0,0,1,.92.3672L38.4985,29.35A2.98,2.98,0,0,0,38,31H35A3.0033,3.0033,0,0,0,32,34ZM62,61a1.0009,1.0009,0,0,1-1,1H35a1.0009,1.0009,0,0,1-1-1V41H62Zm0-22H34V34a1.0009,1.0009,0,0,1,1-1h3v1a3,3,0,0,0,6,0V33h8v1a3,3,0,0,0,6,0V33h3a1.0009,1.0009,0,0,1,1,1Z\"/></svg>`,\n 'employee': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m44.585 14.585c0-6.939-5.646-12.585-12.585-12.585s-12.585 5.646-12.585 12.585 5.646 12.585 12.585 12.585 12.585-5.646 12.585-12.585zm-23.17 0c0-5.837 4.749-10.585 10.585-10.585s10.585 4.748 10.585 10.585-4.749 10.585-10.585 10.585-10.585-4.748-10.585-10.585z\"/><path d=\"m36.468 28.62s-.003 0-.005 0c-.073 0-.143-.011-.216-.011h-8.492c-.073 0-.143.01-.215.011-.003 0-.006 0-.01 0-9.353.122-16.926 7.758-16.926 17.139v15.241c0 .553.448 1 1 1h40.793c.552 0 1-.447 1-1v-15.241c0-9.382-7.575-17.019-16.929-17.139zm-4.468 7.477h1.306l4.436 18.002-5.741 5.515-5.741-5.515 4.436-18.002h1.306zm0-2h-1.432l-1.507-3.488h5.879l-1.507 3.488h-1.432zm-19.397 11.662c0-8.066 6.341-14.661 14.298-15.107l1.959 4.533-4.681 18.996c-.085.347.021.713.278.96l5.059 4.859h-16.913zm38.794 14.241h-16.913l5.059-4.859c.257-.247.364-.613.278-.96l-4.681-18.996 1.959-4.533c7.956.446 14.298 7.042 14.298 15.107z\"/></svg>`,\n 'eye-closed': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.26408 6.66615C1.57529 6.4126 2.03769 6.45387 2.29687 6.75831C4.01035 8.77104 7.1184 11.2826 12 11.2826C16.8815 11.2826 19.9895 8.77106 21.703 6.75833C21.9622 6.45389 22.4246 6.41263 22.7358 6.66617C23.047 6.91972 23.0892 7.37206 22.83 7.67651C22.3016 8.29723 21.6469 8.96667 20.8577 9.60857C20.9001 9.65503 20.937 9.7077 20.9669 9.7661L22.9224 13.5921C23.1035 13.9465 22.9567 14.3774 22.5945 14.5546C22.2322 14.7318 21.7917 14.5881 21.6106 14.2338L19.6856 10.4674C18.4652 11.2689 16.9983 11.959 15.2651 12.3565L16.1412 16.6418C16.2206 17.0303 15.9631 17.4082 15.5659 17.4859C15.1688 17.5636 14.7825 17.3117 14.703 16.9232L13.8209 12.6086C13.2402 12.6793 12.6334 12.7173 12 12.7173C11.3665 12.7173 10.7597 12.6793 10.1789 12.6086L9.29684 16.9232C9.21741 17.3117 8.83107 17.5636 8.43393 17.4859C8.03679 17.4082 7.77924 17.0303 7.85866 16.6418L8.73478 12.3564C7.30485 12.0285 6.0562 11.5014 4.97768 10.8769L2.32003 14.3434C2.07703 14.6603 1.61738 14.7246 1.29337 14.4869C0.96937 14.2491 0.903705 13.7995 1.14671 13.4825L3.75501 10.0804C2.6858 9.30207 1.8295 8.45132 1.16987 7.67649C0.910686 7.37204 0.952866 6.9197 1.26408 6.66615Z\" fill=\"black\"/></svg>`,\n 'eye-off': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`,\n 'eye-open': `<svg clip-rule=\"evenodd\" fill-rule=\"evenodd\" height=\"512\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Icon\"><path d=\"m12 10.75c-2.346 0-4.25 1.904-4.25 4.25s1.904 4.25 4.25 4.25 4.25-1.904 4.25-4.25-1.904-4.25-4.25-4.25zm0 1.5c1.518 0 2.75 1.232 2.75 2.75s-1.232 2.75-2.75 2.75-2.75-1.232-2.75-2.75 1.232-2.75 2.75-2.75z\"/><path d=\"m22.53 12.97s-.604-.604-1.514-1.515c-4.98-4.979-13.052-4.979-18.032 0-.91.911-1.514 1.515-1.514 1.515-.293.292-.293.768 0 1.06.292.293.768.293 1.06 0 0 0 .604-.604 1.515-1.514 4.393-4.394 11.517-4.394 15.91 0 .911.91 1.515 1.514 1.515 1.514.292.293.768.293 1.06 0 .293-.292.293-.768 0-1.06z\"/><path d=\"m18.85 6.867-1.5 2.598c-.206.358-.083.817.275 1.024s.818.084 1.025-.274l1.5-2.598c.206-.359.083-.818-.275-1.025s-.818-.084-1.025.275z\"/><path d=\"m11.25 5.5v3c0 .414.336.75.75.75s.75-.336.75-.75v-3c0-.414-.336-.75-.75-.75s-.75.336-.75.75z\"/><path d=\"m3.85 7.617 1.5 2.598c.207.358.667.481 1.025.274s.481-.666.275-1.024l-1.5-2.598c-.207-.359-.667-.482-1.025-.275s-.481.666-.275 1.025z\"/></g></svg>`,\n 'eye': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle></svg>`,\n 'globe': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M256,0C114.508,0,0,114.497,0,256c0,141.492,114.497,256,256,256c141.492,0,256-114.497,256-256 C512,114.508,397.503,0,256,0z M156.946,52.753c-7.747,21.099-14.25,42.547-19.499,64.295 c-15.341-4.661-30.432-10.25-45.243-16.762C110.958,80.583,132.812,64.54,156.946,52.753z M72.338,124.24 c19.171,8.878,38.791,16.3,58.802,22.253c-5.806,30.993-9.126,62.538-9.914,94.507H30.502 C33.265,198.559,47.728,158.39,72.338,124.24z M72.338,387.76C47.728,353.61,33.265,313.441,30.502,271h90.724 c0.788,31.969,4.108,63.514,9.914,94.507C111.129,371.46,91.51,378.882,72.338,387.76z M92.204,411.715 c14.811-6.513,29.901-12.102,45.243-16.762c5.25,21.748,11.752,43.196,19.499,64.295 C132.824,447.467,110.968,431.427,92.204,411.715z M241,481.498c-15.754-1.025-31.197-3.655-46.135-7.825 c-11.865-28.12-21.335-56.952-28.398-86.363c24.318-5.437,49.199-8.616,74.533-9.515V481.498z M241,347.777 c-27.448,0.907-54.405,4.307-80.751,10.175c-5.234-28.529-8.25-57.55-9.013-86.952H241V347.777z M241,241h-89.764 c0.763-29.402,3.779-58.423,9.013-86.952c26.346,5.868,53.303,9.268,80.751,10.175V241z M241,134.205 c-25.334-0.899-50.215-4.078-74.533-9.515C173.53,95.279,183,66.447,194.865,38.327c14.938-4.17,30.381-6.8,46.135-7.825V134.205z M439.662,124.24c24.61,34.15,39.073,74.319,41.836,116.76h-90.724c-0.788-31.969-4.108-63.514-9.914-94.507 C400.871,140.54,420.49,133.118,439.662,124.24z M419.796,100.285c-14.811,6.513-29.901,12.102-45.243,16.762 c-5.25-21.748-11.752-43.196-19.499-64.295C379.176,64.533,401.032,80.573,419.796,100.285z M271,30.502 c15.754,1.025,31.197,3.655,46.135,7.825C329,66.447,338.47,95.279,345.533,124.69c-24.318,5.437-49.199,8.616-74.533,9.515 V30.502z M271,164.223c27.448-0.907,54.405-4.307,80.751-10.175c5.234,28.529,8.25,57.55,9.013,86.952H271V164.223z M317.134,473.672c-14.937,4.171-30.38,6.801-46.134,7.826V377.795c25.334,0.899,50.215,4.078,74.533,9.515 C338.469,416.721,329,445.553,317.134,473.672z M271,347.777V271h89.764c-0.763,29.402-3.779,58.423-9.013,86.952 C325.405,352.084,298.448,348.684,271,347.777z M355.054,459.247c7.747-21.099,14.25-42.547,19.499-64.295 c15.341,4.661,30.432,10.25,45.243,16.762C401.042,431.417,379.188,447.46,355.054,459.247z M439.662,387.76 c-19.171-8.878-38.791-16.3-58.802-22.253c5.806-30.993,9.126-62.538,9.914-94.507h90.724 C478.735,313.441,464.272,353.61,439.662,387.76z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'home': `<svg id=\"Layer_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m498.147 222.58-57.298-57.298v-150.282c0-8.284-6.716-15-15-15h-64.267c-8.284 0-15 6.716-15 15v56.017l-57.174-57.174c-8.926-8.927-20.794-13.843-33.418-13.843-12.625 0-24.494 4.916-33.42 13.843l-208.738 208.739c-18.428 18.427-18.428 48.411 0 66.838 8.927 8.927 20.795 13.843 33.419 13.843 2.645 0 5.253-.229 7.812-.651v154.223c0 30.419 24.748 55.166 55.167 55.166h97.561c8.284 0 15-6.716 15-15v-113.534h66.4v113.533c0 8.284 6.716 15 15 15h97.56c30.419 0 55.166-24.747 55.166-55.166v-154.223c2.558.423 5.165.651 7.81.651h.003c12.622 0 24.49-4.916 33.419-13.844 8.926-8.926 13.842-20.794 13.843-33.418-.002-12.624-4.918-24.493-13.845-33.42zm-121.564-192.58h34.267v105.283l-34.267-34.268zm25.167 452h-82.56v-113.533c0-8.284-6.716-15-15-15h-96.4c-8.284 0-15 6.716-15 15v113.533h-82.561c-13.877 0-25.167-11.289-25.167-25.166v-171.809l170.928-170.924 170.926 170.926v171.808c0 13.876-11.289 25.165-25.166 25.165zm75.186-213.795c-3.263 3.262-7.598 5.058-12.208 5.058-4.609-.001-8.944-1.796-12.204-5.055-.001-.001-.002-.002-.004-.004l-185.923-185.923c-5.856-5.859-15.354-5.857-21.213 0l-185.925 185.922c-.002.002-.003.003-.005.005-3.26 3.26-7.593 5.055-12.203 5.055s-8.945-1.795-12.206-5.056c-6.73-6.73-6.73-17.682 0-24.412l208.738-208.739c3.26-3.26 7.596-5.056 12.207-5.056 4.61 0 8.945 1.796 12.205 5.056l82.781 82.78 125.958 125.957c6.731 6.73 6.731 17.683.002 24.412z\"/></svg>`,\n 'important-1': `<svg id=\"Layer_1\" enable-background=\"new 0 0 100 100\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m53.6308289 62.660614h-7.3402634c-2.3325844 0-4.2989349-1.739502-4.5834389-4.0546722l-6.2579918-50.924778c-.3383217-2.7531052 1.8096237-5.1811638 4.5834389-5.1811638h19.9348373c2.7766304 0 4.9254341 2.4327488 4.5825768 5.1881289l-6.3365822 50.924778c-.287693 2.3120809-2.2526665 4.0477071-4.5825767 4.0477071z\"/><path d=\"m63.6071815 83.8928223c0 7.4706039-6.1365699 13.6071777-13.6071815 13.6071777s-13.6071815-6.1365738-13.6071815-13.6071777c0-7.4706116 6.13657-13.6071777 13.6071815-13.6071777s13.6071815 6.1365585 13.6071815 13.6071777\"/></svg>`,\n 'important': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m46.0722656 25.6606445c-.390625.390625-.390625 1.0239258 0 1.4140625 1.3154297 1.315918 2.0400391 3.0649414 2.0400391 4.925293s-.7246094 3.609375-2.0400391 4.925293c-.390625.3901367-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c1.6933594-1.6933594 2.6259766-3.9448242 2.6259766-6.3393555s-.9326172-4.6459961-2.6259766-6.3393555c-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m50.9248047 20.8085938c-.390625.390625-.390625 1.0234375 0 1.4140625 5.390625 5.3911133 5.390625 14.1635742 0 19.5546875-.390625.390625-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c6.1708984-6.1708984 6.1708984-16.2119141 0-22.3828125-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m17.9277344 25.6606445c-.390625-.390625-1.0234375-.390625-1.4140625 0-1.6933594 1.6933594-2.6259766 3.9448242-2.6259766 6.3393555s.9326172 4.6459961 2.6259766 6.3393555c.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0239258 0-1.4140625-1.3154297-1.315918-2.0400391-3.0649414-2.0400391-4.925293s.7246094-3.609375 2.0400391-4.925293c.390625-.3901367.390625-1.0234375 0-1.4140625z\"/><path d=\"m13.0751953 20.8085938c-.390625-.390625-1.0234375-.390625-1.4140625 0-6.1708984 6.1708984-6.1708984 16.2119141 0 22.3828125.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0234375 0-1.4140625-5.390625-5.3911133-5.390625-14.1635742 0-19.5546875.390625-.390625.390625-1.0234375 0-1.4140625z\"/><path d=\"m39.2626953 2h-14.5253906c-.2744141 0-.5361328.112793-.7255859.3115234-.1884766.1987305-.2871094.4663086-.2734375.7402344l2.0253906 38.9492188c.0283203.5317383.4667969.9482422.9990234.9482422h10.4746094c.5322266 0 .9707031-.4165039.9990234-.9482422l2.0253907-38.9492188c.0136719-.2739258-.0849609-.5415039-.2734375-.7402344-.1894531-.1987305-.4511719-.3115234-.7255859-.3115234zm-2.9746094 38.9492188h-8.5761719l-1.9208984-36.9492188h12.4179688l-1.9208984 36.9492188z\"/><path d=\"m32 47.3198242c-4.046875 0-7.3398438 3.2924805-7.3398438 7.3398438s3.2929688 7.340332 7.3398438 7.340332 7.3398438-3.2929688 7.3398438-7.340332-3.2929688-7.3398438-7.3398438-7.3398438zm0 12.6801758c-2.9443359 0-5.3398438-2.3955078-5.3398438-5.340332 0-2.9443359 2.3955078-5.3398438 5.3398438-5.3398438s5.3398438 2.3955078 5.3398438 5.3398438c0 2.9448242-2.3955078 5.340332-5.3398438 5.340332z\"/></svg>`,\n 'key': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M463.743,48.257c-64.343-64.343-169.037-64.342-233.38,0c-43.946,43.946-59.206,108.725-40.185,167.483L4.395,401.524 C1.581,404.337,0,408.153,0,412.132v84.866C0,505.284,6.717,512,15.002,512h84.866c3.98,0,7.794-1.581,10.609-4.395l21.22-21.22 c3.241-3.242,4.823-7.787,4.293-12.341l-2.648-22.783l31.584-2.977c7.172-0.676,12.852-6.355,13.528-13.527l2.979-31.588 l22.785,2.648c4.254,0.497,8.512-0.851,11.71-3.698c3.196-2.846,5.025-6.923,5.025-11.204v-27.938h27.43 c3.949,0,7.738-1.557,10.547-4.333l37.272-36.842c58.772,19.051,123.583,3.794,167.542-40.166 C528.085,217.294,528.085,112.599,463.743,48.257z M442.527,260.421c-37.866,37.865-94.666,49.684-144.703,30.114 c-5.522-2.159-11.796-0.865-16.011,3.302l-39.593,39.136H205.95c-8.285,0-15.002,6.717-15.002,15.002v26.093l-21.28-2.473 c-4.009-0.465-8.035,0.703-11.172,3.241c-3.136,2.539-5.118,6.234-5.497,10.252l-3.253,34.489l-34.486,3.25 c-4.018,0.379-7.713,2.36-10.253,5.497c-2.539,3.136-3.708,7.164-3.242,11.172l3.582,30.804l-11.694,11.697h-63.65v-63.649 l188.097-188.097c4.214-4.214,5.535-10.523,3.364-16.073c-19.572-50.038-7.751-106.836,30.114-144.703 c52.646-52.644,138.304-52.644,190.948,0C495.17,122.118,495.17,207.777,442.527,260.421z\"/></g></g><g><g><path d=\"M421.309,90.69c-17.548-17.549-46.102-17.548-63.649,0c-17.548,17.548-17.548,46.101,0,63.649 c17.547,17.548,46.101,17.55,63.649,0C438.857,136.791,438.857,108.238,421.309,90.69z M400.093,133.123 c-5.849,5.849-15.366,5.85-21.216,0c-5.849-5.849-5.849-15.366,0-21.216c5.865-5.864,15.352-5.864,21.216,0 C405.957,117.771,405.956,127.259,400.093,133.123z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'left': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m21.0607 4.93934c.5857.58579.5857 1.53553 0 2.12132l-8.9394 8.93934 8.9394 8.9393c.5857.5858.5857 1.5356 0 2.1214-.5858.5857-1.5356.5857-2.1214 0l-9.99996-10c-.58579-.5858-.58579-1.5356 0-2.1214l9.99996-9.99996c.5858-.58579 1.5356-.58579 2.1214 0z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'list': `<svg viewBox=\"0 0 25 25\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Todo\"><path d=\"m20.4 12.349a.5.5 0 0 1 -.5.5h-8.612a.5.5 0 0 1 0-1h8.612a.5.5 0 0 1 .5.5zm-9.112-5.549h8.612a.5.5 0 0 0 0-1h-8.612a.5.5 0 0 0 0 1zm-2.9-2.271-2.05 2.418-.84-1.1a.5.5 0 1 0 -.795.606l1.217 1.6a.5.5 0 0 0 .385.2h.013a.5.5 0 0 0 .382-.185l2.451-2.895a.5.5 0 1 0 -.763-.647zm11.512 13.371h-8.612a.5.5 0 0 0 0 1h8.612a.5.5 0 0 0 0-1zm-10.8-5.551a2.249 2.249 0 1 1 -2.251-2.249 2.252 2.252 0 0 1 2.251 2.249zm-1 0a1.249 1.249 0 1 0 -1.251 1.251 1.25 1.25 0 0 0 1.251-1.251zm1 6.053a2.249 2.249 0 1 1 -2.249-2.249 2.251 2.251 0 0 1 2.249 2.247zm-1 0a1.249 1.249 0 1 0 -1.251 1.248 1.25 1.25 0 0 0 1.251-1.25z\"/></g></svg>`,\n 'load': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m12 23c-6.1 0-11-4.9-11-11 0-.6.4-1 1-1s1 .4 1 1c0 5 4 9 9 9s9-4 9-9-4-9-9-9c-.6 0-1-.4-1-1s.4-1 1-1c6.1 0 11 4.9 11 11s-4.9 11-11 11z\" fill=\"rgb(0,0,0)\"/></g></svg>`,\n 'location': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M341.476,338.285c54.483-85.493,47.634-74.827,49.204-77.056C410.516,233.251,421,200.322,421,166 C421,74.98,347.139,0,256,0C165.158,0,91,74.832,91,166c0,34.3,10.704,68.091,31.19,96.446l48.332,75.84 C118.847,346.227,31,369.892,31,422c0,18.995,12.398,46.065,71.462,67.159C143.704,503.888,198.231,512,256,512 c108.025,0,225-30.472,225-90C481,369.883,393.256,346.243,341.476,338.285z M147.249,245.945 c-0.165-0.258-0.337-0.51-0.517-0.758C129.685,221.735,121,193.941,121,166c0-75.018,60.406-136,135-136 c74.439,0,135,61.009,135,136c0,27.986-8.521,54.837-24.646,77.671c-1.445,1.906,6.094-9.806-110.354,172.918L147.249,245.945z M256,482c-117.994,0-195-34.683-195-60c0-17.016,39.568-44.995,127.248-55.901l55.102,86.463 c2.754,4.322,7.524,6.938,12.649,6.938s9.896-2.617,12.649-6.938l55.101-86.463C411.431,377.005,451,404.984,451,422 C451,447.102,374.687,482,256,482z\"/></g></g><g><g><path d=\"M256,91c-41.355,0-75,33.645-75,75s33.645,75,75,75c41.355,0,75-33.645,75-75S297.355,91,256,91z M256,211 c-24.813,0-45-20.187-45-45s20.187-45,45-45s45,20.187,45,45S280.813,211,256,211z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'lock': `<svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Layer_11\" fill=\"rgb(0,0,0)\" data-name=\"Layer 11\"><path d=\"m24 11.57h-.53v-3.1a7.47 7.47 0 1 0 -14.94 0v3.1h-.53a4 4 0 0 0 -4 4v11.43a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-11.43a4 4 0 0 0 -4-4zm-13.47-3.1a5.47 5.47 0 1 1 10.94 0v3.1h-10.94zm15.47 18.53a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2-2v-11.43a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\"/><path d=\"m16 17.926a1.948 1.948 0 0 0 -1.354 3.348v2.371a1 1 0 0 0 1 1h.708a1 1 0 0 0 1-1v-2.371a1.948 1.948 0 0 0 -1.354-3.348z\"/></g></svg>`,\n 'minus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m18 11h-12c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\" fill=\"rgb(0,0,0)\"/></svg>`,\n 'padlock': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M96,437v30c0,16.569,13.431,30,30,30h300c16.569,0,30-13.431,30-30V247c0-16.569-13.431-30-30-30H126c-16.569,0-30,13.431-30,30v30&#10;&#9;&#9;\"/><rect x=\"56\" y=\"277\" style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" width=\"80\" height=\"160\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"136\" y1=\"357\" x2=\"56\" y2=\"357\"/><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M196,217v-62c0-44.183,35.817-80,80-80h0c44.183,0,80,35.817,80,80v62h60v-62c0-77.32-62.68-140-140-140h0&#10;&#9;&#9;c-77.32,0-140,62.68-140,140v62H196z\"/><circle style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" cx=\"276\" cy=\"357\" r=\"30\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"276\" y1=\"387\" x2=\"276\" y2=\"417\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'plus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-rule=\"evenodd\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"><path d=\"m12.0313 4.25c.4142.00054.7496.33677.749.75098l-.0183 14.00002c-.0006.4142-.3368.7495-.751.749s-.7496-.3368-.749-.751l.0183-13.99998c.0006-.41422.3368-.74956.751-.74902z\"/><path d=\"m4.25 12c0-.4142.33579-.75.75-.75h14c.4142 0 .75.3358.75.75s-.3358.75-.75.75h-14c-.41421 0-.75-.3358-.75-.75z\"/></g></svg>`,\n 'question': `<svg id=\"Layer_1\" enable-background=\"new 0 0 64 64\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"LWPOLYLINE\"><g><path d=\"m31.321 38.904c-.006 0-.012 0-.018 0-1.104-.01-1.992-.913-1.982-2.018l.009-1c0-.057.003-.115.009-.172.277-2.909 2.208-4.692 3.761-6.125.526-.486 1.024-.945 1.448-1.424.517-.583 1.267-1.777.478-3.218-.909-1.664-3.129-2.135-4.854-1.74-1.802.412-2.466 1.951-2.702 2.831-.286 1.067-1.383 1.7-2.45 1.415-1.067-.286-1.7-1.383-1.415-2.45.797-2.977 2.865-5.052 5.673-5.695 3.779-.863 7.585.664 9.256 3.719 1.391 2.544 1.01 5.529-.995 7.791-.557.628-1.152 1.178-1.728 1.709-1.435 1.325-2.332 2.211-2.484 3.49l-.008.903c-.008 1.101-.902 1.984-1.998 1.984z\"/></g></g><g id=\"POINT\"><g><path d=\"m31.32 44.9c-.52 0-1.04-.21-1.41-.58-.38-.37-.59-.89-.59-1.42 0-.52.21-1.04.59-1.41.74-.74 2.08-.74 2.82 0 .38.37.59.89.59 1.41 0 .53-.21 1.04-.58 1.42-.38.37-.89.58-1.42.58z\"/></g></g><g id=\"CIRCLE_2_\"><g><path d=\"m31.923 57.997c-2.275 0-4.53-.296-6.703-.881-9.364-2.519-16.696-10.276-18.679-19.763-2.021-9.665 1.709-19.825 9.504-25.884 4.506-3.503 10.189-5.433 16.003-5.433 4.025 0 8.022.936 11.56 2.705 8.737 4.371 14.382 13.503 14.382 23.266 0 7.966-3.759 15.644-10.055 20.538-4.522 3.516-10.209 5.452-16.012 5.452zm.126-47.961c-4.929 0-9.741 1.63-13.548 4.591-6.597 5.128-9.755 13.727-8.044 21.907 1.678 8.025 7.881 14.588 15.803 16.719 1.834.493 3.74.744 5.663.744h.001c4.918 0 9.732-1.637 13.557-4.61 5.329-4.142 8.51-10.639 8.51-17.38 0-8.261-4.777-15.989-12.171-19.688-2.986-1.493-6.364-2.283-9.771-2.283z\"/></g></g></g></svg>`,\n 'right': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m10.9393 4.93934c.5858-.58579 1.5356-.58579 2.1214 0l10 9.99996c.5857.5858.5857 1.5356 0 2.1214l-10 10c-.5858.5857-1.5356.5857-2.1214 0-.5857-.5858-.5857-1.5356 0-2.1214l8.9394-8.9393-8.9394-8.93934c-.5857-.58579-.5857-1.53553 0-2.12132z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'setting': `<svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m489.514 296.695-21.3-17.534c-14.59-12.011-14.564-34.335.001-46.322l21.299-17.534c15.157-12.479 19.034-33.877 9.218-50.882l-42.058-72.846c-9.818-17.004-30.292-24.344-48.674-17.458l-25.835 9.679c-17.696 6.628-37.016-4.551-40.117-23.161l-4.535-27.214c-3.228-19.366-19.821-33.423-39.455-33.423h-84.115c-19.635 0-36.229 14.057-39.456 33.424l-4.536 27.213c-3.107 18.643-22.453 29.778-40.116 23.162l-25.835-9.68c-18.383-6.886-38.855.455-48.674 17.458l-42.057 72.845c-9.817 17.003-5.941 38.402 9.218 50.882l21.299 17.534c14.592 12.012 14.563 34.334 0 46.322l-21.3 17.534c-15.158 12.48-19.035 33.879-9.218 50.882l42.058 72.846c9.818 17.003 30.286 24.344 48.674 17.458l25.834-9.679c17.699-6.631 37.015 4.556 40.116 23.161l4.536 27.212c3.228 19.369 19.822 33.426 39.456 33.426h84.115c19.634 0 36.228-14.057 39.455-33.424l4.535-27.212c3.106-18.638 22.451-29.781 40.117-23.161l25.836 9.678c18.387 6.887 38.856-.454 48.674-17.458l42.059-72.847c9.815-17.003 5.938-38.402-9.219-50.881zm-67.481 103.728-25.835-9.679c-41.299-15.471-86.37 10.63-93.605 54.043l-4.535 27.213h-84.115l-4.536-27.213c-7.249-43.497-52.386-69.484-93.605-54.043l-25.835 9.679-42.057-72.846 21.299-17.534c34.049-28.03 33.978-80.114 0-108.086l-21.299-17.534 42.058-72.846 25.834 9.679c41.3 15.47 86.37-10.63 93.605-54.043l4.535-27.213h84.115l4.535 27.213c7.25 43.502 52.389 69.481 93.605 54.043l25.835-9.679 42.067 72.836s-.003.003-.011.009l-21.298 17.534c-34.048 28.028-33.98 80.113-.001 108.086l21.3 17.534zm-166.033-243.09c-54.405 0-98.667 44.262-98.667 98.667s44.262 98.667 98.667 98.667 98.667-44.262 98.667-98.667-44.262-98.667-98.667-98.667zm0 157.334c-32.349 0-58.667-26.318-58.667-58.667s26.318-58.667 58.667-58.667 58.667 26.318 58.667 58.667-26.318 58.667-58.667 58.667z\"/></svg>`,\n 'settings': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M493.758,234.717h-86.347c-10.076,0-18.242,8.166-18.242,18.242c0,10.076,8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242C512,242.884,503.834,234.717,493.758,234.717z\"/></g></g><g><g><path d=\"M275.458,234.717H18.242C8.166,234.717,0,242.884,0,252.96c0,10.076,8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242C293.701,242.884,285.534,234.717,275.458,234.717z\"/></g></g><g><g><path d=\"M341.131,169.045c-46.275,0-83.914,37.646-83.914,83.914c0,46.275,37.646,83.915,83.914,83.915 c46.268,0,83.914-37.64,83.914-83.915C425.045,206.691,387.405,169.045,341.131,169.045z M341.131,300.39 c-26.153,0-47.43-21.277-47.43-47.43c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.436,21.277,47.436,47.43 C388.567,279.113,367.29,300.39,341.131,300.39z\"/></g></g><g><g><path d=\"M104.589,385.52H18.242C8.166,385.52,0,393.687,0,403.763s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,385.52,104.589,385.52z\"/></g></g><g><g><path d=\"M493.758,385.52H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,385.52,493.758,385.52z\"/></g></g><g><g><path d=\"M170.869,319.848c-46.269,0-83.914,37.64-83.914,83.914s37.646,83.915,83.914,83.915s83.914-37.646,83.914-83.914 S217.138,319.848,170.869,319.848z M170.869,451.199c-26.153,0-47.43-21.277-47.43-47.43c0-26.159,21.277-47.436,47.43-47.436 c26.153,0,47.43,21.277,47.43,47.436C218.299,429.922,197.023,451.199,170.869,451.199z\"/></g></g><g><g><path d=\"M104.589,89.995H18.242C8.166,89.995,0,98.162,0,108.238s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,89.995,104.589,89.995z\"/></g></g><g><g><path d=\"M493.758,89.995H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,89.995,493.758,89.995z\"/></g></g><g><g><path d=\"M170.869,24.323c-46.269,0-83.914,37.646-83.914,83.914c0,46.268,37.646,83.914,83.914,83.914s83.914-37.64,83.914-83.914 C254.784,61.963,217.138,24.323,170.869,24.323z M170.869,155.667c-26.153,0-47.43-21.277-47.43-47.43 c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.43,21.277,47.43,47.43C218.299,134.391,197.023,155.667,170.869,155.667z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'square-rounded-dashed': `<svg fill=\"none\" height=\"25\" viewBox=\"0 0 24 25\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m11.9979 2.0271h.0042c.6824 0 1.3167 0 1.9043.00498.4142.00351.7471.34213.7436.75633s-.3422.74713-.7564.74362c-.5806-.00493-1.2089-.00493-1.8936-.00493s-1.313 0-1.8937.00493c-.41416.00351-.75278-.32942-.75629-.74362s.32941-.75282.74359-.75633c.5876-.00498 1.2219-.00498 1.9043-.00498zm-4.96054.86429c.07573.40723-.19299.79875-.60022.87449-.9433.17544-1.55071.46794-2.01557.93279-.46485.46486-.75735 1.07227-.93279 2.01557-.07574.40723-.46726.67595-.87449.60022-.40723-.07574-.67596-.46727-.60022-.8745.21113-1.13518.60236-2.05746 1.34684-2.80195.74449-.74449 1.66677-1.13572 2.80195-1.34684.40723-.07574.79876.19299.8745.60022zm9.92524 0c.0758-.40723.4673-.67596.8745-.60022 1.1352.21112 2.0575.60236 2.802 1.34684.7445.74449 1.1357 1.66677 1.3468 2.80195.0758.40723-.193.79876-.6002.8745-.4072.07573-.7987-.19299-.8745-.60022-.1754-.9433-.4679-1.55071-.9328-2.01557-.4648-.46485-1.0722-.75735-2.0155-.93279-.4073-.07574-.676-.46726-.6003-.87449zm-14.45129 6.73574c.4142.00351.74713.34213.74362.75637-.00492.5806-.00493 1.2089-.00493 1.8936s.00001 1.3131.00493 1.8937c.00351.4142-.32942.7528-.74362.7563-.41419.0036-.75282-.3294-.75633-.7436-.00498-.5876-.00498-1.2219-.00498-1.9043v-.0042c0-.6824 0-1.3167.00498-1.9043.00351-.41416.34213-.74709.75633-.74357zm18.97739 0c.4142-.00352.7528.32941.7563.74357.005.5878.005 1.2223.005 1.9048v.0039c0 .6823 0 1.3166-.005 1.9041-.0035.4142-.3421.7472-.7563.7436-.4142-.0035-.7471-.3421-.7436-.7563.0049-.5806.0049-1.209.0049-1.8937s0-1.313-.0049-1.8936c-.0035-.41424.3294-.75286.7436-.75637zm-18.87441 7.61257c.40723-.0757.79875.193.87449.6003.17544.9433.46794 1.5507.93279 2.0155.46486.4649 1.07227.7574 2.01557.9328.40723.0758.67595.4673.60022.8745-.07574.4072-.46727.676-.8745.6002-1.13518-.2111-2.05746-.6023-2.80195-1.3468s-1.13571-1.6668-1.34684-2.802c-.07574-.4072.19299-.7987.60022-.8745zm18.77141 0c.4072.0758.676.4673.6002.8745-.2111 1.1352-.6023 2.0575-1.3468 2.802s-1.6668 1.1357-2.802 1.3468c-.4072.0758-.7987-.193-.8745-.6002-.0757-.4072.193-.7987.6003-.8745.9433-.1754 1.5507-.4679 2.0155-.9328.4649-.4648.7574-1.0722.9328-2.0155.0758-.4073.4673-.676.8745-.6003zm-12.03552 4.5261c.00351-.4142.34214-.7471.75632-.7436.5806.0049 1.2089.0049 1.8935.0049.6847 0 1.313 0 1.8936-.0049.4142-.0035.7529.3294.7564.7436s-.3294.7528-.7436.7563c-.5876.005-1.2218.005-1.9041.005h-.0039c-.6824 0-1.3169 0-1.9046-.005-.4142-.0035-.74713-.3421-.74362-.7563z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'time': `<svg id=\"Capa_1\" enable-background=\"new 0 0 359.286 359.286\" height=\"512\" viewBox=\"0 0 359.286 359.286\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g><path d=\"m179.643 359.286c99.043 0 179.643-80.6 179.643-179.643s-80.599-179.643-179.643-179.643-179.643 80.6-179.643 179.643 80.6 179.643 179.643 179.643zm0-335.334c85.869 0 155.691 69.821 155.691 155.691s-69.821 155.691-155.691 155.691-155.691-69.821-155.691-155.691 69.822-155.691 155.691-155.691z\"/><path d=\"m232.039 236.89c2.216 1.796 4.85 2.635 7.485 2.635 3.533 0 7.006-1.557 9.341-4.491 4.132-5.15 3.293-12.695-1.856-16.827l-55.39-44.312v-90.061c0-6.587-5.389-11.976-11.976-11.976s-11.976 5.389-11.976 11.976v95.81c0 3.653 1.677 7.066 4.491 9.341z\"/></g></g></svg>`,\n 'trash': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/></svg>`,\n 'up': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 32 32\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m14.9393 8.93934c.5858-.58579 1.5356-.58579 2.1214 0l10 9.99996c.5857.5858.5857 1.5356 0 2.1214-.5858.5857-1.5356.5857-2.1214 0l-8.9393-8.9394-8.93934 8.9394c-.58579.5857-1.53553.5857-2.12132 0-.58579-.5858-.58579-1.5356 0-2.1214z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'user': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>`,\n 'users': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M437.76,195.421c14.561-14.261,23.04-33.742,23.04-54.621c0-42.346-34.45-76.8-76.8-76.8 c-13.992,0-27.758,3.846-39.825,11.125c-4.033,2.438-5.333,7.679-2.9,11.717c2.433,4.038,7.683,5.325,11.717,2.9 c9.408-5.675,20.125-8.675,31.008-8.675c32.933,0,59.733,26.796,59.733,59.733c0,20.283-10.158,38.979-27.208,50.037 c-14.317,9.392-32.467,12.1-49.042,7.379c-4.483-1.292-9.25,1.325-10.55,5.858c-1.292,4.533,1.333,9.254,5.867,10.55 c6.9,1.975,14.033,2.975,21.2,2.975c13.418,0,26.388-3.66,37.903-10.27c43.806,15.873,73.03,57.232,73.03,104.137v42.667h-77.812 c-6.044-56.996-41.902-106.872-94.205-130.555c16.644-16.946,26.95-40.138,26.95-65.711C349.867,106.108,307.758,64,256,64 c-51.758,0-93.867,42.108-93.867,93.867c0,25.581,10.312,48.78,26.965,65.728c-17.602,7.997-33.927,19.185-47.773,32.952 c-26.543,26.619-42.695,60.784-46.529,97.588H17.067v-42.667c0-29.55,11.542-57.412,32.467-78.425 c11.519-11.446,25.543-20.178,40.643-25.666C101.694,213.96,114.625,217.6,128,217.6c7.167,0,14.3-1,21.2-2.975 c4.533-1.296,7.158-6.017,5.867-10.55c-1.3-4.533-6.067-7.146-10.55-5.858c-16.567,4.729-34.708,2.025-49.083-7.4 c-17.008-11.038-27.167-29.733-27.167-50.017c0-32.937,26.8-59.733,59.733-59.733c10.883,0,21.6,3,31.008,8.675 c4.05,2.425,9.275,1.125,11.717-2.9c2.433-4.037,1.133-9.279-2.9-11.717C155.758,67.846,141.992,64,128,64 c-42.35,0-76.8,34.454-76.8,76.8c0,20.863,8.465,40.329,22.984,54.577c-13.533,6.291-26.032,14.976-36.717,25.59 C13.308,245.233,0,277.371,0,311.467v51.2c0,4.713,3.817,8.533,8.533,8.533h85.333v68.267c0,4.713,3.817,8.533,8.533,8.533h307.2 c4.717,0,8.533-3.821,8.533-8.533V371.2h85.333c4.717,0,8.533-3.821,8.533-8.533v-51.2 C512,261.012,482.678,216.128,437.76,195.421z M179.2,157.867c0-42.346,34.45-76.8,76.8-76.8c42.35,0,76.8,34.454,76.8,76.8 s-34.45,76.8-76.8,76.8C213.65,234.667,179.2,200.212,179.2,157.867z M401.067,430.933H110.933V371.2 c0-38.692,15.083-75.129,42.45-102.579c14.417-14.34,31.895-25.463,50.634-32.659c14.895,9.947,32.767,15.771,51.983,15.771 c19.248,0,37.151-5.841,52.06-15.818c55.778,21.431,93.007,75.205,93.007,135.285V430.933z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'world': `<svg height=\"512pt\" viewBox=\"0 0 512 512\" width=\"512pt\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m256 512c-141.160156 0-256-114.839844-256-256s114.839844-256 256-256 256 114.839844 256 256-114.839844 256-256 256zm0-494.933594c-131.746094 0-238.933594 107.1875-238.933594 238.933594s107.1875 238.933594 238.933594 238.933594 238.933594-107.1875 238.933594-238.933594-107.1875-238.933594-238.933594-238.933594zm0 0\"/><path d=\"m284.980469 438.664062c-11.597657 0-22.511719-6.980468-27.035157-18.296874l-9.351562-23.378907c-.488281-1.203125-.886719-2.457031-1.210938-3.738281l-16.179687-64.726562c-.214844-.851563-.523437-1.671876-.914063-2.457032l-8.6875-17.363281c-2.535156-5.078125-8.140624-7.621094-13.660156-6.289063l-8.261718 2.0625c-8.761719 2.1875-18.191407.136719-25.234376-5.503906l-27.007812-21.597656c-6.9375-5.5625-10.914062-13.839844-10.914062-22.714844v-9.140625c0-6.101562 1.878906-11.9375 5.421874-16.894531l32.6875-45.765625c5.453126-7.636719 14.304688-12.183594 23.671876-12.183594h17.863281c5.289062 0 10.46875 1.441407 14.972656 4.15625l30.953125 18.566407c2.566406 1.554687 5.605469 2.082031 8.539062 1.484374l18.511719-3.710937c13.421875-2.6875 27.058594 4.496094 32.441407 17.074219l16.410156 38.289062c.992187 2.304688 2.714844 4.285156 4.855468 5.554688l16.8125 10.097656c7.191407 4.316406 12.175782 11.535156 13.660157 19.789062 1.484375 8.269532-.671875 16.765626-5.914063 23.320313l-14.933594 18.671875c-1.695312 2.125-2.636718 4.796875-2.636718 7.507812v26.941407c0 7.660156-3.105469 15.164062-8.523438 20.574219l-9.25 9.25c-.699218.699218-1.304687 1.476562-1.808594 2.3125l-20.386718 33.980468c-3.566406 5.9375-9.15625 10.425782-15.734375 12.617188-3.011719 1.035156-6.109375 1.511718-9.15625 1.511718zm-74.003907-153.695312c10.804688 0 20.855469 6.019531 25.898438 16.105469l8.6875 17.363281c.949219 1.894531 1.691406 3.902344 2.203125 5.957031l16.179687 64.726563c.128907.519531.296876 1.023437.496094 1.519531l9.359375 23.40625c2.363281 5.886719 8.917969 8.933594 14.96875 6.9375 2.710938-.914063 5.023438-2.765625 6.507813-5.230469l20.378906-33.972656c1.21875-2.023438 2.6875-3.90625 4.371094-5.589844l9.257812-9.265625c2.242188-2.238281 3.523438-5.335937 3.523438-8.5v-26.941406c0-6.578125 2.261718-13.019531 6.375-18.164063l14.941406-18.671874c2.203125-2.75 3.0625-6.171876 2.449219-9.636719-.625-3.464844-2.628907-6.371094-5.648438-8.183594l-16.804687-10.085937c-5.261719-3.148438-9.332032-7.808594-11.765625-13.472657l-16.417969-38.296875c-2.226562-5.199218-7.859375-8.148437-13.40625-7.058594l-18.515625 3.710938c-7.117187 1.445312-14.457031.148438-20.679687-3.582031l-30.964844-18.578125c-1.871094-1.125-4.003906-1.714844-6.1875-1.714844h-17.859375c-3.875 0-7.527344 1.886719-9.78125 5.035156l-32.691407 45.765625c-1.464843 2.046875-2.242187 4.460938-2.242187 6.980469v9.136719c0 3.671875 1.644531 7.09375 4.511719 9.394531l27 21.589844c2.910156 2.332031 6.820312 3.199218 10.4375 2.28125l8.25-2.058594c2.390625-.613281 4.796875-.90625 7.167968-.90625zm0 0\"/><path d=\"m384 426.667969c-2.253906 0-4.421875-.890625-6.03125-2.5l-17.070312-17.066407c-2.011719-2.015624-2.890626-4.910156-2.328126-7.707031l8.535157-42.667969c.332031-1.644531 1.140625-3.164062 2.328125-4.359374l25.601562-25.601563c2.226563-2.226563 5.503906-3.054687 8.507813-2.132813 3.011719.90625 5.273437 3.40625 5.886719 6.496094l8.53125 42.664063c.417968 2.082031.042968 4.242187-1.046876 6.070312l-25.601562 42.664063c-1.347656 2.253906-3.667969 3.753906-6.269531 4.078125-.351563.035156-.703125.0625-1.042969.0625zm-7.808594-28.410157 6.109375 6.121094 18.28125-30.464844-4.761719-23.800781-12.503906 12.503907zm0 0\"/><path d=\"m477.832031 237.074219c-13.40625 0-25.402343-9.199219-28.800781-22.65625-2.003906-7.953125-4.511719-14.773438-7.441406-20.285157-1.859375-3.5-5.203125-5.734374-9.1875-6.144531-4.363282-.433593-8.613282 1.339844-11.4375 4.753907-17.175782 20.761718-33.910156 30.363281-49.78125 28.570312-19.234375-2.203125-28.570313-20.445312-28.960938-21.222656-39.546875-79.097656-110.191406-72.261719-110.890625-72.132813-.316406.035157-.625.050781-.941406.050781-4.742187 0-10.007813 1.144532-15.632813 3.386719-18.859374 7.546875-39.695312 1.886719-51.855468-14.070312-11.914063-15.648438-11.84375-35.992188.179687-51.8125l.988281-1.289063c5.992188-7.699218 15.15625-12.597656 25.121094-13.40625 32.171875-2.613281 56.089844-18.089844 71.101563-46.011718 1.550781-2.894532 4.640625-4.660157 7.917969-4.480469 124.570312 5.855469 226.226562 99.890625 241.714843 223.597656.554688 4.457031-2.429687 8.585937-6.84375 9.429687-6.902343 1.339844-14.089843 2.511719-21.359375 3.472657-1.304687.164062-2.609375.25-3.890625.25zm-46.746093-66.21875c1.015624 0 2.03125.058593 3.046874.160156 9.746094.992187 17.953126 6.503906 22.527344 15.105469 3.578125 6.722656 6.582032 14.839844 8.917969 24.113281 1.605469 6.351563 7.570313 10.515625 13.882813 9.667969 4.175781-.554688 8.320312-1.183594 12.390624-1.867188-17.457031-109.78125-108.046874-192.769531-219.238281-200.371094-13.105469 21.878907-37.589843 46.539063-82.03125 50.160157-5.210937.425781-9.964843 2.933593-13.046875 6.894531l-.84375 1.089844c-8.824218 11.605468-5.878906 23.707031-.203125 31.171875 5.75 7.554687 17.558594 14.339843 31.9375 8.570312 7.492188-2.996093 14.738281-4.539062 21.539063-4.609375 3.449218-.316406 22.84375-1.519531 46.957031 6.878906 23.878906 8.3125 57.242187 27.996094 80.566406 74.640626.023438.058593 5.707031 10.835937 15.734375 11.914062 9.632813 1.203125 21.5625-6.742188 34.59375-22.503906 5.8125-7.023438 14.335938-11.015625 23.269532-11.015625zm0 0\"/><path d=\"m30.632812 238.933594h-20.785156c-2.414062 0-4.71875-1.023438-6.332031-2.816406-1.613281-1.792969-2.398437-4.179688-2.148437-6.585938 4.929687-47.96875 23.363281-93.457031 53.324218-131.570312 2.5-3.179688 6.894532-4.171876 10.519532-2.351563l32.035156 16.015625c13.386718 6.699219 22.859375 19.515625 25.316406 34.285156l.660156 3.902344c3.402344 20.460938-6.769531 40.445312-25.320312 49.722656l-16.691406 8.34375c-4.640626 2.324219-8.617188 5.839844-11.503907 10.15625-8.726562 13.082032-23.328125 20.898438-39.074219 20.898438zm-11.144531-17.066406h11.144531c10.019532 0 19.320313-4.976563 24.875-13.3125 4.523438-6.792969 10.777344-12.304688 18.074219-15.957032l16.691407-8.347656c11.8125-5.894531 18.289062-18.625 16.121093-31.648438l-.65625-3.898437c0-.011719 0-.011719 0-.011719-1.570312-9.402344-7.597656-17.550781-16.121093-21.816406l-25.71875-12.859375c-23.59375 31.863281-38.820313 68.84375-44.410157 107.851563zm0 0\"/><path d=\"m104.378906 460.039062c-1.867187 0-3.710937-.605468-5.238281-1.789062-55.910156-43.4375-91.648437-108.597656-98.03125-178.773438-.339844-3.6875 1.742187-7.160156 5.136719-8.621093l8.933594-3.832031c17.878906-7.660157 38.316406-3.71875 52.070312 10.035156l15.8125 15.8125c4.234375 4.234375 9.574219 7.09375 15.445312 8.269531 22.035157 4.414063 38.015626 23.910156 38.015626 46.378906v2.363281c0 12.859376-3.761719 25.300782-10.894532 35.984376-4.226562 6.332031-6.894531 13.6875-7.742187 21.242187l-5.035157 45.34375c-.339843 3.066406-2.3125 5.71875-5.152343 6.921875-1.066407.445312-2.191407.664062-3.320313.664062zm-85.632812-175.972656c6.828125 58.019532 35.132812 111.929688 78.902344 150.765625l3.285156-29.617187c1.140625-10.257813 4.769531-20.226563 10.496094-28.828125 5.253906-7.875 8.027343-17.039063 8.027343-26.511719v-2.363281c0-14.363281-10.214843-26.828125-24.300781-29.644531-9.191406-1.835938-17.554688-6.308594-24.167969-12.9375l-15.8125-15.8125c-8.796875-8.78125-21.851562-11.304688-33.277343-6.417969zm0 0\"/></svg>`,\n 'x': `<svg id=\"Icons\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m4.59 59.41a2 2 0 0 0 2.83 0l24.58-24.58 24.59 24.58a2 2 0 0 0 2.83-2.83l-24.59-24.58 24.58-24.59a2 2 0 0 0 -2.83-2.83l-24.58 24.59-24.59-24.58a2 2 0 0 0 -2.82 2.82l24.58 24.59-24.58 24.59a2 2 0 0 0 0 2.82z\"/></svg>`,\n};\n\nexport type CoreIconName = keyof typeof CORE_ICONS | (string & {});\n","import { type Provider } from '@angular/core';\nimport { CORE_ICONS } from './core-icons';\nimport { provideCoarIconMapSource } from './coar-icon-registry';\n\nexport const COAR_BUILTIN_ICON_SOURCE_KEY = 'coar-builtin' as const;\n\n/**\n * Overrides (and/or adds) built-in icons while keeping the built-in set as a base.\n *\n * This registers a map source under the fixed key `coar-builtin`, so it replaces the\n * built-in fallback source inside `CoarIconService`.\n */\nexport function provideCoarIconBuiltInOverrides(\n overrides: Readonly<Record<string, string>>\n): Provider {\n return provideCoarIconMapSource({\n key: COAR_BUILTIN_ICON_SOURCE_KEY,\n icons: {\n ...CORE_ICONS,\n ...overrides,\n },\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport {\n COAR_DEFAULT_ICON_SOURCE_KEY,\n COAR_ICON_SOURCE_ENTRY,\n type CoarIconSource,\n type CoarIconSourceEntry,\n} from './coar-icon-registry';\nimport { CORE_ICONS } from './core-icons';\nimport { COAR_BUILTIN_ICON_SOURCE_KEY } from './coar-icon-built-in-registry';\n\nexport type CoarIconRegisteredSource = Readonly<{\n key: string;\n isDefault: boolean;\n canProvideIconKeys: boolean;\n}>;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CoarIconService {\n private readonly builtInSource: CoarIconSource = {\n getIcon: (name) => of(CORE_ICONS[name as keyof typeof CORE_ICONS] ?? null),\n getAvailableIconKeys: () => of(Object.keys(CORE_ICONS).sort()),\n };\n\n private readonly sourceEntries = [\n { key: COAR_BUILTIN_ICON_SOURCE_KEY, source: this.builtInSource },\n ...(((inject(COAR_ICON_SOURCE_ENTRY, { optional: true }) ?? []) as CoarIconSourceEntry[]) ??\n []),\n ] as const;\n private readonly defaultSourceOverrides = (inject(COAR_DEFAULT_ICON_SOURCE_KEY, {\n optional: true,\n }) ?? []) as string[] | null;\n\n private readonly sourceByKey = new Map(\n this.sourceEntries.map((entry) => [entry.key, entry.source] as const)\n );\n\n /**\n * Get an icon by name from a specific icon source.\n *\n * - If `sourceKey` is omitted, the default source is used.\n * - If no source is configured, this throws to make misconfiguration obvious.\n */\n getIcon(name: string, sourceKey?: string): Observable<string | null> {\n const source = this.getSourceOrThrow(sourceKey);\n return source.getIcon(name);\n }\n\n /**\n * List all registered icon sources.\n *\n * This is useful for UIs that allow users to browse icons grouped by source.\n */\n getRegisteredSources(): ReadonlyArray<CoarIconRegisteredSource> {\n const defaultKey = this.getDefaultSourceKeyOrThrow();\n return Array.from(this.sourceByKey.entries()).map(([key, source]) => ({\n key,\n isDefault: key === defaultKey,\n canProvideIconKeys: typeof source.getAvailableIconKeys === 'function',\n }));\n }\n\n /**\n * Get the available icon keys from a specific source.\n *\n * Throws if the source does not support listing keys.\n */\n getAvailableIconKeys(sourceKey?: string): Observable<readonly string[]> {\n const entry = this.getSourceEntryOrThrow(sourceKey);\n if (!entry.source.getAvailableIconKeys) {\n throw new Error(\n `Coar icon source \"${entry.key}\" does not support listing available icon keys.`\n );\n }\n return entry.source.getAvailableIconKeys();\n }\n\n clearCache(): void {\n for (const source of this.sourceByKey.values()) {\n source.clearCache?.();\n }\n }\n\n clearIconCache(name: string): void {\n for (const source of this.sourceByKey.values()) {\n source.clearIconCache?.(name);\n }\n }\n\n private getSourceOrThrow(sourceKey?: string): CoarIconSource {\n const effectiveKey = sourceKey ?? this.getDefaultSourceKeyOrThrow();\n const source = this.sourceByKey.get(effectiveKey);\n if (!source) {\n throw new Error(`Unknown Coar icon source key: \"${effectiveKey}\".`);\n }\n\n return source;\n }\n\n private getSourceEntryOrThrow(sourceKey?: string): CoarIconSourceEntry {\n const effectiveKey = sourceKey ?? this.getDefaultSourceKeyOrThrow();\n const source = this.sourceByKey.get(effectiveKey);\n if (!source) {\n throw new Error(`Unknown Coar icon source key: \"${effectiveKey}\".`);\n }\n\n return { key: effectiveKey, source };\n }\n\n private getDefaultSourceKeyOrThrow(): string {\n const overrideKey = this.defaultSourceOverrides\n ? this.defaultSourceOverrides[this.defaultSourceOverrides.length - 1]\n : undefined;\n if (overrideKey) {\n if (!this.sourceByKey.has(overrideKey)) {\n throw new Error(\n `Default Coar icon source key \"${overrideKey}\" was provided but no source with that key is registered.`\n );\n }\n return overrideKey;\n }\n\n return COAR_BUILTIN_ICON_SOURCE_KEY;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n signal,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { CoarIconService } from './coar-icon.service';\n\nexport type CoarIconSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'auto';\n\n/**\n * COAR Icon Component\n *\n * Icon component supporting DI-provided icon registries.\n *\n * Usage:\n * ```html\n * <coar-icon name=\"settings\" size=\"m\"></coar-icon>\n * ```\n *\n * Size tokens:\n * - xs = 12px\n * - s = 16px\n * - m = 20px (default)\n * - l = 24px\n * - xl = 32px\n * - auto = fills parent container (use padding on parent to control)\n */\n@Component({\n selector: 'coar-icon',\n standalone: true,\n imports: [],\n template: `\n @if (name()) {\n @if (sanitizedSvg(); as svg) {\n <div\n class=\"coar-icon\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [class.coar-icon--spin]=\"spin()\"\n [style.transform]=\"'rotate(' + rotate() + 'deg)'\"\n [style.color]=\"color()\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n [style.transition]=\"getRotateTransitionValue()\"\n [innerHTML]=\"svg\"\n ></div>\n } @else if (isLoading()) {\n <div\n class=\"coar-icon coar-icon--loading\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n ></div>\n }\n }\n @if (label()) {\n <span class=\"coar-icon__label\">{{ label() }}</span>\n } @else {\n <span class=\"coar-icon__label\">\n <ng-content></ng-content>\n </span>\n }\n `,\n styleUrl: './coar-icon.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.icon-name]': 'name()',\n },\n})\nexport class CoarIconComponent {\n private readonly iconService = inject(CoarIconService);\n private readonly sanitizer = inject(DomSanitizer);\n\n private iconLoadVersion = 0;\n\n /**\n * Icon identifier.\n * Examples: \"settings\", \"user\"\n */\n name = input<string>();\n\n /**\n * Optional icon source key.\n *\n * - If omitted, the default source is used.\n * - If multiple sources are registered, this can be used to target a specific one.\n */\n source = input<string | undefined>();\n\n /**\n * Icon size. Defaults to 'm' (20px).\n * Can be a preset token (xs, s, m, l, xl, auto) or a custom CSS value (e.g., '42px', '3rem').\n */\n size = input<CoarIconSize | string>('m');\n\n /**\n * Rotation angle in degrees (0, 90, 180, 270, or any number).\n */\n rotate = input<number>(0);\n\n /**\n * Rotation transition animation.\n * - Empty/undefined: No animation\n * - Number: Duration in milliseconds (e.g., 300)\n * - String: Full CSS transition value (e.g., '0.3s ease-in-out', '500ms cubic-bezier(0.4, 0, 0.2, 1)')\n */\n rotateTransition = input<number | string>();\n\n /**\n * Enable continuous spinning animation.\n */\n spin = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Icon color. Can be any valid CSS color value.\n * Examples: 'red', '#ff0000', 'rgb(255, 0, 0)', 'var(--coar-text-semantic-error-bold)'\n * Use 'inherit' to inherit the parent element's color.\n */\n color = input<string>('inherit');\n\n /**\n * Optional text label to display next to the icon.\n */\n label = input<string | number>();\n\n /**\n * Signal holding the sanitized SVG HTML ready for rendering.\n */\n protected sanitizedSvg = signal<SafeHtml | null>(null);\n\n /**\n * Signal indicating whether an icon is currently being loaded.\n */\n protected isLoading = signal(false);\n\n /**\n * Check if the size is a preset token (xs, s, m, l, xl, auto).\n */\n protected isPresetSize(size: string): boolean {\n return ['xs', 's', 'm', 'l', 'xl', 'auto'].includes(size);\n }\n\n /**\n * Compute the CSS transition value for rotation.\n */\n protected getRotateTransitionValue(): string | null {\n const transition = this.rotateTransition();\n if (!transition) return null;\n\n if (typeof transition === 'number') {\n return `transform ${transition}ms ease-in-out`;\n }\n\n if (!transition.includes('transform')) {\n return `transform ${transition}`;\n }\n\n return transition;\n }\n\n constructor() {\n effect(() => {\n const iconName = this.name();\n const sourceKey = this.source();\n if (!iconName) {\n this.iconLoadVersion++;\n this.sanitizedSvg.set(null);\n this.isLoading.set(false);\n return;\n }\n\n const loadVersion = ++this.iconLoadVersion;\n\n // Clear any previously rendered SVG so the template can show the loading placeholder.\n this.sanitizedSvg.set(null);\n this.isLoading.set(true);\n\n const subscription = this.resolveIcon$(iconName, sourceKey)\n .pipe(\n finalize(() => {\n if (loadVersion === this.iconLoadVersion) {\n this.isLoading.set(false);\n }\n })\n )\n .subscribe((svg) => {\n if (loadVersion !== this.iconLoadVersion) {\n return;\n }\n\n if (!svg) {\n this.sanitizedSvg.set(null);\n return;\n }\n\n this.sanitizedSvg.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n });\n\n // Important: cancel in-flight icon loads if `name` changes or the component is destroyed.\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Resolve an icon name to an SVG string.\n *\n * This is kept as a single observable chain so callers can cancel it.\n */\n private resolveIcon$(name: string, sourceKey: string | undefined): Observable<string | null> {\n return this.iconService.getIcon(name, sourceKey).pipe(catchError(() => of(null)));\n }\n}\n","import { forwardRef, type Provider, type Type, signal } from '@angular/core';\r\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function coarProvideValueAccessor(type: () => Type<ControlValueAccessor>): Provider {\r\n return {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(type),\r\n multi: true,\r\n };\r\n}\r\n\r\nexport abstract class CoarControlValueAccessor<T> implements ControlValueAccessor {\r\n protected readonly cvaDisabled = signal(false);\r\n\r\n protected cvaOnChange: (value: T) => void = () => undefined;\r\n protected cvaOnTouched: () => void = () => undefined;\r\n\r\n public registerOnChange(fn: (value: T) => void): void {\r\n this.cvaOnChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: () => void): void {\r\n this.cvaOnTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n public abstract writeValue(value: T | null): void;\r\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarTextInputSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-text-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-text-input.component.html',\n styleUrl: './coar-text-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTextInputComponent)],\n host: {\n '[class.coar-text-input--xs]': 'size() === \"xs\"',\n '[class.coar-text-input--s]': 'size() === \"s\"',\n '[class.coar-text-input--m]': 'size() === \"m\"',\n '[class.coar-text-input--l]': 'size() === \"l\"',\n '[class.coar-text-input--multiline]': 'isMultiline()',\n },\n})\nexport class CoarTextInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /** Current input value (two-way bindable with [(value)]) */\n value = model<string>('');\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarTextInputSize>('m');\n\n /** Number of visible text rows (1 = single-line input, 2+ = textarea) */\n rows = input<number>(1);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute */\n autocomplete = input<string>('');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when input value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected inputRef =\n viewChild<ElementRef<HTMLInputElement | HTMLTextAreaElement>>('inputElement');\n\n protected isMultiline = computed(() => this.rows() > 1);\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-text-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const newValue = target.value;\n this.value.set(newValue);\n this.valueChange.emit(newValue);\n this.cvaOnChange(newValue);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-text-input-clear\" [class.coar-text-input-clear--multiline]=\"isMultiline()\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n HostListener,\n afterNextRender,\n DestroyRef,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent, CoarIconSize } from '../../display/icon/coar-icon.component';\nimport { CoarControlValueAccessor, coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { Maskito } from '@maskito/core';\nimport { maskitoNumberOptionsGenerator } from '@maskito/kit';\nimport { of } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { CoarLocalizationService } from '@cocoar/localization';\n\n/** Configuration for number formatting */\nexport interface NumberFormatConfig {\n readonly decimal: string;\n readonly thousand: string;\n}\n\nexport type CoarNumberInputSize = 'xs' | 's' | 'm' | 'l';\nexport type CoarNumberInputStepperButtons = 'none' | 'increment' | 'decrement' | 'both';\n\n/**\n * Transform function for stepperButtons input.\n * Accepts boolean (attribute pattern) or explicit string values.\n * - true | '' (attribute present) → 'both'\n * - false | 'false' → 'none'\n * - 'increment' | 'decrement' | 'both' | 'none' → validated and passed through\n */\nfunction transformStepperButtons(value: boolean | string): CoarNumberInputStepperButtons {\n // Boolean false or string 'false' → no buttons\n if (value === false || value === 'false') return 'none';\n\n // Boolean true or empty string (attribute present) → both buttons\n if (value === true || value === '' || value === 'true') return 'both';\n\n // Validate and pass through string values\n if (value === 'increment' || value === 'decrement' || value === 'both' || value === 'none') {\n return value;\n }\n\n // Invalid value → default to none\n return 'none';\n}\n\n@Component({\n selector: 'coar-number-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-number-input.component.html',\n styleUrl: './coar-number-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarNumberInputComponent)],\n host: {\n '[class.coar-number-input--xs]': 'size() === \"xs\"',\n '[class.coar-number-input--s]': 'size() === \"s\"',\n '[class.coar-number-input--m]': 'size() === \"m\"',\n '[class.coar-number-input--l]': 'size() === \"l\"',\n },\n})\nexport class CoarNumberInputComponent extends CoarControlValueAccessor<number | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(navigator.language),\n {\n initialValue: this.localizationService?.languageState.value ?? navigator.language,\n }\n );\n private maskitoInstance?: Maskito;\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current numeric value.\n * Using model() for two-way binding support.\n */\n value = model<number | null>(null);\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarNumberInputSize>('m');\n\n /** Minimum allowed value */\n min = input<number | undefined>(undefined);\n\n /** Maximum allowed value */\n max = input<number | undefined>(undefined);\n\n /** Step increment for arrows and keyboard */\n step = input<number>(1);\n\n /** Number of decimal places to display */\n decimals = input<number>(0);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Controls visibility of increment/decrement stepper buttons.\n * Supports both boolean attribute pattern and granular string control:\n * - No attribute → no buttons\n * - `stepperButtons` (attribute) → both buttons\n * - `stepperButtons=\"increment\"` → only increment\n * - `stepperButtons=\"decrement\"` → only decrement\n * - `stepperButtons=\"both\"` → both buttons (explicit)\n * - `stepperButtons=\"none\"` → no buttons (explicit)\n */\n stepperButtons = input<CoarNumberInputStepperButtons, boolean | string>('none', {\n transform: transformStepperButtons,\n });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /**\n * Locale identifier for number formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Number format configuration (decimal and thousand separators).\n * If not provided, uses locale service default or falls back to { decimal: '.', thousand: '' }.\n */\n numberFormat = input<NumberFormatConfig>();\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Emits when input value changes */\n valueChange = output<number | null>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected displayValue = signal<string>('');\n protected isFocused = signal(false);\n protected isDragging = signal(false);\n protected dragStartX = signal(0);\n protected dragStartValue = signal(0);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-number-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n protected iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<CoarNumberInputSize, CoarIconSize> = {\n xs: 'xs',\n s: 'xs',\n m: 's',\n l: 'm',\n };\n return sizeMap[this.size()];\n });\n\n protected showIncrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'increment' || mode === 'both';\n });\n\n protected showDecrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'decrement' || mode === 'both';\n });\n\n protected canDecrement = computed(() => {\n const val = this.value();\n const minVal = this.min();\n if (val === null) return true;\n if (minVal === undefined) return true;\n return val > minVal;\n });\n\n protected canIncrement = computed(() => {\n const val = this.value();\n const maxVal = this.max();\n if (val === null) return true;\n if (maxVal === undefined) return true;\n return val < maxVal;\n });\n\n constructor() {\n super();\n // Sync displayValue when value changes from outside\n effect(() => {\n const newValue = this.value();\n this.displayValue.set(this.formatValue(newValue));\n });\n\n // Initialize Maskito for number validation\n afterNextRender(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (inputElement) {\n this.initializeMaskito(inputElement);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n });\n }\n\n /**\n * Cached number format configuration with priority chain:\n * 1. numberFormat input (explicit config object)\n * 2. Browser Intl.NumberFormat detection with locale\n * 3. Hardcoded fallback { decimal: '.', thousand: '' }\n */\n private readonly resolvedNumberFormat = computed<NumberFormatConfig>(() => {\n // Priority 1: Explicit config object\n const format = this.numberFormat();\n if (format) {\n return format;\n }\n\n // Priority 2: Use Intl.NumberFormat to detect format for the locale\n const locale = this.locale() ?? this.currentLanguage() ?? navigator.language;\n if (locale) {\n try {\n const formatter = new Intl.NumberFormat(locale);\n const parts = formatter.formatToParts(1000.1);\n return {\n decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.',\n thousand: parts.find((p) => p.type === 'group')?.value ?? '',\n };\n } catch {\n // Intl failed, fall through to fallback\n }\n }\n\n // Priority 3: Fallback\n return { decimal: '.', thousand: '' };\n });\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.resolvedNumberFormat();\n\n const maskOptions = maskitoNumberOptionsGenerator({\n decimalSeparator: format.decimal,\n thousandSeparator: format.thousand,\n maximumFractionDigits: this.decimals(),\n min: this.min(),\n max: this.max(),\n });\n\n this.maskitoInstance = new Maskito(inputElement, maskOptions);\n }\n\n protected formatValue(value: number | null): string {\n if (value === null) return '';\n const format = this.resolvedNumberFormat();\n // Format with locale-specific decimal separator\n const formatted = value.toFixed(this.decimals());\n // Replace period with the configured decimal separator\n return formatted.replace('.', format.decimal);\n }\n\n /**\n * Parse locale-formatted string (respects component's decimal/thousand separators).\n * Used when user types or pastes into the input field.\n */\n protected parseValue(str: string): number | null {\n if (str.trim() === '') return null;\n const format = this.resolvedNumberFormat();\n // Remove thousand separators first (before converting decimal)\n const withoutThousands = format.thousand ? str.replace(new RegExp(`\\\\${format.thousand}`, 'g'), '') : str;\n // Replace locale-specific decimal separator with period for parseFloat\n const normalized = withoutThousands.replace(format.decimal, '.');\n const parsed = parseFloat(normalized);\n if (isNaN(parsed)) return null;\n return parsed;\n }\n\n protected clampValue(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n let clamped = value;\n if (minVal !== undefined && clamped < minVal) clamped = minVal;\n if (maxVal !== undefined && clamped > maxVal) clamped = maxVal;\n return clamped;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.displayValue.set(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.commitValue();\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected commitValue(): void {\n const parsed = this.parseValue(this.displayValue());\n if (parsed !== null) {\n const clamped = this.clampValue(parsed);\n const rounded = parseFloat(clamped.toFixed(this.decimals()));\n this.value.set(rounded);\n // Don't reformat - Maskito already has the value formatted correctly\n // this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n } else {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n }\n\n public writeValue(value: number | null): void {\n this.value.set(value);\n }\n\n protected onClear(): void {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected increment(): void {\n if (this.isDisabled() || this.readonly() || !this.canIncrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current + this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected decrement(): void {\n if (this.isDisabled() || this.readonly() || !this.canDecrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current - this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.increment();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.decrement();\n }\n }\n\n // Figma-style drag to change value\n protected onDragStart(event: MouseEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n event.preventDefault();\n this.isDragging.set(true);\n this.dragStartX.set(event.clientX);\n this.dragStartValue.set(this.value() ?? 0);\n document.body.style.cursor = 'ew-resize';\n }\n\n @HostListener('document:mousemove', ['$event'])\n protected onDragMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n const deltaX = event.clientX - this.dragStartX();\n // Sensitivity: 1 step per 10 pixels\n const sensitivity = 10;\n const stepCount = Math.round(deltaX / sensitivity);\n const newValue = this.clampValue(this.dragStartValue() + stepCount * this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n @HostListener('document:mouseup')\n protected onDragEnd(): void {\n if (this.isDragging()) {\n this.isDragging.set(false);\n document.body.style.cursor = '';\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <button type=\"button\" class=\"coar-number-input-clear\" [class.coar-number-input-clear--hidden]=\"!showClearButton()\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarPasswordInputSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-password-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-password-input.component.html',\n styleUrl: './coar-password-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPasswordInputComponent)],\n host: {\n '[class.coar-password-input--xs]': 'size() === \"xs\"',\n '[class.coar-password-input--s]': 'size() === \"s\"',\n '[class.coar-password-input--m]': 'size() === \"m\"',\n '[class.coar-password-input--l]': 'size() === \"l\"',\n },\n})\nexport class CoarPasswordInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current password value.\n * Using model() for two-way binding support.\n */\n value = model<string>('');\n\n /** Input size - matches other form elements for consistent layouts */\n size = input<CoarPasswordInputSize>('m');\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute for browser autofill */\n autocomplete = input<string>('current-password');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when password value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected showPassword = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected inputType = computed(() => (this.showPassword() ? 'text' : 'password'));\n protected toggleIcon = computed(() => (this.showPassword() ? 'eye-open' : 'eye-closed'));\n protected toggleAriaLabel = computed(() =>\n this.showPassword() ? 'Hide password' : 'Show password'\n );\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-password-input-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.valueChange.emit(target.value);\n this.cvaOnChange(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected togglePasswordVisibility(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.showPassword.update((v) => !v);\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-password-input-clear\" tabindex=\"-1\" aria-label=\"Clear\" (click)=\"onClear()\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Toggle Visibility -->\n <button type=\"button\" class=\"coar-password-input-toggle\" tabindex=\"-1\" [attr.aria-label]=\"toggleAriaLabel()\" (click)=\"togglePasswordVisibility()\">\n <coar-icon [name]=\"toggleIcon()\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n </div>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarCheckboxSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-checkbox',\n standalone: true,\n imports: [],\n templateUrl: './coar-checkbox.component.html',\n styleUrl: './coar-checkbox.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarCheckboxComponent)],\n host: {\n '[class.coar-checkbox--xs]': 'size() === \"xs\"',\n '[class.coar-checkbox--s]': 'size() === \"s\"',\n '[class.coar-checkbox--m]': 'size() === \"m\"',\n '[class.coar-checkbox--l]': 'size() === \"l\"',\n '[class.coar-checkbox--disabled]': 'isDisabled()',\n '[class.coar-checkbox--readonly]': 'readonly()',\n '[class.coar-checkbox--error]': 'hasError()',\n },\n})\nexport class CoarCheckboxComponent extends CoarControlValueAccessor<boolean | undefined> {\n /** Label text displayed next to the checkbox */\n label = input<string>('');\n\n /**\n * Checkbox checked state: true for checked, false for unchecked, undefined for pristine.\n * Using model() for two-way binding support.\n */\n checked = model<boolean | undefined>(undefined);\n\n /**\n * Sets the checkbox to indeterminate state (visual only).\n * Typically used for \"select all\" checkboxes when some children are selected.\n * The indeterminate state is cleared when the user clicks the checkbox.\n */\n indeterminate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Disables the checkbox (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Prevents changes but keeps normal appearance and focus */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the checkbox */\n error = input<string>('');\n\n /** Hint text displayed below the checkbox */\n hint = input<string>('');\n\n /** Checkbox size - matches input/button heights for consistent layouts */\n size = input<CoarCheckboxSize>('m');\n\n /** HTML id attribute for the checkbox element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Value submitted with form when checked */\n value = input<string>('');\n\n // Note: checkedChange output is implicitly provided by the model() declaration above.\n // Use [(checked)] for two-way binding or (checkedChange) to listen for changes.\n\n protected isFocused = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('checkboxElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected isChecked = computed(() => this.checked() === true);\n protected isIndeterminate = computed(() => this.indeterminate());\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n private readonly autoId = `coar-checkbox-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n constructor() {\n super();\n // Set indeterminate state on native input element\n effect(() => {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.indeterminate = this.isIndeterminate();\n }\n });\n }\n\n public writeValue(value: boolean | undefined | null): void {\n this.checked.set(value ?? undefined);\n }\n\n protected onChange(event: Event): void {\n if (this.readonly()) {\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n target.checked = this.isChecked();\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newState = target.checked;\n\n this.checked.set(newState); // This also emits through the implicit checkedChange output\n this.cvaOnChange(newState);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-checkbox-wrapper\" [class.coar-checkbox-focused]=\"isFocused()\">\n <!-- Hidden native checkbox -->\n <input\n #checkboxElement\n type=\"checkbox\"\n class=\"coar-checkbox-input\"\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : isChecked()\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom checkbox visual -->\n <span class=\"coar-checkbox-box\" [class.coar-checkbox-checked]=\"isChecked()\" [class.coar-checkbox-indeterminate]=\"isIndeterminate()\">\n <!-- Checkmark icon (always rendered, visibility controlled by CSS) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-check\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.5 4.5L6.5 11.5L3 8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Indeterminate icon (minus) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-indeterminate\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 8H12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </span>\n\n <!-- Label text -->\n @if (label()) {\n <span class=\"coar-checkbox-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-checkbox-required\">*</span>\n }\n </span>\n }\n</label>\n\n<!-- Hint/Error Message (always rendered, 1 line reserved) -->\n<div [id]=\"messageId()\"\n class=\"coar-checkbox-message\"\n [class.coar-checkbox-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n forwardRef,\n input,\n model,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\nimport { CoarRadioComponent } from './coar-radio.component';\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\nexport type RadioGroupSize = 's' | 'm' | 'l';\n\n/**\n * Radio group component for single-choice selection.\n *\n * @example\n * ```html\n * <coar-radio-group [(ngModel)]=\"selectedValue\" name=\"options\">\n * <coar-radio value=\"a\">Option A</coar-radio>\n * <coar-radio value=\"b\">Option B</coar-radio>\n * <coar-radio value=\"c\" [disabled]=\"true\">Option C (disabled)</coar-radio>\n * </coar-radio-group>\n * ```\n */\n@Component({\n selector: 'coar-radio-group',\n standalone: true,\n imports: [],\n templateUrl: './coar-radio-group.component.html',\n styleUrl: './coar-radio-group.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarRadioGroupComponent)],\n host: {\n role: 'radiogroup',\n '[class.coar-radio-group--horizontal]': 'orientation() === \"horizontal\"',\n '[class.coar-radio-group--vertical]': 'orientation() === \"vertical\"',\n '[class.coar-radio-group--s]': 'size() === \"s\"',\n '[class.coar-radio-group--m]': 'size() === \"m\"',\n '[class.coar-radio-group--l]': 'size() === \"l\"',\n '[class.coar-radio-group--disabled]': 'isDisabled()',\n '[class.coar-radio-group--error]': 'hasError()',\n '[attr.aria-label]': 'label()',\n '[attr.aria-required]': 'required() || null',\n '[attr.aria-describedby]': 'hasMessage() ? messageId() : null',\n },\n})\nexport class CoarRadioGroupComponent<T = unknown> extends CoarControlValueAccessor<T> {\n /** Currently selected value */\n value = model<T | undefined>(undefined);\n\n /** Group name for radio inputs */\n name = input.required<string>();\n\n /** Accessible label for the group */\n label = input<string>('');\n\n /** Layout orientation */\n orientation = input<RadioGroupOrientation>('vertical');\n\n /** Size of radio buttons */\n size = input<RadioGroupSize>('m');\n\n /** Disables all radio buttons in the group */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the group as required */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display */\n error = input<string>('');\n\n /** Hint text displayed below the group */\n hint = input<string>('');\n\n /** Emits when selection changes */\n valueChange = output<T>();\n\n /** Query all child radio components */\n private readonly radios = contentChildren(forwardRef(() => CoarRadioComponent));\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected hasMessage = computed(() => this.displayMessage().length > 0);\n private readonly autoId = `coar-radio-group-${cryptoRandomId()}`;\n protected messageId = computed(() => `${this.autoId}-message`);\n\n /** Called by child radio when selected */\n selectValue(newValue: T): void {\n if (this.isDisabled()) return;\n\n this.value.set(newValue);\n this.valueChange.emit(newValue);\n this.cvaOnChange(newValue);\n }\n\n /** Check if a value is currently selected */\n isSelected(checkValue: T): boolean {\n return this.value() === checkValue;\n }\n\n /** Check if group is disabled (exposed for child components) */\n isGroupDisabled(): boolean {\n return this.isDisabled();\n }\n\n // CVA implementation\n override writeValue(value: T): void {\n this.value.set(value);\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<div class=\"coar-radio-group\">\n <ng-content />\n</div>\n\n<!-- Hint/Error Message (always rendered, 1 line reserved) -->\n<div class=\"coar-form-field-message\"\n [id]=\"messageId()\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarRadioGroupComponent } from './coar-radio-group.component';\n\n/**\n * Individual radio button, must be used inside a coar-radio-group.\n *\n * @example\n * ```html\n * <coar-radio value=\"option1\">Option 1</coar-radio>\n * ```\n */\n@Component({\n selector: 'coar-radio',\n standalone: true,\n imports: [],\n templateUrl: './coar-radio.component.html',\n styleUrl: './coar-radio.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-radio--checked]': 'isChecked()',\n '[class.coar-radio--disabled]': 'isDisabled()',\n '[class.coar-radio--focused]': 'isFocused()',\n '[class.coar-radio--s]': 'groupSize() === \"s\"',\n '[class.coar-radio--m]': 'groupSize() === \"m\"',\n '[class.coar-radio--l]': 'groupSize() === \"l\"',\n '[class.coar-radio--error]': 'groupHasError()',\n '(click)': 'onClick($event)',\n },\n})\nexport class CoarRadioComponent<T = unknown> {\n private readonly group = inject(CoarRadioGroupComponent, { optional: true });\n\n /** Value of this radio option */\n value = input.required<T>();\n\n /** Disables this specific radio button */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('radioInput');\n protected isFocused = signal(false);\n\n protected isChecked = computed(() => {\n if (!this.group) return false;\n return this.group.isSelected(this.value());\n });\n\n protected isDisabled = computed(() => {\n return this.disabled() || (this.group?.isGroupDisabled() ?? false);\n });\n\n protected groupSize = computed(() => this.group?.size() ?? 'm');\n protected groupHasError = computed(() => (this.group?.error() ?? '').length > 0);\n\n protected radioName = computed(() => {\n return this.group?.name() ?? '';\n });\n\n private readonly autoId = `coar-radio-${cryptoRandomId()}`;\n protected inputId = computed(() => this.autoId);\n\n protected onClick(event: Event): void {\n if (this.isDisabled()) {\n event.preventDefault();\n return;\n }\n this.select();\n }\n\n protected onInputChange(): void {\n if (this.isDisabled()) return;\n this.select();\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n }\n\n private select(): void {\n if (this.group && !this.isChecked()) {\n this.group.selectValue(this.value());\n }\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-radio__label\" [for]=\"inputId()\">\n <input\n #radioInput\n type=\"radio\"\n class=\"coar-radio__input\"\n [id]=\"inputId()\"\n [name]=\"radioName()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onInputChange()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n <span class=\"coar-radio__control\">\n <span class=\"coar-radio__dot\"></span>\n </span>\n <span class=\"coar-radio__text\">\n <ng-content />\n </span>\n</label>\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n AfterViewInit,\n NgZone,\n inject,\n input,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { OverlayScrollbars, ClickScrollPlugin, type PartialOptions } from 'overlayscrollbars';\n\n/**\n * Theme options for the scrollbar appearance.\n * - 'dark': Dark scrollbar theme (default)\n * - 'light': Light scrollbar theme\n */\nexport type CoarScrollbarTheme = 'dark' | 'light';\n\n/**\n * Auto-hide behavior for the scrollbar.\n * - 'never': Scrollbars are always visible\n * - 'scroll': Scrollbars hide when not scrolling\n * - 'leave': Scrollbars hide when pointer leaves the element\n * - 'move': Scrollbars hide when pointer stops moving\n */\nexport type CoarScrollbarAutoHide = 'never' | 'scroll' | 'leave' | 'move';\n\n/**\n * Overflow behavior for each axis.\n * - 'hidden': Content is clipped, no scrollbar\n * - 'scroll': Always show scrollbar\n * - 'visible-hidden': Content visible but no scrollbar\n * - 'visible-scroll': Content visible with scrollbar\n */\nexport type CoarScrollbarOverflow = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\n\n/**\n * Directive that applies custom overlay scrollbars to an element.\n *\n * Uses OverlayScrollbars library to replace native scrollbars with\n * styleable overlay scrollbars while preserving native scroll behavior.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <div coarScrollbar>Scrollable content</div>\n *\n * <!-- With options -->\n * <div coarScrollbar [theme]=\"'light'\" [autoHide]=\"'scroll'\">\n * Scrollable content\n * </div>\n *\n * <!-- Horizontal only -->\n * <div coarScrollbar [overflowX]=\"'scroll'\" [overflowY]=\"'hidden'\">\n * Horizontal scrollable content\n * </div>\n * ```\n */\n@Directive({\n selector: '[coarScrollbar]',\n exportAs: 'coarScrollbar',\n standalone: true,\n host: {\n // Prevents flickering during initialization\n 'data-overlayscrollbars-initialize': '',\n },\n})\nexport class CoarScrollbarDirective implements AfterViewInit, OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n\n /** Theme for scrollbar appearance */\n readonly theme = input<CoarScrollbarTheme>('dark');\n\n /** Auto-hide behavior for scrollbars */\n readonly autoHide = input<CoarScrollbarAutoHide>('leave');\n\n /** Delay in ms before auto-hide triggers */\n readonly autoHideDelay = input<number>(400);\n\n /** Whether clicking the track scrolls to that position */\n readonly clickScroll = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Overflow behavior for x-axis */\n readonly overflowX = input<CoarScrollbarOverflow>('scroll');\n\n /** Overflow behavior for y-axis */\n readonly overflowY = input<CoarScrollbarOverflow>('scroll');\n\n /** Whether to defer initialization until browser is idle */\n readonly defer = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Overscroll behavior to prevent scroll chaining to parent elements.\n * - 'auto': Default browser behavior (scroll chains to parent)\n * - 'contain': Prevents scroll chaining when reaching scroll boundaries\n * - 'none': Prevents scroll chaining and disables bounce effects\n */\n readonly overscrollBehavior = input<'auto' | 'contain' | 'none'>('auto');\n\n private osInstance: OverlayScrollbars | null = null;\n private initialized = false;\n private contentObserver: MutationObserver | null = null;\n private updateDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n // Register the ClickScrollPlugin for click-to-scroll functionality\n OverlayScrollbars.plugin(ClickScrollPlugin);\n\n // React to input changes and update options\n effect(() => {\n // Read all inputs to track them (signals must be read to be tracked)\n this.theme();\n this.autoHide();\n this.autoHideDelay();\n this.clickScroll();\n this.overflowX();\n this.overflowY();\n\n if (this.osInstance && this.initialized) {\n this.osInstance.options(this.buildOptions());\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.defer()) {\n // Defer initialization to browser idle time for better performance\n this.deferInitialization();\n } else {\n this.initialize();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n /**\n * Returns the OverlayScrollbars instance or null if not initialized.\n */\n getInstance(): OverlayScrollbars | null {\n return this.osInstance;\n }\n\n /**\n * Scrolls to the specified position.\n */\n scrollTo(options: { x?: number; y?: number }): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n if (options.x !== undefined) {\n viewport.scrollLeft = options.x;\n }\n if (options.y !== undefined) {\n viewport.scrollTop = options.y;\n }\n }\n }\n\n /**\n * Scrolls to the bottom of the scrollable content.\n */\n scrollToBottom(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = viewport.scrollHeight;\n }\n }\n\n /**\n * Scrolls to the top of the scrollable content.\n */\n scrollToTop(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = 0;\n }\n }\n\n /**\n * Updates the scrollbar (useful after dynamic content changes).\n */\n update(): void {\n this.osInstance?.update(true);\n }\n\n private deferInitialization(): void {\n // Use requestIdleCallback if available, otherwise setTimeout\n if (typeof requestIdleCallback === 'function') {\n requestIdleCallback(() => this.initialize(), { timeout: 2000 });\n } else {\n setTimeout(() => this.initialize(), 0);\n }\n }\n\n private initialize(): void {\n // Run outside Angular zone to avoid unnecessary change detection\n this.ngZone.runOutsideAngular(() => {\n this.osInstance = OverlayScrollbars(this.elementRef.nativeElement, this.buildOptions());\n this.initialized = true;\n\n // Apply overscroll-behavior to the viewport element to prevent scroll chaining\n const overscroll = this.overscrollBehavior();\n if (overscroll !== 'auto') {\n const viewport = this.osInstance.elements().viewport;\n if (viewport) {\n viewport.style.overscrollBehavior = overscroll;\n }\n }\n\n // Watch for descendant attribute changes (e.g. class toggles from expand/collapse\n // animations using grid-template-rows) that change content size without triggering\n // OverlayScrollbars' built-in observers.\n this.observeContentChanges();\n });\n }\n\n private observeContentChanges(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (!viewport) return;\n\n this.contentObserver = new MutationObserver(() => {\n if (this.updateDebounceTimer) clearTimeout(this.updateDebounceTimer);\n this.updateDebounceTimer = setTimeout(() => {\n this.osInstance?.update(true);\n }, 50);\n });\n\n this.contentObserver.observe(viewport, {\n attributes: true,\n attributeFilter: ['class'],\n subtree: true,\n });\n }\n\n private buildOptions(): PartialOptions {\n return {\n scrollbars: {\n theme: `os-theme-${this.theme()}`,\n autoHide: this.autoHide(),\n autoHideDelay: this.autoHideDelay(),\n clickScroll: this.clickScroll(),\n },\n overflow: {\n x: this.overflowX(),\n y: this.overflowY(),\n },\n };\n }\n\n private destroy(): void {\n this.contentObserver?.disconnect();\n this.contentObserver = null;\n if (this.updateDebounceTimer) {\n clearTimeout(this.updateDebounceTimer);\n this.updateDebounceTimer = null;\n }\n this.osInstance?.destroy();\n this.osInstance = null;\n this.initialized = false;\n }\n}\n","import {\n signal,\n input,\n computed,\n effect,\n ElementRef,\n inject,\n booleanAttribute,\n DestroyRef,\n Directive,\n viewChild,\n} from '@angular/core';\nimport { CoarControlValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport type { Placement } from '@cocoar/ui/overlay';\n\nexport type CoarSelectSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Visual appearance of the select trigger.\n * - 'outline': Default bordered input style\n * - 'inline': Borderless, transparent background - blends into surrounding content\n */\nexport type CoarSelectAppearance = 'outline' | 'inline';\n\n/** Dropdown position relative to the trigger */\nexport type CoarDropdownPosition = 'top' | 'bottom';\n\n/**\n * Base class providing shared functionality for all select components.\n * Handles dropdown state, keyboard navigation, and common styling.\n * Subclasses override openDropdown() to use the overlay system.\n */\n@Directive()\nexport abstract class CoarSelectBase<T> extends CoarControlValueAccessor<T> {\n protected readonly elementRef = inject(ElementRef);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Label text displayed above the select */\n label = input<string>('');\n\n /** Placeholder text shown when no option is selected */\n placeholder = input<string>('Select an option...');\n\n /** Available options to choose from */\n options = input<CoarSelectOption[]>([]);\n\n /** Select size - matches button/input heights for consistent layouts */\n size = input<CoarSelectSize>('m');\n\n /**\n * Visual appearance of the select trigger.\n * - 'outline': Default bordered input style\n * - 'inline': Borderless, transparent - blends into surrounding content\n */\n appearance = input<CoarSelectAppearance>('outline');\n\n /** Disables the select (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the select read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the select as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the select */\n error = input<string>('');\n\n /** Hint text displayed below the select */\n hint = input<string>('');\n\n /** HTML id attribute for the select element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Enable search/filter functionality within the dropdown */\n searchable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Search input placeholder when searchable is enabled */\n searchPlaceholder = input<string>('Search...');\n\n /**\n * Comparison function to match values with options.\n * Use this when value objects come from different sources (e.g., API vs form).\n *\n * @example\n * ```typescript\n * // Compare Country objects by their ID\n * compareById = (a: Country | null, b: Country | null) => a?.id === b?.id;\n * ```\n */\n compareWith = input<(o1: unknown, o2: unknown) => boolean>();\n\n /** Force dropdown position ('auto' calculates based on available space) */\n dropdownPositionPreference = input<'auto' | 'top' | 'bottom'>('auto');\n\n // ============================================================\n // View References (shared across all select components)\n // ============================================================\n\n /** Reference to the scrollbar directive for scroll control */\n protected scrollbarRef = viewChild(CoarScrollbarDirective);\n\n /** Reference to the options list container for scroll-into-view */\n protected optionsListRef = viewChild<ElementRef<HTMLDivElement>>('optionsList');\n\n /** Reference to the search input for focusing (when searchable) */\n protected searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n /** DOM id for the dropdown search input (when searchable). */\n protected searchInputId = computed(() => `${this.inputId()}-search`);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Whether the dropdown is currently open */\n protected isOpen = signal(false);\n\n /** Whether the select is focused */\n protected isFocused = signal(false);\n\n /** Current search/filter query */\n protected searchQuery = signal('');\n\n /** Currently highlighted option index for keyboard navigation */\n protected highlightedIndex = signal(-1);\n\n /** Current dropdown position */\n protected dropdownPosition = signal<CoarDropdownPosition>('bottom');\n\n /** Combined disabled state from input and CVA */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Whether there's an error to display */\n protected hasError = computed(() => this.error().length > 0);\n\n /** Message to display (error takes priority over hint) */\n protected displayMessage = computed(() => this.error() || this.hint());\n\n /** Generated unique ID for the select element */\n private readonly autoId = `coar-select-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n\n /** ID for the message element (for aria-describedby) */\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n /** ID for the listbox element */\n protected listboxId = computed(() => `${this.inputId()}-listbox`);\n\n /** Filtered options based on search query */\n protected filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n if (!query) return this.options();\n return this.options().filter((option) => option.label.toLowerCase().includes(query));\n });\n\n /**\n * Options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayOptions = computed(() => {\n const options = this.filteredOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted.\n * When reversed, converts display index to data index.\n */\n protected isHighlighted(displayIndex: number): boolean {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index.\n * When reversed, converts display index to data index.\n */\n protected setHighlightFromDisplay(displayIndex: number): void {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n constructor() {\n super();\n\n // Reset highlighted index when options change\n effect(() => {\n this.filteredOptions();\n this.highlightedIndex.set(-1);\n });\n\n // Close dropdown on outside click (can be disabled by subclasses that render the panel outside host DOM).\n this.installOutsideClickHandler();\n }\n\n /** Toggle dropdown open/closed state */\n protected toggleDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n /**\n * Open the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected openDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /**\n * Close the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected closeDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /** Handle keyboard navigation */\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.openDropdown();\n // Auto-highlight first option when opening\n this.highlightFirstOption();\n } else if (this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeDropdown();\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option farthest from trigger\n if (this.dropdownPosition() === 'bottom') {\n this.highlightFirstOption();\n } else {\n // Top dropdown is visually reversed, so last index appears at visual top\n this.highlightLastOption();\n }\n } else {\n // ArrowDown always moves DOWN visually\n // Bottom dropdown: down = next index; Top dropdown (reversed): down = previous index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightNextOption();\n } else {\n this.highlightPreviousOption();\n }\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option nearest to trigger\n if (this.dropdownPosition() === 'top') {\n // Top dropdown is visually reversed, so first index appears at visual bottom (nearest)\n this.highlightFirstOption();\n } else {\n this.highlightLastOption();\n }\n } else {\n // ArrowUp always moves UP visually\n // Bottom dropdown: up = previous index; Top dropdown (reversed): up = next index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightPreviousOption();\n } else {\n this.highlightNextOption();\n }\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightFirstOption();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightLastOption();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n /** Move highlight to the next available option */\n protected highlightNextOption(): void {\n const options = this.filteredOptions();\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex < options.length) {\n if (!options[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Move highlight to the previous available option */\n protected highlightPreviousOption(): void {\n const options = this.filteredOptions();\n let prevIndex = this.highlightedIndex() - 1;\n\n while (prevIndex >= 0) {\n if (!options[prevIndex].disabled) {\n this.highlightedIndex.set(prevIndex);\n this.scrollToHighlighted();\n return;\n }\n prevIndex--;\n }\n }\n\n /** Move highlight to the first available option */\n protected highlightFirstOption(): void {\n const options = this.filteredOptions();\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Move highlight to the last available option */\n protected highlightLastOption(): void {\n const options = this.filteredOptions();\n for (let i = options.length - 1; i >= 0; i--) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Scroll the highlighted option into view */\n protected scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const selector = this.highlightedOptionSelector;\n const highlightedEl = listEl?.querySelector(selector);\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected focusSearchInput(): void {\n if (!this.searchable()) return;\n\n const refEl = this.searchInputRef()?.nativeElement;\n if (refEl) {\n refEl.focus();\n return;\n }\n\n const domEl =\n typeof document !== 'undefined'\n ? (document.getElementById(this.searchInputId()) as HTMLInputElement | null)\n : null;\n\n domEl?.focus();\n }\n\n protected scrollOptionsToBottom(): void {\n const scrollbar = this.scrollbarRef();\n if (scrollbar) {\n scrollbar.scrollToBottom();\n return;\n }\n\n const listEl = this.getOptionsListElement();\n if (!listEl) return;\n listEl.scrollTop = listEl.scrollHeight;\n }\n\n protected getOptionsListElement(): HTMLDivElement | null {\n const refEl = this.optionsListRef()?.nativeElement;\n if (refEl) return refEl;\n\n return typeof document !== 'undefined'\n ? (document.getElementById(this.listboxId()) as HTMLDivElement | null)\n : null;\n }\n\n /**\n * CSS selector for the highlighted option element.\n * Each component defines its own selector based on its CSS class naming.\n */\n protected abstract get highlightedOptionSelector(): string;\n\n /** Handle focus event */\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n /** Handle blur event */\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Handle search input changes */\n protected onSearchInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n }\n\n /** Whether this select should close on document clicks outside its host element. */\n protected shouldCloseOnOutsideClick(): boolean {\n return true;\n }\n\n /** Setup click outside handler to close dropdown. */\n protected installOutsideClickHandler(): void {\n if (!this.shouldCloseOnOutsideClick()) return;\n\n const handleClick = (event: MouseEvent) => {\n if (!this.isOpen()) return;\n if (this.elementRef.nativeElement.contains(event.target)) return;\n this.closeDropdown();\n };\n\n // Use setTimeout to avoid issues with the current click event\n setTimeout(() => {\n document.addEventListener('click', handleClick);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('click', handleClick);\n });\n });\n }\n\n /**\n * Resolve dropdown placement based on available viewport space.\n * Shared across all select subclasses that use the overlay system.\n */\n protected resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const preference = this.dropdownPositionPreference();\n if (preference === 'top') return 'top';\n if (preference === 'bottom') return 'bottom';\n\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n /**\n * ID of the currently highlighted option element, for `aria-activedescendant`.\n * Converts the data-level highlightedIndex to the display-level DOM id.\n * Subclasses that use a different options list (e.g. tag-select) override this.\n */\n protected activeDescendantId = computed(() => {\n const index = this.highlightedIndex();\n const options = this.filteredOptions();\n if (index < 0 || index >= options.length) return null;\n\n const displayIndex =\n this.dropdownPosition() === 'top' ? options.length - 1 - index : index;\n\n return `${this.inputId()}-option-${displayIndex}`;\n });\n\n /** Abstract method to select the currently highlighted option */\n protected abstract selectHighlightedOption(): void;\n\n /** Abstract method to get the display text for the current selection */\n abstract getDisplayText(): string;\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n output,\n computed,\n viewChild,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Single-select dropdown component.\n *\n * Allows selecting one option from a list with keyboard navigation,\n * search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-single-select\n * label=\"Country\"\n * [options]=\"countries\"\n * [(value)]=\"selectedCountry\"\n * placeholder=\"Select a country\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-single-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-single-select.component.html',\n styleUrl: './coar-single-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarSingleSelectComponent)],\n host: {\n '[class.coar-single-select--xs]': 'size() === \"xs\"',\n '[class.coar-single-select--s]': 'size() === \"s\"',\n '[class.coar-single-select--m]': 'size() === \"m\"',\n '[class.coar-single-select--l]': 'size() === \"l\"',\n '[class.coar-single-select--inline]': 'appearance() === \"inline\"',\n '[class.coar-single-select--disabled]': 'isDisabled()',\n '[class.coar-single-select--readonly]': 'readonly()',\n '[class.coar-single-select--error]': 'hasError()',\n '[class.coar-single-select--open]': 'isOpen()',\n },\n})\nexport class CoarSingleSelectComponent<T = unknown> extends CoarSelectBase<T | null> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<T | null>(null);\n\n /** Whether to show a clear button when a value is selected */\n clearable = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected value changes */\n valueChange = output<T | null>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-select-option--highlighted';\n }\n\n /** The currently selected option object */\n protected selectedOption = computed(() => {\n const currentValue = this.value();\n if (currentValue === null || currentValue === undefined) return null;\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().find((opt) => compare(opt.value, currentValue)) ?? null;\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const selected = this.selectedOption();\n return selected?.label ?? '';\n }\n\n /** Write value from forms API */\n writeValue(value: T | null): void {\n this.value.set(value);\n }\n\n /** Select an option by its value */\n selectOption(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n this.value.set(option.value);\n this.valueChange.emit(option.value);\n this.cvaOnChange(option.value);\n this.closeDropdown();\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.selectOption(option);\n }\n }\n }\n\n /** Clear the current selection */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return compare(this.value(), option.value);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // The dropdown panel is rendered via @cocoar/ui/overlay (attached to document.body),\n // so hostElement.contains(event.target) would treat clicks inside the panel as \"outside\".\n // We rely on overlay dismissal (outsideClick) instead.\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n\n if (this.searchable()) {\n this.searchInputRef()?.nativeElement.focus();\n }\n\n if (this.dropdownPosition() === 'top') {\n this.scrollbarRef()?.scrollToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n const chromeHeight = 2;\n\n return chromeHeight + searchHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Value or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOption()\">\n @if (selectedOption(); as option) {\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-select-value-icon\" />\n }\n {{ option.label }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-select-clear\" tabindex=\"-1\" aria-label=\"Clear selection\" (click)=\"clearSelection($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon name=\"caret-right\" source=\"coar-builtin\" size=\"auto\" class=\"coar-select-arrow\" [class.coar-select-arrow--open]=\"isOpen()\" />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-select-option\"\n [class.coar-select-option--selected]=\"isSelected(option)\"\n [class.coar-select-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-select-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"selectOption($any(option))\"\n (keydown.enter)=\"selectOption($any(option))\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-select-option-icon\" />\n }\n <span class=\"coar-select-option-label\">{{ option.label }}</span>\n @if (isSelected(option)) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"s\" class=\"coar-select-option-check\" />\n }\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n viewChild,\n ElementRef,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Multi-select dropdown component.\n *\n * Allows selecting multiple options from a list with checkboxes,\n * keyboard navigation, search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-multi-select\n * label=\"Skills\"\n * [options]=\"skills\"\n * [(value)]=\"selectedSkills\"\n * placeholder=\"Select skills...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-multi-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-multi-select.component.html',\n styleUrl: './coar-multi-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarMultiSelectComponent)],\n host: {\n '[class.coar-multi-select--xs]': 'size() === \"xs\"',\n '[class.coar-multi-select--s]': 'size() === \"s\"',\n '[class.coar-multi-select--m]': 'size() === \"m\"',\n '[class.coar-multi-select--l]': 'size() === \"l\"',\n '[class.coar-multi-select--disabled]': 'isDisabled()',\n '[class.coar-multi-select--readonly]': 'readonly()',\n '[class.coar-multi-select--error]': 'hasError()',\n '[class.coar-multi-select--open]': 'isOpen()',\n },\n})\nexport class CoarMultiSelectComponent<T = unknown> extends CoarSelectBase<T[]> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Whether to show a clear button when values are selected */\n clearable = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Maximum number of selected items to display before showing count */\n maxDisplayItems = input<number>(3);\n\n /** Whether to show \"Select All\" option */\n showSelectAll = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-multi-option--highlighted';\n }\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().filter((opt) => currentValues.some((val) => compare(val, opt.value)));\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n /** Whether all options are selected */\n protected allSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n return enabledOptions.length > 0 && enabledOptions.every((opt) => this.isSelected(opt));\n });\n\n /** Whether some but not all options are selected */\n protected someSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n const selectedCount = enabledOptions.filter((opt) => this.isSelected(opt)).length;\n return selectedCount > 0 && selectedCount < enabledOptions.length;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const currentValues = this.value();\n if (currentValues.length === 0) return '';\n\n const selected = this.selectedOptions();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Get labels from matching options\n const labels = currentValues.map((val) => {\n const opt = selected.find((o) => compare(o.value, val));\n return opt?.label ?? String(val);\n });\n\n if (labels.length <= this.maxDisplayItems()) {\n return labels.join(', ');\n }\n return `${labels.length} selected`;\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Toggle selection of an option */\n toggleOption(option: CoarSelectOption<T>, event?: Event): void {\n event?.stopPropagation();\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const index = currentValues.findIndex((val) => compare(val, option.value));\n\n if (index === -1) {\n currentValues.push(option.value);\n } else {\n currentValues.splice(index, 1);\n }\n\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.toggleOption(option);\n }\n }\n }\n\n /** Toggle all options */\n protected toggleAll(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.allSelected()) {\n // Deselect all\n this.value.set([]);\n } else {\n // Select all non-disabled options\n const allValues = this.options()\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value as T);\n this.value.set(allValues);\n }\n\n this.valueChange.emit(this.value());\n this.cvaOnChange(this.value());\n }\n\n /** Clear all selections */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n this.valueChange.emit([]);\n this.cvaOnChange([]);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.value().some((val) => compare(val, option.value));\n }\n\n /** Handle keyboard for multi-select (space toggles instead of closing) */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (event.key === ' ' && this.isOpen() && this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n return;\n }\n\n if (event.key === 'Enter' && this.isOpen()) {\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else {\n this.closeDropdown();\n }\n return;\n }\n\n super.onKeyDown(event);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui/overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n this.focusSearchInput();\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n\n const selectAllHeight = this.showSelectAll() && !this.searchQuery() ? 37 : 0;\n\n const chromeHeight = 2;\n return chromeHeight + searchHeight + selectAllHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Values or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOptions().length\">\n @if (selectedOptions().length) {\n {{ getDisplayText() }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Selection Count Badge -->\n @if (selectedOptions().length > 0) {\n <span class=\"coar-multi-count\">{{ selectedOptions().length }}</span>\n }\n\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button type=\"button\" class=\"coar-select-clear\" tabindex=\"-1\" aria-label=\"Clear all selections\" (click)=\"clearSelection($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon name=\"caret-right\" source=\"coar-builtin\" size=\"auto\" class=\"coar-select-arrow\" [class.coar-select-arrow--open]=\"isOpen()\" />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Select All Option -->\n @if (showSelectAll() && !searchQuery()) {\n <div\n class=\"coar-multi-option coar-multi-option--select-all\"\n tabindex=\"-1\"\n role=\"option\"\n [attr.aria-selected]=\"allSelected()\"\n (click)=\"toggleAll($event)\"\n (keydown.enter)=\"toggleAll($event)\"\n >\n <span\n class=\"coar-multi-checkbox\"\n [class.coar-multi-checkbox--checked]=\"allSelected()\"\n [class.coar-multi-checkbox--indeterminate]=\"someSelected()\"\n >\n @if (allSelected()) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"auto\" />\n } @else if (someSelected()) {\n <coar-icon name=\"minus\" source=\"coar-builtin\" size=\"auto\" />\n }\n </span>\n <span class=\"coar-multi-option-label\">Select All</span>\n </div>\n <div class=\"coar-multi-divider\"></div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-multi-option\"\n [class.coar-multi-option--selected]=\"isSelected(option)\"\n [class.coar-multi-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-multi-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"toggleOption($any(option), $event)\"\n (keydown.enter)=\"toggleOption($any(option), $event)\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n <span class=\"coar-multi-checkbox\" [class.coar-multi-checkbox--checked]=\"isSelected(option)\">\n @if (isSelected(option)) {\n <coar-icon name=\"check\" source=\"coar-builtin\" size=\"auto\" />\n }\n </span>\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-multi-option-icon\" />\n }\n <span class=\"coar-multi-option-label\">{{ option.label }}</span>\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n viewChild,\n ElementRef,\n booleanAttribute,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../_base/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Tag-based multi-select component.\n *\n * Displays selected items as removable tag chips with support for\n * creating new tags on-the-fly (optional), keyboard navigation,\n * and full forms integration.\n *\n * @example\n * ```html\n * <coar-tag-select\n * label=\"Tags\"\n * [options]=\"availableTags\"\n * [(value)]=\"selectedTags\"\n * [allowCreate]=\"true\"\n * placeholder=\"Add tags...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-tag-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-tag-select.component.html',\n styleUrl: './coar-tag-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTagSelectComponent)],\n host: {\n '[class.coar-tag-select--xs]': 'size() === \"xs\"',\n '[class.coar-tag-select--s]': 'size() === \"s\"',\n '[class.coar-tag-select--m]': 'size() === \"m\"',\n '[class.coar-tag-select--l]': 'size() === \"l\"',\n '[class.coar-tag-select--disabled]': 'isDisabled()',\n '[class.coar-tag-select--readonly]': 'readonly()',\n '[class.coar-tag-select--error]': 'hasError()',\n '[class.coar-tag-select--open]': 'isOpen()',\n '[class.coar-tag-select--focused]': 'isFocused()',\n },\n})\nexport class CoarTagSelectComponent<T = string> extends CoarSelectBase<T[]> {\n private readonly overlayBuilder = createOverlayBuilder();\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Allow creating new tags that don't exist in options */\n allowCreate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number of tags that can be selected (0 = unlimited) */\n maxTags = input<number>(0);\n\n /** Text shown when creating a new tag */\n createPrefix = input<string>('Create: ');\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** Emits when a new tag is created */\n tagCreated = output<T>();\n\n /**\n * Reference to the inline search input (tag-select uses inline input, not dropdown search).\n * This is separate from the base class searchInputRef.\n */\n protected inlineInputRef = viewChild<ElementRef<HTMLInputElement>>('inlineInput');\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-tag-option--highlighted';\n }\n\n /**\n * Override: tag-select uses availableOptions (excluding already-selected),\n * and may have a \"Create\" option at the end.\n */\n protected override activeDescendantId = computed(() => {\n const index = this.highlightedIndex();\n const available = this.availableOptions();\n\n // Create option\n if (this.showCreateOption() && index === available.length) {\n return `${this.inputId()}-option-create`;\n }\n\n if (index < 0 || index >= available.length) return null;\n\n const displayIndex =\n this.dropdownPosition() === 'top' ? available.length - 1 - index : index;\n\n return `${this.inputId()}-option-${displayIndex}`;\n });\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Map values to options, creating virtual options for created tags or unknown values\n return currentValues.map((val) => {\n const existing = this.options().find((opt) => compare(opt.value, val));\n if (existing) return existing;\n\n // Created tag or value without matching option - return a virtual option\n return {\n value: val,\n label: String(val),\n } as CoarSelectOption<T>;\n });\n });\n\n /** Available options that aren't already selected */\n protected availableOptions = computed(() => {\n const selectedValues = this.value();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.filteredOptions().filter(\n (opt) => !selectedValues.some((val) => compare(val, opt.value))\n );\n });\n\n /**\n * Available options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayAvailableOptions = computed(() => {\n const options = this.availableOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected isAvailableHighlighted(displayIndex: number): boolean {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected setAvailableHighlightFromDisplay(displayIndex: number): void {\n const dataIndex =\n this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n /** Whether the max tags limit has been reached */\n protected maxReached = computed(() => {\n const max = this.maxTags();\n return max > 0 && this.value().length >= max;\n });\n\n /** Whether to show the \"Create\" option */\n protected showCreateOption = computed(() => {\n const query = this.searchQuery().trim();\n if (!this.allowCreate() || !query || this.maxReached()) return false;\n\n // Check if the query matches an existing option exactly\n const exactMatch = this.options().some(\n (opt) => opt.label.toLowerCase() === query.toLowerCase()\n );\n if (exactMatch) return false;\n\n // Check if already selected\n const alreadySelected = this.value().some(\n (val) => String(val).toLowerCase() === query.toLowerCase()\n );\n return !alreadySelected;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n return this.selectedOptions()\n .map((opt) => opt.label)\n .join(', ');\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Add a tag from an option */\n addTag(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly() || this.maxReached()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const alreadySelected = currentValues.some((val) => compare(val, option.value));\n\n if (!alreadySelected) {\n currentValues.push(option.value);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Remove a tag by value */\n removeTag(tagValue: T, event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const currentValues = this.value().filter((v) => !compare(v, tagValue));\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Create a new tag from the search query */\n protected createTag(): void {\n if (!this.allowCreate() || this.maxReached()) return;\n\n const query = this.searchQuery().trim();\n if (!query) return;\n\n const newValue = query as unknown as T;\n const currentValues = [...this.value()];\n\n if (!currentValues.includes(newValue)) {\n currentValues.push(newValue);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n this.tagCreated.emit(newValue);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const available = this.availableOptions();\n const index = this.highlightedIndex();\n\n // Check if highlighting the \"Create\" option\n if (this.showCreateOption() && index === available.length) {\n this.createTag();\n return;\n }\n\n if (index >= 0 && index < available.length) {\n const option = available[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.addTag(option);\n }\n }\n }\n\n /** Handle keyboard for tag-select */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Backspace':\n if (!this.searchQuery() && this.value().length > 0) {\n // Remove last tag\n const lastValue = this.value()[this.value().length - 1];\n this.removeTag(lastValue);\n }\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else if (this.showCreateOption()) {\n this.createTag();\n }\n break;\n\n case ',':\n case 'Tab':\n if (this.showCreateOption() && this.searchQuery().trim()) {\n event.preventDefault();\n this.createTag();\n } else if (event.key === 'Tab') {\n this.closeDropdown();\n }\n break;\n\n default:\n super.onKeyDown(event);\n }\n }\n\n /** Handle input changes */\n protected onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n\n if (!this.isOpen() && target.value) {\n this.openDropdown();\n }\n }\n\n /** Focus the inline input */\n protected focusInput(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.inlineInputRef()?.nativeElement.focus();\n }\n }\n\n /** Handle input focus */\n protected onInputFocus(): void {\n this.isFocused.set(true);\n if (!this.maxReached()) {\n this.openDropdown();\n }\n }\n\n /** Handle input blur */\n protected onInputBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Override to calculate highlighted index including create option */\n protected override highlightNextOption(): void {\n const available = this.availableOptions();\n const maxIndex = this.showCreateOption() ? available.length : available.length - 1;\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex <= maxIndex) {\n // Create option is always enabled\n if (nextIndex === available.length && this.showCreateOption()) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n\n if (nextIndex < available.length && !available[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Scroll highlighted option into view */\n protected override scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const highlightedEl = listEl?.querySelector('.coar-tag-option--highlighted');\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui/overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n this.isOpen.set(true);\n this.highlightedIndex.set(-1);\n\n // Build panel class based on size\n const sizeClass = `coar-select-dropdown--${this.size()}`;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({ placement, offset: 4, flip: false, shift: false })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content', minWidth: 'anchor' })\n .panelClass(sizeClass)\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 200;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayAvailableOptions().length + (this.showCreateOption() ? 1 : 0);\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const chromeHeight = 2;\n return chromeHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Tag Input Container -->\n <div\n class=\"coar-tag-container\"\n #trigger\n [class.coar-tag-container--focused]=\"isFocused()\"\n [class.coar-tag-container--disabled]=\"isDisabled()\"\n [class.coar-tag-container--readonly]=\"readonly()\"\n [class.coar-tag-container--error]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n tabindex=\"-1\"\n (click)=\"focusInput()\"\n (keydown.enter)=\"focusInput()\"\n >\n <!-- Selected Tags -->\n @for (option of selectedOptions(); track option.value) {\n <span class=\"coar-tag\" [class.coar-tag--disabled]=\"isDisabled()\">\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"auto\" class=\"coar-tag-icon\" />\n }\n <span class=\"coar-tag-label\">{{ option.label }}</span>\n @if (!isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"coar-tag-remove\"\n tabindex=\"-1\"\n aria-label=\"Remove {{ option.label }}\"\n (click)=\"removeTag($any(option.value), $event)\"\n >\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n }\n </span>\n }\n\n <!-- Inline Input -->\n @if (!maxReached()) {\n <input\n #inlineInput\n type=\"text\"\n class=\"coar-tag-input\"\n [id]=\"inputId()\"\n [placeholder]=\"selectedOptions().length ? '' : placeholder()\"\n [value]=\"searchQuery()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n />\n }\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayAvailableOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-tag-option\"\n [class.coar-tag-option--highlighted]=\"isAvailableHighlighted(i)\"\n [class.coar-tag-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"false\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n tabindex=\"-1\"\n role=\"option\"\n (click)=\"addTag($any(option))\"\n (keydown.enter)=\"addTag($any(option))\"\n (mouseenter)=\"setAvailableHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"s\" class=\"coar-tag-option-icon\" />\n }\n <span class=\"coar-tag-option-label\">{{ option.label }}</span>\n </div>\n }\n\n <!-- Create New Option -->\n @if (showCreateOption()) {\n <div\n class=\"coar-tag-option coar-tag-option--create\"\n [class.coar-tag-option--highlighted]=\"highlightedIndex() === availableOptions().length\"\n [id]=\"inputId() + '-option-create'\"\n tabindex=\"-1\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n (click)=\"createTag()\"\n (keydown.enter)=\"createTag()\"\n (mouseenter)=\"highlightedIndex.set(availableOptions().length)\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" size=\"s\" class=\"coar-tag-option-icon\" />\n <span class=\"coar-tag-option-label\">{{ createPrefix() }}{{ searchQuery() }}</span>\n </div>\n }\n\n @if (!displayAvailableOptions().length && !showCreateOption()) {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No matching options\n } @else {\n No more options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n computed,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../_base/coar-control-value-accessor';\n\nexport type CoarSwitchSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-switch',\n standalone: true,\n imports: [],\n templateUrl: './coar-switch.component.html',\n styleUrl: './coar-switch.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarSwitchComponent)],\n host: {\n '[class.coar-switch--s]': 'size() === \"s\"',\n '[class.coar-switch--m]': 'size() === \"m\"',\n '[class.coar-switch--l]': 'size() === \"l\"',\n '[class.coar-switch--disabled]': 'isDisabled()',\n '[class.coar-switch--readonly]': 'readonly()',\n '[class.coar-switch--checked]': 'checked()',\n },\n})\nexport class CoarSwitchComponent extends CoarControlValueAccessor<boolean> {\n /** Label text displayed next to the switch */\n label = input<string>('');\n\n /** Switch checked state */\n checked = model<boolean>(false);\n\n /** Disables the switch */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Prevents changes but keeps normal appearance */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Switch size */\n size = input<CoarSwitchSize>('m');\n\n /** HTML id attribute */\n id = input<string>('');\n\n /** HTML name attribute */\n name = input<string>('');\n\n /** Label position relative to the switch */\n labelPosition = input<'before' | 'after'>('after');\n\n protected isFocused = signal(false);\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n private readonly autoId = `coar-switch-${cryptoRandomId()}`;\n protected inputId = computed(() => this.id() || this.autoId);\n\n public writeValue(value: boolean | null): void {\n this.checked.set(value ?? false);\n }\n\n protected onToggle(event: Event): void {\n if (this.readonly()) {\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n target.checked = this.checked();\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newState = target.checked;\n\n this.checked.set(newState);\n this.cvaOnChange(newState);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","<label class=\"coar-switch-wrapper\" [class.coar-switch-focused]=\"isFocused()\">\n @if (labelPosition() === 'before' && label()) {\n <span class=\"coar-switch-label\">{{ label() }}</span>\n }\n\n <!-- Hidden native input -->\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"coar-switch-input\"\n [id]=\"inputId()\"\n [name]=\"name()\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n (change)=\"onToggle($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom track + thumb -->\n <span class=\"coar-switch-track\" [class.coar-switch-track--checked]=\"checked()\">\n <span class=\"coar-switch-thumb\"></span>\n </span>\n\n @if (labelPosition() === 'after' && label()) {\n <span class=\"coar-switch-label\">{{ label() }}</span>\n }\n</label>\n","// Form controls (CVA-based)\nexport * from './text-input';\nexport * from './number-input';\nexport * from './password-input';\nexport * from './checkbox';\nexport * from './radio';\nexport * from './select';\nexport * from './switch';\n\n// CVA base class\nexport * from './_base/coar-control-value-accessor';\n","import { Temporal } from '@js-temporal/polyfill';\n\nimport type { DateFormatConfig } from './coar-date-format';\n\nexport function coarDetectDateFormatPatternFromIntl(\n locale: string\n): DateFormatConfig['pattern'] | null {\n try {\n const formatter = new Intl.DateTimeFormat(locale);\n const parts = formatter.formatToParts(new Date(2024, 0, 15));\n\n const dayIndex = parts.findIndex((p) => p.type === 'day');\n const monthIndex = parts.findIndex((p) => p.type === 'month');\n const yearIndex = parts.findIndex((p) => p.type === 'year');\n\n if (dayIndex === -1 || monthIndex === -1 || yearIndex === -1) {\n return null;\n }\n\n if (dayIndex < monthIndex && monthIndex < yearIndex) return 'dd.mm.yyyy';\n if (monthIndex < dayIndex && dayIndex < yearIndex) return 'mm/dd/yyyy';\n if (yearIndex < monthIndex && monthIndex < dayIndex) return 'yyyy-mm-dd';\n\n return null;\n } catch {\n return null;\n }\n}\n\nexport function coarGetDateSeparatorForPattern(\n pattern: DateFormatConfig['pattern']\n): '.' | '/' | '-' {\n if (pattern.includes('.')) return '.';\n if (pattern.includes('/')) return '/';\n return '-';\n}\n\nexport function coarGetLocalizedWeekdays(locale: string, firstDayOfWeek: 1 | 7): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n\n // Jan 1, 2024 is a Monday - use this as reference for day mapping.\n const weekdays: string[] = [];\n for (let i = 0; i < 7; i++) {\n const date = new Date(2024, 0, 1 + i);\n weekdays.push(formatter.format(date));\n }\n\n // weekdays is now [Mon, Tue, Wed, Thu, Fri, Sat, Sun].\n if (firstDayOfWeek === 7) {\n const sunday = weekdays.pop();\n if (sunday) {\n weekdays.unshift(sunday);\n }\n }\n\n return weekdays;\n}\n\nexport function coarFormatPlainDate(\n date: Temporal.PlainDate,\n pattern: DateFormatConfig['pattern']\n): string {\n const sep = coarGetDateSeparatorForPattern(pattern);\n const day = String(date.day).padStart(2, '0');\n const month = String(date.month).padStart(2, '0');\n const year = String(date.year);\n\n switch (pattern) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n return `${day}${sep}${month}${sep}${year}`;\n case 'mm/dd/yyyy':\n return `${month}${sep}${day}${sep}${year}`;\n case 'yyyy-mm-dd':\n return `${year}${sep}${month}${sep}${day}`;\n default:\n return `${day}${sep}${month}${sep}${year}`;\n }\n}\n\nexport function coarParsePlainDateFromInput(\n text: string,\n pattern: DateFormatConfig['pattern'],\n constraints?: {\n min?: Temporal.PlainDate | null;\n max?: Temporal.PlainDate | null;\n }\n): Temporal.PlainDate | null {\n if (!text) return null;\n\n const sep = coarGetDateSeparatorForPattern(pattern);\n const parts = text.split(sep);\n if (parts.length !== 3) return null;\n\n if (parts.some((p) => p.length === 0 || !/^\\d+$/.test(p))) return null;\n\n let year: number;\n let month: number;\n let day: number;\n\n try {\n switch (pattern) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n day = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'mm/dd/yyyy':\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'yyyy-mm-dd':\n year = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n day = parseInt(parts[2], 10);\n break;\n default:\n return null;\n }\n\n if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {\n return null;\n }\n\n const date = Temporal.PlainDate.from({ year, month, day });\n\n const minDate = constraints?.min ?? null;\n const maxDate = constraints?.max ?? null;\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return null;\n }\n\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return null;\n }\n\n return date;\n } catch {\n return null;\n }\n}\n\nexport function coarTemporalPlainDateToDate(date: Temporal.PlainDate): Date {\n return new Date(date.year, date.month - 1, date.day);\n}\n\nexport function coarCalculateIsoWeekNumber(date: Temporal.PlainDate): number {\n const jsDate = coarTemporalPlainDateToDate(date);\n\n const dayOfWeek = jsDate.getDay() || 7;\n jsDate.setDate(jsDate.getDate() + 4 - dayOfWeek);\n\n const yearStart = new Date(jsDate.getFullYear(), 0, 1);\n return Math.ceil(((jsDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n}\n\nexport function coarClampPlainDate(\n date: Temporal.PlainDate,\n constraints?: {\n min?: Temporal.PlainDate | null;\n max?: Temporal.PlainDate | null;\n }\n): Temporal.PlainDate {\n const minDate = constraints?.min ?? null;\n const maxDate = constraints?.max ?? null;\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return minDate;\n }\n\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return maxDate;\n }\n\n return date;\n}\n\nexport interface CoarCalendarGridCell {\n readonly date: Temporal.PlainDate;\n readonly isOutsideMonth: boolean;\n}\n\n/**\n * Returns a fixed 6x7 calendar grid (42 cells) for the given month.\n * Includes leading/trailing days from adjacent months to fill the grid.\n */\nexport function coarGetCalendarGridDates(\n viewMonth: Temporal.PlainYearMonth,\n firstDayOfWeek: 1 | 7\n): CoarCalendarGridCell[] {\n const firstDay = viewMonth.toPlainDate({ day: 1 });\n const daysInMonth = viewMonth.daysInMonth;\n\n const startDayOfWeek = firstDay.dayOfWeek; // Temporal: 1=Mon ... 7=Sun\n\n let daysFromPrevMonth: number;\n if (firstDayOfWeek === 1) {\n // Monday first: Monday=0, Tuesday=1, ..., Sunday=6\n daysFromPrevMonth = (startDayOfWeek - 1 + 7) % 7;\n } else {\n // Sunday first: Sunday=0, Monday=1, ..., Saturday=6\n // Temporal uses: Sunday=7, so we convert via modulo\n daysFromPrevMonth = startDayOfWeek % 7;\n }\n\n const cells: CoarCalendarGridCell[] = [];\n\n if (daysFromPrevMonth > 0) {\n const prevMonth = viewMonth.subtract({ months: 1 });\n const prevMonthDays = prevMonth.daysInMonth;\n for (let i = daysFromPrevMonth - 1; i >= 0; i--) {\n const day = prevMonth.toPlainDate({ day: prevMonthDays - i });\n cells.push({ date: day, isOutsideMonth: true });\n }\n }\n\n for (let d = 1; d <= daysInMonth; d++) {\n const day = viewMonth.toPlainDate({ day: d });\n cells.push({ date: day, isOutsideMonth: false });\n }\n\n const remainingDays = 42 - cells.length;\n const nextMonth = viewMonth.add({ months: 1 });\n for (let d = 1; d <= remainingDays; d++) {\n const day = nextMonth.toPlainDate({ day: d });\n cells.push({ date: day, isOutsideMonth: true });\n }\n\n return cells;\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n NgZone,\n output,\n signal,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport type { DateFormatConfig } from '../_shared/coar-date-format';\nimport type { CoarDateMarker } from '../_shared/coar-date-marker';\nimport {\n coarCalculateIsoWeekNumber,\n coarClampPlainDate,\n coarDetectDateFormatPatternFromIntl,\n coarGetCalendarGridDates,\n coarGetLocalizedWeekdays,\n} from '../_shared/coar-date-helpers';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\n\nimport {\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\n/**\n * Represents a single month view in the scrollable calendar.\n */\nexport interface CoarCalendarMonth {\n readonly yearMonth: Temporal.PlainYearMonth;\n readonly monthName: string;\n readonly year: number;\n readonly days: CoarCalendarDay[];\n readonly weekNumbers: number[];\n}\n\n/**\n * Represents a single day cell in the calendar.\n */\nexport interface CoarCalendarDay {\n readonly date: Temporal.PlainDate;\n readonly day: number;\n readonly isOutsideMonth: boolean;\n readonly isToday: boolean;\n readonly isSelected: boolean;\n readonly isFocused: boolean;\n readonly isDisabled: boolean;\n readonly isWeekend: boolean;\n readonly markers: CoarDateMarker[];\n readonly markerCssClass: string;\n readonly markerTooltip: string | null;\n}\n\n/**\n * Scrollable calendar component displaying multiple months vertically.\n *\n * Uses CSS `content-visibility: auto` for virtualization to optimize performance\n * when displaying many months. The calendar scrolls vertically and syncs with\n * an external month list for navigation.\n *\n * @example\n * ```html\n * <coar-scrollable-calendar\n * [(value)]=\"selectedDate\"\n * [(activeMonth)]=\"visibleMonth\"\n * [min]=\"minDate\"\n * [max]=\"maxDate\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-scrollable-calendar',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-scrollable-calendar.component.html',\n styleUrl: './coar-scrollable-calendar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class CoarScrollableCalendarComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n private readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n private readonly ngZone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // View References\n // ============================================================\n\n /** Reference to the scroll container */\n protected scrollContainerRef = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n /** Reference to the scrollbar directive */\n protected scrollbarDirective = viewChild(CoarScrollbarDirective);\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Current selected date (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Currently visible/active month (two-way bindable, syncs with scroll position) */\n activeMonth = model<Temporal.PlainYearMonth>(Temporal.Now.plainDateISO().toPlainYearMonth());\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /** Date format configuration (pattern and first day of week) */\n dateFormatConfig = input<DateFormatConfig>();\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days (Saturday/Sunday) with a subtle background */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates (holidays, events, etc.) */\n markers = input<CoarDateMarker[]>([]);\n\n /**\n * Number of months to display before and after the current year.\n * Default: 12 months before, 12 months after (2 years total + current year).\n * @deprecated Use infinite scroll instead - this input is kept for backwards compatibility\n */\n monthRange = input<{ before: number; after: number }>({ before: 12, after: 12 });\n\n /**\n * Maximum number of months to keep in the DOM at once.\n * Default: 25 (roughly 2 years). Lower values improve performance but may cause\n * more frequent loading when scrolling quickly.\n */\n maxMonthsInDom = input<number>(25);\n\n /**\n * Number of months to load when reaching the edge of the current range.\n * Default: 6 (half a year at a time).\n */\n monthsToLoad = input<number>(6);\n\n // ============================================================\n // Outputs\n // ============================================================\n\n /** Emitted when a date is clicked */\n dateSelected = output<Temporal.PlainDate>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Focused date for keyboard navigation */\n protected readonly focusedDate = signal<Temporal.PlainDate | null>(null);\n\n /**\n * Today's date based on the configured timezone.\n * Reactive: updates when timezone changes.\n */\n protected readonly today = computed(() => {\n const tz = this.timeZoneService?.currentTimeZone();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n /** Flag to prevent scroll events while programmatically scrolling */\n private isScrollingProgrammatically = false;\n\n /** Flag to track when activeMonth is updated from scroll handler (prevents effect feedback loop) */\n private isUpdatingFromScroll = false;\n\n /** Flag to prevent multiple concurrent infinite scroll loads */\n private isLoadingMonths = false;\n\n /** Becomes true once the actual scroll viewport element is available (OverlayScrollbars initialized). */\n private readonly scrollViewportReady = signal(false);\n\n /** Becomes true once the calendar is properly scrolled to the active month. Prevents visible flickering. */\n protected readonly isScrollPositioned = signal(false);\n\n /** The earliest month currently in the DOM */\n private earliestMonth = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth().subtract({ months: 12 })\n );\n\n /** The latest month currently in the DOM */\n private latestMonth = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth().add({ months: 12 })\n );\n\n /** Signal-based months array for infinite scroll */\n protected months = signal<CoarCalendarMonth[]>([]);\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /**\n * Minimum month boundary derived from min date input.\n * Infinite scroll will not load months before this.\n */\n private minMonth = computed(() => {\n const minDate = this.min();\n return minDate ? minDate.toPlainYearMonth() : null;\n });\n\n /**\n * Maximum month boundary derived from max date input.\n * Infinite scroll will not load months after this.\n */\n private maxMonth = computed(() => {\n const maxDate = this.max();\n return maxDate ? maxDate.toPlainYearMonth() : null;\n });\n\n /**\n * Effective locale for calendar display.\n * Priority: input locale > locale service language > browser locale\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be 'de' or 'de-AT'. Using effectiveLocale() ensures the per-instance\n // locale input is respected.\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n // Convert 0-6 (Sun-Sat) format to ISO 1-7 (Mon-Sun) format\n // 0 (Sun) -> 7, 1 (Mon) -> 1, 2 (Tue) -> 2, ..., 6 (Sat) -> 6\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n // Fallback: detect pattern from Intl, default firstDayOfWeek to Monday\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n protected firstDayOfWeek = computed(() => this.effectiveDateFormat().firstDayOfWeek);\n\n protected daysOfWeek = computed(() => {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date?.dayNamesShort?.length === 7) {\n // dayNamesShort is [Mon, Tue, Wed, Thu, Fri, Sat, Sun] (Monday-first)\n const names = [...localeData.date.dayNamesShort];\n if (this.firstDayOfWeek() === 7) {\n // Sunday first: move Sunday from end to front\n const sunday = names.pop()!;\n names.unshift(sunday);\n }\n return names;\n }\n return coarGetLocalizedWeekdays(this.effectiveLocale(), this.firstDayOfWeek());\n });\n\n /**\n * Weekday headers with weekend flag for styling.\n * Returns array of { name, isWeekend } for each day.\n */\n protected weekdayHeaders = computed(() => {\n const names = this.daysOfWeek();\n const firstDay = this.firstDayOfWeek();\n\n return names.map((name, index) => {\n // Calculate which ISO day of week this is (1=Mon, 7=Sun)\n // If firstDayOfWeek is 1 (Monday): index 0=Mon(1), index 5=Sat(6), index 6=Sun(7)\n // If firstDayOfWeek is 7 (Sunday): index 0=Sun(7), index 1=Mon(1), index 6=Sat(6)\n let isoDayOfWeek: number;\n if (firstDay === 1) {\n isoDayOfWeek = index + 1; // 0->1(Mon), 5->6(Sat), 6->7(Sun)\n } else {\n isoDayOfWeek = index === 0 ? 7 : index; // 0->7(Sun), 1->1(Mon), 6->6(Sat)\n }\n const isWeekend = isoDayOfWeek === 6 || isoDayOfWeek === 7;\n return { name, isWeekend };\n });\n });\n\n // ============================================================\n // Constructor & Effects\n // ============================================================\n\n /** Flag to track pending scroll after month loading */\n private pendingScrollTarget: Temporal.PlainYearMonth | null = null;\n\n /** Track previous marker/value/min/max/focusedDate/locale state to avoid unnecessary rebuilds */\n private lastMarkersLength = 0;\n private lastValueString = '';\n private lastHighlightWeekends = false;\n private lastMinString = '';\n private lastMaxString = '';\n private lastFocusedDateString = '';\n private lastLocale = '';\n\n private readonly monthScrollTopInsetPx = 0;\n\n constructor() {\n // Initialize the months array\n this.initializeMonths();\n\n // Scroll to active month on initial render and set up scroll listener\n afterNextRender(() => {\n this.setupScrollListener();\n });\n\n // Watch for external activeMonth changes and scroll to it\n effect(() => {\n const isViewportReady = this.scrollViewportReady();\n const month = this.activeMonth();\n\n if (!isViewportReady) return;\n // Only scroll if not triggered by our own scroll handler or programmatic scroll\n if (!this.isScrollingProgrammatically && !this.isUpdatingFromScroll) {\n // Ensure the month is in the DOM before scrolling\n this.scrollToMonthWithLoad(month);\n }\n });\n\n // Rebuild months when markers, value, highlightWeekends, min/max, focusedDate, or locale changes\n // Min/max affects the isDisabled state of individual days\n // Locale affects month names\n effect(() => {\n const markers = this.markers();\n const value = this.value();\n const highlightWeekends = this.highlightWeekends();\n const min = this.min();\n const max = this.max();\n const focusedDate = this.focusedDate();\n const locale = this.effectiveLocale();\n\n // Check if anything actually changed\n const valueString = value?.toString() ?? '';\n const markersLength = markers.length;\n const minString = min?.toString() ?? '';\n const maxString = max?.toString() ?? '';\n const focusedDateString = focusedDate?.toString() ?? '';\n\n if (\n markersLength !== this.lastMarkersLength ||\n valueString !== this.lastValueString ||\n highlightWeekends !== this.lastHighlightWeekends ||\n minString !== this.lastMinString ||\n maxString !== this.lastMaxString ||\n focusedDateString !== this.lastFocusedDateString ||\n locale !== this.lastLocale\n ) {\n this.lastMarkersLength = markersLength;\n this.lastValueString = valueString;\n this.lastHighlightWeekends = highlightWeekends;\n this.lastMinString = minString;\n this.lastMaxString = maxString;\n this.lastFocusedDateString = focusedDateString;\n this.lastLocale = locale;\n\n // Only rebuild if we have months (after initialization)\n if (this.months().length > 0) {\n this.rebuildMonths();\n }\n }\n });\n\n // Watch for min/max input changes and constrain months array\n // This is needed because inputs are not available in the constructor\n effect(() => {\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n const currentMonths = this.months();\n\n // Only run if we have months (after initialization)\n if (currentMonths.length === 0) return;\n\n this.constrainMonthsToRange(minMonth, maxMonth);\n });\n\n // Initialize focused date: default to value or today\n effect(() => {\n const val = this.value();\n if (val && !this.focusedDate()) {\n this.focusedDate.set(val);\n }\n });\n\n effect(() => {\n if (this.value()) return;\n if (this.focusedDate()) return;\n this.focusedDate.set(this.today());\n });\n }\n\n /**\n * Constrains the months array to respect min/max boundaries.\n * Removes months outside the allowed range and updates boundary signals.\n */\n private constrainMonthsToRange(\n minMonth: Temporal.PlainYearMonth | null,\n maxMonth: Temporal.PlainYearMonth | null\n ): void {\n const currentMonths = this.months();\n if (currentMonths.length === 0) return;\n\n const currentEarliest = this.earliestMonth();\n const currentLatest = this.latestMonth();\n\n // Determine new boundaries\n let newEarliest = currentEarliest;\n let newLatest = currentLatest;\n\n if (minMonth && Temporal.PlainYearMonth.compare(newEarliest, minMonth) < 0) {\n newEarliest = minMonth;\n }\n if (maxMonth && Temporal.PlainYearMonth.compare(newLatest, maxMonth) > 0) {\n newLatest = maxMonth;\n }\n\n // Check if we need to trim the months array\n const needsTrim =\n Temporal.PlainYearMonth.compare(newEarliest, currentEarliest) !== 0 ||\n Temporal.PlainYearMonth.compare(newLatest, currentLatest) !== 0;\n\n if (!needsTrim) return;\n\n // Filter months to only include those within the new boundaries\n const filteredMonths = currentMonths.filter((month) => {\n const ym = month.yearMonth;\n const afterOrAtMin = Temporal.PlainYearMonth.compare(ym, newEarliest) >= 0;\n const beforeOrAtMax = Temporal.PlainYearMonth.compare(ym, newLatest) <= 0;\n return afterOrAtMin && beforeOrAtMax;\n });\n\n // Update boundary signals and months array\n this.earliestMonth.set(newEarliest);\n this.latestMonth.set(newLatest);\n this.months.set(filteredMonths);\n }\n\n /**\n * Rebuilds all months to update day states (selected, markers, etc.)\n */\n private rebuildMonths(): void {\n const currentMonths = this.months();\n if (currentMonths.length === 0) return;\n\n const updatedMonths = currentMonths.map((month) => this.createCalendarMonth(month.yearMonth));\n this.months.set(updatedMonths);\n }\n\n /**\n * Scrolls to a month, loading it first if necessary.\n */\n private scrollToMonthWithLoad(targetMonth: Temporal.PlainYearMonth): void {\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n // Check if month is already in range\n const isInRange =\n Temporal.PlainYearMonth.compare(targetMonth, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(targetMonth, latest) <= 0;\n\n if (isInRange) {\n // Month is already loaded, scroll to it instantly\n // Using instant scroll to avoid timing issues with infinite scroll detection\n // Smooth scroll could still be animating when the programmatic flag resets,\n // causing checkInfiniteScroll to trigger and load more months\n this.scrollToMonth(targetMonth, false);\n } else {\n // Need to load months first, then scroll\n // Block infinite scroll and scroll events during targeted navigation\n this.isScrollingProgrammatically = true;\n this.pendingScrollTarget = targetMonth;\n this.loadMonthsToReach(targetMonth);\n }\n }\n\n /**\n * Loads months to reach a target month that's outside the current range.\n */\n private loadMonthsToReach(targetMonth: Temporal.PlainYearMonth): void {\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n if (Temporal.PlainYearMonth.compare(targetMonth, earliest) < 0) {\n // Target is before our range - load earlier months\n const monthsNeeded =\n (earliest.year - targetMonth.year) * 12 + (earliest.month - targetMonth.month);\n this.loadEarlierMonthsSync(monthsNeeded + 3); // Add buffer\n } else {\n // Target is after our range - load later months\n const monthsNeeded =\n (targetMonth.year - latest.year) * 12 + (targetMonth.month - latest.month);\n this.loadLaterMonthsSync(monthsNeeded + 3); // Add buffer\n }\n }\n\n /**\n * Sets up scroll listener on the OverlayScrollbars viewport element.\n * Native scroll events don't fire on the original element when using OverlayScrollbars.\n */\n private setupScrollListener(): void {\n const maxAttempts = 50;\n const attemptDelayMs = 50;\n let attempts = 0;\n\n const tryAttach = () => {\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) {\n attempts++;\n if (attempts <= maxAttempts) {\n setTimeout(tryAttach, attemptDelayMs);\n }\n return;\n }\n\n this.scrollViewportReady.set(true);\n\n // Listen to scroll events on the actual scroll viewport element.\n // Native scroll events won't fire on the host element when using OverlayScrollbars.\n const scrollHandler = () => this.onScroll();\n this.ngZone.runOutsideAngular(() => {\n viewport.addEventListener('scroll', scrollHandler, { passive: true });\n });\n\n this.destroyRef.onDestroy(() => {\n viewport.removeEventListener('scroll', scrollHandler);\n });\n\n // OverlayScrollbars initialization can reset the scroll position.\n // Re-align after the viewport exists (effect already triggered by scrollViewportReady).\n this.ensureMonthAlignedInViewport(this.activeMonth());\n };\n\n tryAttach();\n }\n\n private getScrollViewportElement(): HTMLElement | null {\n const osViewport = this.scrollbarDirective()?.getInstance()?.elements().viewport;\n if (osViewport) return osViewport;\n\n const container = this.scrollContainerRef()?.nativeElement ?? null;\n if (!container) return null;\n\n const firstChild = container.firstElementChild as HTMLElement | null;\n if (firstChild && firstChild.scrollHeight > firstChild.clientHeight) return firstChild;\n if (container.scrollHeight > container.clientHeight) return container;\n\n return firstChild ?? container;\n }\n\n private ensureMonthAlignedInViewport(targetMonth: Temporal.PlainYearMonth): void {\n let attempts = 0;\n const maxAttempts = 40;\n\n this.isScrollingProgrammatically = true;\n\n const tryAlign = () => {\n attempts++;\n\n const container = this.scrollContainerRef()?.nativeElement;\n const viewport = this.getScrollViewportElement();\n if (!container || !viewport) {\n if (attempts < maxAttempts) requestAnimationFrame(tryAlign);\n else {\n this.isScrollingProgrammatically = false;\n // Show calendar even if alignment failed to avoid permanent invisible state\n this.isScrollPositioned.set(true);\n }\n return;\n }\n\n const monthId = this.getMonthElementId(targetMonth);\n const monthElement = container.querySelector(`#${monthId}`) as HTMLElement | null;\n if (!monthElement) {\n if (attempts < maxAttempts) requestAnimationFrame(tryAlign);\n else {\n this.isScrollingProgrammatically = false;\n this.isScrollPositioned.set(true);\n }\n return;\n }\n\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n const offset = monthRect.top - viewportRect.top - this.monthScrollTopInsetPx;\n\n if (Math.abs(offset) > 1) {\n viewport.scrollTop = viewport.scrollTop + offset;\n }\n\n // Calendar is now visible at correct position - show it immediately on first successful alignment\n if (!this.isScrollPositioned()) {\n this.isScrollPositioned.set(true);\n }\n\n if (attempts < maxAttempts) {\n requestAnimationFrame(tryAlign);\n return;\n }\n\n setTimeout(() => {\n this.isScrollingProgrammatically = false;\n }, 50);\n };\n\n requestAnimationFrame(tryAlign);\n }\n\n private scrollMonthElementToTop(monthElement: HTMLElement, smooth: boolean): void {\n const viewport = this.getScrollViewportElement();\n\n if (viewport) {\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n const currentScrollTop = viewport.scrollTop;\n const targetScrollTop =\n currentScrollTop + (monthRect.top - viewportRect.top) - this.monthScrollTopInsetPx;\n\n this.isScrollingProgrammatically = true;\n viewport.scrollTo({\n top: targetScrollTop,\n behavior: smooth ? 'smooth' : 'auto',\n });\n\n setTimeout(\n () => {\n this.isScrollingProgrammatically = false;\n },\n smooth ? 500 : 50\n );\n return;\n }\n\n this.isScrollingProgrammatically = true;\n monthElement.scrollIntoView({\n behavior: smooth ? 'smooth' : 'instant',\n block: 'start',\n });\n\n setTimeout(\n () => {\n this.isScrollingProgrammatically = false;\n },\n smooth ? 500 : 50\n );\n }\n\n /**\n * Initializes the months array with an initial range around today.\n * Respects min/max date constraints when setting boundaries.\n */\n private initializeMonths(): void {\n const baseMonth = this.today().toPlainYearMonth();\n const range = this.monthRange();\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n\n // Calculate initial range boundaries\n let earliest = baseMonth.subtract({ months: range.before });\n let latest = baseMonth.add({ months: range.after });\n\n // Clamp to min/max constraints\n if (minMonth && Temporal.PlainYearMonth.compare(earliest, minMonth) < 0) {\n earliest = minMonth;\n }\n if (maxMonth && Temporal.PlainYearMonth.compare(latest, maxMonth) > 0) {\n latest = maxMonth;\n }\n\n // Set the range boundaries\n this.earliestMonth.set(earliest);\n this.latestMonth.set(latest);\n\n // Generate initial months\n const initialMonths: CoarCalendarMonth[] = [];\n let current = this.earliestMonth();\n const end = this.latestMonth();\n\n while (Temporal.PlainYearMonth.compare(current, end) <= 0) {\n initialMonths.push(this.createCalendarMonth(current));\n current = current.add({ months: 1 });\n }\n\n this.months.set(initialMonths);\n }\n\n /**\n * Checks if we need to load more months based on scroll position.\n * Respects min/max constraints - won't load beyond boundaries.\n */\n private checkInfiniteScroll(): void {\n if (this.isLoadingMonths || this.isScrollingProgrammatically) {\n return;\n }\n\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) return;\n\n const scrollTop = viewport.scrollTop;\n const scrollHeight = viewport.scrollHeight;\n const clientHeight = viewport.clientHeight;\n const threshold = 500; // pixels from edge to trigger load\n\n const minMonth = this.minMonth();\n const maxMonth = this.maxMonth();\n const currentEarliest = this.earliestMonth();\n const currentLatest = this.latestMonth();\n\n // Check if near top - load earlier months (only if not at min boundary)\n const canLoadEarlier =\n !minMonth || Temporal.PlainYearMonth.compare(currentEarliest, minMonth) > 0;\n if (scrollTop < threshold && canLoadEarlier) {\n this.loadEarlierMonths(this.monthsToLoad());\n }\n\n // Check if near bottom - load later months (only if not at max boundary)\n const canLoadLater = !maxMonth || Temporal.PlainYearMonth.compare(currentLatest, maxMonth) < 0;\n if (scrollHeight - scrollTop - clientHeight < threshold && canLoadLater) {\n this.loadLaterMonths(this.monthsToLoad());\n }\n }\n\n /**\n * Loads earlier months and maintains scroll position.\n * Respects min date constraint - won't load beyond minMonth.\n */\n private loadEarlierMonths(count: number): void {\n if (this.isLoadingMonths) return;\n\n const minMonth = this.minMonth();\n const currentEarliest = this.earliestMonth();\n\n // Check if already at min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(currentEarliest, minMonth) <= 0) {\n return;\n }\n\n this.isLoadingMonths = true;\n\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n const scrollHeightBefore = viewport?.scrollHeight ?? 0;\n\n // Generate new months, stopping at min boundary\n const newMonths: CoarCalendarMonth[] = [];\n let current = currentEarliest;\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.subtract({ months: 1 });\n\n // Stop if we've reached the min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(nextMonth, minMonth) < 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.unshift(this.createCalendarMonth(current));\n }\n\n // Only proceed if we have months to add\n if (newMonths.length === 0) {\n this.isLoadingMonths = false;\n return;\n }\n\n this.earliestMonth.set(current);\n\n // Add new months to the beginning\n this.ngZone.run(() => {\n this.months.update((months: CoarCalendarMonth[]) => [...newMonths, ...months]);\n\n // Trim from the end if we have too many months\n this.trimMonthsFromEnd();\n });\n\n // Maintain scroll position after DOM update\n requestAnimationFrame(() => {\n if (viewport) {\n const scrollHeightAfter = viewport.scrollHeight;\n const addedHeight = scrollHeightAfter - scrollHeightBefore;\n viewport.scrollTop += addedHeight;\n }\n this.isLoadingMonths = false;\n this.checkPendingScroll();\n });\n }\n\n /**\n * Loads later months.\n * Respects max date constraint - won't load beyond maxMonth.\n */\n private loadLaterMonths(count: number): void {\n if (this.isLoadingMonths) return;\n\n const maxMonth = this.maxMonth();\n const currentLatest = this.latestMonth();\n\n // Check if already at max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(currentLatest, maxMonth) >= 0) {\n return;\n }\n\n this.isLoadingMonths = true;\n\n // Generate new months, stopping at max boundary\n const newMonths: CoarCalendarMonth[] = [];\n let current = currentLatest;\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.add({ months: 1 });\n\n // Stop if we've exceeded the max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(nextMonth, maxMonth) > 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.push(this.createCalendarMonth(current));\n }\n\n // Only proceed if we have months to add\n if (newMonths.length === 0) {\n this.isLoadingMonths = false;\n return;\n }\n\n this.latestMonth.set(current);\n\n // Add new months to the end\n this.ngZone.run(() => {\n this.months.update((months: CoarCalendarMonth[]) => [...months, ...newMonths]);\n\n // Trim from the beginning if we have too many months\n this.trimMonthsFromBeginning();\n });\n\n // Small delay to allow DOM to update\n requestAnimationFrame(() => {\n this.isLoadingMonths = false;\n this.checkPendingScroll();\n });\n }\n\n /**\n * Loads earlier months synchronously (for targeted navigation).\n * Does not maintain scroll position - caller handles scrolling.\n * Respects min date constraint.\n */\n private loadEarlierMonthsSync(count: number): void {\n const minMonth = this.minMonth();\n\n // Generate new months, respecting min constraint\n const newMonths: CoarCalendarMonth[] = [];\n let current = this.earliestMonth();\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.subtract({ months: 1 });\n\n // Stop if we've reached the min boundary\n if (minMonth && Temporal.PlainYearMonth.compare(nextMonth, minMonth) < 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.unshift(this.createCalendarMonth(current));\n }\n\n if (newMonths.length === 0) return;\n\n this.earliestMonth.set(current);\n\n // Add new months to the beginning (no trimming for targeted navigation)\n this.months.update((months: CoarCalendarMonth[]) => [...newMonths, ...months]);\n\n // Schedule scroll after DOM update\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkPendingScroll();\n });\n });\n }\n\n /**\n * Loads later months synchronously (for targeted navigation).\n * Respects max date constraint.\n */\n private loadLaterMonthsSync(count: number): void {\n const maxMonth = this.maxMonth();\n\n // Generate new months, respecting max constraint\n const newMonths: CoarCalendarMonth[] = [];\n let current = this.latestMonth();\n\n for (let i = 0; i < count; i++) {\n const nextMonth = current.add({ months: 1 });\n\n // Stop if we've exceeded the max boundary\n if (maxMonth && Temporal.PlainYearMonth.compare(nextMonth, maxMonth) > 0) {\n break;\n }\n\n current = nextMonth;\n newMonths.push(this.createCalendarMonth(current));\n }\n\n if (newMonths.length === 0) return;\n\n this.latestMonth.set(current);\n\n // Add new months to the end (no trimming for targeted navigation)\n this.months.update((months: CoarCalendarMonth[]) => [...months, ...newMonths]);\n\n // Schedule scroll after DOM update\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.checkPendingScroll();\n });\n });\n }\n\n /**\n * Checks if there's a pending scroll target and scrolls to it if available.\n */\n private checkPendingScroll(): void {\n if (!this.pendingScrollTarget) return;\n\n const target = this.pendingScrollTarget;\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n // Check if target is now in range\n const isInRange =\n Temporal.PlainYearMonth.compare(target, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(target, latest) <= 0;\n\n if (isInRange) {\n this.pendingScrollTarget = null;\n\n // Scroll to the target month (instant, no animation)\n const container = this.scrollContainerRef()?.nativeElement;\n if (container) {\n const monthId = this.getMonthElementId(target);\n const monthElement = container.querySelector(`#${monthId}`);\n if (monthElement) {\n this.scrollMonthElementToTop(monthElement as HTMLElement, false);\n }\n }\n\n // Update activeMonth after instant scroll (onScroll won't fire for instant jumps)\n this.isUpdatingFromScroll = true;\n this.activeMonth.set(target);\n\n // Reset flags after a short delay to allow any queued scroll events to be ignored\n setTimeout(() => {\n this.isScrollingProgrammatically = false;\n this.isUpdatingFromScroll = false;\n }, 100);\n }\n }\n\n /**\n * Trims months from the end of the array to stay within maxMonthsInDom.\n */\n private trimMonthsFromEnd(): void {\n const max = this.maxMonthsInDom();\n const currentMonths = this.months();\n\n if (currentMonths.length > max) {\n const trimCount = currentMonths.length - max;\n const trimmed = currentMonths.slice(0, -trimCount);\n this.months.set(trimmed);\n this.latestMonth.set(trimmed[trimmed.length - 1].yearMonth);\n }\n }\n\n /**\n * Trims months from the beginning of the array to stay within maxMonthsInDom.\n */\n private trimMonthsFromBeginning(): void {\n const max = this.maxMonthsInDom();\n const currentMonths = this.months();\n\n if (currentMonths.length > max) {\n const trimCount = currentMonths.length - max;\n const trimmed = currentMonths.slice(trimCount);\n this.months.set(trimmed);\n this.earliestMonth.set(trimmed[0].yearMonth);\n }\n }\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /**\n * Scrolls to a specific month in the calendar.\n *\n * @param yearMonth - The month to scroll to\n * @param smooth - Whether to use smooth scrolling animation\n */\n scrollToMonth(yearMonth: Temporal.PlainYearMonth, smooth = true): void {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const monthId = this.getMonthElementId(yearMonth);\n const monthElement = container.querySelector(`#${monthId}`);\n if (!monthElement) return;\n\n this.scrollMonthElementToTop(monthElement as HTMLElement, smooth);\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n /** Handle scroll events to update active month */\n protected onScroll(): void {\n if (this.isScrollingProgrammatically) {\n return;\n }\n\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const viewport = this.getScrollViewportElement() ?? container;\n\n // Find the month element with the most visible area\n const monthElements = container.querySelectorAll('[data-year-month]');\n const viewportRect = viewport.getBoundingClientRect();\n const containerTop = viewportRect.top;\n const containerBottom = viewportRect.bottom;\n\n let mostVisibleMonth: Temporal.PlainYearMonth | null = null;\n let maxVisibleArea = 0;\n\n for (let i = 0; i < monthElements.length; i++) {\n const element = monthElements[i];\n const rect = element.getBoundingClientRect();\n\n // Calculate visible portion of this month element\n const visibleTop = Math.max(rect.top, containerTop);\n const visibleBottom = Math.min(rect.bottom, containerBottom);\n const visibleHeight = Math.max(0, visibleBottom - visibleTop);\n\n if (visibleHeight > maxVisibleArea) {\n maxVisibleArea = visibleHeight;\n const yearMonthStr = element.getAttribute('data-year-month');\n if (yearMonthStr) {\n mostVisibleMonth = Temporal.PlainYearMonth.from(yearMonthStr);\n }\n }\n }\n\n if (mostVisibleMonth && !mostVisibleMonth.equals(this.activeMonth())) {\n // Set flag to prevent effect from triggering scroll\n this.isUpdatingFromScroll = true;\n // Run inside Angular zone since scroll listener runs outside\n this.ngZone.run(() => {\n this.activeMonth.set(mostVisibleMonth);\n });\n // Reset flag after a microtask to ensure effect has run\n queueMicrotask(() => {\n this.isUpdatingFromScroll = false;\n });\n }\n\n // Check if we need to load more months (infinite scroll)\n this.checkInfiniteScroll();\n }\n\n /** Handle keyboard navigation */\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const focused = this.focusedDate();\n if (focused) {\n this.selectDate(focused);\n }\n break;\n }\n case 'ArrowLeft':\n event.preventDefault();\n this.moveFocus(-1, 'day');\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.moveFocus(1, 'day');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-7, 'day');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(7, 'day');\n break;\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(-1, 'year');\n } else {\n this.moveFocus(-1, 'month');\n }\n break;\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(1, 'year');\n } else {\n this.moveFocus(1, 'month');\n }\n break;\n case 'Home':\n event.preventDefault();\n this.focusedDate.set(this.today());\n this.scrollToFocusedDate(this.today());\n break;\n }\n }\n\n /** Handle date selection */\n protected selectDate(date: Temporal.PlainDate): void {\n if (this.isDateDisabled(date)) return;\n\n this.value.set(date);\n this.dateSelected.emit(date);\n this.focusedDate.set(date);\n }\n\n // ============================================================\n // Helper Methods\n // ============================================================\n\n /**\n * Moves keyboard focus by the given amount and unit.\n * Clamps to min/max, auto-scrolls to keep the focused date visible.\n */\n private moveFocus(amount: number, unit: 'day' | 'month' | 'year'): void {\n const current = this.focusedDate() ?? this.value() ?? this.today();\n\n let newDate: Temporal.PlainDate;\n switch (unit) {\n case 'day':\n newDate = current.add({ days: amount });\n break;\n case 'month':\n newDate = current.add({ months: amount });\n break;\n case 'year':\n newDate = current.add({ years: amount });\n break;\n }\n\n newDate = coarClampPlainDate(newDate, { min: this.min(), max: this.max() });\n\n this.focusedDate.set(newDate);\n this.scrollToFocusedDate(newDate);\n }\n\n /**\n * Scrolls to ensure the focused date's month is visible, then focuses the button element.\n */\n private scrollToFocusedDate(date: Temporal.PlainDate): void {\n const targetMonth = date.toPlainYearMonth();\n const earliest = this.earliestMonth();\n const latest = this.latestMonth();\n\n const isInRange =\n Temporal.PlainYearMonth.compare(targetMonth, earliest) >= 0 &&\n Temporal.PlainYearMonth.compare(targetMonth, latest) <= 0;\n\n if (!isInRange) {\n this.scrollToMonthWithLoad(targetMonth);\n this.focusDateButtonAfterDelay(date);\n return;\n }\n\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const monthId = this.getMonthElementId(targetMonth);\n const monthElement = container.querySelector(`#${monthId}`) as HTMLElement | null;\n\n if (monthElement) {\n const viewport = this.getScrollViewportElement();\n if (viewport) {\n const viewportRect = viewport.getBoundingClientRect();\n const monthRect = monthElement.getBoundingClientRect();\n\n const isAbove = monthRect.bottom < viewportRect.top;\n const isBelow = monthRect.top > viewportRect.bottom;\n\n if (isAbove || isBelow) {\n this.scrollMonthElementToTop(monthElement, false);\n }\n }\n }\n\n this.focusDateButton(date);\n }\n\n private focusDateButton(date: Temporal.PlainDate): void {\n requestAnimationFrame(() => {\n const container = this.scrollContainerRef()?.nativeElement;\n if (!container) return;\n\n const dateStr = date.toString();\n const button = container.querySelector(\n `button[data-date=\"${dateStr}\"]`\n ) as HTMLElement | null;\n if (button) {\n button.focus();\n }\n });\n }\n\n private focusDateButtonAfterDelay(date: Temporal.PlainDate): void {\n setTimeout(() => {\n this.focusDateButton(date);\n }, 200);\n }\n\n /** Generate a unique element ID for a month */\n protected getMonthElementId(yearMonth: Temporal.PlainYearMonth): string {\n return `month-${yearMonth.year}-${yearMonth.month}`;\n }\n\n /** Check if a date is disabled (outside min/max range) */\n protected isDateDisabled(date: Temporal.PlainDate): boolean {\n const minDate = this.min();\n const maxDate = this.max();\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return true;\n }\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return true;\n }\n return false;\n }\n\n /** Create a calendar month object */\n private createCalendarMonth(yearMonth: Temporal.PlainYearMonth): CoarCalendarMonth {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const monthName = localeData?.date?.monthNames?.[yearMonth.month - 1]\n ?? new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(yearMonth.year, yearMonth.month - 1, 1));\n\n const gridCells = coarGetCalendarGridDates(yearMonth, this.firstDayOfWeek());\n const days = gridCells.map((cell) => this.createCalendarDay(cell.date, cell.isOutsideMonth));\n\n // Calculate week numbers (one per row, 6 rows)\n const weekNumbers: number[] = [];\n for (let row = 0; row < 6; row++) {\n const firstDayOfRow = gridCells[row * 7];\n weekNumbers.push(coarCalculateIsoWeekNumber(firstDayOfRow.date));\n }\n\n return {\n yearMonth,\n monthName,\n year: yearMonth.year,\n days,\n weekNumbers,\n };\n }\n\n /** Create a calendar day object */\n private createCalendarDay(date: Temporal.PlainDate, isOutsideMonth: boolean): CoarCalendarDay {\n const selectedDate = this.value();\n const focused = this.focusedDate();\n const dayOfWeek = date.dayOfWeek; // 1=Mon, 7=Sun\n\n // Find markers for this date (check if date falls within marker range)\n const dateMarkers = this.markers().filter((marker) => {\n const afterStart = Temporal.PlainDate.compare(date, marker.startDate) >= 0;\n const beforeEnd = marker.endDate\n ? Temporal.PlainDate.compare(date, marker.endDate) <= 0\n : Temporal.PlainDate.compare(date, marker.startDate) === 0;\n return afterStart && beforeEnd;\n });\n\n // Get CSS class from first marker if available\n const markerCssClass = dateMarkers.length > 0 ? (dateMarkers[0].cssClass ?? '') : '';\n\n // Build tooltip from marker descriptions\n const markerTooltip =\n dateMarkers.length > 0\n ? dateMarkers\n .map((m) => m.description)\n .filter(Boolean)\n .join('\\n') || null\n : null;\n\n return {\n date,\n day: date.day,\n isOutsideMonth,\n isToday: Temporal.PlainDate.compare(date, this.today()) === 0,\n isSelected: selectedDate ? Temporal.PlainDate.compare(date, selectedDate) === 0 : false,\n isFocused: focused ? Temporal.PlainDate.compare(date, focused) === 0 : false,\n isDisabled: this.isDateDisabled(date),\n isWeekend: dayOfWeek === 6 || dayOfWeek === 7, // Saturday or Sunday\n markers: dateMarkers,\n markerCssClass,\n markerTooltip,\n };\n }\n}\n","<div class=\"coar-scrollable-calendar\">\n <!-- Weekday headers -->\n <div class=\"coar-scrollable-calendar__weekdays\" [class.coar-scrollable-calendar__weekdays--with-weeks]=\"showWeekNumbers()\">\n @if (showWeekNumbers()) {\n <span class=\"coar-scrollable-calendar__week-spacer\"></span>\n }\n @for (header of weekdayHeaders(); track header.name) {\n <span class=\"coar-scrollable-calendar__weekday\" [class.coar-scrollable-calendar__weekday--weekend]=\"highlightWeekends() && header.isWeekend\">{{\n header.name\n }}</span>\n }\n </div>\n\n <!-- Scrollable months container with fade effect -->\n <div class=\"coar-scrollable-calendar__months-wrapper\" [class.coar-scrollable-calendar__months-wrapper--ready]=\"isScrollPositioned()\">\n <div #scrollContainer class=\"coar-scrollable-calendar__months\" coarScrollbar [overflowX]=\"'hidden'\" [autoHide]=\"'leave'\">\n @for (month of months(); track month.yearMonth.toString()) {\n <div [id]=\"getMonthElementId(month.yearMonth)\" [attr.data-year-month]=\"month.yearMonth.toString()\" class=\"coar-scrollable-calendar__month\">\n <!-- Month header -->\n <div class=\"coar-scrollable-calendar__month-header\" [class.coar-scrollable-calendar__month-header--with-weeks]=\"showWeekNumbers()\">\n <span class=\"coar-scrollable-calendar__month-name\">{{ month.monthName }}</span>\n <span class=\"coar-scrollable-calendar__month-year\">{{ month.year }}</span>\n </div>\n\n <!-- Days grid -->\n <div class=\"coar-scrollable-calendar__grid\" [class.coar-scrollable-calendar__grid--with-weeks]=\"showWeekNumbers()\" role=\"grid\">\n @for (day of month.days; track day.date.toString(); let i = $index) {\n @if (showWeekNumbers() && i % 7 === 0) {\n <span class=\"coar-scrollable-calendar__week-number\">\n {{ month.weekNumbers[i / 7] }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"coar-scrollable-calendar__day\"\n [class.coar-scrollable-calendar__day--outside]=\"day.isOutsideMonth\"\n [class.coar-scrollable-calendar__day--today]=\"day.isToday\"\n [class.coar-scrollable-calendar__day--selected]=\"day.isSelected\"\n [class.coar-scrollable-calendar__day--focused]=\"day.isFocused\"\n [class.coar-scrollable-calendar__day--disabled]=\"day.isDisabled\"\n [class.coar-scrollable-calendar__day--weekend]=\"highlightWeekends() && day.isWeekend\"\n [class.coar-scrollable-calendar__day--marked]=\"day.markers.length > 0\"\n [class]=\"day.markerCssClass\"\n [disabled]=\"day.isDisabled\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n [attr.data-date]=\"day.date.toString()\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n","/**\n * Shared date formatting configuration.\n *\n * Note: This config is intentionally small so it can be used by multiple UI components\n * (date picker, future calendar, etc.) without pulling in Angular-only code.\n */\nexport interface DateFormatConfig {\n /** Date format pattern: 'dd.mm.yyyy', 'dd/mm/yyyy', 'mm/dd/yyyy', 'yyyy-mm-dd' */\n readonly pattern: 'dd.mm.yyyy' | 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy-mm-dd';\n\n /** First day of week: 1 = Monday, 7 = Sunday */\n readonly firstDayOfWeek: 1 | 7;\n}\n\n/**\n * Maps date format patterns to Maskito date modes.\n * Used by all picker components that initialize Maskito input masks.\n */\nexport const COAR_DATE_FORMAT_TO_MASKITO_MODE: Record<\n DateFormatConfig['pattern'],\n 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy/mm/dd'\n> = {\n 'dd.mm.yyyy': 'dd/mm/yyyy',\n 'dd/mm/yyyy': 'dd/mm/yyyy',\n 'mm/dd/yyyy': 'mm/dd/yyyy',\n 'yyyy-mm-dd': 'yyyy/mm/dd',\n};\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef, type Placement } from '@cocoar/ui/overlay';\nimport {\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\nimport type { DateFormatConfig } from './coar-date-format';\nimport type { CoarDateMarker } from './coar-date-marker';\nimport {\n coarDetectDateFormatPatternFromIntl,\n coarGetDateSeparatorForPattern,\n} from './coar-date-helpers';\nimport { CoarControlValueAccessor } from '../../forms/_base/coar-control-value-accessor';\n\n/**\n * Shared size type for date/datetime pickers.\n */\nexport type CoarDatePickerSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Month item structure for the month list.\n */\nexport interface CoarMonthItem {\n readonly month: number;\n readonly name: string;\n readonly isActive: boolean;\n readonly yearMonth: Temporal.PlainYearMonth;\n}\n\n/**\n * Base class for date and datetime picker components.\n *\n * Provides shared functionality:\n * - Localization service integration\n * - Date format configuration resolution\n * - Month list navigation\n * - Overlay management\n * - Common state computations\n *\n * @template T - The value type (PlainDate or PlainDateTime)\n */\n@Directive()\nexport abstract class CoarDatePickerBase<T> extends CoarControlValueAccessor<T | null> {\n // ============================================================\n // Injected Services\n // ============================================================\n\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly overlayBuilder = createOverlayBuilder();\n protected readonly localizationService = inject(CoarLocalizationService, { optional: true });\n protected readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n protected readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n\n protected overlayRef: OverlayRef | null = null;\n\n /** Current language from localization service (reactive) */\n protected readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n /**\n * Current timezone from timezone service (reactive).\n * Used for calculating \"today\" correctly across timezone boundaries and DST.\n */\n protected readonly currentTimeZone = this.timeZoneService?.currentTimeZone;\n\n /**\n * Today's date based on the configured timezone.\n *\n * This is a computed signal that reacts to timezone changes.\n * Uses the timezone service if available, otherwise falls back to system timezone.\n *\n * Important for DST: At 11 PM in Vienna on March 30th, it might already be\n * March 31st in New York. This computed ensures \"today\" is always correct\n * for the configured timezone.\n */\n protected readonly today = computed(() => {\n const tz = this.currentTimeZone?.();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n // ============================================================\n // Common Inputs\n // ============================================================\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text when no value is selected */\n placeholder = input<string>('');\n\n /** Size variant */\n size = input<CoarDatePickerSize>('m');\n\n /** Whether the picker is readonly */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the picker is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the field is required */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message (empty string = no error) */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Date format configuration (pattern and first day of week).\n * If not provided, uses locale service default or falls back to European format.\n */\n dateFormatConfig = input<DateFormatConfig>();\n\n /**\n * Whether to show the current month button (floating action button that scrolls to current month).\n */\n showTodayMonthButton = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates */\n markers = input<CoarDateMarker[]>([]);\n\n /** Whether to show a clear button when a value is selected */\n clearable = input<boolean, unknown>(true, {\n transform: (v: unknown) => (v === '' ? true : booleanAttribute(v)),\n });\n\n /**\n * Minimum year in the year stepper.\n * Default: current year - 100\n */\n minYear = input<number>(Temporal.Now.plainDateISO().year - 100);\n\n /**\n * Maximum year in the year stepper.\n * Default: current year + 50\n */\n maxYear = input<number>(Temporal.Now.plainDateISO().year + 50);\n\n // ============================================================\n // Common Outputs\n // ============================================================\n\n /** Emitted when the picker opens */\n opened = output<void>();\n\n /** Emitted when the picker closes */\n closed = output<void>();\n\n // ============================================================\n // View Queries (resolved from subclass templates)\n // ============================================================\n\n /** Reference to the trigger element */\n protected triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n /** Reference to the panel template */\n protected panelTemplateRef = viewChild<TemplateRef<unknown>>('panelTemplate');\n\n // ============================================================\n // ID Generation\n // ============================================================\n\n /** Unique ID for this component instance. Subclasses must set this with their selector prefix. */\n protected abstract readonly uid: string;\n\n /** ID for the label element */\n protected labelId = computed(() => `${this.uid}-label`);\n\n /** ID for the input element */\n protected inputId = computed(() => `${this.uid}-input`);\n\n /** ID for the panel */\n protected panelId = computed(() => `${this.uid}-panel`);\n\n /** ID for the message element */\n protected messageId = computed(() => `${this.uid}-message`);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Whether the panel is open */\n protected isOpen = signal(false);\n\n /** Panel position (determined before opening) */\n protected panelPosition = signal<'top' | 'bottom'>('bottom');\n\n /** Display value for the input field */\n protected displayValue = signal('');\n\n /** Currently visible month in the calendar (synced with month list) */\n protected activeMonth = signal<Temporal.PlainYearMonth | null>(null);\n\n // ============================================================\n // Computed: Date Format Configuration\n // ============================================================\n\n /**\n * Effective date format configuration.\n * Resolution order:\n * 1. Explicit dateFormatConfig input\n * 2. Localization data store (based on current language)\n * 3. Intl.DateTimeFormat detection from locale\n * 4. Default: European format (dd.mm.yyyy)\n */\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale key.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be a language code ('de') or a full BCP 47 tag ('de-AT').\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n /** Get the date format pattern */\n protected dateFormat = computed(() => this.effectiveDateFormat().pattern);\n\n /** Get the separator character */\n protected separator = computed(() => coarGetDateSeparatorForPattern(this.dateFormat()));\n\n /**\n * Effective locale.\n * Resolution order:\n * 1. Explicit locale input\n * 2. Current language from localization service\n * 3. Browser's navigator.language\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n // ============================================================\n // Computed: Common State\n // ============================================================\n\n /** Whether the picker has an error state */\n protected hasError = computed(() => this.error().length > 0);\n\n /** The message to display (error takes priority over hint) */\n protected displayMessage = computed(() => this.error() || this.hint());\n\n /** Whether the picker is disabled (including CVA disabled state) */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.getValue() !== null && !this.isDisabled() && !this.readonly();\n });\n\n // ============================================================\n // Abstract Methods (subclasses must implement)\n // ============================================================\n\n /**\n * Get the current value. Subclasses implement this to access their typed model.\n */\n protected abstract getValue(): T | null;\n\n /**\n * Get the resolved active month based on the current value.\n * For date picker: value?.toPlainYearMonth()\n * For datetime picker: value?.toPlainDate().toPlainYearMonth()\n */\n protected abstract resolvedActiveMonth(): Temporal.PlainYearMonth;\n\n /**\n * Get the selected date as a PlainDate for marker filtering.\n * For date picker: value()\n * For datetime/zoned pickers: selectedDate() (extracted from value)\n */\n protected abstract getSelectedPlainDate(): Temporal.PlainDate | null;\n\n /**\n * Reset the value to null. Called by clearValue().\n * Subclasses set their model to null, emit valueChange, and handle extra state (e.g. pendingTime).\n */\n protected abstract resetValue(): void;\n\n /**\n * Estimated panel height for overlay placement calculation.\n */\n protected abstract estimatePanelHeight(): number;\n\n // ============================================================\n // Computed: Selected Date Markers\n // ============================================================\n\n /**\n * Markers for the currently selected date.\n */\n protected selectedDateMarkers = computed((): CoarDateMarker[] => {\n const date = this.getSelectedPlainDate();\n if (!date) return [];\n\n return this.markers().filter((marker) => {\n const afterStart = Temporal.PlainDate.compare(date, marker.startDate) >= 0;\n const beforeEnd = marker.endDate\n ? Temporal.PlainDate.compare(date, marker.endDate) <= 0\n : Temporal.PlainDate.compare(date, marker.startDate) === 0;\n return afterStart && beforeEnd;\n });\n });\n\n // ============================================================\n // Computed: Month List\n // ============================================================\n\n /** Current year from activeMonth */\n protected currentYear = computed(() => this.resolvedActiveMonth().year);\n\n /** Current month number from activeMonth (1-12) */\n protected currentMonthNumber = computed(() => this.resolvedActiveMonth().month);\n\n /** Whether previous year button is disabled */\n protected isPrevYearDisabled = computed(() => this.currentYear() <= this.minYear());\n\n /** Whether next year button is disabled */\n protected isNextYearDisabled = computed(() => this.currentYear() >= this.maxYear());\n\n /**\n * Month list items for the current year.\n */\n protected monthItems = computed((): CoarMonthItem[] => {\n const year = this.currentYear();\n const currentMonth = this.currentMonthNumber();\n const locale = this.effectiveLocale();\n\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const cachedMonthNames = localeData?.date?.monthNamesShort;\n\n const formatter = cachedMonthNames ? undefined : new Intl.DateTimeFormat(locale, { month: 'short' });\n\n const items: CoarMonthItem[] = [];\n\n for (let m = 1; m <= 12; m++) {\n const name = cachedMonthNames?.[m - 1]\n ?? formatter!.format(new Date(year, m - 1, 1));\n const yearMonth = Temporal.PlainYearMonth.from({ year, month: m });\n\n items.push({\n month: m,\n name,\n isActive: m === currentMonth,\n yearMonth,\n });\n }\n\n return items;\n });\n\n /** Direction for the \"jump to today\" FAB */\n protected todayMonthScrollDirection = computed((): 'up' | 'down' | 'hidden' => {\n const active = this.resolvedActiveMonth();\n const todayMonth = this.today().toPlainYearMonth();\n const comparison = Temporal.PlainYearMonth.compare(active, todayMonth);\n if (comparison === 0) return 'hidden';\n return comparison > 0 ? 'up' : 'down';\n });\n\n /** Whether to show the today month FAB */\n protected showTodayMonthFab = computed(() => {\n return this.showTodayMonthButton() && this.todayMonthScrollDirection() !== 'hidden';\n });\n\n // ============================================================\n // Month Navigation Methods\n // ============================================================\n\n /** Navigate to previous year */\n protected previousYear(): void {\n if (this.isPrevYearDisabled()) return;\n const current = this.resolvedActiveMonth();\n this.activeMonth.set(current.subtract({ years: 1 }));\n }\n\n /** Navigate to next year */\n protected nextYear(): void {\n if (this.isNextYearDisabled()) return;\n const current = this.resolvedActiveMonth();\n this.activeMonth.set(current.add({ years: 1 }));\n }\n\n /** Select a month from the list */\n protected selectMonth(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n }\n\n /** Scroll to today's month */\n protected scrollToTodayMonth(): void {\n this.activeMonth.set(this.today().toPlainYearMonth());\n }\n\n /** Handle active month change from calendar scroll */\n protected onActiveMonthChanged(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n }\n\n // ============================================================\n // Overlay Helpers\n // ============================================================\n\n /**\n * Resolve overlay placement based on available viewport space.\n */\n protected resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n /**\n * Close the picker panel.\n */\n closePanel(): void {\n if (!this.isOpen()) return;\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n /**\n * Toggle the picker panel.\n */\n togglePanel(): void {\n if (this.isOpen()) {\n this.closePanel();\n } else {\n this.openPanel();\n }\n }\n\n /**\n * Open the picker panel.\n */\n openPanel(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.panelTemplateRef();\n if (!trigger || !template) return;\n\n const verticalPlacement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.panelPosition.set(verticalPlacement === 'top' ? 'top' : 'bottom');\n\n const triggerWidth = trigger.getBoundingClientRect().width;\n const panelMinWidth = this.showWeekNumbers() ? 528 : 480;\n\n const horizontalAlignment = triggerWidth >= panelMinWidth ? '-end' : '';\n const placement = `${verticalPlacement}${horizontalAlignment}` as Placement;\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({\n placement,\n offset: 4,\n flip: false,\n shift: true,\n })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .size({ mode: 'content' })\n .fromTemplate(template)\n .open({});\n\n this.overlayRef = ref;\n this.isOpen.set(true);\n this.opened.emit();\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.onPanelClosed();\n this.closed.emit();\n });\n }\n\n /**\n * Hook called when the panel closes. Override in subclasses for cleanup.\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected onPanelClosed(): void {}\n\n /**\n * Clear the selected value.\n */\n clearValue(event: Event): void {\n event.stopPropagation();\n this.resetValue();\n this.cvaOnChange(null);\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onTriggerClick(): void {\n this.togglePanel();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for backward compatibility\nexport type CoarPlainDatePickerSize = CoarDatePickerSize;\n\n/**\n * Date picker component with scrollable calendar.\n *\n * Returns strongly-typed `Temporal.PlainDate` values (timezone-independent, date only).\n *\n * Features:\n * - Two-column layout: scrollable calendar on left, month list on right\n * - No time selection (use `coar-plain-date-time-picker` if time is needed)\n * - CSS-based virtualization for smooth scrolling through months\n *\n * @example\n * ```html\n * <coar-plain-date-picker\n * [(value)]=\"birthDate\"\n * label=\"Date of Birth\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-plain-date-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n ],\n templateUrl: './coar-plain-date-picker.component.html',\n styleUrl: './coar-plain-date-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPlainDatePickerComponent)],\n host: {\n '[class.coar-plain-date-picker--xs]': 'size() === \"xs\"',\n '[class.coar-plain-date-picker--s]': 'size() === \"s\"',\n '[class.coar-plain-date-picker--m]': 'size() === \"m\"',\n '[class.coar-plain-date-picker--l]': 'size() === \"l\"',\n '[class.coar-plain-date-picker--disabled]': 'isDisabled()',\n '[class.coar-plain-date-picker--readonly]': 'readonly()',\n '[class.coar-plain-date-picker--error]': 'hasError()',\n '[class.coar-plain-date-picker--open]': 'isOpen()',\n },\n})\nexport class CoarPlainDatePickerComponent extends CoarDatePickerBase<Temporal.PlainDate> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Date Picker Specific Inputs\n // ============================================================\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /** Whether to close the panel after selecting a date (default: false to allow viewing events) */\n closeOnSelect = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.PlainDate | null>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-plain-date-picker-${CoarPlainDatePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n // ============================================================\n // Computed Values (Date Picker Specific)\n // ============================================================\n\n /** Get placeholder text based on date format */\n protected inputPlaceholder = computed(() => {\n return this.dateFormat().toUpperCase();\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.PlainDate | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.value();\n }\n\n protected override estimatePanelHeight(): number {\n return 340;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.valueChange.emit(null);\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value\n effect(() => {\n const val = this.value();\n if (val) {\n this.displayValue.set(coarFormatPlainDate(val, this.dateFormat()));\n } else {\n this.displayValue.set('');\n }\n });\n\n // Keep Maskito config in sync\n effect(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /** Handle date selection from calendar */\n protected onDateSelected(date: Temporal.PlainDate): void {\n this.value.set(date);\n this.valueChange.emit(date);\n this.cvaOnChange(date);\n\n if (this.closeOnSelect()) {\n this.closePanel();\n }\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.PlainDate | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.PlainDate.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = coarParsePlainDateFromInput(text, this.dateFormat(), {\n min: this.min(),\n max: this.max(),\n });\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = coarParsePlainDateFromInput(currentText, this.dateFormat(), {\n min: this.min(),\n max: this.max(),\n });\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(coarFormatPlainDate(val, this.dateFormat()));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.min();\n const maxDate = this.max();\n\n const options = maskitoDateOptionsGenerator({\n mode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n}\n","<div class=\"coar-plain-date-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-plain-date-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-plain-date-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-plain-date-picker-trigger\"\n [class.coar-plain-date-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-plain-date-picker-trigger--readonly]=\"readonly()\"\n [class.coar-plain-date-picker-trigger--error]=\"hasError()\"\n [class.coar-plain-date-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-plain-date-picker-clear\"\n [class.coar-plain-date-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-plain-date-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-plain-date-picker-panel\"\n [class.coar-plain-date-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date picker\"\n >\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-plain-date-picker-calendar-column\">\n <coar-scrollable-calendar\n [value]=\"value()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-plain-date-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n\n <!-- Right Column: Month List -->\n <div class=\"coar-plain-date-picker-side-column\">\n <!-- Year Stepper -->\n <div class=\"coar-plain-date-picker-year-stepper\">\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-plain-date-picker-year\">{{ currentYear() }}</span>\n <button type=\"button\" class=\"coar-plain-date-picker-year-btn\" [disabled]=\"isNextYearDisabled()\" (click)=\"nextYear()\" aria-label=\"Next year\">\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-plain-date-picker-month-list-wrapper\">\n <div class=\"coar-plain-date-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-plain-date-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-plain-date-picker-month-item\"\n [class.coar-plain-date-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-plain-date-picker-events\">\n <div class=\"coar-plain-date-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-plain-date-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-plain-date-picker-event-item\">\n <span class=\"coar-plain-date-picker-event-dot\"></span>\n <div class=\"coar-plain-date-picker-event-details\">\n <span class=\"coar-plain-date-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-plain-date-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","/**\n * Time formatting and parsing utilities.\n *\n * Provides locale-aware time formatting with 12h/24h detection,\n * time parsing, and hour/minute manipulation with wrap-around support.\n */\n\n/**\n * AM/PM period indicator.\n */\nexport type CoarTimePeriod = 'AM' | 'PM';\n\n/**\n * Parsed time value with hours (0-23) and minutes (0-59).\n */\nexport interface CoarTimeValue {\n readonly hours: number;\n readonly minutes: number;\n}\n\n/**\n * Detects whether the given locale uses 12-hour time format.\n *\n * Uses Intl.DateTimeFormat to check if the locale's default time format\n * includes a dayPeriod (AM/PM indicator).\n *\n * @param locale - BCP 47 locale identifier (e.g., 'en-US', 'de-AT')\n * @returns true if locale uses 12-hour format, false for 24-hour format\n *\n * @example\n * ```ts\n * coarDetect12HourFormat('en-US'); // true (US uses 12h)\n * coarDetect12HourFormat('de-DE'); // false (Germany uses 24h)\n * coarDetect12HourFormat('en-GB'); // false (UK uses 24h)\n * ```\n */\nexport function coarDetect12HourFormat(locale: string): boolean {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n minute: 'numeric',\n });\n\n const parts = formatter.formatToParts(new Date(2024, 0, 1, 14, 30));\n return parts.some((part) => part.type === 'dayPeriod');\n } catch {\n // Default to 24-hour format on error\n return false;\n }\n}\n\n/**\n * Formats a time value as a string.\n *\n * @param hours - Hours (0-23)\n * @param minutes - Minutes (0-59)\n * @param use24Hour - true for 24h format (\"14:30\"), false for 12h format (\"2:30 PM\")\n * @returns Formatted time string\n *\n * @example\n * ```ts\n * coarFormatTime(14, 30, true); // \"14:30\"\n * coarFormatTime(14, 30, false); // \"2:30 PM\"\n * coarFormatTime(0, 5, true); // \"00:05\"\n * coarFormatTime(0, 5, false); // \"12:05 AM\"\n * ```\n */\nexport function coarFormatTime(hours: number, minutes: number, use24Hour: boolean): string {\n const paddedMinutes = String(minutes).padStart(2, '0');\n\n if (use24Hour) {\n const paddedHours = String(hours).padStart(2, '0');\n return `${paddedHours}:${paddedMinutes}`;\n }\n\n // 12-hour format\n const period: CoarTimePeriod = hours >= 12 ? 'PM' : 'AM';\n let displayHours = hours % 12;\n if (displayHours === 0) {\n displayHours = 12; // 0 and 12 both display as 12\n }\n\n return `${displayHours}:${paddedMinutes} ${period}`;\n}\n\n/**\n * Parses a time string into hours and minutes.\n *\n * Supports both 24-hour and 12-hour formats:\n * - 24h: \"14:30\", \"08:00\", \"23:59\"\n * - 12h: \"2:30 PM\", \"12:00 AM\", \"11:59 pm\"\n *\n * @param text - Time string to parse\n * @returns Parsed time value or null if invalid\n *\n * @example\n * ```ts\n * coarParseTimeInput(\"14:30\"); // { hours: 14, minutes: 30 }\n * coarParseTimeInput(\"2:30 PM\"); // { hours: 14, minutes: 30 }\n * coarParseTimeInput(\"12:00 AM\"); // { hours: 0, minutes: 0 }\n * coarParseTimeInput(\"invalid\"); // null\n * ```\n */\nexport function coarParseTimeInput(text: string): CoarTimeValue | null {\n if (!text || typeof text !== 'string') {\n return null;\n }\n\n const trimmed = text.trim().toUpperCase();\n\n // Try 12-hour format first (e.g., \"2:30 PM\")\n const match12h = trimmed.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/);\n if (match12h) {\n let hours = parseInt(match12h[1], 10);\n const minutes = parseInt(match12h[2], 10);\n const period = match12h[3] as CoarTimePeriod;\n\n if (hours < 1 || hours > 12 || minutes < 0 || minutes > 59) {\n return null;\n }\n\n // Convert to 24-hour format\n if (period === 'AM') {\n hours = hours === 12 ? 0 : hours;\n } else {\n // PM\n hours = hours === 12 ? 12 : hours + 12;\n }\n\n return { hours, minutes };\n }\n\n // Try 24-hour format (e.g., \"14:30\")\n const match24h = trimmed.match(/^(\\d{1,2}):(\\d{2})$/);\n if (match24h) {\n const hours = parseInt(match24h[1], 10);\n const minutes = parseInt(match24h[2], 10);\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null;\n }\n\n return { hours, minutes };\n }\n\n return null;\n}\n\n/**\n * Converts 24-hour format hours to 12-hour format.\n *\n * @param hours24 - Hours in 24-hour format (0-23)\n * @returns Object with 12-hour hours (1-12) and period (AM/PM)\n *\n * @example\n * ```ts\n * coarConvertTo12Hour(0); // { hours: 12, period: 'AM' }\n * coarConvertTo12Hour(12); // { hours: 12, period: 'PM' }\n * coarConvertTo12Hour(14); // { hours: 2, period: 'PM' }\n * coarConvertTo12Hour(23); // { hours: 11, period: 'PM' }\n * ```\n */\nexport function coarConvertTo12Hour(hours24: number): { hours: number; period: CoarTimePeriod } {\n const period: CoarTimePeriod = hours24 >= 12 ? 'PM' : 'AM';\n let hours = hours24 % 12;\n if (hours === 0) {\n hours = 12;\n }\n return { hours, period };\n}\n\n/**\n * Converts 12-hour format to 24-hour format.\n *\n * @param hours12 - Hours in 12-hour format (1-12)\n * @param period - AM or PM\n * @returns Hours in 24-hour format (0-23)\n *\n * @example\n * ```ts\n * coarConvertTo24Hour(12, 'AM'); // 0\n * coarConvertTo24Hour(12, 'PM'); // 12\n * coarConvertTo24Hour(2, 'PM'); // 14\n * coarConvertTo24Hour(11, 'PM'); // 23\n * ```\n */\nexport function coarConvertTo24Hour(hours12: number, period: CoarTimePeriod): number {\n if (period === 'AM') {\n return hours12 === 12 ? 0 : hours12;\n }\n // PM\n return hours12 === 12 ? 12 : hours12 + 12;\n}\n\n/**\n * Increments hours with wrap-around.\n *\n * @param hours - Current hours (0-23)\n * @param delta - Amount to change (positive or negative)\n * @returns New hours value (0-23), wrapped around\n *\n * @example\n * ```ts\n * coarIncrementHours(23, 1); // 0 (wraps from 23 to 0)\n * coarIncrementHours(0, -1); // 23 (wraps from 0 to 23)\n * coarIncrementHours(14, 2); // 16\n * ```\n */\nexport function coarIncrementHours(hours: number, delta: number): number {\n const newHours = (hours + delta) % 24;\n return newHours < 0 ? newHours + 24 : newHours;\n}\n\n/**\n * Increments minutes with wrap-around and optional hour carry.\n *\n * @param minutes - Current minutes (0-59)\n * @param delta - Amount to change (positive or negative)\n * @param step - Minute step interval (default: 1)\n * @returns Object with new minutes and hour delta (for carry-over)\n *\n * @example\n * ```ts\n * coarIncrementMinutes(55, 5); // { minutes: 0, hourDelta: 1 }\n * coarIncrementMinutes(0, -5); // { minutes: 55, hourDelta: -1 }\n * coarIncrementMinutes(30, 15, 15); // { minutes: 45, hourDelta: 0 }\n * ```\n */\nexport function coarIncrementMinutes(\n minutes: number,\n delta: number,\n step = 1\n): { minutes: number; hourDelta: number } {\n const actualDelta = delta * step;\n const totalMinutes = minutes + actualDelta;\n\n let hourDelta = 0;\n let newMinutes = totalMinutes;\n\n if (totalMinutes >= 60) {\n hourDelta = Math.floor(totalMinutes / 60);\n newMinutes = totalMinutes % 60;\n } else if (totalMinutes < 0) {\n // For negative values, we need to calculate proper wrap-around\n hourDelta = Math.floor(totalMinutes / 60); // This will be negative\n newMinutes = ((totalMinutes % 60) + 60) % 60;\n }\n\n return { minutes: newMinutes, hourDelta };\n}\n\n/**\n * Rounds minutes to the nearest step.\n *\n * @param minutes - Current minutes (0-59)\n * @param step - Minute step interval\n * @returns Rounded minutes value\n *\n * @example\n * ```ts\n * coarRoundMinutesToStep(7, 5); // 5\n * coarRoundMinutesToStep(8, 5); // 10\n * coarRoundMinutesToStep(22, 15); // 15\n * coarRoundMinutesToStep(23, 15); // 30\n * ```\n */\nexport function coarRoundMinutesToStep(minutes: number, step: number): number {\n return Math.round(minutes / step) * step;\n}\n\n/**\n * Gets valid minute values for a given step.\n *\n * @param step - Minute step interval (1, 5, 10, or 15)\n * @returns Array of valid minute values\n *\n * @example\n * ```ts\n * coarGetValidMinutes(15); // [0, 15, 30, 45]\n * coarGetValidMinutes(5); // [0, 5, 10, 15, ..., 55]\n * coarGetValidMinutes(1); // [0, 1, 2, ..., 59]\n * ```\n */\nexport function coarGetValidMinutes(step: 1 | 5 | 10 | 15): number[] {\n const values: number[] = [];\n for (let m = 0; m < 60; m += step) {\n values.push(m);\n }\n return values;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\n\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { of } from 'rxjs';\n\nimport { CoarLocalizationService } from '@cocoar/localization';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../../forms/_base/coar-control-value-accessor';\nimport {\n type CoarTimePeriod,\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarConvertTo12Hour,\n coarConvertTo24Hour,\n coarIncrementHours,\n coarIncrementMinutes,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\n\nexport type CoarTimePickerSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Time picker component with hours, minutes, and optional AM/PM selection.\n *\n * Supports both 12-hour and 24-hour formats, with locale-aware auto-detection.\n * Values wrap around at boundaries (23→00, 59→00 with hour increment).\n *\n * @example\n * ```html\n * <!-- Basic usage with auto 12h/24h detection -->\n * <coar-time-picker [(value)]=\"selectedTime\" />\n *\n * <!-- Force 24-hour format with 15-minute steps -->\n * <coar-time-picker\n * [(value)]=\"selectedTime\"\n * [use24Hour]=\"true\"\n * [minuteStep]=\"15\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-time-picker',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-time-picker.component.html',\n styleUrl: './coar-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTimePickerComponent)],\n host: {\n '[class.coar-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-time-picker--s]': 'size() === \"s\"',\n '[class.coar-time-picker--m]': 'size() === \"m\"',\n '[class.coar-time-picker--l]': 'size() === \"l\"',\n '[class.coar-time-picker--disabled]': 'isDisabled()',\n '[class.coar-time-picker--readonly]': 'readonly()',\n },\n})\nexport class CoarTimePickerComponent extends CoarControlValueAccessor<CoarTimeValue | null> {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Size variant */\n size = input<CoarTimePickerSize>('m');\n\n /** Whether the picker is readonly */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the picker is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether to use 24-hour format.\n * - true: Always use 24h format (00-23)\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /**\n * Step interval for minute selection.\n * Minutes will snap to multiples of this value.\n */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Locale identifier for 12h/24h format detection.\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Label for screen readers (visually hidden).\n */\n ariaLabel = input<string>('Time');\n\n /**\n * Minimum allowed time (hours and minutes in 24h format).\n * Used to constrain time selection when on a min date boundary.\n */\n minTime = input<CoarTimeValue | null>(null);\n\n /**\n * Maximum allowed time (hours and minutes in 24h format).\n * Used to constrain time selection when on a max date boundary.\n */\n maxTime = input<CoarTimeValue | null>(null);\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current time value (two-way bindable with [(value)]) */\n value = model<CoarTimeValue | null>(null);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Internal hours value (0-23) */\n protected hours = signal<number>(9);\n\n /** Internal minutes value (0-59) */\n protected minutes = signal<number>(0);\n\n /** AM/PM period for 12-hour mode */\n protected period = signal<CoarTimePeriod>('AM');\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /** Effective locale for 12h/24h detection */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n /** Whether to display in 12-hour format */\n protected is12HourFormat = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return false;\n if (setting === false) return true;\n // 'auto' - detect from locale\n return coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Display hours value (1-12 for 12h mode, 0-23 for 24h mode) */\n protected displayHours = computed(() => {\n const h = this.hours();\n if (this.is12HourFormat()) {\n const { hours } = coarConvertTo12Hour(h);\n return hours;\n }\n return h;\n });\n\n /** Display minutes (always 0-59, padded) */\n protected displayMinutes = computed(() => {\n return this.minutes();\n });\n\n /** Minimum hours value for display */\n protected minHours = computed(() => (this.is12HourFormat() ? 1 : 0));\n\n /** Maximum hours value for display */\n protected maxHours = computed(() => (this.is12HourFormat() ? 12 : 23));\n\n /** Whether the picker is disabled (input or CVA) */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Convert time to total minutes for comparison */\n private timeToMinutes(time: CoarTimeValue): number {\n return time.hours * 60 + time.minutes;\n }\n\n /** Whether increment hours button is disabled (would exceed max) */\n protected isIncrementHoursDisabled = computed(() => {\n const maxTime = this.maxTime();\n if (!maxTime) return false;\n const currentMinutes = this.minutes();\n const nextHours = (this.hours() + 1) % 24;\n // Can't increment if next hour would exceed max\n return (\n this.timeToMinutes({ hours: nextHours, minutes: currentMinutes }) >\n this.timeToMinutes(maxTime)\n );\n });\n\n /** Whether decrement hours button is disabled (would go below min) */\n protected isDecrementHoursDisabled = computed(() => {\n const minTime = this.minTime();\n if (!minTime) return false;\n const currentMinutes = this.minutes();\n const prevHours = (this.hours() - 1 + 24) % 24;\n // Can't decrement if previous hour would be below min\n return (\n this.timeToMinutes({ hours: prevHours, minutes: currentMinutes }) <\n this.timeToMinutes(minTime)\n );\n });\n\n /** Whether increment minutes button is disabled */\n protected isIncrementMinutesDisabled = computed(() => {\n const maxTime = this.maxTime();\n if (!maxTime) return false;\n const step = this.minuteStep();\n let nextMinutes = this.minutes() + step;\n let nextHours = this.hours();\n if (nextMinutes >= 60) {\n nextMinutes = nextMinutes % 60;\n nextHours = (nextHours + 1) % 24;\n }\n return (\n this.timeToMinutes({ hours: nextHours, minutes: nextMinutes }) > this.timeToMinutes(maxTime)\n );\n });\n\n /** Whether decrement minutes button is disabled */\n protected isDecrementMinutesDisabled = computed(() => {\n const minTime = this.minTime();\n if (!minTime) return false;\n const step = this.minuteStep();\n let prevMinutes = this.minutes() - step;\n let prevHours = this.hours();\n if (prevMinutes < 0) {\n prevMinutes = 60 + prevMinutes;\n prevHours = (prevHours - 1 + 24) % 24;\n }\n return (\n this.timeToMinutes({ hours: prevHours, minutes: prevMinutes }) < this.timeToMinutes(minTime)\n );\n });\n\n /** Whether AM period is disabled (min time is in PM) */\n protected isAmDisabled = computed(() => {\n const minTime = this.minTime();\n // AM is disabled if minimum time starts at 12:00 (noon) or later\n return minTime !== null && minTime.hours >= 12;\n });\n\n /** Whether PM period is disabled (max time is before noon) */\n protected isPmDisabled = computed(() => {\n const maxTime = this.maxTime();\n // PM is disabled if maximum time is before 12:00 (noon)\n return maxTime !== null && maxTime.hours < 12;\n });\n\n // ============================================================\n // Constructor & Effects\n // ============================================================\n\n constructor() {\n super();\n\n // Sync external value to internal state\n effect(() => {\n const val = this.value();\n if (val) {\n this.hours.set(val.hours);\n this.minutes.set(coarRoundMinutesToStep(val.minutes, this.minuteStep()));\n // Update period based on hours\n this.period.set(val.hours >= 12 ? 'PM' : 'AM');\n }\n });\n }\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /** Increment hours by 1 */\n incrementHours(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isIncrementHoursDisabled()) return;\n\n if (this.is12HourFormat()) {\n // In 12h mode, increment display hours (1-12) and handle period switch\n const currentDisplay = this.displayHours();\n let newDisplay = currentDisplay + 1;\n\n if (newDisplay > 12) {\n newDisplay = 1;\n }\n\n // Convert back to 24h\n const new24h = coarConvertTo24Hour(newDisplay, this.period());\n this.hours.set(new24h);\n\n // Toggle AM/PM when going from 11→12\n if (currentDisplay === 11) {\n this.togglePeriod();\n return; // togglePeriod will emit the value\n }\n } else {\n const newHours = coarIncrementHours(this.hours(), 1);\n this.hours.set(newHours);\n }\n\n this.emitValue();\n }\n\n /** Decrement hours by 1 */\n decrementHours(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isDecrementHoursDisabled()) return;\n\n if (this.is12HourFormat()) {\n const currentDisplay = this.displayHours();\n let newDisplay = currentDisplay - 1;\n\n if (newDisplay < 1) {\n newDisplay = 12;\n }\n\n // Convert back to 24h\n const new24h = coarConvertTo24Hour(newDisplay, this.period());\n this.hours.set(new24h);\n\n // Toggle AM/PM when going from 12→11\n if (currentDisplay === 12) {\n this.togglePeriod();\n return; // togglePeriod will emit the value\n }\n } else {\n const newHours = coarIncrementHours(this.hours(), -1);\n this.hours.set(newHours);\n }\n\n this.emitValue();\n }\n\n /** Increment minutes by step */\n incrementMinutes(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isIncrementMinutesDisabled()) return;\n\n const step = this.minuteStep();\n const { minutes: newMinutes, hourDelta } = coarIncrementMinutes(this.minutes(), 1, step);\n\n this.minutes.set(newMinutes);\n\n if (hourDelta !== 0) {\n // Carry over to hours\n const newHours = coarIncrementHours(this.hours(), hourDelta);\n this.hours.set(newHours);\n // Update period if needed\n this.period.set(newHours >= 12 ? 'PM' : 'AM');\n }\n\n this.emitValue();\n }\n\n /** Decrement minutes by step */\n decrementMinutes(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.isDecrementMinutesDisabled()) return;\n\n const step = this.minuteStep();\n const { minutes: newMinutes, hourDelta } = coarIncrementMinutes(this.minutes(), -1, step);\n\n this.minutes.set(newMinutes);\n\n if (hourDelta !== 0) {\n // Carry over to hours\n const newHours = coarIncrementHours(this.hours(), hourDelta);\n this.hours.set(newHours);\n // Update period if needed\n this.period.set(newHours >= 12 ? 'PM' : 'AM');\n }\n\n this.emitValue();\n }\n\n /** Toggle between AM and PM */\n togglePeriod(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (!this.is12HourFormat()) return;\n\n const newPeriod: CoarTimePeriod = this.period() === 'AM' ? 'PM' : 'AM';\n // Check if the new period is allowed\n if (newPeriod === 'AM' && this.isAmDisabled()) return;\n if (newPeriod === 'PM' && this.isPmDisabled()) return;\n this.period.set(newPeriod);\n\n // Update 24h hours based on new period\n const displayH = this.displayHours();\n const new24h = coarConvertTo24Hour(displayH, newPeriod);\n this.hours.set(new24h);\n\n this.emitValue();\n }\n\n /** Set specific period (AM or PM) */\n setPeriod(period: CoarTimePeriod): void {\n if (this.isDisabled() || this.readonly()) return;\n if (!this.is12HourFormat()) return;\n if (this.period() === period) return;\n // Check if the new period is allowed\n if (period === 'AM' && this.isAmDisabled()) return;\n if (period === 'PM' && this.isPmDisabled()) return;\n\n this.period.set(period);\n\n // Update 24h hours based on new period\n const displayH = this.displayHours();\n const new24h = coarConvertTo24Hour(displayH, period);\n this.hours.set(new24h);\n\n this.emitValue();\n }\n\n // ============================================================\n // Keyboard Handlers\n // ============================================================\n\n /** Handle keyboard events on hours spinner */\n onHoursKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementHours();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrementHours();\n break;\n }\n }\n\n /** Handle keyboard events on minutes spinner */\n onMinutesKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.incrementMinutes();\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.decrementMinutes();\n break;\n }\n }\n\n /** Handle keyboard events on period selector */\n onPeriodKeydown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n event.preventDefault();\n this.togglePeriod();\n break;\n }\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: CoarTimeValue | null): void {\n if (value) {\n this.hours.set(value.hours);\n this.minutes.set(coarRoundMinutesToStep(value.minutes, this.minuteStep()));\n this.period.set(value.hours >= 12 ? 'PM' : 'AM');\n } else {\n // Reset to default\n this.hours.set(9);\n this.minutes.set(0);\n this.period.set('AM');\n }\n }\n\n // ============================================================\n // Private Methods\n // ============================================================\n\n /** Emit the current value */\n private emitValue(): void {\n const newValue: CoarTimeValue = {\n hours: this.hours(),\n minutes: this.minutes(),\n };\n this.value.set(newValue);\n this.cvaOnTouched();\n }\n}\n","<div class=\"coar-time-picker\" role=\"group\" [attr.aria-label]=\"ariaLabel()\">\n <!-- Hours Spinner -->\n <div class=\"coar-time-picker__spinner coar-time-picker__hours\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || isIncrementHoursDisabled()\"\n (click)=\"incrementHours()\"\n tabindex=\"-1\"\n aria-label=\"Increase hours\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"displayHours()\"\n [attr.aria-valuemin]=\"minHours()\"\n [attr.aria-valuemax]=\"maxHours()\"\n aria-label=\"Hours\"\n (keydown)=\"onHoursKeydown($event)\"\n >\n {{ displayHours().toString().padStart(2, '0') }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || isDecrementHoursDisabled()\"\n (click)=\"decrementHours()\"\n tabindex=\"-1\"\n aria-label=\"Decrease hours\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n\n <!-- Separator -->\n <span class=\"coar-time-picker__separator\" aria-hidden=\"true\">:</span>\n\n <!-- Minutes Spinner -->\n <div class=\"coar-time-picker__spinner coar-time-picker__minutes\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || isIncrementMinutesDisabled()\"\n (click)=\"incrementMinutes()\"\n tabindex=\"-1\"\n aria-label=\"Increase minutes\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"displayMinutes()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"59\"\n aria-label=\"Minutes\"\n (keydown)=\"onMinutesKeydown($event)\"\n >\n {{ displayMinutes().toString().padStart(2, '0') }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || isDecrementMinutesDisabled()\"\n (click)=\"decrementMinutes()\"\n tabindex=\"-1\"\n aria-label=\"Decrease minutes\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n\n <!-- AM/PM Selector (12-hour mode only) -->\n @if (is12HourFormat()) {\n <div class=\"coar-time-picker__spinner coar-time-picker__period\">\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--up\"\n [disabled]=\"isDisabled() || readonly() || (period() === 'AM' ? isPmDisabled() : isAmDisabled())\"\n (click)=\"togglePeriod()\"\n tabindex=\"-1\"\n aria-label=\"Toggle AM/PM\"\n >\n <coar-icon name=\"up\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n\n <div\n class=\"coar-time-picker__value coar-time-picker__period-value\"\n role=\"spinbutton\"\n tabindex=\"0\"\n [attr.aria-valuenow]=\"period() === 'AM' ? 0 : 1\"\n aria-valuemin=\"0\"\n aria-valuemax=\"1\"\n [attr.aria-valuetext]=\"period()\"\n aria-label=\"AM/PM\"\n (keydown)=\"onPeriodKeydown($event)\"\n >\n {{ period() }}\n </div>\n\n <button\n type=\"button\"\n class=\"coar-time-picker__btn coar-time-picker__btn--down\"\n [disabled]=\"isDisabled() || readonly() || (period() === 'AM' ? isPmDisabled() : isAmDisabled())\"\n (click)=\"togglePeriod()\"\n tabindex=\"-1\"\n aria-label=\"Toggle AM/PM\"\n >\n <coar-icon name=\"down\" [size]=\"size() === 'xs' ? 'xs' : 's'\" />\n </button>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateTimeOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarTimePickerComponent } from '../time-picker/coar-time-picker.component';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport {\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarFormatTime,\n coarParseTimeInput,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for backward compatibility\nexport type CoarPlainDateTimePickerSize = CoarDatePickerSize;\n\n/**\n * Date-time picker component with scrollable calendar and time selection.\n *\n * Returns strongly-typed `Temporal.PlainDateTime` values (timezone-independent).\n *\n * Features:\n * - Two-column layout: scrollable calendar on left, month list + time picker on right\n * - Locale-aware time format (12h/24h auto-detection)\n * - CSS-based virtualization for smooth scrolling through months\n * - Min/max datetime constraints with time clamping\n *\n * @example\n * ```html\n * <coar-plain-date-time-picker\n * [(value)]=\"appointmentDateTime\"\n * label=\"Appointment\"\n * [minuteStep]=\"15\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-plain-date-time-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n CoarTimePickerComponent,\n ],\n templateUrl: './coar-plain-date-time-picker.component.html',\n styleUrl: './coar-plain-date-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPlainDateTimePickerComponent)],\n host: {\n '[class.coar-plain-date-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-plain-date-time-picker--s]': 'size() === \"s\"',\n '[class.coar-plain-date-time-picker--m]': 'size() === \"m\"',\n '[class.coar-plain-date-time-picker--l]': 'size() === \"l\"',\n '[class.coar-plain-date-time-picker--disabled]': 'isDisabled()',\n '[class.coar-plain-date-time-picker--readonly]': 'readonly()',\n '[class.coar-plain-date-time-picker--error]': 'hasError()',\n '[class.coar-plain-date-time-picker--open]': 'isOpen()',\n },\n})\nexport class CoarPlainDateTimePickerComponent extends CoarDatePickerBase<Temporal.PlainDateTime> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Date-Time Picker Specific Inputs\n // ============================================================\n\n /** Minimum selectable datetime */\n min = input<Temporal.PlainDateTime | null>(null);\n\n /** Maximum selectable datetime */\n max = input<Temporal.PlainDateTime | null>(null);\n\n /**\n * Whether to use 24-hour time format.\n * - true: Always use 24h format\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /** Step interval for minute selection (1, 5, 10, or 15) */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Default time to use when selecting a date without existing time.\n */\n defaultTime = input<CoarTimeValue>({ hours: 9, minutes: 0 });\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDateTime | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.PlainDateTime | null>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-plain-date-time-picker-${CoarPlainDateTimePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n /** Pending time value (stored until a date is selected) */\n protected pendingTime = signal<CoarTimeValue | null>(null);\n\n // ============================================================\n // Computed Values (Date-Time Picker Specific)\n // ============================================================\n\n /** Get placeholder text based on date and time format */\n protected inputPlaceholder = computed(() => {\n const datePart = this.dateFormat().toUpperCase();\n const use24h = this.effectiveUse24Hour();\n return use24h ? `${datePart} HH:MM` : `${datePart} HH:MM AM/PM`;\n });\n\n /** Whether to use 24-hour time format */\n protected effectiveUse24Hour = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return true;\n if (setting === false) return false;\n return !coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Extract date portion from value */\n protected selectedDate = computed((): Temporal.PlainDate | null => {\n const val = this.value();\n return val ? val.toPlainDate() : null;\n });\n\n /** Extract time portion from value */\n protected selectedTime = computed((): CoarTimeValue | null => {\n const val = this.value();\n if (!val) return this.pendingTime();\n return { hours: val.hour, minutes: val.minute };\n });\n\n /** Min date for calendar constraints */\n protected minDate = computed((): Temporal.PlainDate | null => {\n const val = this.min();\n return val ? val.toPlainDate() : null;\n });\n\n /** Max date for calendar constraints */\n protected maxDate = computed((): Temporal.PlainDate | null => {\n const val = this.max();\n return val ? val.toPlainDate() : null;\n });\n\n /**\n * Effective minimum time constraint for the time picker.\n * Only applies when the selected date equals the minimum date boundary.\n */\n protected effectiveMinTime = computed((): CoarTimeValue | null => {\n const minDateTime = this.min();\n const selected = this.selectedDate();\n if (!minDateTime || !selected) return null;\n\n const minDatePart = minDateTime.toPlainDate();\n // Only constrain time if selected date is exactly on the min boundary\n if (Temporal.PlainDate.compare(selected, minDatePart) === 0) {\n return { hours: minDateTime.hour, minutes: minDateTime.minute };\n }\n return null;\n });\n\n /**\n * Effective maximum time constraint for the time picker.\n * Only applies when the selected date equals the maximum date boundary.\n */\n protected effectiveMaxTime = computed((): CoarTimeValue | null => {\n const maxDateTime = this.max();\n const selected = this.selectedDate();\n if (!maxDateTime || !selected) return null;\n\n const maxDatePart = maxDateTime.toPlainDate();\n // Only constrain time if selected date is exactly on the max boundary\n if (Temporal.PlainDate.compare(selected, maxDatePart) === 0) {\n return { hours: maxDateTime.hour, minutes: maxDateTime.minute };\n }\n return null;\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainDate().toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.PlainDateTime | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.selectedDate();\n }\n\n protected override estimatePanelHeight(): number {\n return 400;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.pendingTime.set(null);\n this.valueChange.emit(null);\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value\n effect(() => {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n });\n\n // Keep Maskito config in sync\n effect(() => {\n // Track format dependencies\n this.dateFormat();\n this.separator();\n this.minDate();\n this.maxDate();\n\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /** Handle date selection from calendar */\n protected onDateSelected(date: Temporal.PlainDate): void {\n const time = this.selectedTime() ?? this.defaultTime();\n let dateTime = date.toPlainDateTime({\n hour: time.hours,\n minute: coarRoundMinutesToStep(time.minutes, this.minuteStep()),\n });\n\n // Clamp datetime to min/max bounds when selecting a boundary date\n dateTime = this.clampDateTimeToRange(dateTime);\n\n this.value.set(dateTime);\n this.valueChange.emit(dateTime);\n this.cvaOnChange(dateTime);\n }\n\n /** Handle time changes from time picker */\n protected onTimeChanged(time: CoarTimeValue | null): void {\n if (!time) return;\n\n const currentDate = this.selectedDate();\n if (currentDate) {\n let dateTime = currentDate.toPlainDateTime({\n hour: time.hours,\n minute: time.minutes,\n });\n\n // Clamp datetime to min/max bounds\n dateTime = this.clampDateTimeToRange(dateTime);\n\n this.value.set(dateTime);\n this.valueChange.emit(dateTime);\n this.cvaOnChange(dateTime);\n } else {\n this.pendingTime.set(time);\n }\n }\n\n /**\n * Clamps a PlainDateTime to be within the min/max range.\n * Returns the original value if it's within range, otherwise returns the nearest boundary.\n */\n private clampDateTimeToRange(dateTime: Temporal.PlainDateTime): Temporal.PlainDateTime {\n const minDateTime = this.min();\n const maxDateTime = this.max();\n\n if (minDateTime && Temporal.PlainDateTime.compare(dateTime, minDateTime) < 0) {\n return minDateTime;\n }\n if (maxDateTime && Temporal.PlainDateTime.compare(dateTime, maxDateTime) > 0) {\n return maxDateTime;\n }\n return dateTime;\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.PlainDateTime | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.pendingTime.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.PlainDateTime.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = this.parseValueFromInput(text);\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = this.parseValueFromInput(currentText);\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private formatValue(val: Temporal.PlainDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n\n private parseValueFromInput(text: string): Temporal.PlainDateTime | null {\n if (!text) return null;\n\n // DateTime: try to parse date and time\n // Format: \"DD.MM.YYYY HH:MM\" or \"DD.MM.YYYY HH:MM AM/PM\"\n const parts = text.split(' ');\n if (parts.length < 2) return null;\n\n const datePart = parts[0];\n const date = coarParsePlainDateFromInput(datePart, this.dateFormat(), {\n min: this.minDate(),\n max: this.maxDate(),\n });\n\n if (!date) return null;\n\n // Parse time part\n const timePart = parts.slice(1).join(' ');\n const time = coarParseTimeInput(timePart);\n if (!time) return null;\n\n return date.toPlainDateTime({ hour: time.hours, minute: time.minutes });\n }\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n const options = maskitoDateTimeOptionsGenerator({\n dateMode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n timeMode: 'HH:MM',\n dateSeparator: separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n}\n","<div class=\"coar-plain-date-time-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-plain-date-time-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-plain-date-time-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-plain-date-time-picker-trigger\"\n [class.coar-plain-date-time-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-plain-date-time-picker-trigger--readonly]=\"readonly()\"\n [class.coar-plain-date-time-picker-trigger--error]=\"hasError()\"\n [class.coar-plain-date-time-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-plain-date-time-picker-clear\"\n [class.coar-plain-date-time-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-plain-date-time-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-plain-date-time-picker-panel\"\n [class.coar-plain-date-time-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date time picker\"\n >\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-plain-date-time-picker-calendar-column\">\n <coar-scrollable-calendar\n [value]=\"selectedDate()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-plain-date-time-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n\n <!-- Right Column: Month List + Time Picker -->\n <div class=\"coar-plain-date-time-picker-side-column\">\n <!-- Year Stepper -->\n <div class=\"coar-plain-date-time-picker-year-stepper\">\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-plain-date-time-picker-year\">{{ currentYear() }}</span>\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-year-btn\"\n [disabled]=\"isNextYearDisabled()\"\n (click)=\"nextYear()\"\n aria-label=\"Next year\"\n >\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-plain-date-time-picker-month-list-wrapper\">\n <div class=\"coar-plain-date-time-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-plain-date-time-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-plain-date-time-picker-month-item\"\n [class.coar-plain-date-time-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Time Picker -->\n <div class=\"coar-plain-date-time-picker-time-section\">\n <coar-time-picker\n [value]=\"selectedTime()\"\n [use24Hour]=\"use24Hour()\"\n [minuteStep]=\"minuteStep()\"\n [locale]=\"effectiveLocale()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [minTime]=\"effectiveMinTime()\"\n [maxTime]=\"effectiveMaxTime()\"\n (valueChange)=\"onTimeChanged($event)\"\n />\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-plain-date-time-picker-events\">\n <div class=\"coar-plain-date-time-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-plain-date-time-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-plain-date-time-picker-event-item\">\n <span class=\"coar-plain-date-time-picker-event-dot\"></span>\n <div class=\"coar-plain-date-time-picker-event-details\">\n <span class=\"coar-plain-date-time-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-plain-date-time-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\"\n class=\"coar-form-field-message\"\n [class.coar-form-field-message--error]=\"hasError()\"\n [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateTimeOptionsGenerator } from '@maskito/kit';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollableCalendarComponent } from '../scrollable-calendar/coar-scrollable-calendar.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarTimePickerComponent } from '../time-picker/coar-time-picker.component';\nimport { CoarSingleSelectComponent } from '../../forms/select/coar-single-select.component';\nimport { CoarSelectOption } from '../../forms/select/coar-select-option.interface';\nimport { coarProvideValueAccessor } from '../../forms/_base/coar-control-value-accessor';\nimport { COAR_DATE_FORMAT_TO_MASKITO_MODE } from '../_shared/coar-date-format';\nimport {\n coarFormatPlainDate,\n coarParsePlainDateFromInput,\n coarTemporalPlainDateToDate,\n} from '../_shared/coar-date-helpers';\nimport {\n type CoarTimeValue,\n coarDetect12HourFormat,\n coarFormatTime,\n coarParseTimeInput,\n coarRoundMinutesToStep,\n} from '../_shared/coar-time-helpers';\nimport { CoarDatePickerBase, type CoarDatePickerSize } from '../_shared/coar-date-picker-base';\n\n// Re-export size type for convenience\nexport type CoarZonedDateTimePickerSize = CoarDatePickerSize;\n\n/**\n * A timezone item for display in the picker list.\n */\ninterface TimezoneItem {\n /** Full IANA ID (e.g., 'Europe/Vienna') */\n id: string;\n /** City name for display (e.g., 'Vienna') */\n city: string;\n /** UTC offset for display (e.g., 'UTC+1') */\n offset: string;\n}\n\n/**\n * A group of timezones by continent/region.\n */\ninterface TimezoneGroup {\n /** Group name (e.g., 'Europe', 'America') */\n name: string;\n /** Timezones in this group */\n items: TimezoneItem[];\n}\n\n/**\n * Zoned date-time picker component with full timezone support.\n *\n * Returns strongly-typed `Temporal.ZonedDateTime` values that include:\n * - The local date and time (user's intent)\n * - The IANA timezone (context)\n * - The instant (derived UTC moment)\n *\n * Key concepts:\n * - **Value timezone**: Where the event \"lives\" - persisted with the value\n * - **Display timezone**: User's viewing lens (from CoarTimeZoneService)\n *\n * This picker captures complete user intent, allowing you to:\n * - Store the local time + timezone as source of truth\n * - Derive the UTC instant for queries and ordering\n * - Recalculate instants if DST rules change\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <coar-zoned-date-time-picker\n * [(value)]=\"meetingDateTime\"\n * label=\"Meeting Time\"\n * />\n *\n * <!-- With explicit timezone -->\n * <coar-zoned-date-time-picker\n * [(value)]=\"meetingDateTime\"\n * [timeZone]=\"'Europe/Vienna'\"\n * label=\"Meeting Time\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-zoned-date-time-picker',\n standalone: true,\n imports: [\n FormsModule,\n CoarIconComponent,\n CoarScrollableCalendarComponent,\n CoarScrollbarDirective,\n CoarTimePickerComponent,\n CoarSingleSelectComponent,\n ],\n templateUrl: './coar-zoned-date-time-picker.component.html',\n styleUrl: './coar-zoned-date-time-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarZonedDateTimePickerComponent)],\n host: {\n '[class.coar-zoned-date-time-picker--xs]': 'size() === \"xs\"',\n '[class.coar-zoned-date-time-picker--s]': 'size() === \"s\"',\n '[class.coar-zoned-date-time-picker--m]': 'size() === \"m\"',\n '[class.coar-zoned-date-time-picker--l]': 'size() === \"l\"',\n '[class.coar-zoned-date-time-picker--disabled]': 'isDisabled()',\n '[class.coar-zoned-date-time-picker--readonly]': 'readonly()',\n '[class.coar-zoned-date-time-picker--error]': 'hasError()',\n '[class.coar-zoned-date-time-picker--open]': 'isOpen()',\n },\n})\nexport class CoarZonedDateTimePickerComponent extends CoarDatePickerBase<Temporal.ZonedDateTime> {\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n // ============================================================\n // Zoned Date-Time Picker Specific Inputs\n // ============================================================\n\n /**\n * The timezone for the value.\n *\n * This represents where the event \"lives\" - it's persisted with the value.\n * If not provided, uses the timezone from CoarTimeZoneService.\n *\n * Examples: 'Europe/Vienna', 'America/New_York', 'UTC'\n */\n timeZone = input<string | null>(null);\n\n /** Minimum selectable datetime (in the value's timezone) */\n min = input<Temporal.ZonedDateTime | null>(null);\n\n /** Maximum selectable datetime (in the value's timezone) */\n max = input<Temporal.ZonedDateTime | null>(null);\n\n /**\n * Whether to use 24-hour time format.\n * - true: Always use 24h format\n * - false: Always use 12h format with AM/PM\n * - 'auto': Detect from locale (default)\n */\n use24Hour = input<boolean | 'auto'>('auto');\n\n /** Step interval for minute selection (1, 5, 10, or 15) */\n minuteStep = input<1 | 5 | 10 | 15>(5);\n\n /**\n * Default time to use when selecting a date without existing time.\n */\n defaultTime = input<CoarTimeValue>({ hours: 9, minutes: 0 });\n\n /**\n * Filter patterns for available timezone options.\n *\n * Supports wildcards:\n * - `*` matches any characters\n * - Patterns are case-insensitive\n *\n * If not provided or empty, all IANA timezones are available.\n *\n * @example\n * // Only European timezones\n * [timezoneFilter]=\"['Europe/*']\"\n *\n * // European + specific US cities\n * [timezoneFilter]=\"['Europe/*', 'America/New_York', 'America/Los_Angeles']\"\n *\n * // Anything containing 'New'\n * [timezoneFilter]=\"['*New*']\"\n */\n timezoneFilter = input<string[]>([]);\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<Temporal.ZonedDateTime | null>(null);\n\n /** Emitted when the selected value changes */\n valueChange = output<Temporal.ZonedDateTime | null>();\n\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n protected override readonly uid = `coar-zoned-date-time-picker-${CoarZonedDateTimePickerComponent.nextId++}`;\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n /** Reference to the timezone search input */\n protected tzSearchInputRef = viewChild<ElementRef<HTMLInputElement>>('tzSearchInput');\n\n /** Reference to the timezone list container */\n protected tzListRef = viewChild<ElementRef<HTMLElement>>('tzList');\n\n /** Pending time value (stored until a date is selected) */\n protected pendingTime = signal<CoarTimeValue | null>(null);\n\n /**\n * Display timezone - the user's viewing lens.\n * This can be freely changed without affecting the stored value.\n * Defaults to the user's timezone from CoarTimeZoneService.\n */\n protected displayTimeZone = signal<string | null>(null);\n\n /**\n * Whether the value timezone is being edited (unlocked inline select mode).\n */\n protected isEditingValueTimeZone = signal<boolean>(false);\n\n /**\n * Whether the side column is showing the timezone picker instead of normal content.\n */\n protected isSelectingDisplayTimezone = signal<boolean>(false);\n\n /**\n * Search query for timezone filtering in the inline timezone picker.\n */\n protected timezoneSearchQuery = signal<string>('');\n\n // ============================================================\n // Computed Values (Zoned Date-Time Picker Specific)\n // ============================================================\n\n /**\n * The value's timezone (where the event \"lives\").\n * This is the intent timezone - stored with the value.\n */\n protected valueTimeZone = computed((): string | null => {\n const val = this.value();\n return val ? val.timeZoneId : null;\n });\n\n /**\n * Effective display timezone for viewing.\n * Priority: explicit display selection > service timezone > UTC fallback\n */\n protected effectiveDisplayTimeZone = computed((): string => {\n const explicit = this.displayTimeZone();\n if (explicit) return explicit;\n\n const fromService = this.currentTimeZone?.();\n if (fromService) return fromService;\n\n return 'UTC';\n });\n\n /**\n * The current working timezone for the picker UI.\n * When creating new values, this determines the timezone used.\n * When editing, this is the display timezone (value TZ is preserved).\n */\n protected currentWorkingTimeZone = computed((): string => {\n // If showing location timezone, use value's timezone\n if (this.timezoneIndicatorState() === 'location') {\n return this.valueTimeZone() ?? this.effectiveDisplayTimeZone();\n }\n return this.effectiveDisplayTimeZone();\n });\n\n /**\n * The user's timezone from the service (or UTC fallback).\n * This is the user's \"home\" timezone.\n */\n protected userTimeZone = computed((): string => {\n return this.currentTimeZone?.() ?? 'UTC';\n });\n\n /**\n * Whether the location timezone differs from the user's timezone.\n * Used to determine if toggle functionality should be available.\n */\n protected locationDiffersFromUser = computed((): boolean => {\n const locationTz = this.valueTimeZone();\n if (!locationTz) return false;\n return locationTz !== this.userTimeZone();\n });\n\n /**\n * Timezone indicator state for the icon.\n * - 'home': Showing value in user's timezone\n * - 'location': Showing value in event's location timezone\n * - 'world': Showing value in a third timezone (neither user nor location)\n */\n protected timezoneIndicatorState = computed((): 'home' | 'location' | 'world' => {\n const displayTz = this.effectiveDisplayTimeZone();\n const userTz = this.userTimeZone();\n const locationTz = this.valueTimeZone();\n\n if (displayTz === userTz) {\n return 'home';\n }\n if (locationTz && displayTz === locationTz) {\n return 'location';\n }\n return 'world';\n });\n\n /**\n * Whether the display timezone differs from the value timezone.\n * Used to show/hide the timezone indicator.\n * @deprecated Use timezoneIndicatorState instead for icon logic\n */\n protected timeZonesDiffer = computed((): boolean => {\n const valueTz = this.valueTimeZone();\n if (!valueTz) return false;\n return valueTz !== this.effectiveDisplayTimeZone();\n });\n\n /**\n * Short display name for the value timezone.\n * Format: \"Vienna (UTC+1)\"\n */\n protected valueTimeZoneDisplayName = computed((): string => {\n const tz = this.valueTimeZone();\n if (!tz) return '';\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short display name for the display timezone (user's home TZ).\n * Format: \"Vienna (UTC+1)\"\n */\n protected displayTimeZoneDisplayName = computed((): string => {\n const tz = this.effectiveDisplayTimeZone();\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short display name for the currently shown timezone (based on toggle state).\n * This reflects what the user is actually seeing in the input.\n * Format: \"Vienna (UTC+1)\" or \"New York (UTC-5)\"\n */\n protected currentTimeZoneDisplayName = computed((): string => {\n const tz = this.currentWorkingTimeZone();\n return this.formatTimezoneShort(tz);\n });\n\n /**\n * Short abbreviation for the display timezone badge.\n * Shows just the city name or a short form (max ~6 chars).\n * E.g., 'Europe/Vienna' → 'VIE', 'America/New_York' → 'NYC'\n */\n protected displayTimeZoneAbbreviation = computed((): string => {\n const tz = this.effectiveDisplayTimeZone();\n return this.getTimezoneAbbreviation(tz);\n });\n\n /**\n * UTC offset string for the value timezone.\n */\n protected valueTimeZoneOffset = computed((): string => {\n const tz = this.valueTimeZone();\n if (!tz) return '';\n return this.getOffsetForTimeZone(tz);\n });\n\n /**\n * UTC offset string for the display timezone.\n */\n protected displayTimeZoneOffset = computed((): string => {\n return this.getOffsetForTimeZone(this.effectiveDisplayTimeZone());\n });\n\n /**\n * The value formatted in the VALUE timezone (intent).\n * Always shows what the time means in the original context.\n */\n protected valueInValueTimeZone = computed((): string => {\n const val = this.value();\n if (!val) return '';\n return this.formatZonedDateTime(val);\n });\n\n /**\n * The value formatted in the DISPLAY timezone (user's view).\n */\n protected valueInDisplayTimeZone = computed((): string => {\n const val = this.value();\n if (!val) return '';\n\n const displayTz = this.effectiveDisplayTimeZone();\n if (val.timeZoneId === displayTz) {\n return this.formatZonedDateTime(val);\n }\n\n // Convert to display timezone\n const inDisplayTz = val.toInstant().toZonedDateTimeISO(displayTz);\n return this.formatZonedDateTime(inDisplayTz);\n });\n\n /**\n * The currently displayed value based on which timezone view is active.\n */\n protected currentDisplayedValue = computed((): string => {\n if (this.timezoneIndicatorState() === 'location') {\n return this.valueInValueTimeZone();\n }\n return this.valueInDisplayTimeZone();\n });\n\n /**\n * Computed info for timezone display in trigger tooltip and panel.\n * Returns both display and value timezone info.\n */\n protected popoverTimeZoneInfo = computed(() => {\n const displayTz = this.effectiveDisplayTimeZone();\n const valueTz = this.valueTimeZone();\n\n return {\n displayTzName: this.displayTimeZoneDisplayName(),\n displayTzOffset: this.getOffsetForTimeZone(displayTz),\n valueTzName: this.valueTimeZoneDisplayName(),\n valueTzOffset: valueTz ? this.getOffsetForTimeZone(valueTz) : '',\n };\n });\n\n /** All IANA timezones from the browser */\n private readonly allTimezones: string[] = ['UTC', ...Intl.supportedValuesOf('timeZone')];\n\n /**\n * Filtered timezone options for the select dropdowns.\n * If timezoneFilter is empty, all timezones are available.\n * Supports wildcards: 'Europe/*', '*New*', etc.\n */\n protected readonly timezoneOptions = computed<CoarSelectOption<string>[]>(() => {\n const filters = this.timezoneFilter();\n\n if (!filters || filters.length === 0) {\n // No filter: return all timezones\n return this.allTimezones.map((tz) => ({ value: tz, label: tz }));\n }\n\n // Convert wildcard patterns to regex\n const regexPatterns = filters.map((pattern) => {\n // Escape regex special chars except *, then convert * to .*\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*');\n return new RegExp(`^${escaped}$`, 'i');\n });\n\n // Filter timezones that match any pattern\n const filtered = this.allTimezones.filter((tz) =>\n regexPatterns.some((regex) => regex.test(tz))\n );\n\n return filtered.map((tz) => ({ value: tz, label: tz }));\n });\n\n /**\n * Grouped timezone list for the inline timezone picker.\n * Groups by continent with sticky headers.\n */\n protected readonly groupedTimezoneList = computed<TimezoneGroup[]>(() => {\n const options = this.timezoneOptions();\n const query = this.timezoneSearchQuery().toLowerCase().trim();\n\n let timezones = options.map((o) => o.value);\n\n // Filter by search query (searches both ID and display label)\n if (query) {\n timezones = timezones.filter((tz) => {\n const label = this.formatTimezoneShort(tz);\n return tz.toLowerCase().includes(query) || label.toLowerCase().includes(query);\n });\n }\n\n // Group by continent/region (exclude UTC - not a real location)\n const groups = new Map<string, TimezoneItem[]>();\n\n for (const tz of timezones) {\n // Skip UTC - it's not a real location, use PlainDateTimePicker instead\n if (tz === 'UTC') {\n continue;\n }\n\n const parts = tz.split('/');\n const continent = parts[0];\n const city = this.extractCityName(tz);\n const offset = 'UTC' + this.getOffsetForTimeZoneCompact(tz);\n\n if (!groups.has(continent)) {\n groups.set(continent, []);\n }\n groups.get(continent)!.push({ id: tz, city, offset });\n }\n\n // Convert to array and sort alphabetically by continent\n const result: TimezoneGroup[] = [];\n\n const sortedContinents = [...groups.keys()].sort();\n for (const continent of sortedContinents) {\n const items = groups.get(continent)!;\n // Sort items within group by city name\n items.sort((a, b) => a.city.localeCompare(b.city));\n result.push({ name: continent, items });\n }\n\n return result;\n });\n\n /**\n * Extract the city name from a timezone ID.\n * E.g., 'Europe/Vienna' → 'Vienna', 'America/Argentina/Buenos_Aires' → 'Buenos Aires'\n */\n private extractCityName(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n const parts = tz.split('/');\n const cityPart = parts[parts.length - 1];\n return cityPart.replace(/_/g, ' ');\n }\n\n /**\n * Get a short abbreviation for a timezone (for the badge).\n * Uses common abbreviations for well-known cities, otherwise extracts from city name.\n */\n private getTimezoneAbbreviation(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n // Common abbreviations for popular timezones\n const abbreviations: Record<string, string> = {\n 'Europe/Vienna': 'VIE',\n 'Europe/London': 'LON',\n 'Europe/Paris': 'PAR',\n 'Europe/Berlin': 'BER',\n 'Europe/Zurich': 'ZRH',\n 'Europe/Amsterdam': 'AMS',\n 'Europe/Brussels': 'BRU',\n 'Europe/Madrid': 'MAD',\n 'Europe/Rome': 'ROM',\n 'Europe/Warsaw': 'WAW',\n 'Europe/Prague': 'PRG',\n 'Europe/Budapest': 'BUD',\n 'Europe/Stockholm': 'STO',\n 'Europe/Oslo': 'OSL',\n 'Europe/Copenhagen': 'CPH',\n 'Europe/Helsinki': 'HEL',\n 'Europe/Athens': 'ATH',\n 'Europe/Istanbul': 'IST',\n 'Europe/Moscow': 'MOW',\n 'America/New_York': 'NYC',\n 'America/Los_Angeles': 'LAX',\n 'America/Chicago': 'CHI',\n 'America/Denver': 'DEN',\n 'America/Phoenix': 'PHX',\n 'America/Toronto': 'YYZ',\n 'America/Vancouver': 'YVR',\n 'America/Mexico_City': 'MEX',\n 'America/Sao_Paulo': 'SAO',\n 'America/Buenos_Aires': 'BUE',\n 'America/Lima': 'LIM',\n 'America/Bogota': 'BOG',\n 'Asia/Tokyo': 'TYO',\n 'Asia/Shanghai': 'SHA',\n 'Asia/Hong_Kong': 'HKG',\n 'Asia/Singapore': 'SIN',\n 'Asia/Seoul': 'SEL',\n 'Asia/Taipei': 'TPE',\n 'Asia/Bangkok': 'BKK',\n 'Asia/Jakarta': 'JKT',\n 'Asia/Mumbai': 'BOM',\n 'Asia/Delhi': 'DEL',\n 'Asia/Kolkata': 'CCU',\n 'Asia/Dubai': 'DXB',\n 'Asia/Riyadh': 'RUH',\n 'Asia/Tel_Aviv': 'TLV',\n 'Australia/Sydney': 'SYD',\n 'Australia/Melbourne': 'MEL',\n 'Australia/Perth': 'PER',\n 'Australia/Brisbane': 'BNE',\n 'Pacific/Auckland': 'AKL',\n 'Pacific/Honolulu': 'HNL',\n 'Africa/Cairo': 'CAI',\n 'Africa/Johannesburg': 'JNB',\n 'Africa/Lagos': 'LOS',\n 'Africa/Nairobi': 'NBO',\n 'Africa/Accra': 'ACC',\n };\n\n if (abbreviations[tz]) {\n return abbreviations[tz];\n }\n\n // Fallback: Extract first 3-4 letters of city name, uppercase\n const city = this.extractCityName(tz);\n return city.substring(0, 3).toUpperCase();\n }\n\n /**\n * Format a timezone ID to a short display format.\n * E.g., 'Europe/Vienna' → 'Vienna (UTC+1)'\n */\n protected formatTimezoneShort(tz: string): string {\n if (tz === 'UTC') return 'UTC';\n\n const city = this.extractCityName(tz);\n const offset = this.getOffsetForTimeZoneCompact(tz);\n\n return `${city} (UTC${offset})`;\n }\n\n /**\n * Get a compact UTC offset string for a timezone.\n * E.g., '+1', '-5', '+5:30'\n */\n private getOffsetForTimeZoneCompact(tz: string): string {\n const instant = Temporal.Now.instant();\n const zoned = instant.toZonedDateTimeISO(tz);\n\n const offsetNs = zoned.offsetNanoseconds;\n const offsetMinutes = Math.floor(offsetNs / 60_000_000_000);\n\n if (offsetMinutes === 0) return '+0';\n\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absMinutes / 60);\n const mins = absMinutes % 60;\n\n if (mins === 0) {\n return `${sign}${hours}`;\n }\n return `${sign}${hours}:${String(mins).padStart(2, '0')}`;\n }\n\n /** Get placeholder text based on date and time format */\n protected inputPlaceholder = computed(() => {\n const datePart = this.dateFormat().toUpperCase();\n const use24h = this.effectiveUse24Hour();\n return use24h ? `${datePart} HH:MM` : `${datePart} HH:MM AM/PM`;\n });\n\n /** Whether to use 24-hour time format */\n protected effectiveUse24Hour = computed(() => {\n const setting = this.use24Hour();\n if (setting === true) return true;\n if (setting === false) return false;\n return !coarDetect12HourFormat(this.effectiveLocale());\n });\n\n /** Extract date portion from value */\n /**\n * The value converted to the current working (display) timezone.\n * Used to extract date/time for the calendar and time picker.\n */\n protected valueInWorkingTimeZone = computed((): Temporal.ZonedDateTime | null => {\n const val = this.value();\n if (!val) return null;\n\n const workingTz = this.currentWorkingTimeZone();\n const valueTz = val.timeZoneId;\n\n // If same timezone, no conversion needed\n if (workingTz === valueTz) return val;\n\n // Convert to working timezone\n return val.toInstant().toZonedDateTimeISO(workingTz);\n });\n\n /** Extract date portion from value in working timezone */\n protected selectedDate = computed((): Temporal.PlainDate | null => {\n const val = this.valueInWorkingTimeZone();\n return val ? val.toPlainDate() : null;\n });\n\n /** Extract time portion from value in working timezone */\n protected selectedTime = computed((): CoarTimeValue | null => {\n const val = this.valueInWorkingTimeZone();\n if (!val) return this.pendingTime();\n return { hours: val.hour, minutes: val.minute };\n });\n\n /** Min date for calendar constraints */\n protected minDate = computed((): Temporal.PlainDate | null => {\n const val = this.min();\n return val ? val.toPlainDate() : null;\n });\n\n /** Max date for calendar constraints */\n protected maxDate = computed((): Temporal.PlainDate | null => {\n const val = this.max();\n return val ? val.toPlainDate() : null;\n });\n\n /**\n * Effective minimum time constraint for the time picker.\n * Only applies when the selected date equals the minimum date boundary.\n */\n protected effectiveMinTime = computed((): CoarTimeValue | null => {\n const minDateTime = this.min();\n const selected = this.selectedDate();\n if (!minDateTime || !selected) return null;\n\n const minDatePart = minDateTime.toPlainDate();\n if (Temporal.PlainDate.compare(selected, minDatePart) === 0) {\n return { hours: minDateTime.hour, minutes: minDateTime.minute };\n }\n return null;\n });\n\n /**\n * Effective maximum time constraint for the time picker.\n * Only applies when the selected date equals the maximum date boundary.\n */\n protected effectiveMaxTime = computed((): CoarTimeValue | null => {\n const maxDateTime = this.max();\n const selected = this.selectedDate();\n if (!maxDateTime || !selected) return null;\n\n const maxDatePart = maxDateTime.toPlainDate();\n if (Temporal.PlainDate.compare(selected, maxDatePart) === 0) {\n return { hours: maxDateTime.hour, minutes: maxDateTime.minute };\n }\n return null;\n });\n\n /** Resolved active month (uses value's month or today) */\n protected override resolvedActiveMonth = computed((): Temporal.PlainYearMonth => {\n const explicit = this.activeMonth();\n if (explicit) return explicit;\n const val = this.value();\n if (val) return val.toPlainDate().toPlainYearMonth();\n return this.today().toPlainYearMonth();\n });\n\n /**\n * The derived instant (UTC) from the current value.\n * Null if no value is selected.\n */\n protected derivedInstant = computed((): Temporal.Instant | null => {\n const val = this.value();\n return val ? val.toInstant() : null;\n });\n\n // ============================================================\n // Abstract Method Implementations\n // ============================================================\n\n protected override getValue(): Temporal.ZonedDateTime | null {\n return this.value();\n }\n\n protected override getSelectedPlainDate(): Temporal.PlainDate | null {\n return this.selectedDate();\n }\n\n protected override estimatePanelHeight(): number {\n return 400;\n }\n\n protected override resetValue(): void {\n this.value.set(null);\n this.pendingTime.set(null);\n this.valueChange.emit(null);\n }\n\n protected override onPanelClosed(): void {\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync display value with selected value (in current display timezone)\n effect(() => {\n const displayed = this.currentDisplayedValue();\n this.displayValue.set(displayed);\n });\n\n // Keep Maskito config in sync\n effect(() => {\n this.dateFormat();\n this.separator();\n this.minDate();\n this.maxDate();\n\n const inputElement = this.inputRef()?.nativeElement;\n if (!inputElement) return;\n\n this.maskitoInstance?.destroy();\n this.initializeMaskito(inputElement);\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Calendar Event Handlers\n // ============================================================\n\n /**\n * Handle date selection from calendar.\n * The date/time is edited in the current working timezone,\n * but the value timezone is preserved (unless explicitly changed).\n */\n protected onDateSelected(date: Temporal.PlainDate): void {\n const time = this.selectedTime() ?? this.defaultTime();\n const valueTz = this.valueTimeZone();\n\n const plainDateTime = date.toPlainDateTime({\n hour: time.hours,\n minute: coarRoundMinutesToStep(time.minutes, this.minuteStep()),\n });\n\n // If we have an existing value, preserve its timezone (intent)\n // Otherwise use the display timezone for new values\n const targetTz = valueTz ?? this.effectiveDisplayTimeZone();\n\n // If editing in display timezone but value has different timezone,\n // we need to convert the selected time to the value timezone\n const workingTz = this.currentWorkingTimeZone();\n let zonedDateTime: Temporal.ZonedDateTime;\n\n if (workingTz !== targetTz) {\n // User is editing in display timezone, convert to value timezone\n const inWorkingTz = plainDateTime.toZonedDateTime(workingTz);\n zonedDateTime = inWorkingTz.toInstant().toZonedDateTimeISO(targetTz);\n } else {\n zonedDateTime = plainDateTime.toZonedDateTime(targetTz);\n }\n\n // Clamp to min/max bounds\n zonedDateTime = this.clampZonedDateTimeToRange(zonedDateTime);\n\n this.value.set(zonedDateTime);\n this.valueChange.emit(zonedDateTime);\n this.cvaOnChange(zonedDateTime);\n }\n\n /**\n * Handle time changes from time picker.\n * Preserves the value timezone (intent).\n */\n protected onTimeChanged(time: CoarTimeValue | null): void {\n if (!time) return;\n\n const currentDate = this.selectedDate();\n if (currentDate) {\n const valueTz = this.valueTimeZone();\n const targetTz = valueTz ?? this.effectiveDisplayTimeZone();\n const workingTz = this.currentWorkingTimeZone();\n\n const plainDateTime = currentDate.toPlainDateTime({\n hour: time.hours,\n minute: time.minutes,\n });\n\n let zonedDateTime: Temporal.ZonedDateTime;\n\n if (workingTz !== targetTz) {\n const inWorkingTz = plainDateTime.toZonedDateTime(workingTz);\n zonedDateTime = inWorkingTz.toInstant().toZonedDateTimeISO(targetTz);\n } else {\n zonedDateTime = plainDateTime.toZonedDateTime(targetTz);\n }\n\n zonedDateTime = this.clampZonedDateTimeToRange(zonedDateTime);\n\n this.value.set(zonedDateTime);\n this.valueChange.emit(zonedDateTime);\n this.cvaOnChange(zonedDateTime);\n } else {\n this.pendingTime.set(time);\n }\n }\n\n /**\n * Handle display timezone change (viewing lens).\n * This does NOT change the value - only how it's displayed.\n */\n protected onDisplayTimeZoneChanged(newTimeZone: string | null): void {\n this.displayTimeZone.set(newTimeZone);\n }\n\n /**\n * Start the inline timezone picker (replaces side column content).\n */\n protected startSelectingDisplayTimezone(): void {\n this.timezoneSearchQuery.set('');\n this.isSelectingDisplayTimezone.set(true);\n // Focus the search input and scroll to active timezone after the view updates\n setTimeout(() => {\n this.tzSearchInputRef()?.nativeElement.focus();\n this.scrollToActiveTimezone();\n });\n }\n\n /**\n * Scroll the timezone list to show the currently active timezone.\n */\n private scrollToActiveTimezone(): void {\n const listEl = this.tzListRef()?.nativeElement;\n if (!listEl) return;\n\n const activeItem = listEl.querySelector(\n '.coar-zoned-date-time-picker-tz-picker-item--active'\n ) as HTMLElement;\n if (!activeItem) return;\n\n // Scroll the item into view, centered in the list\n activeItem.scrollIntoView({ block: 'center', behavior: 'instant' });\n }\n\n /**\n * Cancel the inline timezone picker.\n */\n protected cancelSelectingDisplayTimezone(): void {\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n /**\n * Close the timezone picker when clicking outside of it (e.g., on the calendar).\n */\n protected closeTimezonePickerOnOutsideClick(): void {\n if (this.isSelectingDisplayTimezone()) {\n this.cancelSelectingDisplayTimezone();\n }\n }\n\n /**\n * Select a timezone from the inline timezone picker.\n */\n protected selectDisplayTimezone(tz: string): void {\n this.displayTimeZone.set(tz);\n this.isSelectingDisplayTimezone.set(false);\n this.timezoneSearchQuery.set('');\n }\n\n /**\n * Handle search input change in the inline timezone picker.\n */\n protected onTimezoneSearchChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.timezoneSearchQuery.set(input.value);\n }\n\n /**\n * Toggle between showing value in user timezone vs location timezone.\n * Used by the indicator icon in the trigger.\n *\n * Behavior:\n * - home (user TZ) → switch to location TZ\n * - location (event TZ) → switch to user TZ\n * - world (other TZ) → switch to user TZ\n */\n protected toggleTimeZoneView(): void {\n const state = this.timezoneIndicatorState();\n const locationTz = this.valueTimeZone();\n const userTz = this.userTimeZone();\n\n if (state === 'home' && locationTz && locationTz !== userTz) {\n // Home → Location: show in event timezone\n this.displayTimeZone.set(locationTz);\n } else {\n // Location or World → Home: show in user timezone\n this.displayTimeZone.set(userTz);\n }\n }\n\n /**\n * Start editing the value timezone.\n */\n protected startEditingValueTimeZone(): void {\n // Close display timezone picker if open\n this.cancelSelectingDisplayTimezone();\n this.isEditingValueTimeZone.set(true);\n }\n\n /**\n * Cancel editing the value timezone.\n */\n protected cancelEditingValueTimeZone(): void {\n this.isEditingValueTimeZone.set(false);\n }\n\n /**\n * Change the value timezone (intent).\n * This is an EXPLICIT action - the value's local time stays the same,\n * but it's now interpreted in a different timezone.\n */\n protected onValueTimeZoneChanged(newTimeZone: string | null): void {\n if (!newTimeZone) return;\n\n const currentValue = this.value();\n if (currentValue) {\n // Keep the same local date/time, but change the timezone (intent)\n const plainDateTime = currentValue.toPlainDateTime();\n const newZonedDateTime = plainDateTime.toZonedDateTime(newTimeZone);\n\n this.value.set(newZonedDateTime);\n this.valueChange.emit(newZonedDateTime);\n this.cvaOnChange(newZonedDateTime);\n }\n\n // Auto-lock after selection\n this.isEditingValueTimeZone.set(false);\n }\n\n /**\n * Clamps a ZonedDateTime to be within the min/max range.\n */\n private clampZonedDateTimeToRange(zonedDateTime: Temporal.ZonedDateTime): Temporal.ZonedDateTime {\n const minDateTime = this.min();\n const maxDateTime = this.max();\n\n if (minDateTime) {\n const minInstant = minDateTime.toInstant();\n const valueInstant = zonedDateTime.toInstant();\n if (Temporal.Instant.compare(valueInstant, minInstant) < 0) {\n // Return min in the value's timezone for consistency\n return minInstant.toZonedDateTimeISO(zonedDateTime.timeZoneId);\n }\n }\n\n if (maxDateTime) {\n const maxInstant = maxDateTime.toInstant();\n const valueInstant = zonedDateTime.toInstant();\n if (Temporal.Instant.compare(valueInstant, maxInstant) > 0) {\n return maxInstant.toZonedDateTimeISO(zonedDateTime.timeZoneId);\n }\n }\n\n return zonedDateTime;\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.ZonedDateTime | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n this.pendingTime.set(null);\n } else if (typeof value === 'string') {\n try {\n this.value.set(Temporal.ZonedDateTime.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n this.displayValue.set(text);\n\n const parsed = this.parseValueFromInput(text);\n if (parsed) {\n this.value.set(parsed);\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = this.parseValueFromInput(currentText);\n\n if (!parsed && currentText.length > 0) {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatValue(val));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n private formatValue(val: Temporal.ZonedDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n\n private parseValueFromInput(text: string): Temporal.ZonedDateTime | null {\n if (!text) return null;\n\n const parts = text.split(' ');\n if (parts.length < 2) return null;\n\n const datePart = parts[0];\n const date = coarParsePlainDateFromInput(datePart, this.dateFormat(), {\n min: this.minDate(),\n max: this.maxDate(),\n });\n\n if (!date) return null;\n\n const timePart = parts.slice(1).join(' ');\n const time = coarParseTimeInput(timePart);\n if (!time) return null;\n\n const plainDateTime = date.toPlainDateTime({ hour: time.hours, minute: time.minutes });\n // Parse input in the value timezone (preserving the event's intent)\n // If no value exists yet, use the display timezone as the initial timezone\n const targetTz = this.valueTimeZone() ?? this.effectiveDisplayTimeZone();\n return plainDateTime.toZonedDateTime(targetTz);\n }\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n\n const options = maskitoDateTimeOptionsGenerator({\n dateMode: COAR_DATE_FORMAT_TO_MASKITO_MODE[format],\n timeMode: 'HH:MM',\n dateSeparator: separator,\n min: minDate ? coarTemporalPlainDateToDate(minDate) : undefined,\n max: maxDate ? coarTemporalPlainDateToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n\n /**\n * Get UTC offset string for a given timezone.\n */\n private getOffsetForTimeZone(tz: string): string {\n const val = this.value();\n const instant = val?.toInstant() ?? Temporal.Now.instant();\n const zoned = instant.toZonedDateTimeISO(tz);\n\n const offsetNs = zoned.offsetNanoseconds;\n const offsetMinutes = Math.floor(offsetNs / 60_000_000_000);\n const sign = offsetMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(offsetMinutes);\n const hours = Math.floor(absMinutes / 60);\n const mins = absMinutes % 60;\n\n return `${sign}${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}`;\n }\n\n /**\n * Format a ZonedDateTime for display.\n */\n private formatZonedDateTime(val: Temporal.ZonedDateTime): string {\n const datePart = coarFormatPlainDate(val.toPlainDate(), this.dateFormat());\n const timePart = coarFormatTime(val.hour, val.minute, this.effectiveUse24Hour());\n return `${datePart} ${timePart}`;\n }\n}\n","<div class=\"coar-zoned-date-time-picker-wrapper\">\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-zoned-date-time-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-zoned-date-time-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-zoned-date-time-picker-trigger\"\n [class.coar-zoned-date-time-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-zoned-date-time-picker-trigger--readonly]=\"readonly()\"\n [class.coar-zoned-date-time-picker-trigger--error]=\"hasError()\"\n [class.coar-zoned-date-time-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) -->\n <button type=\"button\" class=\"coar-zoned-date-time-picker-clear\"\n [class.coar-zoned-date-time-picker-clear--hidden]=\"!showClearButton()\"\n tabindex=\"-1\" aria-label=\"Clear date\"\n (click)=\"clearValue($event)\">\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" />\n </button>\n\n <!-- Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-zoned-date-time-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Inline Timezone Display (between input and icon) -->\n <span class=\"coar-zoned-date-time-picker-tz-inline\" [class.coar-zoned-date-time-picker-tz-inline--hidden]=\"!value()\">\n {{ currentTimeZoneDisplayName() }}\n </span>\n\n <!-- Timezone Indicator Icon (always rendered to prevent layout shift) -->\n <button type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-indicator\"\n [class.coar-zoned-date-time-picker-tz-indicator--hidden]=\"!value()\"\n [class.coar-zoned-date-time-picker-tz-indicator--clickable]=\"locationDiffersFromUser() || timezoneIndicatorState() !== 'home'\"\n [class.coar-zoned-date-time-picker-tz-indicator--disabled]=\"!locationDiffersFromUser() && timezoneIndicatorState() === 'home'\"\n tabindex=\"-1\"\n [attr.aria-disabled]=\"!locationDiffersFromUser() && timezoneIndicatorState() === 'home' ? 'true' : null\"\n [attr.aria-label]=\"\n locationDiffersFromUser()\n ? 'Toggle timezone view. Currently showing ' +\n popoverTimeZoneInfo().displayTzName +\n '. Click to show ' +\n (timezoneIndicatorState() === 'home' ? popoverTimeZoneInfo().valueTzName : popoverTimeZoneInfo().displayTzName)\n : 'Timezone: ' + popoverTimeZoneInfo().displayTzName\n \"\n (click)=\"toggleTimeZoneView()\"\n [title]=\"\n locationDiffersFromUser()\n ? 'Viewing: ' +\n popoverTimeZoneInfo().displayTzName +\n ' (' +\n popoverTimeZoneInfo().displayTzOffset +\n ')&#10;Location: ' +\n popoverTimeZoneInfo().valueTzName +\n ' (' +\n popoverTimeZoneInfo().valueTzOffset +\n ')&#10;Click to toggle'\n : popoverTimeZoneInfo().displayTzName + ' (' + popoverTimeZoneInfo().displayTzOffset + ')'\n \"\n >\n <!-- Icon based on which timezone is currently shown -->\n @switch (timezoneIndicatorState()) {\n @case ('home') {\n <coar-icon name=\"home\" source=\"coar-builtin\" size=\"s\" />\n }\n @case ('location') {\n <coar-icon name=\"location\" source=\"coar-builtin\" size=\"s\" />\n }\n @case ('world') {\n <coar-icon name=\"world\" source=\"coar-builtin\" size=\"s\" />\n }\n }\n </button>\n\n <!-- Calendar Icon -->\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-btn\"\n tabindex=\"-1\"\n aria-label=\"Open picker\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <!-- Panel (rendered via @cocoar/ui/overlay) -->\n <ng-template #panelTemplate>\n <div\n class=\"coar-zoned-date-time-picker-panel\"\n [class.coar-zoned-date-time-picker-panel--with-weeks]=\"showWeekNumbers()\"\n [attr.id]=\"panelId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Date time picker\"\n >\n <!-- Main content: two columns side by side -->\n <div class=\"coar-zoned-date-time-picker-panel-body\">\n <!-- Left Column: Scrollable Calendar -->\n <div class=\"coar-zoned-date-time-picker-calendar-column\" (click)=\"closeTimezonePickerOnOutsideClick()\" (keydown.escape)=\"closeTimezonePickerOnOutsideClick()\" tabindex=\"-1\">\n <coar-scrollable-calendar\n [value]=\"selectedDate()\"\n [activeMonth]=\"resolvedActiveMonth()\"\n (activeMonthChange)=\"onActiveMonthChanged($event)\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [locale]=\"effectiveLocale()\"\n [dateFormatConfig]=\"effectiveDateFormat()\"\n [showWeekNumbers]=\"showWeekNumbers()\"\n [highlightWeekends]=\"highlightWeekends()\"\n [markers]=\"markers()\"\n (dateSelected)=\"onDateSelected($event)\"\n />\n\n @if (showTodayMonthFab()) {\n <button type=\"button\" class=\"coar-zoned-date-time-picker-today-fab\" (click)=\"scrollToTodayMonth()\" aria-label=\"Jump to today's month\">\n <coar-icon [name]=\"todayMonthScrollDirection()\" size=\"xs\" />\n </button>\n }\n </div>\n <!-- Right Column: Month List + Time Picker + Timezone OR Timezone Picker -->\n <div class=\"coar-zoned-date-time-picker-side-column\">\n <!-- Unified Header: Year Stepper OR Timezone Search -->\n <div class=\"coar-zoned-date-time-picker-side-header\">\n @if (isSelectingDisplayTimezone()) {\n <!-- Timezone Search Mode -->\n <input\n #tzSearchInput\n type=\"text\"\n class=\"coar-zoned-date-time-picker-tz-search-input\"\n placeholder=\"Search timezone...\"\n aria-label=\"Search timezone\"\n [value]=\"timezoneSearchQuery()\"\n (input)=\"onTimezoneSearchChange($event)\"\n autocomplete=\"off\"\n />\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-search-close\"\n (click)=\"cancelSelectingDisplayTimezone()\"\n aria-label=\"Close timezone picker\"\n >\n <coar-icon name=\"back\" size=\"s\" />\n </button>\n } @else {\n <!-- Year Stepper Mode -->\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-year-btn\"\n [disabled]=\"isPrevYearDisabled()\"\n (click)=\"previousYear()\"\n aria-label=\"Previous year\"\n >\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n <span class=\"coar-zoned-date-time-picker-year\">{{ currentYear() }}</span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-year-btn\"\n [disabled]=\"isNextYearDisabled()\"\n (click)=\"nextYear()\"\n aria-label=\"Next year\"\n >\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n }\n </div>\n\n @if (isSelectingDisplayTimezone()) {\n <!-- Timezone Picker List (grouped by continent) -->\n <div #tzList class=\"coar-zoned-date-time-picker-tz-picker-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n @for (group of groupedTimezoneList(); track group.name) {\n <div class=\"coar-zoned-date-time-picker-tz-group\">\n <div class=\"coar-zoned-date-time-picker-tz-group-header\">{{ group.name }}</div>\n @for (item of group.items; track item.id) {\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-tz-picker-item\"\n [class.coar-zoned-date-time-picker-tz-picker-item--active]=\"item.id === effectiveDisplayTimeZone()\"\n [title]=\"item.id\"\n (click)=\"selectDisplayTimezone(item.id)\"\n >\n <span class=\"coar-zoned-date-time-picker-tz-city\">{{ item.city }}</span>\n <span class=\"coar-zoned-date-time-picker-tz-offset\">{{ item.offset }}</span>\n </button>\n }\n </div>\n }\n @if (groupedTimezoneList().length === 0) {\n <div class=\"coar-zoned-date-time-picker-tz-picker-empty\">No timezones found</div>\n }\n </div>\n } @else {\n <!-- Normal Mode: Months, Time, Timezone -->\n\n <!-- Month List (4-column grid) -->\n <div class=\"coar-zoned-date-time-picker-month-list-wrapper\">\n <div class=\"coar-zoned-date-time-picker-month-list\" role=\"listbox\" aria-label=\"Months\">\n <div class=\"coar-zoned-date-time-picker-month-list-content\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-month-item\"\n [class.coar-zoned-date-time-picker-month-item--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Time Picker -->\n <div class=\"coar-zoned-date-time-picker-time-section\">\n <coar-time-picker\n [value]=\"selectedTime()\"\n [use24Hour]=\"use24Hour()\"\n [minuteStep]=\"minuteStep()\"\n [locale]=\"effectiveLocale()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [minTime]=\"effectiveMinTime()\"\n [maxTime]=\"effectiveMaxTime()\"\n (valueChange)=\"onTimeChanged($event)\"\n />\n </div>\n\n <!-- Display Timezone Section (in side column) -->\n <div class=\"coar-zoned-date-time-picker-display-tz-section\">\n <span class=\"coar-zoned-date-time-picker-display-tz-label\">Display Timezone</span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-display-tz-button\"\n (click)=\"startSelectingDisplayTimezone()\"\n [title]=\"effectiveDisplayTimeZone()\"\n aria-label=\"Change display timezone\"\n >\n <span class=\"coar-zoned-date-time-picker-display-tz-value\">{{ displayTimeZoneDisplayName() }}</span>\n <coar-icon name=\"down\" size=\"xs\" />\n </button>\n </div>\n\n <!-- Events Section (shows markers for selected date) -->\n @if (selectedDateMarkers().length > 0) {\n <div class=\"coar-zoned-date-time-picker-events\">\n <div class=\"coar-zoned-date-time-picker-events-list\" coarScrollbar [overflowX]=\"'hidden'\" [overflowY]=\"'scroll'\">\n <div class=\"coar-zoned-date-time-picker-events-content\">\n @for (marker of selectedDateMarkers(); track marker.description) {\n <div class=\"coar-zoned-date-time-picker-event-item\">\n <span class=\"coar-zoned-date-time-picker-event-dot\"></span>\n <div class=\"coar-zoned-date-time-picker-event-details\">\n <span class=\"coar-zoned-date-time-picker-event-text\">{{ marker.description }}</span>\n @if (marker.endDate && !marker.startDate.equals(marker.endDate)) {\n <span class=\"coar-zoned-date-time-picker-event-dates\">\n {{ marker.startDate.day }}/{{ marker.startDate.month }} – {{ marker.endDate.day }}/{{ marker.endDate.month }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n <!-- End panel-body -->\n\n <!-- Event Timezone Footer (full width, one-liner) -->\n <div class=\"coar-zoned-date-time-picker-footer\" [class.coar-zoned-date-time-picker-footer--differs]=\"timeZonesDiffer()\">\n @if (!value()) {\n <!-- No value: show placeholder to prevent layout shift -->\n <span class=\"coar-zoned-date-time-picker-footer-tz-section\">\n <span class=\"coar-zoned-date-time-picker-footer-tz coar-zoned-date-time-picker-footer-tz--placeholder\">{{\n valueTimeZoneDisplayName()\n }}</span>\n </span>\n <span class=\"coar-zoned-date-time-picker-footer-datetime coar-zoned-date-time-picker-footer-datetime--placeholder\"> — </span>\n } @else if (isEditingValueTimeZone()) {\n <!-- Editing mode: show select -->\n <coar-single-select\n class=\"coar-zoned-date-time-picker-value-tz-select\"\n [options]=\"timezoneOptions()\"\n [value]=\"valueTimeZone()\"\n [searchable]=\"true\"\n [placeholder]=\"'Select timezone'\"\n size=\"xs\"\n (valueChange)=\"onValueTimeZoneChanged($event)\"\n appearance=\"inline\"\n />\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-value-tz-cancel\"\n (click)=\"cancelEditingValueTimeZone()\"\n aria-label=\"Cancel timezone change\"\n >\n <coar-icon name=\"x\" size=\"xs\" />\n </button>\n } @else {\n <!-- Display mode: Location icon + timezone + datetime + settings -->\n <span class=\"coar-zoned-date-time-picker-footer-tz-section\">\n <coar-icon name=\"location\" size=\"s\" />\n <span class=\"coar-zoned-date-time-picker-footer-tz\">{{ valueTimeZoneDisplayName() }}</span>\n </span>\n <span class=\"coar-zoned-date-time-picker-footer-datetime\">\n {{ valueInValueTimeZone() }}\n </span>\n <button\n type=\"button\"\n class=\"coar-zoned-date-time-picker-footer-lock\"\n (click)=\"startEditingValueTimeZone()\"\n aria-label=\"Change event timezone\"\n title=\"Click to change the event's timezone\"\n >\n <coar-icon name=\"setting\" size=\"xs\" />\n </button>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message (always rendered, 1 line reserved) -->\n <div [id]=\"messageId()\" class=\"coar-form-field-message\" [class.coar-form-field-message--error]=\"hasError()\" [attr.title]=\"displayMessage() || null\">\n {{ displayMessage() }}\n </div>\n</div>\n","import { Injectable } from '@angular/core';\n\n/**\n * Local coordination for popovers inside the same container (e.g. a date picker panel).\n *\n * Provided by a parent component to ensure only one popover in that scope is open at a time.\n */\n@Injectable()\nexport class CoarPopoverGroupService {\n private activeId: string | null = null;\n private activeClose: (() => void) | null = null;\n\n requestOpen(id: string, close: () => void): void {\n if (this.activeId && this.activeId !== id) {\n this.activeClose?.();\n }\n\n this.activeId = id;\n this.activeClose = close;\n }\n\n notifyClosed(id: string): void {\n if (this.activeId === id) {\n this.activeId = null;\n this.activeClose = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostListener,\n effect,\n inject,\n input,\n signal,\n viewChild,\n booleanAttribute,\n TemplateRef,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, filter } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarPopoverGroupService } from './coar-popover-group.service';\n\n/**\n * A lightweight, hover/focus popover for rich tooltip-like content.\n *\n * Uses the overlay system for positioning with automatic placement and viewport clamping.\n */\n@Component({\n selector: 'coar-popover',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-popover.component.html',\n styleUrl: './coar-popover.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarPopoverComponent {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly popoverGroup = inject(CoarPopoverGroupService, { optional: true });\n private readonly overlayBuilder = createOverlayBuilder();\n\n private static nextId = 0;\n private readonly popoverId = `coar-popover-${CoarPopoverComponent.nextId++}`;\n protected readonly panelId = `${this.popoverId}-panel`;\n\n private overlayRef: OverlayRef | null = null;\n protected readonly isOpen = signal(false);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.close();\n });\n }\n\n /** Disable popover behavior (still renders trigger content). */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable hover/focus behavior (desktop-friendly). Default: false */\n openOnHover = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable click/tap behavior (touch-friendly). Default: false */\n openOnClick = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should receive pointer events. Default: true */\n interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When a concrete placement is set, fall back to best-fit when it doesn't fit. Default: false */\n fallbackToBestFit = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should be clamped into the viewport. Default: true */\n clampToViewport = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When true, the popover is \"pinned\" open via click and won't close on hover out. */\n protected readonly pinnedByClick = signal(false);\n\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly hoveringTrigger = signal(false);\n private readonly hoveringPanel = signal(false);\n\n private readonly closeOnDisable = effect(() => {\n if (this.disabled()) {\n this.close();\n }\n });\n\n private readonly syncClampToViewport = effect(() => {\n // Applied when opening the overlay.\n void this.clampToViewport();\n });\n\n private readonly syncFallbackToBestFit = effect(() => {\n // Relevant for concrete placements; popover uses best-fit placement list.\n void this.fallbackToBestFit();\n });\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n private readonly panelTemplateRef = viewChild<TemplateRef<unknown>>('panelTemplate');\n\n private getAnchorElement(): HTMLElement | null {\n const triggerContainer = this.triggerRef()?.nativeElement ?? null;\n if (!triggerContainer) return null;\n\n // Prefer anchoring to the projected trigger element so positioning stays tied\n // to the interactive target rather than a full-width wrapper.\n return (\n triggerContainer.querySelector('[coarPopoverTrigger], [coarpopovertrigger]') ??\n triggerContainer\n );\n }\n\n private readonly closeOnDocumentClick = fromEvent<MouseEvent>(document, 'click')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(() => this.isOpen()),\n filter(() => this.openOnClick()),\n filter(() => this.pinnedByClick()),\n filter((event) => {\n const target = event.target as Node | null;\n if (!target) return false;\n\n const trigger = this.getAnchorElement();\n if (trigger && trigger.contains(target)) return false;\n\n const panel = document.getElementById(this.panelId);\n if (panel && panel.contains(target)) return false;\n\n return true;\n })\n )\n .subscribe(() => this.close());\n\n private openInternal(source: 'hover' | 'click'): void {\n if (this.disabled()) return;\n\n const trigger = this.getAnchorElement();\n if (!trigger) return;\n\n if (this.overlayRef) {\n if (source === 'click') {\n this.pinnedByClick.set(true);\n }\n return;\n }\n\n const template = this.panelTemplateRef();\n if (!template) return;\n\n // Scope-level coordination (e.g. date picker): opening one closes others.\n this.popoverGroup?.requestOpen(this.popoverId, () => this.close());\n\n if (source === 'click') {\n this.pinnedByClick.set(true);\n } else {\n this.pinnedByClick.set(false);\n }\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position({\n placement: ['bottom', 'top', 'right', 'left'],\n offset: 6,\n flip: false,\n shift: this.clampToViewport(),\n })\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: false, escapeKey: true })\n .size({ mode: 'content' })\n .a11y({ role: 'tooltip' })\n .fromTemplate(template)\n .open({});\n this.overlayRef = ref;\n this.isOpen.set(true);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.pinnedByClick.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n });\n }\n\n onMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringTrigger.set(true);\n this.clearCloseTimer();\n this.openInternal('hover');\n }\n\n onMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringTrigger.set(false);\n this.scheduleHoverClose();\n }\n\n onPanelMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringPanel.set(true);\n this.clearCloseTimer();\n }\n\n onPanelMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringPanel.set(false);\n this.scheduleHoverClose();\n }\n\n onFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onPanelFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onTriggerClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n if (this.disabled()) return;\n\n // Prevent the global document click handler from immediately closing.\n event.stopPropagation();\n\n if (!this.isOpen()) {\n this.openInternal('click');\n return;\n }\n\n // If opened via hover, treat click as \"pin\". If already pinned, toggle closed.\n if (!this.pinnedByClick()) {\n this.pinnedByClick.set(true);\n return;\n }\n\n this.close();\n }\n\n @HostListener('click', ['$event'])\n onHostClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n // Only toggle when the click originated from the projected trigger.\n if (!target.closest('[coarPopoverTrigger]')) return;\n\n this.onTriggerClick(event);\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.pinnedByClick.set(false);\n this.clearCloseTimer();\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n }\n\n onFocusOut(event: FocusEvent): void {\n if (this.pinnedByClick()) return;\n\n const nextTarget = event.relatedTarget as Node | null;\n\n // Close only when focus fully leaves the popover (trigger + panel).\n const trigger = this.triggerRef()?.nativeElement ?? null;\n const panel = document.getElementById(this.panelId);\n if (\n (trigger && nextTarget && trigger.contains(nextTarget)) ||\n (panel && nextTarget && panel.contains(nextTarget))\n ) {\n return;\n }\n\n this.close();\n }\n\n onPanelFocusOut(event: FocusEvent): void {\n this.onFocusOut(event);\n }\n\n private scheduleHoverClose(): void {\n this.clearCloseTimer();\n this.closeTimer = setTimeout(() => {\n if (this.pinnedByClick()) return;\n if (this.hoveringTrigger() || this.hoveringPanel()) return;\n this.close();\n }, 80);\n }\n\n private clearCloseTimer(): void {\n if (!this.closeTimer) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n}\n","<div\n class=\"coar-popover\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n>\n <span\n #trigger\n class=\"coar-popover-trigger\"\n >\n <ng-content select=\"[coarPopoverTrigger]\"></ng-content>\n </span>\n\n <ng-template #panelTemplate>\n <div\n class=\"coar-popover-panel coar-popover-panel--overlay\"\n [attr.id]=\"panelId\"\n [style.pointer-events]=\"interactive() ? 'auto' : 'none'\"\n role=\"tooltip\"\n (mouseenter)=\"onPanelMouseEnter()\"\n (mouseleave)=\"onPanelMouseLeave()\"\n (focusin)=\"onPanelFocusIn()\"\n (focusout)=\"onPanelFocusOut($event)\"\n >\n <div\n class=\"coar-popover-content\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n <ng-content select=\"[coarPopoverContent]\"></ng-content>\n </div>\n </div>\n </ng-template>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n booleanAttribute,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport type { DateFormatConfig } from '../_shared/coar-date-format';\nimport type { CoarDateMarker } from '../_shared/coar-date-marker';\nimport {\n coarCalculateIsoWeekNumber,\n coarDetectDateFormatPatternFromIntl,\n coarGetCalendarGridDates,\n coarGetLocalizedWeekdays,\n coarClampPlainDate,\n} from '../_shared/coar-date-helpers';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarPopoverComponent } from '../../overlay/popover/coar-popover.component';\nimport { CoarPopoverGroupService } from '../../overlay/popover/coar-popover-group.service';\nimport {\n CoarI18nPipe,\n CoarLocalizationService,\n CoarLocalizationDataStore,\n CoarTimeZoneService,\n} from '@cocoar/localization';\n\n@Component({\n selector: 'coar-mini-calendar',\n standalone: true,\n imports: [CoarIconComponent, CoarPopoverComponent, CoarI18nPipe],\n templateUrl: './coar-mini-calendar.component.html',\n styleUrl: './coar-mini-calendar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CoarPopoverGroupService],\n})\nexport class CoarMiniCalendarComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n private readonly timeZoneService = inject(CoarTimeZoneService, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n /** Current selected date (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /** Date format configuration (pattern and first day of week) */\n dateFormatConfig = input<DateFormatConfig>();\n\n /** Whether to show a \"Today\" button */\n showTodayButton = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days (Saturday/Sunday) with a subtle background */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates (holidays, events, etc.) */\n markers = input<CoarDateMarker[]>([]);\n\n /** Maximum number of lines shown in the marker popover (including \"+N\" line). */\n protected readonly markerPopoverMaxLines = 5;\n\n /** Visible markers before switching to \"+N other events\". */\n protected readonly markerPopoverVisibleMarkers = 4;\n\n /**\n * Today's date based on the configured timezone.\n * Reactive: updates when timezone changes.\n */\n protected readonly today = computed(() => {\n const tz = this.timeZoneService?.currentTimeZone();\n if (tz) {\n return Temporal.Now.plainDateISO(tz);\n }\n return Temporal.Now.plainDateISO();\n });\n\n /** Currently viewed month/year in the calendar */\n protected viewDate = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth()\n );\n\n /** Focused date in the calendar (for keyboard navigation) */\n protected focusedDate = signal<Temporal.PlainDate | null>(null);\n\n /**\n * Effective locale for calendar month/year display.\n * Priority: input locale > locale service language > browser locale\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n const directConfig = this.dateFormatConfig();\n if (directConfig) return directConfig;\n\n // Try to get from localization data store using the effective locale.\n // The store is keyed by whatever string was passed to setLanguage() —\n // could be 'de' or 'de-AT'. Using effectiveLocale() ensures the per-instance\n // locale input is respected.\n const _version = this.localizationDataStore?.dataVersion();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date) {\n // Convert 0-6 (Sun-Sat) format to ISO 1-7 (Mon-Sun) format\n const isoFirstDay = localeData.date.firstDayOfWeek === 0 ? 7 : localeData.date.firstDayOfWeek;\n return {\n pattern: localeData.date.pattern,\n firstDayOfWeek: isoFirstDay as 1 | 7,\n };\n }\n\n // Fallback: detect pattern from Intl, default firstDayOfWeek to Monday\n const detectedPattern = coarDetectDateFormatPatternFromIntl(locale);\n return { pattern: detectedPattern ?? 'dd.mm.yyyy', firstDayOfWeek: 1 };\n });\n\n protected firstDayOfWeek = computed(() => this.effectiveDateFormat().firstDayOfWeek);\n\n protected daysOfWeek = computed(() => {\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n if (localeData?.date?.dayNamesShort?.length === 7) {\n // dayNamesShort is [Mon, Tue, Wed, Thu, Fri, Sat, Sun] (Monday-first)\n const names = [...localeData.date.dayNamesShort];\n if (this.firstDayOfWeek() === 7) {\n // Sunday first: move Sunday from end to front\n const sunday = names.pop()!;\n names.unshift(sunday);\n }\n return names;\n }\n return coarGetLocalizedWeekdays(this.effectiveLocale(), this.firstDayOfWeek());\n });\n\n protected calendarDays = computed(() => {\n const viewMonth = this.viewDate();\n const grid = coarGetCalendarGridDates(viewMonth, this.firstDayOfWeek());\n return grid.map((cell) => this.createCalendarDay(cell.date, cell.isOutsideMonth));\n });\n\n protected viewMonth = computed(() => {\n const viewMonth = this.viewDate();\n const locale = this.effectiveLocale();\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n return localeData?.date?.monthNames?.[viewMonth.month - 1]\n ?? new Intl.DateTimeFormat(locale, { month: 'long' }).format(new Date(viewMonth.year, viewMonth.month - 1, 1));\n });\n\n protected viewYear = computed(() => this.viewDate().year);\n\n protected weekNumbers = computed(() => {\n const days = this.calendarDays();\n const weeks: number[] = [];\n\n for (let i = 0; i < 6; i++) {\n const firstDayOfWeek = days[i * 7];\n if (firstDayOfWeek) {\n const weekNum =\n firstDayOfWeek.date.weekOfYear ?? coarCalculateIsoWeekNumber(firstDayOfWeek.date);\n weeks.push(weekNum);\n }\n }\n\n return weeks;\n });\n\n constructor() {\n // Keep the view month in sync when a value is provided/changed.\n effect(() => {\n const val = this.value();\n if (!val) return;\n this.viewDate.set(val.toPlainYearMonth());\n\n // Set a sensible default focus when a value arrives.\n if (!this.focusedDate()) {\n this.focusedDate.set(val);\n }\n });\n\n // Default focus when no value is set.\n effect(() => {\n if (this.value()) return;\n if (this.focusedDate()) return;\n this.focusedDate.set(this.today());\n });\n }\n\n previousMonth(): void {\n this.viewDate.update((d) => d.subtract({ months: 1 }));\n }\n\n nextMonth(): void {\n this.viewDate.update((d) => d.add({ months: 1 }));\n }\n\n previousYear(): void {\n this.viewDate.update((d) => d.subtract({ years: 1 }));\n }\n\n nextYear(): void {\n this.viewDate.update((d) => d.add({ years: 1 }));\n }\n\n goToToday(): void {\n this.viewDate.set(this.today().toPlainYearMonth());\n this.focusedDate.set(this.today());\n }\n\n selectDate(date: Temporal.PlainDate): void {\n if (this.isDateDisabled(date)) return;\n\n this.value.set(date);\n this.focusedDate.set(date);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const focused = this.focusedDate();\n if (focused) {\n this.selectDate(focused);\n }\n break;\n }\n case 'ArrowLeft':\n event.preventDefault();\n this.moveFocus(-1, 'day');\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.moveFocus(1, 'day');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-7, 'day');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(7, 'day');\n break;\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(-1, 'year');\n } else {\n this.moveFocus(-1, 'month');\n }\n break;\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(1, 'year');\n } else {\n this.moveFocus(1, 'month');\n }\n break;\n case 'Home':\n event.preventDefault();\n this.goToToday();\n break;\n }\n }\n\n protected getVisibleMarkers(markers: CoarDateMarker[]): CoarDateMarker[] {\n if (markers.length <= this.markerPopoverMaxLines) {\n return markers;\n }\n return markers.slice(0, this.markerPopoverVisibleMarkers);\n }\n\n protected getHiddenMarkerCount(markers: CoarDateMarker[]): number {\n if (markers.length <= this.markerPopoverMaxLines) {\n return 0;\n }\n return Math.max(0, markers.length - this.markerPopoverVisibleMarkers);\n }\n\n private getMarkersForDate(date: Temporal.PlainDate): CoarDateMarker[] {\n const markers = this.markers();\n const matches: CoarDateMarker[] = [];\n\n for (const marker of markers) {\n const start = marker.startDate;\n const end = marker.endDate ?? marker.startDate;\n\n if (\n Temporal.PlainDate.compare(date, start) >= 0 &&\n Temporal.PlainDate.compare(date, end) <= 0\n ) {\n matches.push(marker);\n }\n }\n\n return matches;\n }\n\n private isDateDisabled(date: Temporal.PlainDate): boolean {\n const minDate = this.min();\n const maxDate = this.max();\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) return true;\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) return true;\n\n return false;\n }\n\n private moveFocus(amount: number, unit: 'day' | 'month' | 'year'): void {\n const current = this.focusedDate() ?? this.value() ?? this.today();\n\n let newDate: Temporal.PlainDate;\n switch (unit) {\n case 'day':\n newDate = current.add({ days: amount });\n break;\n case 'month':\n newDate = current.add({ months: amount });\n break;\n case 'year':\n newDate = current.add({ years: amount });\n break;\n }\n\n newDate = coarClampPlainDate(newDate, { min: this.min(), max: this.max() });\n\n this.focusedDate.set(newDate);\n this.viewDate.set(newDate.toPlainYearMonth());\n }\n\n private createCalendarDay(date: Temporal.PlainDate, isOutsideMonth: boolean): CalendarDay {\n const selected = this.value();\n const focused = this.focusedDate();\n\n const dayOfWeek = date.dayOfWeek;\n const markers = this.getMarkersForDate(date);\n\n return {\n date,\n day: date.day,\n isOutsideMonth,\n isToday: Temporal.PlainDate.compare(date, this.today()) === 0,\n isSelected: selected ? Temporal.PlainDate.compare(date, selected) === 0 : false,\n isFocused: focused ? Temporal.PlainDate.compare(date, focused) === 0 : false,\n isDisabled: this.isDateDisabled(date),\n isWeekend: dayOfWeek === 6 || dayOfWeek === 7,\n markers,\n markerCssClass: markers[0]?.cssClass ?? null,\n };\n }\n}\n\ninterface CalendarDay {\n date: Temporal.PlainDate;\n day: number;\n isOutsideMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isFocused: boolean;\n isDisabled: boolean;\n isWeekend: boolean;\n markers: CoarDateMarker[];\n markerCssClass: string | null;\n}\n","<div class=\"coar-mini-calendar\" role=\"application\" (keydown)=\"onKeydown($event)\">\n <div class=\"coar-mini-calendar-header\">\n <button type=\"button\" class=\"coar-mini-calendar-nav\" aria-label=\"Previous year\" (click)=\"previousYear()\">\n <coar-icon name=\"chevrons-left\" source=\"coar-builtin\" size=\"s\" />\n </button>\n <button type=\"button\" class=\"coar-mini-calendar-nav\" aria-label=\"Previous month\" (click)=\"previousMonth()\">\n <coar-icon name=\"chevron-left\" source=\"coar-builtin\" size=\"s\" />\n </button>\n\n <span class=\"coar-mini-calendar-month-year\">\n <span class=\"coar-mini-calendar-month\">{{ viewMonth() }}</span>\n <span class=\"coar-mini-calendar-year\">{{ viewYear() }}</span>\n </span>\n\n <button type=\"button\" class=\"coar-mini-calendar-nav coar-mini-calendar-nav--next\" aria-label=\"Next month\" (click)=\"nextMonth()\">\n <coar-icon name=\"chevron-right\" source=\"coar-builtin\" size=\"s\" />\n </button>\n <button type=\"button\" class=\"coar-mini-calendar-nav coar-mini-calendar-nav--next\" aria-label=\"Next year\" (click)=\"nextYear()\">\n <coar-icon name=\"chevrons-right\" source=\"coar-builtin\" size=\"s\" />\n </button>\n </div>\n\n <div class=\"coar-mini-calendar-weekdays\" [class.coar-mini-calendar-weekdays--with-weeks]=\"showWeekNumbers()\">\n @if (showWeekNumbers()) {\n <span class=\"coar-mini-calendar-week-spacer\"></span>\n }\n @for (day of daysOfWeek(); track day) {\n <span class=\"coar-mini-calendar-weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"coar-mini-calendar-grid\" [class.coar-mini-calendar-grid--with-weeks]=\"showWeekNumbers()\" role=\"grid\">\n @for (day of calendarDays(); track day.date.toString(); let i = $index) {\n @if (showWeekNumbers() && i % 7 === 0) {\n <span class=\"coar-mini-calendar-week-number\">{{ weekNumbers()[i / 7] }}</span>\n }\n\n <coar-popover [disabled]=\"day.isDisabled || day.markers.length === 0\" [openOnClick]=\"true\" [openOnHover]=\"true\" [interactive]=\"false\">\n <button\n coarPopoverTrigger\n type=\"button\"\n class=\"coar-mini-calendar-day\"\n [class.coar-mini-calendar-day--outside]=\"day.isOutsideMonth\"\n [class.coar-mini-calendar-day--today]=\"day.isToday\"\n [class.coar-mini-calendar-day--selected]=\"day.isSelected\"\n [class.coar-mini-calendar-day--focused]=\"day.isFocused\"\n [class.coar-mini-calendar-day--disabled]=\"day.isDisabled\"\n [class.coar-mini-calendar-day--weekend]=\"highlightWeekends() && day.isWeekend\"\n [class.coar-mini-calendar-day--marked]=\"day.markers.length > 0\"\n [class]=\"day.markerCssClass\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.day }}\n </button>\n\n @if (day.markers.length > 0) {\n <div coarPopoverContent class=\"coar-mini-calendar-marker-popover\">\n <div class=\"coar-mini-calendar-marker-popover__list\">\n @for (marker of getVisibleMarkers(day.markers); track marker.description) {\n <div class=\"coar-mini-calendar-marker-popover__item\">\n {{ marker.description }}\n </div>\n }\n\n @if (getHiddenMarkerCount(day.markers) > 0) {\n <div class=\"coar-mini-calendar-marker-popover__more\">+{{ getHiddenMarkerCount(day.markers) }} other events</div>\n }\n </div>\n </div>\n }\n </coar-popover>\n }\n </div>\n\n @if (showTodayButton()) {\n <div class=\"coar-mini-calendar-footer\">\n <button type=\"button\" class=\"coar-mini-calendar-today\" (click)=\"selectDate(today())\">{{ 'common.today' | coarI18n }}</button>\n </div>\n }\n</div>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { Temporal } from '@js-temporal/polyfill';\nimport { of } from 'rxjs';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\nimport { CoarLocalizationService, CoarLocalizationDataStore } from '@cocoar/localization';\n\n/**\n * Month list component for date/time picker navigation.\n *\n * Displays a vertical list of month names with a year stepper at the top.\n * The list height adapts to its container and becomes scrollable if all\n * 12 months don't fit.\n *\n * @example\n * ```html\n * <coar-month-list\n * [(activeMonth)]=\"visibleMonth\"\n * [minYear]=\"1920\"\n * [maxYear]=\"2100\"\n * (monthSelected)=\"onMonthSelected($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-month-list',\n standalone: true,\n imports: [CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-month-list.component.html',\n styleUrl: './coar-month-list.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarMonthListComponent {\n private readonly localizationService = inject(CoarLocalizationService, { optional: true });\n private readonly localizationDataStore = inject(CoarLocalizationDataStore, { optional: true });\n\n /** Current language from localization service (reactive) */\n private readonly currentLanguage = toSignal(\n this.localizationService?.languageState.value$ ?? of(''),\n {\n initialValue: this.localizationService?.languageState.value ?? '',\n }\n );\n\n // ============================================================\n // View References\n // ============================================================\n\n /** Reference to the months container */\n private monthsContainerRef = viewChild<ElementRef<HTMLElement>>('monthsContainer');\n\n /** Reference to the scrollbar directive for programmatic scrolling */\n private scrollbarDirective = viewChild(CoarScrollbarDirective);\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Currently active/visible month (two-way bindable) */\n activeMonth = model<Temporal.PlainYearMonth>(Temporal.Now.plainDateISO().toPlainYearMonth());\n\n /**\n * Locale identifier for month name formatting.\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Minimum year that can be selected.\n * Default: current year - 100\n */\n minYear = input<number>(Temporal.Now.plainDateISO().year - 100);\n\n /**\n * Maximum year that can be selected.\n * Default: current year + 50\n */\n maxYear = input<number>(Temporal.Now.plainDateISO().year + 50);\n\n // ============================================================\n // Outputs\n // ============================================================\n\n /** Emitted when a month is selected from the list */\n monthSelected = output<Temporal.PlainYearMonth>();\n\n /** Emitted when the year changes via stepper */\n yearChanged = output<number>();\n\n // ============================================================\n // Constructor\n // ============================================================\n\n constructor() {\n // Scroll to center the active month initially (with delay for OverlayScrollbars init)\n afterNextRender(() => {\n // OverlayScrollbars defers initialization, so we need a small delay\n setTimeout(() => this.scrollToActiveMonth(), 150);\n });\n\n // Scroll to active month when it changes\n effect(() => {\n // Read the active month to track changes\n this.activeMonth();\n // Scroll to make the active month visible (with small delay for DOM update)\n setTimeout(() => this.scrollToActiveMonth(), 0);\n });\n }\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /** Effective locale for month name formatting */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.currentLanguage() ?? navigator.language;\n });\n\n /** Current year from activeMonth */\n protected currentYear = computed(() => this.activeMonth().year);\n\n /** Current month number from activeMonth (1-12) */\n protected currentMonthNumber = computed(() => this.activeMonth().month);\n\n /** Whether previous year button is disabled */\n protected isPrevYearDisabled = computed(() => this.currentYear() <= this.minYear());\n\n /** Whether next year button is disabled */\n protected isNextYearDisabled = computed(() => this.currentYear() >= this.maxYear());\n\n /** List of month items for display */\n protected monthItems = computed(() => {\n const year = this.currentYear();\n const currentMonth = this.currentMonthNumber();\n const locale = this.effectiveLocale();\n\n const localeData = locale ? this.localizationDataStore?.getLocaleData(locale) : undefined;\n const cachedMonthNames = localeData?.date?.monthNames;\n\n const formatter = cachedMonthNames ? undefined : new Intl.DateTimeFormat(locale, { month: 'long' });\n\n const items: Array<{\n month: number;\n name: string;\n isActive: boolean;\n yearMonth: Temporal.PlainYearMonth;\n }> = [];\n\n for (let m = 1; m <= 12; m++) {\n const name = cachedMonthNames?.[m - 1]\n ?? formatter!.format(new Date(year, m - 1, 1));\n const yearMonth = Temporal.PlainYearMonth.from({ year, month: m });\n\n items.push({\n month: m,\n name,\n isActive: m === currentMonth,\n yearMonth,\n });\n }\n\n return items;\n });\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /** Navigate to previous year */\n previousYear(): void {\n if (this.isPrevYearDisabled()) return;\n\n const current = this.activeMonth();\n const newYear = current.year - 1;\n const newMonth = Temporal.PlainYearMonth.from({\n year: newYear,\n month: current.month,\n });\n\n this.activeMonth.set(newMonth);\n this.yearChanged.emit(newYear);\n }\n\n /** Navigate to next year */\n nextYear(): void {\n if (this.isNextYearDisabled()) return;\n\n const current = this.activeMonth();\n const newYear = current.year + 1;\n const newMonth = Temporal.PlainYearMonth.from({\n year: newYear,\n month: current.month,\n });\n\n this.activeMonth.set(newMonth);\n this.yearChanged.emit(newYear);\n }\n\n /** Select a specific month */\n selectMonth(yearMonth: Temporal.PlainYearMonth): void {\n this.activeMonth.set(yearMonth);\n this.monthSelected.emit(yearMonth);\n }\n\n // ============================================================\n // Private Methods\n // ============================================================\n\n /**\n * Scrolls the month list to make the active month visible.\n * Works with OverlayScrollbars by scrolling its viewport element directly.\n */\n private scrollToActiveMonth(): void {\n // Get the OverlayScrollbars instance and its viewport\n const osInstance = this.scrollbarDirective()?.getInstance();\n const viewport = osInstance?.elements().viewport;\n if (!viewport) return;\n\n // Find the active month button within the viewport's content\n const activeButton = viewport.querySelector('.coar-month-list__month--active') as HTMLElement;\n if (!activeButton) return;\n\n // Calculate scroll position to make the active month visible\n const buttonTop = activeButton.offsetTop;\n const buttonHeight = activeButton.offsetHeight;\n const viewportHeight = viewport.clientHeight;\n const currentScrollTop = viewport.scrollTop;\n\n // Check if button is above the visible area\n if (buttonTop < currentScrollTop) {\n viewport.scrollTop = buttonTop;\n }\n // Check if button is below the visible area\n else if (buttonTop + buttonHeight > currentScrollTop + viewportHeight) {\n viewport.scrollTop = buttonTop + buttonHeight - viewportHeight;\n }\n // Otherwise it's already visible, no scroll needed\n }\n}\n","<div class=\"coar-month-list\">\n <!-- Year Stepper -->\n <div class=\"coar-month-list__year-stepper\">\n <button type=\"button\" class=\"coar-month-list__year-btn\" [disabled]=\"isPrevYearDisabled()\" (click)=\"previousYear()\" aria-label=\"Previous year\">\n <coar-icon name=\"left\" size=\"s\" />\n </button>\n\n <span class=\"coar-month-list__year\">{{ currentYear() }}</span>\n\n <button type=\"button\" class=\"coar-month-list__year-btn\" [disabled]=\"isNextYearDisabled()\" (click)=\"nextYear()\" aria-label=\"Next year\">\n <coar-icon name=\"right\" size=\"s\" />\n </button>\n </div>\n\n <!-- Month List -->\n <div #monthsContainer class=\"coar-month-list__months\" coarScrollbar [overflowX]=\"'hidden'\" [autoHide]=\"'leave'\" role=\"listbox\" aria-label=\"Months\">\n @for (item of monthItems(); track item.month) {\n <button\n type=\"button\"\n class=\"coar-month-list__month\"\n [class.coar-month-list__month--active]=\"item.isActive\"\n role=\"option\"\n [attr.aria-selected]=\"item.isActive\"\n (click)=\"selectMonth(item.yearMonth)\"\n >\n {{ item.name }}\n </button>\n }\n </div>\n</div>\n","/**\n * Shared time formatting configuration.\n *\n * Note: This config is intentionally small so it can be used by multiple UI components\n * (time picker, date-time picker, etc.) without pulling in Angular-only code.\n */\nexport interface TimeFormatConfig {\n /**\n * Whether to use 24-hour format (true) or 12-hour format with AM/PM (false).\n * When set to 'auto', the format is detected from the user's locale.\n */\n readonly use24Hour: boolean | 'auto';\n\n /**\n * Step interval for minute selection.\n * For example, 5 means minutes can only be 0, 5, 10, 15, etc.\n */\n readonly minuteStep: 1 | 5 | 10 | 15;\n}\n\n/**\n * Default time format configuration.\n */\nexport const COAR_DEFAULT_TIME_FORMAT: TimeFormatConfig = {\n use24Hour: 'auto',\n minuteStep: 5,\n};\n","// Date/time pickers\nexport * from './plain-date-picker';\nexport * from './plain-date-time-picker';\nexport * from './zoned-date-time-picker';\nexport * from './time-picker';\n\n// Calendar components\nexport * from './scrollable-calendar';\nexport * from './mini-calendar';\nexport * from './month-list';\n\n// Date utilities (Temporal-based)\nexport * from './_shared/coar-date-format';\nexport * from './_shared/coar-date-helpers';\nexport * from './_shared/coar-date-marker';\nexport * from './_shared/coar-time-format';\nexport * from './_shared/coar-time-helpers';\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarIconComponent, CoarIconSize } from '../icon/coar-icon.component';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost';\nexport type ButtonSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-button',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-button.component.html',\n styleUrl: './coar-button.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-button-host]': 'true',\n '[class.coar-button--full-width]': 'fullWidth()',\n },\n})\nexport class CoarButtonComponent {\n /** Button visual variant */\n variant = input<ButtonVariant>('primary');\n\n /** Button size */\n size = input<ButtonSize>('m');\n\n /** Whether the button is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the button is in loading state */\n loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Button type attribute */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n /** Icon to display before the label */\n iconStart = input<string | undefined>(undefined);\n\n /** Icon to display after the label */\n iconEnd = input<string | undefined>(undefined);\n\n /** Whether the button should take full width */\n fullWidth = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Optional aria-label applied to the underlying <button> element */\n ariaLabel = input<string>('');\n\n /** Emitted when the button is clicked (not emitted when disabled or loading) */\n clicked = output<MouseEvent>();\n\n /** Maps button size to appropriate icon size */\n protected readonly iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<ButtonSize, CoarIconSize> = {\n xs: 'xs',\n s: 's',\n m: 'm',\n l: 'l',\n };\n return sizeMap[this.size()];\n });\n\n protected onClick(event: MouseEvent): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n}\n","<button\n class=\"coar-button\"\n [class.coar-button--primary]=\"variant() === 'primary'\"\n [class.coar-button--secondary]=\"variant() === 'secondary'\"\n [class.coar-button--tertiary]=\"variant() === 'tertiary'\"\n [class.coar-button--danger]=\"variant() === 'danger'\"\n [class.coar-button--ghost]=\"variant() === 'ghost'\"\n [class.coar-button--xs]=\"size() === 'xs'\"\n [class.coar-button--s]=\"size() === 's'\"\n [class.coar-button--m]=\"size() === 'm'\"\n [class.coar-button--l]=\"size() === 'l'\"\n [class.coar-button--loading]=\"loading()\"\n [class.coar-button--loading-overlay]=\"loading() && !iconStart() && !iconEnd()\"\n [class.coar-button--disabled]=\"disabled()\"\n [class.coar-button--full-width]=\"fullWidth()\"\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-disabled]=\"disabled() || loading() ? 'true' : null\"\n [attr.aria-busy]=\"loading()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onClick($event)\"\n>\n <!-- Loading Spinner: Centered overlay when no icons, inline replacement when icons exist -->\n @if (loading() && !iconStart() && !iconEnd()) {\n <!-- Overlay spinner (centered, content hidden via opacity) -->\n <span class=\"coar-button__spinner coar-button__spinner--overlay\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n }\n\n <!-- Icon Start: Show spinner instead when loading -->\n @if (loading() && iconStart()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconStart()) {\n <span class=\"coar-button__icon coar-button__icon--start\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconStart()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <!-- Content -->\n <span class=\"coar-button__content\">\n <ng-content />\n </span>\n\n <!-- Icon End: Show spinner instead when loading (only if no iconStart) -->\n @if (loading() && !iconStart() && iconEnd()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" source=\"coar-builtin\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconEnd()) {\n <span class=\"coar-button__icon coar-button__icon--end\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconEnd()\" [size]=\"iconSize()\" />\n </span>\n }\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n booleanAttribute,\n} from '@angular/core';\n\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\nexport type BadgeSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'auto';\n\n@Component({\n selector: 'coar-badge',\n standalone: true,\n imports: [],\n templateUrl: './coar-badge.component.html',\n styleUrl: './coar-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-badge-host]': 'true',\n '[class.coar-badge-host--auto]': 'size() === \"auto\"',\n '[class.coar-badge-host--pulse]': 'pulse()',\n },\n})\nexport class CoarBadgeComponent {\n /** Content to display in the badge (number, text, or icon) */\n content = input<string | number>('');\n\n /** Badge visual variant */\n variant = input<BadgeVariant>('primary');\n\n /** Badge size */\n size = input<BadgeSize>('m');\n\n /** Whether the badge should pulse/animate (for notifications) */\n pulse = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show as a dot without content */\n dot = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number to display (shows \"99+\" if exceeded) */\n max = input<number | null>(null);\n\n /** Whether to show a border around the badge */\n bordered = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Computed display value */\n protected displayValue = computed(() => {\n if (this.dot()) {\n return '';\n }\n\n const content = this.content();\n const max = this.max();\n\n if (typeof content === 'number' && max !== null && content > max) {\n return `${max}+`;\n }\n\n return String(content);\n });\n}\n","<span\n class=\"coar-badge\"\n [class.coar-badge--primary]=\"variant() === 'primary'\"\n [class.coar-badge--secondary]=\"variant() === 'secondary'\"\n [class.coar-badge--success]=\"variant() === 'success'\"\n [class.coar-badge--warning]=\"variant() === 'warning'\"\n [class.coar-badge--error]=\"variant() === 'error'\"\n [class.coar-badge--info]=\"variant() === 'info'\"\n [class.coar-badge--xs]=\"size() === 'xs'\"\n [class.coar-badge--s]=\"size() === 's'\"\n [class.coar-badge--m]=\"size() === 'm'\"\n [class.coar-badge--l]=\"size() === 'l'\"\n [class.coar-badge--xl]=\"size() === 'xl'\"\n [class.coar-badge--auto]=\"size() === 'auto'\"\n [class.coar-badge--dot]=\"dot()\"\n [class.coar-badge--bordered]=\"bordered()\"\n role=\"status\"\n [attr.aria-label]=\"displayValue() || 'status indicator'\"\n>\n @if (!dot() && displayValue()) {\n <span class=\"coar-badge__content\">{{ displayValue() }}</span>\n }\n</span>\n","import { ChangeDetectionStrategy, Component, input, output, booleanAttribute } from '@angular/core';\n\n/**\n * Tag semantic variants - mirrors CardVariant for visual consistency.\n * Tags are the \"little brother\" of Cards with the same variant system.\n */\nexport type TagVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\n\n/**\n * Tag size variants.\n * - s: Compact tags for dense UIs (10px font)\n * - m: Default size (12px font)\n * - l: Larger tags for emphasis (14px font)\n */\nexport type TagSize = 's' | 'm' | 'l';\n\n/**\n * CoarTagComponent\n *\n * A compact label component for categorizing, labeling, or marking content.\n * Shares the same variant system as CoarCard for visual consistency.\n *\n * Unlike badges (pill-shaped, for counts/notifications), tags use\n * slight rounding and support interactive features like closing.\n *\n * @example\n * ```html\n * <coar-tag>Default</coar-tag>\n * <coar-tag variant=\"success\">Published</coar-tag>\n * <coar-tag variant=\"warning\" closable (closed)=\"onRemove()\">Draft</coar-tag>\n * ```\n */\n@Component({\n selector: 'coar-tag',\n standalone: true,\n templateUrl: './coar-tag.component.html',\n styleUrl: './coar-tag.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-tag',\n // Size\n '[class.coar-tag--s]': 'size() === \"s\"',\n '[class.coar-tag--m]': 'size() === \"m\"',\n '[class.coar-tag--l]': 'size() === \"l\"',\n // Elevated (box-shadow for depth)\n '[class.coar-tag--elevated]': 'elevated()',\n // Borderless (no border)\n '[class.coar-tag--borderless]': 'borderless()',\n // Variants\n '[class.coar-tag--neutral]': 'variant() === \"neutral\"',\n '[class.coar-tag--success]': 'variant() === \"success\"',\n '[class.coar-tag--warning]': 'variant() === \"warning\"',\n '[class.coar-tag--error]': 'variant() === \"error\"',\n '[class.coar-tag--info]': 'variant() === \"info\"',\n '[class.coar-tag--accent]': 'variant() === \"accent\"',\n },\n})\nexport class CoarTagComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-tag elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the tag, leaving only background color.\n * By default (false), tags have a visible border matching their variant.\n * Use as boolean attribute: `<coar-tag borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Tag semantic variant - matches Card variants */\n variant = input<TagVariant>('neutral');\n\n /** Tag size */\n size = input<TagSize>('m');\n\n /** Whether the tag can be closed/removed */\n closable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Emitted when the close button is clicked */\n closed = output<void>();\n\n /** Handle close button click */\n protected onClose(event: MouseEvent): void {\n event.stopPropagation();\n this.closed.emit();\n }\n}\n","<span class=\"coar-tag__content\">\n <ng-content />\n</span>\n@if (closable()) {\n<button type=\"button\" class=\"coar-tag__close\" aria-label=\"Remove tag\" (click)=\"onClose($event)\">\n <svg class=\"coar-tag__close-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n</button>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type CardVariant = 'neutral' | 'outlined' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type CardPadding = 'none' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-card',\n standalone: true,\n imports: [],\n templateUrl: './coar-card.component.html',\n styleUrls: ['./coar-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-card]': 'true',\n // Elevated (box-shadow for depth)\n '[class.coar-card--elevated]': 'elevated()',\n // Borderless (no border) - default is false, so cards have borders by default\n '[class.coar-card--borderless]': 'borderless()',\n // Variants\n '[class.coar-card--neutral]': 'variant() === \"neutral\"',\n '[class.coar-card--outlined]': 'variant() === \"outlined\"',\n '[class.coar-card--success]': 'variant() === \"success\"',\n '[class.coar-card--warning]': 'variant() === \"warning\"',\n '[class.coar-card--error]': 'variant() === \"error\"',\n '[class.coar-card--info]': 'variant() === \"info\"',\n '[class.coar-card--accent]': 'variant() === \"accent\"',\n // Padding\n '[class.coar-card--padding-none]': 'padding() === \"none\"',\n '[class.coar-card--padding-s]': 'padding() === \"s\"',\n '[class.coar-card--padding-m]': 'padding() === \"m\"',\n '[class.coar-card--padding-l]': 'padding() === \"l\"',\n },\n})\nexport class CoarCardComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-card elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the card, leaving only background color.\n * By default (false), cards have a visible border matching their variant.\n * Use as boolean attribute: `<coar-card borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Card semantic variant */\n variant = input<CardVariant>('neutral');\n\n /** Card padding size */\n padding = input<CardPadding>('m');\n}\n","<ng-content select=\"[coar-card-header]\" />\n<ng-content />\n<ng-content select=\"[coar-card-footer]\" />\n<ng-content select=\"[coar-card-inset]\" />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type NoteVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type NotePadding = 's' | 'm' | 'l';\n\n/**\n * A callout/note component for highlighting information.\n *\n * Features a colored left border and subtle background.\n * Use for tips, warnings, important information, or behavioral notes.\n *\n * @example\n * ```html\n * <coar-note variant=\"info\">\n * <strong>Note:</strong> This is important information.\n * </coar-note>\n *\n * <coar-note variant=\"warning\" padding=\"l\">\n * <h4>Warning</h4>\n * <p>Be careful with this action.</p>\n * </coar-note>\n * ```\n */\n@Component({\n selector: 'coar-note',\n standalone: true,\n imports: [],\n templateUrl: './coar-note.component.html',\n styleUrls: ['./coar-note.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-note]': 'true',\n // Variants\n '[class.coar-note--neutral]': 'variant() === \"neutral\"',\n '[class.coar-note--success]': 'variant() === \"success\"',\n '[class.coar-note--warning]': 'variant() === \"warning\"',\n '[class.coar-note--error]': 'variant() === \"error\"',\n '[class.coar-note--info]': 'variant() === \"info\"',\n '[class.coar-note--accent]': 'variant() === \"accent\"',\n // Padding\n '[class.coar-note--padding-s]': 'padding() === \"s\"',\n '[class.coar-note--padding-m]': 'padding() === \"m\"',\n '[class.coar-note--padding-l]': 'padding() === \"l\"',\n },\n})\nexport class CoarNoteComponent {\n /**\n * Note semantic variant.\n * Determines the left border color and background tint.\n * @default 'neutral'\n */\n variant = input<NoteVariant>('neutral');\n\n /**\n * Note padding size.\n * @default 'm'\n */\n padding = input<NotePadding>('m');\n}\n","<ng-content />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Content alignment options for the divider.\n * - 'center': Content is centered with lines on both sides (default)\n * - 'left': Content is aligned left with line on the right\n * - 'right': Content is aligned right with line on the left\n */\nexport type DividerAlign = 'left' | 'center' | 'right';\n\n/**\n * Visual style variants for the divider line.\n * - 'subtle': Light, unobtrusive divider (default)\n * - 'strong': More prominent divider\n */\nexport type DividerVariant = 'subtle' | 'strong';\n\n/**\n * A flexible divider component for visually separating content sections.\n *\n * Supports optional content (text, icons, etc.) via ng-content that can be\n * aligned left, center, or right. When content is present, the divider line\n * splits around it.\n *\n * @example\n * <!-- Simple divider -->\n * <coar-divider />\n *\n * @example\n * <!-- Divider with centered text -->\n * <coar-divider>OR</coar-divider>\n *\n * @example\n * <!-- Divider with left-aligned content -->\n * <coar-divider align=\"left\">Section Title</coar-divider>\n */\n@Component({\n selector: 'coar-divider',\n standalone: true,\n templateUrl: './coar-divider.component.html',\n styleUrl: './coar-divider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': '\"horizontal\"',\n '[class.coar-divider]': 'true',\n '[class.coar-divider--subtle]': 'variant() === \"subtle\"',\n '[class.coar-divider--strong]': 'variant() === \"strong\"',\n '[class.coar-divider--left]': 'align() === \"left\"',\n '[class.coar-divider--center]': 'align() === \"center\"',\n '[class.coar-divider--right]': 'align() === \"right\"',\n },\n})\nexport class CoarDividerComponent {\n /** Content alignment when ng-content is provided */\n align = input<DividerAlign>('center');\n\n /** Visual style variant */\n variant = input<DividerVariant>('subtle');\n\n /** Width of the divider as a percentage (0-100) */\n width = input<number>(90);\n\n /** Spacing above the divider in pixels */\n spacingTop = input<number>(0);\n\n /** Spacing below the divider in pixels */\n spacingBottom = input<number>(0);\n}\n","<div class=\"coar-divider__container\" [style.width.%]=\"width()\" [style.margin-top.px]=\"spacingTop()\" [style.margin-bottom.px]=\"spacingBottom()\">\n <div class=\"coar-divider__line coar-divider__line--before\"></div>\n <div class=\"coar-divider__content\">\n <ng-content />\n </div>\n <div class=\"coar-divider__line coar-divider__line--after\"></div>\n</div>\n","import { Component, input, ChangeDetectionStrategy, booleanAttribute } from '@angular/core';\n\nexport type CoarTableVariant = 'default' | 'plain' | 'bordered';\n\n/**\n * A simple table component that provides consistent styling.\n *\n * Default styling uses alternating row colors (zebra stripes) for readability.\n * Use 'plain' variant for no stripes, or 'bordered' for full cell borders.\n *\n * Usage:\n * ```html\n * <coar-table>\n * <thead>\n * <tr>\n * <th>Property</th>\n * <th>Type</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td><code>name</code></td>\n * <td><code>string</code></td>\n * </tr>\n * </tbody>\n * </coar-table>\n * ```\n */\n@Component({\n selector: 'coar-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"coar-table-wrapper\">\n <table class=\"coar-table\">\n <ng-content />\n </table>\n </div>\n `,\n styleUrl: './coar-table.component.css',\n host: {\n '[class.coar-table--plain]': 'variant() === \"plain\"',\n '[class.coar-table--bordered]': 'variant() === \"bordered\"',\n '[class.coar-table--compact]': 'compact()',\n '[class.coar-table--hover]': 'hover()',\n },\n})\nexport class CoarTableComponent {\n /** Visual variant of the table: default (zebra stripes), plain (no stripes), bordered (cell borders) */\n variant = input<CoarTableVariant>('default');\n\n /** Whether to use compact padding */\n compact = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether rows should highlight on hover */\n hover = input<boolean, unknown>(true, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Available sizes for the label component.\n * Matches the component size system used by buttons and inputs.\n */\nexport type CoarLabelSize = 'xs' | 's' | 'm' | 'l';\n\n/**\n * Standalone label component for consistent form labeling across the design system.\n *\n * @example\n * ```html\n * <coar-label size=\"s\" [required]=\"true\">Email Address</coar-label>\n * <coar-text-input size=\"s\" placeholder=\"your@email.com\" />\n * ```\n */\n@Component({\n selector: 'coar-label',\n standalone: true,\n template: `\n @if (text()) {\n {{ text() }}\n } @else {\n <ng-content></ng-content>\n } @if (required()) {\n <span class=\"coar-label-required\" aria-hidden=\"true\">*</span>\n }\n `,\n styleUrl: './coar-label.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-label--xs]': 'size() === \"xs\"',\n '[class.coar-label--s]': 'size() === \"s\"',\n '[class.coar-label--m]': 'size() === \"m\"',\n '[class.coar-label--l]': 'size() === \"l\"',\n '[attr.for]': 'for() ?? null',\n },\n})\nexport class CoarLabelComponent {\n /**\n * Size of the label. Should match the size of the associated input/form element.\n * @default 'm'\n */\n readonly size = input<CoarLabelSize>('m');\n\n /**\n * Whether to show a required indicator (*) after the label text.\n * @default false\n */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The ID of the form element this label is associated with.\n * Sets the 'for' attribute for accessibility.\n */\n readonly for = input<string | undefined>(undefined);\n\n readonly text = input<string>('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n booleanAttribute,\n} from '@angular/core';\n\nexport type AvatarSize = 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';\nexport type AvatarShape = 'circle' | 'square';\n\n/**\n * Avatar component for displaying user profile images with fallback to initials.\n *\n * @example\n * ```html\n * <!-- With image -->\n * <coar-avatar [src]=\"user.avatarUrl\" [name]=\"user.fullName\" />\n *\n * <!-- Initials fallback (no image) -->\n * <coar-avatar [name]=\"user.fullName\" />\n *\n * <!-- With status indicator -->\n * <coar-avatar [name]=\"user.fullName\">\n * <coar-badge dot variant=\"success\" />\n * </coar-avatar>\n * ```\n */\n@Component({\n selector: 'coar-avatar',\n standalone: true,\n imports: [],\n templateUrl: './coar-avatar.component.html',\n styleUrl: './coar-avatar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-avatar--xs]': 'size() === \"xs\"',\n '[class.coar-avatar--s]': 'size() === \"s\"',\n '[class.coar-avatar--m]': 'size() === \"m\"',\n '[class.coar-avatar--l]': 'size() === \"l\"',\n '[class.coar-avatar--xl]': 'size() === \"xl\"',\n '[class.coar-avatar--xxl]': 'size() === \"xxl\"',\n '[class.coar-avatar--square]': 'shape() === \"square\"',\n '[class.coar-avatar--clickable]': 'clickable()',\n '[attr.role]': 'clickable() ? \"button\" : null',\n '[attr.tabindex]': 'clickable() ? 0 : null',\n },\n})\nexport class CoarAvatarComponent {\n /** Image URL for the avatar */\n src = input<string>('');\n\n /** User's full name (used for initials fallback and alt text) */\n name = input<string>('');\n\n /** Avatar size */\n size = input<AvatarSize>('m');\n\n /** Avatar shape */\n shape = input<AvatarShape>('circle');\n\n /** Whether the avatar is interactive (clickable) */\n clickable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Custom initials override (otherwise computed from name) */\n initials = input<string>('');\n\n /** Background color for initials (auto-generated from name if not set) */\n bgColor = input<string>('');\n\n /** Whether the image failed to load */\n protected imageError = signal(false);\n\n /** Show initials when no image or image failed */\n protected showInitials = computed(() => {\n return !this.src() || this.imageError();\n });\n\n /** Computed initials from name (max 3 characters) */\n protected displayInitials = computed(() => {\n const customInitials = this.initials();\n if (customInitials) return customInitials.slice(0, 3).toUpperCase();\n\n const name = this.name().trim();\n if (!name) return '?';\n\n // Simply take first 3 characters\n return name.slice(0, 3).toUpperCase();\n });\n\n /** Generate consistent background color from name */\n protected computedBgColor = computed(() => {\n const customBg = this.bgColor();\n if (customBg) return customBg;\n\n const name = this.name();\n if (!name) return 'var(--coar-background-neutral-tertiary)';\n\n // Generate a consistent hue from the name\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const hue = Math.abs(hash % 360);\n return `hsl(${hue}, 45%, 65%)`;\n });\n\n /** Handle image load error */\n protected onImageError(): void {\n this.imageError.set(true);\n }\n\n /** Handle image load success */\n protected onImageLoad(): void {\n this.imageError.set(false);\n }\n}\n","<div class=\"coar-avatar\">\n @if (showInitials()) {\n <span class=\"coar-avatar__initials\" [style.background-color]=\"computedBgColor()\" [attr.aria-label]=\"name() || 'Avatar'\">\n {{ displayInitials() }}\n </span>\n } @else {\n <img class=\"coar-avatar__image\" [src]=\"src()\" [alt]=\"name() || 'Avatar'\" (error)=\"onImageError()\" (load)=\"onImageLoad()\" />\n }\n\n <!-- Status indicator slot (for badge) -->\n <div class=\"coar-avatar__status\">\n <ng-content />\n </div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe that extracts initials from a name string.\n *\n * Takes the first character of each word and concatenates them.\n * Useful with CoarAvatarComponent to display initials instead of raw text.\n *\n * @example\n * ```html\n * <!-- Single name: \"A\" -->\n * {{ 'Alice' | coarInitials }}\n *\n * <!-- Two names: \"AJ\" -->\n * {{ 'Alice Johnson' | coarInitials }}\n *\n * <!-- Three names: \"AJD\" -->\n * {{ 'Alice Jane Doe' | coarInitials }}\n *\n * <!-- With avatar -->\n * <coar-avatar [name]=\"'Alice Johnson' | coarInitials\" />\n * ```\n */\n@Pipe({\n name: 'coarInitials',\n standalone: true,\n})\nexport class CoarInitialsPipe implements PipeTransform {\n /**\n * Extract initials from a name.\n * @param value - The name string to extract initials from\n * @param maxLength - Maximum number of initials to return (default: 3)\n * @returns Uppercase initials string\n */\n transform(value: string | null | undefined, maxLength = 3): string {\n if (!value) return '';\n\n const parts = value.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '';\n\n const initials = parts\n .map((part) => part[0])\n .slice(0, maxLength)\n .join('');\n\n return initials.toUpperCase();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n afterNextRender,\n computed,\n input,\n signal,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarButtonComponent } from '../button/coar-button.component';\nimport Prism from 'prismjs';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-scss';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-markup';\n\nexport type CodeBlockVariant = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\n\n@Component({\n selector: 'coar-code-block',\n standalone: true,\n imports: [CoarButtonComponent],\n templateUrl: './coar-code-block.component.html',\n styleUrl: './coar-code-block.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-code-block--elevated]': 'elevated()',\n '[class.coar-code-block--neutral]': 'variant() === \"neutral\"',\n '[class.coar-code-block--success]': 'variant() === \"success\"',\n '[class.coar-code-block--warning]': 'variant() === \"warning\"',\n '[class.coar-code-block--error]': 'variant() === \"error\"',\n '[class.coar-code-block--info]': 'variant() === \"info\"',\n '[class.coar-code-block--accent]': 'variant() === \"accent\"',\n },\n})\nexport class CoarCodeBlockComponent {\n private readonly injector = inject(Injector);\n /** The code to display */\n code = input.required<string>();\n\n /** Language for syntax highlighting */\n language = input<string>('html');\n\n /** Title/label for the code block */\n title = input<string>('');\n\n /** Whether the code block can be collapsed */\n collapsible = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether the code block starts collapsed */\n collapsed = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show the copy button */\n showCopy = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to hide the border and border-radius */\n borderless = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Adds a box-shadow for elevation/depth */\n elevated = input(false, { transform: booleanAttribute });\n\n /** Whether to show line numbers */\n showLineNumbers = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Semantic variant for the header area */\n variant = input<CodeBlockVariant>('neutral');\n\n /** Maximum height before scrolling (0 = no limit) */\n maxHeight = input<number>(0);\n\n /** Internal collapsed state */\n protected isCollapsed = signal(false);\n\n /** Copy feedback state */\n protected copyFeedback = signal<'idle' | 'copied' | 'error'>('idle');\n\n /** Highlighted code HTML */\n protected highlightedCode = computed(() => {\n const code = this.code();\n const lang = this.mapLanguage(this.language());\n\n const grammar = Prism.languages[lang];\n if (grammar) {\n return Prism.highlight(code, grammar, lang);\n }\n return this.escapeHtml(code);\n });\n\n /** Highlighted code split by line for optional line-number rendering */\n protected highlightedLines = computed(() => this.highlightedCode().split('\\n'));\n\n constructor() {\n // Signal inputs can be bound after construction; apply the initial collapsed state once\n // the component has been rendered.\n afterNextRender(\n () => {\n this.isCollapsed.set(this.collapsed());\n },\n { injector: this.injector }\n );\n }\n\n /** Map common language aliases to Prism language names */\n private mapLanguage(lang: string): string {\n const langMap: Record<string, string> = {\n html: 'markup',\n xml: 'markup',\n svg: 'markup',\n ts: 'typescript',\n js: 'javascript',\n sh: 'bash',\n shell: 'bash',\n };\n return langMap[lang.toLowerCase()] || lang.toLowerCase();\n }\n\n /** Escape HTML for plain text fallback */\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n /** Toggle collapsed state */\n toggleCollapsed(): void {\n if (this.collapsible()) {\n this.isCollapsed.set(!this.isCollapsed());\n }\n }\n\n /** Copy code to clipboard */\n async copyCode(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.code());\n this.copyFeedback.set('copied');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n } catch {\n this.copyFeedback.set('error');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n }\n }\n\n /** Get lines for line numbers */\n get lines(): number[] {\n return this.code()\n .split('\\n')\n .map((_, i) => i + 1);\n }\n}\n","<div class=\"coar-code-block\" [class.collapsed]=\"isCollapsed()\" [class.borderless]=\"borderless()\">\n <!-- Header -->\n <div class=\"coar-code-header\">\n <div class=\"coar-code-header-left\">\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"coar-code-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n aria-label=\"Toggle code visibility\"\n >\n <svg class=\"coar-code-chevron\" [class.rotated]=\"!isCollapsed()\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 4L10 8L6 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n } @if (title()) {\n <span class=\"coar-code-title\">{{ title() }}</span>\n } @else {\n <span class=\"coar-code-language\">{{ language() }}</span>\n }\n </div>\n\n <div class=\"coar-code-header-right\">\n @if (showCopy()) {\n <coar-button\n size=\"xs\"\n variant=\"secondary\"\n [iconStart]=\"copyFeedback() === 'copied' ? 'check' : 'copy'\"\n (clicked)=\"copyCode()\"\n [ariaLabel]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n [attr.aria-label]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n >\n {{ copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy' }}\n </coar-button>\n }\n </div>\n </div>\n\n <!-- Code Content -->\n @if (!isCollapsed()) {\n <div class=\"coar-code-content\" [style.max-height]=\"maxHeight() ? maxHeight() + 'px' : null\">\n @if (showLineNumbers()) {\n <pre class=\"coar-code-pre\" aria-label=\"Code\">\n <div class=\"coar-code-lines-grid\">\n @for (line of highlightedLines(); track $index) {\n <div class=\"coar-code-line\">\n <span class=\"coar-code-line-number\">{{ $index + 1 }}</span>\n <span class=\"coar-code-line-content\" [innerHTML]=\"line || '\\u200b'\"></span>\n </div>\n }\n </div>\n </pre>\n } @else {\n <pre class=\"coar-code-pre\"><code class=\"coar-code\" [innerHTML]=\"highlightedCode()\"></code></pre>\n }\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n booleanAttribute,\n} from '@angular/core';\n\nexport type CoarProgressBarVariant = 'accent' | 'success' | 'warning' | 'error';\nexport type CoarProgressBarSize = 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-progress-bar',\n standalone: true,\n imports: [],\n templateUrl: './coar-progress-bar.component.html',\n styleUrl: './coar-progress-bar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'progressbar',\n '[class.coar-progress-bar--s]': 'size() === \"s\"',\n '[class.coar-progress-bar--m]': 'size() === \"m\"',\n '[class.coar-progress-bar--l]': 'size() === \"l\"',\n '[class.coar-progress-bar--accent]': 'variant() === \"accent\"',\n '[class.coar-progress-bar--success]': 'variant() === \"success\"',\n '[class.coar-progress-bar--warning]': 'variant() === \"warning\"',\n '[class.coar-progress-bar--error]': 'variant() === \"error\"',\n '[class.coar-progress-bar--indeterminate]': 'indeterminate()',\n '[attr.aria-valuenow]': 'indeterminate() ? null : percentage()',\n '[attr.aria-valuemin]': '\"0\"',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-label]': 'label() || null',\n },\n})\nexport class CoarProgressBarComponent {\n /** Current progress value (0 to max) */\n value = input<number>(0);\n\n /** Maximum progress value */\n max = input<number>(100);\n\n /** Visual variant */\n variant = input<CoarProgressBarVariant>('accent');\n\n /** Bar height size */\n size = input<CoarProgressBarSize>('m');\n\n /** Whether to show an indeterminate animation */\n indeterminate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Accessible label for the progress bar */\n label = input<string>('');\n\n /** Whether to display the percentage text */\n showValue = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Computed percentage clamped to 0-100 */\n protected percentage = computed(() => {\n const max = this.max();\n if (max <= 0) return 0;\n return Math.round(Math.min(100, Math.max(0, (this.value() / max) * 100)));\n });\n}\n","<div class=\"coar-progress-bar-container\">\n <div\n class=\"coar-progress-bar-fill\"\n [style.width.%]=\"indeterminate() ? 100 : percentage()\"\n ></div>\n</div>\n@if (showValue() && !indeterminate()) {\n <span class=\"coar-progress-bar-value\">{{ percentage() }}%</span>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\nexport type CoarSpinnerSize = 'xs' | 's' | 'm' | 'l';\n\n@Component({\n selector: 'coar-spinner',\n standalone: true,\n imports: [],\n templateUrl: './coar-spinner.component.html',\n styleUrl: './coar-spinner.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'status',\n '[class.coar-spinner--xs]': 'size() === \"xs\"',\n '[class.coar-spinner--s]': 'size() === \"s\"',\n '[class.coar-spinner--m]': 'size() === \"m\"',\n '[class.coar-spinner--l]': 'size() === \"l\"',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class CoarSpinnerComponent {\n /** Spinner size */\n size = input<CoarSpinnerSize>('m');\n\n /** Accessible label */\n label = input<string>('Loading');\n}\n","<svg\n class=\"coar-spinner-svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <!-- Background arc -->\n <circle\n class=\"coar-spinner-bg\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke-width=\"3\"\n />\n <!-- Spinning arc -->\n <circle\n class=\"coar-spinner-arc\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n</svg>\n","// Display/presentation components\nexport * from './button';\nexport * from './badge';\nexport * from './tag';\nexport * from './card';\nexport * from './note';\nexport * from './divider';\nexport * from './table';\nexport * from './label';\nexport * from './icon';\nexport * from './avatar';\nexport * from './code-block';\nexport * from './scrollbar';\nexport * from './progress-bar';\nexport * from './spinner';\n// Link is CSS-only (no Angular component) — import via @import '@cocoar/ui/styles/link/coar-link.css'\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n TemplateRef,\n Type,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Loading strategy for tab content:\n * - 'lazy': Content is only rendered when tab is active (default)\n * - 'eager': Content is always rendered, hidden when inactive\n */\nexport type TabLoadingStrategy = 'eager' | 'lazy';\n\n/**\n * Content type that can be passed to a tab.\n * Either a TemplateRef (from ng-template) or a Component class.\n */\nexport type TabContent = TemplateRef<unknown> | Type<unknown>;\n\n/**\n * Individual tab definition for use within CoarTabGroup.\n *\n * The tab label is provided as content projected into the component.\n * This allows simple text, icons, badges, or any custom HTML.\n *\n * @example Simple text label\n * ```html\n * <coar-tab id=\"home\" [content]=\"homeTemplate\">Home</coar-tab>\n * ```\n *\n * @example With icon\n * ```html\n * <coar-tab id=\"settings\" [content]=\"SettingsComponent\">⚙️ Settings</coar-tab>\n * ```\n *\n * @example Rich label with badge\n * ```html\n * <coar-tab id=\"messages\" [content]=\"messagesTemplate\">\n * Messages <span class=\"badge\">5</span>\n * </coar-tab>\n * ```\n */\n@Component({\n selector: 'coar-tab',\n standalone: true,\n template: `<ng-template #labelContent><ng-content /></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabComponent {\n /** Unique identifier for the tab */\n id = input.required<string>();\n\n /** Whether the tab is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The content to display in the tab panel.\n * Can be either a TemplateRef (from ng-template) or a Component class.\n */\n content = input.required<TabContent>();\n\n /**\n * Inputs to pass when content is a Component.\n * Ignored when content is a TemplateRef.\n */\n contentInputs = input<Record<string, unknown>>({});\n\n /**\n * Loading strategy for the tab content.\n * - 'lazy' (default): Content is only rendered when tab becomes active\n * - 'eager': Content is always rendered, just hidden when inactive\n */\n loadingStrategy = input<TabLoadingStrategy>('lazy');\n\n /** Template reference for the projected label content */\n labelTemplate = viewChild.required<TemplateRef<unknown>>('labelContent');\n\n /**\n * Whether the content is a Component (vs a TemplateRef)\n */\n get isComponent(): boolean {\n const c = this.content();\n return typeof c === 'function';\n }\n\n /**\n * Get content as TemplateRef (returns null if it's a component)\n */\n get templateContent(): TemplateRef<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? null : c;\n }\n\n /**\n * Get content as Component type (returns null if it's a template)\n */\n get componentContent(): Type<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? c : null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n input,\n output,\n signal,\n effect,\n AfterContentInit,\n} from '@angular/core';\nimport { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { CoarTabComponent } from './coar-tab.component';\n\n@Component({\n selector: 'coar-tab-group',\n standalone: true,\n imports: [CommonModule, NgComponentOutlet],\n templateUrl: './coar-tab-group.component.html',\n styleUrl: './coar-tab-group.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabGroupComponent implements AfterContentInit {\n /** The currently active tab id */\n activeTab = input<string>('');\n\n /** Emits when the active tab changes */\n activeTabChange = output<string>();\n\n /** All tab components projected into this group */\n tabs = contentChildren(CoarTabComponent);\n\n /** Internal active tab state */\n protected internalActiveTab = signal<string>('');\n\n constructor() {\n effect(() => {\n const externalTab = this.activeTab();\n if (externalTab) {\n this.internalActiveTab.set(externalTab);\n }\n });\n }\n\n ngAfterContentInit(): void {\n if (!this.internalActiveTab() && this.tabs().length > 0) {\n const firstTabId = this.tabs()[0].id();\n this.internalActiveTab.set(firstTabId);\n }\n }\n\n /** Check if a tab is currently active */\n isActive(tabId: string): boolean {\n const activeId = this.internalActiveTab();\n if (activeId) {\n return activeId === tabId;\n }\n return this.tabs()[0]?.id() === tabId;\n }\n\n /**\n * Determines whether the content of a tab should be rendered.\n * - For 'eager' strategy: always render (content stays in DOM)\n * - For 'lazy' strategy: only render when active\n */\n shouldRenderContent(tab: CoarTabComponent): boolean {\n if (tab.loadingStrategy() === 'eager') {\n return true;\n }\n // Default is lazy: only render when active\n return this.isActive(tab.id());\n }\n\n /** Select a tab by its id */\n selectTab(tabId: string): void {\n const tab = this.tabs().find((t) => t.id() === tabId);\n if (tab && !tab.disabled()) {\n this.internalActiveTab.set(tabId);\n this.activeTabChange.emit(tabId);\n }\n }\n\n /** Handle keyboard navigation */\n onKeydown(event: KeyboardEvent, currentTabId: string): void {\n const tabsArray = this.tabs().filter((t) => !t.disabled());\n const currentIndex = tabsArray.findIndex((t) => t.id() === currentTabId);\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabsArray.length - 1;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newIndex = currentIndex < tabsArray.length - 1 ? currentIndex + 1 : 0;\n event.preventDefault();\n break;\n case 'Home':\n newIndex = 0;\n event.preventDefault();\n break;\n case 'End':\n newIndex = tabsArray.length - 1;\n event.preventDefault();\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n const newTab = tabsArray[newIndex];\n this.selectTab(newTab.id());\n const tabButton = document.querySelector(`[data-tab-id=\"${newTab.id()}\"]`) as HTMLElement;\n tabButton?.focus();\n }\n }\n}\n","<div class=\"coar-tab-group\">\n <div class=\"coar-tab-list\" role=\"tablist\">\n @for (tab of tabs(); track tab.id()) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"coar-tab-button\"\n [class.active]=\"isActive(tab.id())\"\n [class.disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"isActive(tab.id())\"\n [attr.aria-controls]=\"'panel-' + tab.id()\"\n [attr.id]=\"tab.id()\"\n [attr.data-tab-id]=\"tab.id()\"\n [attr.tabindex]=\"isActive(tab.id()) ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"selectTab(tab.id())\"\n (keydown)=\"onKeydown($event, tab.id())\"\n >\n <span class=\"coar-tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()\" />\n </span>\n </button>\n }\n </div>\n\n <div class=\"coar-tab-content\">\n @for (tab of tabs(); track tab.id()) {\n <div\n role=\"tabpanel\"\n class=\"coar-tab-panel\"\n [class.active]=\"isActive(tab.id())\"\n [attr.id]=\"'panel-' + tab.id()\"\n [attr.aria-labelledby]=\"tab.id()\"\n [hidden]=\"!isActive(tab.id())\"\n >\n @if (shouldRenderContent(tab)) {\n <!-- Component content -->\n @if (tab.isComponent) {\n <ng-container *ngComponentOutlet=\"$any(tab.componentContent); inputs: tab.contentInputs()\" />\n }\n <!-- Template content -->\n @else if (tab.templateContent) {\n <ng-container [ngTemplateOutlet]=\"tab.templateContent\" />\n } }\n </div>\n }\n </div>\n</div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { CoarScrollbarDirective } from '../../display/scrollbar/coar-scrollbar.directive';\n\n/**\n * CoarSidebar: A three-part layout component for navigation sidebars.\n *\n * Provides three distinct slots via content projection:\n * - **Header** (`[coar-sidebar-header]`): Fixed at top, for logo/title/branding\n * - **Content** (default slot): Scrollable area for navigation menu or other content\n * - **Footer** (`[coar-sidebar-footer]`): Fixed at bottom, for actions/settings/user info\n *\n * Responsibilities:\n * - Provide consistent sidebar layout structure\n * - Apply design tokens for width, spacing, colors\n * - Handle scrolling behavior (only content area scrolls)\n * - Support left/right positioning\n *\n * @example\n * ```html\n * <coar-sidebar>\n * <div coar-sidebar-header>\n * <h2>Navigation</h2>\n * </div>\n *\n * <coar-menu borderless>\n * <coar-menu-item routerLink=\"/home\" routerLinkActive=\"active\">Home</coar-menu-item>\n * <coar-menu-item routerLink=\"/about\" routerLinkActive=\"active\">About</coar-menu-item>\n * </coar-menu>\n *\n * <div coar-sidebar-footer>\n * <button>Settings</button>\n * </div>\n * </coar-sidebar>\n * ```\n */\n@Component({\n selector: 'coar-sidebar',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-sidebar.component.html',\n styleUrl: './coar-sidebar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-sidebar',\n '[class.coar-sidebar--collapsed]': 'collapsed()',\n '[class.coar-sidebar--position-right]': 'position() === \"right\"',\n },\n})\nexport class CoarSidebarComponent {\n /**\n * Sidebar position: left or right side of screen.\n * Default is 'left'.\n */\n readonly position = input<'left' | 'right'>('left');\n\n /**\n * Collapsed state for narrow/icon-only sidebar.\n * Use as boolean attribute: `<coar-sidebar collapsed>` or `[collapsed]=\"true\"`\n */\n readonly collapsed = input(false, { transform: booleanAttribute });\n}\n","<div class=\"coar-sidebar__header\">\n <ng-content select=\"[coar-sidebar-header]\" />\n</div>\n\n<div class=\"coar-sidebar__content\" coarScrollbar [overflowX]=\"'hidden'\" [defer]=\"false\">\n <ng-content />\n</div>\n\n<div class=\"coar-sidebar__footer\">\n <ng-content select=\"[coar-sidebar-footer]\" />\n</div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'coar-breadcrumb-item',\n standalone: true,\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-breadcrumb-item',\n '[class.coar-breadcrumb-item--active]': 'active()',\n '[attr.aria-current]': 'active() ? \"page\" : null',\n },\n})\nexport class CoarBreadcrumbItemComponent {\n readonly active = input<boolean, unknown>(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n ElementRef,\n input,\n} from '@angular/core';\nimport { CoarBreadcrumbItemComponent } from './coar-breadcrumb-item.component';\n\n@Component({\n selector: 'coar-breadcrumb',\n standalone: true,\n templateUrl: './coar-breadcrumb.component.html',\n styleUrl: './coar-breadcrumb.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-breadcrumb',\n },\n})\nexport class CoarBreadcrumbComponent {\n readonly separator = input<string>('/');\n readonly items = contentChildren(CoarBreadcrumbItemComponent, { read: ElementRef });\n\n constructor() {\n effect(() => {\n const sep = this.separator();\n const itemEls = this.items();\n itemEls.forEach((elRef) => {\n elRef.nativeElement.setAttribute('data-separator', sep);\n });\n });\n }\n}\n","<nav aria-label=\"Breadcrumb\">\n <ol class=\"coar-breadcrumb-list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n} from '@angular/core';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\n\nexport type PaginationPageItem = { type: 'page'; page: number } | { type: 'ellipsis' };\n\n@Component({\n selector: 'coar-pagination',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-pagination.component.html',\n styleUrl: './coar-pagination.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'coar-pagination',\n '[class.coar-pagination--disabled]': 'disabled()',\n },\n})\nexport class CoarPaginationComponent {\n readonly totalItems = input.required<number>();\n readonly pageSize = input<number>(10);\n readonly currentPage = model<number>(1);\n readonly maxVisiblePages = input<number>(5);\n readonly showFirstLast = input<boolean, unknown>(true, { transform: booleanAttribute });\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n readonly pageChanged = output<number>();\n\n readonly totalPages = computed(() => Math.max(1, Math.ceil(this.totalItems() / this.pageSize())));\n\n readonly canGoPrev = computed(() => this.currentPage() > 1);\n readonly canGoNext = computed(() => this.currentPage() < this.totalPages());\n\n readonly visiblePages = computed<PaginationPageItem[]>(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n const maxVisible = this.maxVisiblePages();\n\n if (total <= maxVisible) {\n return Array.from({ length: total }, (_, i) => ({ type: 'page' as const, page: i + 1 }));\n }\n\n const items: PaginationPageItem[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n let startPage = Math.max(2, current - halfVisible);\n let endPage = Math.min(total - 1, current + halfVisible);\n\n if (current <= halfVisible + 1) {\n endPage = Math.min(total - 1, maxVisible - 1);\n }\n if (current >= total - halfVisible) {\n startPage = Math.max(2, total - maxVisible + 2);\n }\n\n items.push({ type: 'page', page: 1 });\n\n if (startPage > 2) {\n items.push({ type: 'ellipsis' });\n }\n\n for (let i = startPage; i <= endPage; i++) {\n items.push({ type: 'page', page: i });\n }\n\n if (endPage < total - 1) {\n items.push({ type: 'ellipsis' });\n }\n\n if (total > 1) {\n items.push({ type: 'page', page: total });\n }\n\n return items;\n });\n\n goToPage(page: number): void {\n if (this.disabled() || page < 1 || page > this.totalPages() || page === this.currentPage()) {\n return;\n }\n this.currentPage.set(page);\n this.pageChanged.emit(page);\n }\n\n trackByItem(_index: number, item: PaginationPageItem): string {\n return item.type === 'page' ? `page-${item.page}` : `ellipsis-${_index}`;\n }\n}\n","<nav aria-label=\"Pagination\" class=\"coar-pagination-nav\">\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoPrev()\"\n [attr.aria-label]=\"'Go to first page'\"\n (click)=\"goToPage(1)\"\n >\n <coar-icon name=\"chevrons-left\" size=\"s\"></coar-icon>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoPrev()\"\n [attr.aria-label]=\"'Go to previous page'\"\n (click)=\"goToPage(currentPage() - 1)\"\n >\n <coar-icon name=\"chevron-left\" size=\"s\"></coar-icon>\n </button>\n\n @for (item of visiblePages(); track trackByItem($index, item)) {\n @if (item.type === 'ellipsis') {\n <span class=\"coar-pagination-ellipsis\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--page\"\n [class.coar-pagination-button--active]=\"item.page === currentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"item.page === currentPage() ? 'page' : null\"\n [attr.aria-label]=\"'Go to page ' + item.page\"\n (click)=\"goToPage(item.page)\"\n >\n {{ item.page }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoNext()\"\n [attr.aria-label]=\"'Go to next page'\"\n (click)=\"goToPage(currentPage() + 1)\"\n >\n <coar-icon name=\"chevron-right\" size=\"s\"></coar-icon>\n </button>\n\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"coar-pagination-button coar-pagination-button--nav\"\n [disabled]=\"disabled() || !canGoNext()\"\n [attr.aria-label]=\"'Go to last page'\"\n (click)=\"goToPage(totalPages())\"\n >\n <coar-icon name=\"chevrons-right\" size=\"s\"></coar-icon>\n </button>\n }\n</nav>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'coar-navbar',\n standalone: true,\n templateUrl: './coar-navbar.component.html',\n styleUrl: './coar-navbar.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'banner',\n 'class': 'coar-navbar',\n '[class.coar-navbar--elevated]': 'elevated()',\n '[class.coar-navbar--bordered]': 'bordered()',\n },\n})\nexport class CoarNavbarComponent {\n readonly elevated = input<boolean, unknown>(true, { transform: booleanAttribute });\n readonly bordered = input<boolean, unknown>(false, { transform: booleanAttribute });\n}\n","<ng-content select=\"[coar-navbar-start]\"></ng-content>\n<div class=\"coar-navbar-spacer\"></div>\n<ng-content select=\"[coar-navbar-center]\"></ng-content>\n<div class=\"coar-navbar-spacer\"></div>\n<ng-content select=\"[coar-navbar-end]\"></ng-content>\n","// Navigation/container components\nexport * from './tabs';\nexport * from './sidebar';\nexport * from './breadcrumb';\nexport * from './pagination';\nexport * from './navbar';\n","import { Injectable } from '@angular/core';\n\ntype TooltipOpenReason = 'hover' | 'focus';\n\ninterface ActiveTooltip {\n id: string;\n closeImmediate: () => void;\n closeOnHoverLost: () => void;\n trigger: HTMLElement;\n reason: TooltipOpenReason;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CoarTooltipService {\n private active: ActiveTooltip | null = null;\n\n private trackingCleanup: (() => void) | null = null;\n\n requestOpen(\n id: string,\n closeImmediate: () => void,\n closeOnHoverLost: () => void,\n trigger: HTMLElement,\n reason: TooltipOpenReason\n ): void {\n const previous = this.active;\n\n if (previous && previous.id !== id) {\n previous.closeImmediate();\n }\n\n this.active = { id, closeImmediate, closeOnHoverLost, trigger, reason };\n\n if (reason === 'hover') {\n this.ensurePointerTracking();\n } else {\n this.stopPointerTracking();\n }\n }\n\n notifyClosed(id: string): void {\n if (this.active?.id !== id) return;\n this.active = null;\n this.stopPointerTracking();\n }\n\n private ensurePointerTracking(): void {\n if (this.trackingCleanup) return;\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n\n const capture = true;\n\n const closeIfHoverLost = (): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n this.active.closeImmediate();\n };\n\n const onPointerMove = (event: PointerEvent | MouseEvent): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n\n // Prefer hit-testing when available, but fall back to geometry checks for environments\n // that don't implement elementFromPoint (e.g. certain test runners).\n if (typeof document.elementFromPoint === 'function') {\n const el = document.elementFromPoint(event.clientX, event.clientY);\n if (el && this.active.trigger.contains(el)) return;\n this.active.closeOnHoverLost();\n return;\n }\n\n const rect = this.active.trigger.getBoundingClientRect();\n const withinX = event.clientX >= rect.left && event.clientX <= rect.right;\n const withinY = event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n if (withinX && withinY) return;\n this.active.closeOnHoverLost();\n };\n\n const onScroll = (): void => closeIfHoverLost();\n const onBlur = (): void => closeIfHoverLost();\n const onVisibilityChange = (): void => {\n if (document.hidden) {\n closeIfHoverLost();\n }\n };\n\n document.addEventListener('pointermove', onPointerMove, { capture, passive: true });\n window.addEventListener('scroll', onScroll, { capture, passive: true });\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n this.trackingCleanup = () => {\n document.removeEventListener('pointermove', onPointerMove, capture);\n window.removeEventListener('scroll', onScroll, capture);\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n this.trackingCleanup = null;\n };\n }\n\n private stopPointerTracking(): void {\n this.trackingCleanup?.();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Injector,\n TemplateRef,\n Type,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CoarTooltipOverlayContent = string | TemplateRef<unknown> | Type<unknown>;\n\n@Component({\n selector: 'coar-tooltip-overlay',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './coar-tooltip-overlay.component.html',\n styleUrl: './coar-tooltip-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTooltipOverlayComponent {\n readonly tooltipId = input<string>('');\n\n readonly content = input<CoarTooltipOverlayContent | null>(null);\n\n /** Context passed to template content via ngTemplateOutletContext. */\n readonly context = input<object | null>(null);\n\n /** Injector for dynamic component content via NgComponentOutlet. */\n readonly contentInjector = input<Injector | null>(null);\n\n @HostBinding('attr.id')\n protected get hostId(): string | null {\n return this.tooltipId() ? this.tooltipId() : null;\n }\n\n @HostBinding('attr.role')\n protected readonly role = 'tooltip';\n\n protected readonly kind = computed<'text' | 'template' | 'component' | 'none'>(() => {\n const value = this.content();\n if (value == null) return 'none';\n if (typeof value === 'string') return 'text';\n if (value instanceof TemplateRef) return 'template';\n return 'component';\n });\n\n protected readonly text = computed(() => {\n const value = this.content();\n return typeof value === 'string' ? value : '';\n });\n\n protected readonly templateRef = computed(() => {\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n protected readonly componentType = computed<Type<unknown> | null>(() => {\n const value = this.content();\n if (value == null) return null;\n if (typeof value === 'string') return null;\n if (value instanceof TemplateRef) return null;\n return value as Type<unknown>;\n });\n}\n","@if (kind() === 'text') {\n <span class=\"coar-tooltip-text\">{{ text() }}</span>\n} @else if (kind() === 'template') {\n <ng-container\n [ngTemplateOutlet]=\"templateRef()\"\n [ngTemplateOutletContext]=\"context() ?? {}\"\n />\n} @else if (kind() === 'component') {\n <ng-container\n *ngComponentOutlet=\"componentType(); injector: (contentInjector() ?? undefined)\"\n />\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\n\nimport { createOverlayBuilder, type OverlayRef, type Placement } from '@cocoar/ui/overlay';\n\nimport { CoarTooltipService } from './coar-tooltip.service';\nimport {\n CoarTooltipOverlayComponent,\n type CoarTooltipOverlayContent,\n} from './coar-tooltip-overlay.component';\n\n/** Tooltip placement preference - all 12 standard placements plus 'auto' for best-fit */\ntype TooltipPlacement =\n | 'auto'\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end';\n\n@Directive({\n selector: '[coarTooltip]',\n exportAs: 'coarTooltip',\n standalone: true,\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class CoarTooltipDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly tooltipService = inject(CoarTooltipService);\n\n /** Tooltip content (string, TemplateRef, or Component type). */\n readonly coarTooltip = input<CoarTooltipOverlayContent | null>(null);\n\n /** Optional context for TemplateRef tooltips. */\n readonly coarTooltipContext = input<object | null>(null);\n\n /** Disable tooltip behavior. */\n readonly coarTooltipDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placement preference. Default: 'top'. Use 'auto' for best-fit. */\n readonly coarTooltipPlacement = input<TooltipPlacement>('top');\n\n /** Delay (ms) before opening on hover/focus. Default: 0 */\n readonly coarTooltipOpenDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Delay (ms) before closing on leave/blur. Default: 0 */\n readonly coarTooltipCloseDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Whether the tooltip should be clamped into the viewport. Default: true */\n readonly coarTooltipClampToViewport = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /** When placement is explicit (not auto), fall back to best-fit when it doesn't fit. Default: false */\n readonly coarTooltipFallbackToBestFit = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n private readonly tooltipId = `coar-tooltip-${cryptoRandomId()}`;\n\n private overlayRef: OverlayRef | null = null;\n private readonly overlayBuilder = createOverlayBuilder();\n\n private openTimerId: number | null = null;\n private closeTimerId: number | null = null;\n\n private openReason: 'hover' | 'focus' | null = null;\n\n private readonly hasContent = computed(() => {\n const value = this.coarTooltip();\n return value != null && value !== '';\n });\n\n constructor() {\n effect(() => {\n if (this.coarTooltipDisabled()) {\n this.close(true);\n }\n\n // Track these inputs so updates are observed; if an overlay is open,\n // we re-open to apply content/config changes predictably.\n this.coarTooltip();\n this.coarTooltipContext();\n this.coarTooltipPlacement();\n this.coarTooltipClampToViewport();\n this.coarTooltipFallbackToBestFit();\n\n const currentOpenReason = this.openReason;\n const hasOpenOverlay = this.overlayRef != null;\n\n // When the tooltip is open and config changes, re-open to apply changes.\n // Overlays do not support updating spec/content in-place.\n if (!this.coarTooltipDisabled() && hasOpenOverlay && currentOpenReason && this.hasContent()) {\n this.close(true);\n Promise.resolve().then(() => this.openInternal(currentOpenReason));\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearTimers();\n this.close(true);\n });\n }\n\n private clearTimers(): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n }\n\n private openInternal(reason: 'hover' | 'focus'): void {\n if (this.coarTooltipDisabled()) return;\n if (!this.hasContent()) return;\n\n const trigger = this.elementRef.nativeElement;\n\n // Ensure only one tooltip at a time across the app.\n this.tooltipService.requestOpen(\n this.tooltipId,\n () => this.close(true),\n () => this.scheduleClose('hover'),\n trigger,\n reason\n );\n\n this.openReason = reason;\n\n if (this.overlayRef) {\n this.overlayRef.updatePosition();\n trigger.setAttribute('aria-describedby', this.tooltipId);\n return;\n }\n\n const content = this.coarTooltip();\n if (!content) return;\n\n const position = this.resolveOverlayPosition();\n\n const ref = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position(position)\n .scroll({ strategy: 'reposition' })\n .dismiss({ outsideClick: false, escapeKey: true })\n .size({ mode: 'content' })\n .a11y({ role: 'tooltip' })\n .fromComponent(CoarTooltipOverlayComponent)\n .open({\n tooltipId: this.tooltipId,\n content,\n context: this.coarTooltipContext(),\n contentInjector: this.injector,\n });\n\n this.overlayRef = ref;\n\n trigger.setAttribute('aria-describedby', this.tooltipId);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.openReason = null;\n trigger.removeAttribute('aria-describedby');\n this.tooltipService.notifyClosed(this.tooltipId);\n });\n }\n\n private resolveOverlayPosition(): {\n placement: Placement | readonly Placement[];\n offset: number;\n flip: boolean;\n shift: boolean;\n } {\n const preference = this.coarTooltipPlacement();\n const clampToViewport = this.coarTooltipClampToViewport();\n const fallbackToBestFit = this.coarTooltipFallbackToBestFit();\n\n if (preference === 'auto') {\n return {\n placement: ['top', 'bottom', 'left', 'right'] as const,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n const requested = toOverlayPlacement(preference);\n\n if (fallbackToBestFit) {\n const candidates = ['top', 'bottom', 'left', 'right'] as const;\n const rest = candidates.filter((p) => p !== requested);\n\n return {\n placement: [requested, ...rest],\n offset: 6,\n flip: true,\n shift: clampToViewport,\n };\n }\n\n return {\n placement: requested,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n private scheduleOpen(reason: 'hover' | 'focus'): void {\n this.clearTimers();\n\n const delay = Math.max(0, Number(this.coarTooltipOpenDelay()) || 0);\n if (delay === 0) {\n this.openInternal(reason);\n return;\n }\n\n this.openTimerId = window.setTimeout(() => {\n this.openTimerId = null;\n this.openInternal(reason);\n }, delay);\n }\n\n private scheduleClose(reason: 'hover' | 'focus'): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n\n if (this.openReason !== reason) return;\n\n const delay = Math.max(0, Number(this.coarTooltipCloseDelay()) || 0);\n if (delay === 0) {\n this.close(true);\n return;\n }\n\n if (this.closeTimerId != null) return;\n\n this.closeTimerId = window.setTimeout(() => {\n this.closeTimerId = null;\n this.close(true);\n }, delay);\n }\n\n onMouseEnter(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('hover');\n }\n\n onMouseLeave(): void {\n this.scheduleClose('hover');\n }\n\n onFocusIn(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('focus');\n }\n\n onFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && this.elementRef.nativeElement.contains(nextTarget)) {\n return;\n }\n\n this.scheduleClose('focus');\n }\n\n close(immediate = false): void {\n if (immediate) {\n this.clearTimers();\n }\n\n this.openReason = null;\n\n const trigger = this.elementRef.nativeElement;\n trigger.removeAttribute('aria-describedby');\n\n const ref = this.overlayRef;\n if (!ref) return;\n\n this.overlayRef = null;\n ref.close();\n this.tooltipService.notifyClosed(this.tooltipId);\n }\n\n open(): void {\n const trigger = this.elementRef.nativeElement;\n const active = (\n typeof document !== 'undefined' ? document.activeElement : null\n ) as Element | null;\n const reason: 'hover' | 'focus' = active && trigger.contains(active) ? 'focus' : 'hover';\n this.clearTimers();\n this.openInternal(reason);\n }\n\n toggle(): void {\n if (this.overlayRef) {\n this.close(true);\n return;\n }\n this.open();\n }\n}\n\nfunction toOverlayPlacement(preference: Exclude<TooltipPlacement, 'auto'>): Placement {\n // Now that overlay supports all 12 placements, pass them through directly\n return preference as Placement;\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, filter } from 'rxjs';\n\nimport { createOverlayBuilder, type OverlayRef } from '@cocoar/ui/overlay';\nimport { CoarButtonComponent } from '../../display/button/coar-button.component';\n\nexport type PopconfirmPlacement = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Popconfirm directive for confirming actions with a small anchored popover.\n *\n * Intercepts clicks on the host element, shows a confirmation popover,\n * and either proceeds with the action (confirm) or cancels.\n *\n * @example\n * ```html\n * <button coarPopconfirm=\"Delete this user?\" (onConfirm)=\"deleteUser()\">\n * Delete\n * </button>\n *\n * <button\n * [coarPopconfirm]=\"'Revoke all sessions?'\"\n * popconfirmTitle=\"Warning\"\n * confirmText=\"Revoke\"\n * confirmVariant=\"danger\"\n * (onConfirm)=\"revokeSessions()\"\n * >\n * Revoke\n * </button>\n * ```\n */\n@Directive({\n selector: '[coarPopconfirm]',\n standalone: true,\n})\nexport class CoarPopconfirmDirective {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly overlayBuilder = createOverlayBuilder();\n\n private overlayRef: OverlayRef | null = null;\n\n /** Confirmation message to display */\n coarPopconfirm = input.required<string>();\n\n /** Optional title above the message */\n popconfirmTitle = input<string>('');\n\n /** Text for the confirm button */\n confirmText = input<string>('OK');\n\n /** Text for the cancel button */\n cancelText = input<string>('Cancel');\n\n /** Variant for confirm button */\n confirmVariant = input<'primary' | 'danger'>('primary');\n\n /** Placement relative to trigger element */\n placement = input<PopconfirmPlacement>('top');\n\n /** Whether popconfirm is disabled */\n popconfirmDisabled = input<boolean>(false);\n\n /** Emitted when user confirms */\n confirmed = output<void>();\n\n /** Emitted when user cancels */\n cancelled = output<void>();\n\n /** Whether the popconfirm is currently open */\n protected readonly isOpen = signal(false);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.close();\n });\n\n // Close on escape\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(() => this.isOpen()),\n filter((event) => event.key === 'Escape')\n )\n .subscribe(() => {\n this.cancel();\n });\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.popconfirmDisabled()) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n private open(): void {\n if (this.overlayRef) return;\n\n const trigger = this.elementRef.nativeElement;\n\n this.overlayRef = this.overlayBuilder\n .anchor({ kind: 'element', element: trigger })\n .position(this.getPlacementConfig())\n .backdrop({ kind: 'none' })\n .dismiss({ outsideClick: true, escapeKey: true })\n .a11y({ role: 'dialog' })\n .fromComponent(CoarPopconfirmPanelComponent)\n .open({\n message: this.coarPopconfirm(),\n title: this.popconfirmTitle(),\n confirmText: this.confirmText(),\n cancelText: this.cancelText(),\n confirmVariant: this.confirmVariant(),\n placement: this.placement(),\n onConfirm: () => this.confirm(),\n onCancel: () => this.cancel(),\n });\n\n this.isOpen.set(true);\n }\n\n private close(): void {\n this.overlayRef?.close();\n this.overlayRef = null;\n this.isOpen.set(false);\n }\n\n private confirm(): void {\n this.confirmed.emit();\n this.close();\n }\n\n private cancel(): void {\n this.cancelled.emit();\n this.close();\n }\n\n private getPlacementConfig() {\n const placement = this.placement();\n const placementMap: Record<PopconfirmPlacement, ('top' | 'bottom' | 'left' | 'right')[]> = {\n top: ['top', 'bottom', 'left', 'right'],\n bottom: ['bottom', 'top', 'left', 'right'],\n left: ['left', 'right', 'top', 'bottom'],\n right: ['right', 'left', 'top', 'bottom'],\n };\n return { placement: placementMap[placement], offset: 8 };\n }\n}\n\n/**\n * Internal panel component for popconfirm content.\n */\n@Component({\n selector: 'coar-popconfirm-panel',\n standalone: true,\n imports: [CoarButtonComponent],\n host: {\n '[attr.data-placement]': 'placement()',\n },\n template: `\n <div class=\"coar-popconfirm-panel\">\n @if (title()) {\n <div class=\"coar-popconfirm-panel__title\">{{ title() }}</div>\n }\n <div class=\"coar-popconfirm-panel__message\">{{ message() }}</div>\n <div class=\"coar-popconfirm-panel__actions\">\n <coar-button size=\"s\" variant=\"secondary\" (clicked)=\"onCancel()?.()\">\n {{ cancelText() }}\n </coar-button>\n <coar-button\n size=\"s\"\n [variant]=\"confirmVariant() === 'danger' ? 'danger' : 'primary'\"\n (clicked)=\"onConfirm()?.()\"\n >\n {{ confirmText() }}\n </coar-button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.15));\n }\n\n .coar-popconfirm-panel {\n position: relative;\n padding: 0.75rem;\n background: var(--coar-background-neutral-primary);\n border: 1px solid var(--coar-border-neutral-tertiary);\n border-radius: var(--coar-radius-sm);\n max-width: 280px;\n font-family: var(--coar-body-base-family);\n }\n\n /* Arrow pseudo-element */\n .coar-popconfirm-panel::before {\n content: '';\n position: absolute;\n width: 10px;\n height: 10px;\n background: var(--coar-background-neutral-primary);\n border: 1px solid var(--coar-border-neutral-tertiary);\n transform: rotate(45deg);\n }\n\n /* Top placement - arrow at bottom pointing down */\n :host([data-placement='top']) .coar-popconfirm-panel::before {\n bottom: -6px;\n left: 50%;\n margin-left: -5px;\n border-top: none;\n border-left: none;\n }\n\n /* Bottom placement - arrow at top pointing up */\n :host([data-placement='bottom']) .coar-popconfirm-panel::before {\n top: -6px;\n left: 50%;\n margin-left: -5px;\n border-bottom: none;\n border-right: none;\n }\n\n /* Left placement - arrow at right pointing right */\n :host([data-placement='left']) .coar-popconfirm-panel::before {\n right: -6px;\n top: 50%;\n margin-top: -5px;\n border-bottom: none;\n border-left: none;\n }\n\n /* Right placement - arrow at left pointing left */\n :host([data-placement='right']) .coar-popconfirm-panel::before {\n left: -6px;\n top: 50%;\n margin-top: -5px;\n border-top: none;\n border-right: none;\n }\n\n .coar-popconfirm-panel__title {\n font-weight: 600;\n font-size: var(--coar-body-base-size);\n color: var(--coar-text-neutral-primary);\n margin-bottom: 0.25rem;\n }\n\n .coar-popconfirm-panel__message {\n font-size: var(--coar-body-small-size);\n color: var(--coar-text-neutral-secondary);\n margin-bottom: 0.75rem;\n line-height: 1.4;\n }\n\n .coar-popconfirm-panel__actions {\n display: flex;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarPopconfirmPanelComponent {\n /** Confirmation message to display */\n message = input<string>('');\n\n /** Optional title above the message */\n title = input<string>('');\n\n /** Text for the confirm button */\n confirmText = input<string>('OK');\n\n /** Text for the cancel button */\n cancelText = input<string>('Cancel');\n\n /** Variant for confirm button */\n confirmVariant = input<'primary' | 'danger'>('primary');\n\n /** Placement for arrow positioning */\n placement = input<PopconfirmPlacement>('top');\n\n /** Callback when user confirms */\n onConfirm = input<(() => void) | undefined>(undefined);\n\n /** Callback when user cancels */\n onCancel = input<(() => void) | undefined>(undefined);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n Type,\n inject,\n input,\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\n\nimport { COAR_OVERLAY_REF } from '@cocoar/ui/overlay';\nimport { CoarButtonComponent } from '../../display/button/coar-button.component';\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { type CoarDialogSize } from './coar-dialog.types';\n\n@Component({\n selector: 'coar-dialog-shell',\n standalone: true,\n imports: [NgComponentOutlet, NgTemplateOutlet, CoarButtonComponent, CoarIconComponent],\n templateUrl: './coar-dialog-shell.component.html',\n styleUrl: './coar-dialog-shell.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarDialogShellComponent {\n private readonly overlayRef = inject(COAR_OVERLAY_REF);\n\n readonly dialogTitle = input<string>('');\n readonly dialogSize = input<CoarDialogSize>('m');\n readonly showCloseButton = input<boolean>(true);\n\n readonly contentComponent = input<Type<unknown> | null>(null);\n readonly contentTemplate = input<TemplateRef<unknown> | null>(null);\n readonly contentContext = input<unknown>(null);\n readonly componentInputs = input<Record<string, unknown>>({});\n\n readonly confirmMode = input<boolean>(false);\n readonly confirmMessage = input<string>('');\n readonly confirmText = input<string>('Confirm');\n readonly cancelText = input<string>('Cancel');\n readonly confirmVariant = input<string>('primary');\n\n protected onClose(): void {\n this.overlayRef.close();\n }\n\n protected onConfirm(): void {\n this.overlayRef.close(true);\n }\n\n protected onCancel(): void {\n this.overlayRef.close(false);\n }\n}\n","<div class=\"coar-dialog\" [class]=\"'coar-dialog--' + dialogSize()\">\n @if (dialogTitle() || showCloseButton()) {\n <div class=\"coar-dialog-header\">\n @if (dialogTitle()) {\n <h2 class=\"coar-dialog-title\" id=\"dialog-title\">{{ dialogTitle() }}</h2>\n }\n @if (showCloseButton()) {\n <button class=\"coar-dialog-close\" (click)=\"onClose()\" aria-label=\"Close dialog\">\n <coar-icon name=\"x\" size=\"s\" />\n </button>\n }\n </div>\n }\n\n <div class=\"coar-dialog-body\">\n @if (confirmMode()) {\n <p>{{ confirmMessage() }}</p>\n } @else if (contentComponent()) {\n <ng-container *ngComponentOutlet=\"contentComponent(); inputs: componentInputs()\" />\n } @else if (contentTemplate()) {\n <ng-container *ngTemplateOutlet=\"contentTemplate(); context: contentContext()\" />\n }\n </div>\n\n @if (confirmMode()) {\n <div class=\"coar-dialog-footer\">\n <coar-button variant=\"secondary\" (clicked)=\"onCancel()\">{{ cancelText() }}</coar-button>\n <coar-button [variant]=\"confirmVariant() === 'danger' ? 'danger' : 'primary'\" (clicked)=\"onConfirm()\">{{ confirmText() }}</coar-button>\n </div>\n }\n</div>\n","import { Injectable, TemplateRef, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport {\n createOverlayBuilder,\n coarModalPreset,\n type OverlayRef,\n CoarOverlayOpenBuilder,\n} from '@cocoar/ui/overlay';\n\nimport { CoarDialogShellComponent } from './coar-dialog-shell.component';\nimport {\n type CoarDialogConfig,\n type CoarDialogRef,\n type CoarConfirmOptions,\n} from './coar-dialog.types';\n\nfunction wrapOverlayRef<TResult>(overlayRef: OverlayRef): CoarDialogRef<TResult> {\n return {\n close(result?: TResult): void {\n overlayRef.close(result);\n },\n get afterClosed$(): Observable<TResult | undefined> {\n return overlayRef.afterClosed$ as Observable<TResult | undefined>;\n },\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CoarDialogService {\n private readonly overlayBuilder: CoarOverlayOpenBuilder;\n\n constructor() {\n this.overlayBuilder = createOverlayBuilder(coarModalPreset);\n }\n\n openComponent<C, TResult = unknown>(\n component: Type<C>,\n config: CoarDialogConfig<TResult> = {},\n inputs?: Record<string, unknown>\n ): CoarDialogRef<TResult> {\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: config.title ?? '',\n dialogSize: config.size ?? 'm',\n showCloseButton: config.showCloseButton ?? true,\n contentComponent: component,\n contentTemplate: null,\n contentContext: null,\n componentInputs: inputs ?? {},\n confirmMode: false,\n confirmMessage: '',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n });\n\n return wrapOverlayRef<TResult>(overlayRef);\n }\n\n openTemplate<TCtx, TResult = unknown>(\n template: TemplateRef<TCtx>,\n config: CoarDialogConfig<TResult> = {},\n context?: TCtx\n ): CoarDialogRef<TResult> {\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: config.title ?? '',\n dialogSize: config.size ?? 'm',\n showCloseButton: config.showCloseButton ?? true,\n contentComponent: null,\n contentTemplate: template,\n contentContext: context ?? null,\n componentInputs: {},\n confirmMode: false,\n confirmMessage: '',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n confirmVariant: 'primary',\n });\n\n return wrapOverlayRef<TResult>(overlayRef);\n }\n\n confirm(options: CoarConfirmOptions): CoarDialogRef<boolean> {\n const config: CoarDialogConfig<boolean> = {\n title: options.title,\n size: 's',\n closeOnBackdropClick: true,\n closeOnEscape: true,\n showCloseButton: false,\n };\n\n const builder = this.buildDialogOverlay(config);\n\n const overlayRef = builder\n .fromComponent(CoarDialogShellComponent)\n .open({\n dialogTitle: options.title,\n dialogSize: 's',\n showCloseButton: false,\n contentComponent: null,\n contentTemplate: null,\n contentContext: null,\n componentInputs: {},\n confirmMode: true,\n confirmMessage: options.message,\n confirmText: options.confirmText ?? 'Confirm',\n cancelText: options.cancelText ?? 'Cancel',\n confirmVariant: options.confirmVariant ?? 'primary',\n });\n\n return wrapOverlayRef<boolean>(overlayRef);\n }\n\n private buildDialogOverlay<TResult>(config: CoarDialogConfig<TResult>): CoarOverlayOpenBuilder {\n let builder = this.overlayBuilder.fork();\n\n builder = builder.dismiss({\n outsideClick: config.closeOnBackdropClick ?? true,\n escapeKey: config.closeOnEscape ?? true,\n });\n\n if (config.ariaLabel || config.ariaDescribedBy) {\n builder = builder.a11y({\n role: 'dialog',\n label: config.ariaLabel,\n describedBy: config.ariaDescribedBy,\n });\n }\n\n if (config.panelClass) {\n builder = builder.panelClass(config.panelClass);\n }\n\n return builder;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport { CoarIconComponent } from '../../display/icon/coar-icon.component';\nimport { type CoarToastVariant } from './coar-toast.types';\n\nconst ICON_MAP: Record<CoarToastVariant, string> = {\n success: 'check-circle',\n error: 'alert-circle',\n warning: 'alert-triangle',\n info: 'info',\n};\n\n@Component({\n selector: 'coar-toast',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-toast.component.html',\n styleUrl: './coar-toast.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-toast--no-title]': '!title()',\n },\n})\nexport class CoarToastComponent {\n private readonly destroyRef = inject(DestroyRef);\n private timer: ReturnType<typeof setTimeout> | null = null;\n private startTime = 0;\n private remaining = 0;\n\n readonly variant = input<CoarToastVariant>('info');\n readonly title = input<string>('');\n readonly message = input<string>('');\n readonly duration = input<number>(5000);\n readonly dismissible = input<boolean>(true);\n readonly showProgress = input<boolean>(true);\n readonly action = input<{ label: string; callback: () => void } | null>(null);\n\n readonly dismissed = output<void>();\n readonly actionClicked = output<void>();\n\n readonly isPaused = signal(false);\n\n readonly iconName = computed(() => ICON_MAP[this.variant()]);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.clearTimer();\n });\n }\n\n startAutoClose(): void {\n const dur = this.duration();\n if (dur <= 0) return;\n\n this.remaining = dur;\n this.startTime = Date.now();\n this.timer = setTimeout(() => {\n this.dismissed.emit();\n }, this.remaining);\n }\n\n onMouseEnter(): void {\n if (this.duration() <= 0) return;\n this.isPaused.set(true);\n\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n this.remaining = Math.max(0, this.remaining - (Date.now() - this.startTime));\n }\n }\n\n onMouseLeave(): void {\n if (this.duration() <= 0) return;\n this.isPaused.set(false);\n\n if (this.remaining > 0) {\n this.startTime = Date.now();\n this.timer = setTimeout(() => {\n this.dismissed.emit();\n }, this.remaining);\n }\n }\n\n onDismiss(): void {\n this.clearTimer();\n this.dismissed.emit();\n }\n\n onAction(): void {\n const actionFn = this.action();\n if (actionFn) {\n actionFn.callback();\n }\n this.actionClicked.emit();\n }\n\n private clearTimer(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\n","<div class=\"coar-toast\"\n [class]=\"'coar-toast--' + variant()\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n [attr.role]=\"variant() === 'error' ? 'alert' : null\">\n <div class=\"coar-toast-icon\">\n <coar-icon [name]=\"iconName()\" size=\"s\" />\n </div>\n <div class=\"coar-toast-content\">\n @if (title()) {\n <div class=\"coar-toast-title\">{{ title() }}</div>\n }\n <div class=\"coar-toast-message\">{{ message() }}</div>\n </div>\n <div class=\"coar-toast-actions\">\n @if (action()) {\n <button class=\"coar-toast-action-btn\" (click)=\"onAction()\" [attr.aria-label]=\"action()!.label\">\n {{ action()!.label }}\n </button>\n }\n @if (dismissible()) {\n <button class=\"coar-toast-close\" (click)=\"onDismiss()\" aria-label=\"Dismiss notification\">\n <coar-icon name=\"x\" size=\"xs\" />\n </button>\n }\n </div>\n @if (showProgress() && duration() > 0) {\n <div class=\"coar-toast-progress\">\n <div class=\"coar-toast-progress-bar\"\n [style.animation-duration.ms]=\"duration()\"\n [class.coar-toast-progress-bar--paused]=\"isPaused()\"></div>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n QueryList,\n ViewChildren,\n signal,\n} from '@angular/core';\n\nimport { CoarToastComponent } from './coar-toast.component';\nimport { type CoarToastVariant } from './coar-toast.types';\n\nexport interface InternalToast {\n id: number;\n variant: CoarToastVariant;\n title: string;\n message: string;\n duration: number;\n dismissible: boolean;\n showProgress: boolean;\n action: { label: string; callback: () => void } | null;\n onDismiss: () => void;\n}\n\n@Component({\n selector: 'coar-toast-container',\n standalone: true,\n imports: [CoarToastComponent],\n templateUrl: './coar-toast-container.component.html',\n styleUrl: './coar-toast-container.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '\"coar-toast-container--\" + position()',\n },\n})\nexport class CoarToastContainerComponent {\n @ViewChildren(CoarToastComponent) toastComponents!: QueryList<CoarToastComponent>;\n\n readonly toasts = signal<InternalToast[]>([]);\n readonly position = signal<string>('top-right');\n\n private pendingAutoClose = new Set<number>();\n\n addToast(toast: InternalToast): void {\n const current = this.toasts();\n // Limit to 5 visible toasts max\n const limited = current.length >= 5 ? current.slice(1) : current;\n this.toasts.set([...limited, toast]);\n\n if (toast.duration > 0) {\n this.pendingAutoClose.add(toast.id);\n }\n }\n\n removeToast(id: number): void {\n this.pendingAutoClose.delete(id);\n this.toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n removeAll(): void {\n this.pendingAutoClose.clear();\n this.toasts.set([]);\n }\n\n onDismissed(id: number): void {\n const toast = this.toasts().find((t) => t.id === id);\n if (toast) {\n toast.onDismiss();\n }\n this.removeToast(id);\n }\n\n startAutoCloseForLatest(): void {\n // Use setTimeout to let the view update before querying view children\n setTimeout(() => {\n const components = this.toastComponents?.toArray() ?? [];\n for (const comp of components) {\n comp.startAutoClose();\n }\n });\n }\n}\n","@for (toast of toasts(); track toast.id) {\n <coar-toast\n [variant]=\"toast.variant\"\n [title]=\"toast.title\"\n [message]=\"toast.message\"\n [duration]=\"toast.duration\"\n [dismissible]=\"toast.dismissible\"\n [showProgress]=\"toast.showProgress\"\n [action]=\"toast.action\"\n (dismissed)=\"onDismissed(toast.id)\"\n (actionClicked)=\"onDismissed(toast.id)\"\n />\n}\n","import {\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n Injectable,\n createComponent,\n inject,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { CoarToastContainerComponent, type InternalToast } from './coar-toast-container.component';\nimport { type CoarToastConfig, type CoarToastRef, type CoarToastPosition } from './coar-toast.types';\n\nconst DEFAULT_DURATION = 5000;\nconst ERROR_DURATION = 0;\n\n@Injectable({ providedIn: 'root' })\nexport class CoarToastService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n\n private containerRef: ComponentRef<CoarToastContainerComponent> | null = null;\n private nextId = 0;\n\n success(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'success' });\n }\n\n error(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'error' });\n }\n\n warning(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'warning' });\n }\n\n info(message: string, config?: Partial<CoarToastConfig>): CoarToastRef {\n return this.show({ ...config, message, variant: 'info' });\n }\n\n show(config: CoarToastConfig): CoarToastRef {\n const container = this.getOrCreateContainer(config.position ?? 'top-right');\n const id = this.nextId++;\n const variant = config.variant ?? 'info';\n const duration = config.duration ?? (variant === 'error' ? ERROR_DURATION : DEFAULT_DURATION);\n const afterDismissed$ = new Subject<void>();\n\n const internalToast: InternalToast = {\n id,\n variant,\n title: config.title ?? '',\n message: config.message,\n duration,\n dismissible: config.dismissible ?? true,\n showProgress: config.showProgress ?? true,\n action: config.action ?? null,\n onDismiss: () => {\n afterDismissed$.next();\n afterDismissed$.complete();\n },\n };\n\n container.instance.addToast(internalToast);\n container.instance.startAutoCloseForLatest();\n\n const ref: CoarToastRef = {\n dismiss: () => {\n container.instance.onDismissed(id);\n },\n afterDismissed$: afterDismissed$.asObservable(),\n };\n\n return ref;\n }\n\n dismissAll(): void {\n if (this.containerRef) {\n this.containerRef.instance.removeAll();\n }\n }\n\n private getOrCreateContainer(position: CoarToastPosition): ComponentRef<CoarToastContainerComponent> {\n if (!this.containerRef) {\n this.containerRef = createComponent(CoarToastContainerComponent, {\n environmentInjector: this.injector,\n });\n this.appRef.attachView(this.containerRef.hostView);\n document.body.appendChild(this.containerRef.location.nativeElement);\n }\n\n this.containerRef.instance.position.set(position);\n return this.containerRef;\n }\n}\n","// Overlay/popover components\nexport * from './popover';\nexport * from './tooltip';\nexport * from './popconfirm';\nexport * from './dialog';\nexport * from './toast';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cryptoRandomId"],"mappings":"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"}