@ngneers/controls 0.0.1-pre1 → 0.0.1-pre3
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/LICENSE +21 -0
- package/fesm2022/ngneers-controls-accordion.mjs +194 -0
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api-ng.mjs +668 -0
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-api.mjs +256 -227
- package/fesm2022/ngneers-controls-api.mjs.map +1 -1
- package/fesm2022/ngneers-controls-avatar.mjs +70 -0
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-base.mjs +397 -0
- package/fesm2022/ngneers-controls-base.mjs.map +1 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs +74 -0
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button-group.mjs +51 -0
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -0
- package/fesm2022/ngneers-controls-button.mjs +62 -0
- package/fesm2022/ngneers-controls-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs +63 -0
- package/fesm2022/ngneers-controls-calendar-time-C7UnIFzU.mjs.map +1 -0
- package/fesm2022/ngneers-controls-calendar.mjs +468 -0
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -0
- package/fesm2022/ngneers-controls-checkbox.mjs +58 -0
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -0
- package/fesm2022/ngneers-controls-chip.mjs +52 -0
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-defer.mjs +43 -0
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-dialog.mjs +329 -33
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
- package/fesm2022/ngneers-controls-directives.mjs +443 -0
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -0
- package/fesm2022/ngneers-controls-drawer.mjs +232 -0
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs +120 -0
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-filter.mjs +516 -0
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs +87 -0
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs +87 -0
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n.mjs +57 -0
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +4 -0
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +1 -0
- package/fesm2022/ngneers-controls-icon.mjs +60 -18
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
- package/fesm2022/ngneers-controls-inplace.mjs +107 -0
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input-field.mjs +141 -0
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input-mask.mjs +282 -0
- package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -0
- package/fesm2022/ngneers-controls-input.mjs +69 -0
- package/fesm2022/ngneers-controls-input.mjs.map +1 -0
- package/fesm2022/ngneers-controls-item-view.mjs +441 -0
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -0
- package/fesm2022/ngneers-controls-list-box.mjs +157 -53
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
- package/fesm2022/ngneers-controls-menu.mjs +332 -0
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -0
- package/fesm2022/ngneers-controls-message.mjs +29 -0
- package/fesm2022/ngneers-controls-message.mjs.map +1 -0
- package/fesm2022/ngneers-controls-paginator.mjs +111 -0
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -0
- package/fesm2022/ngneers-controls-popover.mjs +129 -40
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
- package/fesm2022/ngneers-controls-progress.mjs +82 -0
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroller.mjs +162 -78
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select-button.mjs +55 -0
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-select.mjs +313 -103
- package/fesm2022/ngneers-controls-select.mjs.map +1 -1
- package/fesm2022/ngneers-controls-slider.mjs +155 -0
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -0
- package/fesm2022/ngneers-controls-spinner.mjs +169 -0
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -0
- package/fesm2022/ngneers-controls-splitter.mjs +717 -0
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -0
- package/fesm2022/ngneers-controls-switch.mjs +39 -0
- package/fesm2022/ngneers-controls-switch.mjs.map +1 -0
- package/fesm2022/ngneers-controls-table.mjs +379 -0
- package/fesm2022/ngneers-controls-table.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tabs.mjs +287 -0
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tag.mjs +29 -0
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toast.mjs +184 -0
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs +65 -0
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -0
- package/fesm2022/ngneers-controls-tooltip.mjs +454 -0
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs +227 -0
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -0
- package/fesm2022/ngneers-controls-utils.mjs +217 -60
- package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
- package/fesm2022/ngneers-controls.mjs.map +1 -1
- package/package.json +167 -32
- package/types/ngneers-controls-accordion.d.ts +114 -0
- package/types/ngneers-controls-api-ng.d.ts +291 -0
- package/types/ngneers-controls-api.d.ts +99 -0
- package/types/ngneers-controls-avatar.d.ts +50 -0
- package/types/ngneers-controls-base.d.ts +166 -0
- package/types/ngneers-controls-breadcrumb.d.ts +86 -0
- package/types/ngneers-controls-button-group.d.ts +30 -0
- package/types/ngneers-controls-button.d.ts +34 -0
- package/types/ngneers-controls-calendar.d.ts +275 -0
- package/types/ngneers-controls-checkbox.d.ts +38 -0
- package/types/ngneers-controls-chip.d.ts +37 -0
- package/types/ngneers-controls-defer.d.ts +22 -0
- package/types/ngneers-controls-dialog.d.ts +218 -0
- package/types/ngneers-controls-directives.d.ts +146 -0
- package/types/ngneers-controls-drawer.d.ts +220 -0
- package/types/ngneers-controls-edit-inplace.d.ts +182 -0
- package/types/ngneers-controls-filter.d.ts +304 -0
- package/types/ngneers-controls-i18n.d.ts +108 -0
- package/types/ngneers-controls-icon.d.ts +74 -0
- package/types/ngneers-controls-inplace.d.ts +95 -0
- package/types/ngneers-controls-input-field.d.ts +159 -0
- package/types/ngneers-controls-input-mask.d.ts +83 -0
- package/types/ngneers-controls-input.d.ts +27 -0
- package/types/ngneers-controls-item-view.d.ts +211 -0
- package/types/ngneers-controls-list-box.d.ts +216 -0
- package/types/ngneers-controls-menu.d.ts +178 -0
- package/types/ngneers-controls-message.d.ts +19 -0
- package/types/ngneers-controls-paginator.d.ts +162 -0
- package/types/ngneers-controls-popover.d.ts +101 -0
- package/types/ngneers-controls-progress.d.ts +44 -0
- package/types/ngneers-controls-scroller.d.ts +137 -0
- package/types/ngneers-controls-select-button.d.ts +37 -0
- package/types/ngneers-controls-select.d.ts +314 -0
- package/types/ngneers-controls-slider.d.ts +53 -0
- package/types/ngneers-controls-spinner.d.ts +105 -0
- package/types/ngneers-controls-splitter.d.ts +391 -0
- package/types/ngneers-controls-switch.d.ts +18 -0
- package/types/ngneers-controls-table.d.ts +157 -0
- package/types/ngneers-controls-tabs.d.ts +106 -0
- package/types/ngneers-controls-tag.d.ts +19 -0
- package/types/ngneers-controls-toast.d.ts +70 -0
- package/types/ngneers-controls-toggle-button.d.ts +46 -0
- package/types/ngneers-controls-tooltip.d.ts +188 -0
- package/types/ngneers-controls-utils-ng.d.ts +57 -0
- package/types/ngneers-controls-utils.d.ts +130 -0
- package/api/index.d.ts +0 -134
- package/custom-types/index.d.ts +0 -7
- package/dialog/index.d.ts +0 -43
- package/fesm2022/ngneers-controls-custom-types.mjs +0 -4
- package/fesm2022/ngneers-controls-custom-types.mjs.map +0 -1
- package/fesm2022/ngneers-controls-form-field.mjs +0 -33
- package/fesm2022/ngneers-controls-form-field.mjs.map +0 -1
- package/fesm2022/ngneers-controls-lazy-cacher.mjs +0 -30
- package/fesm2022/ngneers-controls-lazy-cacher.mjs.map +0 -1
- package/fesm2022/ngneers-controls-text-field.mjs +0 -23
- package/fesm2022/ngneers-controls-text-field.mjs.map +0 -1
- package/form-field/index.d.ts +0 -19
- package/icon/index.d.ts +0 -30
- package/lazy-cacher/index.d.ts +0 -14
- package/list-box/index.d.ts +0 -58
- package/popover/index.d.ts +0 -41
- package/scroller/index.d.ts +0 -95
- package/select/index.d.ts +0 -86
- package/text-field/index.d.ts +0 -10
- package/utils/index.d.ts +0 -36
- /package/{index.d.ts → types/ngneers-controls.d.ts} +0 -0
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { ValueControlBase, NgnPt, provideSelf } from '@ngneers/controls/base';
|
|
4
|
+
import { NgnIcon } from '@ngneers/controls/icon';
|
|
5
|
+
import { checkboxControlTemplate } from '@ngneers/controls-themes/templates/checkbox';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @category control
|
|
9
|
+
*/
|
|
10
|
+
class NgnCheckbox extends ValueControlBase {
|
|
11
|
+
theme = this.injectThemeTemplate(checkboxControlTemplate, {
|
|
12
|
+
root: true,
|
|
13
|
+
invalid: () => this.invalid(),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Set a custom icon for the checked state.
|
|
17
|
+
*/
|
|
18
|
+
iconChecked = input(...(ngDevMode ? [undefined, { debugName: "iconChecked" }] : []));
|
|
19
|
+
/**
|
|
20
|
+
* Set a custom icon for the unchecked state.
|
|
21
|
+
*/
|
|
22
|
+
iconUnchecked = input(...(ngDevMode ? [undefined, { debugName: "iconUnchecked" }] : []));
|
|
23
|
+
/**
|
|
24
|
+
* Set a custom icon for the indeterminate state.
|
|
25
|
+
*/
|
|
26
|
+
iconIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "iconIndeterminate" }] : []));
|
|
27
|
+
/**
|
|
28
|
+
* Set whether to allow the indeterminate state.
|
|
29
|
+
* If `true`, this will change the {@link value} type to `boolean | null`.
|
|
30
|
+
*/
|
|
31
|
+
allowIndeterminate = input(...(ngDevMode ? [undefined, { debugName: "allowIndeterminate" }] : []));
|
|
32
|
+
indeterminate = computed(() => this.allowIndeterminate() && this.value() === null, ...(ngDevMode ? [{ debugName: "indeterminate" }] : []));
|
|
33
|
+
changed(event) {
|
|
34
|
+
const target = event.target;
|
|
35
|
+
this.value.set(target.checked);
|
|
36
|
+
}
|
|
37
|
+
onClick(event) {
|
|
38
|
+
if (this.readonly() || this.disabled()) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
constructor() {
|
|
43
|
+
super();
|
|
44
|
+
}
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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 @if (indeterminate()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (value()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconUnchecked()\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\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
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnCheckbox, decorators: [{
|
|
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 @if (indeterminate()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (value()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconUnchecked()\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\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
|
+
}], 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
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Generated bundle index. Do not edit.
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
export { NgnCheckbox };
|
|
58
|
+
//# sourceMappingURL=ngneers-controls-checkbox.mjs.map
|
|
@@ -0,0 +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, ChangeDetectionStrategy } 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 @if (indeterminate()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconIndeterminate()\"\r\n [defaultIcon]=\"'minus'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (value()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconChecked()\"\r\n [defaultIcon]=\"'check'\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\r\n />\r\n } @else if (iconUnchecked()) {\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'box-icon'\"\r\n [icon]=\"iconUnchecked()\"\r\n [animate.enter]=\"theme.class('anim-box-icon-enter')\"\r\n [animate.leave]=\"theme.class('anim-box-icon-leave')\"\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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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, booleanAttribute, output, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { NgnBase, NgnPt, provideSelf } from '@ngneers/controls/base';
|
|
5
|
+
import { NgnIcon } from '@ngneers/controls/icon';
|
|
6
|
+
import { chipControlTemplate } from '@ngneers/controls-themes/templates/chip';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @category control
|
|
10
|
+
*/
|
|
11
|
+
class NgnChip extends NgnBase {
|
|
12
|
+
theme = this.injectThemeTemplate(chipControlTemplate, {
|
|
13
|
+
root: true,
|
|
14
|
+
closable: () => this.closable(),
|
|
15
|
+
actionable: () => this.actionable(),
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Set whether the chip can be closed (removed).
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
closable = input(false, { ...(ngDevMode ? { debugName: "closable" } : {}), transform: booleanAttribute });
|
|
22
|
+
/**
|
|
23
|
+
* Set whether the chip is actionable (can be clicked).
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
actionable = input(false, { ...(ngDevMode ? { debugName: "actionable" } : {}), transform: booleanAttribute });
|
|
27
|
+
/**
|
|
28
|
+
* Set a custom icon for the close button.
|
|
29
|
+
*/
|
|
30
|
+
iconClose = input(...(ngDevMode ? [undefined, { debugName: "iconClose" }] : []));
|
|
31
|
+
/**
|
|
32
|
+
* Emitted when the chip is closed (removed).
|
|
33
|
+
*/
|
|
34
|
+
closed = output();
|
|
35
|
+
/**
|
|
36
|
+
* Emitted when the chip is clicked.
|
|
37
|
+
*/
|
|
38
|
+
clicked = output();
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnChip, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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]=\"'xmark'\"\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
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnChip, decorators: [{
|
|
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]=\"'xmark'\"\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
|
+
}], 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
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Generated bundle index. Do not edit.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
export { NgnChip };
|
|
52
|
+
//# sourceMappingURL=ngneers-controls-chip.mjs.map
|
|
@@ -0,0 +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]=\"'xmark'\"\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,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxE;;;AAGG;IACa,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC1E;;AAEG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;AAC7C;;AAEG;IACa,MAAM,GAAG,MAAM,EAAS;AACxC;;AAEG;IACa,OAAO,GAAG,MAAM,EAAS;uGA5B9B,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,QAAA,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,muBAwBA,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;;2FAG/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,muBAAA,EAAA;;;AEhBnC;;AAEG;;;;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, booleanAttribute, signal, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { NgnBase, provideSelf } from '@ngneers/controls/base';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @category control
|
|
8
|
+
*/
|
|
9
|
+
class NgnDefer extends NgnBase {
|
|
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" }] : []));
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
effect(() => {
|
|
21
|
+
if (this.open()) {
|
|
22
|
+
this.hasBeenOpened.set(true);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDefer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", 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
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDefer, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-defer', imports: [NgTemplateOutlet], providers: [provideSelf(NgnDefer)], host: {
|
|
32
|
+
'[class.open]': 'open()',
|
|
33
|
+
'[class.hidden]': '!open() && hiddenOnClosed()',
|
|
34
|
+
'[aria-hidden]': '!open()',
|
|
35
|
+
}, 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"] }]
|
|
36
|
+
}], ctorParameters: () => [], propDecorators: { lazyContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazyContent", required: false }] }], lazyContentContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazyContentContext", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], hiddenOnClosed: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenOnClosed", required: false }] }] } });
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Generated bundle index. Do not edit.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
export { NgnDefer };
|
|
43
|
+
//# sourceMappingURL=ngneers-controls-defer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-defer.mjs","sources":["../../src/defer/defer.ts","../../src/defer/defer.html","../../src/defer/ngneers-controls-defer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n effect,\r\n input,\r\n signal,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-defer',\r\n templateUrl: './defer.html',\r\n imports: [NgTemplateOutlet],\r\n providers: [provideSelf(NgnDefer)],\r\n host: {\r\n '[class.open]': 'open()',\r\n '[class.hidden]': '!open() && hiddenOnClosed()',\r\n '[aria-hidden]': '!open()',\r\n },\r\n styles: [\r\n `\r\n :host.hidden {\r\n visibility: hidden;\r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class NgnDefer<T> extends NgnBase<null> {\r\n protected readonly theme = null;\r\n public readonly lazyContent = input<TemplateRef<T> | undefined | null>(undefined);\r\n public readonly lazyContentContext = input<T | null>(null);\r\n public readonly open = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly hiddenOnClosed = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly hasBeenOpened = signal(false);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.open()) {\r\n this.hasBeenOpened.set(true);\r\n }\r\n });\r\n }\r\n}\r\n","@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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|