ngxsmk-datepicker 1.4.16 → 1.5.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.
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Export/Import utilities for ngxsmk-datepicker
3
+ * Lazy-loaded to reduce initial bundle size
4
+ */
5
+ /**
6
+ * Export dates to JSON format
7
+ */
8
+ function exportToJSON(value) {
9
+ return JSON.stringify(value, (_key, val) => {
10
+ if (val instanceof Date) {
11
+ return val.toISOString();
12
+ }
13
+ return val;
14
+ }, 2);
15
+ }
16
+ /**
17
+ * Export dates to CSV format
18
+ */
19
+ function exportToCSV(value) {
20
+ if (!value)
21
+ return '';
22
+ if (value instanceof Date) {
23
+ return value.toISOString();
24
+ }
25
+ if (Array.isArray(value)) {
26
+ return value.map(d => d.toISOString()).join('\n');
27
+ }
28
+ if ('start' in value && 'end' in value) {
29
+ return `${value.start.toISOString()},${value.end.toISOString()}`;
30
+ }
31
+ return '';
32
+ }
33
+ /**
34
+ * Export dates to iCal format
35
+ */
36
+ function exportToICal(value, title = 'Event') {
37
+ if (!value)
38
+ return '';
39
+ const formatICalDate = (date) => {
40
+ return date.toISOString().replace(/[-:]/g, '').split('.')[0] + 'Z';
41
+ };
42
+ let events = '';
43
+ if (value instanceof Date) {
44
+ events = `BEGIN:VEVENT
45
+ DTSTART:${formatICalDate(value)}
46
+ DTEND:${formatICalDate(value)}
47
+ SUMMARY:${title}
48
+ END:VEVENT`;
49
+ }
50
+ else if ('start' in value && 'end' in value) {
51
+ events = `BEGIN:VEVENT
52
+ DTSTART:${formatICalDate(value.start)}
53
+ DTEND:${formatICalDate(value.end)}
54
+ SUMMARY:${title}
55
+ END:VEVENT`;
56
+ }
57
+ else if (Array.isArray(value)) {
58
+ events = value.map((date, i) => `BEGIN:VEVENT
59
+ DTSTART:${formatICalDate(date)}
60
+ DTEND:${formatICalDate(date)}
61
+ SUMMARY:${title} ${i + 1}
62
+ END:VEVENT`).join('\n');
63
+ }
64
+ return `BEGIN:VCALENDAR
65
+ VERSION:2.0
66
+ PRODID:-//ngxsmk-datepicker//EN
67
+ ${events}
68
+ END:VCALENDAR`;
69
+ }
70
+ /**
71
+ * Import dates from JSON format
72
+ */
73
+ function importFromJSON(json) {
74
+ try {
75
+ const parsed = JSON.parse(json, (_key, val) => {
76
+ if (typeof val === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(val)) {
77
+ return new Date(val);
78
+ }
79
+ return val;
80
+ });
81
+ return parsed;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ /**
88
+ * Import dates from CSV format
89
+ */
90
+ function importFromCSV(csv) {
91
+ try {
92
+ const lines = csv.split('\n').filter(line => line.trim());
93
+ return lines.map(line => new Date(line.trim()));
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }
99
+
100
+ export { exportToCSV, exportToICal, exportToJSON, importFromCSV, importFromJSON };
101
+ //# sourceMappingURL=ngxsmk-datepicker-export.utils-Eh4TSHKj.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-datepicker-export.utils-Eh4TSHKj.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/export.utils.ts"],"sourcesContent":["/**\r\n * Export/Import utilities for ngxsmk-datepicker\r\n * Lazy-loaded to reduce initial bundle size\r\n */\r\n\r\nimport { DatepickerValue } from '../types/datepicker.types';\r\n\r\n/**\r\n * Export dates to JSON format\r\n */\r\nexport function exportToJSON(value: DatepickerValue): string {\r\n return JSON.stringify(value, (_key, val) => {\r\n if (val instanceof Date) {\r\n return val.toISOString();\r\n }\r\n return val;\r\n }, 2);\r\n}\r\n\r\n/**\r\n * Export dates to CSV format\r\n */\r\nexport function exportToCSV(value: DatepickerValue): string {\r\n if (!value) return '';\r\n \r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n \r\n if (Array.isArray(value)) {\r\n return value.map(d => d.toISOString()).join('\\n');\r\n }\r\n \r\n if ('start' in value && 'end' in value) {\r\n return `${value.start.toISOString()},${value.end.toISOString()}`;\r\n }\r\n \r\n return '';\r\n}\r\n\r\n/**\r\n * Export dates to iCal format\r\n */\r\nexport function exportToICal(value: DatepickerValue, title: string = 'Event'): string {\r\n if (!value) return '';\r\n \r\n const formatICalDate = (date: Date): string => {\r\n return date.toISOString().replace(/[-:]/g, '').split('.')[0] + 'Z';\r\n };\r\n \r\n let events = '';\r\n \r\n if (value instanceof Date) {\r\n events = `BEGIN:VEVENT\r\nDTSTART:${formatICalDate(value)}\r\nDTEND:${formatICalDate(value)}\r\nSUMMARY:${title}\r\nEND:VEVENT`;\r\n } else if ('start' in value && 'end' in value) {\r\n events = `BEGIN:VEVENT\r\nDTSTART:${formatICalDate(value.start)}\r\nDTEND:${formatICalDate(value.end)}\r\nSUMMARY:${title}\r\nEND:VEVENT`;\r\n } else if (Array.isArray(value)) {\r\n events = value.map((date, i) => `BEGIN:VEVENT\r\nDTSTART:${formatICalDate(date)}\r\nDTEND:${formatICalDate(date)}\r\nSUMMARY:${title} ${i + 1}\r\nEND:VEVENT`).join('\\n');\r\n }\r\n \r\n return `BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//ngxsmk-datepicker//EN\r\n${events}\r\nEND:VCALENDAR`;\r\n}\r\n\r\n/**\r\n * Import dates from JSON format\r\n */\r\nexport function importFromJSON(json: string): DatepickerValue {\r\n try {\r\n const parsed = JSON.parse(json, (_key, val) => {\r\n if (typeof val === 'string' && /^\\d{4}-\\d{2}-\\d{2}T/.test(val)) {\r\n return new Date(val);\r\n }\r\n return val;\r\n });\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Import dates from CSV format\r\n */\r\nexport function importFromCSV(csv: string): Date[] | null {\r\n try {\r\n const lines = csv.split('\\n').filter(line => line.trim());\r\n return lines.map(line => new Date(line.trim()));\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Format utilities for ngxsmk-datepicker
3
+ * Lazy-loaded to reduce initial bundle size
4
+ */
5
+ /**
6
+ * Format date with custom format string
7
+ */
8
+ function formatDate(date, format, locale = 'en-US') {
9
+ const tokens = {
10
+ 'yyyy': date.getFullYear().toString(),
11
+ 'yy': date.getFullYear().toString().slice(-2),
12
+ 'MMMM': date.toLocaleDateString(locale, { month: 'long' }),
13
+ 'MMM': date.toLocaleDateString(locale, { month: 'short' }),
14
+ 'MM': (date.getMonth() + 1).toString().padStart(2, '0'),
15
+ 'M': (date.getMonth() + 1).toString(),
16
+ 'dd': date.getDate().toString().padStart(2, '0'),
17
+ 'd': date.getDate().toString(),
18
+ 'HH': date.getHours().toString().padStart(2, '0'),
19
+ 'H': date.getHours().toString(),
20
+ 'mm': date.getMinutes().toString().padStart(2, '0'),
21
+ 'm': date.getMinutes().toString(),
22
+ 'ss': date.getSeconds().toString().padStart(2, '0'),
23
+ 's': date.getSeconds().toString()
24
+ };
25
+ let formatted = format;
26
+ Object.keys(tokens).sort((a, b) => b.length - a.length).forEach(token => {
27
+ const replacement = tokens[token];
28
+ if (replacement) {
29
+ formatted = formatted.replace(new RegExp(token, 'g'), replacement);
30
+ }
31
+ });
32
+ return formatted;
33
+ }
34
+ /**
35
+ * Parse date from string with format
36
+ */
37
+ function parseDate(dateStr, _format) {
38
+ try {
39
+ // Simple implementation - extend as needed
40
+ const date = new Date(dateStr);
41
+ return isNaN(date.getTime()) ? null : date;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+
48
+ export { formatDate, parseDate };
49
+ //# sourceMappingURL=ngxsmk-datepicker-format.utils-Bs1hnKRl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-datepicker-format.utils-Bs1hnKRl.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/format.utils.ts"],"sourcesContent":["/**\r\n * Format utilities for ngxsmk-datepicker\r\n * Lazy-loaded to reduce initial bundle size\r\n */\r\n\r\n/**\r\n * Format date with custom format string\r\n */\r\nexport function formatDate(date: Date, format: string, locale: string = 'en-US'): string {\r\n const tokens: Record<string, string> = {\r\n 'yyyy': date.getFullYear().toString(),\r\n 'yy': date.getFullYear().toString().slice(-2),\r\n 'MMMM': date.toLocaleDateString(locale, { month: 'long' }),\r\n 'MMM': date.toLocaleDateString(locale, { month: 'short' }),\r\n 'MM': (date.getMonth() + 1).toString().padStart(2, '0'),\r\n 'M': (date.getMonth() + 1).toString(),\r\n 'dd': date.getDate().toString().padStart(2, '0'),\r\n 'd': date.getDate().toString(),\r\n 'HH': date.getHours().toString().padStart(2, '0'),\r\n 'H': date.getHours().toString(),\r\n 'mm': date.getMinutes().toString().padStart(2, '0'),\r\n 'm': date.getMinutes().toString(),\r\n 'ss': date.getSeconds().toString().padStart(2, '0'),\r\n 's': date.getSeconds().toString()\r\n };\r\n\r\n let formatted = format;\r\n Object.keys(tokens).sort((a, b) => b.length - a.length).forEach(token => {\r\n const replacement = tokens[token];\r\n if (replacement) {\r\n formatted = formatted.replace(new RegExp(token, 'g'), replacement);\r\n }\r\n });\r\n\r\n return formatted;\r\n}\r\n\r\n/**\r\n * Parse date from string with format\r\n */\r\nexport function parseDate(dateStr: string, _format?: string): Date | null {\r\n try {\r\n // Simple implementation - extend as needed\r\n const date = new Date(dateStr);\r\n return isNaN(date.getTime()) ? null : date;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEH;;AAEG;AACG,SAAU,UAAU,CAAC,IAAU,EAAE,MAAc,EAAE,SAAiB,OAAO,EAAA;AAC7E,IAAA,MAAM,MAAM,GAA2B;AACrC,QAAA,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;AACrC,QAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAA,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1D,QAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC1D,QAAA,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACvD,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE;AACrC,QAAA,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChD,QAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACjD,QAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,QAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,QAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ;KAChC;IAED,IAAI,SAAS,GAAG,MAAM;AACtB,IAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;AACtE,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,WAAW,EAAE;AACf,YAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC;QACpE;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,SAAS;AAClB;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,OAAe,EAAE,OAAgB,EAAA;AACzD,IAAA,IAAI;;AAEF,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAC5C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;;;;"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Timezone utilities for ngxsmk-datepicker
3
+ * Lazy-loaded to reduce initial bundle size
4
+ */
5
+ /**
6
+ * Convert date to specific timezone
7
+ */
8
+ function convertToTimezone(date, timezone) {
9
+ try {
10
+ const dateStr = date.toLocaleString('en-US', { timeZone: timezone });
11
+ return new Date(dateStr);
12
+ }
13
+ catch {
14
+ return date;
15
+ }
16
+ }
17
+ /**
18
+ * Get timezone offset in minutes
19
+ */
20
+ function getTimezoneOffset(timezone) {
21
+ try {
22
+ const now = new Date();
23
+ const tzDate = new Date(now.toLocaleString('en-US', { timeZone: timezone }));
24
+ const localDate = new Date(now.toLocaleString('en-US', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }));
25
+ return (tzDate.getTime() - localDate.getTime()) / 60000;
26
+ }
27
+ catch {
28
+ return 0;
29
+ }
30
+ }
31
+
32
+ export { convertToTimezone, getTimezoneOffset };
33
+ //# sourceMappingURL=ngxsmk-datepicker-timezone.utils-Cs2JyF49.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-datepicker-timezone.utils-Cs2JyF49.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/timezone.utils.ts"],"sourcesContent":["/**\r\n * Timezone utilities for ngxsmk-datepicker\r\n * Lazy-loaded to reduce initial bundle size\r\n */\r\n\r\n/**\r\n * Convert date to specific timezone\r\n */\r\nexport function convertToTimezone(date: Date, timezone: string): Date {\r\n try {\r\n const dateStr = date.toLocaleString('en-US', { timeZone: timezone });\r\n return new Date(dateStr);\r\n } catch {\r\n return date;\r\n }\r\n}\r\n\r\n/**\r\n * Get timezone offset in minutes\r\n */\r\nexport function getTimezoneOffset(timezone: string): number {\r\n try {\r\n const now = new Date();\r\n const tzDate = new Date(now.toLocaleString('en-US', { timeZone: timezone }));\r\n const localDate = new Date(now.toLocaleString('en-US', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }));\r\n return (tzDate.getTime() - localDate.getTime()) / 60000;\r\n } catch {\r\n return 0;\r\n }\r\n}\r\n\r\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEH;;AAEG;AACG,SAAU,iBAAiB,CAAC,IAAU,EAAE,QAAgB,EAAA;AAC5D,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpE,QAAA,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IAC1B;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,QAAgB,EAAA;AAChD,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvH,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,KAAK;IACzD;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,CAAC;IACV;AACF;;;;"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Validation utilities for ngxsmk-datepicker
3
+ * Lazy-loaded to reduce initial bundle size
4
+ */
5
+ /**
6
+ * Validate date range
7
+ */
8
+ function validateDateRange(start, end, minDate, maxDate) {
9
+ if (!start || !end) {
10
+ return { valid: false, error: 'Start and end dates are required', errorCode: 'REQUIRED' };
11
+ }
12
+ if (start > end) {
13
+ return { valid: false, error: 'Start date must be before end date', errorCode: 'INVALID_RANGE' };
14
+ }
15
+ if (minDate && start < minDate) {
16
+ return { valid: false, error: 'Start date is before minimum date', errorCode: 'MIN_DATE' };
17
+ }
18
+ if (maxDate && end > maxDate) {
19
+ return { valid: false, error: 'End date is after maximum date', errorCode: 'MAX_DATE' };
20
+ }
21
+ return { valid: true };
22
+ }
23
+ /**
24
+ * Validate min/max days in range
25
+ */
26
+ function validateMinMaxDays(start, end, minDays, maxDays) {
27
+ if (!start || !end) {
28
+ return { valid: false, error: 'Start and end dates are required', errorCode: 'REQUIRED' };
29
+ }
30
+ const days = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + 1;
31
+ if (minDays && days < minDays) {
32
+ return { valid: false, error: `Range must be at least ${minDays} days`, errorCode: 'MIN_DAYS' };
33
+ }
34
+ if (maxDays && days > maxDays) {
35
+ return { valid: false, error: `Range must not exceed ${maxDays} days`, errorCode: 'MAX_DAYS' };
36
+ }
37
+ return { valid: true };
38
+ }
39
+ /**
40
+ * Validate working days
41
+ */
42
+ function validateWorkingDays(date, workingDays = [1, 2, 3, 4, 5]) {
43
+ const day = date.getDay();
44
+ if (!workingDays.includes(day)) {
45
+ return { valid: false, error: 'Selected date is not a working day', errorCode: 'NON_WORKING_DAY' };
46
+ }
47
+ return { valid: true };
48
+ }
49
+
50
+ export { validateDateRange, validateMinMaxDays, validateWorkingDays };
51
+ //# sourceMappingURL=ngxsmk-datepicker-validation.utils-CzyS3x6d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-datepicker-validation.utils-CzyS3x6d.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/validation.utils.ts"],"sourcesContent":["/**\r\n * Validation utilities for ngxsmk-datepicker\r\n * Lazy-loaded to reduce initial bundle size\r\n */\r\n\r\nimport { ValidationResult } from '../types/datepicker.types';\r\n\r\n/**\r\n * Validate date range\r\n */\r\nexport function validateDateRange(\r\n start: Date | null,\r\n end: Date | null,\r\n minDate?: Date | null,\r\n maxDate?: Date | null\r\n): ValidationResult {\r\n if (!start || !end) {\r\n return { valid: false, error: 'Start and end dates are required', errorCode: 'REQUIRED' };\r\n }\r\n\r\n if (start > end) {\r\n return { valid: false, error: 'Start date must be before end date', errorCode: 'INVALID_RANGE' };\r\n }\r\n\r\n if (minDate && start < minDate) {\r\n return { valid: false, error: 'Start date is before minimum date', errorCode: 'MIN_DATE' };\r\n }\r\n\r\n if (maxDate && end > maxDate) {\r\n return { valid: false, error: 'End date is after maximum date', errorCode: 'MAX_DATE' };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n\r\n/**\r\n * Validate min/max days in range\r\n */\r\nexport function validateMinMaxDays(\r\n start: Date | null,\r\n end: Date | null,\r\n minDays?: number,\r\n maxDays?: number\r\n): ValidationResult {\r\n if (!start || !end) {\r\n return { valid: false, error: 'Start and end dates are required', errorCode: 'REQUIRED' };\r\n }\r\n\r\n const days = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + 1;\r\n\r\n if (minDays && days < minDays) {\r\n return { valid: false, error: `Range must be at least ${minDays} days`, errorCode: 'MIN_DAYS' };\r\n }\r\n\r\n if (maxDays && days > maxDays) {\r\n return { valid: false, error: `Range must not exceed ${maxDays} days`, errorCode: 'MAX_DAYS' };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n\r\n/**\r\n * Validate working days\r\n */\r\nexport function validateWorkingDays(date: Date, workingDays: number[] = [1, 2, 3, 4, 5]): ValidationResult {\r\n const day = date.getDay();\r\n \r\n if (!workingDays.includes(day)) {\r\n return { valid: false, error: 'Selected date is not a working day', errorCode: 'NON_WORKING_DAY' };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n\r\n"],"names":[],"mappings":"AAAA;;;AAGG;AAIH;;AAEG;AACG,SAAU,iBAAiB,CAC/B,KAAkB,EAClB,GAAgB,EAChB,OAAqB,EACrB,OAAqB,EAAA;AAErB,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,UAAU,EAAE;IAC3F;AAEA,IAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,SAAS,EAAE,eAAe,EAAE;IAClG;AAEA,IAAA,IAAI,OAAO,IAAI,KAAK,GAAG,OAAO,EAAE;AAC9B,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,SAAS,EAAE,UAAU,EAAE;IAC5F;AAEA,IAAA,IAAI,OAAO,IAAI,GAAG,GAAG,OAAO,EAAE;AAC5B,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,SAAS,EAAE,UAAU,EAAE;IACzF;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAChC,KAAkB,EAClB,GAAgB,EAChB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,UAAU,EAAE;IAC3F;AAEA,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;AAErF,IAAA,IAAI,OAAO,IAAI,IAAI,GAAG,OAAO,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA,uBAAA,EAA0B,OAAO,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IACjG;AAEA,IAAA,IAAI,OAAO,IAAI,IAAI,GAAG,OAAO,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA,sBAAA,EAAyB,OAAO,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IAChG;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;AAEA;;AAEG;SACa,mBAAmB,CAAC,IAAU,EAAE,cAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA;AACrF,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;IAEzB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9B,QAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,SAAS,EAAE,iBAAiB,EAAE;IACpG;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AACxB;;;;"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Week utilities for ngxsmk-datepicker
3
+ * Lazy-loaded to reduce initial bundle size
4
+ */
5
+ /**
6
+ * Get ISO week number
7
+ */
8
+ function getISOWeek(date) {
9
+ const d = new Date(date);
10
+ d.setHours(0, 0, 0, 0);
11
+ d.setDate(d.getDate() + 4 - (d.getDay() || 7));
12
+ const yearStart = new Date(d.getFullYear(), 0, 1);
13
+ return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
14
+ }
15
+ /**
16
+ * Get week of month
17
+ */
18
+ function getWeekOfMonth(date) {
19
+ const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
20
+ const firstDayOfWeek = firstDay.getDay();
21
+ const offsetDate = date.getDate() + firstDayOfWeek - 1;
22
+ return Math.ceil(offsetDate / 7);
23
+ }
24
+ /**
25
+ * Get date range for a week
26
+ */
27
+ function getWeekRange(date, firstDayOfWeek = 1) {
28
+ const d = new Date(date);
29
+ const day = d.getDay();
30
+ const diff = day < firstDayOfWeek ? 7 - firstDayOfWeek + day : day - firstDayOfWeek;
31
+ const start = new Date(d);
32
+ start.setDate(d.getDate() - diff);
33
+ start.setHours(0, 0, 0, 0);
34
+ const end = new Date(start);
35
+ end.setDate(start.getDate() + 6);
36
+ end.setHours(23, 59, 59, 999);
37
+ return { start, end };
38
+ }
39
+
40
+ export { getISOWeek, getWeekOfMonth, getWeekRange };
41
+ //# sourceMappingURL=ngxsmk-datepicker-week.utils-_wX9h6Cc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngxsmk-datepicker-week.utils-_wX9h6Cc.mjs","sources":["../../../projects/ngxsmk-datepicker/src/lib/utils/week.utils.ts"],"sourcesContent":["/**\r\n * Week utilities for ngxsmk-datepicker\r\n * Lazy-loaded to reduce initial bundle size\r\n */\r\n\r\n/**\r\n * Get ISO week number\r\n */\r\nexport function getISOWeek(date: Date): number {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n d.setDate(d.getDate() + 4 - (d.getDay() || 7));\r\n const yearStart = new Date(d.getFullYear(), 0, 1);\r\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\r\n}\r\n\r\n/**\r\n * Get week of month\r\n */\r\nexport function getWeekOfMonth(date: Date): number {\r\n const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n const firstDayOfWeek = firstDay.getDay();\r\n const offsetDate = date.getDate() + firstDayOfWeek - 1;\r\n return Math.ceil(offsetDate / 7);\r\n}\r\n\r\n/**\r\n * Get date range for a week\r\n */\r\nexport function getWeekRange(date: Date, firstDayOfWeek: number = 1): { start: Date; end: Date } {\r\n const d = new Date(date);\r\n const day = d.getDay();\r\n const diff = day < firstDayOfWeek ? 7 - firstDayOfWeek + day : day - firstDayOfWeek;\r\n \r\n const start = new Date(d);\r\n start.setDate(d.getDate() - diff);\r\n start.setHours(0, 0, 0, 0);\r\n \r\n const end = new Date(start);\r\n end.setDate(start.getDate() + 6);\r\n end.setHours(23, 59, 59, 999);\r\n \r\n return { start, end };\r\n}\r\n\r\n"],"names":[],"mappings":"AAAA;;;AAGG;AAEH;;AAEG;AACG,SAAU,UAAU,CAAC,IAAU,EAAA;AACnC,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,IAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9C,IAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5E;AAEA;;AAEG;AACG,SAAU,cAAc,CAAC,IAAU,EAAA;AACvC,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjE,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,GAAG,CAAC;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAClC;AAEA;;AAEG;SACa,YAAY,CAAC,IAAU,EAAE,iBAAyB,CAAC,EAAA;AACjE,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AACxB,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE;AACtB,IAAA,MAAM,IAAI,GAAG,GAAG,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,cAAc;AAEnF,IAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;IAC3B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAE7B,IAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB;;;;"}