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.
Files changed (358) hide show
  1. package/README.md +10 -2
  2. package/css/tyrell-theme.css +192 -180
  3. package/css/tyrell.css +23 -0
  4. package/dist/tyrell-colors-static.css +1 -316
  5. package/dist/tyrell-theme.css +1 -1454
  6. package/dist/tyrell.css +1 -1371
  7. package/dist/tyrell.js +1 -1
  8. package/lib/base/ty-component.d.ts +20 -10
  9. package/lib/base/ty-component.js +196 -319
  10. package/lib/components/button.d.ts +3 -17
  11. package/lib/components/button.js +261 -295
  12. package/lib/components/calendar-month.d.ts +4 -50
  13. package/lib/components/calendar-month.js +443 -582
  14. package/lib/components/calendar-navigation.d.ts +3 -48
  15. package/lib/components/calendar-navigation.js +239 -362
  16. package/lib/components/calendar.d.ts +8 -83
  17. package/lib/components/calendar.js +616 -829
  18. package/lib/components/checkbox.d.ts +5 -72
  19. package/lib/components/checkbox.js +273 -416
  20. package/lib/components/copy.d.ts +4 -57
  21. package/lib/components/copy.js +280 -397
  22. package/lib/components/date-picker.d.ts +21 -163
  23. package/lib/components/date-picker.js +1143 -1674
  24. package/lib/components/file-upload.d.ts +9 -15
  25. package/lib/components/file-upload.js +404 -426
  26. package/lib/components/icon.d.ts +3 -24
  27. package/lib/components/icon.js +141 -230
  28. package/lib/components/input.d.ts +8 -108
  29. package/lib/components/input.js +593 -784
  30. package/lib/components/modal.d.ts +17 -26
  31. package/lib/components/modal.js +340 -484
  32. package/lib/components/option.d.ts +2 -9
  33. package/lib/components/option.js +168 -216
  34. package/lib/components/popup.d.ts +2 -17
  35. package/lib/components/popup.js +249 -380
  36. package/lib/components/radio.d.ts +5 -25
  37. package/lib/components/radio.js +407 -461
  38. package/lib/components/resize-observer.d.ts +3 -30
  39. package/lib/components/resize-observer.js +69 -103
  40. package/lib/components/scroll-container.d.ts +2 -12
  41. package/lib/components/scroll-container.js +293 -338
  42. package/lib/components/select.d.ts +87 -159
  43. package/lib/components/select.js +1609 -2090
  44. package/lib/components/selected-tags.d.ts +5 -48
  45. package/lib/components/selected-tags.js +188 -276
  46. package/lib/components/step.d.ts +1 -6
  47. package/lib/components/step.js +62 -68
  48. package/lib/components/switch.d.ts +1 -12
  49. package/lib/components/switch.js +214 -247
  50. package/lib/components/tab.d.ts +1 -6
  51. package/lib/components/tab.js +62 -69
  52. package/lib/components/tabs.d.ts +6 -63
  53. package/lib/components/tabs.js +545 -777
  54. package/lib/components/tag.d.ts +3 -37
  55. package/lib/components/tag.js +236 -335
  56. package/lib/components/textarea.d.ts +7 -87
  57. package/lib/components/textarea.js +457 -627
  58. package/lib/components/tooltip.d.ts +3 -11
  59. package/lib/components/tooltip.js +307 -443
  60. package/lib/components/wizard.d.ts +6 -54
  61. package/lib/components/wizard.js +405 -618
  62. package/lib/icons/fontawesome/brands.d.ts +0 -1
  63. package/lib/icons/fontawesome/brands.js +0 -8
  64. package/lib/icons/fontawesome/regular.d.ts +0 -1
  65. package/lib/icons/fontawesome/regular.js +0 -8
  66. package/lib/icons/fontawesome/solid.d.ts +0 -1
  67. package/lib/icons/fontawesome/solid.js +0 -8
  68. package/lib/icons/heroicons/micro.d.ts +0 -1
  69. package/lib/icons/heroicons/micro.js +392 -400
  70. package/lib/icons/heroicons/mini.d.ts +0 -1
  71. package/lib/icons/heroicons/mini.js +382 -390
  72. package/lib/icons/heroicons/outline.d.ts +0 -1
  73. package/lib/icons/heroicons/outline.js +337 -345
  74. package/lib/icons/heroicons/solid.d.ts +0 -1
  75. package/lib/icons/heroicons/solid.js +407 -415
  76. package/lib/icons/lucide.d.ts +0 -1
  77. package/lib/icons/lucide.js +24479 -26351
  78. package/lib/icons/material/filled.d.ts +0 -1
  79. package/lib/icons/material/filled.js +9653 -9663
  80. package/lib/icons/material/outlined.d.ts +0 -1
  81. package/lib/icons/material/outlined.js +10271 -10281
  82. package/lib/icons/material/round.d.ts +0 -1
  83. package/lib/icons/material/round.js +10495 -10505
  84. package/lib/icons/material/sharp.d.ts +0 -1
  85. package/lib/icons/material/sharp.js +9905 -9915
  86. package/lib/icons/material/two-tone.d.ts +0 -1
  87. package/lib/icons/material/two-tone.js +12792 -12802
  88. package/lib/index.d.ts +0 -1
  89. package/lib/index.js +21 -41
  90. package/lib/styles/button.d.ts +2 -20
  91. package/lib/styles/button.js +202 -404
  92. package/lib/styles/calendar-month.d.ts +1 -5
  93. package/lib/styles/calendar-month.js +127 -244
  94. package/lib/styles/calendar-navigation.d.ts +2 -6
  95. package/lib/styles/calendar-navigation.js +64 -104
  96. package/lib/styles/calendar.d.ts +1 -2
  97. package/lib/styles/calendar.js +9 -22
  98. package/lib/styles/checkbox.d.ts +0 -1
  99. package/lib/styles/checkbox.js +45 -94
  100. package/lib/styles/copy.d.ts +0 -1
  101. package/lib/styles/copy.js +67 -106
  102. package/lib/styles/custom-scrollbar.d.ts +1 -2
  103. package/lib/styles/custom-scrollbar.js +80 -115
  104. package/lib/styles/date-picker.d.ts +1 -5
  105. package/lib/styles/date-picker.js +261 -335
  106. package/lib/styles/field-size.d.ts +6 -0
  107. package/lib/styles/field-size.js +91 -0
  108. package/lib/styles/file-upload.d.ts +1 -2
  109. package/lib/styles/file-upload.js +143 -188
  110. package/lib/styles/icon.d.ts +2 -6
  111. package/lib/styles/icon.js +92 -170
  112. package/lib/styles/input.d.ts +1 -6
  113. package/lib/styles/input.js +125 -290
  114. package/lib/styles/modal.d.ts +1 -2
  115. package/lib/styles/modal.js +71 -108
  116. package/lib/styles/option.d.ts +2 -6
  117. package/lib/styles/option.js +49 -64
  118. package/lib/styles/popup.d.ts +1 -2
  119. package/lib/styles/popup.js +42 -77
  120. package/lib/styles/radio.d.ts +0 -1
  121. package/lib/styles/radio.js +69 -110
  122. package/lib/styles/resize-observer.d.ts +1 -2
  123. package/lib/styles/resize-observer.js +2 -12
  124. package/lib/styles/scroll-container.d.ts +1 -2
  125. package/lib/styles/scroll-container.js +100 -149
  126. package/lib/styles/select-base.d.ts +0 -1
  127. package/lib/styles/select-base.js +597 -785
  128. package/lib/styles/select.d.ts +1 -2
  129. package/lib/styles/select.js +140 -236
  130. package/lib/styles/step.d.ts +1 -2
  131. package/lib/styles/step.js +22 -33
  132. package/lib/styles/switch.d.ts +0 -1
  133. package/lib/styles/switch.js +34 -73
  134. package/lib/styles/tab.d.ts +1 -2
  135. package/lib/styles/tab.js +22 -34
  136. package/lib/styles/tabs.d.ts +3 -11
  137. package/lib/styles/tabs.js +190 -222
  138. package/lib/styles/tag.d.ts +1 -5
  139. package/lib/styles/tag.js +136 -218
  140. package/lib/styles/textarea.d.ts +1 -2
  141. package/lib/styles/textarea.js +210 -319
  142. package/lib/styles/tooltip.d.ts +0 -1
  143. package/lib/styles/tooltip.js +3 -13
  144. package/lib/styles/wizard.d.ts +5 -21
  145. package/lib/styles/wizard.js +170 -306
  146. package/lib/types/common.d.ts +2 -2
  147. package/lib/types/common.js +6 -17
  148. package/lib/utils/calendar-utils.d.ts +4 -21
  149. package/lib/utils/calendar-utils.js +100 -273
  150. package/lib/utils/custom-scrollbar.d.ts +6 -20
  151. package/lib/utils/custom-scrollbar.js +273 -317
  152. package/lib/utils/flavor-sheet.d.ts +0 -1
  153. package/lib/utils/flavor-sheet.js +14 -37
  154. package/lib/utils/icon-registry.d.ts +0 -2
  155. package/lib/utils/icon-registry.js +137 -243
  156. package/lib/utils/icons.d.ts +0 -1
  157. package/lib/utils/icons.js +0 -9
  158. package/lib/utils/loader-registry.d.ts +0 -1
  159. package/lib/utils/loader-registry.js +3 -35
  160. package/lib/utils/locale.d.ts +2 -23
  161. package/lib/utils/locale.js +34 -120
  162. package/lib/utils/mobile.d.ts +0 -1
  163. package/lib/utils/mobile.js +1 -18
  164. package/lib/utils/number-format.d.ts +6 -3
  165. package/lib/utils/number-format.js +54 -110
  166. package/lib/utils/positioning.d.ts +50 -7
  167. package/lib/utils/positioning.js +224 -234
  168. package/lib/utils/property-capture.d.ts +5 -27
  169. package/lib/utils/property-capture.js +36 -144
  170. package/lib/utils/property-manager.d.ts +0 -1
  171. package/lib/utils/property-manager.js +126 -196
  172. package/lib/utils/resize-observer.d.ts +0 -1
  173. package/lib/utils/resize-observer.js +23 -59
  174. package/lib/utils/scroll-lock.d.ts +4 -11
  175. package/lib/utils/scroll-lock.js +65 -172
  176. package/lib/utils/styles.d.ts +0 -1
  177. package/lib/utils/styles.js +17 -41
  178. package/lib/version.d.ts +1 -2
  179. package/lib/version.js +1 -11
  180. package/package.json +4 -4
  181. package/lib/base/ty-component.d.ts.map +0 -1
  182. package/lib/base/ty-component.js.map +0 -1
  183. package/lib/components/button.d.ts.map +0 -1
  184. package/lib/components/button.js.map +0 -1
  185. package/lib/components/calendar-month.d.ts.map +0 -1
  186. package/lib/components/calendar-month.js.map +0 -1
  187. package/lib/components/calendar-navigation.d.ts.map +0 -1
  188. package/lib/components/calendar-navigation.js.map +0 -1
  189. package/lib/components/calendar.d.ts.map +0 -1
  190. package/lib/components/calendar.js.map +0 -1
  191. package/lib/components/checkbox.d.ts.map +0 -1
  192. package/lib/components/checkbox.js.map +0 -1
  193. package/lib/components/copy.d.ts.map +0 -1
  194. package/lib/components/copy.js.map +0 -1
  195. package/lib/components/date-picker.d.ts.map +0 -1
  196. package/lib/components/date-picker.js.map +0 -1
  197. package/lib/components/file-upload.d.ts.map +0 -1
  198. package/lib/components/file-upload.js.map +0 -1
  199. package/lib/components/icon.d.ts.map +0 -1
  200. package/lib/components/icon.js.map +0 -1
  201. package/lib/components/input.d.ts.map +0 -1
  202. package/lib/components/input.js.map +0 -1
  203. package/lib/components/modal.d.ts.map +0 -1
  204. package/lib/components/modal.js.map +0 -1
  205. package/lib/components/option.d.ts.map +0 -1
  206. package/lib/components/option.js.map +0 -1
  207. package/lib/components/popup.d.ts.map +0 -1
  208. package/lib/components/popup.js.map +0 -1
  209. package/lib/components/radio.d.ts.map +0 -1
  210. package/lib/components/radio.js.map +0 -1
  211. package/lib/components/resize-observer.d.ts.map +0 -1
  212. package/lib/components/resize-observer.js.map +0 -1
  213. package/lib/components/scroll-container.d.ts.map +0 -1
  214. package/lib/components/scroll-container.js.map +0 -1
  215. package/lib/components/select.d.ts.map +0 -1
  216. package/lib/components/select.js.map +0 -1
  217. package/lib/components/selected-tags.d.ts.map +0 -1
  218. package/lib/components/selected-tags.js.map +0 -1
  219. package/lib/components/step.d.ts.map +0 -1
  220. package/lib/components/step.js.map +0 -1
  221. package/lib/components/switch.d.ts.map +0 -1
  222. package/lib/components/switch.js.map +0 -1
  223. package/lib/components/tab.d.ts.map +0 -1
  224. package/lib/components/tab.js.map +0 -1
  225. package/lib/components/tabs.d.ts.map +0 -1
  226. package/lib/components/tabs.js.map +0 -1
  227. package/lib/components/tag.d.ts.map +0 -1
  228. package/lib/components/tag.js.map +0 -1
  229. package/lib/components/textarea.d.ts.map +0 -1
  230. package/lib/components/textarea.js.map +0 -1
  231. package/lib/components/tooltip.d.ts.map +0 -1
  232. package/lib/components/tooltip.js.map +0 -1
  233. package/lib/components/wizard.d.ts.map +0 -1
  234. package/lib/components/wizard.js.map +0 -1
  235. package/lib/icons/fontawesome/brands.d.ts.map +0 -1
  236. package/lib/icons/fontawesome/brands.js.map +0 -1
  237. package/lib/icons/fontawesome/regular.d.ts.map +0 -1
  238. package/lib/icons/fontawesome/regular.js.map +0 -1
  239. package/lib/icons/fontawesome/solid.d.ts.map +0 -1
  240. package/lib/icons/fontawesome/solid.js.map +0 -1
  241. package/lib/icons/heroicons/micro.d.ts.map +0 -1
  242. package/lib/icons/heroicons/micro.js.map +0 -1
  243. package/lib/icons/heroicons/mini.d.ts.map +0 -1
  244. package/lib/icons/heroicons/mini.js.map +0 -1
  245. package/lib/icons/heroicons/outline.d.ts.map +0 -1
  246. package/lib/icons/heroicons/outline.js.map +0 -1
  247. package/lib/icons/heroicons/solid.d.ts.map +0 -1
  248. package/lib/icons/heroicons/solid.js.map +0 -1
  249. package/lib/icons/lucide.d.ts.map +0 -1
  250. package/lib/icons/lucide.js.map +0 -1
  251. package/lib/icons/material/filled.d.ts.map +0 -1
  252. package/lib/icons/material/filled.js.map +0 -1
  253. package/lib/icons/material/outlined.d.ts.map +0 -1
  254. package/lib/icons/material/outlined.js.map +0 -1
  255. package/lib/icons/material/round.d.ts.map +0 -1
  256. package/lib/icons/material/round.js.map +0 -1
  257. package/lib/icons/material/sharp.d.ts.map +0 -1
  258. package/lib/icons/material/sharp.js.map +0 -1
  259. package/lib/icons/material/two-tone.d.ts.map +0 -1
  260. package/lib/icons/material/two-tone.js.map +0 -1
  261. package/lib/index.d.ts.map +0 -1
  262. package/lib/index.js.map +0 -1
  263. package/lib/styles/button.d.ts.map +0 -1
  264. package/lib/styles/button.js.map +0 -1
  265. package/lib/styles/calendar-month.d.ts.map +0 -1
  266. package/lib/styles/calendar-month.js.map +0 -1
  267. package/lib/styles/calendar-navigation.d.ts.map +0 -1
  268. package/lib/styles/calendar-navigation.js.map +0 -1
  269. package/lib/styles/calendar.d.ts.map +0 -1
  270. package/lib/styles/calendar.js.map +0 -1
  271. package/lib/styles/checkbox.d.ts.map +0 -1
  272. package/lib/styles/checkbox.js.map +0 -1
  273. package/lib/styles/copy.d.ts.map +0 -1
  274. package/lib/styles/copy.js.map +0 -1
  275. package/lib/styles/custom-scrollbar.d.ts.map +0 -1
  276. package/lib/styles/custom-scrollbar.js.map +0 -1
  277. package/lib/styles/date-picker.d.ts.map +0 -1
  278. package/lib/styles/date-picker.js.map +0 -1
  279. package/lib/styles/file-upload.d.ts.map +0 -1
  280. package/lib/styles/file-upload.js.map +0 -1
  281. package/lib/styles/icon.d.ts.map +0 -1
  282. package/lib/styles/icon.js.map +0 -1
  283. package/lib/styles/input.d.ts.map +0 -1
  284. package/lib/styles/input.js.map +0 -1
  285. package/lib/styles/modal.d.ts.map +0 -1
  286. package/lib/styles/modal.js.map +0 -1
  287. package/lib/styles/multiselect.d.ts +0 -8
  288. package/lib/styles/multiselect.d.ts.map +0 -1
  289. package/lib/styles/multiselect.js +0 -849
  290. package/lib/styles/multiselect.js.map +0 -1
  291. package/lib/styles/option.d.ts.map +0 -1
  292. package/lib/styles/option.js.map +0 -1
  293. package/lib/styles/popup.d.ts.map +0 -1
  294. package/lib/styles/popup.js.map +0 -1
  295. package/lib/styles/radio.d.ts.map +0 -1
  296. package/lib/styles/radio.js.map +0 -1
  297. package/lib/styles/resize-observer.d.ts.map +0 -1
  298. package/lib/styles/resize-observer.js.map +0 -1
  299. package/lib/styles/scroll-container.d.ts.map +0 -1
  300. package/lib/styles/scroll-container.js.map +0 -1
  301. package/lib/styles/select-base.d.ts.map +0 -1
  302. package/lib/styles/select-base.js.map +0 -1
  303. package/lib/styles/select.d.ts.map +0 -1
  304. package/lib/styles/select.js.map +0 -1
  305. package/lib/styles/step.d.ts.map +0 -1
  306. package/lib/styles/step.js.map +0 -1
  307. package/lib/styles/switch.d.ts.map +0 -1
  308. package/lib/styles/switch.js.map +0 -1
  309. package/lib/styles/tab.d.ts.map +0 -1
  310. package/lib/styles/tab.js.map +0 -1
  311. package/lib/styles/tabs.d.ts.map +0 -1
  312. package/lib/styles/tabs.js.map +0 -1
  313. package/lib/styles/tag.d.ts.map +0 -1
  314. package/lib/styles/tag.js.map +0 -1
  315. package/lib/styles/textarea.d.ts.map +0 -1
  316. package/lib/styles/textarea.js.map +0 -1
  317. package/lib/styles/tooltip.d.ts.map +0 -1
  318. package/lib/styles/tooltip.js.map +0 -1
  319. package/lib/styles/wizard.d.ts.map +0 -1
  320. package/lib/styles/wizard.js.map +0 -1
  321. package/lib/types/common.d.ts.map +0 -1
  322. package/lib/types/common.js.map +0 -1
  323. package/lib/utils/calendar-utils.d.ts.map +0 -1
  324. package/lib/utils/calendar-utils.js.map +0 -1
  325. package/lib/utils/custom-scrollbar.d.ts.map +0 -1
  326. package/lib/utils/custom-scrollbar.js.map +0 -1
  327. package/lib/utils/flavor-sheet.d.ts.map +0 -1
  328. package/lib/utils/flavor-sheet.js.map +0 -1
  329. package/lib/utils/icon-registry.d.ts.map +0 -1
  330. package/lib/utils/icon-registry.js.map +0 -1
  331. package/lib/utils/icons.d.ts.map +0 -1
  332. package/lib/utils/icons.js.map +0 -1
  333. package/lib/utils/loader-registry.d.ts.map +0 -1
  334. package/lib/utils/loader-registry.js.map +0 -1
  335. package/lib/utils/locale.d.ts.map +0 -1
  336. package/lib/utils/locale.js.map +0 -1
  337. package/lib/utils/mobile.d.ts.map +0 -1
  338. package/lib/utils/mobile.js.map +0 -1
  339. package/lib/utils/number-format.d.ts.map +0 -1
  340. package/lib/utils/number-format.js.map +0 -1
  341. package/lib/utils/parse-boolean.d.ts +0 -39
  342. package/lib/utils/parse-boolean.d.ts.map +0 -1
  343. package/lib/utils/parse-boolean.js +0 -58
  344. package/lib/utils/parse-boolean.js.map +0 -1
  345. package/lib/utils/positioning.d.ts.map +0 -1
  346. package/lib/utils/positioning.js.map +0 -1
  347. package/lib/utils/property-capture.d.ts.map +0 -1
  348. package/lib/utils/property-capture.js.map +0 -1
  349. package/lib/utils/property-manager.d.ts.map +0 -1
  350. package/lib/utils/property-manager.js.map +0 -1
  351. package/lib/utils/resize-observer.d.ts.map +0 -1
  352. package/lib/utils/resize-observer.js.map +0 -1
  353. package/lib/utils/scroll-lock.d.ts.map +0 -1
  354. package/lib/utils/scroll-lock.js.map +0 -1
  355. package/lib/utils/styles.d.ts.map +0 -1
  356. package/lib/utils/styles.js.map +0 -1
  357. package/lib/version.d.ts.map +0 -1
  358. package/lib/version.js.map +0 -1
