tyrell-components 1.0.0-TC7

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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/css/tyrell.css +1783 -0
  4. package/dist/tyrell.css +1783 -0
  5. package/dist/tyrell.js +2 -0
  6. package/lib/base/ty-component.d.ts +133 -0
  7. package/lib/base/ty-component.d.ts.map +1 -0
  8. package/lib/base/ty-component.js +297 -0
  9. package/lib/base/ty-component.js.map +1 -0
  10. package/lib/components/button.d.ts +126 -0
  11. package/lib/components/button.d.ts.map +1 -0
  12. package/lib/components/button.js +244 -0
  13. package/lib/components/button.js.map +1 -0
  14. package/lib/components/calendar-month.d.ts +132 -0
  15. package/lib/components/calendar-month.d.ts.map +1 -0
  16. package/lib/components/calendar-month.js +440 -0
  17. package/lib/components/calendar-month.js.map +1 -0
  18. package/lib/components/calendar-navigation.d.ts +137 -0
  19. package/lib/components/calendar-navigation.d.ts.map +1 -0
  20. package/lib/components/calendar-navigation.js +366 -0
  21. package/lib/components/calendar-navigation.js.map +1 -0
  22. package/lib/components/calendar.d.ts +166 -0
  23. package/lib/components/calendar.d.ts.map +1 -0
  24. package/lib/components/calendar.js +774 -0
  25. package/lib/components/calendar.js.map +1 -0
  26. package/lib/components/checkbox.d.ts +189 -0
  27. package/lib/components/checkbox.d.ts.map +1 -0
  28. package/lib/components/checkbox.js +400 -0
  29. package/lib/components/checkbox.js.map +1 -0
  30. package/lib/components/copy.d.ts +180 -0
  31. package/lib/components/copy.d.ts.map +1 -0
  32. package/lib/components/copy.js +393 -0
  33. package/lib/components/copy.js.map +1 -0
  34. package/lib/components/date-picker.d.ts +379 -0
  35. package/lib/components/date-picker.d.ts.map +1 -0
  36. package/lib/components/date-picker.js +1586 -0
  37. package/lib/components/date-picker.js.map +1 -0
  38. package/lib/components/dropdown.d.ts +402 -0
  39. package/lib/components/dropdown.d.ts.map +1 -0
  40. package/lib/components/dropdown.js +1564 -0
  41. package/lib/components/dropdown.js.map +1 -0
  42. package/lib/components/icon.d.ts +107 -0
  43. package/lib/components/icon.d.ts.map +1 -0
  44. package/lib/components/icon.js +230 -0
  45. package/lib/components/icon.js.map +1 -0
  46. package/lib/components/input.d.ts +270 -0
  47. package/lib/components/input.d.ts.map +1 -0
  48. package/lib/components/input.js +721 -0
  49. package/lib/components/input.js.map +1 -0
  50. package/lib/components/modal.d.ts +58 -0
  51. package/lib/components/modal.d.ts.map +1 -0
  52. package/lib/components/modal.js +473 -0
  53. package/lib/components/modal.js.map +1 -0
  54. package/lib/components/multiselect.d.ts +397 -0
  55. package/lib/components/multiselect.d.ts.map +1 -0
  56. package/lib/components/multiselect.js +1580 -0
  57. package/lib/components/multiselect.js.map +1 -0
  58. package/lib/components/option.d.ts +66 -0
  59. package/lib/components/option.d.ts.map +1 -0
  60. package/lib/components/option.js +314 -0
  61. package/lib/components/option.js.map +1 -0
  62. package/lib/components/popup.d.ts +43 -0
  63. package/lib/components/popup.d.ts.map +1 -0
  64. package/lib/components/popup.js +380 -0
  65. package/lib/components/popup.js.map +1 -0
  66. package/lib/components/radio.d.ts +198 -0
  67. package/lib/components/radio.d.ts.map +1 -0
  68. package/lib/components/radio.js +437 -0
  69. package/lib/components/radio.js.map +1 -0
  70. package/lib/components/resize-observer.d.ts +48 -0
  71. package/lib/components/resize-observer.d.ts.map +1 -0
  72. package/lib/components/resize-observer.js +108 -0
  73. package/lib/components/resize-observer.js.map +1 -0
  74. package/lib/components/scroll-container.d.ts +51 -0
  75. package/lib/components/scroll-container.d.ts.map +1 -0
  76. package/lib/components/scroll-container.js +239 -0
  77. package/lib/components/scroll-container.js.map +1 -0
  78. package/lib/components/step.d.ts +26 -0
  79. package/lib/components/step.d.ts.map +1 -0
  80. package/lib/components/step.js +75 -0
  81. package/lib/components/step.js.map +1 -0
  82. package/lib/components/switch.d.ts +111 -0
  83. package/lib/components/switch.d.ts.map +1 -0
  84. package/lib/components/switch.js +240 -0
  85. package/lib/components/switch.js.map +1 -0
  86. package/lib/components/tab.d.ts +23 -0
  87. package/lib/components/tab.d.ts.map +1 -0
  88. package/lib/components/tab.js +76 -0
  89. package/lib/components/tab.js.map +1 -0
  90. package/lib/components/tabs.d.ts +93 -0
  91. package/lib/components/tabs.d.ts.map +1 -0
  92. package/lib/components/tabs.js +653 -0
  93. package/lib/components/tabs.js.map +1 -0
  94. package/lib/components/tag.d.ts +144 -0
  95. package/lib/components/tag.d.ts.map +1 -0
  96. package/lib/components/tag.js +314 -0
  97. package/lib/components/tag.js.map +1 -0
  98. package/lib/components/textarea.d.ts +241 -0
  99. package/lib/components/textarea.d.ts.map +1 -0
  100. package/lib/components/textarea.js +585 -0
  101. package/lib/components/textarea.js.map +1 -0
  102. package/lib/components/tooltip.d.ts +40 -0
  103. package/lib/components/tooltip.d.ts.map +1 -0
  104. package/lib/components/tooltip.js +439 -0
  105. package/lib/components/tooltip.js.map +1 -0
  106. package/lib/components/wizard.d.ts +86 -0
  107. package/lib/components/wizard.d.ts.map +1 -0
  108. package/lib/components/wizard.js +636 -0
  109. package/lib/components/wizard.js.map +1 -0
  110. package/lib/icons/fontawesome/brands.d.ts +557 -0
  111. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  112. package/lib/icons/fontawesome/brands.js +557 -0
  113. package/lib/icons/fontawesome/brands.js.map +1 -0
  114. package/lib/icons/fontawesome/regular.d.ts +281 -0
  115. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  116. package/lib/icons/fontawesome/regular.js +281 -0
  117. package/lib/icons/fontawesome/regular.js.map +1 -0
  118. package/lib/icons/fontawesome/solid.d.ts +1992 -0
  119. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  120. package/lib/icons/fontawesome/solid.js +1992 -0
  121. package/lib/icons/fontawesome/solid.js.map +1 -0
  122. package/lib/icons/heroicons/micro.d.ts +324 -0
  123. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  124. package/lib/icons/heroicons/micro.js +1032 -0
  125. package/lib/icons/heroicons/micro.js.map +1 -0
  126. package/lib/icons/heroicons/mini.d.ts +332 -0
  127. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  128. package/lib/icons/heroicons/mini.js +1038 -0
  129. package/lib/icons/heroicons/mini.js.map +1 -0
  130. package/lib/icons/heroicons/outline.d.ts +332 -0
  131. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  132. package/lib/icons/heroicons/outline.js +993 -0
  133. package/lib/icons/heroicons/outline.js.map +1 -0
  134. package/lib/icons/heroicons/solid.d.ts +332 -0
  135. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  136. package/lib/icons/heroicons/solid.js +1063 -0
  137. package/lib/icons/heroicons/solid.js.map +1 -0
  138. package/lib/icons/lucide.d.ts +1872 -0
  139. package/lib/icons/lucide.d.ts.map +1 -0
  140. package/lib/icons/lucide.js +28212 -0
  141. package/lib/icons/lucide.js.map +1 -0
  142. package/lib/icons/material/filled.d.ts +2180 -0
  143. package/lib/icons/material/filled.d.ts.map +1 -0
  144. package/lib/icons/material/filled.js +14003 -0
  145. package/lib/icons/material/filled.js.map +1 -0
  146. package/lib/icons/material/outlined.d.ts +2142 -0
  147. package/lib/icons/material/outlined.d.ts.map +1 -0
  148. package/lib/icons/material/outlined.js +14545 -0
  149. package/lib/icons/material/outlined.js.map +1 -0
  150. package/lib/icons/material/round.d.ts +2147 -0
  151. package/lib/icons/material/round.d.ts.map +1 -0
  152. package/lib/icons/material/round.js +14779 -0
  153. package/lib/icons/material/round.js.map +1 -0
  154. package/lib/icons/material/sharp.d.ts +2147 -0
  155. package/lib/icons/material/sharp.d.ts.map +1 -0
  156. package/lib/icons/material/sharp.js +14189 -0
  157. package/lib/icons/material/sharp.js.map +1 -0
  158. package/lib/icons/material/two-tone.d.ts +2185 -0
  159. package/lib/icons/material/two-tone.d.ts.map +1 -0
  160. package/lib/icons/material/two-tone.js +17152 -0
  161. package/lib/icons/material/two-tone.js.map +1 -0
  162. package/lib/index.d.ts +78 -0
  163. package/lib/index.d.ts.map +1 -0
  164. package/lib/index.js +71 -0
  165. package/lib/index.js.map +1 -0
  166. package/lib/styles/button.d.ts +14 -0
  167. package/lib/styles/button.d.ts.map +1 -0
  168. package/lib/styles/button.js +457 -0
  169. package/lib/styles/button.js.map +1 -0
  170. package/lib/styles/calendar-month.d.ts +6 -0
  171. package/lib/styles/calendar-month.d.ts.map +1 -0
  172. package/lib/styles/calendar-month.js +229 -0
  173. package/lib/styles/calendar-month.js.map +1 -0
  174. package/lib/styles/calendar-navigation.d.ts +6 -0
  175. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  176. package/lib/styles/calendar-navigation.js +125 -0
  177. package/lib/styles/calendar-navigation.js.map +1 -0
  178. package/lib/styles/calendar.d.ts +6 -0
  179. package/lib/styles/calendar.d.ts.map +1 -0
  180. package/lib/styles/calendar.js +28 -0
  181. package/lib/styles/calendar.js.map +1 -0
  182. package/lib/styles/checkbox.d.ts +9 -0
  183. package/lib/styles/checkbox.d.ts.map +1 -0
  184. package/lib/styles/checkbox.js +19 -0
  185. package/lib/styles/checkbox.js.map +1 -0
  186. package/lib/styles/copy.d.ts +7 -0
  187. package/lib/styles/copy.d.ts.map +1 -0
  188. package/lib/styles/copy.js +94 -0
  189. package/lib/styles/copy.js.map +1 -0
  190. package/lib/styles/custom-scrollbar.d.ts +6 -0
  191. package/lib/styles/custom-scrollbar.d.ts.map +1 -0
  192. package/lib/styles/custom-scrollbar.js +157 -0
  193. package/lib/styles/custom-scrollbar.js.map +1 -0
  194. package/lib/styles/date-picker.d.ts +6 -0
  195. package/lib/styles/date-picker.d.ts.map +1 -0
  196. package/lib/styles/date-picker.js +400 -0
  197. package/lib/styles/date-picker.js.map +1 -0
  198. package/lib/styles/dropdown.d.ts +12 -0
  199. package/lib/styles/dropdown.d.ts.map +1 -0
  200. package/lib/styles/dropdown.js +983 -0
  201. package/lib/styles/dropdown.js.map +1 -0
  202. package/lib/styles/icon.d.ts +6 -0
  203. package/lib/styles/icon.d.ts.map +1 -0
  204. package/lib/styles/icon.js +231 -0
  205. package/lib/styles/icon.js.map +1 -0
  206. package/lib/styles/input.d.ts +7 -0
  207. package/lib/styles/input.d.ts.map +1 -0
  208. package/lib/styles/input.js +685 -0
  209. package/lib/styles/input.js.map +1 -0
  210. package/lib/styles/modal.d.ts +8 -0
  211. package/lib/styles/modal.d.ts.map +1 -0
  212. package/lib/styles/modal.js +134 -0
  213. package/lib/styles/modal.js.map +1 -0
  214. package/lib/styles/multiselect.d.ts +6 -0
  215. package/lib/styles/multiselect.d.ts.map +1 -0
  216. package/lib/styles/multiselect.js +774 -0
  217. package/lib/styles/multiselect.js.map +1 -0
  218. package/lib/styles/option.d.ts +6 -0
  219. package/lib/styles/option.d.ts.map +1 -0
  220. package/lib/styles/option.js +116 -0
  221. package/lib/styles/option.js.map +1 -0
  222. package/lib/styles/popup.d.ts +8 -0
  223. package/lib/styles/popup.d.ts.map +1 -0
  224. package/lib/styles/popup.js +95 -0
  225. package/lib/styles/popup.js.map +1 -0
  226. package/lib/styles/radio.d.ts +8 -0
  227. package/lib/styles/radio.d.ts.map +1 -0
  228. package/lib/styles/radio.js +160 -0
  229. package/lib/styles/radio.js.map +1 -0
  230. package/lib/styles/resize-observer.d.ts +6 -0
  231. package/lib/styles/resize-observer.d.ts.map +1 -0
  232. package/lib/styles/resize-observer.js +18 -0
  233. package/lib/styles/resize-observer.js.map +1 -0
  234. package/lib/styles/scroll-container.d.ts +6 -0
  235. package/lib/styles/scroll-container.d.ts.map +1 -0
  236. package/lib/styles/scroll-container.js +198 -0
  237. package/lib/styles/scroll-container.js.map +1 -0
  238. package/lib/styles/step.d.ts +5 -0
  239. package/lib/styles/step.d.ts.map +1 -0
  240. package/lib/styles/step.js +50 -0
  241. package/lib/styles/step.js.map +1 -0
  242. package/lib/styles/switch.d.ts +9 -0
  243. package/lib/styles/switch.d.ts.map +1 -0
  244. package/lib/styles/switch.js +100 -0
  245. package/lib/styles/switch.js.map +1 -0
  246. package/lib/styles/tab.d.ts +5 -0
  247. package/lib/styles/tab.d.ts.map +1 -0
  248. package/lib/styles/tab.js +51 -0
  249. package/lib/styles/tab.js.map +1 -0
  250. package/lib/styles/tabs.d.ts +13 -0
  251. package/lib/styles/tabs.d.ts.map +1 -0
  252. package/lib/styles/tabs.js +184 -0
  253. package/lib/styles/tabs.js.map +1 -0
  254. package/lib/styles/tag.d.ts +6 -0
  255. package/lib/styles/tag.d.ts.map +1 -0
  256. package/lib/styles/tag.js +415 -0
  257. package/lib/styles/tag.js.map +1 -0
  258. package/lib/styles/textarea.d.ts +6 -0
  259. package/lib/styles/textarea.d.ts.map +1 -0
  260. package/lib/styles/textarea.js +350 -0
  261. package/lib/styles/textarea.js.map +1 -0
  262. package/lib/styles/tooltip.d.ts +9 -0
  263. package/lib/styles/tooltip.d.ts.map +1 -0
  264. package/lib/styles/tooltip.js +136 -0
  265. package/lib/styles/tooltip.js.map +1 -0
  266. package/lib/styles/wizard.d.ts +25 -0
  267. package/lib/styles/wizard.d.ts.map +1 -0
  268. package/lib/styles/wizard.js +325 -0
  269. package/lib/styles/wizard.js.map +1 -0
  270. package/lib/types/common.d.ts +143 -0
  271. package/lib/types/common.d.ts.map +1 -0
  272. package/lib/types/common.js +5 -0
  273. package/lib/types/common.js.map +1 -0
  274. package/lib/utils/calendar-utils.d.ts +176 -0
  275. package/lib/utils/calendar-utils.d.ts.map +1 -0
  276. package/lib/utils/calendar-utils.js +370 -0
  277. package/lib/utils/calendar-utils.js.map +1 -0
  278. package/lib/utils/custom-scrollbar.d.ts +82 -0
  279. package/lib/utils/custom-scrollbar.d.ts.map +1 -0
  280. package/lib/utils/custom-scrollbar.js +320 -0
  281. package/lib/utils/custom-scrollbar.js.map +1 -0
  282. package/lib/utils/icon-registry.d.ts +78 -0
  283. package/lib/utils/icon-registry.d.ts.map +1 -0
  284. package/lib/utils/icon-registry.js +304 -0
  285. package/lib/utils/icon-registry.js.map +1 -0
  286. package/lib/utils/locale.d.ts +136 -0
  287. package/lib/utils/locale.d.ts.map +1 -0
  288. package/lib/utils/locale.js +213 -0
  289. package/lib/utils/locale.js.map +1 -0
  290. package/lib/utils/mobile.d.ts +14 -0
  291. package/lib/utils/mobile.d.ts.map +1 -0
  292. package/lib/utils/mobile.js +21 -0
  293. package/lib/utils/mobile.js.map +1 -0
  294. package/lib/utils/number-format.d.ts +83 -0
  295. package/lib/utils/number-format.d.ts.map +1 -0
  296. package/lib/utils/number-format.js +143 -0
  297. package/lib/utils/number-format.js.map +1 -0
  298. package/lib/utils/parse-boolean.d.ts +39 -0
  299. package/lib/utils/parse-boolean.d.ts.map +1 -0
  300. package/lib/utils/parse-boolean.js +58 -0
  301. package/lib/utils/parse-boolean.js.map +1 -0
  302. package/lib/utils/positioning.d.ts +143 -0
  303. package/lib/utils/positioning.d.ts.map +1 -0
  304. package/lib/utils/positioning.js +308 -0
  305. package/lib/utils/positioning.js.map +1 -0
  306. package/lib/utils/property-capture.d.ts +132 -0
  307. package/lib/utils/property-capture.d.ts.map +1 -0
  308. package/lib/utils/property-capture.js +152 -0
  309. package/lib/utils/property-capture.js.map +1 -0
  310. package/lib/utils/property-manager.d.ts +90 -0
  311. package/lib/utils/property-manager.d.ts.map +1 -0
  312. package/lib/utils/property-manager.js +197 -0
  313. package/lib/utils/property-manager.js.map +1 -0
  314. package/lib/utils/resize-observer.d.ts +42 -0
  315. package/lib/utils/resize-observer.d.ts.map +1 -0
  316. package/lib/utils/resize-observer.js +71 -0
  317. package/lib/utils/resize-observer.js.map +1 -0
  318. package/lib/utils/scroll-lock.d.ts +79 -0
  319. package/lib/utils/scroll-lock.d.ts.map +1 -0
  320. package/lib/utils/scroll-lock.js +197 -0
  321. package/lib/utils/scroll-lock.js.map +1 -0
  322. package/lib/utils/styles.d.ts +27 -0
  323. package/lib/utils/styles.d.ts.map +1 -0
  324. package/lib/utils/styles.js +53 -0
  325. package/lib/utils/styles.js.map +1 -0
  326. package/lib/version.d.ts +8 -0
  327. package/lib/version.d.ts.map +1 -0
  328. package/lib/version.js +11 -0
  329. package/lib/version.js.map +1 -0
  330. package/package.json +159 -0
