@egose/shadcn-theme-ng-tw 0.0.21 → 0.0.22

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.
@@ -217,10 +217,10 @@ class HlmAutocomplete {
217
217
  filteredOptions = input([], ...(ngDevMode ? [{ debugName: "filteredOptions" }] : []));
218
218
  /** The selected value. */
219
219
  value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
220
- _value = linkedSignal(() => this.value());
220
+ _value = linkedSignal(() => this.value(), ...(ngDevMode ? [{ debugName: "_value" }] : []));
221
221
  /** The search query. */
222
222
  search = input(...(ngDevMode ? [undefined, { debugName: "search" }] : []));
223
- _search = linkedSignal(() => this.search() || '');
223
+ _search = linkedSignal(() => this.search() || '', ...(ngDevMode ? [{ debugName: "_search" }] : []));
224
224
  /** Function to transform an option value to a search string. Defaults to identity function for strings. */
225
225
  transformValueToSearch = input(this._config.transformValueToSearch, ...(ngDevMode ? [{ debugName: "transformValueToSearch" }] : []));
226
226
  /** Optional template for rendering each option. */
@@ -239,7 +239,7 @@ class HlmAutocomplete {
239
239
  inputId = input(`hlm-autocomplete-input-${++HlmAutocomplete._id}`, ...(ngDevMode ? [{ debugName: "inputId" }] : []));
240
240
  /** Whether the autocomplete is disabled. */
241
241
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
242
- _disabled = linkedSignal(() => this.disabled());
242
+ _disabled = linkedSignal(() => this.disabled(), ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
243
243
  /** Emitted when the selected value changes. */
244
244
  valueChange = output();
245
245
  /** Emitted when the search query changes. */
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.mjs","sources":["../../../projects/autocomplete/src/lib/autocomplete-empty.ts","../../../projects/autocomplete/src/lib/autocomplete-group.ts","../../../projects/autocomplete/src/lib/autocomplete-item.ts","../../../projects/autocomplete/src/lib/autocomplete-list.ts","../../../projects/autocomplete/src/lib/autocomplete-search.ts","../../../projects/autocomplete/src/lib/autocomplete-search-input.ts","../../../projects/autocomplete/src/lib/autocomplete-trigger.ts","../../../projects/autocomplete/src/lib/autocomplete.token.ts","../../../projects/autocomplete/src/lib/autocomplete.ts","../../../projects/autocomplete/src/public-api.ts","../../../projects/autocomplete/src/autocomplete.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAutocompleteEmpty]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAutocompleteEmpty {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('tw:py-2 tw:text-center tw:text-sm', this.userClass()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteGroup } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'hlm-autocomplete-group',\n template: '<ng-content />',\n hostDirectives: [\n {\n directive: BrnAutocompleteGroup,\n inputs: ['id'],\n },\n ],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteGroup {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm('tw:text-foreground tw:block tw:overflow-hidden tw:p-1', this.userClass()),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteItem } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'button[hlm-autocomplete-item]',\n template: ` <ng-content /> `,\n hostDirectives: [\n {\n directive: BrnAutocompleteItem,\n inputs: ['value', 'disabled', 'id'],\n outputs: ['selected'],\n },\n ],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteItem {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:data-[selected]:bg-accent tw:data-[selected]:text-accent-foreground tw:[&>ng-icon]:text-muted-foreground tw:outline-hidden tw:relative tw:flex tw:w-full tw:cursor-default tw:select-none tw:items-center tw:gap-2 tw:rounded-sm tw:px-2 tw:py-1.5 tw:text-sm tw:data-[disabled]:pointer-events-none tw:data-[hidden]:hidden tw:data-[disabled]:opacity-50 tw:[&>ng-icon]:pointer-events-none tw:[&>ng-icon]:shrink-0 tw:[&>ng-icon]:text-base',\n this.userClass(),\n ),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteList } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'hlm-autocomplete-list',\n template: '<ng-content />',\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [\n {\n directive: BrnAutocompleteList,\n inputs: ['id'],\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteList {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm('tw:block tw:max-h-60 tw:overflow-y-auto tw:overflow-x-hidden', this.userClass()),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { provideHlmIconConfig } from '@egose/shadcn-theme-ng/icon';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-autocomplete-search',\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n providers: [provideHlmIconConfig({ size: 'sm' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteSearch {\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:border-input tw:focus-within:border-ring tw:bg-background tw:focus-within:ring-ring/50 tw:shadow-xs tw:dark:bg-input/10 tw:flex tw:h-9 tw:min-w-0 tw:items-center tw:gap-2 tw:rounded-md tw:border tw:px-3 tw:focus-within:ring-[3px] tw:[&>_ng-icon]:flex-none tw:[&>_ng-icon]:opacity-50',\n this.userClass(),\n ),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteSearchInput } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'input[hlm-autocomplete-search-input]',\n template: '',\n hostDirectives: [{ directive: BrnAutocompleteSearchInput, inputs: ['value'] }],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteSearchInput {\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:placeholder:text-muted-foreground tw:flex tw:h-9 tw:w-full tw:bg-transparent tw:py-1 tw:text-base tw:outline-none tw:disabled:cursor-not-allowed tw:disabled:opacity-50 tw:md:text-sm',\n this.userClass(),\n ),\n );\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, ElementRef, inject, input } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\n\n@Directive({\n selector: '[hlmAutocompleteTrigger]',\n host: {\n '(click)': 'open()',\n },\n})\nexport class HlmAutocompleteTrigger {\n private readonly _host = inject(ElementRef, { host: true });\n\n private readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n /** Whether the trigger is disabled. */\n public readonly disabledTrigger = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n constructor() {\n if (!this._brnDialog) return;\n\n this._brnDialog.mutableAttachTo.set(this._host.nativeElement);\n }\n\n open() {\n if (this.disabledTrigger()) return;\n\n this._brnDialog?.open();\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport type TransformValueToString<T> = (value: T, inputId: string) => string;\n\nexport interface HlmAutocompleteConfig<T> {\n transformValueToSearch: TransformValueToString<T>;\n}\n\nfunction getDefaultConfig<T>(): HlmAutocompleteConfig<T> {\n return {\n transformValueToSearch: (value: T) => (typeof value === 'string' ? value : String(value)),\n };\n}\n\nconst HlmAutocompleteConfigToken = new InjectionToken<HlmAutocompleteConfig<unknown>>('HlmAutocompleteConfig');\n\nexport function provideHlmAutocompleteConfig<T>(config: Partial<HlmAutocompleteConfig<T>>): ValueProvider {\n return { provide: HlmAutocompleteConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmAutocompleteConfig<T>(): HlmAutocompleteConfig<T> {\n return inject(HlmAutocompleteConfigToken, { optional: true }) ?? getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown, lucideSearch } from '@ng-icons/lucide';\nimport { BrnAutocomplete, BrnAutocompleteEmpty } from '@spartan-ng/brain/autocomplete';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent } from '@spartan-ng/brain/popover';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { HlmAutocompleteEmpty } from './autocomplete-empty';\nimport { HlmAutocompleteGroup } from './autocomplete-group';\nimport { HlmAutocompleteItem } from './autocomplete-item';\nimport { HlmAutocompleteList } from './autocomplete-list';\nimport { HlmAutocompleteSearch } from './autocomplete-search';\nimport { HlmAutocompleteSearchInput } from './autocomplete-search-input';\nimport { HlmAutocompleteTrigger } from './autocomplete-trigger';\nimport { injectHlmAutocompleteConfig } from './autocomplete.token';\n\nexport const HLM_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmAutocomplete),\n multi: true,\n};\n\n@Component({\n selector: 'hlm-autocomplete',\n imports: [\n NgTemplateOutlet,\n\n BrnPopover,\n BrnPopoverContent,\n HlmPopoverContent,\n\n BrnAutocomplete,\n BrnAutocompleteEmpty,\n HlmAutocompleteEmpty,\n HlmAutocompleteGroup,\n HlmAutocompleteItem,\n HlmAutocompleteList,\n HlmAutocompleteSearch,\n HlmAutocompleteSearchInput,\n HlmAutocompleteTrigger,\n\n NgIcon,\n HlmIcon,\n ],\n providers: [HLM_AUTOCOMPLETE_VALUE_ACCESSOR, provideIcons({ lucideSearch, lucideChevronDown })],\n template: `\n <brn-popover\n #popover\n align=\"start\"\n autoFocus=\"first-heading\"\n sideOffset=\"5\"\n closeDelay=\"100\"\n [closeOnOutsidePointerEvents]=\"true\"\n >\n <div brnAutocomplete>\n <hlm-autocomplete-search hlmAutocompleteTrigger [disabledTrigger]=\"!_search()\">\n <ng-icon name=\"lucideSearch\" hlm />\n <input\n #input\n type=\"text\"\n autocomplete=\"off\"\n hlm-autocomplete-search-input\n [id]=\"inputId()\"\n [placeholder]=\"searchPlaceholderText()\"\n [disabled]=\"_disabled()\"\n [value]=\"_search()\"\n (input)=\"_onSearchChanged($event)\"\n (keydown.arrowDown)=\"_openPopover()\"\n (click)=\"_click()\"\n />\n\n <button\n class=\"tw:flex tw:items-center tw:justify-center tw:outline-none tw:disabled:cursor-not-allowed tw:[&>_ng-icon]:opacity-50\"\n tabindex=\"-1\"\n type=\"button\"\n [attr.aria-label]=\"ariaLabelToggleButton()\"\n [disabled]=\"_disabled()\"\n (click)=\"_toggleOptions()\"\n >\n <ng-icon name=\"lucideChevronDown\" hlm />\n </button>\n </hlm-autocomplete-search>\n\n <div\n *brnPopoverContent=\"let ctx\"\n hlmPopoverContent\n class=\"tw:p-0\"\n [style.width.px]=\"_elementRef.nativeElement.offsetWidth\"\n >\n <hlm-autocomplete-list\n [class]=\"_computedAutocompleteListClass()\"\n [class.hidden]=\"filteredOptions().length === 0\"\n >\n <hlm-autocomplete-group>\n @for (option of filteredOptions(); track option) {\n <button hlm-autocomplete-item [value]=\"option\" (selected)=\"_optionSelected(option)\">\n @if (optionTemplate(); as optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: option }\" />\n } @else {\n {{ option }}\n }\n </button>\n }\n </hlm-autocomplete-group>\n </hlm-autocomplete-list>\n\n <div *brnAutocompleteEmpty hlmAutocompleteEmpty [class]=\"_computedAutocompleteEmptyClass()\">\n @if (loading()) {\n <ng-content select=\"[loading]\">{{ loadingText() }}</ng-content>\n } @else {\n <ng-content select=\"[empty]\">{{ emptyText() }}</ng-content>\n }\n </div>\n </div>\n </div>\n </brn-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAutocomplete<T> implements ControlValueAccessor {\n private static _id = 0;\n private readonly _config = injectHlmAutocompleteConfig<T>();\n\n private readonly _brnPopover = viewChild.required(BrnPopover);\n private readonly _inputRef = viewChild.required('input', { read: ElementRef });\n\n protected readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n public readonly onSelect = input<(option: string) => void>();\n\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('tw:block tw:w-full', this.userClass()));\n\n /** Custom class for the autocomplete list. */\n public readonly autocompleteListClass = input<ClassValue>('');\n protected readonly _computedAutocompleteListClass = computed(() => hlm('', this.autocompleteListClass()));\n\n /** Custom class for the empty and loading state container. */\n public readonly autocompleteEmptyClass = input<ClassValue>('');\n protected readonly _computedAutocompleteEmptyClass = computed(() => hlm('', this.autocompleteEmptyClass()));\n\n /** The list of filtered options to display in the autocomplete. */\n public readonly filteredOptions = input<T[]>([]);\n\n /** The selected value. */\n public readonly value = input<T>();\n protected readonly _value = linkedSignal(() => this.value());\n\n /** The search query. */\n public readonly search = input<string>();\n protected readonly _search = linkedSignal(() => this.search() || '');\n\n /** Function to transform an option value to a search string. Defaults to identity function for strings. */\n public readonly transformValueToSearch = input<(value: T, inputId: string) => string>(\n this._config.transformValueToSearch,\n );\n\n /** Optional template for rendering each option. */\n public readonly optionTemplate = input<TemplateRef<HlmAutocompleteOption<T>>>();\n\n /** Whether the autocomplete is in a loading state. */\n public readonly loading = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Placeholder text for the input field. */\n public readonly searchPlaceholderText = input('Select an option');\n\n /** Text to display when loading options. */\n public readonly loadingText = input('Loading options...');\n\n /** Text to display when no options are found. */\n public readonly emptyText = input('No options found');\n\n /** Aria label for the toggle button. */\n public readonly ariaLabelToggleButton = input<string>('Toggle options');\n\n /** The id of the input field. */\n public readonly inputId = input<string>(`hlm-autocomplete-input-${++HlmAutocomplete._id}`);\n\n /** Whether the autocomplete is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n protected readonly _disabled = linkedSignal(() => this.disabled());\n\n /** Emitted when the selected value changes. */\n public readonly valueChange = output<T | null>();\n\n /** Emitted when the search query changes. */\n public readonly searchChange = output<string>();\n\n protected _onChange?: ChangeFn<T | null>;\n protected _onTouched?: TouchFn;\n\n protected _setPopoverState(state: 'open' | 'closed') {\n if (state === 'open') {\n this._brnPopover().open();\n } else {\n this._brnPopover().close();\n }\n }\n\n protected _click() {\n this._toggleOptions();\n }\n\n protected _openPopover() {\n if (this._search() || this.filteredOptions().length > 0) {\n // only open if there's a search term or options to show\n this._brnPopover().open();\n }\n }\n\n protected _toggleOptions() {\n if (this._search() || this.filteredOptions().length > 0) {\n // only toggle if there's a search term or options to show\n const state = this._brnPopover().stateComputed();\n this._setPopoverState(state === 'open' ? 'closed' : 'open');\n }\n\n this._inputRef().nativeElement.focus();\n }\n\n protected _onSearchChanged(event: Event) {\n const input = event.target as HTMLInputElement;\n this._search.set(input.value);\n this.searchChange.emit(input.value);\n\n this._clearOption();\n\n if (this._brnPopover().stateComputed() !== 'open' && input.value.length > 0) {\n this._setPopoverState('open');\n }\n }\n\n protected _clearOption() {\n this._value.set(undefined);\n this._onChange?.(null);\n this.valueChange.emit(null);\n }\n\n protected _optionSelected(option: T) {\n this._value.set(option);\n this._onChange?.(option);\n this.valueChange.emit(option);\n\n const searchValue = this.transformValueToSearch()(option, this.inputId());\n\n if (this.onSelect()) {\n this.onSelect()?.(searchValue);\n } else {\n this._search.set(searchValue);\n this.searchChange.emit(searchValue);\n\n this._setPopoverState('closed');\n }\n }\n\n public clearText(): void {\n this._inputRef().nativeElement.value = '';\n this._search.set('');\n this.searchChange.emit('');\n }\n\n public setPopoverState(state: 'open' | 'closed') {\n this._setPopoverState(state);\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T | null): void {\n this._value.set(value ? value : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T | null>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n\nexport interface HlmAutocompleteOption<T> {\n $implicit: T;\n}\n","/*\n * Public API Surface of autocomplete\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmAutocomplete } from './lib/autocomplete';\nimport { HlmAutocompleteEmpty } from './lib/autocomplete-empty';\nimport { HlmAutocompleteGroup } from './lib/autocomplete-group';\nimport { HlmAutocompleteItem } from './lib/autocomplete-item';\nimport { HlmAutocompleteList } from './lib/autocomplete-list';\nimport { HlmAutocompleteSearch } from './lib/autocomplete-search';\nimport { HlmAutocompleteSearchInput } from './lib/autocomplete-search-input';\nimport { HlmAutocompleteTrigger } from './lib/autocomplete-trigger';\n\nexport * from './lib/autocomplete';\nexport * from './lib/autocomplete-empty';\nexport * from './lib/autocomplete-group';\nexport * from './lib/autocomplete-item';\nexport * from './lib/autocomplete-list';\nexport * from './lib/autocomplete-search';\nexport * from './lib/autocomplete-search-input';\nexport * from './lib/autocomplete-trigger';\nexport * from './lib/autocomplete.token';\n\nexport const HlmAutocompleteImports = [\n HlmAutocomplete,\n HlmAutocompleteEmpty,\n HlmAutocompleteGroup,\n HlmAutocompleteItem,\n HlmAutocompleteList,\n HlmAutocompleteSearch,\n HlmAutocompleteSearchInput,\n HlmAutocompleteTrigger,\n] as const;\n\n@NgModule({\n imports: [...HlmAutocompleteImports],\n exports: [...HlmAutocompleteImports],\n})\nexport class HlmAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autocomplete.mjs","sources":["../../../projects/autocomplete/src/lib/autocomplete-empty.ts","../../../projects/autocomplete/src/lib/autocomplete-group.ts","../../../projects/autocomplete/src/lib/autocomplete-item.ts","../../../projects/autocomplete/src/lib/autocomplete-list.ts","../../../projects/autocomplete/src/lib/autocomplete-search.ts","../../../projects/autocomplete/src/lib/autocomplete-search-input.ts","../../../projects/autocomplete/src/lib/autocomplete-trigger.ts","../../../projects/autocomplete/src/lib/autocomplete.token.ts","../../../projects/autocomplete/src/lib/autocomplete.ts","../../../projects/autocomplete/src/public-api.ts","../../../projects/autocomplete/src/autocomplete.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: '[hlmAutocompleteEmpty]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAutocompleteEmpty {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('tw:py-2 tw:text-center tw:text-sm', this.userClass()));\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteGroup } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'hlm-autocomplete-group',\n template: '<ng-content />',\n hostDirectives: [\n {\n directive: BrnAutocompleteGroup,\n inputs: ['id'],\n },\n ],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteGroup {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm('tw:text-foreground tw:block tw:overflow-hidden tw:p-1', this.userClass()),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteItem } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'button[hlm-autocomplete-item]',\n template: ` <ng-content /> `,\n hostDirectives: [\n {\n directive: BrnAutocompleteItem,\n inputs: ['value', 'disabled', 'id'],\n outputs: ['selected'],\n },\n ],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteItem {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:data-[selected]:bg-accent tw:data-[selected]:text-accent-foreground tw:[&>ng-icon]:text-muted-foreground tw:outline-hidden tw:relative tw:flex tw:w-full tw:cursor-default tw:select-none tw:items-center tw:gap-2 tw:rounded-sm tw:px-2 tw:py-1.5 tw:text-sm tw:data-[disabled]:pointer-events-none tw:data-[hidden]:hidden tw:data-[disabled]:opacity-50 tw:[&>ng-icon]:pointer-events-none tw:[&>ng-icon]:shrink-0 tw:[&>ng-icon]:text-base',\n this.userClass(),\n ),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteList } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\n\n@Component({\n selector: 'hlm-autocomplete-list',\n template: '<ng-content />',\n host: {\n '[class]': '_computedClass()',\n },\n hostDirectives: [\n {\n directive: BrnAutocompleteList,\n inputs: ['id'],\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteList {\n /** The user defined class */\n public readonly userClass = input<string>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm('tw:block tw:max-h-60 tw:overflow-y-auto tw:overflow-x-hidden', this.userClass()),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { provideHlmIconConfig } from '@egose/shadcn-theme-ng/icon';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'hlm-autocomplete-search',\n template: ` <ng-content /> `,\n host: {\n '[class]': '_computedClass()',\n },\n providers: [provideHlmIconConfig({ size: 'sm' })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteSearch {\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:border-input tw:focus-within:border-ring tw:bg-background tw:focus-within:ring-ring/50 tw:shadow-xs tw:dark:bg-input/10 tw:flex tw:h-9 tw:min-w-0 tw:items-center tw:gap-2 tw:rounded-md tw:border tw:px-3 tw:focus-within:ring-[3px] tw:[&>_ng-icon]:flex-none tw:[&>_ng-icon]:opacity-50',\n this.userClass(),\n ),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { BrnAutocompleteSearchInput } from '@spartan-ng/brain/autocomplete';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Component({\n selector: 'input[hlm-autocomplete-search-input]',\n template: '',\n hostDirectives: [{ directive: BrnAutocompleteSearchInput, inputs: ['value'] }],\n host: {\n '[class]': '_computedClass()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmAutocompleteSearchInput {\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n /** The styles to apply */\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:placeholder:text-muted-foreground tw:flex tw:h-9 tw:w-full tw:bg-transparent tw:py-1 tw:text-base tw:outline-none tw:disabled:cursor-not-allowed tw:disabled:opacity-50 tw:md:text-sm',\n this.userClass(),\n ),\n );\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, ElementRef, inject, input } from '@angular/core';\nimport { BrnDialog } from '@spartan-ng/brain/dialog';\n\n@Directive({\n selector: '[hlmAutocompleteTrigger]',\n host: {\n '(click)': 'open()',\n },\n})\nexport class HlmAutocompleteTrigger {\n private readonly _host = inject(ElementRef, { host: true });\n\n private readonly _brnDialog = inject(BrnDialog, { optional: true });\n\n /** Whether the trigger is disabled. */\n public readonly disabledTrigger = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n constructor() {\n if (!this._brnDialog) return;\n\n this._brnDialog.mutableAttachTo.set(this._host.nativeElement);\n }\n\n open() {\n if (this.disabledTrigger()) return;\n\n this._brnDialog?.open();\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport type TransformValueToString<T> = (value: T, inputId: string) => string;\n\nexport interface HlmAutocompleteConfig<T> {\n transformValueToSearch: TransformValueToString<T>;\n}\n\nfunction getDefaultConfig<T>(): HlmAutocompleteConfig<T> {\n return {\n transformValueToSearch: (value: T) => (typeof value === 'string' ? value : String(value)),\n };\n}\n\nconst HlmAutocompleteConfigToken = new InjectionToken<HlmAutocompleteConfig<unknown>>('HlmAutocompleteConfig');\n\nexport function provideHlmAutocompleteConfig<T>(config: Partial<HlmAutocompleteConfig<T>>): ValueProvider {\n return { provide: HlmAutocompleteConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmAutocompleteConfig<T>(): HlmAutocompleteConfig<T> {\n return inject(HlmAutocompleteConfigToken, { optional: true }) ?? getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown, lucideSearch } from '@ng-icons/lucide';\nimport { BrnAutocomplete, BrnAutocompleteEmpty } from '@spartan-ng/brain/autocomplete';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent } from '@spartan-ng/brain/popover';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { HlmAutocompleteEmpty } from './autocomplete-empty';\nimport { HlmAutocompleteGroup } from './autocomplete-group';\nimport { HlmAutocompleteItem } from './autocomplete-item';\nimport { HlmAutocompleteList } from './autocomplete-list';\nimport { HlmAutocompleteSearch } from './autocomplete-search';\nimport { HlmAutocompleteSearchInput } from './autocomplete-search-input';\nimport { HlmAutocompleteTrigger } from './autocomplete-trigger';\nimport { injectHlmAutocompleteConfig } from './autocomplete.token';\n\nexport const HLM_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmAutocomplete),\n multi: true,\n};\n\n@Component({\n selector: 'hlm-autocomplete',\n imports: [\n NgTemplateOutlet,\n\n BrnPopover,\n BrnPopoverContent,\n HlmPopoverContent,\n\n BrnAutocomplete,\n BrnAutocompleteEmpty,\n HlmAutocompleteEmpty,\n HlmAutocompleteGroup,\n HlmAutocompleteItem,\n HlmAutocompleteList,\n HlmAutocompleteSearch,\n HlmAutocompleteSearchInput,\n HlmAutocompleteTrigger,\n\n NgIcon,\n HlmIcon,\n ],\n providers: [HLM_AUTOCOMPLETE_VALUE_ACCESSOR, provideIcons({ lucideSearch, lucideChevronDown })],\n template: `\n <brn-popover\n #popover\n align=\"start\"\n autoFocus=\"first-heading\"\n sideOffset=\"5\"\n closeDelay=\"100\"\n [closeOnOutsidePointerEvents]=\"true\"\n >\n <div brnAutocomplete>\n <hlm-autocomplete-search hlmAutocompleteTrigger [disabledTrigger]=\"!_search()\">\n <ng-icon name=\"lucideSearch\" hlm />\n <input\n #input\n type=\"text\"\n autocomplete=\"off\"\n hlm-autocomplete-search-input\n [id]=\"inputId()\"\n [placeholder]=\"searchPlaceholderText()\"\n [disabled]=\"_disabled()\"\n [value]=\"_search()\"\n (input)=\"_onSearchChanged($event)\"\n (keydown.arrowDown)=\"_openPopover()\"\n (click)=\"_click()\"\n />\n\n <button\n class=\"tw:flex tw:items-center tw:justify-center tw:outline-none tw:disabled:cursor-not-allowed tw:[&>_ng-icon]:opacity-50\"\n tabindex=\"-1\"\n type=\"button\"\n [attr.aria-label]=\"ariaLabelToggleButton()\"\n [disabled]=\"_disabled()\"\n (click)=\"_toggleOptions()\"\n >\n <ng-icon name=\"lucideChevronDown\" hlm />\n </button>\n </hlm-autocomplete-search>\n\n <div\n *brnPopoverContent=\"let ctx\"\n hlmPopoverContent\n class=\"tw:p-0\"\n [style.width.px]=\"_elementRef.nativeElement.offsetWidth\"\n >\n <hlm-autocomplete-list\n [class]=\"_computedAutocompleteListClass()\"\n [class.hidden]=\"filteredOptions().length === 0\"\n >\n <hlm-autocomplete-group>\n @for (option of filteredOptions(); track option) {\n <button hlm-autocomplete-item [value]=\"option\" (selected)=\"_optionSelected(option)\">\n @if (optionTemplate(); as optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: option }\" />\n } @else {\n {{ option }}\n }\n </button>\n }\n </hlm-autocomplete-group>\n </hlm-autocomplete-list>\n\n <div *brnAutocompleteEmpty hlmAutocompleteEmpty [class]=\"_computedAutocompleteEmptyClass()\">\n @if (loading()) {\n <ng-content select=\"[loading]\">{{ loadingText() }}</ng-content>\n } @else {\n <ng-content select=\"[empty]\">{{ emptyText() }}</ng-content>\n }\n </div>\n </div>\n </div>\n </brn-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmAutocomplete<T> implements ControlValueAccessor {\n private static _id = 0;\n private readonly _config = injectHlmAutocompleteConfig<T>();\n\n private readonly _brnPopover = viewChild.required(BrnPopover);\n private readonly _inputRef = viewChild.required('input', { read: ElementRef });\n\n protected readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n public readonly onSelect = input<(option: string) => void>();\n\n /** The user defined class */\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() => hlm('tw:block tw:w-full', this.userClass()));\n\n /** Custom class for the autocomplete list. */\n public readonly autocompleteListClass = input<ClassValue>('');\n protected readonly _computedAutocompleteListClass = computed(() => hlm('', this.autocompleteListClass()));\n\n /** Custom class for the empty and loading state container. */\n public readonly autocompleteEmptyClass = input<ClassValue>('');\n protected readonly _computedAutocompleteEmptyClass = computed(() => hlm('', this.autocompleteEmptyClass()));\n\n /** The list of filtered options to display in the autocomplete. */\n public readonly filteredOptions = input<T[]>([]);\n\n /** The selected value. */\n public readonly value = input<T>();\n protected readonly _value = linkedSignal(() => this.value());\n\n /** The search query. */\n public readonly search = input<string>();\n protected readonly _search = linkedSignal(() => this.search() || '');\n\n /** Function to transform an option value to a search string. Defaults to identity function for strings. */\n public readonly transformValueToSearch = input<(value: T, inputId: string) => string>(\n this._config.transformValueToSearch,\n );\n\n /** Optional template for rendering each option. */\n public readonly optionTemplate = input<TemplateRef<HlmAutocompleteOption<T>>>();\n\n /** Whether the autocomplete is in a loading state. */\n public readonly loading = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Placeholder text for the input field. */\n public readonly searchPlaceholderText = input('Select an option');\n\n /** Text to display when loading options. */\n public readonly loadingText = input('Loading options...');\n\n /** Text to display when no options are found. */\n public readonly emptyText = input('No options found');\n\n /** Aria label for the toggle button. */\n public readonly ariaLabelToggleButton = input<string>('Toggle options');\n\n /** The id of the input field. */\n public readonly inputId = input<string>(`hlm-autocomplete-input-${++HlmAutocomplete._id}`);\n\n /** Whether the autocomplete is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n protected readonly _disabled = linkedSignal(() => this.disabled());\n\n /** Emitted when the selected value changes. */\n public readonly valueChange = output<T | null>();\n\n /** Emitted when the search query changes. */\n public readonly searchChange = output<string>();\n\n protected _onChange?: ChangeFn<T | null>;\n protected _onTouched?: TouchFn;\n\n protected _setPopoverState(state: 'open' | 'closed') {\n if (state === 'open') {\n this._brnPopover().open();\n } else {\n this._brnPopover().close();\n }\n }\n\n protected _click() {\n this._toggleOptions();\n }\n\n protected _openPopover() {\n if (this._search() || this.filteredOptions().length > 0) {\n // only open if there's a search term or options to show\n this._brnPopover().open();\n }\n }\n\n protected _toggleOptions() {\n if (this._search() || this.filteredOptions().length > 0) {\n // only toggle if there's a search term or options to show\n const state = this._brnPopover().stateComputed();\n this._setPopoverState(state === 'open' ? 'closed' : 'open');\n }\n\n this._inputRef().nativeElement.focus();\n }\n\n protected _onSearchChanged(event: Event) {\n const input = event.target as HTMLInputElement;\n this._search.set(input.value);\n this.searchChange.emit(input.value);\n\n this._clearOption();\n\n if (this._brnPopover().stateComputed() !== 'open' && input.value.length > 0) {\n this._setPopoverState('open');\n }\n }\n\n protected _clearOption() {\n this._value.set(undefined);\n this._onChange?.(null);\n this.valueChange.emit(null);\n }\n\n protected _optionSelected(option: T) {\n this._value.set(option);\n this._onChange?.(option);\n this.valueChange.emit(option);\n\n const searchValue = this.transformValueToSearch()(option, this.inputId());\n\n if (this.onSelect()) {\n this.onSelect()?.(searchValue);\n } else {\n this._search.set(searchValue);\n this.searchChange.emit(searchValue);\n\n this._setPopoverState('closed');\n }\n }\n\n public clearText(): void {\n this._inputRef().nativeElement.value = '';\n this._search.set('');\n this.searchChange.emit('');\n }\n\n public setPopoverState(state: 'open' | 'closed') {\n this._setPopoverState(state);\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T | null): void {\n this._value.set(value ? value : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T | null>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n\nexport interface HlmAutocompleteOption<T> {\n $implicit: T;\n}\n","/*\n * Public API Surface of autocomplete\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmAutocomplete } from './lib/autocomplete';\nimport { HlmAutocompleteEmpty } from './lib/autocomplete-empty';\nimport { HlmAutocompleteGroup } from './lib/autocomplete-group';\nimport { HlmAutocompleteItem } from './lib/autocomplete-item';\nimport { HlmAutocompleteList } from './lib/autocomplete-list';\nimport { HlmAutocompleteSearch } from './lib/autocomplete-search';\nimport { HlmAutocompleteSearchInput } from './lib/autocomplete-search-input';\nimport { HlmAutocompleteTrigger } from './lib/autocomplete-trigger';\n\nexport * from './lib/autocomplete';\nexport * from './lib/autocomplete-empty';\nexport * from './lib/autocomplete-group';\nexport * from './lib/autocomplete-item';\nexport * from './lib/autocomplete-list';\nexport * from './lib/autocomplete-search';\nexport * from './lib/autocomplete-search-input';\nexport * from './lib/autocomplete-trigger';\nexport * from './lib/autocomplete.token';\n\nexport const HlmAutocompleteImports = [\n HlmAutocomplete,\n HlmAutocompleteEmpty,\n HlmAutocompleteGroup,\n HlmAutocompleteItem,\n HlmAutocompleteList,\n HlmAutocompleteSearch,\n HlmAutocompleteSearchInput,\n HlmAutocompleteTrigger,\n] as const;\n\n@NgModule({\n imports: [...HlmAutocompleteImports],\n exports: [...HlmAutocompleteImports],\n})\nexport class HlmAutocompleteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -48,7 +48,7 @@ class HlmDatePicker extends BrnFormFieldControl {
48
48
  }]));
49
49
  /** The selected value. */
50
50
  date = input(...(ngDevMode ? [undefined, { debugName: "date" }] : []));
51
- _mutableDate = linkedSignal(this.date);
51
+ _mutableDate = linkedSignal(this.date, ...(ngDevMode ? [{ debugName: "_mutableDate" }] : []));
52
52
  /** If true, the date picker will close when a date is selected. */
53
53
  autoCloseOnSelect = input(this._config.autoCloseOnSelect, ...(ngDevMode ? [{ debugName: "autoCloseOnSelect", transform: booleanAttribute }] : [{
54
54
  transform: booleanAttribute,
@@ -58,7 +58,7 @@ class HlmDatePicker extends BrnFormFieldControl {
58
58
  /** Defines how the date should be transformed before saving to model/form. */
59
59
  transformDate = input(this._config.transformDate, ...(ngDevMode ? [{ debugName: "transformDate" }] : []));
60
60
  _popoverState = signal(null, ...(ngDevMode ? [{ debugName: "_popoverState" }] : []));
61
- _mutableDisabled = linkedSignal(this.disabled);
61
+ _mutableDisabled = linkedSignal(this.disabled, ...(ngDevMode ? [{ debugName: "_mutableDisabled" }] : []));
62
62
  _formattedDate = computed(() => {
63
63
  const date = this._mutableDate();
64
64
  return date ? this.formatDate()(date) : undefined;
@@ -235,7 +235,7 @@ class HlmDatePickerMulti {
235
235
  }]));
236
236
  /** The selected value. */
237
237
  date = input(...(ngDevMode ? [undefined, { debugName: "date" }] : []));
238
- _mutableDate = linkedSignal(this.date);
238
+ _mutableDate = linkedSignal(this.date, ...(ngDevMode ? [{ debugName: "_mutableDate" }] : []));
239
239
  /** If true, the date picker will close when the max selection of dates is reached. */
240
240
  autoCloseOnMaxSelection = input(this._config.autoCloseOnMaxSelection, ...(ngDevMode ? [{ debugName: "autoCloseOnMaxSelection", transform: booleanAttribute }] : [{
241
241
  transform: booleanAttribute,
@@ -245,7 +245,7 @@ class HlmDatePickerMulti {
245
245
  /** Defines how the date should be transformed before saving to model/form. */
246
246
  transformDates = input(this._config.transformDates, ...(ngDevMode ? [{ debugName: "transformDates" }] : []));
247
247
  _popoverState = signal(null, ...(ngDevMode ? [{ debugName: "_popoverState" }] : []));
248
- _mutableDisabled = linkedSignal(this.disabled);
248
+ _mutableDisabled = linkedSignal(this.disabled, ...(ngDevMode ? [{ debugName: "_mutableDisabled" }] : []));
249
249
  _formattedDate = computed(() => {
250
250
  const dates = this._mutableDate();
251
251
  return dates ? this.formatDates()(dates) : undefined;
@@ -409,9 +409,9 @@ class HlmDateRangePicker {
409
409
  }]));
410
410
  /** The selected value. */
411
411
  date = input(...(ngDevMode ? [undefined, { debugName: "date" }] : []));
412
- _mutableDate = linkedSignal(this.date);
413
- _start = linkedSignal(() => this._mutableDate()?.[0]);
414
- _end = linkedSignal(() => this._mutableDate()?.[1]);
412
+ _mutableDate = linkedSignal(this.date, ...(ngDevMode ? [{ debugName: "_mutableDate" }] : []));
413
+ _start = linkedSignal(() => this._mutableDate()?.[0], ...(ngDevMode ? [{ debugName: "_start" }] : []));
414
+ _end = linkedSignal(() => this._mutableDate()?.[1], ...(ngDevMode ? [{ debugName: "_end" }] : []));
415
415
  /** If true, the date picker will close when the end date is selected */
416
416
  autoCloseOnEndSelection = input(this._config.autoCloseOnEndSelection, ...(ngDevMode ? [{ debugName: "autoCloseOnEndSelection", transform: booleanAttribute }] : [{
417
417
  transform: booleanAttribute,
@@ -421,7 +421,7 @@ class HlmDateRangePicker {
421
421
  /** Defines how the date should be transformed before saving to model/form. */
422
422
  transformDates = input(this._config.transformDates, ...(ngDevMode ? [{ debugName: "transformDates" }] : []));
423
423
  _popoverState = signal(null, ...(ngDevMode ? [{ debugName: "_popoverState" }] : []));
424
- _mutableDisabled = linkedSignal(this.disabled);
424
+ _mutableDisabled = linkedSignal(this.disabled, ...(ngDevMode ? [{ debugName: "_mutableDisabled" }] : []));
425
425
  _formattedDate = computed(() => {
426
426
  const start = this._start();
427
427
  const end = this._end();
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.mjs","sources":["../../../projects/date-picker/src/lib/date-picker.token.ts","../../../projects/date-picker/src/lib/date-picker.ts","../../../projects/date-picker/src/lib/date-picker-multi.token.ts","../../../projects/date-picker/src/lib/date-picker-multi.ts","../../../projects/date-picker/src/lib/date-range-picker.token.ts","../../../projects/date-picker/src/lib/date-range-picker.ts","../../../projects/date-picker/src/public-api.ts","../../../projects/date-picker/src/date-picker.ts"],"sourcesContent":["import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDatePickerConfig<T> {\n /**\n * If true, the date picker will close when a date is selected.\n */\n autoCloseOnSelect: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param date\n * @returns formatted date\n */\n formatDate: (date: T) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param date\n * @returns transformed date\n */\n transformDate: (date: T) => T;\n}\n\nfunction getDefaultConfig<T>(): HlmDatePickerConfig<T> {\n return {\n formatDate: (date) => (date instanceof Date ? date.toDateString() : `${date}`),\n transformDate: (date) => date,\n autoCloseOnSelect: false,\n };\n}\n\nconst HlmDatePickerConfigToken = new InjectionToken<HlmDatePickerConfig<unknown>>('HlmDatePickerConfig');\n\nexport function provideHlmDatePickerConfig<T>(config: Partial<HlmDatePickerConfig<T>>): ValueProvider {\n return { provide: HlmDatePickerConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDatePickerConfig<T>(): HlmDatePickerConfig<T> {\n const injectedConfig = inject(HlmDatePickerConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDatePickerConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { HlmCalendar } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDatePickerConfig } from './date-picker.token';\n\nexport const HLM_DATE_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDatePicker),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-picker',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendar],\n providers: [\n HLM_DATE_PICKER_VALUE_ACCESSOR,\n provideIcons({ lucideChevronDown }),\n {\n provide: BrnFormFieldControl,\n useExisting: forwardRef(() => HlmDatePicker),\n },\n ],\n template: `\n <brn-popover sideOffset=\"5\" [state]=\"_popoverState()\" (stateChanged)=\"_popoverState.set($event)\">\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"tw:w-auto tw:p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar\n calendarClass=\"tw:border-0 tw:rounded-none\"\n [date]=\"_mutableDate()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabled]=\"_mutableDisabled()\"\n (dateChange)=\"_handleChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDatePicker<T> extends BrnFormFieldControl implements ControlValueAccessor {\n private readonly _config = injectHlmDatePickerConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-input/50 tw:dark:bg-input/10 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-full tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<T>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n /** If true, the date picker will close when a date is selected. */\n public readonly autoCloseOnSelect = input<boolean, BooleanInput>(this._config.autoCloseOnSelect, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDate = input<(date: T) => string>(this._config.formatDate);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDate = input<(date: T) => T>(this._config.transformDate);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const date = this._mutableDate();\n return date ? this.formatDate()(date) : undefined;\n });\n\n public readonly dateChange = output<T>();\n\n protected _onChange?: ChangeFn<T>;\n protected _onTouched?: TouchFn;\n\n protected _handleChange(value: T) {\n if (this._mutableDisabled()) return;\n const transformedDate = this.transformDate()(value);\n\n this._mutableDate.set(transformedDate);\n this._onChange?.(transformedDate);\n this.dateChange.emit(transformedDate);\n\n if (this.autoCloseOnSelect()) {\n this._popoverState.set('closed');\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T | null): void {\n this._mutableDate.set(value ? this.transformDate()(value) : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDatePickerMultiConfig<T> {\n /**\n * If true, the date picker will close when the max selection of dates is reached.\n */\n autoCloseOnMaxSelection: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param dates\n * @returns formatted date\n */\n formatDates: (dates: T[]) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param dates\n * @returns transformed date\n */\n transformDates: (dates: T[]) => T[];\n}\n\nfunction getDefaultConfig<T>(): HlmDatePickerMultiConfig<T> {\n return {\n formatDates: (dates) => dates.map((date) => (date instanceof Date ? date.toDateString() : `${date}`)).join(', '),\n transformDates: (dates) => dates,\n autoCloseOnMaxSelection: false,\n };\n}\n\nconst HlmDatePickerMultiConfigToken = new InjectionToken<HlmDatePickerMultiConfig<unknown>>('HlmDatePickerMultiConfig');\n\nexport function provideHlmDatePickerMultiConfig<T>(config: Partial<HlmDatePickerMultiConfig<T>>): ValueProvider {\n return { provide: HlmDatePickerMultiConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDatePickerMultiConfig<T>(): HlmDatePickerMultiConfig<T> {\n const injectedConfig = inject(HlmDatePickerMultiConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDatePickerMultiConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { HlmCalendarMulti } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDatePickerMultiConfig } from './date-picker-multi.token';\n\nexport const HLM_DATE_PICKER_MUTLI_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDatePickerMulti),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-picker-multi',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendarMulti],\n providers: [HLM_DATE_PICKER_MUTLI_VALUE_ACCESSOR, provideIcons({ lucideChevronDown })],\n template: `\n <brn-popover sideOffset=\"5\" [state]=\"_popoverState()\" (stateChanged)=\"_popoverState.set($event)\">\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"w-auto p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar-multi\n calendarClass=\"border-0 rounded-none\"\n [date]=\"_mutableDate()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [minSelection]=\"minSelection()\"\n [maxSelection]=\"maxSelection()\"\n [disabled]=\"_mutableDisabled()\"\n (dateChange)=\"_handleChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDatePickerMulti<T> implements ControlValueAccessor {\n private readonly _config = injectHlmDatePickerMultiConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-accent tw:dark:bg-input/30 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-[280px] tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-multi-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** The minimum selectable dates. */\n public readonly minSelection = input<number, NumberInput>(undefined, {\n transform: numberAttribute,\n });\n\n /** The maximum selectable dates. */\n public readonly maxSelection = input<number, NumberInput>(undefined, {\n transform: numberAttribute,\n });\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<T[]>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n /** If true, the date picker will close when the max selection of dates is reached. */\n public readonly autoCloseOnMaxSelection = input<boolean, BooleanInput>(this._config.autoCloseOnMaxSelection, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDates = input<(date: T[]) => string>(this._config.formatDates);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDates = input<(date: T[]) => T[]>(this._config.transformDates);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const dates = this._mutableDate();\n return dates ? this.formatDates()(dates) : undefined;\n });\n\n public readonly dateChange = output<T[]>();\n\n protected _onChange?: ChangeFn<T[]>;\n protected _onTouched?: TouchFn;\n\n protected _handleChange(value: T[] | undefined) {\n if (value === undefined) return;\n\n if (this._mutableDisabled()) return;\n const transformedDate = this.transformDates()(value);\n\n this._mutableDate.set(transformedDate);\n this._onChange?.(transformedDate);\n this.dateChange.emit(transformedDate);\n\n if (this.autoCloseOnMaxSelection() && this._mutableDate()?.length === this.maxSelection()) {\n this._popoverState.set('closed');\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T[] | null): void {\n this._mutableDate.set(value ? this.transformDates()(value) : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T[]>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDateRangePickerConfig<T> {\n /**\n * If true, the date picker will close when the max selection of dates is reached.\n */\n autoCloseOnEndSelection: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param dates\n * @returns formatted date\n */\n formatDates: (dates: [T | undefined, T | undefined]) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param dates\n * @returns transformed date\n */\n transformDates: (dates: [T, T]) => [T, T];\n}\n\nfunction getDefaultConfig<T>(): HlmDateRangePickerConfig<T> {\n return {\n formatDates: (dates) =>\n dates\n .filter(Boolean)\n .map((date) => (date instanceof Date ? date.toDateString() : `${date}`))\n .join(' - '),\n transformDates: (dates) => dates,\n autoCloseOnEndSelection: false,\n };\n}\n\nconst HlmDateRangePickerConfigToken = new InjectionToken<HlmDateRangePickerConfig<unknown>>('HlmDateRangePickerConfig');\n\nexport function provideHlmDateRangePickerConfig<T>(config: Partial<HlmDateRangePickerConfig<T>>): ValueProvider {\n return { provide: HlmDateRangePickerConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDateRangePickerConfig<T>(): HlmDateRangePickerConfig<T> {\n const injectedConfig = inject(HlmDateRangePickerConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDateRangePickerConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { HlmCalendarRange } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDateRangePickerConfig } from './date-range-picker.token';\n\nexport const HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDateRangePicker),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-range-picker',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendarRange],\n providers: [HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR, provideIcons({ lucideChevronDown })],\n template: `\n <brn-popover\n sideOffset=\"5\"\n [state]=\"_popoverState()\"\n (stateChanged)=\"_popoverState.set($event)\"\n (closed)=\"_onClose()\"\n >\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"tw:w-auto tw:p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar-range\n calendarClass=\"tw:border-0 tw:rounded-none\"\n [startDate]=\"_start()\"\n [endDate]=\"_end()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabled]=\"_mutableDisabled()\"\n (startDateChange)=\"_handleStartDayChange($event)\"\n (endDateChange)=\"_handleEndDateChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDateRangePicker<T> implements ControlValueAccessor {\n private readonly _config = injectHlmDateRangePickerConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-accent tw:dark:bg-input/30 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-[280px] tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-range-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<[T, T]>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n protected readonly _start = linkedSignal(() => this._mutableDate()?.[0]);\n protected readonly _end = linkedSignal(() => this._mutableDate()?.[1]);\n\n /** If true, the date picker will close when the end date is selected */\n public readonly autoCloseOnEndSelection = input<boolean, BooleanInput>(this._config.autoCloseOnEndSelection, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDates = input<(dates: [T | undefined, T | undefined]) => string>(this._config.formatDates);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDates = input<(date: [T, T]) => [T, T]>(this._config.transformDates);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const start = this._start();\n const end = this._end();\n return start || end ? this.formatDates()([start, end]) : undefined;\n });\n\n public readonly dateChange = output<[T, T] | null>();\n\n protected _onChange?: ChangeFn<[T, T] | null>;\n protected _onTouched?: TouchFn;\n\n protected _handleStartDayChange(value: T) {\n this._start.set(value);\n }\n\n protected _handleEndDateChange(value: T): void {\n this._end.set(value);\n if (this._mutableDisabled()) return;\n\n const start = this._start();\n if (start && value) {\n const transformedDates = this.transformDates()([start, value]);\n this._mutableDate.set(transformedDates);\n this.dateChange.emit(transformedDates);\n this._onChange?.(transformedDates);\n\n if (this.autoCloseOnEndSelection()) {\n this._popoverState.set('closed');\n }\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: [T, T] | null): void {\n untracked(() => {\n if (!value) {\n this._mutableDate.set(undefined);\n } else {\n this._mutableDate.set(this.transformDates()(value));\n }\n });\n }\n\n public registerOnChange(fn: ChangeFn<[T, T] | null>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n\n protected _onClose(): void {\n const dates = this._mutableDate();\n if (this._start() && !this._end() && dates) {\n this._start.set(dates[0]);\n this._end.set(dates[1]);\n }\n }\n}\n","/*\n * Public API Surface of date-picker\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmDatePicker } from './lib/date-picker';\nimport { HlmDatePickerMulti } from './lib/date-picker-multi';\nimport { HlmDateRangePicker } from './lib/date-range-picker';\n\nexport * from './lib/date-picker-multi.token';\nexport * from './lib/date-picker.token';\n\nexport * from './lib/date-picker';\nexport * from './lib/date-picker-multi';\nexport * from './lib/date-range-picker';\nexport * from './lib/date-range-picker.token';\n\nexport const HlmDatePickerImports = [HlmDatePicker, HlmDatePickerMulti, HlmDateRangePicker] as const;\n\n@NgModule({\n imports: [...HlmDatePickerImports],\n exports: [...HlmDatePickerImports],\n})\nexport class HlmDatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getDefaultConfig","nextId"],"mappings":";;;;;;;;;;;;AAyBA,SAASA,kBAAgB,GAAA;IACvB,OAAO;QACL,UAAU,EAAE,CAAC,IAAI,MAAM,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;AAC9E,QAAA,aAAa,EAAE,CAAC,IAAI,KAAK,IAAI;AAC7B,QAAA,iBAAiB,EAAE,KAAK;KACzB;AACH;AAEA,MAAM,wBAAwB,GAAG,IAAI,cAAc,CAA+B,qBAAqB,CAAC;AAElG,SAAU,0BAA0B,CAAI,MAAuC,EAAA;AACnF,IAAA,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,EAAE,GAAGA,kBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;AAC9F;SAEgB,yBAAyB,GAAA;AACvC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3E,OAAO,cAAc,GAAI,cAAyC,GAAGA,kBAAgB,EAAE;AACzF;;AChBO,MAAM,8BAA8B,GAAG;AAC5C,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,IAAA,KAAK,EAAE,IAAI;;AAGb,IAAIC,QAAM,GAAG,CAAC;AAkDR,MAAO,aAAiB,SAAQ,mBAAmB,CAAA;IACtC,OAAO,GAAG,yBAAyB,EAAK;AAEzC,IAAA,SAAS,GAAG,KAAK,CAAa,EAAE,6CAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAC;IAClD,cAAc,GAAG,QAAQ,CAAC,MAC3C,GAAG,CACD,0YAA0Y,EAC1Y,iHAAiH,EACjH,wDAAwD,EACxD,4DAA4D,EAC5D,IAAI,CAAC,SAAS,EAAE,CACjB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;;IAGe,QAAQ,GAAG,KAAK,CAAS,CAAA,gBAAA,EAAmBA,QAAM,EAAE,CAAA,CAAE,oDAAC;;IAGvD,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC3D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADkC;AAC7D,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;AAEd,IAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGzC,IAAA,iBAAiB,GAAG,KAAK,CAAwB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAC7F,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADoE;AAC/F,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,UAAU,GAAG,KAAK,CAAsB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGhE,aAAa,GAAG,KAAK,CAAiB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE9D,IAAA,aAAa,GAAG,MAAM,CAAwB,IAAI,yDAAC;AAEnD,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9C,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS;AACnD,IAAA,CAAC,0DAAC;IAEc,UAAU,GAAG,MAAM,EAAK;AAE9B,IAAA,SAAS;AACT,IAAA,UAAU;AAEV,IAAA,aAAa,CAAC,KAAQ,EAAA;QAC9B,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAAE;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;AAEnD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC;IACF;;AAGO,IAAA,UAAU,CAAC,KAAe,EAAA;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACxE;AAEO,IAAA,gBAAgB,CAAC,EAAe,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEO,IAAA,iBAAiB,CAAC,EAAW,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;uGA9FW,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EA7Cb;YACT,8BAA8B;AAC9B,YAAA,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACnC,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC7C,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxCS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8ChG,aAAa,EAAA,UAAA,EAAA,CAAA;kBAhDzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,CAAC;AAC5G,oBAAA,SAAS,EAAE;wBACT,8BAA8B;AAC9B,wBAAA,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACnC,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC7C,yBAAA;AACF,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,OAAO;AACf,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACxDD,SAASD,kBAAgB,GAAA;IACvB,OAAO;AACL,QAAA,WAAW,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAA,EAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAChH,QAAA,cAAc,EAAE,CAAC,KAAK,KAAK,KAAK;AAChC,QAAA,uBAAuB,EAAE,KAAK;KAC/B;AACH;AAEA,MAAM,6BAA6B,GAAG,IAAI,cAAc,CAAoC,0BAA0B,CAAC;AAEjH,SAAU,+BAA+B,CAAI,MAA4C,EAAA;AAC7F,IAAA,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,EAAE,GAAGA,kBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;AACnG;SAEgB,8BAA8B,GAAA;AAC5C,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChF,OAAO,cAAc,GAAI,cAA8C,GAAGA,kBAAgB,EAAE;AAC9F;;AChBO,MAAM,oCAAoC,GAAG;AAClD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,IAAA,KAAK,EAAE,IAAI;;AAGb,IAAIC,QAAM,GAAG,CAAC;MA6CD,kBAAkB,CAAA;IACZ,OAAO,GAAG,8BAA8B,EAAK;AAE9C,IAAA,SAAS,GAAG,KAAK,CAAa,EAAE,6CAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAC;IAClD,cAAc,GAAG,QAAQ,CAAC,MAC3C,GAAG,CACD,2YAA2Y,EAC3Y,iHAAiH,EACjH,wDAAwD,EACxD,4DAA4D,EAC5D,IAAI,CAAC,SAAS,EAAE,CACjB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;;IAGe,QAAQ,GAAG,KAAK,CAAS,CAAA,sBAAA,EAAyBA,QAAM,EAAE,CAAA,CAAE,oDAAC;;IAG7D,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,YAAY,GAAG,KAAK,CAAsB,SAAS,gDACjE,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CADyC;AACnE,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA,CAAA,CAAA,CAAC;;IAGc,YAAY,GAAG,KAAK,CAAsB,SAAS,gDACjE,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CADyC;AACnE,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA,CAAA,CAAA,CAAC;;IAGc,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC3D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADkC;AAC7D,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AAEhB,IAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGzC,IAAA,uBAAuB,GAAG,KAAK,CAAwB,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,yBAAA,EACzG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADgF;AAC3G,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,WAAW,GAAG,KAAK,CAAwB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGpE,cAAc,GAAG,KAAK,CAAqB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEpE,IAAA,aAAa,GAAG,MAAM,CAAwB,IAAI,yDAAC;AAEnD,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9C,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS;AACtD,IAAA,CAAC,0DAAC;IAEc,UAAU,GAAG,MAAM,EAAO;AAEhC,IAAA,SAAS;AACT,IAAA,UAAU;AAEV,IAAA,aAAa,CAAC,KAAsB,EAAA;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE;QAEzB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAAE;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;AACzF,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC;IACF;;AAGO,IAAA,UAAU,CAAC,KAAiB,EAAA;QACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACzE;AAEO,IAAA,gBAAgB,CAAC,EAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEO,IAAA,iBAAiB,CAAC,EAAW,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;uGA1GW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAxClB,CAAC,oCAAoC,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnCS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,cAAA,EAAA,cAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyCrG,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA3C9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;oBACjH,SAAS,EAAE,CAAC,oCAAoC,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACtF,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,OAAO;AACf,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACnDD,SAAS,gBAAgB,GAAA;IACvB,OAAO;AACL,QAAA,WAAW,EAAE,CAAC,KAAK,KACjB;aACG,MAAM,CAAC,OAAO;aACd,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;aACtE,IAAI,CAAC,KAAK,CAAC;AAChB,QAAA,cAAc,EAAE,CAAC,KAAK,KAAK,KAAK;AAChC,QAAA,uBAAuB,EAAE,KAAK;KAC/B;AACH;AAEA,MAAM,6BAA6B,GAAG,IAAI,cAAc,CAAoC,0BAA0B,CAAC;AAEjH,SAAU,+BAA+B,CAAI,MAA4C,EAAA;AAC7F,IAAA,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;AACnG;SAEgB,8BAA8B,GAAA;AAC5C,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChF,OAAO,cAAc,GAAI,cAA8C,GAAG,gBAAgB,EAAE;AAC9F;;ACpBO,MAAM,oCAAoC,GAAG;AAClD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,IAAA,KAAK,EAAE,IAAI;;AAGb,IAAI,MAAM,GAAG,CAAC;MAkDD,kBAAkB,CAAA;IACZ,OAAO,GAAG,8BAA8B,EAAK;AAE9C,IAAA,SAAS,GAAG,KAAK,CAAa,EAAE,6CAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAC;IAClD,cAAc,GAAG,QAAQ,CAAC,MAC3C,GAAG,CACD,2YAA2Y,EAC3Y,iHAAiH,EACjH,wDAAwD,EACxD,4DAA4D,EAC5D,IAAI,CAAC,SAAS,EAAE,CACjB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;;IAGe,QAAQ,GAAG,KAAK,CAAS,CAAA,sBAAA,EAAyB,MAAM,EAAE,CAAA,CAAE,oDAAC;;IAG7D,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;;IAGhB,QAAQ,GAAG,KAAK,CAAwB,KAAK,4CAC3D,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADkC;AAC7D,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEnB,IAAA,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAEtC,IAAA,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD,IAAA,IAAI,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;;AAGtD,IAAA,uBAAuB,GAAG,KAAK,CAAwB,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,yBAAA,EACzG,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADgF;AAC3G,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;;IAGc,WAAW,GAAG,KAAK,CAAoD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAGhG,cAAc,GAAG,KAAK,CAA2B,IAAI,CAAC,OAAO,CAAC,cAAc,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE1E,IAAA,aAAa,GAAG,MAAM,CAAwB,IAAI,yDAAC;AAEnD,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9C,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;QACvB,OAAO,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;AACpE,IAAA,CAAC,0DAAC;IAEc,UAAU,GAAG,MAAM,EAAiB;AAE1C,IAAA,SAAS;AACT,IAAA,UAAU;AAEV,IAAA,qBAAqB,CAAC,KAAQ,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEU,IAAA,oBAAoB,CAAC,KAAQ,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAAE;AAE7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,IAAI,KAAK,IAAI,KAAK,EAAE;AAClB,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACtC,YAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;AAElC,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC;QACF;IACF;;AAGO,IAAA,UAAU,CAAC,KAAoB,EAAA;QACpC,SAAS,CAAC,MAAK;YACb,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAClC;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;YACrD;AACF,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEO,IAAA,iBAAiB,CAAC,EAAW,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;IAEU,QAAQ,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB;IACF;uGAxHW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EA7ClB,CAAC,oCAAoC,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxCS,MAAM,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8CrG,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhD9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;oBACjH,SAAS,EAAE,CAAC,oCAAoC,EAAE,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACtF,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCT,EAAA,CAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,OAAO;AACf,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;ACjFD;;AAEG;AAeI,MAAM,oBAAoB,GAAG,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB;MAM7E,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAnB,mBAAmB,EAAA,OAAA,EAAA,CANK,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAArD,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,CAAA,EAAA,CAAA;AAM7E,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAHjB,oBAAoB,CAAA,EAAA,CAAA;;2FAGtB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,oBAAoB,CAAC;AAClC,oBAAA,OAAO,EAAE,CAAC,GAAG,oBAAoB,CAAC;AACnC,iBAAA;;;ACtBD;;AAEG;;;;"}
1
+ {"version":3,"file":"date-picker.mjs","sources":["../../../projects/date-picker/src/lib/date-picker.token.ts","../../../projects/date-picker/src/lib/date-picker.ts","../../../projects/date-picker/src/lib/date-picker-multi.token.ts","../../../projects/date-picker/src/lib/date-picker-multi.ts","../../../projects/date-picker/src/lib/date-range-picker.token.ts","../../../projects/date-picker/src/lib/date-range-picker.ts","../../../projects/date-picker/src/public-api.ts","../../../projects/date-picker/src/date-picker.ts"],"sourcesContent":["import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDatePickerConfig<T> {\n /**\n * If true, the date picker will close when a date is selected.\n */\n autoCloseOnSelect: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param date\n * @returns formatted date\n */\n formatDate: (date: T) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param date\n * @returns transformed date\n */\n transformDate: (date: T) => T;\n}\n\nfunction getDefaultConfig<T>(): HlmDatePickerConfig<T> {\n return {\n formatDate: (date) => (date instanceof Date ? date.toDateString() : `${date}`),\n transformDate: (date) => date,\n autoCloseOnSelect: false,\n };\n}\n\nconst HlmDatePickerConfigToken = new InjectionToken<HlmDatePickerConfig<unknown>>('HlmDatePickerConfig');\n\nexport function provideHlmDatePickerConfig<T>(config: Partial<HlmDatePickerConfig<T>>): ValueProvider {\n return { provide: HlmDatePickerConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDatePickerConfig<T>(): HlmDatePickerConfig<T> {\n const injectedConfig = inject(HlmDatePickerConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDatePickerConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { HlmCalendar } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDatePickerConfig } from './date-picker.token';\n\nexport const HLM_DATE_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDatePicker),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-picker',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendar],\n providers: [\n HLM_DATE_PICKER_VALUE_ACCESSOR,\n provideIcons({ lucideChevronDown }),\n {\n provide: BrnFormFieldControl,\n useExisting: forwardRef(() => HlmDatePicker),\n },\n ],\n template: `\n <brn-popover sideOffset=\"5\" [state]=\"_popoverState()\" (stateChanged)=\"_popoverState.set($event)\">\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"tw:w-auto tw:p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar\n calendarClass=\"tw:border-0 tw:rounded-none\"\n [date]=\"_mutableDate()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabled]=\"_mutableDisabled()\"\n (dateChange)=\"_handleChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDatePicker<T> extends BrnFormFieldControl implements ControlValueAccessor {\n private readonly _config = injectHlmDatePickerConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-input/50 tw:dark:bg-input/10 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-full tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<T>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n /** If true, the date picker will close when a date is selected. */\n public readonly autoCloseOnSelect = input<boolean, BooleanInput>(this._config.autoCloseOnSelect, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDate = input<(date: T) => string>(this._config.formatDate);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDate = input<(date: T) => T>(this._config.transformDate);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const date = this._mutableDate();\n return date ? this.formatDate()(date) : undefined;\n });\n\n public readonly dateChange = output<T>();\n\n protected _onChange?: ChangeFn<T>;\n protected _onTouched?: TouchFn;\n\n protected _handleChange(value: T) {\n if (this._mutableDisabled()) return;\n const transformedDate = this.transformDate()(value);\n\n this._mutableDate.set(transformedDate);\n this._onChange?.(transformedDate);\n this.dateChange.emit(transformedDate);\n\n if (this.autoCloseOnSelect()) {\n this._popoverState.set('closed');\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T | null): void {\n this._mutableDate.set(value ? this.transformDate()(value) : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDatePickerMultiConfig<T> {\n /**\n * If true, the date picker will close when the max selection of dates is reached.\n */\n autoCloseOnMaxSelection: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param dates\n * @returns formatted date\n */\n formatDates: (dates: T[]) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param dates\n * @returns transformed date\n */\n transformDates: (dates: T[]) => T[];\n}\n\nfunction getDefaultConfig<T>(): HlmDatePickerMultiConfig<T> {\n return {\n formatDates: (dates) => dates.map((date) => (date instanceof Date ? date.toDateString() : `${date}`)).join(', '),\n transformDates: (dates) => dates,\n autoCloseOnMaxSelection: false,\n };\n}\n\nconst HlmDatePickerMultiConfigToken = new InjectionToken<HlmDatePickerMultiConfig<unknown>>('HlmDatePickerMultiConfig');\n\nexport function provideHlmDatePickerMultiConfig<T>(config: Partial<HlmDatePickerMultiConfig<T>>): ValueProvider {\n return { provide: HlmDatePickerMultiConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDatePickerMultiConfig<T>(): HlmDatePickerMultiConfig<T> {\n const injectedConfig = inject(HlmDatePickerMultiConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDatePickerMultiConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { HlmCalendarMulti } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDatePickerMultiConfig } from './date-picker-multi.token';\n\nexport const HLM_DATE_PICKER_MUTLI_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDatePickerMulti),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-picker-multi',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendarMulti],\n providers: [HLM_DATE_PICKER_MUTLI_VALUE_ACCESSOR, provideIcons({ lucideChevronDown })],\n template: `\n <brn-popover sideOffset=\"5\" [state]=\"_popoverState()\" (stateChanged)=\"_popoverState.set($event)\">\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"w-auto p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar-multi\n calendarClass=\"border-0 rounded-none\"\n [date]=\"_mutableDate()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [minSelection]=\"minSelection()\"\n [maxSelection]=\"maxSelection()\"\n [disabled]=\"_mutableDisabled()\"\n (dateChange)=\"_handleChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDatePickerMulti<T> implements ControlValueAccessor {\n private readonly _config = injectHlmDatePickerMultiConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-accent tw:dark:bg-input/30 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-[280px] tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-multi-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** The minimum selectable dates. */\n public readonly minSelection = input<number, NumberInput>(undefined, {\n transform: numberAttribute,\n });\n\n /** The maximum selectable dates. */\n public readonly maxSelection = input<number, NumberInput>(undefined, {\n transform: numberAttribute,\n });\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<T[]>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n /** If true, the date picker will close when the max selection of dates is reached. */\n public readonly autoCloseOnMaxSelection = input<boolean, BooleanInput>(this._config.autoCloseOnMaxSelection, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDates = input<(date: T[]) => string>(this._config.formatDates);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDates = input<(date: T[]) => T[]>(this._config.transformDates);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const dates = this._mutableDate();\n return dates ? this.formatDates()(dates) : undefined;\n });\n\n public readonly dateChange = output<T[]>();\n\n protected _onChange?: ChangeFn<T[]>;\n protected _onTouched?: TouchFn;\n\n protected _handleChange(value: T[] | undefined) {\n if (value === undefined) return;\n\n if (this._mutableDisabled()) return;\n const transformedDate = this.transformDates()(value);\n\n this._mutableDate.set(transformedDate);\n this._onChange?.(transformedDate);\n this.dateChange.emit(transformedDate);\n\n if (this.autoCloseOnMaxSelection() && this._mutableDate()?.length === this.maxSelection()) {\n this._popoverState.set('closed');\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: T[] | null): void {\n this._mutableDate.set(value ? this.transformDates()(value) : undefined);\n }\n\n public registerOnChange(fn: ChangeFn<T[]>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n}\n","import { inject, InjectionToken, ValueProvider } from '@angular/core';\n\nexport interface HlmDateRangePickerConfig<T> {\n /**\n * If true, the date picker will close when the max selection of dates is reached.\n */\n autoCloseOnEndSelection: boolean;\n\n /**\n * Defines how the date should be displayed in the UI.\n *\n * @param dates\n * @returns formatted date\n */\n formatDates: (dates: [T | undefined, T | undefined]) => string;\n\n /**\n * Defines how the date should be transformed before saving to model/form.\n *\n * @param dates\n * @returns transformed date\n */\n transformDates: (dates: [T, T]) => [T, T];\n}\n\nfunction getDefaultConfig<T>(): HlmDateRangePickerConfig<T> {\n return {\n formatDates: (dates) =>\n dates\n .filter(Boolean)\n .map((date) => (date instanceof Date ? date.toDateString() : `${date}`))\n .join(' - '),\n transformDates: (dates) => dates,\n autoCloseOnEndSelection: false,\n };\n}\n\nconst HlmDateRangePickerConfigToken = new InjectionToken<HlmDateRangePickerConfig<unknown>>('HlmDateRangePickerConfig');\n\nexport function provideHlmDateRangePickerConfig<T>(config: Partial<HlmDateRangePickerConfig<T>>): ValueProvider {\n return { provide: HlmDateRangePickerConfigToken, useValue: { ...getDefaultConfig(), ...config } };\n}\n\nexport function injectHlmDateRangePickerConfig<T>(): HlmDateRangePickerConfig<T> {\n const injectedConfig = inject(HlmDateRangePickerConfigToken, { optional: true });\n return injectedConfig ? (injectedConfig as HlmDateRangePickerConfig<T>) : getDefaultConfig();\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n linkedSignal,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideChevronDown } from '@ng-icons/lucide';\nimport { BrnDialogState } from '@spartan-ng/brain/dialog';\nimport { type ChangeFn, type TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnPopover, BrnPopoverContent, BrnPopoverTrigger } from '@spartan-ng/brain/popover';\nimport { HlmCalendarRange } from '@egose/shadcn-theme-ng/calendar';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { HlmPopoverContent } from '@egose/shadcn-theme-ng/popover';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { injectHlmDateRangePickerConfig } from './date-range-picker.token';\n\nexport const HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmDateRangePicker),\n multi: true,\n};\n\nlet nextId = 0;\n\n@Component({\n selector: 'hlm-date-range-picker',\n imports: [NgIcon, HlmIcon, BrnPopover, BrnPopoverTrigger, BrnPopoverContent, HlmPopoverContent, HlmCalendarRange],\n providers: [HLM_DATE_RANGE_PICKER_VALUE_ACCESSOR, provideIcons({ lucideChevronDown })],\n template: `\n <brn-popover\n sideOffset=\"5\"\n [state]=\"_popoverState()\"\n (stateChanged)=\"_popoverState.set($event)\"\n (closed)=\"_onClose()\"\n >\n <button\n [id]=\"buttonId()\"\n type=\"button\"\n [class]=\"_computedClass()\"\n [disabled]=\"_mutableDisabled()\"\n brnPopoverTrigger\n >\n <span class=\"truncate\">\n @if (_formattedDate(); as formattedDate) {\n {{ formattedDate }}\n } @else {\n <ng-content />\n }\n </span>\n\n <ng-icon hlm size=\"sm\" name=\"lucideChevronDown\" />\n </button>\n\n <div hlmPopoverContent class=\"tw:w-auto tw:p-0\" *brnPopoverContent=\"let ctx\">\n <hlm-calendar-range\n calendarClass=\"tw:border-0 tw:rounded-none\"\n [startDate]=\"_start()\"\n [endDate]=\"_end()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabled]=\"_mutableDisabled()\"\n (startDateChange)=\"_handleStartDayChange($event)\"\n (endDateChange)=\"_handleEndDateChange($event)\"\n />\n </div>\n </brn-popover>\n `,\n host: {\n class: 'block',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmDateRangePicker<T> implements ControlValueAccessor {\n private readonly _config = injectHlmDateRangePickerConfig<T>();\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:ring-offset-background tw:border-input tw:bg-background tw:hover:bg-accent tw:dark:bg-input/30 tw:dark:hover:bg-input/50 tw:inline-flex tw:h-9 tw:w-[280px] tw:cursor-default tw:items-center tw:justify-between tw:gap-2 tw:whitespace-nowrap tw:rounded-md tw:border tw:px-3 tw:py-2 tw:text-left tw:text-sm tw:font-normal tw:transition-all tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:focus-visible:ring-ring tw:focus-visible:outline-none tw:focus-visible:ring-2 tw:focus-visible:ring-offset-2',\n 'tw:disabled:pointer-events-none tw:disabled:opacity-50',\n 'tw:[&_ng-icon]:pointer-events-none tw:[&_ng-icon]:shrink-0',\n this.userClass(),\n ),\n );\n\n /** The id of the button that opens the date picker. */\n public readonly buttonId = input<string>(`hlm-date-picker-range-${nextId++}`);\n\n /** The minimum date that can be selected.*/\n public readonly min = input<T>();\n\n /** The maximum date that can be selected. */\n public readonly max = input<T>();\n\n /** Determine if the date picker is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** The selected value. */\n public readonly date = input<[T, T]>();\n\n protected readonly _mutableDate = linkedSignal(this.date);\n\n protected readonly _start = linkedSignal(() => this._mutableDate()?.[0]);\n protected readonly _end = linkedSignal(() => this._mutableDate()?.[1]);\n\n /** If true, the date picker will close when the end date is selected */\n public readonly autoCloseOnEndSelection = input<boolean, BooleanInput>(this._config.autoCloseOnEndSelection, {\n transform: booleanAttribute,\n });\n\n /** Defines how the date should be displayed in the UI. */\n public readonly formatDates = input<(dates: [T | undefined, T | undefined]) => string>(this._config.formatDates);\n\n /** Defines how the date should be transformed before saving to model/form. */\n public readonly transformDates = input<(date: [T, T]) => [T, T]>(this._config.transformDates);\n\n protected readonly _popoverState = signal<BrnDialogState | null>(null);\n\n protected readonly _mutableDisabled = linkedSignal(this.disabled);\n\n protected readonly _formattedDate = computed(() => {\n const start = this._start();\n const end = this._end();\n return start || end ? this.formatDates()([start, end]) : undefined;\n });\n\n public readonly dateChange = output<[T, T] | null>();\n\n protected _onChange?: ChangeFn<[T, T] | null>;\n protected _onTouched?: TouchFn;\n\n protected _handleStartDayChange(value: T) {\n this._start.set(value);\n }\n\n protected _handleEndDateChange(value: T): void {\n this._end.set(value);\n if (this._mutableDisabled()) return;\n\n const start = this._start();\n if (start && value) {\n const transformedDates = this.transformDates()([start, value]);\n this._mutableDate.set(transformedDates);\n this.dateChange.emit(transformedDates);\n this._onChange?.(transformedDates);\n\n if (this.autoCloseOnEndSelection()) {\n this._popoverState.set('closed');\n }\n }\n }\n\n /** CONTROL VALUE ACCESSOR */\n public writeValue(value: [T, T] | null): void {\n untracked(() => {\n if (!value) {\n this._mutableDate.set(undefined);\n } else {\n this._mutableDate.set(this.transformDates()(value));\n }\n });\n }\n\n public registerOnChange(fn: ChangeFn<[T, T] | null>): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._mutableDisabled.set(isDisabled);\n }\n\n public open() {\n this._popoverState.set('open');\n }\n\n public close() {\n this._popoverState.set('closed');\n }\n\n protected _onClose(): void {\n const dates = this._mutableDate();\n if (this._start() && !this._end() && dates) {\n this._start.set(dates[0]);\n this._end.set(dates[1]);\n }\n }\n}\n","/*\n * Public API Surface of date-picker\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmDatePicker } from './lib/date-picker';\nimport { HlmDatePickerMulti } from './lib/date-picker-multi';\nimport { HlmDateRangePicker } from './lib/date-range-picker';\n\nexport * from './lib/date-picker-multi.token';\nexport * from './lib/date-picker.token';\n\nexport * from './lib/date-picker';\nexport * from './lib/date-picker-multi';\nexport * from './lib/date-range-picker';\nexport * from './lib/date-range-picker.token';\n\nexport const HlmDatePickerImports = [HlmDatePicker, HlmDatePickerMulti, HlmDateRangePicker] as const;\n\n@NgModule({\n imports: [...HlmDatePickerImports],\n exports: [...HlmDatePickerImports],\n})\nexport class HlmDatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["getDefaultConfig","nextId"],"mappings":"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"}
@@ -19,7 +19,7 @@ const inputVariants = cva('tw:file:text-foreground tw:placeholder:text-muted-for
19
19
  });
20
20
  class HlmInput {
21
21
  error = input('auto', ...(ngDevMode ? [{ debugName: "error" }] : []));
22
- _state = linkedSignal(() => ({ error: this.error() }));
22
+ _state = linkedSignal(() => ({ error: this.error() }), ...(ngDevMode ? [{ debugName: "_state" }] : []));
23
23
  userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
24
24
  _computedClass = computed(() => hlm(inputVariants({ error: this._state().error }), this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
25
25
  _injector = inject(Injector);
@@ -1 +1 @@
1
- {"version":3,"file":"input.mjs","sources":["../../../projects/input/src/lib/input.ts","../../../projects/input/src/public-api.ts","../../../projects/input/src/input.ts"],"sourcesContent":["import {\n computed,\n Directive,\n type DoCheck,\n effect,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n untracked,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\n\nexport const inputVariants = cva(\n 'tw:file:text-foreground tw:placeholder:text-muted-foreground tw:selection:bg-primary tw:selection:text-primary-foreground tw:dark:bg-input/10 tw:border-input tw:shadow-xs tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:flex tw:h-9 tw:w-full tw:min-w-0 tw:rounded-md tw:border tw:bg-transparent tw:px-3 tw:py-1 tw:text-base tw:outline-none tw:transition-[color,box-shadow] tw:file:inline-flex tw:file:h-7 tw:file:border-0 tw:file:bg-transparent tw:file:text-sm tw:file:font-medium tw:focus-visible:ring-[3px] tw:disabled:pointer-events-none tw:disabled:cursor-not-allowed tw:disabled:opacity-50 md:text-sm',\n {\n variants: {\n error: {\n auto: 'tw:[&.ng-invalid.ng-touched]:text-destructive/20 tw:dark:[&.ng-invalid.ng-touched]:text-destructive/40 tw:[&.ng-invalid.ng-touched]:border-destructive tw:[&.ng-invalid.ng-touched]:focus-visible:ring-destructive',\n true: 'tw:text-destructive/90 dark:text-destructive/60 tw:border-destructive tw:focus-visible:ring-destructive',\n },\n },\n defaultVariants: {\n error: 'auto',\n },\n },\n);\ntype InputVariants = VariantProps<typeof inputVariants>;\n\n@Directive({\n selector: '[hlmInput]',\n host: {\n '[class]': '_computedClass()',\n },\n providers: [\n {\n provide: BrnFormFieldControl,\n useExisting: forwardRef(() => HlmInput),\n },\n ],\n})\nexport class HlmInput implements BrnFormFieldControl, DoCheck {\n public readonly error = input<InputVariants['error']>('auto');\n\n protected readonly _state = linkedSignal(() => ({ error: this.error() }));\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(inputVariants({ error: this._state().error }), this.userClass()),\n );\n\n private readonly _injector = inject(Injector);\n\n public readonly ngControl: NgControl | null = this._injector.get(NgControl, null);\n\n private readonly _errorStateTracker: ErrorStateTracker;\n\n private readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly _parentForm = inject(NgForm, { optional: true });\n private readonly _parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n public readonly errorState = computed(() => this._errorStateTracker.errorState());\n\n constructor() {\n this._errorStateTracker = new ErrorStateTracker(\n this._defaultErrorStateMatcher,\n this.ngControl,\n this._parentFormGroup,\n this._parentForm,\n );\n\n effect(() => {\n const error = this._errorStateTracker.errorState();\n untracked(() => {\n if (this.ngControl) {\n const shouldShowError = error && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty);\n this._errorStateTracker.errorState.set(shouldShowError ? true : false);\n this.setError(shouldShowError ? true : 'auto');\n }\n });\n });\n }\n\n ngDoCheck() {\n this._errorStateTracker.updateErrorState();\n }\n\n setError(error: InputVariants['error']) {\n this._state.set({ error });\n }\n}\n","/*\n * Public API Surface of input\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmInput } from './lib/input';\n\nexport * from './lib/input';\n\nexport const HlmInputImpots = [HlmInput] as const;\n\n@NgModule({\n imports: [...HlmInputImpots],\n exports: [...HlmInputImpots],\n})\nexport class HlmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.mjs","sources":["../../../projects/input/src/lib/input.ts","../../../projects/input/src/public-api.ts","../../../projects/input/src/input.ts"],"sourcesContent":["import {\n computed,\n Directive,\n type DoCheck,\n effect,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n untracked,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { BrnFormFieldControl } from '@spartan-ng/brain/form-field';\nimport { ErrorStateMatcher, ErrorStateTracker } from '@spartan-ng/brain/forms';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\n\nexport const inputVariants = cva(\n 'tw:file:text-foreground tw:placeholder:text-muted-foreground tw:selection:bg-primary tw:selection:text-primary-foreground tw:dark:bg-input/10 tw:border-input tw:shadow-xs tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:flex tw:h-9 tw:w-full tw:min-w-0 tw:rounded-md tw:border tw:bg-transparent tw:px-3 tw:py-1 tw:text-base tw:outline-none tw:transition-[color,box-shadow] tw:file:inline-flex tw:file:h-7 tw:file:border-0 tw:file:bg-transparent tw:file:text-sm tw:file:font-medium tw:focus-visible:ring-[3px] tw:disabled:pointer-events-none tw:disabled:cursor-not-allowed tw:disabled:opacity-50 md:text-sm',\n {\n variants: {\n error: {\n auto: 'tw:[&.ng-invalid.ng-touched]:text-destructive/20 tw:dark:[&.ng-invalid.ng-touched]:text-destructive/40 tw:[&.ng-invalid.ng-touched]:border-destructive tw:[&.ng-invalid.ng-touched]:focus-visible:ring-destructive',\n true: 'tw:text-destructive/90 dark:text-destructive/60 tw:border-destructive tw:focus-visible:ring-destructive',\n },\n },\n defaultVariants: {\n error: 'auto',\n },\n },\n);\ntype InputVariants = VariantProps<typeof inputVariants>;\n\n@Directive({\n selector: '[hlmInput]',\n host: {\n '[class]': '_computedClass()',\n },\n providers: [\n {\n provide: BrnFormFieldControl,\n useExisting: forwardRef(() => HlmInput),\n },\n ],\n})\nexport class HlmInput implements BrnFormFieldControl, DoCheck {\n public readonly error = input<InputVariants['error']>('auto');\n\n protected readonly _state = linkedSignal(() => ({ error: this.error() }));\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(inputVariants({ error: this._state().error }), this.userClass()),\n );\n\n private readonly _injector = inject(Injector);\n\n public readonly ngControl: NgControl | null = this._injector.get(NgControl, null);\n\n private readonly _errorStateTracker: ErrorStateTracker;\n\n private readonly _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly _parentForm = inject(NgForm, { optional: true });\n private readonly _parentFormGroup = inject(FormGroupDirective, { optional: true });\n\n public readonly errorState = computed(() => this._errorStateTracker.errorState());\n\n constructor() {\n this._errorStateTracker = new ErrorStateTracker(\n this._defaultErrorStateMatcher,\n this.ngControl,\n this._parentFormGroup,\n this._parentForm,\n );\n\n effect(() => {\n const error = this._errorStateTracker.errorState();\n untracked(() => {\n if (this.ngControl) {\n const shouldShowError = error && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty);\n this._errorStateTracker.errorState.set(shouldShowError ? true : false);\n this.setError(shouldShowError ? true : 'auto');\n }\n });\n });\n }\n\n ngDoCheck() {\n this._errorStateTracker.updateErrorState();\n }\n\n setError(error: InputVariants['error']) {\n this._state.set({ error });\n }\n}\n","/*\n * Public API Surface of input\n */\n\nimport { NgModule } from '@angular/core';\nimport { HlmInput } from './lib/input';\n\nexport * from './lib/input';\n\nexport const HlmInputImpots = [HlmInput] as const;\n\n@NgModule({\n imports: [...HlmInputImpots],\n exports: [...HlmInputImpots],\n})\nexport class HlmInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -291,6 +291,7 @@ class EgLayoutSimple {
291
291
  logoClass = input('', ...(ngDevMode ? [{ debugName: "logoClass", alias: 'logoClass' }] : [{ alias: 'logoClass' }]));
292
292
  headerClass = input('', ...(ngDevMode ? [{ debugName: "headerClass", alias: 'headerClass' }] : [{ alias: 'headerClass' }]));
293
293
  contentClass = input('', ...(ngDevMode ? [{ debugName: "contentClass", alias: 'contentClass' }] : [{ alias: 'contentClass' }]));
294
+ contentBottomClass = input('', ...(ngDevMode ? [{ debugName: "contentBottomClass", alias: 'contentBottomClass' }] : [{ alias: 'contentBottomClass' }]));
294
295
  /** Container class inputs */
295
296
  leftMenuClass = input('', ...(ngDevMode ? [{ debugName: "leftMenuClass", alias: 'leftClass' }] : [{ alias: 'leftClass' }]));
296
297
  rightMenuClass = input('', ...(ngDevMode ? [{ debugName: "rightMenuClass", alias: 'rightClass' }] : [{ alias: 'rightClass' }]));
@@ -298,6 +299,7 @@ class EgLayoutSimple {
298
299
  leftLinkClass = input('', ...(ngDevMode ? [{ debugName: "leftLinkClass", alias: 'leftLinkClass' }] : [{ alias: 'leftLinkClass' }]));
299
300
  rightLinkClass = input('', ...(ngDevMode ? [{ debugName: "rightLinkClass", alias: 'rightLinkClass' }] : [{ alias: 'rightLinkClass' }]));
300
301
  searchEnabled = input(false, ...(ngDevMode ? [{ debugName: "searchEnabled" }] : []));
302
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
301
303
  searchPlaceholderText = input('Select an page', ...(ngDevMode ? [{ debugName: "searchPlaceholderText" }] : []));
302
304
  searchEmptyText = input('No pages found', ...(ngDevMode ? [{ debugName: "searchEmptyText" }] : []));
303
305
  searchOptionTemplate = input(...(ngDevMode ? [undefined, { debugName: "searchOptionTemplate" }] : []));
@@ -306,7 +308,8 @@ class EgLayoutSimple {
306
308
  searchOptionChange = output();
307
309
  _logoClass = computed(() => hlm('tw:h-10', this.logoClass()), ...(ngDevMode ? [{ debugName: "_logoClass" }] : []));
308
310
  _headerClass = computed(() => hlm('tw:px-4 tw:py-2 tw:flex tw:items-center tw:justify-between tw:bg-gray-100 tw:border-b tw:border-gray-300', this.headerClass()), ...(ngDevMode ? [{ debugName: "_headerClass" }] : []));
309
- _contentClass = computed(() => hlm('tw:p-4', this.contentClass()), ...(ngDevMode ? [{ debugName: "_contentClass" }] : []));
311
+ _contentClass = computed(() => hlm('tw:p-4 tw:flex tw:flex-col tw:flex-1', this.contentClass()), ...(ngDevMode ? [{ debugName: "_contentClass" }] : []));
312
+ _contentBottomClass = computed(() => hlm('tw:flex-1', this.contentBottomClass()), ...(ngDevMode ? [{ debugName: "_contentBottomClass" }] : []));
310
313
  /** Computed merged classes for containers */
311
314
  _computedLeftClass = computed(() => hlm(commonLinkGroupClasses, this.leftMenuClass()), ...(ngDevMode ? [{ debugName: "_computedLeftClass" }] : []));
312
315
  _computedRightClass = computed(() => hlm(commonLinkGroupClasses, this.rightMenuClass()), ...(ngDevMode ? [{ debugName: "_computedRightClass" }] : []));
@@ -339,11 +342,11 @@ class EgLayoutSimple {
339
342
  this.searchOptionChange.emit(value);
340
343
  }
341
344
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimple, deps: [{ token: i1$1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
342
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimple, isStandalone: true, selector: "eg-layout-simple", inputs: { leftMenus: { classPropertyName: "leftMenus", publicName: "leftMenus", isSignal: true, isRequired: false, transformFunction: null }, rightMenus: { classPropertyName: "rightMenus", publicName: "rightMenus", isSignal: true, isRequired: false, transformFunction: null }, userMenus: { classPropertyName: "userMenus", publicName: "userMenus", isSignal: true, isRequired: false, transformFunction: null }, logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: false, transformFunction: null }, logoLink: { classPropertyName: "logoLink", publicName: "logoLink", isSignal: true, isRequired: false, transformFunction: null }, logoClass: { classPropertyName: "logoClass", publicName: "logoClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, contentClass: { classPropertyName: "contentClass", publicName: "contentClass", isSignal: true, isRequired: false, transformFunction: null }, leftMenuClass: { classPropertyName: "leftMenuClass", publicName: "leftClass", isSignal: true, isRequired: false, transformFunction: null }, rightMenuClass: { classPropertyName: "rightMenuClass", publicName: "rightClass", isSignal: true, isRequired: false, transformFunction: null }, leftLinkClass: { classPropertyName: "leftLinkClass", publicName: "leftLinkClass", isSignal: true, isRequired: false, transformFunction: null }, rightLinkClass: { classPropertyName: "rightLinkClass", publicName: "rightLinkClass", isSignal: true, isRequired: false, transformFunction: null }, searchEnabled: { classPropertyName: "searchEnabled", publicName: "searchEnabled", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderText: { classPropertyName: "searchPlaceholderText", publicName: "searchPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchEmptyText: { classPropertyName: "searchEmptyText", publicName: "searchEmptyText", isSignal: true, isRequired: false, transformFunction: null }, searchOptionTemplate: { classPropertyName: "searchOptionTemplate", publicName: "searchOptionTemplate", isSignal: true, isRequired: false, transformFunction: null }, searchLoaderFn: { classPropertyName: "searchLoaderFn", publicName: "searchLoaderFn", isSignal: true, isRequired: false, transformFunction: null }, searchTransformValueToSearch: { classPropertyName: "searchTransformValueToSearch", publicName: "searchTransformValueToSearch", isSignal: true, isRequired: false, transformFunction: null }, footerEnabled: { classPropertyName: "footerEnabled", publicName: "footerEnabled", isSignal: true, isRequired: false, transformFunction: null }, footerMenus: { classPropertyName: "footerMenus", publicName: "footerMenus", isSignal: true, isRequired: false, transformFunction: null }, footerMenuClass: { classPropertyName: "footerMenuClass", publicName: "footerMenuClass", isSignal: true, isRequired: false, transformFunction: null }, footerLinkClass: { classPropertyName: "footerLinkClass", publicName: "footerLinkClass", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchOptionChange: "searchOptionChange" }, ngImport: i0, template: "<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n <ng-content />\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: EgLayoutSimpleUserMenu, selector: "eg-layout-simple-user-menu", inputs: ["menus"] }, { kind: "component", type: EgGenericAutocomplete, selector: "eg-generic-autocomplete", inputs: ["controlId", "placeholderText", "emptyText", "optionTemplate", "loaderFn", "transformValueToSearch"], outputs: ["optionChange"] }] });
345
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: EgLayoutSimple, isStandalone: true, selector: "eg-layout-simple", inputs: { leftMenus: { classPropertyName: "leftMenus", publicName: "leftMenus", isSignal: true, isRequired: false, transformFunction: null }, rightMenus: { classPropertyName: "rightMenus", publicName: "rightMenus", isSignal: true, isRequired: false, transformFunction: null }, userMenus: { classPropertyName: "userMenus", publicName: "userMenus", isSignal: true, isRequired: false, transformFunction: null }, logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: false, transformFunction: null }, logoLink: { classPropertyName: "logoLink", publicName: "logoLink", isSignal: true, isRequired: false, transformFunction: null }, logoClass: { classPropertyName: "logoClass", publicName: "logoClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, contentClass: { classPropertyName: "contentClass", publicName: "contentClass", isSignal: true, isRequired: false, transformFunction: null }, contentBottomClass: { classPropertyName: "contentBottomClass", publicName: "contentBottomClass", isSignal: true, isRequired: false, transformFunction: null }, leftMenuClass: { classPropertyName: "leftMenuClass", publicName: "leftClass", isSignal: true, isRequired: false, transformFunction: null }, rightMenuClass: { classPropertyName: "rightMenuClass", publicName: "rightClass", isSignal: true, isRequired: false, transformFunction: null }, leftLinkClass: { classPropertyName: "leftLinkClass", publicName: "leftLinkClass", isSignal: true, isRequired: false, transformFunction: null }, rightLinkClass: { classPropertyName: "rightLinkClass", publicName: "rightLinkClass", isSignal: true, isRequired: false, transformFunction: null }, searchEnabled: { classPropertyName: "searchEnabled", publicName: "searchEnabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholderText: { classPropertyName: "searchPlaceholderText", publicName: "searchPlaceholderText", isSignal: true, isRequired: false, transformFunction: null }, searchEmptyText: { classPropertyName: "searchEmptyText", publicName: "searchEmptyText", isSignal: true, isRequired: false, transformFunction: null }, searchOptionTemplate: { classPropertyName: "searchOptionTemplate", publicName: "searchOptionTemplate", isSignal: true, isRequired: false, transformFunction: null }, searchLoaderFn: { classPropertyName: "searchLoaderFn", publicName: "searchLoaderFn", isSignal: true, isRequired: false, transformFunction: null }, searchTransformValueToSearch: { classPropertyName: "searchTransformValueToSearch", publicName: "searchTransformValueToSearch", isSignal: true, isRequired: false, transformFunction: null }, footerEnabled: { classPropertyName: "footerEnabled", publicName: "footerEnabled", isSignal: true, isRequired: false, transformFunction: null }, footerMenus: { classPropertyName: "footerMenus", publicName: "footerMenus", isSignal: true, isRequired: false, transformFunction: null }, footerMenuClass: { classPropertyName: "footerMenuClass", publicName: "footerMenuClass", isSignal: true, isRequired: false, transformFunction: null }, footerLinkClass: { classPropertyName: "footerLinkClass", publicName: "footerLinkClass", isSignal: true, isRequired: false, transformFunction: null }, footerContent: { classPropertyName: "footerContent", publicName: "footerContent", isSignal: true, isRequired: false, transformFunction: null }, footerClass: { classPropertyName: "footerClass", publicName: "footerClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchOptionChange: "searchOptionChange" }, ngImport: i0, template: "<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"tw:flex tw:items-center tw:justify-center tw:h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: EgLayoutSimpleUserMenu, selector: "eg-layout-simple-user-menu", inputs: ["menus"] }, { kind: "component", type: EgGenericAutocomplete, selector: "eg-generic-autocomplete", inputs: ["controlId", "placeholderText", "emptyText", "optionTemplate", "loaderFn", "transformValueToSearch"], outputs: ["optionChange"] }] });
343
346
  }
344
347
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgLayoutSimple, decorators: [{
345
348
  type: Component,
346
- args: [{ selector: 'eg-layout-simple', standalone: true, imports: [RouterLink, EgLayoutSimpleUserMenu, EgGenericAutocomplete], template: "<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n <ng-content />\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n" }]
349
+ args: [{ selector: 'eg-layout-simple', standalone: true, imports: [RouterLink, EgLayoutSimpleUserMenu, EgGenericAutocomplete], template: "<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"tw:flex tw:items-center tw:justify-center tw:h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n" }]
347
350
  }], ctorParameters: () => [{ type: i1$1.BreakpointObserver }] });
348
351
 
349
352
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"layout-simple.mjs","sources":["../../../projects/layout-simple/src/lib/user-menu.ts","../../../projects/layout-simple/src/lib/search.ts","../../../projects/layout-simple/src/lib/layout.ts","../../../projects/layout-simple/src/lib/layout.html","../../../projects/layout-simple/src/public-api.ts","../../../projects/layout-simple/src/layout-simple.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { provideIcons } from '@ng-icons/core';\nimport { lucideUser } from '@ng-icons/lucide';\nimport { RouterLink } from '@angular/router';\nimport { BrnMenuTrigger } from '@spartan-ng/brain/menu';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { HlmButton } from '@egose/shadcn-theme-ng/button';\nimport { HlmMenu, HlmMenuGroup, HlmMenuItem, HlmMenuLabel, HlmMenuSeparator } from '@egose/shadcn-theme-ng/menu';\nimport { NgIcon } from '@ng-icons/core';\n\n// Interface for menu items\nexport interface UserMenuItem {\n label: string;\n icon?: any;\n action?: () => void;\n link?: string;\n class?: string;\n}\n\n// Interface for menu sections\nexport interface UserMenuSection {\n label?: string;\n separator?: boolean;\n items?: UserMenuItem[];\n}\n\n@Component({\n selector: 'eg-layout-simple-user-menu',\n imports: [\n BrnMenuTrigger,\n HlmMenu,\n HlmMenuItem,\n HlmMenuLabel,\n HlmMenuSeparator,\n HlmMenuGroup,\n HlmButton,\n NgIcon,\n RouterLink,\n ],\n providers: [\n provideIcons({\n lucideUser,\n }),\n ],\n template: `\n <ng-template #iconTemplate>\n <ng-icon [svg]=\"lucideUser\" size=\"1.5rem\" class=\"tw:[&_svg]:w-[inherit]! tw:[&_svg]:h-[inherit]!\" />\n </ng-template>\n\n <div class=\"tw:flex tw:w-full tw:items-center tw:justify-center tw:pt-[20%]\">\n <button\n hlmButton\n variant=\"primary\"\n size=\"icon\"\n align=\"end\"\n [brnMenuTriggerFor]=\"menu\"\n [icon]=\"iconTemplate\"\n class=\"tw:rounded-full tw:border tw:border-gray-400\"\n ></button>\n </div>\n\n <ng-template #menu>\n <hlm-menu class=\"tw:w-56\">\n @for (section of menus(); track section) {\n @if (section.label) {\n <hlm-menu-label>{{ section.label }}</hlm-menu-label>\n }\n @if (section.items?.length) {\n <hlm-menu-group>\n @for (item of section.items; track item) {\n @if (item.link) {\n <a hlmMenuItem [routerLink]=\"item.link\" [class]=\"hlm('tw:cursor-pointer', item.class)\">\n @if (item.icon) {\n <ng-icon\n [svg]=\"item.icon\"\n size=\"1rem\"\n [class]=\"\n hlm('tw:[_svg]:text-[inherit]! tw:[_svg]:bg-[inherit]! tw:cursor-pointer tw:mr-2', item.class)\n \"\n />\n }\n <span>{{ item.label }}</span>\n </a>\n } @else {\n <button hlmMenuItem (click)=\"item.action?.()\" [class]=\"hlm('tw:cursor-pointer', item.class)\">\n @if (item.icon) {\n <ng-icon\n [svg]=\"item.icon\"\n size=\"1rem\"\n [class]=\"\n hlm('tw:[_svg]:text-[inherit]! tw:[_svg]:bg-[inherit]! tw:cursor-pointer tw:mr-2', item.class)\n \"\n />\n }\n <span>{{ item.label }}</span>\n </button>\n }\n }\n </hlm-menu-group>\n }\n @if (section.separator) {\n <hlm-menu-separator />\n }\n }\n </hlm-menu>\n </ng-template>\n `,\n})\nexport class EgLayoutSimpleUserMenu {\n menus = input<UserMenuSection[]>([]);\n\n hlm = hlm;\n lucideUser = lucideUser;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n signal,\n input,\n output,\n viewChild,\n inject,\n resource,\n} from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n HlmAutocompleteImports,\n provideHlmAutocompleteConfig,\n HlmAutocompleteOption,\n} from '@egose/shadcn-theme-ng/autocomplete';\nimport { HlmSpinner } from '@egose/shadcn-theme-ng/spinner';\n\nconst transformValueToSearchMap: Record<string, any> = {};\n\n@Component({\n selector: 'eg-generic-autocomplete',\n imports: [HlmSpinner, HlmAutocompleteImports, ReactiveFormsModule],\n template: `\n <form [formGroup]=\"form\" class=\"space-y-8\">\n <hlm-autocomplete\n [inputId]=\"controlId()\"\n [filteredOptions]=\"options.value()\"\n [optionTemplate]=\"optionTemplate()\"\n [loading]=\"options.isLoading()\"\n [(search)]=\"search\"\n [searchPlaceholderText]=\"placeholderText()\"\n [emptyText]=\"emptyText()\"\n formControlName=\"option\"\n class=\"tw:bg-white\"\n >\n <hlm-spinner loading />\n </hlm-autocomplete>\n </form>\n <ng-template #defaultOption let-option>\n {{ option }}\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n provideHlmAutocompleteConfig({\n transformValueToSearch: (params, inputId) => {\n const fn = transformValueToSearchMap[inputId];\n return fn(params);\n },\n }),\n ],\n})\nexport class EgGenericAutocomplete<TItem, TParams extends object = { search: string }> {\n defaultOptionTemplate = viewChild<TemplateRef<HlmAutocompleteOption<TItem>>>('defaultOption');\n controlId = input<string>(crypto.randomUUID());\n placeholderText = input<string>('Select an option');\n emptyText = input<string>('No options found');\n\n optionTemplate = input<TemplateRef<HlmAutocompleteOption<TItem>> | undefined>(this.defaultOptionTemplate as any);\n loaderFn = input<((params: TParams) => Promise<TItem[]>) | undefined>(async () => []);\n transformValueToSearch = input<((value: TItem) => string) | undefined>((value: TItem) => String(value));\n\n public readonly optionChange = output<TItem>();\n private readonly _formBuilder = inject(FormBuilder);\n public form = this._formBuilder.group({\n option: [null, Validators.required],\n });\n\n public readonly search = signal<string>('');\n\n public options = resource<TItem[], TParams>({\n defaultValue: [] as TItem[],\n params: () => ({ search: this.search(), negajjang: '1111' }) as TParams,\n loader: async ({ params }) => {\n const fn = this.loaderFn();\n if (!fn) {\n return [];\n }\n\n return fn(params);\n },\n });\n\n ngOnInit() {\n transformValueToSearchMap[this.controlId()] = this.transformValueToSearch();\n\n this.form.controls['option'].valueChanges.subscribe((value) => {\n if (value !== null) {\n this.optionChange.emit(value);\n }\n });\n }\n\n ngOnDestroy() {\n delete transformValueToSearchMap[this.controlId()];\n }\n}\n","import { Component, input, output, computed, signal, viewChild, TemplateRef } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ClassValue } from 'clsx';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { HlmAutocompleteOption } from '@egose/shadcn-theme-ng/autocomplete';\nimport { EgLayoutSimpleUserMenu, type UserMenuSection } from './user-menu';\nimport { EgGenericAutocomplete } from './search';\n\n// Updated interface for left/right menu items\nexport interface MenuItem {\n label: string;\n link?: string; // optional router link\n action?: () => void; // optional click handler\n class?: string; // optional per-item CSS/Tailwind classes\n}\n\nconst commonLinkGroupClasses = 'tw:hidden tw:md:flex tw:space-x-4 tw:items-center';\nconst commonLinkClasses =\n 'tw:text-left tw:text-secondary tw:visited:text-secondary tw:hover:text-primary tw:cursor-pointer tw:no-underline';\n\n@Component({\n selector: 'eg-layout-simple',\n standalone: true,\n imports: [RouterLink, EgLayoutSimpleUserMenu, EgGenericAutocomplete],\n templateUrl: './layout.html',\n})\nexport class EgLayoutSimple<TItem, TParams extends object = { search: string }> {\n hlm = hlm;\n\n /** Menu data inputs */\n leftMenus = input<MenuItem[]>([]);\n rightMenus = input<MenuItem[]>([]);\n userMenus = input<UserMenuSection[]>([]);\n logo = input<string>('assets/logo.png');\n logoLink = input<string>('/');\n\n logoClass = input<ClassValue>('', { alias: 'logoClass' });\n headerClass = input<ClassValue>('', { alias: 'headerClass' });\n contentClass = input<ClassValue>('', { alias: 'contentClass' });\n\n /** Container class inputs */\n leftMenuClass = input<ClassValue>('', { alias: 'leftClass' });\n rightMenuClass = input<ClassValue>('', { alias: 'rightClass' });\n\n /** Link/button base class inputs */\n leftLinkClass = input<ClassValue>('', { alias: 'leftLinkClass' });\n rightLinkClass = input<ClassValue>('', { alias: 'rightLinkClass' });\n\n searchEnabled = input<boolean>(false);\n searchPlaceholderText = input<string>('Select an page');\n searchEmptyText = input<string>('No pages found');\n searchOptionTemplate = input<TemplateRef<HlmAutocompleteOption<TItem>>>();\n searchLoaderFn = input<(params: TParams) => Promise<TItem[]>>();\n searchTransformValueToSearch = input<(value: TItem) => string>();\n\n public readonly searchOptionChange = output<TItem>();\n\n protected readonly _logoClass = computed(() => hlm('tw:h-10', this.logoClass()));\n\n protected readonly _headerClass = computed(() =>\n hlm(\n 'tw:px-4 tw:py-2 tw:flex tw:items-center tw:justify-between tw:bg-gray-100 tw:border-b tw:border-gray-300',\n this.headerClass(),\n ),\n );\n\n protected readonly _contentClass = computed(() => hlm('tw:p-4', this.contentClass()));\n\n /** Computed merged classes for containers */\n protected readonly _computedLeftClass = computed(() => hlm(commonLinkGroupClasses, this.leftMenuClass()));\n protected readonly _computedRightClass = computed(() => hlm(commonLinkGroupClasses, this.rightMenuClass()));\n\n /** Computed merged classes for link/button elements */\n protected readonly _computedLeftLinkClass = computed(() => hlm(commonLinkClasses, this.leftLinkClass()));\n protected readonly _computedRightLinkClass = computed(() => hlm(commonLinkClasses, this.rightLinkClass()));\n\n mobileMenuItemClass = commonLinkClasses;\n\n footerEnabled = input<boolean>(false);\n footerMenus = input<MenuItem[]>([]);\n footerMenuClass = input<ClassValue>('', { alias: 'footerMenuClass' });\n footerLinkClass = input<ClassValue>('', { alias: 'footerLinkClass' });\n footerContent = input<string>('© 2024 My Company');\n footerClass = input<ClassValue>('', { alias: 'footerClass' });\n\n protected readonly _footerClass = computed(() =>\n hlm(\n 'tw:px-4 tw:py-4 tw:bg-gray-100 tw:border-t tw:border-gray-300 tw:text-sm tw:text-gray-600',\n this.footerClass(),\n ),\n );\n\n protected readonly _computedFooterMenuClass = computed(() =>\n hlm('tw:flex tw:flex-wrap tw:justify-center tw:space-x-4', this.footerMenuClass()),\n );\n\n protected readonly _computedFooterLinkClass = computed(() =>\n hlm('tw:text-secondary tw:hover:text-primary tw:cursor-pointer tw:no-underline', this.footerLinkClass()),\n );\n\n /** Mobile menu state */\n mobileMenuOpen = false;\n isMobile = signal(false);\n\n constructor(private breakpointObserver: BreakpointObserver) {\n this.breakpointObserver.observe([Breakpoints.Handset]).subscribe((result) => {\n this.isMobile.set(result.matches);\n });\n }\n\n toggleMobileMenu() {\n this.mobileMenuOpen = !this.mobileMenuOpen;\n }\n\n onSearchOptionChange(value: TItem) {\n this.searchOptionChange.emit(value);\n }\n}\n","<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n <ng-content />\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n","/*\n * Public API Surface of layout-simple\n */\n\nexport * from './lib/layout';\nexport * from './lib/user-menu';\nexport * from './lib/search';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"layout-simple.mjs","sources":["../../../projects/layout-simple/src/lib/user-menu.ts","../../../projects/layout-simple/src/lib/search.ts","../../../projects/layout-simple/src/lib/layout.ts","../../../projects/layout-simple/src/lib/layout.html","../../../projects/layout-simple/src/public-api.ts","../../../projects/layout-simple/src/layout-simple.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { provideIcons } from '@ng-icons/core';\nimport { lucideUser } from '@ng-icons/lucide';\nimport { RouterLink } from '@angular/router';\nimport { BrnMenuTrigger } from '@spartan-ng/brain/menu';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { HlmButton } from '@egose/shadcn-theme-ng/button';\nimport { HlmMenu, HlmMenuGroup, HlmMenuItem, HlmMenuLabel, HlmMenuSeparator } from '@egose/shadcn-theme-ng/menu';\nimport { NgIcon } from '@ng-icons/core';\n\n// Interface for menu items\nexport interface UserMenuItem {\n label: string;\n icon?: any;\n action?: () => void;\n link?: string;\n class?: string;\n}\n\n// Interface for menu sections\nexport interface UserMenuSection {\n label?: string;\n separator?: boolean;\n items?: UserMenuItem[];\n}\n\n@Component({\n selector: 'eg-layout-simple-user-menu',\n imports: [\n BrnMenuTrigger,\n HlmMenu,\n HlmMenuItem,\n HlmMenuLabel,\n HlmMenuSeparator,\n HlmMenuGroup,\n HlmButton,\n NgIcon,\n RouterLink,\n ],\n providers: [\n provideIcons({\n lucideUser,\n }),\n ],\n template: `\n <ng-template #iconTemplate>\n <ng-icon [svg]=\"lucideUser\" size=\"1.5rem\" class=\"tw:[&_svg]:w-[inherit]! tw:[&_svg]:h-[inherit]!\" />\n </ng-template>\n\n <div class=\"tw:flex tw:w-full tw:items-center tw:justify-center tw:pt-[20%]\">\n <button\n hlmButton\n variant=\"primary\"\n size=\"icon\"\n align=\"end\"\n [brnMenuTriggerFor]=\"menu\"\n [icon]=\"iconTemplate\"\n class=\"tw:rounded-full tw:border tw:border-gray-400\"\n ></button>\n </div>\n\n <ng-template #menu>\n <hlm-menu class=\"tw:w-56\">\n @for (section of menus(); track section) {\n @if (section.label) {\n <hlm-menu-label>{{ section.label }}</hlm-menu-label>\n }\n @if (section.items?.length) {\n <hlm-menu-group>\n @for (item of section.items; track item) {\n @if (item.link) {\n <a hlmMenuItem [routerLink]=\"item.link\" [class]=\"hlm('tw:cursor-pointer', item.class)\">\n @if (item.icon) {\n <ng-icon\n [svg]=\"item.icon\"\n size=\"1rem\"\n [class]=\"\n hlm('tw:[_svg]:text-[inherit]! tw:[_svg]:bg-[inherit]! tw:cursor-pointer tw:mr-2', item.class)\n \"\n />\n }\n <span>{{ item.label }}</span>\n </a>\n } @else {\n <button hlmMenuItem (click)=\"item.action?.()\" [class]=\"hlm('tw:cursor-pointer', item.class)\">\n @if (item.icon) {\n <ng-icon\n [svg]=\"item.icon\"\n size=\"1rem\"\n [class]=\"\n hlm('tw:[_svg]:text-[inherit]! tw:[_svg]:bg-[inherit]! tw:cursor-pointer tw:mr-2', item.class)\n \"\n />\n }\n <span>{{ item.label }}</span>\n </button>\n }\n }\n </hlm-menu-group>\n }\n @if (section.separator) {\n <hlm-menu-separator />\n }\n }\n </hlm-menu>\n </ng-template>\n `,\n})\nexport class EgLayoutSimpleUserMenu {\n menus = input<UserMenuSection[]>([]);\n\n hlm = hlm;\n lucideUser = lucideUser;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n signal,\n input,\n output,\n viewChild,\n inject,\n resource,\n} from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport {\n HlmAutocompleteImports,\n provideHlmAutocompleteConfig,\n HlmAutocompleteOption,\n} from '@egose/shadcn-theme-ng/autocomplete';\nimport { HlmSpinner } from '@egose/shadcn-theme-ng/spinner';\n\nconst transformValueToSearchMap: Record<string, any> = {};\n\n@Component({\n selector: 'eg-generic-autocomplete',\n imports: [HlmSpinner, HlmAutocompleteImports, ReactiveFormsModule],\n template: `\n <form [formGroup]=\"form\" class=\"space-y-8\">\n <hlm-autocomplete\n [inputId]=\"controlId()\"\n [filteredOptions]=\"options.value()\"\n [optionTemplate]=\"optionTemplate()\"\n [loading]=\"options.isLoading()\"\n [(search)]=\"search\"\n [searchPlaceholderText]=\"placeholderText()\"\n [emptyText]=\"emptyText()\"\n formControlName=\"option\"\n class=\"tw:bg-white\"\n >\n <hlm-spinner loading />\n </hlm-autocomplete>\n </form>\n <ng-template #defaultOption let-option>\n {{ option }}\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [\n provideHlmAutocompleteConfig({\n transformValueToSearch: (params, inputId) => {\n const fn = transformValueToSearchMap[inputId];\n return fn(params);\n },\n }),\n ],\n})\nexport class EgGenericAutocomplete<TItem, TParams extends object = { search: string }> {\n defaultOptionTemplate = viewChild<TemplateRef<HlmAutocompleteOption<TItem>>>('defaultOption');\n controlId = input<string>(crypto.randomUUID());\n placeholderText = input<string>('Select an option');\n emptyText = input<string>('No options found');\n\n optionTemplate = input<TemplateRef<HlmAutocompleteOption<TItem>> | undefined>(this.defaultOptionTemplate as any);\n loaderFn = input<((params: TParams) => Promise<TItem[]>) | undefined>(async () => []);\n transformValueToSearch = input<((value: TItem) => string) | undefined>((value: TItem) => String(value));\n\n public readonly optionChange = output<TItem>();\n private readonly _formBuilder = inject(FormBuilder);\n public form = this._formBuilder.group({\n option: [null, Validators.required],\n });\n\n public readonly search = signal<string>('');\n\n public options = resource<TItem[], TParams>({\n defaultValue: [] as TItem[],\n params: () => ({ search: this.search(), negajjang: '1111' }) as TParams,\n loader: async ({ params }) => {\n const fn = this.loaderFn();\n if (!fn) {\n return [];\n }\n\n return fn(params);\n },\n });\n\n ngOnInit() {\n transformValueToSearchMap[this.controlId()] = this.transformValueToSearch();\n\n this.form.controls['option'].valueChanges.subscribe((value) => {\n if (value !== null) {\n this.optionChange.emit(value);\n }\n });\n }\n\n ngOnDestroy() {\n delete transformValueToSearchMap[this.controlId()];\n }\n}\n","import { Component, input, output, computed, signal, viewChild, TemplateRef } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ClassValue } from 'clsx';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport { HlmAutocompleteOption } from '@egose/shadcn-theme-ng/autocomplete';\nimport { EgLayoutSimpleUserMenu, type UserMenuSection } from './user-menu';\nimport { EgGenericAutocomplete } from './search';\n\n// Updated interface for left/right menu items\nexport interface MenuItem {\n label: string;\n link?: string; // optional router link\n action?: () => void; // optional click handler\n class?: string; // optional per-item CSS/Tailwind classes\n}\n\nconst commonLinkGroupClasses = 'tw:hidden tw:md:flex tw:space-x-4 tw:items-center';\nconst commonLinkClasses =\n 'tw:text-left tw:text-secondary tw:visited:text-secondary tw:hover:text-primary tw:cursor-pointer tw:no-underline';\n\n@Component({\n selector: 'eg-layout-simple',\n standalone: true,\n imports: [RouterLink, EgLayoutSimpleUserMenu, EgGenericAutocomplete],\n templateUrl: './layout.html',\n})\nexport class EgLayoutSimple<TItem, TParams extends object = { search: string }> {\n hlm = hlm;\n\n /** Menu data inputs */\n leftMenus = input<MenuItem[]>([]);\n rightMenus = input<MenuItem[]>([]);\n userMenus = input<UserMenuSection[]>([]);\n logo = input<string>('assets/logo.png');\n logoLink = input<string>('/');\n\n logoClass = input<ClassValue>('', { alias: 'logoClass' });\n headerClass = input<ClassValue>('', { alias: 'headerClass' });\n contentClass = input<ClassValue>('', { alias: 'contentClass' });\n contentBottomClass = input<ClassValue>('', { alias: 'contentBottomClass' });\n\n /** Container class inputs */\n leftMenuClass = input<ClassValue>('', { alias: 'leftClass' });\n rightMenuClass = input<ClassValue>('', { alias: 'rightClass' });\n\n /** Link/button base class inputs */\n leftLinkClass = input<ClassValue>('', { alias: 'leftLinkClass' });\n rightLinkClass = input<ClassValue>('', { alias: 'rightLinkClass' });\n\n searchEnabled = input<boolean>(false);\n loading = input<boolean>(false);\n searchPlaceholderText = input<string>('Select an page');\n searchEmptyText = input<string>('No pages found');\n searchOptionTemplate = input<TemplateRef<HlmAutocompleteOption<TItem>>>();\n searchLoaderFn = input<(params: TParams) => Promise<TItem[]>>();\n searchTransformValueToSearch = input<(value: TItem) => string>();\n\n public readonly searchOptionChange = output<TItem>();\n\n protected readonly _logoClass = computed(() => hlm('tw:h-10', this.logoClass()));\n\n protected readonly _headerClass = computed(() =>\n hlm(\n 'tw:px-4 tw:py-2 tw:flex tw:items-center tw:justify-between tw:bg-gray-100 tw:border-b tw:border-gray-300',\n this.headerClass(),\n ),\n );\n\n protected readonly _contentClass = computed(() => hlm('tw:p-4 tw:flex tw:flex-col tw:flex-1', this.contentClass()));\n protected readonly _contentBottomClass = computed(() => hlm('tw:flex-1', this.contentBottomClass()));\n\n /** Computed merged classes for containers */\n protected readonly _computedLeftClass = computed(() => hlm(commonLinkGroupClasses, this.leftMenuClass()));\n protected readonly _computedRightClass = computed(() => hlm(commonLinkGroupClasses, this.rightMenuClass()));\n\n /** Computed merged classes for link/button elements */\n protected readonly _computedLeftLinkClass = computed(() => hlm(commonLinkClasses, this.leftLinkClass()));\n protected readonly _computedRightLinkClass = computed(() => hlm(commonLinkClasses, this.rightLinkClass()));\n\n mobileMenuItemClass = commonLinkClasses;\n\n footerEnabled = input<boolean>(false);\n footerMenus = input<MenuItem[]>([]);\n footerMenuClass = input<ClassValue>('', { alias: 'footerMenuClass' });\n footerLinkClass = input<ClassValue>('', { alias: 'footerLinkClass' });\n footerContent = input<string>('© 2024 My Company');\n footerClass = input<ClassValue>('', { alias: 'footerClass' });\n\n protected readonly _footerClass = computed(() =>\n hlm(\n 'tw:px-4 tw:py-4 tw:bg-gray-100 tw:border-t tw:border-gray-300 tw:text-sm tw:text-gray-600',\n this.footerClass(),\n ),\n );\n\n protected readonly _computedFooterMenuClass = computed(() =>\n hlm('tw:flex tw:flex-wrap tw:justify-center tw:space-x-4', this.footerMenuClass()),\n );\n\n protected readonly _computedFooterLinkClass = computed(() =>\n hlm('tw:text-secondary tw:hover:text-primary tw:cursor-pointer tw:no-underline', this.footerLinkClass()),\n );\n\n /** Mobile menu state */\n mobileMenuOpen = false;\n isMobile = signal(false);\n\n constructor(private breakpointObserver: BreakpointObserver) {\n this.breakpointObserver.observe([Breakpoints.Handset]).subscribe((result) => {\n this.isMobile.set(result.matches);\n });\n }\n\n toggleMobileMenu() {\n this.mobileMenuOpen = !this.mobileMenuOpen;\n }\n\n onSearchOptionChange(value: TItem) {\n this.searchOptionChange.emit(value);\n }\n}\n","<div class=\"tw:flex tw:flex-col tw:min-h-screen\">\n <!-- Header -->\n <header [class]=\"_headerClass()\">\n <!-- Left side: Logo + Left menus -->\n <div class=\"tw:flex tw:items-center tw:space-x-6\">\n <div class=\"logo\">\n <a [routerLink]=\"logoLink()\">\n <img [src]=\"logo()\" alt=\"Logo\" [class]=\"_logoClass()\" />\n </a>\n </div>\n <!-- Left menus (desktop) -->\n <nav [class]=\"_computedLeftClass()\">\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedLeftLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n </div>\n\n <!-- Right menus (desktop) -->\n <nav [class]=\"_computedRightClass()\">\n @if (searchEnabled()) {\n <eg-generic-autocomplete\n [optionTemplate]=\"searchOptionTemplate()\"\n [loaderFn]=\"searchLoaderFn()\"\n [transformValueToSearch]=\"searchTransformValueToSearch()\"\n [placeholderText]=\"searchPlaceholderText()\"\n [emptyText]=\"searchEmptyText()\"\n (optionChange)=\"onSearchOptionChange($event)\"\n ></eg-generic-autocomplete>\n }\n\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\"> {{ item.label }} </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedRightLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n\n @let uMenus = userMenus();\n @if (uMenus && uMenus.length > 0) {\n <eg-layout-simple-user-menu [menus]=\"uMenus\"></eg-layout-simple-user-menu>\n }\n </nav>\n\n <!-- Mobile menu button -->\n <button\n (click)=\"toggleMobileMenu()\"\n class=\"tw:md:hidden tw:p-2 tw:text-gray-700 tw:hover:text-primary tw:focus:outline-none tw:cursor-pointer\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tw:h-6 tw:w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n </button>\n </header>\n\n <!-- Mobile menu -->\n @if (isMobile() && mobileMenuOpen) {\n <div class=\"tw:bg-gray-100 tw:border-b tw:border-gray-300 tw:px-4 tw:py-2\">\n <nav class=\"tw:flex tw:flex-col tw:space-y-2\">\n <!-- Left menus -->\n @for (item of leftMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- Right menus -->\n @for (item of rightMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n\n <!-- User menus (flattened for mobile) -->\n @for (section of userMenus(); track section.label) {\n @if (section.label) {\n <div class=\"tw:font-bold tw:mt-2\">{{ section.label }}</div>\n }\n @if (section.items?.length) {\n @for (item of section.items; track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"mobileMenuItemClass\">\n {{ item.label }}\n </button>\n }\n }\n }\n @if (section.separator) {\n <hr class=\"tw:border-gray-300 tw:my-2\" />\n }\n }\n </nav>\n </div>\n }\n\n <!-- Main content -->\n <main [class]=\"_contentClass()\">\n @if (!loading()) {\n <div class=\"tw:flex tw:items-center tw:justify-center tw:h-full\">\n <ng-content />\n </div>\n }\n <div [class]=\"_contentBottomClass()\"></div>\n </main>\n\n @if (footerEnabled()) {\n <footer [class]=\"_footerClass()\">\n <nav [class]=\"_computedFooterMenuClass()\">\n @for (item of footerMenus(); track item.label) {\n @if (item.link) {\n <a [routerLink]=\"item.link\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" (click)=\"item.action?.()\" [class]=\"hlm(_computedFooterLinkClass(), item.class || '')\">\n {{ item.label }}\n </button>\n }\n }\n </nav>\n\n <div class=\"tw:mt-2 tw:text-center\">\n {{ footerContent() }}\n </div>\n </footer>\n }\n</div>\n","/*\n * Public API Surface of layout-simple\n */\n\nexport * from './lib/layout';\nexport * from './lib/user-menu';\nexport * from './lib/search';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
@@ -46,6 +46,7 @@ declare class EgLayoutSimple<TItem, TParams extends object = {
46
46
  logoClass: _angular_core.InputSignal<ClassValue>;
47
47
  headerClass: _angular_core.InputSignal<ClassValue>;
48
48
  contentClass: _angular_core.InputSignal<ClassValue>;
49
+ contentBottomClass: _angular_core.InputSignal<ClassValue>;
49
50
  /** Container class inputs */
50
51
  leftMenuClass: _angular_core.InputSignal<ClassValue>;
51
52
  rightMenuClass: _angular_core.InputSignal<ClassValue>;
@@ -53,6 +54,7 @@ declare class EgLayoutSimple<TItem, TParams extends object = {
53
54
  leftLinkClass: _angular_core.InputSignal<ClassValue>;
54
55
  rightLinkClass: _angular_core.InputSignal<ClassValue>;
55
56
  searchEnabled: _angular_core.InputSignal<boolean>;
57
+ loading: _angular_core.InputSignal<boolean>;
56
58
  searchPlaceholderText: _angular_core.InputSignal<string>;
57
59
  searchEmptyText: _angular_core.InputSignal<string>;
58
60
  searchOptionTemplate: _angular_core.InputSignal<TemplateRef<HlmAutocompleteOption<TItem>> | undefined>;
@@ -62,6 +64,7 @@ declare class EgLayoutSimple<TItem, TParams extends object = {
62
64
  protected readonly _logoClass: _angular_core.Signal<string>;
63
65
  protected readonly _headerClass: _angular_core.Signal<string>;
64
66
  protected readonly _contentClass: _angular_core.Signal<string>;
67
+ protected readonly _contentBottomClass: _angular_core.Signal<string>;
65
68
  /** Computed merged classes for containers */
66
69
  protected readonly _computedLeftClass: _angular_core.Signal<string>;
67
70
  protected readonly _computedRightClass: _angular_core.Signal<string>;
@@ -85,7 +88,7 @@ declare class EgLayoutSimple<TItem, TParams extends object = {
85
88
  toggleMobileMenu(): void;
86
89
  onSearchOptionChange(value: TItem): void;
87
90
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EgLayoutSimple<any, any>, never>;
88
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EgLayoutSimple<any, any>, "eg-layout-simple", never, { "leftMenus": { "alias": "leftMenus"; "required": false; "isSignal": true; }; "rightMenus": { "alias": "rightMenus"; "required": false; "isSignal": true; }; "userMenus": { "alias": "userMenus"; "required": false; "isSignal": true; }; "logo": { "alias": "logo"; "required": false; "isSignal": true; }; "logoLink": { "alias": "logoLink"; "required": false; "isSignal": true; }; "logoClass": { "alias": "logoClass"; "required": false; "isSignal": true; }; "headerClass": { "alias": "headerClass"; "required": false; "isSignal": true; }; "contentClass": { "alias": "contentClass"; "required": false; "isSignal": true; }; "leftMenuClass": { "alias": "leftClass"; "required": false; "isSignal": true; }; "rightMenuClass": { "alias": "rightClass"; "required": false; "isSignal": true; }; "leftLinkClass": { "alias": "leftLinkClass"; "required": false; "isSignal": true; }; "rightLinkClass": { "alias": "rightLinkClass"; "required": false; "isSignal": true; }; "searchEnabled": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "searchPlaceholderText": { "alias": "searchPlaceholderText"; "required": false; "isSignal": true; }; "searchEmptyText": { "alias": "searchEmptyText"; "required": false; "isSignal": true; }; "searchOptionTemplate": { "alias": "searchOptionTemplate"; "required": false; "isSignal": true; }; "searchLoaderFn": { "alias": "searchLoaderFn"; "required": false; "isSignal": true; }; "searchTransformValueToSearch": { "alias": "searchTransformValueToSearch"; "required": false; "isSignal": true; }; "footerEnabled": { "alias": "footerEnabled"; "required": false; "isSignal": true; }; "footerMenus": { "alias": "footerMenus"; "required": false; "isSignal": true; }; "footerMenuClass": { "alias": "footerMenuClass"; "required": false; "isSignal": true; }; "footerLinkClass": { "alias": "footerLinkClass"; "required": false; "isSignal": true; }; "footerContent": { "alias": "footerContent"; "required": false; "isSignal": true; }; "footerClass": { "alias": "footerClass"; "required": false; "isSignal": true; }; }, { "searchOptionChange": "searchOptionChange"; }, never, ["*"], true, never>;
91
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EgLayoutSimple<any, any>, "eg-layout-simple", never, { "leftMenus": { "alias": "leftMenus"; "required": false; "isSignal": true; }; "rightMenus": { "alias": "rightMenus"; "required": false; "isSignal": true; }; "userMenus": { "alias": "userMenus"; "required": false; "isSignal": true; }; "logo": { "alias": "logo"; "required": false; "isSignal": true; }; "logoLink": { "alias": "logoLink"; "required": false; "isSignal": true; }; "logoClass": { "alias": "logoClass"; "required": false; "isSignal": true; }; "headerClass": { "alias": "headerClass"; "required": false; "isSignal": true; }; "contentClass": { "alias": "contentClass"; "required": false; "isSignal": true; }; "contentBottomClass": { "alias": "contentBottomClass"; "required": false; "isSignal": true; }; "leftMenuClass": { "alias": "leftClass"; "required": false; "isSignal": true; }; "rightMenuClass": { "alias": "rightClass"; "required": false; "isSignal": true; }; "leftLinkClass": { "alias": "leftLinkClass"; "required": false; "isSignal": true; }; "rightLinkClass": { "alias": "rightLinkClass"; "required": false; "isSignal": true; }; "searchEnabled": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "searchPlaceholderText": { "alias": "searchPlaceholderText"; "required": false; "isSignal": true; }; "searchEmptyText": { "alias": "searchEmptyText"; "required": false; "isSignal": true; }; "searchOptionTemplate": { "alias": "searchOptionTemplate"; "required": false; "isSignal": true; }; "searchLoaderFn": { "alias": "searchLoaderFn"; "required": false; "isSignal": true; }; "searchTransformValueToSearch": { "alias": "searchTransformValueToSearch"; "required": false; "isSignal": true; }; "footerEnabled": { "alias": "footerEnabled"; "required": false; "isSignal": true; }; "footerMenus": { "alias": "footerMenus"; "required": false; "isSignal": true; }; "footerMenuClass": { "alias": "footerMenuClass"; "required": false; "isSignal": true; }; "footerLinkClass": { "alias": "footerLinkClass"; "required": false; "isSignal": true; }; "footerContent": { "alias": "footerContent"; "required": false; "isSignal": true; }; "footerClass": { "alias": "footerClass"; "required": false; "isSignal": true; }; }, { "searchOptionChange": "searchOptionChange"; }, never, ["*"], true, never>;
89
92
  }
90
93
 
91
94
  declare class EgGenericAutocomplete<TItem, TParams extends object = {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.21",
2
+ "version": "0.0.22",
3
3
  "description": "Angular shadcn UI theme",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
@@ -44,7 +44,7 @@ class HlmSwitch {
44
44
  ariaDescribedby = input(null, ...(ngDevMode ? [{ debugName: "ariaDescribedby", alias: 'aria-describedby' }] : [{ alias: 'aria-describedby' }]));
45
45
  /** Emits when the checked state of the switch changes. */
46
46
  changed = output();
47
- _disabled = linkedSignal(this.disabled);
47
+ _disabled = linkedSignal(this.disabled, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
48
48
  _onChange;
49
49
  _onTouched;
50
50
  handleChange(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"switch.mjs","sources":["../../../projects/switch/src/lib/switch-thumb.ts","../../../projects/switch/src/lib/switch.ts","../../../projects/switch/src/public-api.ts","../../../projects/switch/src/switch.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: 'brn-switch-thumb[hlm],[hlmSwitchThumb]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmSwitchThumb {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:bg-background tw:dark:group-data-[state=unchecked]:bg-foreground tw:dark:group-data-[state=checked]:bg-primary-foreground tw:pointer-events-none tw:block tw:size-4 tw:rounded-full tw:ring-0 tw:transition-transform tw:data-[state=unchecked]:translate-x-0 tw:group-data-[state=checked]:translate-x-[calc(100%-2px)]',\n this.userClass(),\n ),\n );\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n linkedSignal,\n model,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnSwitch, BrnSwitchThumb } from '@spartan-ng/brain/switch';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { HlmSwitchThumb } from './switch-thumb';\nexport const EG_SWITCH_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmSwitch),\n multi: true,\n};\n\n@Component({\n selector: 'hlm-switch',\n imports: [BrnSwitchThumb, BrnSwitch, HlmSwitchThumb],\n host: {\n class: 'contents',\n '[attr.id]': 'null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n },\n // @ts-ignore\n template: `\n <brn-switch\n [class]=\"_computedClass()\"\n [checked]=\"checked()\"\n @ts-ignore\n (changed)=\"handleChange($event)\"\n (touched)=\"_onTouched?.()\"\n [disabled]=\"_disabled()\"\n [id]=\"id()\"\n [aria-label]=\"ariaLabel()\"\n [aria-labelledby]=\"ariaLabelledby()\"\n [aria-describedby]=\"ariaDescribedby()\"\n >\n <brn-switch-thumb hlm />\n </brn-switch>\n `,\n providers: [EG_SWITCH_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmSwitch implements ControlValueAccessor {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:data-[state=checked]:bg-primary tw:data-[state=unchecked]:bg-input tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:dark:data-[state=unchecked]:bg-input/80 tw:shadow-xs tw:group tw:inline-flex tw:h-[1.15rem] tw:w-8 tw:shrink-0 tw:items-center tw:rounded-full tw:border tw:border-transparent tw:outline-none tw:transition-all tw:focus-visible:ring-[3px] tw:data-[disabled=true]:cursor-not-allowed tw:data-[disabled=true]:opacity-50',\n this.userClass(),\n ),\n );\n\n /** The checked state of the switch. */\n public readonly checked = model<boolean>(false);\n\n /** The disabled state of the switch. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Used to set the id on the underlying brn element. */\n public readonly id = input<string | null>(null);\n\n /** Used to set the aria-label attribute on the underlying brn element. */\n public readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** Used to set the aria-labelledby attribute on the underlying brn element. */\n public readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n /** Used to set the aria-describedby attribute on the underlying brn element. */\n public readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n /** Emits when the checked state of the switch changes. */\n public readonly changed = output<boolean>();\n\n protected readonly _disabled = linkedSignal(this.disabled);\n\n protected _onChange?: ChangeFn<boolean>;\n protected _onTouched?: TouchFn;\n\n protected handleChange(value: unknown): void {\n const checked = value as boolean;\n this.checked.set(checked);\n this._onChange?.(checked);\n this.changed.emit(checked);\n }\n\n /** CONROL VALUE ACCESSOR */\n\n writeValue(value: boolean): void {\n this.checked.set(Boolean(value));\n }\n\n registerOnChange(fn: ChangeFn<boolean>): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n","/*\n * Public API Surface of switch\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmSwitch } from './lib/switch';\nimport { HlmSwitchThumb } from './lib/switch-thumb';\n\nexport * from './lib/switch';\nexport * from './lib/switch-thumb';\n\nexport const HlmSwitchImports = [HlmSwitch, HlmSwitchThumb] as const;\n@NgModule({\n imports: [...HlmSwitchImports],\n exports: [...HlmSwitchImports],\n})\nexport class HlmSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"switch.mjs","sources":["../../../projects/switch/src/lib/switch-thumb.ts","../../../projects/switch/src/lib/switch.ts","../../../projects/switch/src/public-api.ts","../../../projects/switch/src/switch.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\n@Directive({\n selector: 'brn-switch-thumb[hlm],[hlmSwitchThumb]',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmSwitchThumb {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:bg-background tw:dark:group-data-[state=unchecked]:bg-foreground tw:dark:group-data-[state=checked]:bg-primary-foreground tw:pointer-events-none tw:block tw:size-4 tw:rounded-full tw:ring-0 tw:transition-transform tw:data-[state=unchecked]:translate-x-0 tw:group-data-[state=checked]:translate-x-[calc(100%-2px)]',\n this.userClass(),\n ),\n );\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n linkedSignal,\n model,\n output,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { BrnSwitch, BrnSwitchThumb } from '@spartan-ng/brain/switch';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\nimport { HlmSwitchThumb } from './switch-thumb';\nexport const EG_SWITCH_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmSwitch),\n multi: true,\n};\n\n@Component({\n selector: 'hlm-switch',\n imports: [BrnSwitchThumb, BrnSwitch, HlmSwitchThumb],\n host: {\n class: 'contents',\n '[attr.id]': 'null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n },\n // @ts-ignore\n template: `\n <brn-switch\n [class]=\"_computedClass()\"\n [checked]=\"checked()\"\n @ts-ignore\n (changed)=\"handleChange($event)\"\n (touched)=\"_onTouched?.()\"\n [disabled]=\"_disabled()\"\n [id]=\"id()\"\n [aria-label]=\"ariaLabel()\"\n [aria-labelledby]=\"ariaLabelledby()\"\n [aria-describedby]=\"ariaDescribedby()\"\n >\n <brn-switch-thumb hlm />\n </brn-switch>\n `,\n providers: [EG_SWITCH_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmSwitch implements ControlValueAccessor {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:data-[state=checked]:bg-primary tw:data-[state=unchecked]:bg-input tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:dark:data-[state=unchecked]:bg-input/80 tw:shadow-xs tw:group tw:inline-flex tw:h-[1.15rem] tw:w-8 tw:shrink-0 tw:items-center tw:rounded-full tw:border tw:border-transparent tw:outline-none tw:transition-all tw:focus-visible:ring-[3px] tw:data-[disabled=true]:cursor-not-allowed tw:data-[disabled=true]:opacity-50',\n this.userClass(),\n ),\n );\n\n /** The checked state of the switch. */\n public readonly checked = model<boolean>(false);\n\n /** The disabled state of the switch. */\n public readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Used to set the id on the underlying brn element. */\n public readonly id = input<string | null>(null);\n\n /** Used to set the aria-label attribute on the underlying brn element. */\n public readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** Used to set the aria-labelledby attribute on the underlying brn element. */\n public readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n /** Used to set the aria-describedby attribute on the underlying brn element. */\n public readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n /** Emits when the checked state of the switch changes. */\n public readonly changed = output<boolean>();\n\n protected readonly _disabled = linkedSignal(this.disabled);\n\n protected _onChange?: ChangeFn<boolean>;\n protected _onTouched?: TouchFn;\n\n protected handleChange(value: unknown): void {\n const checked = value as boolean;\n this.checked.set(checked);\n this._onChange?.(checked);\n this.changed.emit(checked);\n }\n\n /** CONROL VALUE ACCESSOR */\n\n writeValue(value: boolean): void {\n this.checked.set(Boolean(value));\n }\n\n registerOnChange(fn: ChangeFn<boolean>): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n}\n","/*\n * Public API Surface of switch\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmSwitch } from './lib/switch';\nimport { HlmSwitchThumb } from './lib/switch-thumb';\n\nexport * from './lib/switch';\nexport * from './lib/switch-thumb';\n\nexport const HlmSwitchImports = [HlmSwitch, HlmSwitchThumb] as const;\n@NgModule({\n imports: [...HlmSwitchImports],\n exports: [...HlmSwitchImports],\n})\nexport class HlmSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}