@ngneers/controls 0.0.1-pre5 → 0.0.1-pre7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngneers-controls-accordion.mjs +33 -33
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
- package/fesm2022/ngneers-controls-api-ng.mjs +22 -19
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
- package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
- package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
- package/fesm2022/ngneers-controls-avatar.mjs +13 -13
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-base.mjs +89 -64
- package/fesm2022/ngneers-controls-base.mjs.map +1 -1
- package/fesm2022/ngneers-controls-breadcrumb.mjs +19 -19
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button-group.mjs +8 -8
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button.mjs +15 -10
- package/fesm2022/ngneers-controls-button.mjs.map +1 -1
- package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +9 -9
- package/fesm2022/{ngneers-controls-calendar-time-BEeJIqIX.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
- package/fesm2022/ngneers-controls-calendar.mjs +56 -56
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
- package/fesm2022/ngneers-controls-chip.mjs +7 -7
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
- package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
- package/fesm2022/ngneers-controls-defer.mjs +10 -10
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-dialog.mjs +38 -40
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
- package/fesm2022/ngneers-controls-directives.mjs +45 -39
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
- package/fesm2022/ngneers-controls-drawer.mjs +29 -29
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-edit-inplace.mjs +16 -16
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-filter.mjs +192 -44
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
- package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
- package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
- package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
- package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n.mjs +5 -5
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
- package/fesm2022/ngneers-controls-icon.mjs +111 -47
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
- package/fesm2022/ngneers-controls-inplace.mjs +18 -18
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-field.mjs +16 -16
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
- package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input.mjs +6 -6
- package/fesm2022/ngneers-controls-input.mjs.map +1 -1
- package/fesm2022/ngneers-controls-item-view.mjs +33 -33
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
- package/fesm2022/ngneers-controls-list-box.mjs +31 -31
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
- package/fesm2022/ngneers-controls-menu.mjs +33 -33
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
- package/fesm2022/ngneers-controls-message.mjs +4 -4
- package/fesm2022/ngneers-controls-message.mjs.map +1 -1
- package/fesm2022/ngneers-controls-paginator.mjs +13 -13
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
- package/fesm2022/ngneers-controls-popover.mjs +21 -16
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
- package/fesm2022/ngneers-controls-progress.mjs +16 -16
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
- package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
- package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroller.mjs +74 -39
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select-button.mjs +7 -7
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select.mjs +48 -47
- package/fesm2022/ngneers-controls-select.mjs.map +1 -1
- package/fesm2022/ngneers-controls-slider.mjs +11 -11
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
- package/fesm2022/ngneers-controls-spinner.mjs +7 -7
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
- package/fesm2022/ngneers-controls-splitter.mjs +141 -328
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
- package/fesm2022/ngneers-controls-switch.mjs +3 -3
- package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
- package/fesm2022/ngneers-controls-table.mjs +1456 -82
- package/fesm2022/ngneers-controls-table.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tabs.mjs +41 -40
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tag.mjs +4 -4
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toast.mjs +19 -19
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toggle-button.mjs +10 -10
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tooltip.mjs +74 -38
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
- package/fesm2022/ngneers-controls-utils.mjs +1 -1
- package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
- package/package.json +34 -12
- package/types/ngneers-controls-accordion.d.ts +6 -4
- package/types/ngneers-controls-api-ng.d.ts +7 -2
- package/types/ngneers-controls-api-resize.d.ts +318 -0
- package/types/ngneers-controls-api.d.ts +2 -2
- package/types/ngneers-controls-base.d.ts +8 -0
- package/types/ngneers-controls-breadcrumb.d.ts +6 -4
- package/types/ngneers-controls-button.d.ts +13 -8
- package/types/ngneers-controls-calendar.d.ts +5 -1
- package/types/ngneers-controls-checkbox.d.ts +6 -4
- package/types/ngneers-controls-chip.d.ts +3 -1
- package/types/ngneers-controls-default-icons.d.ts +5 -0
- package/types/ngneers-controls-directives.d.ts +7 -1
- package/types/ngneers-controls-drawer.d.ts +7 -1
- package/types/ngneers-controls-edit-inplace.d.ts +4 -0
- package/types/ngneers-controls-filter.d.ts +52 -3
- package/types/ngneers-controls-i18n.d.ts +4 -0
- package/types/ngneers-controls-icon.d.ts +23 -40
- package/types/ngneers-controls-input-field.d.ts +7 -1
- package/types/ngneers-controls-item-view.d.ts +4 -2
- package/types/ngneers-controls-list-box.d.ts +5 -1
- package/types/ngneers-controls-menu.d.ts +4 -2
- package/types/ngneers-controls-message.d.ts +3 -1
- package/types/ngneers-controls-paginator.d.ts +4 -0
- package/types/ngneers-controls-popover.d.ts +2 -1
- package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
- package/types/ngneers-controls-scroller.d.ts +12 -2
- package/types/ngneers-controls-select.d.ts +11 -12
- package/types/ngneers-controls-spinner.d.ts +1 -1
- package/types/ngneers-controls-splitter.d.ts +29 -59
- package/types/ngneers-controls-table.d.ts +380 -24
- package/types/ngneers-controls-tabs.d.ts +4 -2
- package/types/ngneers-controls-tag.d.ts +3 -1
- package/types/ngneers-controls-toast.d.ts +5 -3
- package/types/ngneers-controls-toggle-button.d.ts +5 -3
- package/types/ngneers-controls-tooltip.d.ts +7 -1
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-calendar.mjs","sources":["../../src/calendar/calendar-templates.ts","../../src/calendar/types.ts","../../src/calendar/days/days.ts","../../src/calendar/days/days.html","../../src/calendar/calendar.ts","../../src/calendar/calendar.html","../../src/calendar/ngneers-controls-calendar.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type {\r\n DayTemplateType,\r\n MonthTemplateType,\r\n TimeTemplateType,\r\n WeekDayTemplateType,\r\n YearTemplateType,\r\n} from './types';\r\n\r\n@Directive()\r\nexport abstract class CalendarTemplates extends ValueControlBase<'calendar', Date | null> {\r\n // Day template\r\n private readonly _defaultDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.day>>('defaultDayTemplate');\r\n private readonly _userDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.day>>('day');\r\n /**\r\n * Set a custom template for a day.\r\n * Can also be set using an `<ng-template>` element with `#day` template reference variable.\r\n */\r\n public readonly templateDay = input<TemplateRef<typeof this.templateTypes.day> | null>(null);\r\n protected readonly dayTemplate = computed(\r\n () => this._userDayTemplate() ?? this.templateDay() ?? this._defaultDayTemplate()\r\n );\r\n // Week day template\r\n private readonly _defaultWeekDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.weekDay>>('defaultWeekDayTemplate');\r\n private readonly _userWeekDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.weekDay>>('weekDay');\r\n /**\r\n * Set a custom template for a week day.\r\n * Can also be set using an `<ng-template>` element with `#weekDay` template reference variable.\r\n */\r\n public readonly templateWeekDay = input<TemplateRef<typeof this.templateTypes.weekDay> | null>(\r\n null\r\n );\r\n protected readonly weekDayTemplate = computed(\r\n () => this._userWeekDayTemplate() ?? this.templateWeekDay() ?? this._defaultWeekDayTemplate()\r\n );\r\n // Month template\r\n private readonly _defaultMonthTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.month>>('defaultMonthTemplate');\r\n private readonly _userMonthTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.month>>('month');\r\n /**\r\n * Set a custom template for a month.\r\n * Can also be set using an `<ng-template>` element with `#month` template reference variable.\r\n */\r\n public readonly templateMonth = input<TemplateRef<typeof this.templateTypes.month> | null>(null);\r\n protected readonly monthTemplate = computed(\r\n () => this._userMonthTemplate() ?? this.templateMonth() ?? this._defaultMonthTemplate()\r\n );\r\n // Time template\r\n private readonly _defaultTimeTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.time>>('defaultTimeTemplate');\r\n private readonly _userTimeTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.time>>('time');\r\n /**\r\n * Set a custom template for the time input.\r\n * Can also be set using an `<ng-template>` element with `#time` template reference variable.\r\n */\r\n public readonly templateTime = input<TemplateRef<typeof this.templateTypes.time> | null>(null);\r\n protected readonly timeTemplate = computed(\r\n () => this._userTimeTemplate() ?? this.templateTime() ?? this._defaultTimeTemplate()\r\n );\r\n // Year template\r\n private readonly _defaultYearTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.year>>('defaultYearTemplate');\r\n private readonly _userYearTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.year>>('year');\r\n /**\r\n * Set a custom template for the year input.\r\n * Can also be set using an `<ng-template>` element with `#year` template reference variable.\r\n */\r\n public readonly templateYear = input<TemplateRef<typeof this.templateTypes.year> | null>(null);\r\n protected readonly yearTemplate = computed(\r\n () => this._userYearTemplate() ?? this.templateYear() ?? this._defaultYearTemplate()\r\n );\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the day template.\r\n */\r\n day: DayTemplateType;\r\n /**\r\n * Type of the template variable for the week day template.\r\n */\r\n weekDay: WeekDayTemplateType;\r\n /**\r\n * Type of the template variable for the month template.\r\n */\r\n month: MonthTemplateType;\r\n /**\r\n * Type of the template variable for the time template.\r\n */\r\n time: TimeTemplateType;\r\n /**\r\n * Type of the template variable for the year template.\r\n */\r\n year: YearTemplateType;\r\n }>();\r\n}\r\n","export const MONTHS = [\r\n 'january',\r\n 'february',\r\n 'march',\r\n 'april',\r\n 'may',\r\n 'june',\r\n 'july',\r\n 'august',\r\n 'september',\r\n 'october',\r\n 'november',\r\n 'december',\r\n] as const;\r\n\r\nexport type Month = (typeof MONTHS)[number];\r\n\r\nexport const WEEK_DAYS = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n] as const;\r\n\r\nexport type WeekDay = (typeof WEEK_DAYS)[number];\r\n\r\nexport type DayModel = {\r\n date: number;\r\n /**\r\n * -1 = previous month, 0 = current month, 1 = next month\r\n */\r\n monthOffset: number;\r\n};\r\n\r\nexport type DayTemplateType = {\r\n $implicit: {\r\n date: number;\r\n selected: boolean;\r\n today: boolean;\r\n fromOtherMonth: boolean;\r\n };\r\n};\r\n\r\nexport type WeekDayTemplateType = {\r\n $implicit: {\r\n weekDay: WeekDay;\r\n translation: string;\r\n };\r\n};\r\n\r\nexport type MonthTemplateType = {\r\n $implicit: {\r\n month: Month;\r\n change: (newMonth: Month) => void;\r\n };\r\n};\r\n\r\nexport type TimeTemplateType = {\r\n $implicit: {\r\n time: Date | null;\r\n showSeconds: boolean;\r\n change: (newTime: Date | null) => void;\r\n };\r\n};\r\n\r\nexport type YearTemplateType = {\r\n $implicit: {\r\n year: number;\r\n change: (newYear: number) => void;\r\n };\r\n};\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n TemplateRef,\r\n viewChildren,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { type NgnBaseSafe, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport {\r\n type DayModel,\r\n type DayTemplateType,\r\n type Month,\r\n MONTHS,\r\n type MonthTemplateType,\r\n type TimeTemplateType,\r\n WEEK_DAYS,\r\n type WeekDay,\r\n type WeekDayTemplateType,\r\n type YearTemplateType,\r\n} from '../types';\r\n\r\nimport type { ControlTemplateInfo } from '@ngneers/controls/api/ng';\r\n\r\n// Configuration: Number of weeks to show before and after the current month\r\nconst WEEKS_BEFORE = 1;\r\nconst WEEKS_AFTER = 1;\r\n\r\ntype MonthModel = {\r\n weeks: WeekModel[];\r\n};\r\n\r\ntype WeekModel = {\r\n days: DayModel[];\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-days',\r\n templateUrl: './days.html',\r\n imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon],\r\n})\r\nexport class CalendarDays {\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly theme = input.required<ControlTemplateInfo<typeof calendarControlTemplate>>();\r\n public readonly year = input.required<number>();\r\n public readonly month = input.required<number>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly firstDayOfWeek = input.required<WeekDay>();\r\n public readonly dayTemplate = input.required<TemplateRef<DayTemplateType>>();\r\n public readonly weekDayTemplate = input.required<TemplateRef<WeekDayTemplateType>>();\r\n public readonly timeTemplate = input.required<TemplateRef<TimeTemplateType>>();\r\n public readonly yearTemplate = input.required<TemplateRef<YearTemplateType>>();\r\n public readonly monthTemplate = input.required<TemplateRef<MonthTemplateType>>();\r\n public readonly showTime = input.required<boolean>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly previousMonth = output();\r\n public readonly nextMonth = output();\r\n public readonly daySelected = output<DayModel>();\r\n public readonly yearSelected = output<number>();\r\n public readonly monthSelected = output<Month>();\r\n public readonly timeChanged = output<Date | null>();\r\n\r\n protected readonly MONTHS = MONTHS;\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly todaysDay = new Date().getDate();\r\n protected readonly todaysMonth = new Date().getMonth();\r\n protected readonly todaysYear = new Date().getFullYear();\r\n protected readonly doTimeChange = (t: Date | null) => this.timeChanged.emit(t);\r\n protected readonly doYearChange = (t: number) => this.yearSelected.emit(t);\r\n protected readonly doMonthChange = (t: Month) => this.monthSelected.emit(t);\r\n\r\n protected readonly weekDaysSorted = computed(() =>\r\n WEEK_DAYS.slice(this._firstDayOfWeekIndex())\r\n .concat(WEEK_DAYS.slice(0, this._firstDayOfWeekIndex()))\r\n .map(day => ({\r\n weekDay: day,\r\n translation: this.i18n[`calendar_weekdaysShort_${day}`],\r\n }))\r\n );\r\n\r\n private readonly _dayButton = viewChildren<ElementRef<HTMLButtonElement>>('dayButton');\r\n private readonly _firstDayOfWeekIndex = computed(() => WEEK_DAYS.indexOf(this.firstDayOfWeek()));\r\n private readonly _daysInMonth = computed(() =>\r\n new Date(this.year(), this.month() + 1, 0).getDate()\r\n );\r\n private readonly _daysInPreviousMonth = computed(() =>\r\n new Date(this.year(), this.month(), 0).getDate()\r\n );\r\n private readonly _firstDayOfMonth = computed(() =>\r\n new Date(this.year(), this.month(), 1).getDay()\r\n );\r\n\r\n protected readonly monthModel = computed((): MonthModel => {\r\n const firstDayOfMonth = this._firstDayOfMonth();\r\n const firstDayOfWeek = this._firstDayOfWeekIndex();\r\n const daysInMonth = this._daysInMonth();\r\n const daysInPreviousMonth = this._daysInPreviousMonth();\r\n\r\n // Calculate starting point and total days needed\r\n const firstDayOffset = (firstDayOfMonth - firstDayOfWeek + 7) % 7;\r\n const daysFromPreviousMonth = firstDayOffset + WEEKS_BEFORE * 7;\r\n const daysToNextMonth = (7 - ((daysFromPreviousMonth + daysInMonth) % 7)) % 7;\r\n const totalDays = daysFromPreviousMonth + daysInMonth + daysToNextMonth + WEEKS_AFTER * 7;\r\n const startDay = daysInPreviousMonth - daysFromPreviousMonth + 1;\r\n\r\n // Build all days in one pass\r\n const allDays: DayModel[] = [];\r\n let currentDate = startDay;\r\n let currentMonth = -1; // -1 = previous, 0 = current, 1 = next\r\n\r\n for (let i = 0; i < totalDays; i++) {\r\n // Determine which month we're in\r\n if (currentDate > daysInPreviousMonth && currentMonth === -1) {\r\n currentDate = 1;\r\n currentMonth = 0;\r\n } else if (currentDate > daysInMonth && currentMonth === 0) {\r\n currentDate = 1;\r\n currentMonth = 1;\r\n }\r\n\r\n allDays.push({\r\n date: currentDate,\r\n monthOffset: currentMonth,\r\n });\r\n\r\n currentDate++;\r\n }\r\n\r\n // Group into weeks\r\n const weeks: WeekModel[] = [];\r\n for (let i = 0; i < allDays.length; i += 7) {\r\n weeks.push({\r\n days: allDays.slice(i, i + 7),\r\n });\r\n }\r\n\r\n return { weeks };\r\n });\r\n\r\n protected readonly tabFocusDay = computed(() => {\r\n const val = this.currentValue();\r\n if (val && val.getMonth() === this.month() && val.getFullYear() === this.year()) {\r\n return val.getDate();\r\n }\r\n return 1;\r\n });\r\n\r\n protected prev() {\r\n this.previousMonth.emit();\r\n }\r\n\r\n protected next() {\r\n this.nextMonth.emit();\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.yearSelected.emit(year);\r\n }\r\n\r\n protected dayKeydown(event: KeyboardEvent, day: HTMLButtonElement) {\r\n if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\r\n event.preventDefault();\r\n\r\n const getCurrentMonthButtons = () => {\r\n return this._dayButton()\r\n .map(ref => ref.nativeElement)\r\n .filter(x => !x.classList.contains(this.theme().class('day-other-month')));\r\n };\r\n\r\n const allDayButtons = getCurrentMonthButtons();\r\n const index = allDayButtons.indexOf(day);\r\n const daysInMonth = this._daysInMonth();\r\n if (event.key === 'ArrowRight') {\r\n if (index < daysInMonth - 1) {\r\n allDayButtons[index + 1]?.focus();\r\n } else {\r\n this.next();\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[0]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowLeft') {\r\n if (index > 0) {\r\n allDayButtons[index - 1]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n buttons[buttons.length - 1]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (index < daysInMonth - 7) {\r\n allDayButtons[index + 7]?.focus();\r\n } else {\r\n this.next();\r\n const nextIndex = (index + 7) % daysInMonth;\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[nextIndex]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (index >= 7) {\r\n allDayButtons[index - 7]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n const targetIndex = Math.min(buttons.length - 7 + index, buttons.length - 1);\r\n buttons[targetIndex]?.focus();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'chevron_left'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'chevron_right'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n type Signal,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnTemplate, Platform } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { NgnPopover } from '@ngneers/controls/popover';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { NgnError, throwExp } from '@ngneers/controls/utils';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport { CalendarTemplates } from './calendar-templates';\r\nimport { CalendarDays } from './days/days';\r\nimport { CalendarTime } from './time/time';\r\nimport { type DayModel, type Month, MONTHS, type WeekDay } from './types';\r\n\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\nfunction generateYearOptions(): NgnItem[] {\r\n const MAX_ITEMS = 200;\r\n const currentYear = new Date().getFullYear();\r\n return Array.from({ length: MAX_ITEMS }, (_, i) => ({\r\n label: (currentYear - MAX_ITEMS / 2 + i).toString(),\r\n value: currentYear - MAX_ITEMS / 2 + i,\r\n }));\r\n}\r\n\r\ntype MonthItemType = NgnItem<{ $: (typeof MONTHS)[number] }, '$'>;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar',\r\n templateUrl: './calendar.html',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnPt,\r\n NgnInput,\r\n NgnIcon,\r\n NgnInputField,\r\n NgnSelect,\r\n NgnPopover,\r\n CalendarDays,\r\n CalendarTime,\r\n ],\r\n providers: [provideSelf(NgnCalendar)],\r\n})\r\nexport class NgnCalendar extends CalendarTemplates {\r\n /**\r\n * Set the first day of the week.\r\n * @default 'monday'\r\n */\r\n public readonly firstDayOfWeek = input<WeekDay>('monday');\r\n /**\r\n * Whether to show the time input.\r\n * @default false\r\n */\r\n public readonly showTime = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show seconds in the time input.\r\n * @default false\r\n */\r\n public readonly showSeconds = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show the calendar inline instead of with a input field & popup.\r\n * @default false\r\n */\r\n public readonly inline = input(false, { transform: booleanAttribute });\r\n\r\n private readonly _popover = viewChild<NgnPopover>(NgnPopover);\r\n private readonly _platform = inject(Platform);\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly theme = this.injectThemeTemplate(calendarControlTemplate);\r\n protected readonly year = linkedSignal(\r\n () => this.value()?.getFullYear() || new Date().getFullYear()\r\n );\r\n protected readonly month = linkedSignal(() => this.value()?.getMonth() ?? new Date().getMonth());\r\n protected readonly yearOptions = generateYearOptions();\r\n protected readonly monthOptions: Signal<NgnItem<MonthItemType>[]> = computed(() => {\r\n const months = Array.from(\r\n { length: 12 },\r\n (_, i) =>\r\n <NgnItem>{\r\n label:\r\n this.i18n[\r\n `calendar_months_${MONTHS[i] ?? throwExp('calendar', 'invalid month index')}`\r\n ],\r\n value: MONTHS[i],\r\n testId: `calendar-month-${MONTHS[i]}`,\r\n }\r\n );\r\n return months;\r\n });\r\n protected readonly valueStr = computed(() => {\r\n const value = this.value();\r\n if (!value) {\r\n return null;\r\n }\r\n // Format as YYYY-MM-DD(THH:MM(:SS))\r\n return `${String(value.getFullYear()).padStart(4, '0')}-${String(value.getMonth() + 1).padStart(\r\n 2,\r\n '0'\r\n )}-${String(value.getDate()).padStart(2, '0')}${\r\n this.showTime()\r\n ? `T${String(value.getHours()).padStart(\r\n 2,\r\n '0'\r\n )}:${String(value.getMinutes()).padStart(2, '0')}${\r\n this.showSeconds() ? `:${String(value.getSeconds()).padStart(2, '0')}` : ''\r\n }`\r\n : ''\r\n }`;\r\n });\r\n\r\n protected readonly previousMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 0) {\r\n this.year.set(currentYear - 1);\r\n this.month.set(11); // December\r\n } else {\r\n this.month.set(currentMonth - 1);\r\n }\r\n };\r\n\r\n protected readonly nextMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 11) {\r\n this.year.set(currentYear + 1);\r\n this.month.set(0); // January\r\n } else {\r\n this.month.set(currentMonth + 1);\r\n }\r\n };\r\n\r\n protected readonly previousYear = () => {\r\n this.year.set(this.year() - 1);\r\n };\r\n\r\n protected readonly nextYear = () => {\r\n this.year.set(this.year() + 1);\r\n };\r\n\r\n protected selectMonth(month: Month) {\r\n this.month.set(MONTHS.indexOf(month));\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.year.set(year);\r\n }\r\n\r\n protected selectDay(day: DayModel) {\r\n const newValue = new Date(this.value() || new Date());\r\n newValue.setFullYear(this.year());\r\n newValue.setMonth(this.month() + day.monthOffset);\r\n newValue.setDate(day.date);\r\n this.value.set(newValue);\r\n }\r\n\r\n protected changeTime(newTime: Date | null) {\r\n if (!newTime) {\r\n this.value.set(null);\r\n return;\r\n }\r\n const currentValue = this.value();\r\n if (currentValue) {\r\n const newValue = new Date(currentValue);\r\n newValue.setHours(newTime.getHours());\r\n newValue.setMinutes(newTime.getMinutes());\r\n newValue.setSeconds(newTime.getSeconds());\r\n this.value.set(newValue);\r\n }\r\n }\r\n\r\n /**\r\n * Shows the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public show() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot open inline calendar');\r\n }\r\n if (this._platform.isTouchDevice() || this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.show();\r\n }\r\n\r\n /**\r\n * Hides the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public hide() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot close inline calendar');\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.hide();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent) {\r\n // @todo: handle date selection with keys\r\n\r\n // if event is not handled by the listbox, we can handle it here\r\n if (event.key === 'Enter' && !this.inline()) {\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.toggle();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected stringValueChange(newValue: string | null) {\r\n if (!newValue) {\r\n return true;\r\n }\r\n\r\n const date = new Date(newValue);\r\n if (!isNaN(date.getTime())) {\r\n if (!this.showTime()) {\r\n date.setHours(this.value()?.getHours() || 0);\r\n date.setMinutes(this.value()?.getMinutes() || 0);\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n } else if (!this.showSeconds()) {\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n }\r\n this.value.set(date);\r\n }\r\n return true;\r\n }\r\n\r\n protected potentiallyBlurred() {\r\n setTimeout(() => {\r\n if (this.element.nativeElement.contains(document.activeElement) || this._popover()?.open()) {\r\n return;\r\n }\r\n this.touched.set(true);\r\n });\r\n }\r\n}\r\n","@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngneers-controls-calendar.mjs","sources":["../../src/calendar/calendar-templates.ts","../../src/calendar/types.ts","../../src/calendar/days/days.ts","../../src/calendar/days/days.html","../../src/calendar/calendar.ts","../../src/calendar/calendar.html","../../src/calendar/ngneers-controls-calendar.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type {\r\n DayTemplateType,\r\n MonthTemplateType,\r\n TimeTemplateType,\r\n WeekDayTemplateType,\r\n YearTemplateType,\r\n} from './types';\r\n\r\n@Directive()\r\nexport abstract class CalendarTemplates extends ValueControlBase<'calendar', Date | null> {\r\n // Day template\r\n private readonly _defaultDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.day>>('defaultDayTemplate');\r\n private readonly _userDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.day>>('day');\r\n /**\r\n * Set a custom template for a day.\r\n * Can also be set using an `<ng-template>` element with `#day` template reference variable.\r\n */\r\n public readonly templateDay = input<TemplateRef<typeof this.templateTypes.day> | null>(null);\r\n protected readonly dayTemplate = computed(\r\n () => this._userDayTemplate() ?? this.templateDay() ?? this._defaultDayTemplate()\r\n );\r\n // Week day template\r\n private readonly _defaultWeekDayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.weekDay>>('defaultWeekDayTemplate');\r\n private readonly _userWeekDayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.weekDay>>('weekDay');\r\n /**\r\n * Set a custom template for a week day.\r\n * Can also be set using an `<ng-template>` element with `#weekDay` template reference variable.\r\n */\r\n public readonly templateWeekDay = input<TemplateRef<typeof this.templateTypes.weekDay> | null>(\r\n null\r\n );\r\n protected readonly weekDayTemplate = computed(\r\n () => this._userWeekDayTemplate() ?? this.templateWeekDay() ?? this._defaultWeekDayTemplate()\r\n );\r\n // Month template\r\n private readonly _defaultMonthTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.month>>('defaultMonthTemplate');\r\n private readonly _userMonthTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.month>>('month');\r\n /**\r\n * Set a custom template for a month.\r\n * Can also be set using an `<ng-template>` element with `#month` template reference variable.\r\n */\r\n public readonly templateMonth = input<TemplateRef<typeof this.templateTypes.month> | null>(null);\r\n protected readonly monthTemplate = computed(\r\n () => this._userMonthTemplate() ?? this.templateMonth() ?? this._defaultMonthTemplate()\r\n );\r\n // Time template\r\n private readonly _defaultTimeTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.time>>('defaultTimeTemplate');\r\n private readonly _userTimeTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.time>>('time');\r\n /**\r\n * Set a custom template for the time input.\r\n * Can also be set using an `<ng-template>` element with `#time` template reference variable.\r\n */\r\n public readonly templateTime = input<TemplateRef<typeof this.templateTypes.time> | null>(null);\r\n protected readonly timeTemplate = computed(\r\n () => this._userTimeTemplate() ?? this.templateTime() ?? this._defaultTimeTemplate()\r\n );\r\n // Year template\r\n private readonly _defaultYearTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.year>>('defaultYearTemplate');\r\n private readonly _userYearTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.year>>('year');\r\n /**\r\n * Set a custom template for the year input.\r\n * Can also be set using an `<ng-template>` element with `#year` template reference variable.\r\n */\r\n public readonly templateYear = input<TemplateRef<typeof this.templateTypes.year> | null>(null);\r\n protected readonly yearTemplate = computed(\r\n () => this._userYearTemplate() ?? this.templateYear() ?? this._defaultYearTemplate()\r\n );\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the day template.\r\n */\r\n day: DayTemplateType;\r\n /**\r\n * Type of the template variable for the week day template.\r\n */\r\n weekDay: WeekDayTemplateType;\r\n /**\r\n * Type of the template variable for the month template.\r\n */\r\n month: MonthTemplateType;\r\n /**\r\n * Type of the template variable for the time template.\r\n */\r\n time: TimeTemplateType;\r\n /**\r\n * Type of the template variable for the year template.\r\n */\r\n year: YearTemplateType;\r\n }>();\r\n}\r\n","export const MONTHS = [\r\n 'january',\r\n 'february',\r\n 'march',\r\n 'april',\r\n 'may',\r\n 'june',\r\n 'july',\r\n 'august',\r\n 'september',\r\n 'october',\r\n 'november',\r\n 'december',\r\n] as const;\r\n\r\nexport type Month = (typeof MONTHS)[number];\r\n\r\nexport const WEEK_DAYS = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n] as const;\r\n\r\nexport type WeekDay = (typeof WEEK_DAYS)[number];\r\n\r\nexport type DayModel = {\r\n date: number;\r\n /**\r\n * -1 = previous month, 0 = current month, 1 = next month\r\n */\r\n monthOffset: number;\r\n};\r\n\r\nexport type DayTemplateType = {\r\n $implicit: {\r\n date: number;\r\n selected: boolean;\r\n today: boolean;\r\n fromOtherMonth: boolean;\r\n };\r\n};\r\n\r\nexport type WeekDayTemplateType = {\r\n $implicit: {\r\n weekDay: WeekDay;\r\n translation: string;\r\n };\r\n};\r\n\r\nexport type MonthTemplateType = {\r\n $implicit: {\r\n month: Month;\r\n change: (newMonth: Month) => void;\r\n };\r\n};\r\n\r\nexport type TimeTemplateType = {\r\n $implicit: {\r\n time: Date | null;\r\n showSeconds: boolean;\r\n change: (newTime: Date | null) => void;\r\n };\r\n};\r\n\r\nexport type YearTemplateType = {\r\n $implicit: {\r\n year: number;\r\n change: (newYear: number) => void;\r\n };\r\n};\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n TemplateRef,\r\n viewChildren,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { type NgnBaseSafe, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport {\r\n type DayModel,\r\n type DayTemplateType,\r\n type Month,\r\n MONTHS,\r\n type MonthTemplateType,\r\n type TimeTemplateType,\r\n WEEK_DAYS,\r\n type WeekDay,\r\n type WeekDayTemplateType,\r\n type YearTemplateType,\r\n} from '../types';\r\n\r\nimport type { ControlTemplateInfo } from '@ngneers/controls/api/ng';\r\n\r\n// Configuration: Number of weeks to show before and after the current month\r\nconst WEEKS_BEFORE = 1;\r\nconst WEEKS_AFTER = 1;\r\n\r\ntype MonthModel = {\r\n weeks: WeekModel[];\r\n};\r\n\r\ntype WeekModel = {\r\n days: DayModel[];\r\n};\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar-days',\r\n templateUrl: './days.html',\r\n imports: [NgTemplateOutlet, NgnPt, NgnButton, NgnIcon],\r\n})\r\nexport class CalendarDays {\r\n public readonly component = input.required<NgnBaseSafe<'calendar'>>();\r\n public readonly theme = input.required<ControlTemplateInfo<typeof calendarControlTemplate>>();\r\n public readonly year = input.required<number>();\r\n public readonly month = input.required<number>();\r\n public readonly currentValue = input.required<Date | null>();\r\n public readonly firstDayOfWeek = input.required<WeekDay>();\r\n public readonly dayTemplate = input.required<TemplateRef<DayTemplateType>>();\r\n public readonly weekDayTemplate = input.required<TemplateRef<WeekDayTemplateType>>();\r\n public readonly timeTemplate = input.required<TemplateRef<TimeTemplateType>>();\r\n public readonly yearTemplate = input.required<TemplateRef<YearTemplateType>>();\r\n public readonly monthTemplate = input.required<TemplateRef<MonthTemplateType>>();\r\n public readonly showTime = input.required<boolean>();\r\n public readonly showSeconds = input.required<boolean>();\r\n public readonly previousMonth = output();\r\n public readonly nextMonth = output();\r\n public readonly daySelected = output<DayModel>();\r\n public readonly yearSelected = output<number>();\r\n public readonly monthSelected = output<Month>();\r\n public readonly timeChanged = output<Date | null>();\r\n\r\n protected readonly MONTHS = MONTHS;\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly todaysDay = new Date().getDate();\r\n protected readonly todaysMonth = new Date().getMonth();\r\n protected readonly todaysYear = new Date().getFullYear();\r\n protected readonly doTimeChange = (t: Date | null) => this.timeChanged.emit(t);\r\n protected readonly doYearChange = (t: number) => this.yearSelected.emit(t);\r\n protected readonly doMonthChange = (t: Month) => this.monthSelected.emit(t);\r\n\r\n protected readonly weekDaysSorted = computed(() =>\r\n WEEK_DAYS.slice(this._firstDayOfWeekIndex())\r\n .concat(WEEK_DAYS.slice(0, this._firstDayOfWeekIndex()))\r\n .map(day => ({\r\n weekDay: day,\r\n translation: this.i18n[`calendar_weekdaysShort_${day}`],\r\n }))\r\n );\r\n\r\n private readonly _dayButton = viewChildren<ElementRef<HTMLButtonElement>>('dayButton');\r\n private readonly _firstDayOfWeekIndex = computed(() => WEEK_DAYS.indexOf(this.firstDayOfWeek()));\r\n private readonly _daysInMonth = computed(() =>\r\n new Date(this.year(), this.month() + 1, 0).getDate()\r\n );\r\n private readonly _daysInPreviousMonth = computed(() =>\r\n new Date(this.year(), this.month(), 0).getDate()\r\n );\r\n private readonly _firstDayOfMonth = computed(() =>\r\n new Date(this.year(), this.month(), 1).getDay()\r\n );\r\n\r\n protected readonly monthModel = computed((): MonthModel => {\r\n const firstDayOfMonth = this._firstDayOfMonth();\r\n const firstDayOfWeek = this._firstDayOfWeekIndex();\r\n const daysInMonth = this._daysInMonth();\r\n const daysInPreviousMonth = this._daysInPreviousMonth();\r\n\r\n // Calculate starting point and total days needed\r\n const firstDayOffset = (firstDayOfMonth - firstDayOfWeek + 7) % 7;\r\n const daysFromPreviousMonth = firstDayOffset + WEEKS_BEFORE * 7;\r\n const daysToNextMonth = (7 - ((daysFromPreviousMonth + daysInMonth) % 7)) % 7;\r\n const totalDays = daysFromPreviousMonth + daysInMonth + daysToNextMonth + WEEKS_AFTER * 7;\r\n const startDay = daysInPreviousMonth - daysFromPreviousMonth + 1;\r\n\r\n // Build all days in one pass\r\n const allDays: DayModel[] = [];\r\n let currentDate = startDay;\r\n let currentMonth = -1; // -1 = previous, 0 = current, 1 = next\r\n\r\n for (let i = 0; i < totalDays; i++) {\r\n // Determine which month we're in\r\n if (currentDate > daysInPreviousMonth && currentMonth === -1) {\r\n currentDate = 1;\r\n currentMonth = 0;\r\n } else if (currentDate > daysInMonth && currentMonth === 0) {\r\n currentDate = 1;\r\n currentMonth = 1;\r\n }\r\n\r\n allDays.push({\r\n date: currentDate,\r\n monthOffset: currentMonth,\r\n });\r\n\r\n currentDate++;\r\n }\r\n\r\n // Group into weeks\r\n const weeks: WeekModel[] = [];\r\n for (let i = 0; i < allDays.length; i += 7) {\r\n weeks.push({\r\n days: allDays.slice(i, i + 7),\r\n });\r\n }\r\n\r\n return { weeks };\r\n });\r\n\r\n protected readonly tabFocusDay = computed(() => {\r\n const val = this.currentValue();\r\n if (val && val.getMonth() === this.month() && val.getFullYear() === this.year()) {\r\n return val.getDate();\r\n }\r\n return 1;\r\n });\r\n\r\n protected prev() {\r\n this.previousMonth.emit();\r\n }\r\n\r\n protected next() {\r\n this.nextMonth.emit();\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.yearSelected.emit(year);\r\n }\r\n\r\n protected dayKeydown(event: KeyboardEvent, day: HTMLButtonElement) {\r\n if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\r\n event.preventDefault();\r\n\r\n const getCurrentMonthButtons = () => {\r\n return this._dayButton()\r\n .map(ref => ref.nativeElement)\r\n .filter(x => !x.classList.contains(this.theme().class('day-other-month')));\r\n };\r\n\r\n const allDayButtons = getCurrentMonthButtons();\r\n const index = allDayButtons.indexOf(day);\r\n const daysInMonth = this._daysInMonth();\r\n if (event.key === 'ArrowRight') {\r\n if (index < daysInMonth - 1) {\r\n allDayButtons[index + 1]?.focus();\r\n } else {\r\n this.next();\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[0]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowLeft') {\r\n if (index > 0) {\r\n allDayButtons[index - 1]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n buttons[buttons.length - 1]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowDown') {\r\n if (index < daysInMonth - 7) {\r\n allDayButtons[index + 7]?.focus();\r\n } else {\r\n this.next();\r\n const nextIndex = (index + 7) % daysInMonth;\r\n setTimeout(() => {\r\n getCurrentMonthButtons()[nextIndex]?.focus();\r\n });\r\n }\r\n } else if (event.key === 'ArrowUp') {\r\n if (index >= 7) {\r\n allDayButtons[index - 7]?.focus();\r\n } else {\r\n this.prev();\r\n setTimeout(() => {\r\n const buttons = getCurrentMonthButtons();\r\n const targetIndex = Math.min(buttons.length - 7 + index, buttons.length - 1);\r\n buttons[targetIndex]?.focus();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div [ptInt]=\"component()\" [ptClass]=\"'details'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'header'\">\r\n <div [ptInt]=\"component()\" [ptClass]=\"'navigation'\">\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"'previous'\"\r\n (click)=\"prev()\"\r\n >\r\n <ngn-icon [defaultIcon]=\"'calendar-previous-month'\" />\r\n </button>\r\n <button ngnButton [kind]=\"'icon'\" [ptInt]=\"component()\" [ptClass]=\"'next'\" (click)=\"next()\">\r\n <ngn-icon [defaultIcon]=\"'calendar-next-month'\" />\r\n </button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthTemplate();\r\n context: {\r\n $implicit: {\r\n month: MONTHS[month()],\r\n change: doMonthChange,\r\n },\r\n }\r\n \"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n yearTemplate();\r\n context: {\r\n $implicit: {\r\n year: year(),\r\n change: doYearChange,\r\n },\r\n }\r\n \"\r\n />\r\n </div>\r\n <div class=\"ngn-calendar-days\">\r\n @for (weekDay of weekDaysSorted(); track weekDay) {\r\n <span [ptInt]=\"component()\" [ptClass]=\"'week-day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekDayTemplate();\r\n context: {\r\n $implicit: {\r\n weekDay: weekDay.weekDay,\r\n translation: weekDay.translation(),\r\n },\r\n }\r\n \"\r\n />\r\n </span>\r\n }\r\n @for (item of monthModel().weeks; track $index) {\r\n @for (day of item.days; track $index) {\r\n <button\r\n #dayButton\r\n [ptInt]=\"component()\"\r\n [ptClass]=\"{\r\n day: true,\r\n 'day-other-month': day.monthOffset !== 0,\r\n 'day-today':\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n 'day-selected':\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n }\"\r\n [tabIndex]=\"!day.monthOffset && tabFocusDay() === day.date ? 0 : -1\"\r\n type=\"button\"\r\n (click)=\"\r\n daySelected.emit({\r\n date: day.date,\r\n monthOffset: day.monthOffset,\r\n })\r\n \"\r\n (keydown)=\"dayKeydown($event, dayButton)\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n dayTemplate();\r\n context: {\r\n $implicit: {\r\n date: day.date,\r\n fromOtherMonth: day.monthOffset !== 0,\r\n selected:\r\n currentValue()?.getDate() === day.date &&\r\n currentValue()?.getMonth() === month() + day.monthOffset &&\r\n currentValue()?.getFullYear() === year(),\r\n today:\r\n todaysMonth === month() + day.monthOffset &&\r\n todaysDay === day.date &&\r\n todaysYear === year(),\r\n },\r\n }\r\n \"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n @if (showTime()) {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n timeTemplate();\r\n context: {\r\n $implicit: { time: currentValue(), showSeconds: showSeconds(), change: doTimeChange },\r\n }\r\n \"\r\n />\r\n }\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n type Signal,\r\n viewChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnTemplate, Platform } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { NgnPopover } from '@ngneers/controls/popover';\r\nimport { NgnSelect } from '@ngneers/controls/select';\r\nimport { NgnError, throwExp } from '@ngneers/controls/utils';\r\nimport { calendarControlTemplate } from '@ngneers/controls-themes/templates/calendar';\r\n\r\nimport { CalendarTemplates } from './calendar-templates';\r\nimport { CalendarDays } from './days/days';\r\nimport { CalendarTime } from './time/time';\r\nimport { type DayModel, type Month, MONTHS, type WeekDay } from './types';\r\n\r\nimport type { NgnItem } from '@ngneers/controls/api';\r\n\r\nfunction generateYearOptions(): NgnItem[] {\r\n const MAX_ITEMS = 200;\r\n const currentYear = new Date().getFullYear();\r\n return Array.from({ length: MAX_ITEMS }, (_, i) => ({\r\n label: (currentYear - MAX_ITEMS / 2 + i).toString(),\r\n value: currentYear - MAX_ITEMS / 2 + i,\r\n }));\r\n}\r\n\r\ntype MonthItemType = NgnItem<{ $: (typeof MONTHS)[number] }, '$'>;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-calendar',\r\n templateUrl: './calendar.html',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnPt,\r\n NgnInput,\r\n NgnIcon,\r\n NgnInputField,\r\n NgnSelect,\r\n NgnPopover,\r\n CalendarDays,\r\n CalendarTime,\r\n ],\r\n providers: [provideSelf(NgnCalendar)],\r\n})\r\nexport class NgnCalendar extends CalendarTemplates {\r\n /**\r\n * Set the first day of the week.\r\n * @default 'monday'\r\n */\r\n public readonly firstDayOfWeek = input<WeekDay>('monday');\r\n /**\r\n * Whether to show the time input.\r\n * @default false\r\n */\r\n public readonly showTime = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show seconds in the time input.\r\n * @default false\r\n */\r\n public readonly showSeconds = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to show the calendar inline instead of with a input field & popup.\r\n * @default false\r\n */\r\n public readonly inline = input(false, { transform: booleanAttribute });\r\n\r\n private readonly _popover = viewChild<NgnPopover>(NgnPopover);\r\n private readonly _platform = inject(Platform);\r\n protected readonly i18n = inject(I18n).translations;\r\n protected readonly theme = this.injectThemeTemplate(calendarControlTemplate);\r\n protected readonly year = linkedSignal(\r\n () => this.value()?.getFullYear() || new Date().getFullYear()\r\n );\r\n protected readonly month = linkedSignal(() => this.value()?.getMonth() ?? new Date().getMonth());\r\n protected readonly yearOptions = generateYearOptions();\r\n protected readonly monthOptions: Signal<NgnItem<MonthItemType>[]> = computed(() => {\r\n const months = Array.from(\r\n { length: 12 },\r\n (_, i) =>\r\n <NgnItem>{\r\n label:\r\n this.i18n[\r\n `calendar_months_${MONTHS[i] ?? throwExp('calendar', 'invalid month index')}`\r\n ],\r\n value: MONTHS[i],\r\n testId: `calendar-month-${MONTHS[i]}`,\r\n }\r\n );\r\n return months;\r\n });\r\n protected readonly valueStr = computed(() => {\r\n const value = this.value();\r\n if (!value) {\r\n return null;\r\n }\r\n // Format as YYYY-MM-DD(THH:MM(:SS))\r\n return `${String(value.getFullYear()).padStart(4, '0')}-${String(value.getMonth() + 1).padStart(\r\n 2,\r\n '0'\r\n )}-${String(value.getDate()).padStart(2, '0')}${\r\n this.showTime()\r\n ? `T${String(value.getHours()).padStart(\r\n 2,\r\n '0'\r\n )}:${String(value.getMinutes()).padStart(2, '0')}${\r\n this.showSeconds() ? `:${String(value.getSeconds()).padStart(2, '0')}` : ''\r\n }`\r\n : ''\r\n }`;\r\n });\r\n\r\n protected readonly previousMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 0) {\r\n this.year.set(currentYear - 1);\r\n this.month.set(11); // December\r\n } else {\r\n this.month.set(currentMonth - 1);\r\n }\r\n };\r\n\r\n protected readonly nextMonth = () => {\r\n const currentMonth = this.month();\r\n const currentYear = this.year();\r\n if (currentMonth === 11) {\r\n this.year.set(currentYear + 1);\r\n this.month.set(0); // January\r\n } else {\r\n this.month.set(currentMonth + 1);\r\n }\r\n };\r\n\r\n protected readonly previousYear = () => {\r\n this.year.set(this.year() - 1);\r\n };\r\n\r\n protected readonly nextYear = () => {\r\n this.year.set(this.year() + 1);\r\n };\r\n\r\n protected selectMonth(month: Month) {\r\n this.month.set(MONTHS.indexOf(month));\r\n }\r\n\r\n protected selectYear(year: number) {\r\n this.year.set(year);\r\n }\r\n\r\n protected selectDay(day: DayModel) {\r\n const newValue = new Date(this.value() || new Date());\r\n newValue.setFullYear(this.year());\r\n newValue.setMonth(this.month() + day.monthOffset);\r\n newValue.setDate(day.date);\r\n this.value.set(newValue);\r\n }\r\n\r\n protected changeTime(newTime: Date | null) {\r\n if (!newTime) {\r\n this.value.set(null);\r\n return;\r\n }\r\n const currentValue = this.value();\r\n if (currentValue) {\r\n const newValue = new Date(currentValue);\r\n newValue.setHours(newTime.getHours());\r\n newValue.setMinutes(newTime.getMinutes());\r\n newValue.setSeconds(newTime.getSeconds());\r\n this.value.set(newValue);\r\n }\r\n }\r\n\r\n /**\r\n * Shows the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public show() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot open inline calendar');\r\n }\r\n if (this._platform.isTouchDevice() || this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.show();\r\n }\r\n\r\n /**\r\n * Hides the calendar popup. Only works if `inline` is `false`.\r\n */\r\n public hide() {\r\n if (this.inline()) {\r\n throw new NgnError('calendar', 'cannot close inline calendar');\r\n }\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.hide();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent) {\r\n // @todo: handle date selection with keys\r\n\r\n // if event is not handled by the listbox, we can handle it here\r\n if (event.key === 'Enter' && !this.inline()) {\r\n const popover = this._popover();\r\n if (!popover) {\r\n throw new NgnError('calendar', 'popover not found despite inline being false');\r\n }\r\n popover.toggle();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected stringValueChange(newValue: string | null) {\r\n if (!newValue) {\r\n return true;\r\n }\r\n\r\n const date = new Date(newValue);\r\n if (!isNaN(date.getTime())) {\r\n if (!this.showTime()) {\r\n date.setHours(this.value()?.getHours() || 0);\r\n date.setMinutes(this.value()?.getMinutes() || 0);\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n } else if (!this.showSeconds()) {\r\n date.setSeconds(this.value()?.getSeconds() || 0);\r\n }\r\n this.value.set(date);\r\n }\r\n return true;\r\n }\r\n\r\n protected potentiallyBlurred() {\r\n setTimeout(() => {\r\n if (this.element.nativeElement.contains(document.activeElement) || this._popover()?.open()) {\r\n return;\r\n }\r\n this.touched.set(true);\r\n });\r\n }\r\n}\r\n","@if (inline()) {\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n} @else {\r\n <ngn-input-field\r\n #field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <input\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n ngnInput\r\n #input\r\n (valueChange)=\"stringValueChange($event)\"\r\n [type]=\"showTime() ? 'datetime-local' : 'date'\"\r\n [value]=\"valueStr()\"\r\n [disabled]=\"disabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n <ngn-icon defaultIcon=\"calendar-trigger\" />\r\n </ngn-input-field>\r\n <ngn-popover\r\n #popover\r\n [anchor]=\"field.element.nativeElement\"\r\n [id]=\"inputId() + '_popover'\"\r\n (closing)=\"potentiallyBlurred()\"\r\n >\r\n <ng-template #lazy>\r\n <ng-container *ngTemplateOutlet=\"calendar\"></ng-container>\r\n </ng-template>\r\n </ngn-popover>\r\n}\r\n\r\n<ng-template #calendar>\r\n <div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n root: true,\r\n inline: inline(),\r\n }\"\r\n >\r\n <ngn-calendar-days\r\n [component]=\"this\"\r\n [theme]=\"theme\"\r\n [year]=\"year()\"\r\n [month]=\"month()\"\r\n [currentValue]=\"value()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n (previousMonth)=\"previousMonth()\"\r\n (nextMonth)=\"nextMonth()\"\r\n (daySelected)=\"selectDay($event)\"\r\n (monthSelected)=\"selectMonth($event)\"\r\n (yearSelected)=\"selectYear($event)\"\r\n (timeChanged)=\"changeTime($event)\"\r\n [dayTemplate]=\"dayTemplate()\"\r\n [weekDayTemplate]=\"weekDayTemplate()\"\r\n [timeTemplate]=\"timeTemplate()\"\r\n [yearTemplate]=\"yearTemplate()\"\r\n [monthTemplate]=\"monthTemplate()\"\r\n [showTime]=\"showTime()\"\r\n [showSeconds]=\"showSeconds()\"\r\n (focusout)=\"potentiallyBlurred()\"\r\n />\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayTemplate [ngnTemplate]=\"templateTypes.day\" let-day>\r\n {{ day.date }}\r\n</ng-template>\r\n\r\n<ng-template #defaultWeekDayTemplate [ngnTemplate]=\"templateTypes.weekDay\" let-weekDay>\r\n <span>\r\n {{ weekDay.translation }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #defaultTimeTemplate [ngnTemplate]=\"templateTypes.time\" let-time>\r\n @defer {\r\n <div [ptInt]=\"this\" [ptClass]=\"'time'\">\r\n <ngn-calendar-time\r\n [component]=\"this\"\r\n [currentValue]=\"time.time\"\r\n [showSeconds]=\"time.showSeconds\"\r\n (timeChange)=\"time.change($event)\"\r\n />\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultYearTemplate [ngnTemplate]=\"templateTypes.year\" let-y>\r\n @defer {\r\n <ngn-select\r\n [editable]=\"true\"\r\n [value]=\"year() + ''\"\r\n (valueChange)=\"y.change(+($event || 0))\"\r\n [options]=\"yearOptions\"\r\n [virtual]=\"true\"\r\n [itemHeight]=\"40\"\r\n [popoverOptions]=\"{ sizeConstraints: { maxHeight: '300px' } }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-year'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [editableAutoFilter]=\"false\"\r\n [tabindex]=\"-1\"\r\n >\r\n <input ngnInput type=\"number\" [attr.aria-label]=\"i18n['calendar_selectYear']()\" />\r\n </ngn-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultMonthTemplate [ngnTemplate]=\"templateTypes.month\" let-m>\r\n @defer {\r\n <ngn-select\r\n [value]=\"m.month\"\r\n (valueChange)=\"m.change($event!)\"\r\n [options]=\"monthOptions()\"\r\n [popoverOptions]=\"{\r\n sizeConstraints: { maxHeight: '300px', width: '130px', maxWidth: '130px' },\r\n }\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'current-month'\"\r\n [scrollToSelectedItemOnOpen]=\"'center'\"\r\n [tabindex]=\"-1\"\r\n />\r\n }\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -15,21 +15,21 @@ class NgnCheckbox extends ValueControlBase {
|
|
|
15
15
|
/**
|
|
16
16
|
* Set a custom icon for the checked state.
|
|
17
17
|
*/
|
|
18
|
-
iconChecked = input(...(ngDevMode ? [undefined, { debugName: "iconChecked" }] : []));
|
|
18
|
+
iconChecked = input(...(ngDevMode ? [undefined, { debugName: "iconChecked" }] : /* istanbul ignore next */ []));
|
|
19
19
|
/**
|
|
20
20
|
* Set a custom icon for the unchecked state.
|
|
21
21
|
*/
|
|
22
|
-
iconUnchecked = input(...(ngDevMode ? [undefined, { debugName: "iconUnchecked" }] : []));
|
|
22
|
+
iconUnchecked = input(...(ngDevMode ? [undefined, { debugName: "iconUnchecked" }] : /* istanbul ignore next */ []));
|
|
23
23
|
/**
|
|
24
24
|
* Set a custom icon for the indeterminate state.
|
|
25
25
|
*/
|
|
26
|
-
iconIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "iconIndeterminate" }] : []));
|
|
26
|
+
iconIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "iconIndeterminate" }] : /* istanbul ignore next */ []));
|
|
27
27
|
/**
|
|
28
28
|
* Set whether to allow the indeterminate state.
|
|
29
29
|
* If `true`, this will change the {@link value} type to `boolean | null`.
|
|
30
30
|
*/
|
|
31
|
-
allowIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "allowIndeterminate" }] : []));
|
|
32
|
-
indeterminate = computed(() => this.allowIndeterminate() && this.value() === null, ...(ngDevMode ? [{ debugName: "indeterminate" }] : []));
|
|
31
|
+
allowIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "allowIndeterminate" }] : /* istanbul ignore next */ []));
|
|
32
|
+
indeterminate = computed(() => this.allowIndeterminate() && this.value() === null, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
33
33
|
changed(event) {
|
|
34
34
|
const target = event.target;
|
|
35
35
|
this.value.set(target.checked);
|
|
@@ -42,12 +42,12 @@ class NgnCheckbox extends ValueControlBase {
|
|
|
42
42
|
constructor() {
|
|
43
43
|
super();
|
|
44
44
|
}
|
|
45
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
46
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnCheckbox, isStandalone: true, selector: "ngn-checkbox", inputs: { iconChecked: { classPropertyName: "iconChecked", publicName: "iconChecked", isSignal: true, isRequired: false, transformFunction: null }, iconUnchecked: { classPropertyName: "iconUnchecked", publicName: "iconUnchecked", isSignal: true, isRequired: false, transformFunction: null }, iconIndeterminate: { classPropertyName: "iconIndeterminate", publicName: "iconIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, allowIndeterminate: { classPropertyName: "allowIndeterminate", publicName: "allowIndeterminate", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnCheckbox)], usesInheritance: true, ngImport: i0, template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47
47
|
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnCheckbox, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-checkbox', imports: [NgnPt, NgnIcon], providers: [provideSelf(NgnCheckbox)], template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n
|
|
50
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-checkbox', imports: [NgnPt, NgnIcon], providers: [provideSelf(NgnCheckbox)], template: "<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n" }]
|
|
51
51
|
}], ctorParameters: () => [], propDecorators: { iconChecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconChecked", required: false }] }], iconUnchecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconUnchecked", required: false }] }], iconIndeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconIndeterminate", required: false }] }], allowIndeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowIndeterminate", required: false }] }] } });
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-checkbox.mjs","sources":["../../src/checkbox/checkbox.ts","../../src/checkbox/checkbox.html","../../src/checkbox/ngneers-controls-checkbox.ts"],"sourcesContent":["import { Component, computed, input
|
|
1
|
+
{"version":3,"file":"ngneers-controls-checkbox.mjs","sources":["../../src/checkbox/checkbox.ts","../../src/checkbox/checkbox.html","../../src/checkbox/ngneers-controls-checkbox.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { NgnPt, provideSelf, ValueControlBase } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { checkboxControlTemplate } from '@ngneers/controls-themes/templates/checkbox';\r\n\r\nimport type { InputGeneric } from '@ngneers/controls/utils';\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\ntype ValueType<Indeterminate extends boolean> =\r\n InputGeneric<Indeterminate, false> extends false ? boolean : boolean | null;\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-checkbox',\r\n templateUrl: './checkbox.html',\r\n imports: [NgnPt, NgnIcon],\r\n providers: [provideSelf(NgnCheckbox)],\r\n})\r\nexport class NgnCheckbox<Indeterminate extends boolean> extends ValueControlBase<\r\n 'checkbox',\r\n ValueType<Indeterminate>\r\n> {\r\n protected readonly theme = this.injectThemeTemplate(checkboxControlTemplate, {\r\n root: true,\r\n invalid: () => this.invalid(),\r\n });\r\n\r\n /**\r\n * Set a custom icon for the checked state.\r\n */\r\n public readonly iconChecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the unchecked state.\r\n */\r\n public readonly iconUnchecked = input<IconType>();\r\n /**\r\n * Set a custom icon for the indeterminate state.\r\n */\r\n public readonly iconIndeterminate = input<IconType>();\r\n /**\r\n * Set whether to allow the indeterminate state.\r\n * If `true`, this will change the {@link value} type to `boolean | null`.\r\n */\r\n public readonly allowIndeterminate = input<Indeterminate>();\r\n protected readonly indeterminate = computed(\r\n () => this.allowIndeterminate() && this.value() === null\r\n );\r\n\r\n protected changed(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.value.set(target.checked);\r\n }\r\n\r\n protected onClick(event: Event) {\r\n if (this.readonly() || this.disabled()) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n}\r\n","<div\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n box: true,\r\n 'box-checked': !!value(),\r\n 'box-indeterminate': indeterminate(),\r\n }\"\r\n>\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': indeterminate(),\r\n }\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'checkbox-indeterminate'\"\r\n />\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !!value(),\r\n }\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'checkbox-checked'\"\r\n />\r\n @if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n 'box-icon': true,\r\n 'box-icon-visible': !indeterminate() && !value(),\r\n }\"\r\n [icon]=\"iconUnchecked()\"\r\n />\r\n }\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [indeterminate]=\"indeterminate()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -18,16 +18,16 @@ class NgnChip extends NgnBase {
|
|
|
18
18
|
* Set whether the chip can be closed (removed).
|
|
19
19
|
* @default false
|
|
20
20
|
*/
|
|
21
|
-
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : {}), transform: booleanAttribute });
|
|
21
|
+
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
22
22
|
/**
|
|
23
23
|
* Set whether the chip is actionable (can be clicked).
|
|
24
24
|
* @default false
|
|
25
25
|
*/
|
|
26
|
-
actionable = input(false, { ...(ngDevMode ? { debugName: "actionable" } : {}), transform: booleanAttribute });
|
|
26
|
+
actionable = input(false, { ...(ngDevMode ? { debugName: "actionable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
27
27
|
/**
|
|
28
28
|
* Set a custom icon for the close button.
|
|
29
29
|
*/
|
|
30
|
-
iconClose = input(...(ngDevMode ? [undefined, { debugName: "iconClose" }] : []));
|
|
30
|
+
iconClose = input(...(ngDevMode ? [undefined, { debugName: "iconClose" }] : /* istanbul ignore next */ []));
|
|
31
31
|
/**
|
|
32
32
|
* Emitted when the chip is closed (removed).
|
|
33
33
|
*/
|
|
@@ -36,12 +36,12 @@ class NgnChip extends NgnBase {
|
|
|
36
36
|
* Emitted when the chip is clicked.
|
|
37
37
|
*/
|
|
38
38
|
clicked = output();
|
|
39
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
40
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnChip, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnChip, isStandalone: true, selector: "ngn-chip", inputs: { closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, actionable: { classPropertyName: "actionable", publicName: "actionable", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", clicked: "clicked" }, providers: [provideSelf(NgnChip)], usesInheritance: true, ngImport: i0, template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
41
41
|
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnChip, decorators: [{
|
|
43
43
|
type: Component,
|
|
44
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-chip', imports: [NgnPt, NgnIcon, NgTemplateOutlet], providers: [provideSelf(NgnChip)], template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'
|
|
44
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-chip', imports: [NgnPt, NgnIcon, NgTemplateOutlet], providers: [provideSelf(NgnChip)], template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n" }]
|
|
45
45
|
}], propDecorators: { closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], actionable: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionable", required: false }] }], iconClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconClose", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
|
|
46
46
|
|
|
47
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-chip.mjs","sources":["../../src/chip/chip.ts","../../src/chip/chip.html","../../src/chip/ngneers-controls-chip.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport { booleanAttribute, Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { chipControlTemplate } from '@ngneers/controls-themes/templates/chip';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-chip',\r\n templateUrl: './chip.html',\r\n imports: [NgnPt, NgnIcon, NgTemplateOutlet],\r\n providers: [provideSelf(NgnChip)],\r\n})\r\nexport class NgnChip extends NgnBase<'chip'> {\r\n protected readonly theme = this.injectThemeTemplate(chipControlTemplate, {\r\n root: true,\r\n closable: () => this.closable(),\r\n actionable: () => this.actionable(),\r\n });\r\n\r\n /**\r\n * Set whether the chip can be closed (removed).\r\n * @default false\r\n */\r\n public readonly closable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set whether the chip is actionable (can be clicked).\r\n * @default false\r\n */\r\n public readonly actionable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set a custom icon for the close button.\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Emitted when the chip is closed (removed).\r\n */\r\n public readonly closed = output<Event>();\r\n /**\r\n * Emitted when the chip is clicked.\r\n */\r\n public readonly clicked = output<Event>();\r\n}\r\n","@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'
|
|
1
|
+
{"version":3,"file":"ngneers-controls-chip.mjs","sources":["../../src/chip/chip.ts","../../src/chip/chip.html","../../src/chip/ngneers-controls-chip.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport { booleanAttribute, Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { chipControlTemplate } from '@ngneers/controls-themes/templates/chip';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-chip',\r\n templateUrl: './chip.html',\r\n imports: [NgnPt, NgnIcon, NgTemplateOutlet],\r\n providers: [provideSelf(NgnChip)],\r\n})\r\nexport class NgnChip extends NgnBase<'chip'> {\r\n protected readonly theme = this.injectThemeTemplate(chipControlTemplate, {\r\n root: true,\r\n closable: () => this.closable(),\r\n actionable: () => this.actionable(),\r\n });\r\n\r\n /**\r\n * Set whether the chip can be closed (removed).\r\n * @default false\r\n */\r\n public readonly closable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set whether the chip is actionable (can be clicked).\r\n * @default false\r\n */\r\n public readonly actionable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set a custom icon for the close button.\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Emitted when the chip is closed (removed).\r\n */\r\n public readonly closed = output<Event>();\r\n /**\r\n * Emitted when the chip is clicked.\r\n */\r\n public readonly clicked = output<Event>();\r\n}\r\n","@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAQA;;AAEG;AAQG,MAAO,OAAQ,SAAQ,OAAe,CAAA;AACvB,IAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;AACvE,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;AACpC,KAAA,CAAC;AAEF;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxE;;;AAGG;IACa,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC1E;;AAEG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;AAC7C;;AAEG;IACa,MAAM,GAAG,MAAM,EAAS;AACxC;;AAEG;IACa,OAAO,GAAG,MAAM,EAAS;wGA5B9B,OAAO,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAFP,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBnC,yuBAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTY,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,sFAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAG/B,OAAO,EAAA,UAAA,EAAA,CAAA;kBAPnB,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,UAAU,EAAA,OAAA,EAEX,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAA,SAAA,EAChC,CAAC,WAAW,SAAS,CAAC,EAAA,QAAA,EAAA,yuBAAA,EAAA;;;AEhBnC;;AAEG;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import tablerArrowsSort from '@iconify/icons-tabler/arrows-sort';
|
|
2
|
+
import tablerCalendar from '@iconify/icons-tabler/calendar';
|
|
3
|
+
import tablerCheck from '@iconify/icons-tabler/check';
|
|
4
|
+
import tablerChevronDown from '@iconify/icons-tabler/chevron-down';
|
|
5
|
+
import tablerChevronLeft from '@iconify/icons-tabler/chevron-left';
|
|
6
|
+
import tablerChevronRight from '@iconify/icons-tabler/chevron-right';
|
|
7
|
+
import tablerChevronUp from '@iconify/icons-tabler/chevron-up';
|
|
8
|
+
import tablerDots from '@iconify/icons-tabler/dots';
|
|
9
|
+
import tablerFilter from '@iconify/icons-tabler/filter';
|
|
10
|
+
import tablerFilterFilled from '@iconify/icons-tabler/filter-filled';
|
|
11
|
+
import tablerMinus from '@iconify/icons-tabler/minus';
|
|
12
|
+
import tablerSearch from '@iconify/icons-tabler/search';
|
|
13
|
+
import tablerSortAscending from '@iconify/icons-tabler/sort-ascending';
|
|
14
|
+
import tablerSortDescending from '@iconify/icons-tabler/sort-descending';
|
|
15
|
+
import tablerX from '@iconify/icons-tabler/x';
|
|
16
|
+
import { NGN_ICON_REGISTRY, NGN_CUSTOM_ICONS } from '@ngneers/controls/icon';
|
|
17
|
+
|
|
18
|
+
const NGN_DEFAULT_ICON_REGISTRY = {
|
|
19
|
+
'accordion-collapse': { icon: tablerChevronUp, scale: 1.71 },
|
|
20
|
+
'accordion-expand': { icon: tablerChevronDown, scale: 1.71 },
|
|
21
|
+
'breadcrumb-separator': { icon: tablerChevronRight, scale: 1.71 },
|
|
22
|
+
'breadcrumb-overflow': { icon: tablerDots, scale: 1.33 },
|
|
23
|
+
'calendar-trigger': { icon: tablerCalendar, scale: 1.14 },
|
|
24
|
+
'calendar-previous-month': { icon: tablerChevronLeft, scale: 1.71 },
|
|
25
|
+
'calendar-next-month': { icon: tablerChevronRight, scale: 1.71 },
|
|
26
|
+
'checkbox-checked': { icon: tablerCheck, scale: 1.41 },
|
|
27
|
+
'checkbox-indeterminate': { icon: tablerMinus, scale: 1.5 },
|
|
28
|
+
'chip-remove': { icon: tablerX, scale: 1.71 },
|
|
29
|
+
'dialog-close': { icon: tablerX, scale: 1.71 },
|
|
30
|
+
'drawer-close': { icon: tablerX, scale: 1.71 },
|
|
31
|
+
'dropdown-toggle': { icon: tablerChevronDown, scale: 1.71 },
|
|
32
|
+
'edit-confirm': { icon: tablerCheck, scale: 1.41 },
|
|
33
|
+
'filter-active': { icon: tablerFilterFilled, scale: 1 },
|
|
34
|
+
'filter-inactive': { icon: tablerFilter, scale: 1.12 },
|
|
35
|
+
'filter-remove': { icon: tablerX, scale: 1.71 },
|
|
36
|
+
'input-clear': { icon: tablerX, scale: 1.71 },
|
|
37
|
+
'menu-submenu': { icon: tablerChevronRight, scale: 1.71 },
|
|
38
|
+
'paginator-previous': { icon: tablerChevronLeft, scale: 1.71 },
|
|
39
|
+
'paginator-next': { icon: tablerChevronRight, scale: 1.71 },
|
|
40
|
+
search: { icon: tablerSearch, scale: 1.2 },
|
|
41
|
+
'sort-neutral': { icon: tablerArrowsSort, scale: 1.2 },
|
|
42
|
+
'sort-ascending': { icon: tablerSortAscending, scale: 1.26 },
|
|
43
|
+
'sort-descending': { icon: tablerSortDescending, scale: 1.26 },
|
|
44
|
+
'table-group-toggle': { icon: tablerChevronRight, scale: 1.71 },
|
|
45
|
+
'tabs-scroll-left': { icon: tablerChevronLeft, scale: 1.71 },
|
|
46
|
+
'tabs-scroll-right': { icon: tablerChevronRight, scale: 1.71 },
|
|
47
|
+
'toast-close': { icon: tablerX, scale: 1.71 },
|
|
48
|
+
};
|
|
49
|
+
function provideNgnDefaultIcons() {
|
|
50
|
+
return [
|
|
51
|
+
{ provide: NGN_ICON_REGISTRY, useValue: NGN_DEFAULT_ICON_REGISTRY },
|
|
52
|
+
{ provide: NGN_CUSTOM_ICONS, useValue: false },
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Generated bundle index. Do not edit.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
export { provideNgnDefaultIcons };
|
|
61
|
+
//# sourceMappingURL=ngneers-controls-default-icons.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-default-icons.mjs","sources":["../../src/default-icons/provider.ts","../../src/default-icons/ngneers-controls-default-icons.ts"],"sourcesContent":["import tablerArrowsSort from '@iconify/icons-tabler/arrows-sort';\r\nimport tablerCalendar from '@iconify/icons-tabler/calendar';\r\nimport tablerCheck from '@iconify/icons-tabler/check';\r\nimport tablerChevronDown from '@iconify/icons-tabler/chevron-down';\r\nimport tablerChevronLeft from '@iconify/icons-tabler/chevron-left';\r\nimport tablerChevronRight from '@iconify/icons-tabler/chevron-right';\r\nimport tablerChevronUp from '@iconify/icons-tabler/chevron-up';\r\nimport tablerDots from '@iconify/icons-tabler/dots';\r\nimport tablerFilter from '@iconify/icons-tabler/filter';\r\nimport tablerFilterFilled from '@iconify/icons-tabler/filter-filled';\r\nimport tablerMinus from '@iconify/icons-tabler/minus';\r\nimport tablerSearch from '@iconify/icons-tabler/search';\r\nimport tablerSortAscending from '@iconify/icons-tabler/sort-ascending';\r\nimport tablerSortDescending from '@iconify/icons-tabler/sort-descending';\r\nimport tablerX from '@iconify/icons-tabler/x';\r\n\r\nimport { NGN_CUSTOM_ICONS, NGN_ICON_REGISTRY, type NgnIconRegistry } from '@ngneers/controls/icon';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nconst NGN_DEFAULT_ICON_REGISTRY: NgnIconRegistry = {\r\n 'accordion-collapse': { icon: tablerChevronUp, scale: 1.71 },\r\n 'accordion-expand': { icon: tablerChevronDown, scale: 1.71 },\r\n 'breadcrumb-separator': { icon: tablerChevronRight, scale: 1.71 },\r\n 'breadcrumb-overflow': { icon: tablerDots, scale: 1.33 },\r\n 'calendar-trigger': { icon: tablerCalendar, scale: 1.14 },\r\n 'calendar-previous-month': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'calendar-next-month': { icon: tablerChevronRight, scale: 1.71 },\r\n 'checkbox-checked': { icon: tablerCheck, scale: 1.41 },\r\n 'checkbox-indeterminate': { icon: tablerMinus, scale: 1.5 },\r\n 'chip-remove': { icon: tablerX, scale: 1.71 },\r\n 'dialog-close': { icon: tablerX, scale: 1.71 },\r\n 'drawer-close': { icon: tablerX, scale: 1.71 },\r\n 'dropdown-toggle': { icon: tablerChevronDown, scale: 1.71 },\r\n 'edit-confirm': { icon: tablerCheck, scale: 1.41 },\r\n 'filter-active': { icon: tablerFilterFilled, scale: 1 },\r\n 'filter-inactive': { icon: tablerFilter, scale: 1.12 },\r\n 'filter-remove': { icon: tablerX, scale: 1.71 },\r\n 'input-clear': { icon: tablerX, scale: 1.71 },\r\n 'menu-submenu': { icon: tablerChevronRight, scale: 1.71 },\r\n 'paginator-previous': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'paginator-next': { icon: tablerChevronRight, scale: 1.71 },\r\n search: { icon: tablerSearch, scale: 1.2 },\r\n 'sort-neutral': { icon: tablerArrowsSort, scale: 1.2 },\r\n 'sort-ascending': { icon: tablerSortAscending, scale: 1.26 },\r\n 'sort-descending': { icon: tablerSortDescending, scale: 1.26 },\r\n 'table-group-toggle': { icon: tablerChevronRight, scale: 1.71 },\r\n 'tabs-scroll-left': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'tabs-scroll-right': { icon: tablerChevronRight, scale: 1.71 },\r\n 'toast-close': { icon: tablerX, scale: 1.71 },\r\n};\r\n\r\nexport function provideNgnDefaultIcons(): Provider[] {\r\n return [\r\n { provide: NGN_ICON_REGISTRY, useValue: NGN_DEFAULT_ICON_REGISTRY },\r\n { provide: NGN_CUSTOM_ICONS, useValue: false },\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -8,13 +8,13 @@ import { NgnBase, provideSelf } from '@ngneers/controls/base';
|
|
|
8
8
|
*/
|
|
9
9
|
class NgnDefer extends NgnBase {
|
|
10
10
|
theme = null;
|
|
11
|
-
lazyContent = input(undefined, ...(ngDevMode ? [{ debugName: "lazyContent" }] : []));
|
|
12
|
-
lazyContentContext = input(null, ...(ngDevMode ? [{ debugName: "lazyContentContext" }] : []));
|
|
13
|
-
open = input(false, { ...(ngDevMode ? { debugName: "open" } : {}), transform: booleanAttribute });
|
|
14
|
-
lazy = input(true, { ...(ngDevMode ? { debugName: "lazy" } : {}), transform: booleanAttribute });
|
|
15
|
-
cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : {}), transform: booleanAttribute });
|
|
16
|
-
hiddenOnClosed = input(true, { ...(ngDevMode ? { debugName: "hiddenOnClosed" } : {}), transform: booleanAttribute });
|
|
17
|
-
hasBeenOpened = signal(false, ...(ngDevMode ? [{ debugName: "hasBeenOpened" }] : []));
|
|
11
|
+
lazyContent = input(undefined, ...(ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []));
|
|
12
|
+
lazyContentContext = input(null, ...(ngDevMode ? [{ debugName: "lazyContentContext" }] : /* istanbul ignore next */ []));
|
|
13
|
+
open = input(false, { ...(ngDevMode ? { debugName: "open" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
14
|
+
lazy = input(true, { ...(ngDevMode ? { debugName: "lazy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
15
|
+
cache = input(false, { ...(ngDevMode ? { debugName: "cache" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
16
|
+
hiddenOnClosed = input(true, { ...(ngDevMode ? { debugName: "hiddenOnClosed" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
17
|
+
hasBeenOpened = signal(false, ...(ngDevMode ? [{ debugName: "hasBeenOpened" }] : /* istanbul ignore next */ []));
|
|
18
18
|
constructor() {
|
|
19
19
|
super();
|
|
20
20
|
effect(() => {
|
|
@@ -23,10 +23,10 @@ class NgnDefer extends NgnBase {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
27
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDefer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnDefer, isStandalone: true, selector: "ngn-defer", inputs: { lazyContent: { classPropertyName: "lazyContent", publicName: "lazyContent", isSignal: true, isRequired: false, transformFunction: null }, lazyContentContext: { classPropertyName: "lazyContentContext", publicName: "lazyContentContext", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, hiddenOnClosed: { classPropertyName: "hiddenOnClosed", publicName: "hiddenOnClosed", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.open": "open()", "class.hidden": "!open() && hiddenOnClosed()", "aria-hidden": "!open()" } }, providers: [provideSelf(NgnDefer)], usesInheritance: true, ngImport: i0, template: "@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n", styles: [":host.hidden{visibility:hidden;position:absolute;top:-9999px;left:-9999px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28
28
|
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDefer, decorators: [{
|
|
30
30
|
type: Component,
|
|
31
31
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-defer', imports: [NgTemplateOutlet], providers: [provideSelf(NgnDefer)], host: {
|
|
32
32
|
'[class.open]': 'open()',
|