@@ -1,25 +1,9 @@
1
1
  /**
2
- * Calendar Utilities
2
+ * Calendar month generation and localization (native Date API only).
3
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
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
- if (!Number.isInteger(month) || month < 1 || month > 12) {
32
- throw new RangeError(`Invalid month: ${month}. Must be an integer between 1 and 12.`);
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
- if (!Number.isInteger(year) || year < 1 || year > 9999) {
40
- throw new RangeError(`Invalid year: ${year}. Must be an integer between 1 and 9999.`);
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
- return date1.getFullYear() === date2.getFullYear()
52
- && date1.getMonth() === date2.getMonth()
53
- && date1.getDate() === date2.getDate();
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
- return new Date(year, month - 1, day, 0, 0, 0, 0);
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
- const now = new Date();
68
- return new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0);
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
- const year = date.getFullYear();
81
- const month = date.getMonth() + 1; // Convert to 1-based
82
- const dayInMonth = date.getDate();
83
- const dayOfWeek = date.getDay(); // 0 = Sunday, 6 = Saturday
84
- // Check if this day is from a different month
85
- const isOtherMonth = year !== targetYear || month !== targetMonth;
86
- // Determine if previous or next month
87
- let isPrevMonth = false;
88
- let isNextMonth = false;
89
- if (isOtherMonth) {
90
- if (year < targetYear || (year === targetYear && month < targetMonth)) {
91
- isPrevMonth = true;
92
- }
93
- else {
94
- isNextMonth = true;
95
- }
96
- }
97
- // Check if today (compare dates at midnight for consistency)
98
- const todayMidnight = getTodayMidnight();
99
- const isToday = isSameDay(date, todayMidnight);
100
- // Check if this day is selected
101
- const isSelected = selection?.year === year
102
- && selection?.month === month
103
- && selection?.day === dayInMonth;
104
- // Calculate both UTC and local timestamps
105
- // value: UTC midnight (consistent worldwide for the same date)
106
- // localValue: Local midnight (respects user's timezone)
107
- const utcValue = Date.UTC(year, month - 1, dayInMonth, 0, 0, 0, 0);
108
- const localValue = date.getTime();
109
- return {
110
- value: utcValue,
111
- localValue,
112
- year,
113
- month,
114
- dayInMonth,
115
- weekend: dayOfWeek === 0 || dayOfWeek === 6,
116
- otherMonth: isOtherMonth,
117
- prevMonth: isPrevMonth,
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
- const dayOfWeek = date.getDay(); // 0 = Sunday, 1 = Monday, etc.
135
- // Calculate days to subtract to get to Monday
136
- // Sunday (0) → go back 6 days
137
- // Monday (1) → go back 0 days
138
- // Tuesday (2) → go back 1 day
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
- // Get first day of month at midnight (month is 1-based, Date constructor is 0-based)
157
- const firstDay = createMidnightDate(year, month, 1);
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
- const result = new Date(date);
171
- result.setDate(result.getDate() + days);
172
- return result;
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
- const days = [];
186
- for (let i = 0; i < count; i++) {
187
- const date = addDays(startDate, i);
188
- days.push(createDayContext(date, targetYear, targetMonth, selection));
189
- }
190
- return days;
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
- // Validate inputs
216
- validateYear(year);
217
- validateMonth(month);
218
- const startDate = getMonthGridStart(year, month);
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
- const formatter = new Intl.DateTimeFormat(locale, { weekday: style });
240
- // Create a Sunday (base date) - January 7, 2024 is a Sunday
241
- const sunday = new Date(2024, 0, 7);
242
- // Generate Sunday-first array: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
243
- const sundayFirst = Array.from({ length: 7 }, (_, i) => {
244
- const date = addDays(sunday, i);
245
- return formatter.format(date);
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
- validateMonth(month);
266
- const date = new Date(2024, month - 1, 1);
267
- const formatter = new Intl.DateTimeFormat(locale, { month: style });
268
- return formatter.format(date);
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
- const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})$/);
282
- if (!match)
283
- return null;
284
- const year = parseInt(match[1], 10);
285
- const month = parseInt(match[2], 10);
286
- const day = parseInt(match[3], 10);
287
- // Validate ranges
288
- if (year < 1 || year > 9999)
289
- return null;
290
- if (month < 1 || month > 12)
291
- return null;
292
- if (day < 1 || day > 31)
293
- return null;
294
- // Check if date is valid (handles Feb 30, etc.)
295
- const date = new Date(year, month - 1, day);
296
- if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
297
- return null;
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 - Reusable scrollbar utility
3
- *
4
- * Attaches a custom rendered scrollbar (vertical and/or horizontal) to any
5
- * scrollable element. Uses the overlay approach: native overflow:auto is
6
- * preserved for scroll physics, native scrollbar is hidden via CSS,
7
- * and custom track/thumb elements are synced on top.
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