tyrell-components 1.0.0-RC13 → 1.0.0-RC15
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/README.md +10 -2
- package/css/tyrell-theme.css +192 -180
- package/css/tyrell.css +23 -0
- package/dist/tyrell-colors-static.css +1 -316
- package/dist/tyrell-theme.css +1 -1454
- package/dist/tyrell.css +1 -1371
- package/dist/tyrell.js +1 -1
- package/lib/base/ty-component.d.ts +20 -10
- package/lib/base/ty-component.js +196 -319
- package/lib/components/button.d.ts +3 -17
- package/lib/components/button.js +261 -295
- package/lib/components/calendar-month.d.ts +4 -50
- package/lib/components/calendar-month.js +443 -582
- package/lib/components/calendar-navigation.d.ts +3 -48
- package/lib/components/calendar-navigation.js +239 -362
- package/lib/components/calendar.d.ts +8 -83
- package/lib/components/calendar.js +616 -829
- package/lib/components/checkbox.d.ts +5 -72
- package/lib/components/checkbox.js +273 -416
- package/lib/components/copy.d.ts +4 -57
- package/lib/components/copy.js +280 -397
- package/lib/components/date-picker.d.ts +21 -163
- package/lib/components/date-picker.js +1143 -1674
- package/lib/components/file-upload.d.ts +9 -15
- package/lib/components/file-upload.js +404 -426
- package/lib/components/icon.d.ts +3 -24
- package/lib/components/icon.js +141 -230
- package/lib/components/input.d.ts +8 -108
- package/lib/components/input.js +593 -784
- package/lib/components/modal.d.ts +17 -26
- package/lib/components/modal.js +340 -484
- package/lib/components/option.d.ts +2 -9
- package/lib/components/option.js +168 -216
- package/lib/components/popup.d.ts +2 -17
- package/lib/components/popup.js +249 -380
- package/lib/components/radio.d.ts +5 -25
- package/lib/components/radio.js +407 -461
- package/lib/components/resize-observer.d.ts +3 -30
- package/lib/components/resize-observer.js +69 -103
- package/lib/components/scroll-container.d.ts +2 -12
- package/lib/components/scroll-container.js +293 -338
- package/lib/components/select.d.ts +87 -159
- package/lib/components/select.js +1609 -2090
- package/lib/components/selected-tags.d.ts +5 -48
- package/lib/components/selected-tags.js +188 -276
- package/lib/components/step.d.ts +1 -6
- package/lib/components/step.js +62 -68
- package/lib/components/switch.d.ts +1 -12
- package/lib/components/switch.js +214 -247
- package/lib/components/tab.d.ts +1 -6
- package/lib/components/tab.js +62 -69
- package/lib/components/tabs.d.ts +6 -63
- package/lib/components/tabs.js +545 -777
- package/lib/components/tag.d.ts +3 -37
- package/lib/components/tag.js +236 -335
- package/lib/components/textarea.d.ts +7 -87
- package/lib/components/textarea.js +457 -627
- package/lib/components/tooltip.d.ts +3 -11
- package/lib/components/tooltip.js +307 -443
- package/lib/components/wizard.d.ts +6 -54
- package/lib/components/wizard.js +405 -618
- package/lib/icons/fontawesome/brands.d.ts +0 -1
- package/lib/icons/fontawesome/brands.js +0 -8
- package/lib/icons/fontawesome/regular.d.ts +0 -1
- package/lib/icons/fontawesome/regular.js +0 -8
- package/lib/icons/fontawesome/solid.d.ts +0 -1
- package/lib/icons/fontawesome/solid.js +0 -8
- package/lib/icons/heroicons/micro.d.ts +0 -1
- package/lib/icons/heroicons/micro.js +392 -400
- package/lib/icons/heroicons/mini.d.ts +0 -1
- package/lib/icons/heroicons/mini.js +382 -390
- package/lib/icons/heroicons/outline.d.ts +0 -1
- package/lib/icons/heroicons/outline.js +337 -345
- package/lib/icons/heroicons/solid.d.ts +0 -1
- package/lib/icons/heroicons/solid.js +407 -415
- package/lib/icons/lucide.d.ts +0 -1
- package/lib/icons/lucide.js +24479 -26351
- package/lib/icons/material/filled.d.ts +0 -1
- package/lib/icons/material/filled.js +9653 -9663
- package/lib/icons/material/outlined.d.ts +0 -1
- package/lib/icons/material/outlined.js +10271 -10281
- package/lib/icons/material/round.d.ts +0 -1
- package/lib/icons/material/round.js +10495 -10505
- package/lib/icons/material/sharp.d.ts +0 -1
- package/lib/icons/material/sharp.js +9905 -9915
- package/lib/icons/material/two-tone.d.ts +0 -1
- package/lib/icons/material/two-tone.js +12792 -12802
- package/lib/index.d.ts +0 -1
- package/lib/index.js +21 -41
- package/lib/styles/button.d.ts +2 -20
- package/lib/styles/button.js +202 -404
- package/lib/styles/calendar-month.d.ts +1 -5
- package/lib/styles/calendar-month.js +127 -244
- package/lib/styles/calendar-navigation.d.ts +2 -6
- package/lib/styles/calendar-navigation.js +64 -104
- package/lib/styles/calendar.d.ts +1 -2
- package/lib/styles/calendar.js +9 -22
- package/lib/styles/checkbox.d.ts +0 -1
- package/lib/styles/checkbox.js +45 -94
- package/lib/styles/copy.d.ts +0 -1
- package/lib/styles/copy.js +67 -106
- package/lib/styles/custom-scrollbar.d.ts +1 -2
- package/lib/styles/custom-scrollbar.js +80 -115
- package/lib/styles/date-picker.d.ts +1 -5
- package/lib/styles/date-picker.js +261 -335
- package/lib/styles/field-size.d.ts +6 -0
- package/lib/styles/field-size.js +91 -0
- package/lib/styles/file-upload.d.ts +1 -2
- package/lib/styles/file-upload.js +143 -188
- package/lib/styles/icon.d.ts +2 -6
- package/lib/styles/icon.js +92 -170
- package/lib/styles/input.d.ts +1 -6
- package/lib/styles/input.js +125 -290
- package/lib/styles/modal.d.ts +1 -2
- package/lib/styles/modal.js +71 -108
- package/lib/styles/option.d.ts +2 -6
- package/lib/styles/option.js +49 -64
- package/lib/styles/popup.d.ts +1 -2
- package/lib/styles/popup.js +42 -77
- package/lib/styles/radio.d.ts +0 -1
- package/lib/styles/radio.js +69 -110
- package/lib/styles/resize-observer.d.ts +1 -2
- package/lib/styles/resize-observer.js +2 -12
- package/lib/styles/scroll-container.d.ts +1 -2
- package/lib/styles/scroll-container.js +100 -149
- package/lib/styles/select-base.d.ts +0 -1
- package/lib/styles/select-base.js +597 -785
- package/lib/styles/select.d.ts +1 -2
- package/lib/styles/select.js +140 -236
- package/lib/styles/step.d.ts +1 -2
- package/lib/styles/step.js +22 -33
- package/lib/styles/switch.d.ts +0 -1
- package/lib/styles/switch.js +34 -73
- package/lib/styles/tab.d.ts +1 -2
- package/lib/styles/tab.js +22 -34
- package/lib/styles/tabs.d.ts +3 -11
- package/lib/styles/tabs.js +190 -222
- package/lib/styles/tag.d.ts +1 -5
- package/lib/styles/tag.js +136 -218
- package/lib/styles/textarea.d.ts +1 -2
- package/lib/styles/textarea.js +210 -319
- package/lib/styles/tooltip.d.ts +0 -1
- package/lib/styles/tooltip.js +3 -13
- package/lib/styles/wizard.d.ts +5 -21
- package/lib/styles/wizard.js +170 -306
- package/lib/types/common.d.ts +2 -2
- package/lib/types/common.js +6 -17
- package/lib/utils/calendar-utils.d.ts +4 -21
- package/lib/utils/calendar-utils.js +100 -273
- package/lib/utils/custom-scrollbar.d.ts +6 -20
- package/lib/utils/custom-scrollbar.js +273 -317
- package/lib/utils/flavor-sheet.d.ts +0 -1
- package/lib/utils/flavor-sheet.js +14 -37
- package/lib/utils/icon-registry.d.ts +0 -2
- package/lib/utils/icon-registry.js +137 -243
- package/lib/utils/icons.d.ts +0 -1
- package/lib/utils/icons.js +0 -9
- package/lib/utils/loader-registry.d.ts +0 -1
- package/lib/utils/loader-registry.js +3 -35
- package/lib/utils/locale.d.ts +2 -23
- package/lib/utils/locale.js +34 -120
- package/lib/utils/mobile.d.ts +0 -1
- package/lib/utils/mobile.js +1 -18
- package/lib/utils/number-format.d.ts +6 -3
- package/lib/utils/number-format.js +54 -110
- package/lib/utils/positioning.d.ts +50 -7
- package/lib/utils/positioning.js +224 -234
- package/lib/utils/property-capture.d.ts +5 -27
- package/lib/utils/property-capture.js +36 -144
- package/lib/utils/property-manager.d.ts +0 -1
- package/lib/utils/property-manager.js +126 -196
- package/lib/utils/resize-observer.d.ts +0 -1
- package/lib/utils/resize-observer.js +23 -59
- package/lib/utils/scroll-lock.d.ts +4 -11
- package/lib/utils/scroll-lock.js +65 -172
- package/lib/utils/styles.d.ts +0 -1
- package/lib/utils/styles.js +17 -41
- package/lib/version.d.ts +1 -2
- package/lib/version.js +1 -11
- package/package.json +4 -4
- package/lib/base/ty-component.d.ts.map +0 -1
- package/lib/base/ty-component.js.map +0 -1
- package/lib/components/button.d.ts.map +0 -1
- package/lib/components/button.js.map +0 -1
- package/lib/components/calendar-month.d.ts.map +0 -1
- package/lib/components/calendar-month.js.map +0 -1
- package/lib/components/calendar-navigation.d.ts.map +0 -1
- package/lib/components/calendar-navigation.js.map +0 -1
- package/lib/components/calendar.d.ts.map +0 -1
- package/lib/components/calendar.js.map +0 -1
- package/lib/components/checkbox.d.ts.map +0 -1
- package/lib/components/checkbox.js.map +0 -1
- package/lib/components/copy.d.ts.map +0 -1
- package/lib/components/copy.js.map +0 -1
- package/lib/components/date-picker.d.ts.map +0 -1
- package/lib/components/date-picker.js.map +0 -1
- package/lib/components/file-upload.d.ts.map +0 -1
- package/lib/components/file-upload.js.map +0 -1
- package/lib/components/icon.d.ts.map +0 -1
- package/lib/components/icon.js.map +0 -1
- package/lib/components/input.d.ts.map +0 -1
- package/lib/components/input.js.map +0 -1
- package/lib/components/modal.d.ts.map +0 -1
- package/lib/components/modal.js.map +0 -1
- package/lib/components/option.d.ts.map +0 -1
- package/lib/components/option.js.map +0 -1
- package/lib/components/popup.d.ts.map +0 -1
- package/lib/components/popup.js.map +0 -1
- package/lib/components/radio.d.ts.map +0 -1
- package/lib/components/radio.js.map +0 -1
- package/lib/components/resize-observer.d.ts.map +0 -1
- package/lib/components/resize-observer.js.map +0 -1
- package/lib/components/scroll-container.d.ts.map +0 -1
- package/lib/components/scroll-container.js.map +0 -1
- package/lib/components/select.d.ts.map +0 -1
- package/lib/components/select.js.map +0 -1
- package/lib/components/selected-tags.d.ts.map +0 -1
- package/lib/components/selected-tags.js.map +0 -1
- package/lib/components/step.d.ts.map +0 -1
- package/lib/components/step.js.map +0 -1
- package/lib/components/switch.d.ts.map +0 -1
- package/lib/components/switch.js.map +0 -1
- package/lib/components/tab.d.ts.map +0 -1
- package/lib/components/tab.js.map +0 -1
- package/lib/components/tabs.d.ts.map +0 -1
- package/lib/components/tabs.js.map +0 -1
- package/lib/components/tag.d.ts.map +0 -1
- package/lib/components/tag.js.map +0 -1
- package/lib/components/textarea.d.ts.map +0 -1
- package/lib/components/textarea.js.map +0 -1
- package/lib/components/tooltip.d.ts.map +0 -1
- package/lib/components/tooltip.js.map +0 -1
- package/lib/components/wizard.d.ts.map +0 -1
- package/lib/components/wizard.js.map +0 -1
- package/lib/icons/fontawesome/brands.d.ts.map +0 -1
- package/lib/icons/fontawesome/brands.js.map +0 -1
- package/lib/icons/fontawesome/regular.d.ts.map +0 -1
- package/lib/icons/fontawesome/regular.js.map +0 -1
- package/lib/icons/fontawesome/solid.d.ts.map +0 -1
- package/lib/icons/fontawesome/solid.js.map +0 -1
- package/lib/icons/heroicons/micro.d.ts.map +0 -1
- package/lib/icons/heroicons/micro.js.map +0 -1
- package/lib/icons/heroicons/mini.d.ts.map +0 -1
- package/lib/icons/heroicons/mini.js.map +0 -1
- package/lib/icons/heroicons/outline.d.ts.map +0 -1
- package/lib/icons/heroicons/outline.js.map +0 -1
- package/lib/icons/heroicons/solid.d.ts.map +0 -1
- package/lib/icons/heroicons/solid.js.map +0 -1
- package/lib/icons/lucide.d.ts.map +0 -1
- package/lib/icons/lucide.js.map +0 -1
- package/lib/icons/material/filled.d.ts.map +0 -1
- package/lib/icons/material/filled.js.map +0 -1
- package/lib/icons/material/outlined.d.ts.map +0 -1
- package/lib/icons/material/outlined.js.map +0 -1
- package/lib/icons/material/round.d.ts.map +0 -1
- package/lib/icons/material/round.js.map +0 -1
- package/lib/icons/material/sharp.d.ts.map +0 -1
- package/lib/icons/material/sharp.js.map +0 -1
- package/lib/icons/material/two-tone.d.ts.map +0 -1
- package/lib/icons/material/two-tone.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/styles/button.d.ts.map +0 -1
- package/lib/styles/button.js.map +0 -1
- package/lib/styles/calendar-month.d.ts.map +0 -1
- package/lib/styles/calendar-month.js.map +0 -1
- package/lib/styles/calendar-navigation.d.ts.map +0 -1
- package/lib/styles/calendar-navigation.js.map +0 -1
- package/lib/styles/calendar.d.ts.map +0 -1
- package/lib/styles/calendar.js.map +0 -1
- package/lib/styles/checkbox.d.ts.map +0 -1
- package/lib/styles/checkbox.js.map +0 -1
- package/lib/styles/copy.d.ts.map +0 -1
- package/lib/styles/copy.js.map +0 -1
- package/lib/styles/custom-scrollbar.d.ts.map +0 -1
- package/lib/styles/custom-scrollbar.js.map +0 -1
- package/lib/styles/date-picker.d.ts.map +0 -1
- package/lib/styles/date-picker.js.map +0 -1
- package/lib/styles/file-upload.d.ts.map +0 -1
- package/lib/styles/file-upload.js.map +0 -1
- package/lib/styles/icon.d.ts.map +0 -1
- package/lib/styles/icon.js.map +0 -1
- package/lib/styles/input.d.ts.map +0 -1
- package/lib/styles/input.js.map +0 -1
- package/lib/styles/modal.d.ts.map +0 -1
- package/lib/styles/modal.js.map +0 -1
- package/lib/styles/multiselect.d.ts +0 -8
- package/lib/styles/multiselect.d.ts.map +0 -1
- package/lib/styles/multiselect.js +0 -849
- package/lib/styles/multiselect.js.map +0 -1
- package/lib/styles/option.d.ts.map +0 -1
- package/lib/styles/option.js.map +0 -1
- package/lib/styles/popup.d.ts.map +0 -1
- package/lib/styles/popup.js.map +0 -1
- package/lib/styles/radio.d.ts.map +0 -1
- package/lib/styles/radio.js.map +0 -1
- package/lib/styles/resize-observer.d.ts.map +0 -1
- package/lib/styles/resize-observer.js.map +0 -1
- package/lib/styles/scroll-container.d.ts.map +0 -1
- package/lib/styles/scroll-container.js.map +0 -1
- package/lib/styles/select-base.d.ts.map +0 -1
- package/lib/styles/select-base.js.map +0 -1
- package/lib/styles/select.d.ts.map +0 -1
- package/lib/styles/select.js.map +0 -1
- package/lib/styles/step.d.ts.map +0 -1
- package/lib/styles/step.js.map +0 -1
- package/lib/styles/switch.d.ts.map +0 -1
- package/lib/styles/switch.js.map +0 -1
- package/lib/styles/tab.d.ts.map +0 -1
- package/lib/styles/tab.js.map +0 -1
- package/lib/styles/tabs.d.ts.map +0 -1
- package/lib/styles/tabs.js.map +0 -1
- package/lib/styles/tag.d.ts.map +0 -1
- package/lib/styles/tag.js.map +0 -1
- package/lib/styles/textarea.d.ts.map +0 -1
- package/lib/styles/textarea.js.map +0 -1
- package/lib/styles/tooltip.d.ts.map +0 -1
- package/lib/styles/tooltip.js.map +0 -1
- package/lib/styles/wizard.d.ts.map +0 -1
- package/lib/styles/wizard.js.map +0 -1
- package/lib/types/common.d.ts.map +0 -1
- package/lib/types/common.js.map +0 -1
- package/lib/utils/calendar-utils.d.ts.map +0 -1
- package/lib/utils/calendar-utils.js.map +0 -1
- package/lib/utils/custom-scrollbar.d.ts.map +0 -1
- package/lib/utils/custom-scrollbar.js.map +0 -1
- package/lib/utils/flavor-sheet.d.ts.map +0 -1
- package/lib/utils/flavor-sheet.js.map +0 -1
- package/lib/utils/icon-registry.d.ts.map +0 -1
- package/lib/utils/icon-registry.js.map +0 -1
- package/lib/utils/icons.d.ts.map +0 -1
- package/lib/utils/icons.js.map +0 -1
- package/lib/utils/loader-registry.d.ts.map +0 -1
- package/lib/utils/loader-registry.js.map +0 -1
- package/lib/utils/locale.d.ts.map +0 -1
- package/lib/utils/locale.js.map +0 -1
- package/lib/utils/mobile.d.ts.map +0 -1
- package/lib/utils/mobile.js.map +0 -1
- package/lib/utils/number-format.d.ts.map +0 -1
- package/lib/utils/number-format.js.map +0 -1
- package/lib/utils/parse-boolean.d.ts +0 -39
- package/lib/utils/parse-boolean.d.ts.map +0 -1
- package/lib/utils/parse-boolean.js +0 -58
- package/lib/utils/parse-boolean.js.map +0 -1
- package/lib/utils/positioning.d.ts.map +0 -1
- package/lib/utils/positioning.js.map +0 -1
- package/lib/utils/property-capture.d.ts.map +0 -1
- package/lib/utils/property-capture.js.map +0 -1
- package/lib/utils/property-manager.d.ts.map +0 -1
- package/lib/utils/property-manager.js.map +0 -1
- package/lib/utils/resize-observer.d.ts.map +0 -1
- package/lib/utils/resize-observer.js.map +0 -1
- package/lib/utils/scroll-lock.d.ts.map +0 -1
- package/lib/utils/scroll-lock.js.map +0 -1
- package/lib/utils/styles.d.ts.map +0 -1
- package/lib/utils/styles.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js.map +0 -1
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Calendar
|
|
2
|
+
* Calendar month generation and localization (native Date API only).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Key Features:
|
|
8
|
-
* - 42-day calendar grid generation (6 weeks × 7 days)
|
|
9
|
-
* - Monday-first week ordering
|
|
10
|
-
* - Rich day context with metadata
|
|
11
|
-
* - Localized weekday names
|
|
12
|
-
* - No external dependencies (native Date API only)
|
|
13
|
-
*
|
|
14
|
-
* Note on Timestamps:
|
|
15
|
-
* - `value`: UTC timestamp at midnight UTC (timezone-independent, use for storage/server)
|
|
16
|
-
* - `localValue`: Local timestamp at midnight local time (use for display/local calculations)
|
|
17
|
-
* - `year/month/dayInMonth`: Calendar date components (user's mental model)
|
|
18
|
-
*
|
|
19
|
-
* Example for October 13, 2025:
|
|
20
|
-
* - value = Date.UTC(2025, 9, 13) = consistent worldwide
|
|
21
|
-
* - localValue = new Date(2025, 9, 13).getTime() = varies by timezone
|
|
22
|
-
* - Both represent the same calendar date, different moments in time
|
|
4
|
+
* Timestamps: `value` is UTC midnight (timezone-independent, for storage/server),
|
|
5
|
+
* `localValue` is local midnight (for display/local math). Both denote the same
|
|
6
|
+
* calendar date but are different moments in time.
|
|
23
7
|
*/
|
|
24
8
|
/**
|
|
25
9
|
* Rich context for a single calendar day
|
|
@@ -125,4 +109,3 @@ export declare function parseISODate(isoString: string): {
|
|
|
125
109
|
month: number;
|
|
126
110
|
day: number;
|
|
127
111
|
} | null;
|
|
128
|
-
//# sourceMappingURL=calendar-utils.d.ts.map
|
|
@@ -1,301 +1,128 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calendar Utilities
|
|
3
|
-
*
|
|
4
|
-
* Pure TypeScript utilities for calendar month generation and localization.
|
|
5
|
-
* Ported from ClojureScript ty/date/core.cljs
|
|
6
|
-
*
|
|
7
|
-
* Key Features:
|
|
8
|
-
* - 42-day calendar grid generation (6 weeks × 7 days)
|
|
9
|
-
* - Monday-first week ordering
|
|
10
|
-
* - Rich day context with metadata
|
|
11
|
-
* - Localized weekday names
|
|
12
|
-
* - No external dependencies (native Date API only)
|
|
13
|
-
*
|
|
14
|
-
* Note on Timestamps:
|
|
15
|
-
* - `value`: UTC timestamp at midnight UTC (timezone-independent, use for storage/server)
|
|
16
|
-
* - `localValue`: Local timestamp at midnight local time (use for display/local calculations)
|
|
17
|
-
* - `year/month/dayInMonth`: Calendar date components (user's mental model)
|
|
18
|
-
*
|
|
19
|
-
* Example for October 13, 2025:
|
|
20
|
-
* - value = Date.UTC(2025, 9, 13) = consistent worldwide
|
|
21
|
-
* - localValue = new Date(2025, 9, 13).getTime() = varies by timezone
|
|
22
|
-
* - Both represent the same calendar date, different moments in time
|
|
23
|
-
*/
|
|
24
|
-
// ============================================================================
|
|
25
|
-
// Validation Functions
|
|
26
|
-
// ============================================================================
|
|
27
|
-
/**
|
|
28
|
-
* Validate month value (1-12)
|
|
29
|
-
*/
|
|
30
1
|
function validateMonth(month) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
2
|
+
if (!Number.isInteger(month) || month < 1 || month > 12) {
|
|
3
|
+
throw new RangeError(`Invalid month: ${month}. Must be an integer between 1 and 12.`);
|
|
4
|
+
}
|
|
34
5
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Validate year value (reasonable range)
|
|
37
|
-
*/
|
|
38
6
|
function validateYear(year) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
7
|
+
if (!Number.isInteger(year) || year < 1 || year > 9999) {
|
|
8
|
+
throw new RangeError(`Invalid year: ${year}. Must be an integer between 1 and 9999.`);
|
|
9
|
+
}
|
|
42
10
|
}
|
|
43
|
-
// ============================================================================
|
|
44
|
-
// Helper Functions
|
|
45
|
-
// ============================================================================
|
|
46
|
-
/**
|
|
47
|
-
* Check if two dates are on the same day (ignoring time)
|
|
48
|
-
* Works in local timezone
|
|
49
|
-
*/
|
|
50
11
|
function isSameDay(date1, date2) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
12
|
+
return date1.getFullYear() === date2.getFullYear()
|
|
13
|
+
&& date1.getMonth() === date2.getMonth()
|
|
14
|
+
&& date1.getDate() === date2.getDate();
|
|
54
15
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Create a date at midnight local time
|
|
57
|
-
* This ensures consistent behavior across the application
|
|
58
|
-
*/
|
|
59
16
|
function createMidnightDate(year, month, day) {
|
|
60
|
-
|
|
17
|
+
return new Date(year, month - 1, day, 0, 0, 0, 0);
|
|
61
18
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Get today's date at midnight local time
|
|
64
|
-
* Used for consistent "today" detection
|
|
65
|
-
*/
|
|
66
19
|
function getTodayMidnight() {
|
|
67
|
-
|
|
68
|
-
|
|
20
|
+
const now = new Date();
|
|
21
|
+
return new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0);
|
|
69
22
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Create a DayContext from a Date object
|
|
72
|
-
*
|
|
73
|
-
* @param date - The date to create context for (should be at midnight)
|
|
74
|
-
* @param targetYear - The year of the calendar month being displayed
|
|
75
|
-
* @param targetMonth - The month (1-12) of the calendar month being displayed
|
|
76
|
-
* @param selection - Optional selection state from calendar
|
|
77
|
-
* @returns Rich day context with metadata
|
|
78
|
-
*/
|
|
79
23
|
function createDayContext(date, targetYear, targetMonth, selection) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
nextMonth: isNextMonth,
|
|
119
|
-
today: isToday,
|
|
120
|
-
isSelected,
|
|
121
|
-
selectedYear: selection?.year,
|
|
122
|
-
selectedMonth: selection?.month,
|
|
123
|
-
selectedDay: selection?.day,
|
|
124
|
-
};
|
|
24
|
+
const year = date.getFullYear();
|
|
25
|
+
const month = date.getMonth() + 1;
|
|
26
|
+
const dayInMonth = date.getDate();
|
|
27
|
+
const dayOfWeek = date.getDay();
|
|
28
|
+
const isOtherMonth = year !== targetYear || month !== targetMonth;
|
|
29
|
+
let isPrevMonth = false;
|
|
30
|
+
let isNextMonth = false;
|
|
31
|
+
if (isOtherMonth) {
|
|
32
|
+
if (year < targetYear || (year === targetYear && month < targetMonth)) {
|
|
33
|
+
isPrevMonth = true;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
isNextMonth = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const todayMidnight = getTodayMidnight();
|
|
40
|
+
const isToday = isSameDay(date, todayMidnight);
|
|
41
|
+
const isSelected = selection?.year === year
|
|
42
|
+
&& selection?.month === month
|
|
43
|
+
&& selection?.day === dayInMonth;
|
|
44
|
+
const utcValue = Date.UTC(year, month - 1, dayInMonth, 0, 0, 0, 0);
|
|
45
|
+
const localValue = date.getTime();
|
|
46
|
+
return {
|
|
47
|
+
value: utcValue,
|
|
48
|
+
localValue,
|
|
49
|
+
year,
|
|
50
|
+
month,
|
|
51
|
+
dayInMonth,
|
|
52
|
+
weekend: dayOfWeek === 0 || dayOfWeek === 6,
|
|
53
|
+
otherMonth: isOtherMonth,
|
|
54
|
+
prevMonth: isPrevMonth,
|
|
55
|
+
nextMonth: isNextMonth,
|
|
56
|
+
today: isToday,
|
|
57
|
+
isSelected,
|
|
58
|
+
selectedYear: selection?.year,
|
|
59
|
+
selectedMonth: selection?.month,
|
|
60
|
+
selectedDay: selection?.day,
|
|
61
|
+
};
|
|
125
62
|
}
|
|
126
|
-
/**
|
|
127
|
-
* Get the Monday at or before a given date
|
|
128
|
-
* (Monday = start of week in ISO 8601)
|
|
129
|
-
*
|
|
130
|
-
* @param date - Any date
|
|
131
|
-
* @returns The Monday of that week at midnight
|
|
132
|
-
*/
|
|
133
63
|
function getMondayOfWeek(date) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
141
|
-
// Create new date at Monday midnight
|
|
142
|
-
const monday = new Date(date);
|
|
143
|
-
monday.setDate(date.getDate() - daysToMonday);
|
|
144
|
-
monday.setHours(0, 0, 0, 0); // Ensure midnight
|
|
145
|
-
return monday;
|
|
64
|
+
const dayOfWeek = date.getDay();
|
|
65
|
+
const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
|
|
66
|
+
const monday = new Date(date);
|
|
67
|
+
monday.setDate(date.getDate() - daysToMonday);
|
|
68
|
+
monday.setHours(0, 0, 0, 0);
|
|
69
|
+
return monday;
|
|
146
70
|
}
|
|
147
|
-
/**
|
|
148
|
-
* Get the start date for the calendar grid
|
|
149
|
-
* (The Monday at or before the first day of the month)
|
|
150
|
-
*
|
|
151
|
-
* @param year - Year
|
|
152
|
-
* @param month - Month (1-12)
|
|
153
|
-
* @returns The Monday that starts the calendar grid
|
|
154
|
-
*/
|
|
155
71
|
function getMonthGridStart(year, month) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
// Get the Monday of that week
|
|
159
|
-
return getMondayOfWeek(firstDay);
|
|
72
|
+
const firstDay = createMidnightDate(year, month, 1);
|
|
73
|
+
return getMondayOfWeek(firstDay);
|
|
160
74
|
}
|
|
161
|
-
/**
|
|
162
|
-
* Add days to a date safely
|
|
163
|
-
* Creates a new date without mutating the original
|
|
164
|
-
*
|
|
165
|
-
* @param date - Starting date
|
|
166
|
-
* @param days - Number of days to add
|
|
167
|
-
* @returns New date with days added
|
|
168
|
-
*/
|
|
169
75
|
function addDays(date, days) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
76
|
+
const result = new Date(date);
|
|
77
|
+
result.setDate(result.getDate() + days);
|
|
78
|
+
return result;
|
|
173
79
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Generate N consecutive days starting from a date
|
|
176
|
-
*
|
|
177
|
-
* @param startDate - Starting date
|
|
178
|
-
* @param count - Number of days to generate
|
|
179
|
-
* @param targetYear - Year of the calendar month
|
|
180
|
-
* @param targetMonth - Month (1-12) of the calendar month
|
|
181
|
-
* @param selection - Optional selection state to include in day contexts
|
|
182
|
-
* @returns Array of day contexts
|
|
183
|
-
*/
|
|
184
80
|
function generateDays(startDate, count, targetYear, targetMonth, selection) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
81
|
+
const days = [];
|
|
82
|
+
for (let i = 0; i < count; i++) {
|
|
83
|
+
const date = addDays(startDate, i);
|
|
84
|
+
days.push(createDayContext(date, targetYear, targetMonth, selection));
|
|
85
|
+
}
|
|
86
|
+
return days;
|
|
191
87
|
}
|
|
192
|
-
// ============================================================================
|
|
193
|
-
// Main Calendar Functions
|
|
194
|
-
// ============================================================================
|
|
195
|
-
/**
|
|
196
|
-
* Generate a 42-day calendar grid for a given month
|
|
197
|
-
*
|
|
198
|
-
* Returns 6 weeks (42 days) starting from the Monday at or before
|
|
199
|
-
* the first day of the month. This ensures a complete calendar view
|
|
200
|
-
* with days from the previous and next months as needed.
|
|
201
|
-
*
|
|
202
|
-
* @param year - Year (e.g., 2025)
|
|
203
|
-
* @param month - Month (1-12, 1 = January)
|
|
204
|
-
* @param selection - Optional selection state to include in day contexts
|
|
205
|
-
* @returns Array of 42 day contexts with rich metadata
|
|
206
|
-
*
|
|
207
|
-
* @throws {RangeError} If year or month are invalid
|
|
208
|
-
*
|
|
209
|
-
* @example
|
|
210
|
-
* const days = getCalendarMonthDays(2025, 10); // October 2025
|
|
211
|
-
* console.log(days.length); // 42
|
|
212
|
-
* console.log(days[0].dayInMonth); // First day shown (might be from September)
|
|
213
|
-
*/
|
|
214
88
|
export function getCalendarMonthDays(year, month, selection) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return generateDays(startDate, 42, year, month, selection);
|
|
89
|
+
validateYear(year);
|
|
90
|
+
validateMonth(month);
|
|
91
|
+
const startDate = getMonthGridStart(year, month);
|
|
92
|
+
return generateDays(startDate, 42, year, month, selection);
|
|
220
93
|
}
|
|
221
|
-
/**
|
|
222
|
-
* Get localized weekday names in Monday-first order
|
|
223
|
-
*
|
|
224
|
-
* Note: Intl.DateTimeFormat returns Sunday-first by default,
|
|
225
|
-
* so we reorder to Monday-first: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]
|
|
226
|
-
*
|
|
227
|
-
* @param locale - Locale string (e.g., "en-US", "de-DE", "ja-JP")
|
|
228
|
-
* @param style - Display style: "long" (Monday), "short" (Mon), "narrow" (M)
|
|
229
|
-
* @returns Array of 7 weekday names starting with Monday
|
|
230
|
-
*
|
|
231
|
-
* @example
|
|
232
|
-
* getLocalizedWeekdays("en-US", "short")
|
|
233
|
-
* // Returns: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
|
234
|
-
*
|
|
235
|
-
* getLocalizedWeekdays("de-DE", "long")
|
|
236
|
-
* // Returns: ["Montag", "Dienstag", "Mittwoch", ...]
|
|
237
|
-
*/
|
|
238
94
|
export function getLocalizedWeekdays(locale, style = 'short') {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// Reorder to Monday-first: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]
|
|
248
|
-
const [firstDay, ...rest] = sundayFirst;
|
|
249
|
-
return [...rest, firstDay];
|
|
95
|
+
const formatter = new Intl.DateTimeFormat(locale, { weekday: style });
|
|
96
|
+
const sunday = new Date(2024, 0, 7);
|
|
97
|
+
const sundayFirst = Array.from({ length: 7 }, (_, i) => {
|
|
98
|
+
const date = addDays(sunday, i);
|
|
99
|
+
return formatter.format(date);
|
|
100
|
+
});
|
|
101
|
+
const [firstDay, ...rest] = sundayFirst;
|
|
102
|
+
return [...rest, firstDay];
|
|
250
103
|
}
|
|
251
|
-
// ============================================================================
|
|
252
|
-
// Utility Functions (for testing and debugging)
|
|
253
|
-
// ============================================================================
|
|
254
|
-
/**
|
|
255
|
-
* Get month name in specified locale
|
|
256
|
-
*
|
|
257
|
-
* @param month - Month (1-12)
|
|
258
|
-
* @param locale - Locale string
|
|
259
|
-
* @param style - Display style
|
|
260
|
-
* @returns Localized month name
|
|
261
|
-
*
|
|
262
|
-
* @throws {RangeError} If month is invalid
|
|
263
|
-
*/
|
|
264
104
|
export function getMonthName(month, locale = 'en-US', style = 'long') {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
105
|
+
validateMonth(month);
|
|
106
|
+
const date = new Date(2024, month - 1, 1);
|
|
107
|
+
const formatter = new Intl.DateTimeFormat(locale, { month: style });
|
|
108
|
+
return formatter.format(date);
|
|
269
109
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Parse an ISO date string (YYYY-MM-DD) into year, month, day components
|
|
272
|
-
*
|
|
273
|
-
* @param isoString - ISO date string (YYYY-MM-DD)
|
|
274
|
-
* @returns Object with year, month (1-12), and day, or null if invalid
|
|
275
|
-
*
|
|
276
|
-
* @example
|
|
277
|
-
* parseISODate("2025-10-13")
|
|
278
|
-
* // Returns: { year: 2025, month: 10, day: 13 }
|
|
279
|
-
*/
|
|
280
110
|
export function parseISODate(isoString) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
return { year, month, day };
|
|
111
|
+
const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})$/);
|
|
112
|
+
if (!match)
|
|
113
|
+
return null;
|
|
114
|
+
const year = parseInt(match[1], 10);
|
|
115
|
+
const month = parseInt(match[2], 10);
|
|
116
|
+
const day = parseInt(match[3], 10);
|
|
117
|
+
if (year < 1 || year > 9999)
|
|
118
|
+
return null;
|
|
119
|
+
if (month < 1 || month > 12)
|
|
120
|
+
return null;
|
|
121
|
+
if (day < 1 || day > 31)
|
|
122
|
+
return null;
|
|
123
|
+
const date = new Date(year, month - 1, day);
|
|
124
|
+
if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return { year, month, day };
|
|
300
128
|
}
|
|
301
|
-
//# sourceMappingURL=calendar-utils.js.map
|
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CustomScrollbar -
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* const scrollbar = new CustomScrollbar(scrollEl, { vertical: true })
|
|
11
|
-
* // scrollbar.trackY, scrollbar.thumbY — append these to your DOM
|
|
12
|
-
* // scrollbar.trackX, scrollbar.thumbX — for horizontal
|
|
13
|
-
* scrollbar.destroy() // cleanup
|
|
14
|
-
*
|
|
15
|
-
* CSS classes applied:
|
|
16
|
-
* .ty-scrollbar-track-y / .ty-scrollbar-track-x
|
|
17
|
-
* .ty-scrollbar-thumb-y / .ty-scrollbar-thumb-x
|
|
18
|
-
* .has-overflow — when content overflows
|
|
19
|
-
* .dragging — during thumb drag
|
|
20
|
-
* .scrolling — briefly after scroll (auto-hide)
|
|
2
|
+
* CustomScrollbar - attaches a rendered scrollbar (vertical and/or horizontal)
|
|
3
|
+
* to any scrollable element. Overlay approach: native overflow:auto is kept for
|
|
4
|
+
* scroll physics, the native scrollbar is hidden via CSS, and custom track/thumb
|
|
5
|
+
* elements are synced on top. Append `trackY`/`trackX` to your DOM; `destroy()`
|
|
6
|
+
* cleans up. Classes: `.ty-scrollbar-{track,thumb}-{y,x}` plus state classes
|
|
7
|
+
* `.has-overflow`, `.dragging`, `.scrolling` (brief auto-hide after scroll).
|
|
21
8
|
*/
|
|
22
9
|
export interface CustomScrollbarOptions {
|
|
23
10
|
vertical?: boolean;
|
|
@@ -79,4 +66,3 @@ export declare class CustomScrollbar {
|
|
|
79
66
|
private _handleTrackYDown;
|
|
80
67
|
private _handleTrackXDown;
|
|
81
68
|
}
|
|
82
|
-
//# sourceMappingURL=custom-scrollbar.d.ts.map
|