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,320 @@
1
+ /**
2
+ * CustomScrollbar - Reusable scrollbar utility
3
+ *
4
+ * Attaches a custom rendered scrollbar (vertical and/or horizontal) to any
5
+ * scrollable element. Uses the overlay approach: native overflow:auto is
6
+ * preserved for scroll physics, native scrollbar is hidden via CSS,
7
+ * and custom track/thumb elements are synced on top.
8
+ *
9
+ * Usage:
10
+ * const scrollbar = new CustomScrollbar(scrollEl, { vertical: true })
11
+ * // scrollbar.trackY, scrollbar.thumbY — append these to your DOM
12
+ * // scrollbar.trackX, scrollbar.thumbX — for horizontal
13
+ * scrollbar.destroy() // cleanup
14
+ *
15
+ * CSS classes applied:
16
+ * .ty-scrollbar-track-y / .ty-scrollbar-track-x
17
+ * .ty-scrollbar-thumb-y / .ty-scrollbar-thumb-x
18
+ * .has-overflow — when content overflows
19
+ * .dragging — during thumb drag
20
+ * .scrolling — briefly after scroll (auto-hide)
21
+ */
22
+ /**
23
+ * Check if custom scrollbar is enabled globally.
24
+ * Default: true (custom scrollbar on).
25
+ * Set data-ty-scrollbar="native" on <html> to opt out.
26
+ */
27
+ export function isCustomScrollbarEnabled() {
28
+ return document.documentElement.getAttribute('data-ty-scrollbar') !== 'native';
29
+ }
30
+ export class CustomScrollbar {
31
+ constructor(scrollEl, options = {}) {
32
+ // Elements
33
+ this.trackY = null;
34
+ this.thumbY = null;
35
+ this.trackX = null;
36
+ this.thumbX = null;
37
+ // State
38
+ this._isDragging = false;
39
+ this._dragAxis = 'y';
40
+ this._dragStartPos = 0;
41
+ this._dragStartScroll = 0;
42
+ this._rafId = null;
43
+ this._hideTimeout = null;
44
+ this._resizeObserver = null;
45
+ this._scrollEl = scrollEl;
46
+ this._vertical = options.vertical !== false; // default true
47
+ this._horizontal = options.horizontal ?? false;
48
+ this._autoHideDelay = options.autoHideDelay ?? 1000;
49
+ // Bind handlers
50
+ this._onScroll = this._handleScroll.bind(this);
51
+ this._onThumbYDown = this._handleThumbYDown.bind(this);
52
+ this._onThumbXDown = this._handleThumbXDown.bind(this);
53
+ this._onTrackYDown = this._handleTrackYDown.bind(this);
54
+ this._onTrackXDown = this._handleTrackXDown.bind(this);
55
+ this._onDragMove = this._handleDragMove.bind(this);
56
+ this._onDragEnd = this._handleDragEnd.bind(this);
57
+ // Create elements
58
+ if (this._vertical) {
59
+ this.trackY = this._createTrack('y');
60
+ this.thumbY = this._createThumb('y');
61
+ this.trackY.appendChild(this.thumbY);
62
+ }
63
+ if (this._horizontal) {
64
+ this.trackX = this._createTrack('x');
65
+ this.thumbX = this._createThumb('x');
66
+ this.trackX.appendChild(this.thumbX);
67
+ }
68
+ // Attach listeners
69
+ this._scrollEl.addEventListener('scroll', this._onScroll, { passive: true });
70
+ if (this.thumbY) {
71
+ this.thumbY.addEventListener('pointerdown', this._onThumbYDown);
72
+ }
73
+ if (this.trackY) {
74
+ this.trackY.addEventListener('pointerdown', this._onTrackYDown);
75
+ }
76
+ if (this.thumbX) {
77
+ this.thumbX.addEventListener('pointerdown', this._onThumbXDown);
78
+ }
79
+ if (this.trackX) {
80
+ this.trackX.addEventListener('pointerdown', this._onTrackXDown);
81
+ }
82
+ // ResizeObserver
83
+ this._resizeObserver = new ResizeObserver(() => this.update());
84
+ this._resizeObserver.observe(this._scrollEl);
85
+ // Initial update
86
+ this.update();
87
+ }
88
+ // ============ Element Creation ============
89
+ _createTrack(axis) {
90
+ const el = document.createElement('div');
91
+ el.className = `ty-scrollbar-track-${axis}`;
92
+ return el;
93
+ }
94
+ _createThumb(axis) {
95
+ const el = document.createElement('div');
96
+ el.className = `ty-scrollbar-thumb-${axis}`;
97
+ return el;
98
+ }
99
+ // ============ Public API ============
100
+ /** Force update thumb size and position */
101
+ update() {
102
+ this._updateVertical();
103
+ this._updateHorizontal();
104
+ }
105
+ /** Reset scroll position */
106
+ scrollToTop(smooth = false) {
107
+ this._scrollEl.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' });
108
+ }
109
+ scrollToBottom(smooth = false) {
110
+ this._scrollEl.scrollTo({ top: this._scrollEl.scrollHeight, behavior: smooth ? 'smooth' : 'auto' });
111
+ }
112
+ scrollToLeft(smooth = false) {
113
+ this._scrollEl.scrollTo({ left: 0, behavior: smooth ? 'smooth' : 'auto' });
114
+ }
115
+ scrollToRight(smooth = false) {
116
+ this._scrollEl.scrollTo({ left: this._scrollEl.scrollWidth, behavior: smooth ? 'smooth' : 'auto' });
117
+ }
118
+ /** Cleanup all listeners and observers */
119
+ destroy() {
120
+ this._scrollEl.removeEventListener('scroll', this._onScroll);
121
+ if (this.thumbY) {
122
+ this.thumbY.removeEventListener('pointerdown', this._onThumbYDown);
123
+ }
124
+ if (this.trackY) {
125
+ this.trackY.removeEventListener('pointerdown', this._onTrackYDown);
126
+ }
127
+ if (this.thumbX) {
128
+ this.thumbX.removeEventListener('pointerdown', this._onThumbXDown);
129
+ }
130
+ if (this.trackX) {
131
+ this.trackX.removeEventListener('pointerdown', this._onTrackXDown);
132
+ }
133
+ if (this._resizeObserver) {
134
+ this._resizeObserver.disconnect();
135
+ this._resizeObserver = null;
136
+ }
137
+ if (this._rafId !== null) {
138
+ cancelAnimationFrame(this._rafId);
139
+ this._rafId = null;
140
+ }
141
+ if (this._hideTimeout !== null) {
142
+ clearTimeout(this._hideTimeout);
143
+ this._hideTimeout = null;
144
+ }
145
+ }
146
+ // ============ Scroll Handler ============
147
+ _handleScroll() {
148
+ if (this._rafId !== null)
149
+ return;
150
+ this._rafId = requestAnimationFrame(() => {
151
+ this._rafId = null;
152
+ this._updateThumbPositions();
153
+ this._showScrollbars();
154
+ });
155
+ }
156
+ // ============ Update Logic ============
157
+ _updateVertical() {
158
+ if (!this.trackY || !this.thumbY)
159
+ return;
160
+ const { scrollHeight, clientHeight } = this._scrollEl;
161
+ const hasOverflow = scrollHeight > clientHeight + 2;
162
+ this.trackY.classList.toggle('has-overflow', hasOverflow);
163
+ if (hasOverflow) {
164
+ const ratio = clientHeight / scrollHeight;
165
+ this.thumbY.style.height = `${Math.max(ratio * 100, 0)}%`;
166
+ }
167
+ this._updateThumbY();
168
+ }
169
+ _updateHorizontal() {
170
+ if (!this.trackX || !this.thumbX)
171
+ return;
172
+ const { scrollWidth, clientWidth } = this._scrollEl;
173
+ const hasOverflow = scrollWidth > clientWidth + 2;
174
+ this.trackX.classList.toggle('has-overflow', hasOverflow);
175
+ if (hasOverflow) {
176
+ const ratio = clientWidth / scrollWidth;
177
+ this.thumbX.style.width = `${Math.max(ratio * 100, 0)}%`;
178
+ }
179
+ this._updateThumbX();
180
+ }
181
+ _updateThumbPositions() {
182
+ this._updateThumbY();
183
+ this._updateThumbX();
184
+ }
185
+ _updateThumbY() {
186
+ if (!this.trackY || !this.thumbY)
187
+ return;
188
+ const { scrollTop, scrollHeight, clientHeight } = this._scrollEl;
189
+ const maxScroll = scrollHeight - clientHeight;
190
+ if (maxScroll <= 0)
191
+ return;
192
+ const scrollRatio = scrollTop / maxScroll;
193
+ const trackHeight = this.trackY.clientHeight;
194
+ const thumbHeight = this.thumbY.offsetHeight;
195
+ const maxThumbTop = trackHeight - thumbHeight;
196
+ this.thumbY.style.top = `${scrollRatio * maxThumbTop}px`;
197
+ }
198
+ _updateThumbX() {
199
+ if (!this.trackX || !this.thumbX)
200
+ return;
201
+ const { scrollLeft, scrollWidth, clientWidth } = this._scrollEl;
202
+ const maxScroll = scrollWidth - clientWidth;
203
+ if (maxScroll <= 0)
204
+ return;
205
+ const scrollRatio = scrollLeft / maxScroll;
206
+ const trackWidth = this.trackX.clientWidth;
207
+ const thumbWidth = this.thumbX.offsetWidth;
208
+ const maxThumbLeft = trackWidth - thumbWidth;
209
+ this.thumbX.style.left = `${scrollRatio * maxThumbLeft}px`;
210
+ }
211
+ // ============ Auto-hide ============
212
+ _showScrollbars() {
213
+ if (this._isDragging)
214
+ return;
215
+ this.trackY?.classList.add('scrolling');
216
+ this.trackX?.classList.add('scrolling');
217
+ if (this._hideTimeout !== null) {
218
+ clearTimeout(this._hideTimeout);
219
+ }
220
+ this._hideTimeout = setTimeout(() => {
221
+ this.trackY?.classList.remove('scrolling');
222
+ this.trackX?.classList.remove('scrolling');
223
+ this._hideTimeout = null;
224
+ }, this._autoHideDelay);
225
+ }
226
+ // ============ Thumb Drag ============
227
+ _handleThumbYDown(e) {
228
+ if (e.button !== 0)
229
+ return;
230
+ e.preventDefault();
231
+ e.stopPropagation();
232
+ this._isDragging = true;
233
+ this._dragAxis = 'y';
234
+ this._dragStartPos = e.clientY;
235
+ this._dragStartScroll = this._scrollEl.scrollTop;
236
+ this.thumbY.setPointerCapture(e.pointerId);
237
+ this.trackY?.classList.add('dragging');
238
+ this.thumbY.addEventListener('pointermove', this._onDragMove);
239
+ this.thumbY.addEventListener('pointerup', this._onDragEnd);
240
+ this.thumbY.addEventListener('pointercancel', this._onDragEnd);
241
+ }
242
+ _handleThumbXDown(e) {
243
+ if (e.button !== 0)
244
+ return;
245
+ e.preventDefault();
246
+ e.stopPropagation();
247
+ this._isDragging = true;
248
+ this._dragAxis = 'x';
249
+ this._dragStartPos = e.clientX;
250
+ this._dragStartScroll = this._scrollEl.scrollLeft;
251
+ this.thumbX.setPointerCapture(e.pointerId);
252
+ this.trackX?.classList.add('dragging');
253
+ this.thumbX.addEventListener('pointermove', this._onDragMove);
254
+ this.thumbX.addEventListener('pointerup', this._onDragEnd);
255
+ this.thumbX.addEventListener('pointercancel', this._onDragEnd);
256
+ }
257
+ _handleDragMove(e) {
258
+ if (!this._isDragging)
259
+ return;
260
+ if (this._dragAxis === 'y') {
261
+ const delta = e.clientY - this._dragStartPos;
262
+ const { scrollHeight, clientHeight } = this._scrollEl;
263
+ const trackHeight = this.trackY.clientHeight;
264
+ const thumbHeight = this.thumbY.offsetHeight;
265
+ const maxThumbTop = trackHeight - thumbHeight;
266
+ if (maxThumbTop <= 0)
267
+ return;
268
+ const scrollRatio = (scrollHeight - clientHeight) / maxThumbTop;
269
+ this._scrollEl.scrollTop = this._dragStartScroll + delta * scrollRatio;
270
+ }
271
+ else {
272
+ const delta = e.clientX - this._dragStartPos;
273
+ const { scrollWidth, clientWidth } = this._scrollEl;
274
+ const trackWidth = this.trackX.clientWidth;
275
+ const thumbWidth = this.thumbX.offsetWidth;
276
+ const maxThumbLeft = trackWidth - thumbWidth;
277
+ if (maxThumbLeft <= 0)
278
+ return;
279
+ const scrollRatio = (scrollWidth - clientWidth) / maxThumbLeft;
280
+ this._scrollEl.scrollLeft = this._dragStartScroll + delta * scrollRatio;
281
+ }
282
+ }
283
+ _handleDragEnd(e) {
284
+ const thumb = this._dragAxis === 'y' ? this.thumbY : this.thumbX;
285
+ const track = this._dragAxis === 'y' ? this.trackY : this.trackX;
286
+ this._isDragging = false;
287
+ thumb.releasePointerCapture(e.pointerId);
288
+ track?.classList.remove('dragging');
289
+ thumb.removeEventListener('pointermove', this._onDragMove);
290
+ thumb.removeEventListener('pointerup', this._onDragEnd);
291
+ thumb.removeEventListener('pointercancel', this._onDragEnd);
292
+ this._showScrollbars();
293
+ }
294
+ // ============ Track Click ============
295
+ _handleTrackYDown(e) {
296
+ if (e.target === this.thumbY || e.button !== 0)
297
+ return;
298
+ e.preventDefault();
299
+ const trackRect = this.trackY.getBoundingClientRect();
300
+ const clickRatio = (e.clientY - trackRect.top) / trackRect.height;
301
+ const { scrollHeight, clientHeight } = this._scrollEl;
302
+ this._scrollEl.scrollTo({
303
+ top: clickRatio * (scrollHeight - clientHeight),
304
+ behavior: 'smooth'
305
+ });
306
+ }
307
+ _handleTrackXDown(e) {
308
+ if (e.target === this.thumbX || e.button !== 0)
309
+ return;
310
+ e.preventDefault();
311
+ const trackRect = this.trackX.getBoundingClientRect();
312
+ const clickRatio = (e.clientX - trackRect.left) / trackRect.width;
313
+ const { scrollWidth, clientWidth } = this._scrollEl;
314
+ this._scrollEl.scrollTo({
315
+ left: clickRatio * (scrollWidth - clientWidth),
316
+ behavior: 'smooth'
317
+ });
318
+ }
319
+ }
320
+ //# sourceMappingURL=custom-scrollbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-scrollbar.js","sourceRoot":"","sources":["../../src/utils/custom-scrollbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,QAAQ,CAAA;AAChF,CAAC;AAED,MAAM,OAAO,eAAe;IA8B1B,YAAY,QAAqB,EAAE,UAAkC,EAAE;QAxBvE,WAAW;QACF,WAAM,GAAuB,IAAI,CAAA;QACjC,WAAM,GAAuB,IAAI,CAAA;QACjC,WAAM,GAAuB,IAAI,CAAA;QACjC,WAAM,GAAuB,IAAI,CAAA;QAE1C,QAAQ;QACA,gBAAW,GAAG,KAAK,CAAA;QACnB,cAAS,GAAc,GAAG,CAAA;QAC1B,kBAAa,GAAG,CAAC,CAAA;QACjB,qBAAgB,GAAG,CAAC,CAAA;QACpB,WAAM,GAAkB,IAAI,CAAA;QAC5B,iBAAY,GAAyC,IAAI,CAAA;QACzD,oBAAe,GAA0B,IAAI,CAAA;QAYnD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAA,CAAC,eAAe;QAC3D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAA;QAC9C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAA;QAEnD,gBAAgB;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhD,kBAAkB;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAE5E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACjE,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE5C,iBAAiB;QACjB,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC;IAED,6CAA6C;IAErC,YAAY,CAAC,IAAe;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,EAAE,CAAC,SAAS,GAAG,sBAAsB,IAAI,EAAE,CAAA;QAC3C,OAAO,EAAE,CAAA;IACX,CAAC;IAEO,YAAY,CAAC,IAAe;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,EAAE,CAAC,SAAS,GAAG,sBAAsB,IAAI,EAAE,CAAA;QAC3C,OAAO,EAAE,CAAA;IACX,CAAC;IAED,uCAAuC;IAEvC,2CAA2C;IAC3C,MAAM;QACJ,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC1B,CAAC;IAED,4BAA4B;IAC5B,WAAW,CAAC,MAAM,GAAG,KAAK;QACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,cAAc,CAAC,MAAM,GAAG,KAAK;QAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,YAAY,CAAC,MAAM,GAAG,KAAK;QACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,aAAa,CAAC,MAAM,GAAG,KAAK;QAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAE5D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QACpE,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAA;YACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,2CAA2C;IAEnC,aAAa;QACnB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,OAAM;QAEhC,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,yCAAyC;IAEjC,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QACrD,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,CAAC,CAAA;QAEnD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAEzD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,YAAY,GAAG,YAAY,CAAA;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAA;QAC3D,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QACnD,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,CAAC,CAAA;QAEjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAEzD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW,CAAA;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAA;QAC1D,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,qBAAqB;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAChE,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,CAAA;QAC7C,IAAI,SAAS,IAAI,CAAC;YAAE,OAAM;QAE1B,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAA;QAC5C,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;QAE7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,WAAW,GAAG,WAAW,IAAI,CAAA;IAC1D,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/D,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA;QAC3C,IAAI,SAAS,IAAI,CAAC;YAAE,OAAM;QAE1B,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;QAC1C,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAA;QAE5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,WAAW,GAAG,YAAY,IAAI,CAAA;IAC5D,CAAC;IAED,sCAAsC;IAE9B,eAAe;QACrB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QAE5B,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAEvC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACjC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAC1C,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;YAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;IACzB,CAAC;IAED,uCAAuC;IAE/B,iBAAiB,CAAC,CAAe;QACvC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC1B,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAA;QAEnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAA;QAEhD,IAAI,CAAC,MAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAEtC,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC9D,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC;IAEO,iBAAiB,CAAC,CAAe;QACvC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC1B,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,eAAe,EAAE,CAAA;QAEnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAA;QAEjD,IAAI,CAAC,MAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAEtC,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC9D,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC;IAEO,eAAe,CAAC,CAAe;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAE7B,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAA;YAC5C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAO,CAAC,YAAY,CAAA;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAO,CAAC,YAAY,CAAA;YAC7C,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;YAC7C,IAAI,WAAW,IAAI,CAAC;gBAAE,OAAM;YAC5B,MAAM,WAAW,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,WAAW,CAAA;YAC/D,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,GAAG,KAAK,GAAG,WAAW,CAAA;QACxE,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAA;YAC5C,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAO,CAAC,WAAW,CAAA;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAO,CAAC,WAAW,CAAA;YAC3C,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAA;YAC5C,IAAI,YAAY,IAAI,CAAC;gBAAE,OAAM;YAC7B,MAAM,WAAW,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,YAAY,CAAA;YAC9D,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAG,KAAK,GAAG,WAAW,CAAA;QACzE,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,CAAe;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAO,CAAA;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAEhE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QAExB,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACxC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAEnC,KAAK,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC1D,KAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACvD,KAAK,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAE3D,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,wCAAwC;IAEhC,iBAAiB,CAAC,CAAe;QACvC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QACtD,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAO,CAAC,qBAAqB,EAAE,CAAA;QACtD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAA;QACjE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAErD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,GAAG,EAAE,UAAU,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC;YAC/C,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAEO,iBAAiB,CAAC,CAAe;QACvC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QACtD,CAAC,CAAC,cAAc,EAAE,CAAA;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAO,CAAC,qBAAqB,EAAE,CAAA;QACtD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAA;QACjE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAEnD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,IAAI,EAAE,UAAU,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;YAC9C,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Icon Registry System
3
+ * Simple icon storage and retrieval with Cache API persistence
4
+ * PORTED FROM: clj/ty/icons.cljs
5
+ */
6
+ /**
7
+ * Read icon directly from cache (for immediate rendering)
8
+ * This is the key function that prevents icon twitching!
9
+ * @param name Icon name
10
+ * @returns Promise<string | null> - SVG string from cache or null
11
+ */
12
+ export declare function getCachedIcon(name: string): Promise<string | null>;
13
+ /**
14
+ * Register multiple icons at once
15
+ * Always updates memory and notifies watchers immediately
16
+ * Cache update happens in background (only if different from cached version)
17
+ * @param icons Object mapping icon names to SVG strings
18
+ */
19
+ export declare function registerIcons(icons: Record<string, string>): void;
20
+ /**
21
+ * Register a single icon
22
+ * Always updates memory and notifies watchers immediately
23
+ * Cache update happens in background (only if different from cached version)
24
+ * @param name Icon name
25
+ * @param svg SVG string
26
+ */
27
+ export declare function registerIcon(name: string, svg: string): void;
28
+ /**
29
+ * Lookup an icon by name from memory
30
+ * NOTE: This does NOT check cache - use getCachedIcon() for that
31
+ * @param name Icon name
32
+ * @returns SVG string or undefined
33
+ */
34
+ export declare function getIcon(name: string): string | undefined;
35
+ /**
36
+ * Check if an icon exists in memory
37
+ * NOTE: This does NOT check cache
38
+ * @param name Icon name
39
+ * @returns true if icon is registered in memory
40
+ */
41
+ export declare function hasIcon(name: string): boolean;
42
+ /**
43
+ * Clear all registered icons from memory and cache
44
+ */
45
+ export declare function clearIcons(): Promise<void>;
46
+ /**
47
+ * Add a watcher for registry changes
48
+ * @param id Unique watcher ID
49
+ * @param iconName Optional icon name to watch (for selective notification)
50
+ * @param callback Function to call when watched icons change
51
+ */
52
+ export declare function addWatcher(id: string, iconName: string | undefined, callback: (changedIcons: Set<string>) => void): void;
53
+ /**
54
+ * Remove a watcher
55
+ * @param id Watcher ID to remove
56
+ */
57
+ export declare function removeWatcher(id: string): void;
58
+ /**
59
+ * Get all registered icon names (memory only, not cache)
60
+ * @returns Array of icon names
61
+ */
62
+ export declare function getIconNames(): string[];
63
+ /**
64
+ * Get registry size (memory only)
65
+ * @returns Number of registered icons in memory
66
+ */
67
+ export declare function getIconCount(): number;
68
+ /**
69
+ * Get cache statistics
70
+ * @returns Promise with cache info
71
+ */
72
+ export declare function getCacheInfo(): Promise<{
73
+ version: string;
74
+ cacheName: string;
75
+ available: boolean;
76
+ iconCount?: number;
77
+ }>;
78
+ //# sourceMappingURL=icon-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-registry.d.ts","sourceRoot":"","sources":["../../src/utils/icon-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0EH;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCxE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA8BjE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAsB5D;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAehD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAC5C,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG9C;AAsDD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAsBD"}