tyrell-components 1.0.0-RC10

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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/css/tyrell-brand.css +767 -0
  4. package/css/tyrell.css +1679 -0
  5. package/dist/tyrell-brand.css +767 -0
  6. package/dist/tyrell.css +1679 -0
  7. package/dist/tyrell.js +2 -0
  8. package/lib/base/ty-component.d.ts +133 -0
  9. package/lib/base/ty-component.d.ts.map +1 -0
  10. package/lib/base/ty-component.js +297 -0
  11. package/lib/base/ty-component.js.map +1 -0
  12. package/lib/components/button.d.ts +135 -0
  13. package/lib/components/button.d.ts.map +1 -0
  14. package/lib/components/button.js +277 -0
  15. package/lib/components/button.js.map +1 -0
  16. package/lib/components/calendar-month.d.ts +132 -0
  17. package/lib/components/calendar-month.d.ts.map +1 -0
  18. package/lib/components/calendar-month.js +440 -0
  19. package/lib/components/calendar-month.js.map +1 -0
  20. package/lib/components/calendar-navigation.d.ts +137 -0
  21. package/lib/components/calendar-navigation.d.ts.map +1 -0
  22. package/lib/components/calendar-navigation.js +366 -0
  23. package/lib/components/calendar-navigation.js.map +1 -0
  24. package/lib/components/calendar.d.ts +166 -0
  25. package/lib/components/calendar.d.ts.map +1 -0
  26. package/lib/components/calendar.js +774 -0
  27. package/lib/components/calendar.js.map +1 -0
  28. package/lib/components/checkbox.d.ts +189 -0
  29. package/lib/components/checkbox.d.ts.map +1 -0
  30. package/lib/components/checkbox.js +400 -0
  31. package/lib/components/checkbox.js.map +1 -0
  32. package/lib/components/copy.d.ts +180 -0
  33. package/lib/components/copy.d.ts.map +1 -0
  34. package/lib/components/copy.js +393 -0
  35. package/lib/components/copy.js.map +1 -0
  36. package/lib/components/date-picker.d.ts +379 -0
  37. package/lib/components/date-picker.d.ts.map +1 -0
  38. package/lib/components/date-picker.js +1586 -0
  39. package/lib/components/date-picker.js.map +1 -0
  40. package/lib/components/dropdown.d.ts +424 -0
  41. package/lib/components/dropdown.d.ts.map +1 -0
  42. package/lib/components/dropdown.js +1640 -0
  43. package/lib/components/dropdown.js.map +1 -0
  44. package/lib/components/file-upload.d.ts +121 -0
  45. package/lib/components/file-upload.d.ts.map +1 -0
  46. package/lib/components/file-upload.js +441 -0
  47. package/lib/components/file-upload.js.map +1 -0
  48. package/lib/components/icon.d.ts +118 -0
  49. package/lib/components/icon.d.ts.map +1 -0
  50. package/lib/components/icon.js +245 -0
  51. package/lib/components/icon.js.map +1 -0
  52. package/lib/components/input.d.ts +270 -0
  53. package/lib/components/input.d.ts.map +1 -0
  54. package/lib/components/input.js +721 -0
  55. package/lib/components/input.js.map +1 -0
  56. package/lib/components/modal.d.ts +78 -0
  57. package/lib/components/modal.d.ts.map +1 -0
  58. package/lib/components/modal.js +497 -0
  59. package/lib/components/modal.js.map +1 -0
  60. package/lib/components/multiselect.d.ts +397 -0
  61. package/lib/components/multiselect.d.ts.map +1 -0
  62. package/lib/components/multiselect.js +1595 -0
  63. package/lib/components/multiselect.js.map +1 -0
  64. package/lib/components/option.d.ts +66 -0
  65. package/lib/components/option.d.ts.map +1 -0
  66. package/lib/components/option.js +314 -0
  67. package/lib/components/option.js.map +1 -0
  68. package/lib/components/popup.d.ts +43 -0
  69. package/lib/components/popup.d.ts.map +1 -0
  70. package/lib/components/popup.js +380 -0
  71. package/lib/components/popup.js.map +1 -0
  72. package/lib/components/radio.d.ts +198 -0
  73. package/lib/components/radio.d.ts.map +1 -0
  74. package/lib/components/radio.js +437 -0
  75. package/lib/components/radio.js.map +1 -0
  76. package/lib/components/resize-observer.d.ts +48 -0
  77. package/lib/components/resize-observer.d.ts.map +1 -0
  78. package/lib/components/resize-observer.js +108 -0
  79. package/lib/components/resize-observer.js.map +1 -0
  80. package/lib/components/scroll-container.d.ts +51 -0
  81. package/lib/components/scroll-container.d.ts.map +1 -0
  82. package/lib/components/scroll-container.js +239 -0
  83. package/lib/components/scroll-container.js.map +1 -0
  84. package/lib/components/step.d.ts +26 -0
  85. package/lib/components/step.d.ts.map +1 -0
  86. package/lib/components/step.js +75 -0
  87. package/lib/components/step.js.map +1 -0
  88. package/lib/components/switch.d.ts +111 -0
  89. package/lib/components/switch.d.ts.map +1 -0
  90. package/lib/components/switch.js +240 -0
  91. package/lib/components/switch.js.map +1 -0
  92. package/lib/components/tab.d.ts +23 -0
  93. package/lib/components/tab.d.ts.map +1 -0
  94. package/lib/components/tab.js +76 -0
  95. package/lib/components/tab.js.map +1 -0
  96. package/lib/components/tabs.d.ts +93 -0
  97. package/lib/components/tabs.d.ts.map +1 -0
  98. package/lib/components/tabs.js +653 -0
  99. package/lib/components/tabs.js.map +1 -0
  100. package/lib/components/tag.d.ts +144 -0
  101. package/lib/components/tag.d.ts.map +1 -0
  102. package/lib/components/tag.js +316 -0
  103. package/lib/components/tag.js.map +1 -0
  104. package/lib/components/textarea.d.ts +241 -0
  105. package/lib/components/textarea.d.ts.map +1 -0
  106. package/lib/components/textarea.js +585 -0
  107. package/lib/components/textarea.js.map +1 -0
  108. package/lib/components/tooltip.d.ts +40 -0
  109. package/lib/components/tooltip.d.ts.map +1 -0
  110. package/lib/components/tooltip.js +439 -0
  111. package/lib/components/tooltip.js.map +1 -0
  112. package/lib/components/wizard.d.ts +86 -0
  113. package/lib/components/wizard.d.ts.map +1 -0
  114. package/lib/components/wizard.js +636 -0
  115. package/lib/components/wizard.js.map +1 -0
  116. package/lib/icons/fontawesome/brands.d.ts +557 -0
  117. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  118. package/lib/icons/fontawesome/brands.js +557 -0
  119. package/lib/icons/fontawesome/brands.js.map +1 -0
  120. package/lib/icons/fontawesome/regular.d.ts +281 -0
  121. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  122. package/lib/icons/fontawesome/regular.js +281 -0
  123. package/lib/icons/fontawesome/regular.js.map +1 -0
  124. package/lib/icons/fontawesome/solid.d.ts +1992 -0
  125. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  126. package/lib/icons/fontawesome/solid.js +1992 -0
  127. package/lib/icons/fontawesome/solid.js.map +1 -0
  128. package/lib/icons/heroicons/micro.d.ts +324 -0
  129. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  130. package/lib/icons/heroicons/micro.js +1032 -0
  131. package/lib/icons/heroicons/micro.js.map +1 -0
  132. package/lib/icons/heroicons/mini.d.ts +332 -0
  133. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  134. package/lib/icons/heroicons/mini.js +1038 -0
  135. package/lib/icons/heroicons/mini.js.map +1 -0
  136. package/lib/icons/heroicons/outline.d.ts +332 -0
  137. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  138. package/lib/icons/heroicons/outline.js +993 -0
  139. package/lib/icons/heroicons/outline.js.map +1 -0
  140. package/lib/icons/heroicons/solid.d.ts +332 -0
  141. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  142. package/lib/icons/heroicons/solid.js +1063 -0
  143. package/lib/icons/heroicons/solid.js.map +1 -0
  144. package/lib/icons/lucide.d.ts +1872 -0
  145. package/lib/icons/lucide.d.ts.map +1 -0
  146. package/lib/icons/lucide.js +28212 -0
  147. package/lib/icons/lucide.js.map +1 -0
  148. package/lib/icons/material/filled.d.ts +2180 -0
  149. package/lib/icons/material/filled.d.ts.map +1 -0
  150. package/lib/icons/material/filled.js +14003 -0
  151. package/lib/icons/material/filled.js.map +1 -0
  152. package/lib/icons/material/outlined.d.ts +2142 -0
  153. package/lib/icons/material/outlined.d.ts.map +1 -0
  154. package/lib/icons/material/outlined.js +14545 -0
  155. package/lib/icons/material/outlined.js.map +1 -0
  156. package/lib/icons/material/round.d.ts +2147 -0
  157. package/lib/icons/material/round.d.ts.map +1 -0
  158. package/lib/icons/material/round.js +14779 -0
  159. package/lib/icons/material/round.js.map +1 -0
  160. package/lib/icons/material/sharp.d.ts +2147 -0
  161. package/lib/icons/material/sharp.d.ts.map +1 -0
  162. package/lib/icons/material/sharp.js +14189 -0
  163. package/lib/icons/material/sharp.js.map +1 -0
  164. package/lib/icons/material/two-tone.d.ts +2185 -0
  165. package/lib/icons/material/two-tone.d.ts.map +1 -0
  166. package/lib/icons/material/two-tone.js +17152 -0
  167. package/lib/icons/material/two-tone.js.map +1 -0
  168. package/lib/index.d.ts +86 -0
  169. package/lib/index.d.ts.map +1 -0
  170. package/lib/index.js +78 -0
  171. package/lib/index.js.map +1 -0
  172. package/lib/styles/button.d.ts +14 -0
  173. package/lib/styles/button.d.ts.map +1 -0
  174. package/lib/styles/button.js +498 -0
  175. package/lib/styles/button.js.map +1 -0
  176. package/lib/styles/calendar-month.d.ts +6 -0
  177. package/lib/styles/calendar-month.d.ts.map +1 -0
  178. package/lib/styles/calendar-month.js +275 -0
  179. package/lib/styles/calendar-month.js.map +1 -0
  180. package/lib/styles/calendar-navigation.d.ts +6 -0
  181. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  182. package/lib/styles/calendar-navigation.js +143 -0
  183. package/lib/styles/calendar-navigation.js.map +1 -0
  184. package/lib/styles/calendar.d.ts +6 -0
  185. package/lib/styles/calendar.d.ts.map +1 -0
  186. package/lib/styles/calendar.js +28 -0
  187. package/lib/styles/calendar.js.map +1 -0
  188. package/lib/styles/checkbox.d.ts +9 -0
  189. package/lib/styles/checkbox.d.ts.map +1 -0
  190. package/lib/styles/checkbox.js +19 -0
  191. package/lib/styles/checkbox.js.map +1 -0
  192. package/lib/styles/copy.d.ts +7 -0
  193. package/lib/styles/copy.d.ts.map +1 -0
  194. package/lib/styles/copy.js +94 -0
  195. package/lib/styles/copy.js.map +1 -0
  196. package/lib/styles/custom-scrollbar.d.ts +6 -0
  197. package/lib/styles/custom-scrollbar.d.ts.map +1 -0
  198. package/lib/styles/custom-scrollbar.js +157 -0
  199. package/lib/styles/custom-scrollbar.js.map +1 -0
  200. package/lib/styles/date-picker.d.ts +6 -0
  201. package/lib/styles/date-picker.d.ts.map +1 -0
  202. package/lib/styles/date-picker.js +438 -0
  203. package/lib/styles/date-picker.js.map +1 -0
  204. package/lib/styles/dropdown.d.ts +12 -0
  205. package/lib/styles/dropdown.d.ts.map +1 -0
  206. package/lib/styles/dropdown.js +1081 -0
  207. package/lib/styles/dropdown.js.map +1 -0
  208. package/lib/styles/file-upload.d.ts +2 -0
  209. package/lib/styles/file-upload.d.ts.map +1 -0
  210. package/lib/styles/file-upload.js +241 -0
  211. package/lib/styles/file-upload.js.map +1 -0
  212. package/lib/styles/icon.d.ts +6 -0
  213. package/lib/styles/icon.d.ts.map +1 -0
  214. package/lib/styles/icon.js +241 -0
  215. package/lib/styles/icon.js.map +1 -0
  216. package/lib/styles/input.d.ts +7 -0
  217. package/lib/styles/input.d.ts.map +1 -0
  218. package/lib/styles/input.js +685 -0
  219. package/lib/styles/input.js.map +1 -0
  220. package/lib/styles/modal.d.ts +8 -0
  221. package/lib/styles/modal.d.ts.map +1 -0
  222. package/lib/styles/modal.js +134 -0
  223. package/lib/styles/modal.js.map +1 -0
  224. package/lib/styles/multiselect.d.ts +6 -0
  225. package/lib/styles/multiselect.d.ts.map +1 -0
  226. package/lib/styles/multiselect.js +825 -0
  227. package/lib/styles/multiselect.js.map +1 -0
  228. package/lib/styles/option.d.ts +6 -0
  229. package/lib/styles/option.d.ts.map +1 -0
  230. package/lib/styles/option.js +116 -0
  231. package/lib/styles/option.js.map +1 -0
  232. package/lib/styles/popup.d.ts +8 -0
  233. package/lib/styles/popup.d.ts.map +1 -0
  234. package/lib/styles/popup.js +95 -0
  235. package/lib/styles/popup.js.map +1 -0
  236. package/lib/styles/radio.d.ts +8 -0
  237. package/lib/styles/radio.d.ts.map +1 -0
  238. package/lib/styles/radio.js +160 -0
  239. package/lib/styles/radio.js.map +1 -0
  240. package/lib/styles/resize-observer.d.ts +6 -0
  241. package/lib/styles/resize-observer.d.ts.map +1 -0
  242. package/lib/styles/resize-observer.js +18 -0
  243. package/lib/styles/resize-observer.js.map +1 -0
  244. package/lib/styles/scroll-container.d.ts +6 -0
  245. package/lib/styles/scroll-container.d.ts.map +1 -0
  246. package/lib/styles/scroll-container.js +198 -0
  247. package/lib/styles/scroll-container.js.map +1 -0
  248. package/lib/styles/step.d.ts +5 -0
  249. package/lib/styles/step.d.ts.map +1 -0
  250. package/lib/styles/step.js +50 -0
  251. package/lib/styles/step.js.map +1 -0
  252. package/lib/styles/switch.d.ts +9 -0
  253. package/lib/styles/switch.d.ts.map +1 -0
  254. package/lib/styles/switch.js +100 -0
  255. package/lib/styles/switch.js.map +1 -0
  256. package/lib/styles/tab.d.ts +5 -0
  257. package/lib/styles/tab.d.ts.map +1 -0
  258. package/lib/styles/tab.js +51 -0
  259. package/lib/styles/tab.js.map +1 -0
  260. package/lib/styles/tabs.d.ts +13 -0
  261. package/lib/styles/tabs.d.ts.map +1 -0
  262. package/lib/styles/tabs.js +184 -0
  263. package/lib/styles/tabs.js.map +1 -0
  264. package/lib/styles/tag.d.ts +6 -0
  265. package/lib/styles/tag.d.ts.map +1 -0
  266. package/lib/styles/tag.js +409 -0
  267. package/lib/styles/tag.js.map +1 -0
  268. package/lib/styles/textarea.d.ts +6 -0
  269. package/lib/styles/textarea.d.ts.map +1 -0
  270. package/lib/styles/textarea.js +350 -0
  271. package/lib/styles/textarea.js.map +1 -0
  272. package/lib/styles/tooltip.d.ts +9 -0
  273. package/lib/styles/tooltip.d.ts.map +1 -0
  274. package/lib/styles/tooltip.js +133 -0
  275. package/lib/styles/tooltip.js.map +1 -0
  276. package/lib/styles/wizard.d.ts +25 -0
  277. package/lib/styles/wizard.d.ts.map +1 -0
  278. package/lib/styles/wizard.js +348 -0
  279. package/lib/styles/wizard.js.map +1 -0
  280. package/lib/types/common.d.ts +143 -0
  281. package/lib/types/common.d.ts.map +1 -0
  282. package/lib/types/common.js +5 -0
  283. package/lib/types/common.js.map +1 -0
  284. package/lib/utils/calendar-utils.d.ts +176 -0
  285. package/lib/utils/calendar-utils.d.ts.map +1 -0
  286. package/lib/utils/calendar-utils.js +370 -0
  287. package/lib/utils/calendar-utils.js.map +1 -0
  288. package/lib/utils/custom-scrollbar.d.ts +82 -0
  289. package/lib/utils/custom-scrollbar.d.ts.map +1 -0
  290. package/lib/utils/custom-scrollbar.js +320 -0
  291. package/lib/utils/custom-scrollbar.js.map +1 -0
  292. package/lib/utils/icon-registry.d.ts +78 -0
  293. package/lib/utils/icon-registry.d.ts.map +1 -0
  294. package/lib/utils/icon-registry.js +304 -0
  295. package/lib/utils/icon-registry.js.map +1 -0
  296. package/lib/utils/loader-registry.d.ts +35 -0
  297. package/lib/utils/loader-registry.d.ts.map +1 -0
  298. package/lib/utils/loader-registry.js +43 -0
  299. package/lib/utils/loader-registry.js.map +1 -0
  300. package/lib/utils/locale.d.ts +136 -0
  301. package/lib/utils/locale.d.ts.map +1 -0
  302. package/lib/utils/locale.js +213 -0
  303. package/lib/utils/locale.js.map +1 -0
  304. package/lib/utils/mobile.d.ts +14 -0
  305. package/lib/utils/mobile.d.ts.map +1 -0
  306. package/lib/utils/mobile.js +21 -0
  307. package/lib/utils/mobile.js.map +1 -0
  308. package/lib/utils/number-format.d.ts +83 -0
  309. package/lib/utils/number-format.d.ts.map +1 -0
  310. package/lib/utils/number-format.js +143 -0
  311. package/lib/utils/number-format.js.map +1 -0
  312. package/lib/utils/parse-boolean.d.ts +39 -0
  313. package/lib/utils/parse-boolean.d.ts.map +1 -0
  314. package/lib/utils/parse-boolean.js +58 -0
  315. package/lib/utils/parse-boolean.js.map +1 -0
  316. package/lib/utils/positioning.d.ts +143 -0
  317. package/lib/utils/positioning.d.ts.map +1 -0
  318. package/lib/utils/positioning.js +308 -0
  319. package/lib/utils/positioning.js.map +1 -0
  320. package/lib/utils/property-capture.d.ts +132 -0
  321. package/lib/utils/property-capture.d.ts.map +1 -0
  322. package/lib/utils/property-capture.js +152 -0
  323. package/lib/utils/property-capture.js.map +1 -0
  324. package/lib/utils/property-manager.d.ts +90 -0
  325. package/lib/utils/property-manager.d.ts.map +1 -0
  326. package/lib/utils/property-manager.js +197 -0
  327. package/lib/utils/property-manager.js.map +1 -0
  328. package/lib/utils/resize-observer.d.ts +42 -0
  329. package/lib/utils/resize-observer.d.ts.map +1 -0
  330. package/lib/utils/resize-observer.js +71 -0
  331. package/lib/utils/resize-observer.js.map +1 -0
  332. package/lib/utils/scroll-lock.d.ts +79 -0
  333. package/lib/utils/scroll-lock.d.ts.map +1 -0
  334. package/lib/utils/scroll-lock.js +197 -0
  335. package/lib/utils/scroll-lock.js.map +1 -0
  336. package/lib/utils/styles.d.ts +27 -0
  337. package/lib/utils/styles.d.ts.map +1 -0
  338. package/lib/utils/styles.js +53 -0
  339. package/lib/utils/styles.js.map +1 -0
  340. package/lib/version.d.ts +8 -0
  341. package/lib/version.d.ts.map +1 -0
  342. package/lib/version.js +11 -0
  343. package/lib/version.js.map +1 -0
  344. package/package.json +163 -0
