tyrell-components 1.0.0-RC12 → 1.0.0-RC14

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 (354) hide show
  1. package/README.md +2 -1
  2. package/css/tyrell-colors-static.css +316 -0
  3. package/css/tyrell-theme.css +1443 -0
  4. package/css/tyrell.css +127 -423
  5. package/dist/tyrell-colors-static.css +316 -0
  6. package/dist/tyrell-theme.css +1443 -0
  7. package/dist/tyrell.css +127 -423
  8. package/dist/tyrell.js +1 -1
  9. package/lib/base/ty-component.d.ts +20 -10
  10. package/lib/base/ty-component.js +21 -144
  11. package/lib/components/button.d.ts +9 -16
  12. package/lib/components/button.js +12 -37
  13. package/lib/components/calendar-month.d.ts +17 -46
  14. package/lib/components/calendar-month.js +97 -145
  15. package/lib/components/calendar-navigation.d.ts +3 -48
  16. package/lib/components/calendar-navigation.js +3 -126
  17. package/lib/components/calendar.d.ts +6 -81
  18. package/lib/components/calendar.js +24 -236
  19. package/lib/components/checkbox.d.ts +8 -74
  20. package/lib/components/checkbox.js +21 -177
  21. package/lib/components/copy.d.ts +7 -59
  22. package/lib/components/copy.js +19 -137
  23. package/lib/components/date-picker.d.ts +23 -161
  24. package/lib/components/date-picker.js +127 -588
  25. package/lib/components/file-upload.d.ts +9 -15
  26. package/lib/components/file-upload.js +19 -41
  27. package/lib/components/icon.d.ts +3 -24
  28. package/lib/components/icon.js +1 -90
  29. package/lib/components/input.d.ts +10 -109
  30. package/lib/components/input.js +24 -209
  31. package/lib/components/modal.d.ts +17 -26
  32. package/lib/components/modal.js +67 -192
  33. package/lib/components/option.d.ts +2 -20
  34. package/lib/components/option.js +1 -148
  35. package/lib/components/popup.d.ts +2 -17
  36. package/lib/components/popup.js +35 -132
  37. package/lib/components/radio.d.ts +7 -24
  38. package/lib/components/radio.js +24 -68
  39. package/lib/components/resize-observer.d.ts +3 -30
  40. package/lib/components/resize-observer.js +12 -46
  41. package/lib/components/scroll-container.d.ts +2 -12
  42. package/lib/components/scroll-container.js +3 -46
  43. package/lib/components/select.d.ts +130 -151
  44. package/lib/components/select.js +327 -516
  45. package/lib/components/selected-tags.d.ts +8 -38
  46. package/lib/components/selected-tags.js +20 -78
  47. package/lib/components/step.d.ts +1 -6
  48. package/lib/components/step.js +0 -6
  49. package/lib/components/switch.d.ts +4 -14
  50. package/lib/components/switch.js +15 -61
  51. package/lib/components/tab.d.ts +1 -6
  52. package/lib/components/tab.js +0 -7
  53. package/lib/components/tabs.d.ts +5 -63
  54. package/lib/components/tabs.js +159 -267
  55. package/lib/components/tag.d.ts +2 -36
  56. package/lib/components/tag.js +5 -105
  57. package/lib/components/textarea.d.ts +6 -86
  58. package/lib/components/textarea.js +2 -173
  59. package/lib/components/tooltip.d.ts +7 -13
  60. package/lib/components/tooltip.js +83 -180
  61. package/lib/components/wizard.d.ts +6 -54
  62. package/lib/components/wizard.js +27 -221
  63. package/lib/icons/fontawesome/brands.d.ts +0 -1
  64. package/lib/icons/fontawesome/brands.js +0 -8
  65. package/lib/icons/fontawesome/regular.d.ts +0 -1
  66. package/lib/icons/fontawesome/regular.js +0 -8
  67. package/lib/icons/fontawesome/solid.d.ts +0 -1
  68. package/lib/icons/fontawesome/solid.js +0 -8
  69. package/lib/icons/heroicons/micro.d.ts +0 -1
  70. package/lib/icons/heroicons/micro.js +0 -8
  71. package/lib/icons/heroicons/mini.d.ts +0 -1
  72. package/lib/icons/heroicons/mini.js +0 -8
  73. package/lib/icons/heroicons/outline.d.ts +0 -1
  74. package/lib/icons/heroicons/outline.js +0 -8
  75. package/lib/icons/heroicons/solid.d.ts +0 -1
  76. package/lib/icons/heroicons/solid.js +0 -8
  77. package/lib/icons/lucide.d.ts +0 -1
  78. package/lib/icons/lucide.js +0 -1872
  79. package/lib/icons/material/filled.d.ts +0 -1
  80. package/lib/icons/material/filled.js +0 -10
  81. package/lib/icons/material/outlined.d.ts +0 -1
  82. package/lib/icons/material/outlined.js +0 -10
  83. package/lib/icons/material/round.d.ts +0 -1
  84. package/lib/icons/material/round.js +0 -10
  85. package/lib/icons/material/sharp.d.ts +0 -1
  86. package/lib/icons/material/sharp.js +0 -10
  87. package/lib/icons/material/two-tone.d.ts +0 -1
  88. package/lib/icons/material/two-tone.js +0 -10
  89. package/lib/index.d.ts +2 -2
  90. package/lib/index.js +2 -21
  91. package/lib/styles/button.d.ts +19 -7
  92. package/lib/styles/button.js +180 -77
  93. package/lib/styles/calendar-month.d.ts +4 -6
  94. package/lib/styles/calendar-month.js +57 -59
  95. package/lib/styles/calendar-navigation.d.ts +2 -6
  96. package/lib/styles/calendar-navigation.js +3 -28
  97. package/lib/styles/calendar.d.ts +1 -2
  98. package/lib/styles/calendar.js +1 -14
  99. package/lib/styles/checkbox.d.ts +3 -2
  100. package/lib/styles/checkbox.js +24 -68
  101. package/lib/styles/copy.d.ts +3 -2
  102. package/lib/styles/copy.js +25 -17
  103. package/lib/styles/custom-scrollbar.d.ts +1 -2
  104. package/lib/styles/custom-scrollbar.js +5 -20
  105. package/lib/styles/date-picker.d.ts +4 -6
  106. package/lib/styles/date-picker.js +80 -130
  107. package/lib/styles/file-upload.d.ts +1 -2
  108. package/lib/styles/file-upload.js +4 -19
  109. package/lib/styles/icon.d.ts +2 -6
  110. package/lib/styles/icon.js +7 -21
  111. package/lib/styles/input.d.ts +4 -7
  112. package/lib/styles/input.js +55 -160
  113. package/lib/styles/modal.d.ts +1 -2
  114. package/lib/styles/modal.js +21 -23
  115. package/lib/styles/option.d.ts +2 -6
  116. package/lib/styles/option.js +17 -63
  117. package/lib/styles/popup.d.ts +1 -2
  118. package/lib/styles/popup.js +26 -30
  119. package/lib/styles/radio.d.ts +3 -2
  120. package/lib/styles/radio.js +21 -32
  121. package/lib/styles/resize-observer.d.ts +1 -2
  122. package/lib/styles/resize-observer.js +0 -7
  123. package/lib/styles/scroll-container.d.ts +1 -2
  124. package/lib/styles/scroll-container.js +0 -19
  125. package/lib/styles/select-base.d.ts +8 -0
  126. package/lib/styles/{multiselect.js → select-base.js} +264 -127
  127. package/lib/styles/select.d.ts +3 -4
  128. package/lib/styles/select.js +103 -43
  129. package/lib/styles/step.d.ts +1 -2
  130. package/lib/styles/step.js +0 -4
  131. package/lib/styles/switch.d.ts +3 -2
  132. package/lib/styles/switch.js +20 -23
  133. package/lib/styles/tab.d.ts +1 -2
  134. package/lib/styles/tab.js +0 -5
  135. package/lib/styles/tabs.d.ts +3 -11
  136. package/lib/styles/tabs.js +77 -45
  137. package/lib/styles/tag.d.ts +1 -5
  138. package/lib/styles/tag.js +6 -32
  139. package/lib/styles/textarea.d.ts +1 -2
  140. package/lib/styles/textarea.js +7 -50
  141. package/lib/styles/tooltip.d.ts +4 -3
  142. package/lib/styles/tooltip.js +0 -125
  143. package/lib/styles/wizard.d.ts +5 -21
  144. package/lib/styles/wizard.js +23 -91
  145. package/lib/types/common.d.ts +1 -3
  146. package/lib/types/common.js +0 -10
  147. package/lib/utils/calendar-utils.d.ts +4 -21
  148. package/lib/utils/calendar-utils.js +4 -177
  149. package/lib/utils/custom-scrollbar.d.ts +6 -20
  150. package/lib/utils/custom-scrollbar.js +1 -45
  151. package/lib/utils/flavor-sheet.d.ts +0 -1
  152. package/lib/utils/flavor-sheet.js +0 -23
  153. package/lib/utils/icon-registry.d.ts +0 -2
  154. package/lib/utils/icon-registry.js +1 -107
  155. package/lib/utils/icons.d.ts +9 -0
  156. package/lib/utils/icons.js +1 -0
  157. package/lib/utils/loader-registry.d.ts +2 -3
  158. package/lib/utils/loader-registry.js +0 -32
  159. package/lib/utils/locale.d.ts +2 -23
  160. package/lib/utils/locale.js +0 -86
  161. package/lib/utils/mobile.d.ts +0 -1
  162. package/lib/utils/mobile.js +0 -17
  163. package/lib/utils/number-format.d.ts +6 -3
  164. package/lib/utils/number-format.js +11 -67
  165. package/lib/utils/positioning.d.ts +77 -3
  166. package/lib/utils/positioning.js +67 -58
  167. package/lib/utils/property-capture.d.ts +5 -27
  168. package/lib/utils/property-capture.js +0 -108
  169. package/lib/utils/property-manager.d.ts +0 -1
  170. package/lib/utils/property-manager.js +0 -70
  171. package/lib/utils/resize-observer.d.ts +0 -1
  172. package/lib/utils/resize-observer.js +0 -36
  173. package/lib/utils/scroll-lock.d.ts +4 -11
  174. package/lib/utils/scroll-lock.js +0 -107
  175. package/lib/utils/styles.d.ts +0 -1
  176. package/lib/utils/styles.js +0 -24
  177. package/lib/version.d.ts +1 -2
  178. package/lib/version.js +1 -11
  179. package/package.json +8 -5
  180. package/css/tyrell-brand.css +0 -1015
  181. package/dist/tyrell-brand.css +0 -1015
  182. package/lib/base/ty-component.d.ts.map +0 -1
  183. package/lib/base/ty-component.js.map +0 -1
  184. package/lib/components/button.d.ts.map +0 -1
  185. package/lib/components/button.js.map +0 -1
  186. package/lib/components/calendar-month.d.ts.map +0 -1
  187. package/lib/components/calendar-month.js.map +0 -1
  188. package/lib/components/calendar-navigation.d.ts.map +0 -1
  189. package/lib/components/calendar-navigation.js.map +0 -1
  190. package/lib/components/calendar.d.ts.map +0 -1
  191. package/lib/components/calendar.js.map +0 -1
  192. package/lib/components/checkbox.d.ts.map +0 -1
  193. package/lib/components/checkbox.js.map +0 -1
  194. package/lib/components/copy.d.ts.map +0 -1
  195. package/lib/components/copy.js.map +0 -1
  196. package/lib/components/date-picker.d.ts.map +0 -1
  197. package/lib/components/date-picker.js.map +0 -1
  198. package/lib/components/file-upload.d.ts.map +0 -1
  199. package/lib/components/file-upload.js.map +0 -1
  200. package/lib/components/icon.d.ts.map +0 -1
  201. package/lib/components/icon.js.map +0 -1
  202. package/lib/components/input.d.ts.map +0 -1
  203. package/lib/components/input.js.map +0 -1
  204. package/lib/components/modal.d.ts.map +0 -1
  205. package/lib/components/modal.js.map +0 -1
  206. package/lib/components/option.d.ts.map +0 -1
  207. package/lib/components/option.js.map +0 -1
  208. package/lib/components/popup.d.ts.map +0 -1
  209. package/lib/components/popup.js.map +0 -1
  210. package/lib/components/radio.d.ts.map +0 -1
  211. package/lib/components/radio.js.map +0 -1
  212. package/lib/components/resize-observer.d.ts.map +0 -1
  213. package/lib/components/resize-observer.js.map +0 -1
  214. package/lib/components/scroll-container.d.ts.map +0 -1
  215. package/lib/components/scroll-container.js.map +0 -1
  216. package/lib/components/select.d.ts.map +0 -1
  217. package/lib/components/select.js.map +0 -1
  218. package/lib/components/selected-tags.d.ts.map +0 -1
  219. package/lib/components/selected-tags.js.map +0 -1
  220. package/lib/components/step.d.ts.map +0 -1
  221. package/lib/components/step.js.map +0 -1
  222. package/lib/components/switch.d.ts.map +0 -1
  223. package/lib/components/switch.js.map +0 -1
  224. package/lib/components/tab.d.ts.map +0 -1
  225. package/lib/components/tab.js.map +0 -1
  226. package/lib/components/tabs.d.ts.map +0 -1
  227. package/lib/components/tabs.js.map +0 -1
  228. package/lib/components/tag.d.ts.map +0 -1
  229. package/lib/components/tag.js.map +0 -1
  230. package/lib/components/textarea.d.ts.map +0 -1
  231. package/lib/components/textarea.js.map +0 -1
  232. package/lib/components/tooltip.d.ts.map +0 -1
  233. package/lib/components/tooltip.js.map +0 -1
  234. package/lib/components/wizard.d.ts.map +0 -1
  235. package/lib/components/wizard.js.map +0 -1
  236. package/lib/icons/fontawesome/brands.d.ts.map +0 -1
  237. package/lib/icons/fontawesome/brands.js.map +0 -1
  238. package/lib/icons/fontawesome/regular.d.ts.map +0 -1
  239. package/lib/icons/fontawesome/regular.js.map +0 -1
  240. package/lib/icons/fontawesome/solid.d.ts.map +0 -1
  241. package/lib/icons/fontawesome/solid.js.map +0 -1
  242. package/lib/icons/heroicons/micro.d.ts.map +0 -1
  243. package/lib/icons/heroicons/micro.js.map +0 -1
  244. package/lib/icons/heroicons/mini.d.ts.map +0 -1
  245. package/lib/icons/heroicons/mini.js.map +0 -1
  246. package/lib/icons/heroicons/outline.d.ts.map +0 -1
  247. package/lib/icons/heroicons/outline.js.map +0 -1
  248. package/lib/icons/heroicons/solid.d.ts.map +0 -1
  249. package/lib/icons/heroicons/solid.js.map +0 -1
  250. package/lib/icons/lucide.d.ts.map +0 -1
  251. package/lib/icons/lucide.js.map +0 -1
  252. package/lib/icons/material/filled.d.ts.map +0 -1
  253. package/lib/icons/material/filled.js.map +0 -1
  254. package/lib/icons/material/outlined.d.ts.map +0 -1
  255. package/lib/icons/material/outlined.js.map +0 -1
  256. package/lib/icons/material/round.d.ts.map +0 -1
  257. package/lib/icons/material/round.js.map +0 -1
  258. package/lib/icons/material/sharp.d.ts.map +0 -1
  259. package/lib/icons/material/sharp.js.map +0 -1
  260. package/lib/icons/material/two-tone.d.ts.map +0 -1
  261. package/lib/icons/material/two-tone.js.map +0 -1
  262. package/lib/index.d.ts.map +0 -1
  263. package/lib/index.js.map +0 -1
  264. package/lib/styles/button.d.ts.map +0 -1
  265. package/lib/styles/button.js.map +0 -1
  266. package/lib/styles/calendar-month.d.ts.map +0 -1
  267. package/lib/styles/calendar-month.js.map +0 -1
  268. package/lib/styles/calendar-navigation.d.ts.map +0 -1
  269. package/lib/styles/calendar-navigation.js.map +0 -1
  270. package/lib/styles/calendar.d.ts.map +0 -1
  271. package/lib/styles/calendar.js.map +0 -1
  272. package/lib/styles/checkbox.d.ts.map +0 -1
  273. package/lib/styles/checkbox.js.map +0 -1
  274. package/lib/styles/copy.d.ts.map +0 -1
  275. package/lib/styles/copy.js.map +0 -1
  276. package/lib/styles/custom-scrollbar.d.ts.map +0 -1
  277. package/lib/styles/custom-scrollbar.js.map +0 -1
  278. package/lib/styles/date-picker.d.ts.map +0 -1
  279. package/lib/styles/date-picker.js.map +0 -1
  280. package/lib/styles/file-upload.d.ts.map +0 -1
  281. package/lib/styles/file-upload.js.map +0 -1
  282. package/lib/styles/icon.d.ts.map +0 -1
  283. package/lib/styles/icon.js.map +0 -1
  284. package/lib/styles/input.d.ts.map +0 -1
  285. package/lib/styles/input.js.map +0 -1
  286. package/lib/styles/modal.d.ts.map +0 -1
  287. package/lib/styles/modal.js.map +0 -1
  288. package/lib/styles/multiselect.d.ts +0 -6
  289. package/lib/styles/multiselect.d.ts.map +0 -1
  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.d.ts.map +0 -1
  302. package/lib/styles/select.js.map +0 -1
  303. package/lib/styles/step.d.ts.map +0 -1
  304. package/lib/styles/step.js.map +0 -1
  305. package/lib/styles/switch.d.ts.map +0 -1
  306. package/lib/styles/switch.js.map +0 -1
  307. package/lib/styles/tab.d.ts.map +0 -1
  308. package/lib/styles/tab.js.map +0 -1
  309. package/lib/styles/tabs.d.ts.map +0 -1
  310. package/lib/styles/tabs.js.map +0 -1
  311. package/lib/styles/tag.d.ts.map +0 -1
  312. package/lib/styles/tag.js.map +0 -1
  313. package/lib/styles/textarea.d.ts.map +0 -1
  314. package/lib/styles/textarea.js.map +0 -1
  315. package/lib/styles/tooltip.d.ts.map +0 -1
  316. package/lib/styles/tooltip.js.map +0 -1
  317. package/lib/styles/wizard.d.ts.map +0 -1
  318. package/lib/styles/wizard.js.map +0 -1
  319. package/lib/types/common.d.ts.map +0 -1
  320. package/lib/types/common.js.map +0 -1
  321. package/lib/utils/calendar-utils.d.ts.map +0 -1
  322. package/lib/utils/calendar-utils.js.map +0 -1
  323. package/lib/utils/custom-scrollbar.d.ts.map +0 -1
  324. package/lib/utils/custom-scrollbar.js.map +0 -1
  325. package/lib/utils/flavor-sheet.d.ts.map +0 -1
  326. package/lib/utils/flavor-sheet.js.map +0 -1
  327. package/lib/utils/icon-registry.d.ts.map +0 -1
  328. package/lib/utils/icon-registry.js.map +0 -1
  329. package/lib/utils/loader-registry.d.ts.map +0 -1
  330. package/lib/utils/loader-registry.js.map +0 -1
  331. package/lib/utils/locale.d.ts.map +0 -1
  332. package/lib/utils/locale.js.map +0 -1
  333. package/lib/utils/mobile.d.ts.map +0 -1
  334. package/lib/utils/mobile.js.map +0 -1
  335. package/lib/utils/number-format.d.ts.map +0 -1
  336. package/lib/utils/number-format.js.map +0 -1
  337. package/lib/utils/parse-boolean.d.ts +0 -39
  338. package/lib/utils/parse-boolean.d.ts.map +0 -1
  339. package/lib/utils/parse-boolean.js +0 -58
  340. package/lib/utils/parse-boolean.js.map +0 -1
  341. package/lib/utils/positioning.d.ts.map +0 -1
  342. package/lib/utils/positioning.js.map +0 -1
  343. package/lib/utils/property-capture.d.ts.map +0 -1
  344. package/lib/utils/property-capture.js.map +0 -1
  345. package/lib/utils/property-manager.d.ts.map +0 -1
  346. package/lib/utils/property-manager.js.map +0 -1
  347. package/lib/utils/resize-observer.d.ts.map +0 -1
  348. package/lib/utils/resize-observer.js.map +0 -1
  349. package/lib/utils/scroll-lock.d.ts.map +0 -1
  350. package/lib/utils/scroll-lock.js.map +0 -1
  351. package/lib/utils/styles.d.ts.map +0 -1
  352. package/lib/utils/styles.js.map +0 -1
  353. package/lib/version.d.ts.map +0 -1
  354. package/lib/version.js.map +0 -1