@@ -0,0 +1,440 @@
1
+ /**
2
+ * TyCalendarMonth Web Component
3
+ * PORTED FROM: cljs/ty/components/calendar_month.cljs
4
+ *
5
+ * A stateless, property-driven calendar month renderer with customizable
6
+ * day content and styling.
7
+ *
8
+ * Features:
9
+ * - 42-day grid (6 weeks × 7 days) with Monday-first ordering
10
+ * - Localized weekday headers
11
+ * - Custom day content rendering via dayContentFn
12
+ * - Custom day classes via dayClassesFn
13
+ * - Custom CSS injection via customCSS
14
+ * - Responsive width system (width, minWidth, maxWidth)
15
+ * - Rich day-click events with full context
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <!-- Basic usage -->
20
+ * <ty-calendar-month
21
+ * display-year="2025"
22
+ * display-month="10"
23
+ * locale="en-US">
24
+ * </ty-calendar-month>
25
+ *
26
+ * <!-- With custom rendering -->
27
+ * <ty-calendar-month id="custom"></ty-calendar-month>
28
+ * <script type="module">
29
+ * const cal = document.getElementById('custom');
30
+ * cal.dayContentFn = (ctx) => {
31
+ * const el = document.createElement('div');
32
+ * el.textContent = ctx.dayInMonth;
33
+ * return el;
34
+ * };
35
+ * </script>
36
+ * ```
37
+ */
38
+ import { ensureStyles } from '../utils/styles.js';
39
+ import { calendarMonthStyles } from '../styles/calendar-month.js';
40
+ import { getCalendarMonthDays, getLocalizedWeekdays } from '../utils/calendar-utils.js';
41
+ import { getEffectiveLocale, observeLocaleChanges } from '../utils/locale.js';
42
+ // ============================================================================
43
+ // Default Render Functions
44
+ // ============================================================================
45
+ /**
46
+ * Default day content renderer - just the day number
47
+ */
48
+ function defaultDayContent(dayContext) {
49
+ return dayContext.dayInMonth.toString();
50
+ }
51
+ /**
52
+ * Default day classes based on day context
53
+ */
54
+ function getDefaultDayClasses(dayContext) {
55
+ const classes = ['calendar-day'];
56
+ if (dayContext.today)
57
+ classes.push('today');
58
+ if (dayContext.weekend)
59
+ classes.push('weekend');
60
+ if (dayContext.otherMonth)
61
+ classes.push('other-month');
62
+ if (dayContext.isSelected)
63
+ classes.push('selected');
64
+ return classes;
65
+ }
66
+ // ============================================================================
67
+ // Helper Functions
68
+ // ============================================================================
69
+ /**
70
+ * Check if value is a DOM element
71
+ */
72
+ function isDOMElement(value) {
73
+ return value instanceof HTMLElement;
74
+ }
75
+ /**
76
+ * Normalize size value - add 'px' if just a number
77
+ */
78
+ function normalizeSizeValue(value) {
79
+ if (!value || value === '')
80
+ return null;
81
+ const strValue = String(value);
82
+ // If it's just a number, add 'px'
83
+ if (/^\d+(\.\d+)?$/.test(strValue)) {
84
+ return `${strValue}px`;
85
+ }
86
+ // Otherwise use as-is (supports %, rem, vw, etc.)
87
+ return strValue;
88
+ }
89
+ // ============================================================================
90
+ // Component Implementation
91
+ // ============================================================================
92
+ /**
93
+ * TyCalendarMonth Web Component
94
+ */
95
+ export class TyCalendarMonth extends HTMLElement {
96
+ /**
97
+ * Observed attributes (minimal - mainly for debugging)
98
+ * Properties are the primary API
99
+ */
100
+ static get observedAttributes() {
101
+ return ['locale', 'size'];
102
+ }
103
+ constructor() {
104
+ super();
105
+ this._locale = 'en-US';
106
+ this._size = 'md';
107
+ // Initialize with current date
108
+ const today = new Date();
109
+ this._displayYear = today.getFullYear();
110
+ this._displayMonth = today.getMonth() + 1; // 1-based month
111
+ this.attachShadow({ mode: 'open' });
112
+ }
113
+ // ==========================================================================
114
+ // Lifecycle Methods
115
+ // ==========================================================================
116
+ connectedCallback() {
117
+ // Set defaults if not already set
118
+ if (!this._displayMonth) {
119
+ this._displayMonth = new Date().getMonth() + 1;
120
+ }
121
+ if (!this._displayYear) {
122
+ this._displayYear = new Date().getFullYear();
123
+ }
124
+ if (!this._locale) {
125
+ this._locale = this.getAttribute('locale') || 'en-US';
126
+ }
127
+ // Read size attribute if present
128
+ const sizeAttr = this.getAttribute('size');
129
+ if (sizeAttr && (sizeAttr === 'sm' || sizeAttr === 'md' || sizeAttr === 'lg')) {
130
+ this._size = sizeAttr;
131
+ }
132
+ // Check for dayContentFn set before upgrade
133
+ const plainDayContentFn = this.dayContentFn;
134
+ if (plainDayContentFn && !this._dayContentFn) {
135
+ this._dayContentFn = plainDayContentFn;
136
+ delete this.dayContentFn; // Clean up plain property
137
+ }
138
+ // Check for customCSS set before upgrade
139
+ const plainCustomCSS = this.customCSS;
140
+ if (plainCustomCSS && !this._customCSS) {
141
+ this._customCSS = plainCustomCSS;
142
+ delete this.customCSS; // Clean up plain property
143
+ }
144
+ // Setup locale observer to watch for ancestor lang changes
145
+ this._localeObserver = observeLocaleChanges(this, () => {
146
+ this.render();
147
+ });
148
+ this.render();
149
+ }
150
+ disconnectedCallback() {
151
+ // Cleanup locale observer
152
+ if (this._localeObserver) {
153
+ this._localeObserver();
154
+ this._localeObserver = undefined;
155
+ }
156
+ }
157
+ attributeChangedCallback(name, _oldValue, newValue) {
158
+ if (name === 'locale') {
159
+ this._locale = newValue || 'en-US';
160
+ this.render();
161
+ }
162
+ else if (name === 'size') {
163
+ if (newValue === 'sm' || newValue === 'md' || newValue === 'lg') {
164
+ this._size = newValue;
165
+ this.render();
166
+ }
167
+ }
168
+ }
169
+ // ==========================================================================
170
+ // Property Getters/Setters
171
+ // ==========================================================================
172
+ get displayYear() {
173
+ return this._displayYear;
174
+ }
175
+ set displayYear(value) {
176
+ if (this._displayYear !== value) {
177
+ this._displayYear = value;
178
+ this.render();
179
+ }
180
+ }
181
+ get displayMonth() {
182
+ return this._displayMonth;
183
+ }
184
+ set displayMonth(value) {
185
+ if (this._displayMonth !== value) {
186
+ this._displayMonth = value;
187
+ this.render();
188
+ }
189
+ }
190
+ get locale() {
191
+ return getEffectiveLocale(this, this.getAttribute('locale'));
192
+ }
193
+ set locale(value) {
194
+ if (this._locale !== value) {
195
+ this._locale = value;
196
+ this.render();
197
+ }
198
+ }
199
+ get size() {
200
+ return this._size;
201
+ }
202
+ set size(value) {
203
+ if (this._size !== value) {
204
+ this._size = value;
205
+ this.render();
206
+ }
207
+ }
208
+ get width() {
209
+ return this._width;
210
+ }
211
+ set width(value) {
212
+ if (this._width !== value) {
213
+ this._width = value;
214
+ this.applyWidthProperties();
215
+ }
216
+ }
217
+ get minWidth() {
218
+ return this._minWidth;
219
+ }
220
+ set minWidth(value) {
221
+ if (this._minWidth !== value) {
222
+ this._minWidth = value;
223
+ this.applyWidthProperties();
224
+ }
225
+ }
226
+ get maxWidth() {
227
+ return this._maxWidth;
228
+ }
229
+ set maxWidth(value) {
230
+ if (this._maxWidth !== value) {
231
+ this._maxWidth = value;
232
+ this.applyWidthProperties();
233
+ }
234
+ }
235
+ get dayContentFn() {
236
+ return this._dayContentFn;
237
+ }
238
+ set dayContentFn(fn) {
239
+ if (this._dayContentFn !== fn) {
240
+ this._dayContentFn = fn;
241
+ this.render();
242
+ }
243
+ }
244
+ get customCSS() {
245
+ return this._customCSS;
246
+ }
247
+ set customCSS(sheet) {
248
+ if (this._customCSS !== sheet) {
249
+ this._customCSS = sheet;
250
+ this.applyCustomCSS();
251
+ }
252
+ }
253
+ get value() {
254
+ return this._value;
255
+ }
256
+ set value(timestamp) {
257
+ const newValue = timestamp ?? undefined;
258
+ if (this._value !== newValue) {
259
+ this._value = newValue;
260
+ this.render();
261
+ }
262
+ }
263
+ // ==========================================================================
264
+ // Width Property System
265
+ // ==========================================================================
266
+ /**
267
+ * Apply width-related properties as CSS custom properties
268
+ */
269
+ applyWidthProperties() {
270
+ const normalizedWidth = normalizeSizeValue(this._width);
271
+ const normalizedMinWidth = normalizeSizeValue(this._minWidth);
272
+ const normalizedMaxWidth = normalizeSizeValue(this._maxWidth);
273
+ if (normalizedWidth) {
274
+ this.style.setProperty('--calendar-width', normalizedWidth);
275
+ }
276
+ else {
277
+ this.style.removeProperty('--calendar-width');
278
+ }
279
+ if (normalizedMinWidth) {
280
+ this.style.setProperty('--calendar-min-width', normalizedMinWidth);
281
+ }
282
+ else {
283
+ this.style.removeProperty('--calendar-min-width');
284
+ }
285
+ if (normalizedMaxWidth) {
286
+ this.style.setProperty('--calendar-max-width', normalizedMaxWidth);
287
+ }
288
+ else {
289
+ this.style.removeProperty('--calendar-max-width');
290
+ }
291
+ }
292
+ /**
293
+ * Apply custom CSS to shadow root
294
+ */
295
+ applyCustomCSS() {
296
+ if (!this._customCSS || !this.shadowRoot)
297
+ return;
298
+ const existing = this.shadowRoot.adoptedStyleSheets;
299
+ if (!existing.includes(this._customCSS)) {
300
+ this.shadowRoot.adoptedStyleSheets = [...existing, this._customCSS];
301
+ }
302
+ }
303
+ // ==========================================================================
304
+ // Public Methods
305
+ // ==========================================================================
306
+ /**
307
+ * Force re-render of the calendar month
308
+ * Useful when external data changes (e.g., async event loading)
309
+ */
310
+ refresh() {
311
+ this.render();
312
+ }
313
+ // ==========================================================================
314
+ // Event Dispatching
315
+ // ==========================================================================
316
+ /**
317
+ * Dispatch day-click custom event with day context
318
+ */
319
+ dispatchDayClick(dayContext, domEvent) {
320
+ const detail = {
321
+ dayContext,
322
+ value: dayContext.value,
323
+ year: dayContext.year,
324
+ month: dayContext.month,
325
+ day: dayContext.dayInMonth,
326
+ isHoliday: dayContext.holiday,
327
+ isToday: dayContext.today,
328
+ isWeekend: dayContext.weekend,
329
+ isOtherMonth: dayContext.otherMonth,
330
+ };
331
+ // Dispatch both 'day-click' and 'day-select' (alias)
332
+ for (const eventType of ['day-click', 'day-select']) {
333
+ const event = new CustomEvent(eventType, {
334
+ detail,
335
+ bubbles: true,
336
+ cancelable: true,
337
+ });
338
+ this.dispatchEvent(event);
339
+ }
340
+ }
341
+ // ==========================================================================
342
+ // Rendering
343
+ // ==========================================================================
344
+ /**
345
+ * Render a single day cell
346
+ */
347
+ renderDayCell(dayContext) {
348
+ const dayElement = document.createElement('div');
349
+ // Get content using custom or default function
350
+ const content = this._dayContentFn
351
+ ? this._dayContentFn(dayContext)
352
+ : defaultDayContent(dayContext);
353
+ // STRICT DOM-ONLY CHECK for custom functions
354
+ if (this._dayContentFn && content && !isDOMElement(content) && typeof content !== 'string') {
355
+ throw new Error(`Custom dayContentFn must return a DOM element or string, got: ${typeof content}. ` +
356
+ `Use document.createElement() to create DOM elements.`);
357
+ }
358
+ // Apply default classes
359
+ const classes = getDefaultDayClasses(dayContext);
360
+ dayElement.className = classes.join(' ');
361
+ // Set content
362
+ if (typeof content === 'string') {
363
+ dayElement.textContent = content;
364
+ }
365
+ else if (isDOMElement(content)) {
366
+ dayElement.appendChild(content);
367
+ }
368
+ // Add click handler
369
+ dayElement.addEventListener('pointerdown', (event) => {
370
+ event.preventDefault();
371
+ this.dispatchDayClick(dayContext, event);
372
+ });
373
+ return dayElement;
374
+ }
375
+ /**
376
+ * Main render function - property-based approach
377
+ */
378
+ render() {
379
+ const root = this.shadowRoot;
380
+ if (!root)
381
+ return;
382
+ // Ensure styles are loaded
383
+ ensureStyles(root, { css: calendarMonthStyles, id: 'ty-calendar-month' });
384
+ // Apply custom CSS if provided
385
+ this.applyCustomCSS();
386
+ // Apply width properties
387
+ this.applyWidthProperties();
388
+ // Convert timestamp to selection info
389
+ let selection;
390
+ if (this._value) {
391
+ const date = new Date(this._value);
392
+ selection = {
393
+ year: date.getFullYear(),
394
+ month: date.getMonth() + 1, // Convert to 1-based
395
+ day: date.getDate()
396
+ };
397
+ }
398
+ // Generate calendar days with selection info
399
+ const days = getCalendarMonthDays(this._displayYear, this._displayMonth, selection);
400
+ // Get localized weekday names
401
+ const weekdays = getLocalizedWeekdays(this._locale, 'short');
402
+ // Clear and rebuild
403
+ root.innerHTML = '';
404
+ // Create unified flex container
405
+ const calendarContainer = document.createElement('div');
406
+ calendarContainer.className = `calendar-flex-container calendar-size-${this._size}`;
407
+ // Create header row with weekday names
408
+ const headerRow = document.createElement('div');
409
+ headerRow.className = 'calendar-row calendar-header-row';
410
+ weekdays.forEach(weekday => {
411
+ const headerCell = document.createElement('div');
412
+ headerCell.className = 'calendar-cell calendar-header-cell';
413
+ headerCell.textContent = weekday;
414
+ headerRow.appendChild(headerCell);
415
+ });
416
+ calendarContainer.appendChild(headerRow);
417
+ // Create day rows (6 weeks of 7 days each)
418
+ const dayWeeks = [];
419
+ for (let i = 0; i < 42; i += 7) {
420
+ dayWeeks.push(days.slice(i, i + 7));
421
+ }
422
+ dayWeeks.forEach(week => {
423
+ const dayRow = document.createElement('div');
424
+ dayRow.className = 'calendar-row calendar-day-row';
425
+ week.forEach(dayContext => {
426
+ const dayCell = this.renderDayCell(dayContext);
427
+ // Add unified cell classes for flex layout
428
+ dayCell.className = `${dayCell.className} calendar-cell calendar-day-cell`;
429
+ dayRow.appendChild(dayCell);
430
+ });
431
+ calendarContainer.appendChild(dayRow);
432
+ });
433
+ root.appendChild(calendarContainer);
434
+ }
435
+ }
436
+ // Register the custom element
437
+ if (!customElements.get('ty-calendar-month')) {
438
+ customElements.define('ty-calendar-month', TyCalendarMonth);
439
+ }
440
+ //# sourceMappingURL=calendar-month.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-month.js","sourceRoot":"","sources":["../../src/components/calendar-month.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * TyCalendarNavigation Web Component
3
+ * PORTED FROM: cljs/ty/components/calendar_navigation.cljs
4
+ *
5
+ * A pure presentation component for calendar month/year navigation.
6
+ * Stateless - all state comes from properties, changes emitted via events.
7
+ *
8
+ * Features:
9
+ * - Year/Month navigation (prev/next month, prev/next year)
10
+ * - Localized month name display
11
+ * - Custom event emission on navigation
12
+ * - Property-driven API (no internal state)
13
+ * - Inline SVG icons
14
+ * - Shadow DOM encapsulation
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <!-- Basic usage -->
19
+ * <ty-calendar-navigation
20
+ * display-month="10"
21
+ * display-year="2025"
22
+ * locale="en-US">
23
+ * </ty-calendar-navigation>
24
+ *
25
+ * <!-- Listen for changes -->
26
+ * <script type="module">
27
+ * const nav = document.querySelector('ty-calendar-navigation');
28
+ * nav.addEventListener('change', (e) => {
29
+ * console.log('New month:', e.detail.month);
30
+ * console.log('New year:', e.detail.year);
31
+ * });
32
+ * </script>
33
+ * ```
34
+ */
35
+ import { TyComponent } from '../base/ty-component.js';
36
+ import type { PropertyChange } from '../utils/property-manager.js';
37
+ /**
38
+ * Navigation change event detail
39
+ */
40
+ export interface NavigationChangeDetail {
41
+ month: number;
42
+ year: number;
43
+ }
44
+ /**
45
+ * Internal navigation state (minimal - just for current display)
46
+ */
47
+ interface NavigationState {
48
+ displayMonth: number;
49
+ displayYear: number;
50
+ }
51
+ /**
52
+ * TyCalendarNavigation Web Component
53
+ */
54
+ export declare class TyCalendarNavigation extends TyComponent<NavigationState> {
55
+ protected static properties: {
56
+ 'display-month': {
57
+ type: "number";
58
+ visual: boolean;
59
+ default: () => number;
60
+ validate: (v: any) => boolean;
61
+ coerce: (v: any) => number;
62
+ };
63
+ 'display-year': {
64
+ type: "number";
65
+ visual: boolean;
66
+ default: () => number;
67
+ validate: (v: any) => boolean;
68
+ coerce: (v: any) => number;
69
+ };
70
+ locale: {
71
+ type: "string";
72
+ visual: boolean;
73
+ default: string;
74
+ };
75
+ size: {
76
+ type: "string";
77
+ visual: boolean;
78
+ default: string;
79
+ validate: (v: any) => boolean;
80
+ coerce: (v: any) => any;
81
+ };
82
+ width: {
83
+ type: "string";
84
+ visual: boolean;
85
+ default: string;
86
+ };
87
+ };
88
+ private _state;
89
+ private _localeObserver?;
90
+ constructor();
91
+ /**
92
+ * Called when component connects to DOM
93
+ */
94
+ protected onConnect(): void;
95
+ /**
96
+ * Called when component disconnects from DOM
97
+ */
98
+ protected onDisconnect(): void;
99
+ /**
100
+ * Called when properties change
101
+ * Update internal state BEFORE render
102
+ */
103
+ protected onPropertiesChanged(changes: PropertyChange[]): void;
104
+ get displayMonth(): number;
105
+ set displayMonth(value: number);
106
+ get displayYear(): number;
107
+ set displayYear(value: number);
108
+ get locale(): string;
109
+ set locale(value: string);
110
+ get size(): 'sm' | 'md' | 'lg';
111
+ set size(value: 'sm' | 'md' | 'lg');
112
+ get width(): string;
113
+ set width(value: string);
114
+ /**
115
+ * Emit change event with new month/year
116
+ */
117
+ private emitChangeEvent;
118
+ /**
119
+ * Navigate to previous/next month
120
+ * Handles year boundary crossing
121
+ */
122
+ private navigateMonth;
123
+ /**
124
+ * Navigate to previous/next year
125
+ */
126
+ private navigateYear;
127
+ /**
128
+ * Create navigation button
129
+ */
130
+ private createButton;
131
+ /**
132
+ * Main render function
133
+ */
134
+ protected render(): void;
135
+ }
136
+ export {};
137
+ //# sourceMappingURL=calendar-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-navigation.d.ts","sourceRoot":"","sources":["../../src/components/calendar-navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgDD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,WAAW,CAAC,eAAe,CAAC;IAIpE,SAAS,CAAC,MAAM,CAAC,UAAU;;;;;0BAMT,GAAG;wBAIL,GAAG;;;;;;0BAaD,GAAG;wBAIL,GAAG;;;;;;;;;;;0BAsBD,GAAG;wBACL,GAAG;;;;;;;MAejB;IAKF,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAC,CAAa;;IAqBrC;;OAEG;IACH,SAAS,CAAC,SAAS,IAAI,IAAI;IAc3B;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAQ9B;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAuB9D,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAE7B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAEvB;IAED,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAE7B;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAEjC;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAMD;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;CAyFzB"}