@@ -0,0 +1,439 @@
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 { findBestPosition, placementPreferences } from '../utils/positioning.js';
13
+ import { ensureStyles } from '../utils/styles.js';
14
+ import { tooltipStyles } from '../styles/tooltip.js';
15
+ // ============================================================================
16
+ // WeakMaps for State Management
17
+ // ============================================================================
18
+ const autoUpdateCleanup = new WeakMap();
19
+ const eventCleanup = new WeakMap();
20
+ const timeoutState = new WeakMap();
21
+ const popoverElements = new WeakMap();
22
+ // ============================================================================
23
+ // Helper Functions
24
+ // ============================================================================
25
+ /**
26
+ * Validate and normalize flavor attribute
27
+ */
28
+ function validateFlavor(flavor) {
29
+ const validFlavors = [
30
+ 'dark', 'light', 'primary', 'secondary',
31
+ 'success', 'danger', 'warning', 'info', 'neutral'
32
+ ];
33
+ const normalized = (flavor || 'dark');
34
+ if (!validFlavors.includes(normalized)) {
35
+ console.warn(`[ty-tooltip] Invalid flavor '${flavor}'. Using 'dark'. ` +
36
+ `Valid flavors: ${validFlavors.join(', ')}.`);
37
+ return 'dark';
38
+ }
39
+ return normalized;
40
+ }
41
+ /**
42
+ * Get timeout state for element
43
+ */
44
+ function getTimeoutState(el) {
45
+ let state = timeoutState.get(el);
46
+ if (!state) {
47
+ state = { showTimeout: null, hideTimeout: null };
48
+ timeoutState.set(el, state);
49
+ }
50
+ return state;
51
+ }
52
+ /**
53
+ * Parse boolean attribute
54
+ */
55
+ function parseBoolAttr(el, name) {
56
+ return el.hasAttribute(name);
57
+ }
58
+ /**
59
+ * Parse integer attribute
60
+ */
61
+ function parseIntAttr(el, name, defaultValue) {
62
+ const value = el.getAttribute(name);
63
+ if (value === null)
64
+ return defaultValue;
65
+ const parsed = parseInt(value, 10);
66
+ return isNaN(parsed) ? defaultValue : parsed;
67
+ }
68
+ /**
69
+ * Read all tooltip attributes from element
70
+ */
71
+ function getTooltipAttributes(el) {
72
+ return {
73
+ placement: (el.getAttribute('placement') || 'top'),
74
+ offset: parseIntAttr(el, 'offset', 8),
75
+ delay: parseIntAttr(el, 'delay', 600),
76
+ disabled: parseBoolAttr(el, 'disabled'),
77
+ flavor: validateFlavor(el.getAttribute('flavor')),
78
+ };
79
+ }
80
+ /**
81
+ * Get the parent element (anchor)
82
+ */
83
+ function getAnchorElement(el) {
84
+ return el.parentElement;
85
+ }
86
+ /**
87
+ * Get or create popover element using Popover API
88
+ * The popover is created in document.body for top-layer placement
89
+ */
90
+ function getOrCreatePopover(el) {
91
+ let popover = popoverElements.get(el);
92
+ if (!popover) {
93
+ // Create popover element
94
+ popover = document.createElement('div');
95
+ popover.id = `ty-tooltip-${Math.random().toString(36).substr(2, 9)}`;
96
+ popover.setAttribute('popover', 'manual');
97
+ popover.className = 'ty-tooltip-popover';
98
+ // Get initial attributes
99
+ const { flavor } = getTooltipAttributes(el);
100
+ popover.setAttribute('data-flavor', flavor);
101
+ // Copy content from slot
102
+ const content = el.textContent || '';
103
+ popover.textContent = content;
104
+ // Apply inline styles (since popover is outside shadow DOM, we need inline styles)
105
+ const styles = `
106
+ position: fixed;
107
+ margin: 0;
108
+ padding: 8px 12px;
109
+ background: var(--ty-tooltip-bg, #1f2937);
110
+ color: #ffffff;
111
+ border: none;
112
+ border-radius: 6px;
113
+ font-size: var(--ty-font-sm, 14px);
114
+ font-weight: var(--ty-font-semibold, 600);
115
+ line-height: 1.5;
116
+ max-width: 250px;
117
+ text-align: center;
118
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
119
+ user-select: none;
120
+ pointer-events: none;
121
+ `;
122
+ popover.style.cssText = styles;
123
+ // Apply flavor-specific styles
124
+ applyFlavorStyles(popover, flavor);
125
+ // Append to body
126
+ document.body.appendChild(popover);
127
+ // Store reference
128
+ popoverElements.set(el, popover);
129
+ }
130
+ return popover;
131
+ }
132
+ /**
133
+ * Apply flavor-specific styles to popover
134
+ */
135
+ function applyFlavorStyles(popover, flavor) {
136
+ // Reset to defaults first
137
+ popover.style.removeProperty('background');
138
+ popover.style.removeProperty('color');
139
+ popover.style.removeProperty('border-color');
140
+ // Apply flavor-specific styles
141
+ switch (flavor) {
142
+ case 'primary':
143
+ popover.style.background = 'var(--ty-bg-primary, #3b82f6)';
144
+ popover.style.color = 'var(--ty-color-primary-strong, #eff6ff)';
145
+ popover.style.borderColor = 'var(--ty-border-primary, #60a5fa)';
146
+ break;
147
+ case 'secondary':
148
+ popover.style.background = 'var(--ty-bg-secondary, #8b5cf6)';
149
+ popover.style.color = 'var(--ty-color-secondary-strong, #f5f3ff)';
150
+ popover.style.borderColor = 'var(--ty-border-secondary, #a78bfa)';
151
+ break;
152
+ case 'success':
153
+ popover.style.background = 'var(--ty-bg-success-bold, #10b981)';
154
+ popover.style.color = 'var(--ty-color-success-strong, #ecfdf5)';
155
+ popover.style.borderColor = 'var(--ty-border-success, #34d399)';
156
+ break;
157
+ case 'danger':
158
+ popover.style.background = 'var(--ty-bg-danger, #ef4444)';
159
+ popover.style.color = 'var(--ty-color-danger-strong, #fef2f2)';
160
+ popover.style.borderColor = 'var(--ty-border-danger, #f87171)';
161
+ break;
162
+ case 'warning':
163
+ popover.style.background = 'var(--ty-bg-warning, #f59e0b)';
164
+ popover.style.color = 'var(--ty-color-warning-strong, #fffbeb)';
165
+ popover.style.borderColor = 'var(--ty-border-warning, #fbbf24)';
166
+ break;
167
+ case 'info':
168
+ popover.style.background = 'var(--ty-bg-info, #06b6d4)';
169
+ popover.style.color = 'var(--ty-text-strong, #f0f9ff)';
170
+ popover.style.borderColor = 'var(--ty-border-info, #22d3ee)';
171
+ break;
172
+ case 'light':
173
+ popover.style.background = 'var(--ty-surface-elevated, #ffffff)';
174
+ popover.style.color = 'var(--ty-text-strong, #111827)';
175
+ popover.style.borderColor = 'var(--ty-border, #e5e7eb)';
176
+ break;
177
+ case 'neutral':
178
+ popover.style.background = 'var(--ty-bg-neutral, #6b7280)';
179
+ popover.style.color = 'var(--ty-color-neutral-strong, #f9fafb)';
180
+ popover.style.borderColor = 'var(--ty-border-neutral, #9ca3af)';
181
+ break;
182
+ case 'dark':
183
+ default:
184
+ popover.style.background = 'var(--ty-bg-neutral-soft, #4b5563)';
185
+ popover.style.color = 'var(--ty-color-neutral-strong, #f3f4f6)';
186
+ popover.style.borderColor = 'var(--ty-border-strong, #6b7280)';
187
+ break;
188
+ }
189
+ }
190
+ /**
191
+ * Update tooltip position based on current anchor/popover state
192
+ */
193
+ function updatePosition(el) {
194
+ const { placement, offset } = getTooltipAttributes(el);
195
+ const anchor = getAnchorElement(el);
196
+ const popover = popoverElements.get(el);
197
+ if (!anchor || !popover) {
198
+ console.warn('[ty-tooltip] updatePosition: missing anchor or popover');
199
+ return;
200
+ }
201
+ // Calculate preferences based on placement
202
+ const preferences = placement === 'top' ? placementPreferences.tooltip :
203
+ placement === 'bottom' ? ['bottom', 'top', 'left', 'right'] :
204
+ placement === 'left' ? ['left', 'right', 'top', 'bottom'] :
205
+ placement === 'right' ? ['right', 'left', 'top', 'bottom'] :
206
+ placementPreferences.tooltip;
207
+ // Use positioning engine to find best position
208
+ const position = findBestPosition({
209
+ targetEl: anchor,
210
+ floatingEl: popover,
211
+ preferences,
212
+ offset,
213
+ });
214
+ // Apply position directly to popover
215
+ popover.style.left = `${position.x}px`;
216
+ popover.style.top = `${position.y}px`;
217
+ }
218
+ /**
219
+ * Cleanup auto-update system
220
+ */
221
+ function cleanupAutoUpdate(el) {
222
+ const cleanup = autoUpdateCleanup.get(el);
223
+ if (cleanup) {
224
+ cleanup();
225
+ autoUpdateCleanup.delete(el);
226
+ }
227
+ }
228
+ /**
229
+ * Setup auto-update system for position tracking
230
+ * Note: This does NOT calculate initial position - call updatePosition() separately
231
+ */
232
+ function setupAutoUpdate(el) {
233
+ const anchor = getAnchorElement(el);
234
+ const popover = popoverElements.get(el);
235
+ if (!anchor || !popover) {
236
+ console.warn('[ty-tooltip] setupAutoUpdate: missing anchor or popover');
237
+ return;
238
+ }
239
+ // Debounced update function
240
+ let timeoutId = null;
241
+ const debouncedUpdate = () => {
242
+ if (timeoutId !== null) {
243
+ clearTimeout(timeoutId);
244
+ }
245
+ timeoutId = window.setTimeout(() => {
246
+ timeoutId = null;
247
+ updatePosition(el);
248
+ }, 10);
249
+ };
250
+ // Setup ResizeObserver for anchor and popover
251
+ const resizeObserver = new ResizeObserver(debouncedUpdate);
252
+ resizeObserver.observe(anchor);
253
+ resizeObserver.observe(popover);
254
+ // Scroll handler with requestAnimationFrame
255
+ let scrollRafId = null;
256
+ const handleScroll = () => {
257
+ if (scrollRafId === null) {
258
+ scrollRafId = requestAnimationFrame(() => {
259
+ scrollRafId = null;
260
+ updatePosition(el);
261
+ });
262
+ }
263
+ };
264
+ // Listen for scroll and resize
265
+ window.addEventListener('scroll', handleScroll, true);
266
+ window.addEventListener('resize', debouncedUpdate);
267
+ // Store cleanup function
268
+ const cleanup = () => {
269
+ resizeObserver.disconnect();
270
+ window.removeEventListener('scroll', handleScroll, true);
271
+ window.removeEventListener('resize', debouncedUpdate);
272
+ if (timeoutId !== null) {
273
+ clearTimeout(timeoutId);
274
+ }
275
+ if (scrollRafId !== null) {
276
+ cancelAnimationFrame(scrollRafId);
277
+ }
278
+ };
279
+ autoUpdateCleanup.set(el, cleanup);
280
+ }
281
+ /**
282
+ * Clear all timeouts
283
+ */
284
+ function clearTimeouts(el) {
285
+ const state = getTimeoutState(el);
286
+ if (state.showTimeout !== null) {
287
+ clearTimeout(state.showTimeout);
288
+ state.showTimeout = null;
289
+ }
290
+ if (state.hideTimeout !== null) {
291
+ clearTimeout(state.hideTimeout);
292
+ state.hideTimeout = null;
293
+ }
294
+ }
295
+ /**
296
+ * Show tooltip immediately using Popover API
297
+ */
298
+ function showTooltip(el) {
299
+ const { disabled } = getTooltipAttributes(el);
300
+ if (disabled)
301
+ return;
302
+ // Create popover if it doesn't exist
303
+ const popover = getOrCreatePopover(el);
304
+ try {
305
+ // Show using Popover API
306
+ popover.showPopover();
307
+ el._open = true;
308
+ // Position and setup observers
309
+ updatePosition(el);
310
+ setupAutoUpdate(el);
311
+ }
312
+ catch (e) {
313
+ console.warn('[ty-tooltip] Failed to show popover', e);
314
+ }
315
+ }
316
+ /**
317
+ * Hide tooltip immediately using Popover API
318
+ */
319
+ function hideTooltip(el) {
320
+ const popover = popoverElements.get(el);
321
+ if (!popover)
322
+ return;
323
+ try {
324
+ popover.hidePopover();
325
+ el._open = false;
326
+ cleanupAutoUpdate(el);
327
+ }
328
+ catch (e) {
329
+ // Already hidden, ignore
330
+ }
331
+ }
332
+ /**
333
+ * Schedule tooltip to show after delay
334
+ */
335
+ function scheduleShow(el) {
336
+ const state = getTimeoutState(el);
337
+ const { delay } = getTooltipAttributes(el);
338
+ clearTimeouts(el);
339
+ state.showTimeout = window.setTimeout(() => showTooltip(el), delay);
340
+ }
341
+ /**
342
+ * Schedule tooltip to hide after delay
343
+ */
344
+ function scheduleHide(el) {
345
+ const state = getTimeoutState(el);
346
+ clearTimeouts(el);
347
+ state.hideTimeout = window.setTimeout(() => hideTooltip(el), 200);
348
+ }
349
+ /**
350
+ * Setup event listeners on anchor element
351
+ */
352
+ function setupEvents(el) {
353
+ const anchor = getAnchorElement(el);
354
+ if (!anchor)
355
+ return;
356
+ const handleEnter = () => scheduleShow(el);
357
+ const handleLeave = () => scheduleHide(el);
358
+ const handleFocus = () => scheduleShow(el);
359
+ const handleBlur = () => scheduleHide(el);
360
+ // Add event listeners
361
+ anchor.addEventListener('mouseenter', handleEnter);
362
+ anchor.addEventListener('mouseleave', handleLeave);
363
+ anchor.addEventListener('focusin', handleFocus);
364
+ anchor.addEventListener('focusout', handleBlur);
365
+ // Store cleanup function
366
+ eventCleanup.set(el, () => {
367
+ anchor.removeEventListener('mouseenter', handleEnter);
368
+ anchor.removeEventListener('mouseleave', handleLeave);
369
+ anchor.removeEventListener('focusin', handleFocus);
370
+ anchor.removeEventListener('focusout', handleBlur);
371
+ });
372
+ }
373
+ /**
374
+ * Cleanup all resources including popover element
375
+ */
376
+ function cleanup(el) {
377
+ clearTimeouts(el);
378
+ cleanupAutoUpdate(el);
379
+ const cleanup = eventCleanup.get(el);
380
+ if (cleanup) {
381
+ cleanup();
382
+ eventCleanup.delete(el);
383
+ }
384
+ // Remove popover from body
385
+ const popover = popoverElements.get(el);
386
+ if (popover) {
387
+ popover.remove();
388
+ popoverElements.delete(el);
389
+ }
390
+ timeoutState.delete(el);
391
+ }
392
+ // ============================================================================
393
+ // Component Definition
394
+ // ============================================================================
395
+ /**
396
+ * TyTooltip Web Component
397
+ */
398
+ export class TyTooltip extends HTMLElement {
399
+ /** Observed attributes */
400
+ static get observedAttributes() {
401
+ return ['placement', 'offset', 'delay', 'disabled', 'flavor'];
402
+ }
403
+ constructor() {
404
+ super();
405
+ /** Internal open state */
406
+ this._open = false;
407
+ this.attachShadow({ mode: 'open' });
408
+ }
409
+ connectedCallback() {
410
+ // Initialize open state
411
+ this._open = false;
412
+ // Inject styles (for :host display: contents)
413
+ ensureStyles(this.shadowRoot, tooltipStyles);
414
+ // Setup events on anchor
415
+ setupEvents(this);
416
+ }
417
+ disconnectedCallback() {
418
+ cleanup(this);
419
+ }
420
+ attributeChangedCallback(name, _oldValue, newValue) {
421
+ // Update flavor in real-time if tooltip is visible
422
+ if (name === 'flavor' && this._open) {
423
+ const popover = popoverElements.get(this);
424
+ if (popover) {
425
+ const flavor = validateFlavor(newValue);
426
+ applyFlavorStyles(popover, flavor);
427
+ }
428
+ }
429
+ // Close tooltip if disabled
430
+ if (name === 'disabled' && newValue !== null) {
431
+ hideTooltip(this);
432
+ }
433
+ }
434
+ }
435
+ // Register the custom element
436
+ if (!customElements.get('ty-tooltip')) {
437
+ customElements.define('ty-tooltip', TyTooltip);
438
+ }
439
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/components/tooltip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Wizard Component
3
+ *
4
+ * A carousel-based wizard/stepper component with smooth animations, progress tracking, and completion state.
5
+ * Features horizontal sliding transitions between steps, animated progress line, and step completion tracking.
6
+ * Behaves like tabs - a "dumb" component that only renders and fires events. All navigation and validation
7
+ * is controlled by the user.
8
+ *
9
+ * Features:
10
+ * - Carousel animation with smooth sliding transitions between steps
11
+ * - Fixed dimensions prevent layout shift between steps
12
+ * - Animated progress line showing completion status
13
+ * - Step indicators with completed/active/pending states
14
+ * - Rich indicator support via slots (icons, custom content)
15
+ * - Independent panel scrolling with scroll position reset
16
+ * - ResizeObserver for responsive percentage widths
17
+ * - Smart rendering - only updates DOM when necessary
18
+ * - Accessibility with ARIA roles and attributes
19
+ * - Fires events on step clicks - user controls navigation
20
+ *
21
+ * @example
22
+ * <!-- Basic wizard with text labels -->
23
+ * <ty-wizard width="900px" height="600px" active="welcome">
24
+ * <ty-step id="welcome" label="Welcome">
25
+ * <div class="p-6">
26
+ * <h1>Welcome!</h1>
27
+ * <button onclick="goToStep('account')">Next</button>
28
+ * </div>
29
+ * </ty-step>
30
+ * <ty-step id="account" label="Account Setup">
31
+ * <div class="p-6">
32
+ * <h2>Account Setup</h2>
33
+ * <button onclick="goToStep('welcome')">Previous</button>
34
+ * <button onclick="goToStep('complete')">Next</button>
35
+ * </div>
36
+ * </ty-step>
37
+ * </ty-wizard>
38
+ *
39
+ * @example
40
+ * <!-- Wizard with custom indicators -->
41
+ * <ty-wizard width="100%" height="700px" active="welcome" completed="welcome,account">
42
+ * <!-- Custom indicator icons -->
43
+ * <div slot="indicator-welcome">
44
+ * <ty-icon name="hand" size="sm"></ty-icon>
45
+ * </div>
46
+ * <div slot="indicator-account">
47
+ * <span class="text-lg font-bold">1</span>
48
+ * </div>
49
+ *
50
+ * <ty-step id="welcome" label="Welcome">...</ty-step>
51
+ * <ty-step id="account" label="Account">...</ty-step>
52
+ * <ty-step id="profile" label="Profile">...</ty-step>
53
+ * </ty-wizard>
54
+ */
55
+ /**
56
+ * Wizard container attributes configuration
57
+ */
58
+ export interface WizardAttributes {
59
+ width: string;
60
+ height: string;
61
+ active: string | null;
62
+ completed: string;
63
+ orientation: 'horizontal' | 'vertical';
64
+ }
65
+ /**
66
+ * Wizard step change event detail
67
+ */
68
+ export interface WizardStepChangeDetail {
69
+ activeId: string;
70
+ activeIndex: number;
71
+ previousId: string | null;
72
+ previousIndex: number | null;
73
+ direction: 'forward' | 'backward' | 'none';
74
+ }
75
+ /**
76
+ * TyWizard Web Component
77
+ */
78
+ export declare class TyWizard extends HTMLElement {
79
+ /** Observed attributes */
80
+ static get observedAttributes(): string[];
81
+ constructor();
82
+ connectedCallback(): void;
83
+ disconnectedCallback(): void;
84
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
85
+ }
86
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/components/wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AASH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CAC5C;AAuoBD;;GAEG;AACH,qBAAa,QAAS,SAAQ,WAAW;IACvC,0BAA0B;IAC1B,MAAM,KAAK,kBAAkB,aAE5B;;IAOD,iBAAiB;IAIjB,oBAAoB;IAIpB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAiBxF"}