@@ -1,89 +1,31 @@
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
2
  if (!Number.isInteger(month) || month < 1 || month > 12) {
32
3
  throw new RangeError(`Invalid month: ${month}. Must be an integer between 1 and 12.`);
33
4
  }
34
5
  }
35
- /**
36
- * Validate year value (reasonable range)
37
- */
38
6
  function validateYear(year) {
39
7
  if (!Number.isInteger(year) || year < 1 || year > 9999) {
40
8
  throw new RangeError(`Invalid year: ${year}. Must be an integer between 1 and 9999.`);
41
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
12
  return date1.getFullYear() === date2.getFullYear()
52
13
  && date1.getMonth() === date2.getMonth()
53
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
20
  const now = new Date();
68
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
24
  const year = date.getFullYear();
81
- const month = date.getMonth() + 1; // Convert to 1-based
25
+ const month = date.getMonth() + 1;
82
26
  const dayInMonth = date.getDate();
83
- const dayOfWeek = date.getDay(); // 0 = Sunday, 6 = Saturday
84
- // Check if this day is from a different month
27
+ const dayOfWeek = date.getDay();
85
28
  const isOtherMonth = year !== targetYear || month !== targetMonth;
86
- // Determine if previous or next month
87
29
  let isPrevMonth = false;
88
30
  let isNextMonth = false;
89
31
  if (isOtherMonth) {
@@ -94,16 +36,11 @@ function createDayContext(date, targetYear, targetMonth, selection) {
94
36
  isNextMonth = true;
95
37
  }
96
38
  }
97
- // Check if today (compare dates at midnight for consistency)
98
39
  const todayMidnight = getTodayMidnight();
99
40
  const isToday = isSameDay(date, todayMidnight);
100
- // Check if this day is selected
101
41
  const isSelected = selection?.year === year
102
42
  && selection?.month === month
103
43
  && 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
44
  const utcValue = Date.UTC(year, month - 1, dayInMonth, 0, 0, 0, 0);
108
45
  const localValue = date.getTime();
109
46
  return {
@@ -123,64 +60,23 @@ function createDayContext(date, targetYear, targetMonth, selection) {
123
60
  selectedDay: selection?.day,
124
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
- // ...
64
+ const dayOfWeek = date.getDay();
140
65
  const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
141
- // Create new date at Monday midnight
142
66
  const monday = new Date(date);
143
67
  monday.setDate(date.getDate() - daysToMonday);
144
- monday.setHours(0, 0, 0, 0); // Ensure midnight
68
+ monday.setHours(0, 0, 0, 0);
145
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
72
  const firstDay = createMidnightDate(year, month, 1);
158
- // Get the Monday of that week
159
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
76
  const result = new Date(date);
171
77
  result.setDate(result.getDate() + days);
172
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
81
  const days = [];
186
82
  for (let i = 0; i < count; i++) {
@@ -189,94 +85,28 @@ function generateDays(startDate, count, targetYear, targetMonth, selection) {
189
85
  }
190
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
89
  validateYear(year);
217
90
  validateMonth(month);
218
91
  const startDate = getMonthGridStart(year, month);
219
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
95
  const formatter = new Intl.DateTimeFormat(locale, { weekday: style });
240
- // Create a Sunday (base date) - January 7, 2024 is a Sunday
241
96
  const sunday = new Date(2024, 0, 7);
242
- // Generate Sunday-first array: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
243
97
  const sundayFirst = Array.from({ length: 7 }, (_, i) => {
244
98
  const date = addDays(sunday, i);
245
99
  return formatter.format(date);
246
100
  });
247
- // Reorder to Monday-first: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]
248
101
  const [firstDay, ...rest] = sundayFirst;
249
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
105
  validateMonth(month);
266
106
  const date = new Date(2024, month - 1, 1);
267
107
  const formatter = new Intl.DateTimeFormat(locale, { month: style });
268
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
111
  const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})$/);
282
112
  if (!match)
@@ -284,18 +114,15 @@ export function parseISODate(isoString) {
284
114
  const year = parseInt(match[1], 10);
285
115
  const month = parseInt(match[2], 10);
286
116
  const day = parseInt(match[3], 10);
287
- // Validate ranges
288
117
  if (year < 1 || year > 9999)
289
118
  return null;
290
119
  if (month < 1 || month > 12)
291
120
  return null;
292
121
  if (day < 1 || day > 31)
293
122
  return null;
294
- // Check if date is valid (handles Feb 30, etc.)
295
123
  const date = new Date(year, month - 1, day);
296
124
  if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
297
125
  return null;
298
126
  }
299
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
@@ -1,40 +1,12 @@
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)
21
- */
22
- /**
23
- * Check if custom scrollbar is enabled globally.
24
- * Default: true (custom scrollbar on).
25
- * Set data-ty-scrollbar="native" on <html> to opt out.
26
- */
27
1
  export function isCustomScrollbarEnabled() {
28
2
  return document.documentElement.getAttribute('data-ty-scrollbar') !== 'native';
29
3
  }
30
4
  export class CustomScrollbar {
31
5
  constructor(scrollEl, options = {}) {
32
- // Elements
33
6
  this.trackY = null;
34
7
  this.thumbY = null;
35
8
  this.trackX = null;
36
9
  this.thumbX = null;
37
- // State
38
10
  this._isDragging = false;
39
11
  this._dragAxis = 'y';
40
12
  this._dragStartPos = 0;
@@ -43,10 +15,9 @@ export class CustomScrollbar {
43
15
  this._hideTimeout = null;
44
16
  this._resizeObserver = null;
45
17
  this._scrollEl = scrollEl;
46
- this._vertical = options.vertical !== false; // default true
18
+ this._vertical = options.vertical !== false;
47
19
  this._horizontal = options.horizontal ?? false;
48
20
  this._autoHideDelay = options.autoHideDelay ?? 1000;
49
- // Bind handlers
50
21
  this._onScroll = this._handleScroll.bind(this);
51
22
  this._onThumbYDown = this._handleThumbYDown.bind(this);
52
23
  this._onThumbXDown = this._handleThumbXDown.bind(this);
@@ -54,7 +25,6 @@ export class CustomScrollbar {
54
25
  this._onTrackXDown = this._handleTrackXDown.bind(this);
55
26
  this._onDragMove = this._handleDragMove.bind(this);
56
27
  this._onDragEnd = this._handleDragEnd.bind(this);
57
- // Create elements
58
28
  if (this._vertical) {
59
29
  this.trackY = this._createTrack('y');
60
30
  this.thumbY = this._createThumb('y');
@@ -65,7 +35,6 @@ export class CustomScrollbar {
65
35
  this.thumbX = this._createThumb('x');
66
36
  this.trackX.appendChild(this.thumbX);
67
37
  }
68
- // Attach listeners
69
38
  this._scrollEl.addEventListener('scroll', this._onScroll, { passive: true });
70
39
  if (this.thumbY) {
71
40
  this.thumbY.addEventListener('pointerdown', this._onThumbYDown);
@@ -79,13 +48,10 @@ export class CustomScrollbar {
79
48
  if (this.trackX) {
80
49
  this.trackX.addEventListener('pointerdown', this._onTrackXDown);
81
50
  }
82
- // ResizeObserver
83
51
  this._resizeObserver = new ResizeObserver(() => this.update());
84
52
  this._resizeObserver.observe(this._scrollEl);
85
- // Initial update
86
53
  this.update();
87
54
  }
88
- // ============ Element Creation ============
89
55
  _createTrack(axis) {
90
56
  const el = document.createElement('div');
91
57
  el.className = `ty-scrollbar-track-${axis}`;
@@ -96,13 +62,10 @@ export class CustomScrollbar {
96
62
  el.className = `ty-scrollbar-thumb-${axis}`;
97
63
  return el;
98
64
  }
99
- // ============ Public API ============
100
- /** Force update thumb size and position */
101
65
  update() {
102
66
  this._updateVertical();
103
67
  this._updateHorizontal();
104
68
  }
105
- /** Reset scroll position */
106
69
  scrollToTop(smooth = false) {
107
70
  this._scrollEl.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' });
108
71
  }
@@ -115,7 +78,6 @@ export class CustomScrollbar {
115
78
  scrollToRight(smooth = false) {
116
79
  this._scrollEl.scrollTo({ left: this._scrollEl.scrollWidth, behavior: smooth ? 'smooth' : 'auto' });
117
80
  }
118
- /** Cleanup all listeners and observers */
119
81
  destroy() {
120
82
  this._scrollEl.removeEventListener('scroll', this._onScroll);
121
83
  if (this.thumbY) {
@@ -143,7 +105,6 @@ export class CustomScrollbar {
143
105
  this._hideTimeout = null;
144
106
  }
145
107
  }
146
- // ============ Scroll Handler ============
147
108
  _handleScroll() {
148
109
  if (this._rafId !== null)
149
110
  return;
@@ -153,7 +114,6 @@ export class CustomScrollbar {
153
114
  this._showScrollbars();
154
115
  });
155
116
  }
156
- // ============ Update Logic ============
157
117
  _updateVertical() {
158
118
  if (!this.trackY || !this.thumbY)
159
119
  return;
@@ -208,7 +168,6 @@ export class CustomScrollbar {
208
168
  const maxThumbLeft = trackWidth - thumbWidth;
209
169
  this.thumbX.style.left = `${scrollRatio * maxThumbLeft}px`;
210
170
  }
211
- // ============ Auto-hide ============
212
171
  _showScrollbars() {
213
172
  if (this._isDragging)
214
173
  return;
@@ -223,7 +182,6 @@ export class CustomScrollbar {
223
182
  this._hideTimeout = null;
224
183
  }, this._autoHideDelay);
225
184
  }
226
- // ============ Thumb Drag ============
227
185
  _handleThumbYDown(e) {
228
186
  if (e.button !== 0)
229
187
  return;
@@ -291,7 +249,6 @@ export class CustomScrollbar {
291
249
  thumb.removeEventListener('pointercancel', this._onDragEnd);
292
250
  this._showScrollbars();
293
251
  }
294
- // ============ Track Click ============
295
252
  _handleTrackYDown(e) {
296
253
  if (e.target === this.thumbY || e.button !== 0)
297
254
  return;
@@ -317,4 +274,3 @@ export class CustomScrollbar {
317
274
  });
318
275
  }
319
276
  }
320
- //# sourceMappingURL=custom-scrollbar.js.map
@@ -29,4 +29,3 @@ export interface CustomFlavorParts {
29
29
  * adopted into the shadow root. Returns the sheet to store for the next call.
30
30
  */
31
31
  export declare function syncCustomFlavorSheet(shadow: ShadowRoot, sheet: CSSStyleSheet | null, flavor: unknown, css: (parts: CustomFlavorParts) => string): CSSStyleSheet | null;
32
- //# sourceMappingURL=flavor-sheet.d.ts.map
@@ -1,26 +1,4 @@
1
- /**
2
- * Custom (non-built-in) flavor support.
3
- *
4
- * Built-in flavors get static per-flavor CSS in each component's stylesheet.
5
- * Any other flavor string is a custom flavor: the component generates the
6
- * same wiring at runtime, pointed at the user's design tokens
7
- * (--ty-color-X / --ty-bg-X / --ty-solid-X / ...), and adopts it as a
8
- * constructed stylesheet.
9
- *
10
- * Why an adopted sheet: render() implementations replace shadowRoot.innerHTML
11
- * (which would destroy an injected <style> element), and inline style on the
12
- * host would defeat page-level overrides. Adopted sheets survive renders, and
13
- * outer-document rules on the host still take precedence over :host rules —
14
- * so `ty-tag[flavor="X"] { --tag-bg: ... }` escape hatches keep working.
15
- */
16
1
  import { FLAVORS } from '../types/common.js';
17
- /**
18
- * Keep a shadow root's custom-flavor sheet in sync with the current flavor.
19
- *
20
- * Built-in flavors (and anything that isn't a plain identifier, so attribute
21
- * values can't inject CSS) remove the sheet. Custom flavors get `css(parts)`
22
- * adopted into the shadow root. Returns the sheet to store for the next call.
23
- */
24
2
  export function syncCustomFlavorSheet(shadow, sheet, flavor, css) {
25
3
  const full = String(flavor || '');
26
4
  const base = full.replace(/[+-]$/, '');
@@ -37,4 +15,3 @@ export function syncCustomFlavorSheet(shadow, sheet, flavor, css) {
37
15
  sheet.replaceSync(css({ flavor: full, base, shade: full.slice(base.length) }));
38
16
  return sheet;
39
17
  }
40
- //# sourceMappingURL=flavor-sheet.js.map
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Icon Registry System
3
3
  * Simple icon storage and retrieval with Cache API persistence
4
- * PORTED FROM: clj/ty/icons.cljs
5
4
  */
6
5
  /**
7
6
  * Read icon directly from cache (for immediate rendering)
@@ -62,4 +61,3 @@ export declare function getCacheInfo(): Promise<{
62
61
  available: boolean;
63
62
  iconCount?: number;
64
63
  }>;
65
- //# sourceMappingURL=icon-registry.d.ts.map