forty-cdk 0.0.4 → 0.1.0
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 -21
- package/README.md +2 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs +2 -2
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs +647 -0
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -0
- package/fesm2022/forty-cdk.mjs +8110 -6194
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/internationalized-date/README.md +23 -23
- package/package.json +5 -1
- package/types/forty-cdk-internationalized-date.d.ts +2 -2
- package/types/forty-cdk-virtualization.d.ts +305 -0
- package/types/forty-cdk.d.ts +1658 -787
- package/virtualization/README.md +255 -0
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 tutkli
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tutkli
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# forty-cdk
|
|
2
2
|
|
|
3
3
|
Headless / styleless UI primitives for Angular with WAI-ARIA accessibility built in.
|
|
4
|
-
|
|
4
|
+
Designed from the ground up for modern Angular — the API is built around signals, standalone
|
|
5
|
+
directives, and dependency-injection composition.
|
|
5
6
|
|
|
6
7
|
**New here?** [Your first overlay](../../docs/your-first-overlay.md) walks one Popover from empty markup to styled-and-animated and explains the two concepts every overlay shares: the `@if` / open-state model and the portal → global CSS requirement.
|
|
7
8
|
|
|
@@ -5,8 +5,8 @@ import { FOR_DATE_ADAPTER } from 'forty-cdk';
|
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* {@link DateAdapter} over `@internationalized/date`'s immutable `CalendarDate`.
|
|
8
|
-
* This is the recommended adapter: it is
|
|
9
|
-
*
|
|
8
|
+
* This is the recommended adapter: it is a widely-used immutable date primitive,
|
|
9
|
+
* it works in every browser today with no polyfill, and its
|
|
10
10
|
* reference-equality-on-mutation makes it signal-friendly.
|
|
11
11
|
*
|
|
12
12
|
* **Gregorian only.** `createDate` always builds a Gregorian `CalendarDate`, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forty-cdk-internationalized-date.mjs","sources":["../../../projects/forty-cdk/internationalized-date/src/internationalized-date-adapter.ts","../../../projects/forty-cdk/internationalized-date/src/internationalized-date-time-adapter.ts","../../../projects/forty-cdk/internationalized-date/src/forty-cdk-internationalized-date.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\nimport { CalendarDate, getLocalTimeZone, isSameDay, today } from '@internationalized/date';\n\nimport { type DateAdapter, FOR_DATE_ADAPTER } from 'forty-cdk';\n\n/**\n * {@link DateAdapter} over `@internationalized/date`'s immutable `CalendarDate`.\n * This is the recommended adapter: it is the same date primitive React Aria and\n * Ark UI build on, it works in every browser today with no polyfill, and its\n * reference-equality-on-mutation makes it signal-friendly.\n *\n * **Gregorian only.** `createDate` always builds a Gregorian `CalendarDate`, so\n * the calendar grid is Gregorian regardless of the runtime locale. True\n * non-Gregorian calendar systems are deferred to the planned Temporal adapter\n * track (#354).\n *\n * Ships in the `forty-cdk/internationalized-date` secondary entry point so the\n * main `forty-cdk` bundle never references `@internationalized/date` — the\n * package is an **optional peer dependency**, required only by consumers who\n * import this entry point. A consumer relying solely on\n * `provideNativeDateAdapter()` never resolves it at all.\n */\n@Injectable()\nexport class InternationalizedDateAdapter implements DateAdapter<CalendarDate> {\n /**\n * Today as a `CalendarDate` in the runtime time zone (`getLocalTimeZone()`).\n * Subject to the SSR/hydration caveat on {@link DateAdapter.today}.\n */\n today(): CalendarDate {\n return today(getLocalTimeZone());\n }\n\n createDate(year: number, month: number, day: number): CalendarDate {\n return new CalendarDate(year, month, day);\n }\n\n getYear(date: CalendarDate): number {\n return date.year;\n }\n\n getMonth(date: CalendarDate): number {\n return date.month;\n }\n\n getDate(date: CalendarDate): number {\n return date.day;\n }\n\n getDayOfWeek(date: CalendarDate): number {\n return date.toDate(getLocalTimeZone()).getDay();\n }\n\n getDaysInMonth(date: CalendarDate): number {\n return date.calendar.getDaysInMonth(date);\n }\n\n getFirstDayOfWeek(): number {\n return 0;\n }\n\n addDays(date: CalendarDate, n: number): CalendarDate {\n return date.add({ days: n });\n }\n\n addMonths(date: CalendarDate, n: number): CalendarDate {\n return date.add({ months: n });\n }\n\n addYears(date: CalendarDate, n: number): CalendarDate {\n return date.add({ years: n });\n }\n\n compare(a: CalendarDate, b: CalendarDate): number {\n return a.compare(b);\n }\n\n isSameDay(a: CalendarDate, b: CalendarDate): boolean {\n return isSameDay(a, b);\n }\n\n isValid(date: CalendarDate): boolean {\n return date instanceof CalendarDate;\n }\n\n /**\n * Formats through the runtime's default locale and time zone. Subject to the\n * SSR/hydration caveat on {@link DateAdapter.format}.\n */\n format(date: CalendarDate, options: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(undefined, options).format(date.toDate(getLocalTimeZone()));\n }\n}\n\n/**\n * Provides the {@link InternationalizedDateAdapter} as the active\n * {@link DateAdapter}, making `ForCalendar` operate on `CalendarDate` values\n * from `@internationalized/date`.\n *\n * Requires `@internationalized/date` to be installed (optional peer\n * dependency).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideInternationalizedDateAdapter()],\n * });\n * ```\n */\nexport function provideInternationalizedDateAdapter(): Provider[] {\n return [{ provide: FOR_DATE_ADAPTER, useClass: InternationalizedDateAdapter }];\n}\n","import { Injectable, type Provider } from '@angular/core';\nimport {\n CalendarDateTime,\n getLocalTimeZone,\n isSameDay,\n toCalendarDateTime,\n today,\n} from '@internationalized/date';\n\nimport { type DateAdapter, FOR_DATE_ADAPTER } from 'forty-cdk';\n\n/**\n * Time-capable {@link DateAdapter} over `@internationalized/date`'s immutable\n * `CalendarDateTime`. It mirrors {@link InternationalizedDateAdapter} for all\n * day operations but adds a wall-clock time component (hour / minute / second),\n * so it backs `ForTimeField` and the time granularity of the date primitives.\n * Use it when you want the `@internationalized/date` types *and* a time.\n *\n * **Gregorian only.** Like {@link InternationalizedDateAdapter}, `createDate`\n * builds a Gregorian `CalendarDateTime`; non-Gregorian calendar systems are\n * deferred to the planned Temporal adapter track (#354).\n *\n * Ships in the `forty-cdk/internationalized-date` secondary entry point so the\n * main `forty-cdk` bundle never references `@internationalized/date` — the\n * package is an **optional peer dependency**, required only by consumers who\n * import this entry point. A consumer relying solely on\n * `provideNativeDateAdapter()` never resolves it at all.\n *\n * `compare` orders by the full date-time (day *and* time); `compareDate`\n * ignores the time and orders by calendar day, so the calendar grid stays\n * day-granular even when `min`/`max` carry a time.\n */\n@Injectable()\nexport class InternationalizedDateTimeAdapter implements DateAdapter<CalendarDateTime> {\n /**\n * Today as a `CalendarDateTime` in the runtime time zone\n * (`getLocalTimeZone()`). Subject to the SSR/hydration caveat on\n * {@link DateAdapter.today}.\n */\n today(): CalendarDateTime {\n return toCalendarDateTime(today(getLocalTimeZone()));\n }\n\n createDate(year: number, month: number, day: number): CalendarDateTime {\n return new CalendarDateTime(year, month, day);\n }\n\n getYear(date: CalendarDateTime): number {\n return date.year;\n }\n\n getMonth(date: CalendarDateTime): number {\n return date.month;\n }\n\n getDate(date: CalendarDateTime): number {\n return date.day;\n }\n\n getDayOfWeek(date: CalendarDateTime): number {\n return date.toDate(getLocalTimeZone()).getDay();\n }\n\n getDaysInMonth(date: CalendarDateTime): number {\n return date.calendar.getDaysInMonth(date);\n }\n\n getFirstDayOfWeek(): number {\n return 0;\n }\n\n addDays(date: CalendarDateTime, n: number): CalendarDateTime {\n return date.add({ days: n });\n }\n\n addMonths(date: CalendarDateTime, n: number): CalendarDateTime {\n return date.add({ months: n });\n }\n\n addYears(date: CalendarDateTime, n: number): CalendarDateTime {\n return date.add({ years: n });\n }\n\n compare(a: CalendarDateTime, b: CalendarDateTime): number {\n return a.compare(b);\n }\n\n compareDate(a: CalendarDateTime, b: CalendarDateTime): number {\n if (a.year !== b.year) {\n return a.year - b.year;\n }\n if (a.month !== b.month) {\n return a.month - b.month;\n }\n return a.day - b.day;\n }\n\n isSameDay(a: CalendarDateTime, b: CalendarDateTime): boolean {\n return isSameDay(a, b);\n }\n\n isValid(date: CalendarDateTime): boolean {\n return date instanceof CalendarDateTime;\n }\n\n /**\n * Formats through the runtime's default locale and time zone. Subject to the\n * SSR/hydration caveat on {@link DateAdapter.format}.\n */\n format(date: CalendarDateTime, options: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(undefined, options).format(date.toDate(getLocalTimeZone()));\n }\n\n supportsTime(): boolean {\n return true;\n }\n\n getHours(date: CalendarDateTime): number {\n return date.hour;\n }\n\n getMinutes(date: CalendarDateTime): number {\n return date.minute;\n }\n\n getSeconds(date: CalendarDateTime): number {\n return date.second;\n }\n\n setTime(\n date: CalendarDateTime,\n hours: number,\n minutes: number,\n seconds: number,\n ): CalendarDateTime {\n return date.set({ hour: hours, minute: minutes, second: seconds, millisecond: 0 });\n }\n}\n\n/**\n * Provides the {@link InternationalizedDateTimeAdapter} as the active\n * {@link DateAdapter}, making the time / date-time primitives operate on\n * `CalendarDateTime` values from `@internationalized/date`.\n *\n * Requires `@internationalized/date` to be installed (optional peer\n * dependency).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideInternationalizedDateTimeAdapter()],\n * });\n * ```\n */\nexport function provideInternationalizedDateTimeAdapter(): Provider[] {\n return [{ provide: FOR_DATE_ADAPTER, useClass: InternationalizedDateTimeAdapter }];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forty-cdk-internationalized-date.mjs","sources":["../../../projects/forty-cdk/internationalized-date/src/internationalized-date-adapter.ts","../../../projects/forty-cdk/internationalized-date/src/internationalized-date-time-adapter.ts","../../../projects/forty-cdk/internationalized-date/src/forty-cdk-internationalized-date.ts"],"sourcesContent":["import { Injectable, type Provider } from '@angular/core';\nimport { CalendarDate, getLocalTimeZone, isSameDay, today } from '@internationalized/date';\n\nimport { type DateAdapter, FOR_DATE_ADAPTER } from 'forty-cdk';\n\n/**\n * {@link DateAdapter} over `@internationalized/date`'s immutable `CalendarDate`.\n * This is the recommended adapter: it is a widely-used immutable date primitive,\n * it works in every browser today with no polyfill, and its\n * reference-equality-on-mutation makes it signal-friendly.\n *\n * **Gregorian only.** `createDate` always builds a Gregorian `CalendarDate`, so\n * the calendar grid is Gregorian regardless of the runtime locale. True\n * non-Gregorian calendar systems are deferred to the planned Temporal adapter\n * track (#354).\n *\n * Ships in the `forty-cdk/internationalized-date` secondary entry point so the\n * main `forty-cdk` bundle never references `@internationalized/date` — the\n * package is an **optional peer dependency**, required only by consumers who\n * import this entry point. A consumer relying solely on\n * `provideNativeDateAdapter()` never resolves it at all.\n */\n@Injectable()\nexport class InternationalizedDateAdapter implements DateAdapter<CalendarDate> {\n /**\n * Today as a `CalendarDate` in the runtime time zone (`getLocalTimeZone()`).\n * Subject to the SSR/hydration caveat on {@link DateAdapter.today}.\n */\n today(): CalendarDate {\n return today(getLocalTimeZone());\n }\n\n createDate(year: number, month: number, day: number): CalendarDate {\n return new CalendarDate(year, month, day);\n }\n\n getYear(date: CalendarDate): number {\n return date.year;\n }\n\n getMonth(date: CalendarDate): number {\n return date.month;\n }\n\n getDate(date: CalendarDate): number {\n return date.day;\n }\n\n getDayOfWeek(date: CalendarDate): number {\n return date.toDate(getLocalTimeZone()).getDay();\n }\n\n getDaysInMonth(date: CalendarDate): number {\n return date.calendar.getDaysInMonth(date);\n }\n\n getFirstDayOfWeek(): number {\n return 0;\n }\n\n addDays(date: CalendarDate, n: number): CalendarDate {\n return date.add({ days: n });\n }\n\n addMonths(date: CalendarDate, n: number): CalendarDate {\n return date.add({ months: n });\n }\n\n addYears(date: CalendarDate, n: number): CalendarDate {\n return date.add({ years: n });\n }\n\n compare(a: CalendarDate, b: CalendarDate): number {\n return a.compare(b);\n }\n\n isSameDay(a: CalendarDate, b: CalendarDate): boolean {\n return isSameDay(a, b);\n }\n\n isValid(date: CalendarDate): boolean {\n return date instanceof CalendarDate;\n }\n\n /**\n * Formats through the runtime's default locale and time zone. Subject to the\n * SSR/hydration caveat on {@link DateAdapter.format}.\n */\n format(date: CalendarDate, options: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(undefined, options).format(date.toDate(getLocalTimeZone()));\n }\n}\n\n/**\n * Provides the {@link InternationalizedDateAdapter} as the active\n * {@link DateAdapter}, making `ForCalendar` operate on `CalendarDate` values\n * from `@internationalized/date`.\n *\n * Requires `@internationalized/date` to be installed (optional peer\n * dependency).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideInternationalizedDateAdapter()],\n * });\n * ```\n */\nexport function provideInternationalizedDateAdapter(): Provider[] {\n return [{ provide: FOR_DATE_ADAPTER, useClass: InternationalizedDateAdapter }];\n}\n","import { Injectable, type Provider } from '@angular/core';\r\nimport {\r\n CalendarDateTime,\r\n getLocalTimeZone,\r\n isSameDay,\r\n toCalendarDateTime,\r\n today,\r\n} from '@internationalized/date';\r\n\r\nimport { type DateAdapter, FOR_DATE_ADAPTER } from 'forty-cdk';\r\n\r\n/**\r\n * Time-capable {@link DateAdapter} over `@internationalized/date`'s immutable\r\n * `CalendarDateTime`. It mirrors {@link InternationalizedDateAdapter} for all\r\n * day operations but adds a wall-clock time component (hour / minute / second),\r\n * so it backs `ForTimeField` and the time granularity of the date primitives.\r\n * Use it when you want the `@internationalized/date` types *and* a time.\r\n *\r\n * **Gregorian only.** Like {@link InternationalizedDateAdapter}, `createDate`\r\n * builds a Gregorian `CalendarDateTime`; non-Gregorian calendar systems are\r\n * deferred to the planned Temporal adapter track (#354).\r\n *\r\n * Ships in the `forty-cdk/internationalized-date` secondary entry point so the\r\n * main `forty-cdk` bundle never references `@internationalized/date` — the\r\n * package is an **optional peer dependency**, required only by consumers who\r\n * import this entry point. A consumer relying solely on\r\n * `provideNativeDateAdapter()` never resolves it at all.\r\n *\r\n * `compare` orders by the full date-time (day *and* time); `compareDate`\r\n * ignores the time and orders by calendar day, so the calendar grid stays\r\n * day-granular even when `min`/`max` carry a time.\r\n */\r\n@Injectable()\r\nexport class InternationalizedDateTimeAdapter implements DateAdapter<CalendarDateTime> {\r\n /**\r\n * Today as a `CalendarDateTime` in the runtime time zone\r\n * (`getLocalTimeZone()`). Subject to the SSR/hydration caveat on\r\n * {@link DateAdapter.today}.\r\n */\r\n today(): CalendarDateTime {\r\n return toCalendarDateTime(today(getLocalTimeZone()));\r\n }\r\n\r\n createDate(year: number, month: number, day: number): CalendarDateTime {\r\n return new CalendarDateTime(year, month, day);\r\n }\r\n\r\n getYear(date: CalendarDateTime): number {\r\n return date.year;\r\n }\r\n\r\n getMonth(date: CalendarDateTime): number {\r\n return date.month;\r\n }\r\n\r\n getDate(date: CalendarDateTime): number {\r\n return date.day;\r\n }\r\n\r\n getDayOfWeek(date: CalendarDateTime): number {\r\n return date.toDate(getLocalTimeZone()).getDay();\r\n }\r\n\r\n getDaysInMonth(date: CalendarDateTime): number {\r\n return date.calendar.getDaysInMonth(date);\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return 0;\r\n }\r\n\r\n addDays(date: CalendarDateTime, n: number): CalendarDateTime {\r\n return date.add({ days: n });\r\n }\r\n\r\n addMonths(date: CalendarDateTime, n: number): CalendarDateTime {\r\n return date.add({ months: n });\r\n }\r\n\r\n addYears(date: CalendarDateTime, n: number): CalendarDateTime {\r\n return date.add({ years: n });\r\n }\r\n\r\n compare(a: CalendarDateTime, b: CalendarDateTime): number {\r\n return a.compare(b);\r\n }\r\n\r\n compareDate(a: CalendarDateTime, b: CalendarDateTime): number {\r\n if (a.year !== b.year) {\r\n return a.year - b.year;\r\n }\r\n if (a.month !== b.month) {\r\n return a.month - b.month;\r\n }\r\n return a.day - b.day;\r\n }\r\n\r\n isSameDay(a: CalendarDateTime, b: CalendarDateTime): boolean {\r\n return isSameDay(a, b);\r\n }\r\n\r\n isValid(date: CalendarDateTime): boolean {\r\n return date instanceof CalendarDateTime;\r\n }\r\n\r\n /**\r\n * Formats through the runtime's default locale and time zone. Subject to the\r\n * SSR/hydration caveat on {@link DateAdapter.format}.\r\n */\r\n format(date: CalendarDateTime, options: Intl.DateTimeFormatOptions): string {\r\n return new Intl.DateTimeFormat(undefined, options).format(date.toDate(getLocalTimeZone()));\r\n }\r\n\r\n supportsTime(): boolean {\r\n return true;\r\n }\r\n\r\n getHours(date: CalendarDateTime): number {\r\n return date.hour;\r\n }\r\n\r\n getMinutes(date: CalendarDateTime): number {\r\n return date.minute;\r\n }\r\n\r\n getSeconds(date: CalendarDateTime): number {\r\n return date.second;\r\n }\r\n\r\n setTime(\r\n date: CalendarDateTime,\r\n hours: number,\r\n minutes: number,\r\n seconds: number,\r\n ): CalendarDateTime {\r\n return date.set({ hour: hours, minute: minutes, second: seconds, millisecond: 0 });\r\n }\r\n}\r\n\r\n/**\r\n * Provides the {@link InternationalizedDateTimeAdapter} as the active\r\n * {@link DateAdapter}, making the time / date-time primitives operate on\r\n * `CalendarDateTime` values from `@internationalized/date`.\r\n *\r\n * Requires `@internationalized/date` to be installed (optional peer\r\n * dependency).\r\n *\r\n * @example\r\n * ```ts\r\n * bootstrapApplication(App, {\r\n * providers: [provideInternationalizedDateTimeAdapter()],\r\n * });\r\n * ```\r\n */\r\nexport function provideInternationalizedDateTimeAdapter(): Provider[] {\r\n return [{ provide: FOR_DATE_ADAPTER, useClass: InternationalizedDateTimeAdapter }];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|