tyrell-components 1.0.0-RC6

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 +1552 -0
  41. package/lib/components/dropdown.js.map +1 -0
  42. package/lib/components/icon.d.ts +118 -0
  43. package/lib/components/icon.d.ts.map +1 -0
  44. package/lib/components/icon.js +245 -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 +316 -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 +275 -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 +143 -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 +435 -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 +241 -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 +420 -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,585 @@
1
+ /**
2
+ * ty-textarea - Enhanced textarea component with auto-resize functionality
3
+ *
4
+ * Features:
5
+ * - Auto-resize based on content
6
+ * - Form-associated custom element
7
+ * - Min/max height constraints
8
+ * - Size variants (xs, sm, md, lg, xl)
9
+ * - Validation states (error, required)
10
+ * - Manual resize control options
11
+ * - Accessibility support
12
+ *
13
+ * @example
14
+ * ```html
15
+ * <!-- Basic usage -->
16
+ * <ty-textarea label="Description" placeholder="Enter details..."></ty-textarea>
17
+ *
18
+ * <!-- With validation -->
19
+ * <ty-textarea
20
+ * label="Bio"
21
+ * required
22
+ * error="Bio is required"
23
+ * size="lg">
24
+ * </ty-textarea>
25
+ *
26
+ * <!-- With height constraints -->
27
+ * <ty-textarea
28
+ * min-height="100px"
29
+ * max-height="300px"
30
+ * placeholder="Auto-resizing textarea">
31
+ * </ty-textarea>
32
+ *
33
+ * <!-- Manual resize control -->
34
+ * <ty-textarea resize="vertical"></ty-textarea>
35
+ * ```
36
+ *
37
+ * @fires {CustomEvent<{value: string, originalEvent: Event}>} input - Emitted on input
38
+ * @fires {CustomEvent<{value: string, originalEvent: Event}>} change - Emitted on change
39
+ */
40
+ import { TyComponent } from '../base/ty-component.js';
41
+ import { ensureStyles } from '../utils/styles.js';
42
+ import { textareaStyles } from '../styles/textarea.js';
43
+ import { CustomScrollbar, isCustomScrollbarEnabled } from '../utils/custom-scrollbar.js';
44
+ import { customScrollbarStyles } from '../styles/custom-scrollbar.js';
45
+ /**
46
+ * Required icon SVG (matches input.ts)
47
+ */
48
+ const REQUIRED_ICON = `<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`;
49
+ export class TyTextarea extends TyComponent {
50
+ constructor() {
51
+ super(); // TyComponent handles attachInternals() and attachShadow()
52
+ // ============================================================================
53
+ // INTERNAL STATE - Not managed by PropertyManager
54
+ // NOTE: _internals provided by TyComponent base class
55
+ // ============================================================================
56
+ // DOM element references
57
+ this._textareaEl = null;
58
+ this._dummyEl = null;
59
+ this._scrollbar = null;
60
+ // Focus state
61
+ this._isFocused = false;
62
+ /**
63
+ * Handle textarea input event
64
+ */
65
+ this.handleInputEvent = (e) => {
66
+ const target = e.target;
67
+ const newValue = target.value;
68
+ // Update value via property (triggers proper lifecycle)
69
+ this.value = newValue;
70
+ // Trigger resize after state update
71
+ if (this._textareaEl && this._dummyEl) {
72
+ this.resizeTextarea(this._textareaEl, this._dummyEl);
73
+ }
74
+ // Emit custom events
75
+ this.emitValueEvents(e);
76
+ };
77
+ /**
78
+ * Handle textarea focus event
79
+ */
80
+ this.handleFocusEvent = () => {
81
+ this._isFocused = true;
82
+ };
83
+ /**
84
+ * Handle textarea blur event
85
+ */
86
+ this.handleBlurEvent = () => {
87
+ this._isFocused = false;
88
+ };
89
+ // Apply styles to shadow root
90
+ const shadow = this.shadowRoot;
91
+ ensureStyles(shadow, { css: textareaStyles, id: 'ty-textarea' });
92
+ // Add custom scrollbar styles
93
+ if (isCustomScrollbarEnabled()) {
94
+ ensureStyles(shadow, { css: customScrollbarStyles, id: 'ty-custom-scrollbar' });
95
+ }
96
+ }
97
+ // observedAttributes auto-generated by TyComponent from properties config
98
+ // ============================================================================
99
+ // TYCOMPONENT LIFECYCLE HOOKS
100
+ // ============================================================================
101
+ /**
102
+ * Called when component connects to DOM
103
+ * TyComponent already handled pre-connection property capture
104
+ */
105
+ onConnect() {
106
+ // No special initialization needed - TyComponent handles everything
107
+ // Just render the component
108
+ }
109
+ /**
110
+ * Called when component disconnects from DOM
111
+ */
112
+ onDisconnect() {
113
+ // Cleanup scrollbar
114
+ this._destroyScrollbar();
115
+ // Cleanup event listeners if needed
116
+ if (this._textareaEl) {
117
+ const newTextarea = this._textareaEl.cloneNode(true);
118
+ this._textareaEl.parentNode?.replaceChild(newTextarea, this._textareaEl);
119
+ this._textareaEl = null;
120
+ }
121
+ this._dummyEl = null;
122
+ }
123
+ /**
124
+ * Handle property changes - called BEFORE render
125
+ * This replaces the old attributeChangedCallback logic
126
+ */
127
+ onPropertiesChanged(changes) {
128
+ // No special handling needed for textarea
129
+ // All property changes will trigger render() automatically if marked as visual
130
+ }
131
+ /**
132
+ * Override form value to return current value
133
+ */
134
+ getFormValue() {
135
+ return this.getProperty('value') || null;
136
+ }
137
+ // ============================================================================
138
+ // PROPERTY ACCESSORS - Simplified with TyComponent
139
+ // ============================================================================
140
+ get value() { return this.getProperty('value'); }
141
+ set value(v) { this.setProperty('value', v); }
142
+ get name() { return this.getProperty('name'); }
143
+ set name(v) { this.setProperty('name', v); }
144
+ get placeholder() { return this.getProperty('placeholder'); }
145
+ set placeholder(v) { this.setProperty('placeholder', v); }
146
+ get label() { return this.getProperty('label'); }
147
+ set label(v) { this.setProperty('label', v); }
148
+ get disabled() { return this.getProperty('disabled'); }
149
+ set disabled(v) { this.setProperty('disabled', v); }
150
+ get required() { return this.getProperty('required'); }
151
+ set required(v) { this.setProperty('required', v); }
152
+ get error() { return this.getProperty('error'); }
153
+ set error(v) { this.setProperty('error', v); }
154
+ get size() {
155
+ return this.getProperty('size');
156
+ }
157
+ set size(v) {
158
+ this.setProperty('size', v);
159
+ }
160
+ get rows() { return this.getProperty('rows'); }
161
+ set rows(v) { this.setProperty('rows', v); }
162
+ get cols() { return this.getProperty('cols'); }
163
+ set cols(v) { this.setProperty('cols', v); }
164
+ get resize() {
165
+ return this.getProperty('resize');
166
+ }
167
+ set resize(v) {
168
+ this.setProperty('resize', v);
169
+ }
170
+ get minHeight() { return this.getProperty('minHeight'); }
171
+ set minHeight(v) { this.setProperty('minHeight', v); }
172
+ get maxHeight() { return this.getProperty('maxHeight'); }
173
+ set maxHeight(v) { this.setProperty('maxHeight', v); }
174
+ // ===== HELPER METHODS =====
175
+ /**
176
+ * Extract font-related CSS properties from element
177
+ */
178
+ getFontStyle(el) {
179
+ const computedStyle = window.getComputedStyle(el);
180
+ return {
181
+ fontFamily: computedStyle.fontFamily,
182
+ fontSize: computedStyle.fontSize,
183
+ fontWeight: computedStyle.fontWeight,
184
+ lineHeight: computedStyle.lineHeight,
185
+ letterSpacing: computedStyle.letterSpacing,
186
+ fontStyle: computedStyle.fontStyle
187
+ };
188
+ }
189
+ /**
190
+ * Extract spacing-related CSS properties from element
191
+ */
192
+ getSpacingStyle(el) {
193
+ const computedStyle = window.getComputedStyle(el);
194
+ return {
195
+ padding: computedStyle.padding,
196
+ paddingTop: computedStyle.paddingTop,
197
+ paddingRight: computedStyle.paddingRight,
198
+ paddingBottom: computedStyle.paddingBottom,
199
+ paddingLeft: computedStyle.paddingLeft,
200
+ margin: computedStyle.margin,
201
+ borderWidth: computedStyle.borderWidth
202
+ };
203
+ }
204
+ /**
205
+ * Setup the hidden dummy element for height measurement
206
+ */
207
+ setupDummyElement(textareaEl) {
208
+ const root = this.shadowRoot;
209
+ const existingDummy = root.querySelector('.textarea-dummy');
210
+ // Remove existing dummy if present
211
+ if (existingDummy) {
212
+ existingDummy.remove();
213
+ }
214
+ // Create new dummy element
215
+ const dummyEl = document.createElement('pre');
216
+ const fontStyle = this.getFontStyle(textareaEl);
217
+ const spacingStyle = this.getSpacingStyle(textareaEl);
218
+ // Set dummy element class
219
+ dummyEl.className = 'textarea-dummy';
220
+ // Apply styles to match textarea
221
+ const style = dummyEl.style;
222
+ style.position = 'absolute';
223
+ style.top = '0';
224
+ style.left = '0';
225
+ style.visibility = 'hidden';
226
+ style.whiteSpace = 'pre-wrap';
227
+ style.wordBreak = 'break-word';
228
+ style.boxSizing = 'border-box';
229
+ style.overflow = 'hidden';
230
+ style.pointerEvents = 'none';
231
+ // Apply font styles
232
+ Object.entries(fontStyle).forEach(([prop, value]) => {
233
+ ;
234
+ style[prop] = value;
235
+ });
236
+ // Apply spacing styles
237
+ Object.entries(spacingStyle).forEach(([prop, value]) => {
238
+ ;
239
+ style[prop] = value;
240
+ });
241
+ // Append to shadow root
242
+ root.appendChild(dummyEl);
243
+ this._dummyEl = dummyEl;
244
+ return dummyEl;
245
+ }
246
+ /**
247
+ * Resize textarea based on dummy element content with min/max height constraints
248
+ */
249
+ resizeTextarea(textareaEl, dummyEl) {
250
+ if (!textareaEl || !dummyEl)
251
+ return;
252
+ const value = this.value;
253
+ const placeholder = this.placeholder;
254
+ const content = (value === '' && placeholder) ? placeholder : value + ' ';
255
+ const currentHeight = textareaEl.clientHeight;
256
+ // Set dummy content
257
+ dummyEl.textContent = content;
258
+ // Set dummy width to match textarea
259
+ dummyEl.style.width = `${textareaEl.clientWidth}px`;
260
+ // Get measured height
261
+ const measuredHeight = dummyEl.scrollHeight;
262
+ // Parse min/max heights
263
+ const minHeight = this.minHeight ? parseInt(this.minHeight.replace('px', ''), 10) : null;
264
+ const maxHeight = this.maxHeight ? parseInt(this.maxHeight.replace('px', ''), 10) : null;
265
+ // Apply constraints
266
+ let constrainedHeight = measuredHeight;
267
+ if (minHeight !== null)
268
+ constrainedHeight = Math.max(constrainedHeight, minHeight);
269
+ if (maxHeight !== null)
270
+ constrainedHeight = Math.min(constrainedHeight, maxHeight);
271
+ // Only update if height changed significantly (avoid micro-adjustments)
272
+ if (Math.abs(constrainedHeight - currentHeight) > 2) {
273
+ textareaEl.style.height = `${constrainedHeight}px`;
274
+ // Set overflow based on whether we hit max-height
275
+ const needsScroll = maxHeight !== null && measuredHeight >= maxHeight;
276
+ if (needsScroll) {
277
+ textareaEl.style.overflowY = 'auto';
278
+ this._setupScrollbar(textareaEl);
279
+ }
280
+ else {
281
+ textareaEl.style.overflowY = 'hidden';
282
+ this._destroyScrollbar();
283
+ }
284
+ }
285
+ // Keep scrollbar thumb in sync after resize
286
+ this._scrollbar?.update();
287
+ }
288
+ // ============ Custom Scrollbar ============
289
+ _setupScrollbar(textareaEl) {
290
+ if (this._scrollbar || !isCustomScrollbarEnabled())
291
+ return;
292
+ // Hide native scrollbar (Firefox + Chrome/Safari via data attribute)
293
+ textareaEl.style.scrollbarWidth = 'none';
294
+ this.setAttribute('data-custom-scroll', '');
295
+ this._scrollbar = new CustomScrollbar(textareaEl, {
296
+ vertical: true,
297
+ horizontal: false
298
+ });
299
+ // Append track to the textarea wrapper (position: relative)
300
+ const wrapper = this.shadowRoot.querySelector('.textarea-wrapper');
301
+ if (wrapper && this._scrollbar.trackY) {
302
+ wrapper.appendChild(this._scrollbar.trackY);
303
+ }
304
+ }
305
+ _destroyScrollbar() {
306
+ if (!this._scrollbar)
307
+ return;
308
+ this._scrollbar.trackY?.remove();
309
+ this._scrollbar.destroy();
310
+ this._scrollbar = null;
311
+ // Restore native scrollbar
312
+ this.removeAttribute('data-custom-scroll');
313
+ if (this._textareaEl) {
314
+ this._textareaEl.style.scrollbarWidth = '';
315
+ }
316
+ }
317
+ /**
318
+ * Emit custom input and change events
319
+ */
320
+ emitValueEvents(originalEvent) {
321
+ const value = this.value;
322
+ // Update form internals
323
+ this._internals.setFormValue(value || '');
324
+ // Emit custom events
325
+ const data = {
326
+ bubbles: true,
327
+ composed: true,
328
+ detail: {
329
+ value,
330
+ originalEvent
331
+ }
332
+ };
333
+ // Use setTimeout to ensure these fire after standard events
334
+ setTimeout(() => {
335
+ this.dispatchEvent(new CustomEvent('input', data));
336
+ this.dispatchEvent(new CustomEvent('change', data));
337
+ }, 0);
338
+ }
339
+ /**
340
+ * Build class list for textarea element
341
+ */
342
+ buildClassList() {
343
+ const classes = [this.size];
344
+ if (this.disabled)
345
+ classes.push('disabled');
346
+ if (this.required)
347
+ classes.push('required');
348
+ if (this.error)
349
+ classes.push('error');
350
+ if (this.resize !== 'none')
351
+ classes.push(`resize-${this.resize}`);
352
+ const customClass = this.getAttribute('class');
353
+ if (customClass)
354
+ classes.push(customClass);
355
+ return classes.join(' ');
356
+ }
357
+ /**
358
+ * Apply min/max height constraints to textarea element
359
+ */
360
+ applyHeightConstraints(textareaEl) {
361
+ if (this.minHeight) {
362
+ textareaEl.style.minHeight = this.minHeight;
363
+ }
364
+ if (this.maxHeight) {
365
+ textareaEl.style.maxHeight = this.maxHeight;
366
+ }
367
+ }
368
+ /**
369
+ * Setup event listeners for textarea
370
+ */
371
+ setupTextareaEvents(textareaEl) {
372
+ textareaEl.addEventListener('input', this.handleInputEvent);
373
+ textareaEl.addEventListener('change', this.handleInputEvent);
374
+ textareaEl.addEventListener('focus', this.handleFocusEvent);
375
+ textareaEl.addEventListener('blur', this.handleBlurEvent);
376
+ }
377
+ // ===== RENDER =====
378
+ render() {
379
+ const root = this.shadowRoot;
380
+ const existingContainer = root.querySelector('.textarea-container');
381
+ const existingLabel = root.querySelector('label');
382
+ const existingTextarea = root.querySelector('textarea');
383
+ const existingError = root.querySelector('.error-message');
384
+ if (existingContainer && existingTextarea) {
385
+ // Update existing elements
386
+ // Update label
387
+ if (this.label) {
388
+ if (existingLabel) {
389
+ existingLabel.innerHTML = this.label +
390
+ (this.required ? ` <span class="required-icon">${REQUIRED_ICON}</span>` : '');
391
+ existingLabel.style.display = 'block';
392
+ }
393
+ }
394
+ else if (existingLabel) {
395
+ existingLabel.style.display = 'none';
396
+ }
397
+ // Update textarea
398
+ existingTextarea.value = this.value || '';
399
+ existingTextarea.placeholder = this.placeholder || '';
400
+ existingTextarea.disabled = this.disabled;
401
+ existingTextarea.required = this.required;
402
+ existingTextarea.className = this.buildClassList();
403
+ // Set name for form association
404
+ if (this.name) {
405
+ existingTextarea.setAttribute('name', this.name);
406
+ }
407
+ else {
408
+ existingTextarea.removeAttribute('name');
409
+ }
410
+ // Set rows/cols
411
+ if (this.rows)
412
+ existingTextarea.setAttribute('rows', this.rows);
413
+ if (this.cols)
414
+ existingTextarea.setAttribute('cols', this.cols);
415
+ // Apply height constraints
416
+ this.applyHeightConstraints(existingTextarea);
417
+ // Update error message
418
+ if (this.error) {
419
+ if (!existingError) {
420
+ const errorEl = document.createElement('div');
421
+ errorEl.className = 'error-message';
422
+ existingContainer.appendChild(errorEl);
423
+ }
424
+ const errorEl = root.querySelector('.error-message');
425
+ if (errorEl)
426
+ errorEl.textContent = this.error;
427
+ }
428
+ else if (existingError) {
429
+ existingError.remove();
430
+ }
431
+ // Setup dummy element and trigger resize
432
+ const dummyEl = this.setupDummyElement(existingTextarea);
433
+ setTimeout(() => this.resizeTextarea(existingTextarea, dummyEl), 0);
434
+ this._textareaEl = existingTextarea;
435
+ }
436
+ else {
437
+ // Create new structure
438
+ const container = document.createElement('div');
439
+ container.className = 'textarea-container';
440
+ const labelEl = document.createElement('label');
441
+ labelEl.className = 'textarea-label';
442
+ if (this.label) {
443
+ labelEl.innerHTML = this.label +
444
+ (this.required ? ` <span class="required-icon">${REQUIRED_ICON}</span>` : '');
445
+ labelEl.style.display = 'block';
446
+ }
447
+ else {
448
+ labelEl.style.display = 'none';
449
+ }
450
+ const textareaEl = document.createElement('textarea');
451
+ textareaEl.value = this.value || '';
452
+ textareaEl.placeholder = this.placeholder || '';
453
+ textareaEl.disabled = this.disabled;
454
+ textareaEl.required = this.required;
455
+ textareaEl.className = this.buildClassList();
456
+ // Set name for form association
457
+ if (this.name) {
458
+ textareaEl.setAttribute('name', this.name);
459
+ }
460
+ // Set default or specified rows/cols
461
+ textareaEl.setAttribute('rows', this.rows || '3');
462
+ if (this.cols)
463
+ textareaEl.setAttribute('cols', this.cols);
464
+ // Apply height constraints
465
+ this.applyHeightConstraints(textareaEl);
466
+ // Setup event listeners
467
+ this.setupTextareaEvents(textareaEl);
468
+ // Build structure — wrapper provides position context for custom scrollbar
469
+ const wrapperEl = document.createElement('div');
470
+ wrapperEl.className = 'textarea-wrapper';
471
+ wrapperEl.appendChild(textareaEl);
472
+ container.appendChild(labelEl);
473
+ container.appendChild(wrapperEl);
474
+ // Add error message if present
475
+ if (this.error) {
476
+ const errorEl = document.createElement('div');
477
+ errorEl.className = 'error-message';
478
+ errorEl.textContent = this.error;
479
+ container.appendChild(errorEl);
480
+ }
481
+ root.appendChild(container);
482
+ // Setup dummy element and trigger initial resize
483
+ const dummyEl = this.setupDummyElement(textareaEl);
484
+ setTimeout(() => this.resizeTextarea(textareaEl, dummyEl), 0);
485
+ this._textareaEl = textareaEl;
486
+ }
487
+ }
488
+ }
489
+ TyTextarea.formAssociated = true;
490
+ // ============================================================================
491
+ // PROPERTY CONFIGURATION - Declarative property lifecycle
492
+ // ============================================================================
493
+ TyTextarea.properties = {
494
+ // Core properties
495
+ value: {
496
+ type: 'string',
497
+ visual: true,
498
+ formValue: true,
499
+ emitChange: true,
500
+ default: ''
501
+ },
502
+ name: {
503
+ type: 'string',
504
+ default: ''
505
+ },
506
+ placeholder: {
507
+ type: 'string',
508
+ visual: true,
509
+ default: ''
510
+ },
511
+ label: {
512
+ type: 'string',
513
+ visual: true,
514
+ default: ''
515
+ },
516
+ disabled: {
517
+ type: 'boolean',
518
+ visual: true,
519
+ default: false
520
+ },
521
+ required: {
522
+ type: 'boolean',
523
+ visual: true,
524
+ default: false
525
+ },
526
+ error: {
527
+ type: 'string',
528
+ visual: true,
529
+ default: ''
530
+ },
531
+ size: {
532
+ type: 'string',
533
+ visual: true,
534
+ default: 'md',
535
+ validate: (v) => ['xs', 'sm', 'md', 'lg', 'xl'].includes(v),
536
+ coerce: (v) => {
537
+ if (!['xs', 'sm', 'md', 'lg', 'xl'].includes(v)) {
538
+ console.warn(`[ty-textarea] Invalid size '${v}'. Using 'md'.`);
539
+ return 'md';
540
+ }
541
+ return v;
542
+ }
543
+ },
544
+ // Layout properties
545
+ rows: {
546
+ type: 'string',
547
+ visual: true,
548
+ default: '3',
549
+ coerce: (v) => String(v)
550
+ },
551
+ cols: {
552
+ type: 'string',
553
+ visual: true,
554
+ default: '',
555
+ coerce: (v) => v ? String(v) : ''
556
+ },
557
+ resize: {
558
+ type: 'string',
559
+ visual: true,
560
+ default: 'none',
561
+ validate: (v) => ['none', 'both', 'horizontal', 'vertical'].includes(v),
562
+ coerce: (v) => {
563
+ if (!['none', 'both', 'horizontal', 'vertical'].includes(v)) {
564
+ console.warn(`[ty-textarea] Invalid resize '${v}'. Using 'none'.`);
565
+ return 'none';
566
+ }
567
+ return v;
568
+ }
569
+ },
570
+ minHeight: {
571
+ type: 'string',
572
+ visual: true,
573
+ default: ''
574
+ },
575
+ maxHeight: {
576
+ type: 'string',
577
+ visual: true,
578
+ default: ''
579
+ }
580
+ };
581
+ // Register the component
582
+ if (!customElements.get('ty-textarea')) {
583
+ customElements.define('ty-textarea', TyTextarea);
584
+ }
585
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/components/textarea.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Tooltip Component
3
+ *
4
+ * Shows helpful content on hover/focus with smart positioning.
5
+ * Follows the same shadow DOM pattern as other components.
6
+ *
7
+ * @example
8
+ * <ty-tooltip placement="top" flavor="primary" delay="600">
9
+ * Helpful tooltip text
10
+ * </ty-tooltip>
11
+ */
12
+ import { type Placement } from '../utils/positioning.js';
13
+ /**
14
+ * Valid tooltip flavors (semantic colors)
15
+ */
16
+ export type TooltipFlavor = 'dark' | 'light' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'neutral';
17
+ /**
18
+ * Tooltip attributes configuration
19
+ */
20
+ export interface TooltipAttributes {
21
+ placement: Placement;
22
+ offset: number;
23
+ delay: number;
24
+ disabled: boolean;
25
+ flavor: TooltipFlavor;
26
+ }
27
+ /**
28
+ * TyTooltip Web Component
29
+ */
30
+ export declare class TyTooltip extends HTMLElement {
31
+ /** Internal open state */
32
+ _open: boolean;
33
+ /** Observed attributes */
34
+ static get observedAttributes(): string[];
35
+ constructor();
36
+ connectedCallback(): void;
37
+ disconnectedCallback(): void;
38
+ attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
39
+ }
40
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AAQjH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB;AA2bD;;GAEG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,0BAA0B;IAC1B,KAAK,UAAS;IAEd,0BAA0B;IAC1B,MAAM,KAAK,kBAAkB,aAE5B;;IAOD,iBAAiB;IAWjB,oBAAoB;IAIpB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAezF"}