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,437 @@
1
+ /**
2
+ * TyRadio + TyRadioGroup Web Components
3
+ *
4
+ * Exclusive selection within a group. ty-radio-group manages the selection
5
+ * value and form integration; ty-radio is the individual choice element.
6
+ *
7
+ * Composition (ty-multiselect-style):
8
+ * <ty-radio-group name="plan" value="pro" label="Plan">
9
+ * <ty-radio value="free">Free</ty-radio>
10
+ * <ty-radio value="pro">Pro</ty-radio>
11
+ * <ty-radio value="team">Team</ty-radio>
12
+ * </ty-radio-group>
13
+ *
14
+ * Keyboard:
15
+ * - Tab focuses the group's currently-selected (or first) radio
16
+ * - Arrow keys move focus AND selection within the group (per W3C ARIA)
17
+ * - Space/Enter selects the focused radio
18
+ */
19
+ import { TyComponent } from "../base/ty-component.js";
20
+ import { ensureStyles } from "../utils/styles.js";
21
+ import { radioStyles } from "../styles/radio.js";
22
+ const REQUIRED_ICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 6v12"/><path d="M17.196 9 6.804 15"/><path d="m6.804 9 10.392 6"/></svg>`;
23
+ export class TyRadio extends TyComponent {
24
+ constructor() {
25
+ super();
26
+ this._listenersSetup = false;
27
+ this._clickHandler = null;
28
+ this._focusHandler = null;
29
+ this._blurHandler = null;
30
+ const shadow = this.shadowRoot;
31
+ ensureStyles(shadow, { css: radioStyles, id: "ty-radio" });
32
+ }
33
+ onConnect() { }
34
+ onDisconnect() {
35
+ this.removeEventListeners();
36
+ }
37
+ onPropertiesChanged(_changes) { }
38
+ buildClassList() {
39
+ const classes = [this.size, this.flavor];
40
+ if (this.disabled)
41
+ classes.push("disabled");
42
+ return classes.join(" ");
43
+ }
44
+ handleClick(e) {
45
+ if (this.disabled)
46
+ return;
47
+ e.stopPropagation();
48
+ // Notify the group — group will set checked attribute on this and clear others
49
+ this.dispatchEvent(new CustomEvent("ty-radio-select", {
50
+ detail: { value: this.value },
51
+ bubbles: true,
52
+ composed: true,
53
+ }));
54
+ }
55
+ removeEventListeners() {
56
+ if (!this._listenersSetup)
57
+ return;
58
+ const el = this.shadowRoot?.querySelector(".radio-container");
59
+ if (!el)
60
+ return;
61
+ if (this._clickHandler) {
62
+ el.removeEventListener("click", this._clickHandler);
63
+ this._clickHandler = null;
64
+ }
65
+ if (this._focusHandler) {
66
+ el.removeEventListener("focus", this._focusHandler);
67
+ this._focusHandler = null;
68
+ }
69
+ if (this._blurHandler) {
70
+ el.removeEventListener("blur", this._blurHandler);
71
+ this._blurHandler = null;
72
+ }
73
+ this._listenersSetup = false;
74
+ }
75
+ setupEventListeners() {
76
+ if (this._listenersSetup)
77
+ return;
78
+ const el = this.shadowRoot.querySelector(".radio-container");
79
+ if (!el)
80
+ return;
81
+ this._clickHandler = (e) => this.handleClick(e);
82
+ this._focusHandler = () => el.classList.add("focused");
83
+ this._blurHandler = () => el.classList.remove("focused");
84
+ el.addEventListener("click", this._clickHandler);
85
+ el.addEventListener("focus", this._focusHandler);
86
+ el.addEventListener("blur", this._blurHandler);
87
+ this._listenersSetup = true;
88
+ }
89
+ render() {
90
+ const shadow = this.shadowRoot;
91
+ let radioEl = shadow.querySelector(".radio-container");
92
+ const classes = this.buildClassList();
93
+ if (!radioEl) {
94
+ radioEl = document.createElement("div");
95
+ radioEl.className = "radio-container " + classes;
96
+ radioEl.tabIndex = this.disabled ? -1 : 0;
97
+ radioEl.setAttribute("role", "radio");
98
+ radioEl.setAttribute("aria-checked", String(this.checked));
99
+ radioEl.setAttribute("aria-disabled", String(this.disabled));
100
+ const circle = document.createElement("div");
101
+ circle.className = "radio-circle";
102
+ radioEl.appendChild(circle);
103
+ shadow.appendChild(radioEl);
104
+ this.setupEventListeners();
105
+ }
106
+ else {
107
+ radioEl.className = "radio-container " + classes;
108
+ radioEl.tabIndex = this.disabled ? -1 : 0;
109
+ radioEl.setAttribute("aria-checked", String(this.checked));
110
+ radioEl.setAttribute("aria-disabled", String(this.disabled));
111
+ }
112
+ }
113
+ // Property accessors
114
+ get value() { return this.getProperty("value"); }
115
+ set value(v) { this.setProperty("value", v); }
116
+ get checked() { return this.getProperty("checked"); }
117
+ set checked(v) { this.setProperty("checked", v); }
118
+ get disabled() { return this.getProperty("disabled"); }
119
+ set disabled(v) { this.setProperty("disabled", v); }
120
+ get size() { return this.getProperty("size"); }
121
+ set size(v) { this.setProperty("size", v); }
122
+ get flavor() { return this.getProperty("flavor"); }
123
+ set flavor(v) { this.setProperty("flavor", v); }
124
+ }
125
+ TyRadio.properties = {
126
+ value: { type: "string", default: "" },
127
+ checked: {
128
+ type: "boolean",
129
+ visual: true,
130
+ default: false,
131
+ },
132
+ disabled: {
133
+ type: "boolean",
134
+ visual: true,
135
+ default: false,
136
+ },
137
+ size: {
138
+ type: "string",
139
+ visual: true,
140
+ default: "md",
141
+ },
142
+ flavor: {
143
+ type: "string",
144
+ visual: true,
145
+ default: "primary",
146
+ },
147
+ };
148
+ if (!customElements.get("ty-radio")) {
149
+ customElements.define("ty-radio", TyRadio);
150
+ }
151
+ export class TyRadioGroup extends TyComponent {
152
+ constructor() {
153
+ super();
154
+ this._listenersSetup = false;
155
+ this._selectHandler = null;
156
+ this._keydownHandler = null;
157
+ const shadow = this.shadowRoot;
158
+ ensureStyles(shadow, { css: radioStyles, id: "ty-radio-group" });
159
+ }
160
+ onConnect() {
161
+ // Sync radio children with current value once light DOM is ready
162
+ queueMicrotask(() => this.syncChildren());
163
+ }
164
+ onDisconnect() {
165
+ this.removeEventListeners();
166
+ }
167
+ onPropertiesChanged(changes) {
168
+ if (changes.some((c) => c.name === "value" || c.name === "size" || c.name === "flavor" || c.name === "disabled")) {
169
+ this.syncChildren();
170
+ }
171
+ }
172
+ getFormValue() {
173
+ return this.value || null;
174
+ }
175
+ /**
176
+ * Find ty-radio descendants in this group's light DOM. Searches deeply
177
+ * because consumers may wrap each radio in a `<label>` for click delegation.
178
+ */
179
+ getRadios() {
180
+ return Array.from(this.querySelectorAll("ty-radio"));
181
+ }
182
+ /**
183
+ * Push group state down to each radio child.
184
+ */
185
+ syncChildren() {
186
+ const radios = this.getRadios();
187
+ for (const radio of radios) {
188
+ radio.checked = radio.value === this.value;
189
+ // Inherit size/flavor/disabled from group unless radio set its own
190
+ if (this.disabled)
191
+ radio.disabled = true;
192
+ radio.size = this.size;
193
+ radio.flavor = this.flavor;
194
+ }
195
+ }
196
+ /**
197
+ * Handle a child's select request — update value, sync, emit change.
198
+ */
199
+ handleRadioSelect(e) {
200
+ if (this.disabled)
201
+ return;
202
+ const detail = e.detail;
203
+ const newValue = detail?.value;
204
+ if (typeof newValue !== "string" || newValue === this.value)
205
+ return;
206
+ this.value = newValue;
207
+ this.syncChildren();
208
+ setTimeout(() => {
209
+ const eventDetail = {
210
+ value: newValue,
211
+ formValue: newValue,
212
+ originalEvent: e,
213
+ };
214
+ this.dispatchEvent(new CustomEvent("input", { detail: eventDetail, bubbles: true, composed: true }));
215
+ this.dispatchEvent(new CustomEvent("change", { detail: eventDetail, bubbles: true, composed: true }));
216
+ }, 0);
217
+ }
218
+ /**
219
+ * Arrow-key navigation within group (W3C radio practice: arrow keys move
220
+ * focus and selection together).
221
+ */
222
+ handleKeydown(e) {
223
+ if (this.disabled)
224
+ return;
225
+ const radios = this.getRadios().filter((r) => !r.disabled);
226
+ if (radios.length === 0)
227
+ return;
228
+ const active = document.activeElement;
229
+ const current = radios.find((r) => r === active || r.contains(active));
230
+ let nextIndex = -1;
231
+ if (["ArrowDown", "ArrowRight"].includes(e.key)) {
232
+ e.preventDefault();
233
+ nextIndex = current ? (radios.indexOf(current) + 1) % radios.length : 0;
234
+ }
235
+ else if (["ArrowUp", "ArrowLeft"].includes(e.key)) {
236
+ e.preventDefault();
237
+ nextIndex = current
238
+ ? (radios.indexOf(current) - 1 + radios.length) % radios.length
239
+ : radios.length - 1;
240
+ }
241
+ else if (["Space", " ", "Enter"].includes(e.key)) {
242
+ if (current) {
243
+ e.preventDefault();
244
+ this.value = current.value;
245
+ this.syncChildren();
246
+ const eventDetail = {
247
+ value: current.value,
248
+ formValue: current.value,
249
+ originalEvent: e,
250
+ };
251
+ setTimeout(() => {
252
+ this.dispatchEvent(new CustomEvent("change", { detail: eventDetail, bubbles: true, composed: true }));
253
+ }, 0);
254
+ }
255
+ return;
256
+ }
257
+ else {
258
+ return;
259
+ }
260
+ const next = radios[nextIndex];
261
+ if (next) {
262
+ next.focus();
263
+ // Per W3C: arrow keys also change selection
264
+ this.value = next.value;
265
+ this.syncChildren();
266
+ const eventDetail = {
267
+ value: next.value,
268
+ formValue: next.value,
269
+ originalEvent: e,
270
+ };
271
+ setTimeout(() => {
272
+ this.dispatchEvent(new CustomEvent("change", { detail: eventDetail, bubbles: true, composed: true }));
273
+ }, 0);
274
+ }
275
+ }
276
+ removeEventListeners() {
277
+ if (!this._listenersSetup)
278
+ return;
279
+ if (this._selectHandler) {
280
+ this.removeEventListener("ty-radio-select", this._selectHandler);
281
+ this._selectHandler = null;
282
+ }
283
+ if (this._keydownHandler) {
284
+ this.removeEventListener("keydown", this._keydownHandler);
285
+ this._keydownHandler = null;
286
+ }
287
+ this._listenersSetup = false;
288
+ }
289
+ setupEventListeners() {
290
+ if (this._listenersSetup)
291
+ return;
292
+ this._selectHandler = (e) => this.handleRadioSelect(e);
293
+ this._keydownHandler = (e) => this.handleKeydown(e);
294
+ this.addEventListener("ty-radio-select", this._selectHandler);
295
+ this.addEventListener("keydown", this._keydownHandler);
296
+ this._listenersSetup = true;
297
+ }
298
+ render() {
299
+ const shadow = this.shadowRoot;
300
+ let container = shadow.querySelector(".radio-group-container");
301
+ if (!container) {
302
+ container = document.createElement("div");
303
+ container.className = "radio-group-container";
304
+ container.setAttribute("role", "radiogroup");
305
+ container.setAttribute("aria-disabled", String(this.disabled));
306
+ // Label
307
+ if (this.label) {
308
+ const labelEl = document.createElement("div");
309
+ labelEl.className = "radio-group-label";
310
+ labelEl.textContent = this.label;
311
+ if (this.required) {
312
+ const req = document.createElement("span");
313
+ req.className = "required-icon";
314
+ req.innerHTML = REQUIRED_ICON_SVG;
315
+ labelEl.appendChild(req);
316
+ }
317
+ container.appendChild(labelEl);
318
+ }
319
+ // List wrapper that hosts the slot
320
+ const list = document.createElement("div");
321
+ list.className = "radio-group-list " + this.orientation;
322
+ const slot = document.createElement("slot");
323
+ list.appendChild(slot);
324
+ container.appendChild(list);
325
+ if (this.error) {
326
+ const errorEl = document.createElement("div");
327
+ errorEl.className = "radio-group-error";
328
+ errorEl.textContent = this.error;
329
+ container.appendChild(errorEl);
330
+ }
331
+ shadow.appendChild(container);
332
+ this.setupEventListeners();
333
+ }
334
+ else {
335
+ // Update label
336
+ let labelEl = container.querySelector(".radio-group-label");
337
+ if (this.label) {
338
+ if (!labelEl) {
339
+ labelEl = document.createElement("div");
340
+ labelEl.className = "radio-group-label";
341
+ container.insertBefore(labelEl, container.firstChild);
342
+ }
343
+ labelEl.textContent = this.label;
344
+ if (this.required && !labelEl.querySelector(".required-icon")) {
345
+ const req = document.createElement("span");
346
+ req.className = "required-icon";
347
+ req.innerHTML = REQUIRED_ICON_SVG;
348
+ labelEl.appendChild(req);
349
+ }
350
+ else if (!this.required) {
351
+ labelEl.querySelector(".required-icon")?.remove();
352
+ }
353
+ }
354
+ else if (labelEl) {
355
+ labelEl.remove();
356
+ }
357
+ // Update orientation
358
+ const list = container.querySelector(".radio-group-list");
359
+ if (list)
360
+ list.className = "radio-group-list " + this.orientation;
361
+ // Update error
362
+ let errorEl = container.querySelector(".radio-group-error");
363
+ if (this.error) {
364
+ if (!errorEl) {
365
+ errorEl = document.createElement("div");
366
+ errorEl.className = "radio-group-error";
367
+ container.appendChild(errorEl);
368
+ }
369
+ errorEl.textContent = this.error;
370
+ }
371
+ else if (errorEl) {
372
+ errorEl.remove();
373
+ }
374
+ container.setAttribute("aria-disabled", String(this.disabled));
375
+ }
376
+ // Always sync child radios after render
377
+ this.syncChildren();
378
+ }
379
+ // Property accessors
380
+ get value() { return this.getProperty("value"); }
381
+ set value(v) { this.setProperty("value", v); }
382
+ get name() { return this.getProperty("name"); }
383
+ set name(v) { this.setProperty("name", v); }
384
+ get label() { return this.getProperty("label"); }
385
+ set label(v) { this.setProperty("label", v); }
386
+ get disabled() { return this.getProperty("disabled"); }
387
+ set disabled(v) { this.setProperty("disabled", v); }
388
+ get required() { return this.getProperty("required"); }
389
+ set required(v) { this.setProperty("required", v); }
390
+ get error() { return this.getProperty("error"); }
391
+ set error(v) { this.setProperty("error", v); }
392
+ get orientation() {
393
+ return this.getProperty("orientation");
394
+ }
395
+ set orientation(v) {
396
+ this.setProperty("orientation", v);
397
+ }
398
+ get size() { return this.getProperty("size"); }
399
+ set size(v) { this.setProperty("size", v); }
400
+ get flavor() { return this.getProperty("flavor"); }
401
+ set flavor(v) { this.setProperty("flavor", v); }
402
+ get form() { return this._internals.form; }
403
+ }
404
+ TyRadioGroup.formAssociated = true;
405
+ TyRadioGroup.properties = {
406
+ value: {
407
+ type: "string",
408
+ visual: true,
409
+ formValue: true,
410
+ emitChange: true,
411
+ default: "",
412
+ },
413
+ name: { type: "string", default: "" },
414
+ label: { type: "string", visual: true, default: "" },
415
+ disabled: { type: "boolean", visual: true, default: false },
416
+ required: { type: "boolean", visual: true, default: false },
417
+ error: { type: "string", visual: true, default: "" },
418
+ orientation: {
419
+ type: "string",
420
+ visual: true,
421
+ default: "vertical",
422
+ },
423
+ size: {
424
+ type: "string",
425
+ visual: true,
426
+ default: "md",
427
+ },
428
+ flavor: {
429
+ type: "string",
430
+ visual: true,
431
+ default: "primary",
432
+ },
433
+ };
434
+ if (!customElements.get("ty-radio-group")) {
435
+ customElements.define("ty-radio-group", TyRadioGroup);
436
+ }
437
+ //# sourceMappingURL=radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/components/radio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * TyResizeObserver Web Component
3
+ *
4
+ * Self-observing resize component that tracks its own dimensions
5
+ * and stores them in a global registry accessible by element ID.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <ty-resize-observer id="parent-container">
10
+ * <div class="child">
11
+ * <!-- Child can query parent size via getSize('parent-container') -->
12
+ * </div>
13
+ * </ty-resize-observer>
14
+ * ```
15
+ *
16
+ * @example With debouncing
17
+ * ```html
18
+ * <ty-resize-observer id="container" debounce="100">
19
+ * <!-- Only updates after 100ms of no resize activity -->
20
+ * </ty-resize-observer>
21
+ * ```
22
+ */
23
+ export declare class TyResizeObserver extends HTMLElement {
24
+ private _resizeObserver;
25
+ private _debounceTimer;
26
+ static get observedAttributes(): string[];
27
+ /**
28
+ * Debounce in milliseconds (default: 0 = no debounce)
29
+ */
30
+ get debounce(): number;
31
+ set debounce(value: number);
32
+ constructor();
33
+ connectedCallback(): void;
34
+ disconnectedCallback(): void;
35
+ /**
36
+ * Setup ResizeObserver to watch this element
37
+ */
38
+ private setupObserver;
39
+ /**
40
+ * Handle resize events - update registry and notify callbacks
41
+ */
42
+ private handleResize;
43
+ /**
44
+ * Cleanup observer and remove from registry
45
+ */
46
+ private cleanup;
47
+ }
48
+ //# sourceMappingURL=resize-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-observer.d.ts","sourceRoot":"","sources":["../../src/components/resize-observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,cAAc,CAAsB;IAE5C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;;IAaD,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAI5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,OAAO;CAkBhB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * TyResizeObserver Web Component
3
+ *
4
+ * Self-observing resize component that tracks its own dimensions
5
+ * and stores them in a global registry accessible by element ID.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <ty-resize-observer id="parent-container">
10
+ * <div class="child">
11
+ * <!-- Child can query parent size via getSize('parent-container') -->
12
+ * </div>
13
+ * </ty-resize-observer>
14
+ * ```
15
+ *
16
+ * @example With debouncing
17
+ * ```html
18
+ * <ty-resize-observer id="container" debounce="100">
19
+ * <!-- Only updates after 100ms of no resize activity -->
20
+ * </ty-resize-observer>
21
+ * ```
22
+ */
23
+ import { ensureStyles } from '../utils/styles.js';
24
+ import { resizeObserverStyles } from '../styles/resize-observer.js';
25
+ import { updateSize, removeSize } from '../utils/resize-observer.js';
26
+ export class TyResizeObserver extends HTMLElement {
27
+ static get observedAttributes() {
28
+ return ['id', 'debounce'];
29
+ }
30
+ /**
31
+ * Debounce in milliseconds (default: 0 = no debounce)
32
+ */
33
+ get debounce() {
34
+ return parseInt(this.getAttribute('debounce') || '0');
35
+ }
36
+ set debounce(value) {
37
+ this.setAttribute('debounce', String(value));
38
+ }
39
+ constructor() {
40
+ super();
41
+ this._resizeObserver = null;
42
+ this._debounceTimer = null;
43
+ // Setup shadow DOM with styles
44
+ const shadow = this.attachShadow({ mode: 'open' });
45
+ ensureStyles(shadow, { css: resizeObserverStyles, id: 'ty-resize-observer' });
46
+ // Simple slot for content
47
+ shadow.innerHTML = '<slot></slot>';
48
+ }
49
+ connectedCallback() {
50
+ this.setupObserver();
51
+ }
52
+ disconnectedCallback() {
53
+ this.cleanup();
54
+ }
55
+ /**
56
+ * Setup ResizeObserver to watch this element
57
+ */
58
+ setupObserver() {
59
+ this._resizeObserver = new ResizeObserver((entries) => {
60
+ if (this.debounce > 0) {
61
+ // Debounced handling
62
+ if (this._debounceTimer)
63
+ clearTimeout(this._debounceTimer);
64
+ this._debounceTimer = window.setTimeout(() => {
65
+ this.handleResize(entries);
66
+ }, this.debounce);
67
+ }
68
+ else {
69
+ // Immediate handling
70
+ this.handleResize(entries);
71
+ }
72
+ });
73
+ // Observe the custom element itself (not shadow root)
74
+ this._resizeObserver.observe(this);
75
+ }
76
+ /**
77
+ * Handle resize events - update registry and notify callbacks
78
+ */
79
+ handleResize(entries) {
80
+ const { width, height } = entries[0].contentRect;
81
+ // Only update if element has an ID
82
+ if (this.id) {
83
+ updateSize(this.id, width, height);
84
+ }
85
+ }
86
+ /**
87
+ * Cleanup observer and remove from registry
88
+ */
89
+ cleanup() {
90
+ // Disconnect observer
91
+ if (this._resizeObserver) {
92
+ this._resizeObserver.disconnect();
93
+ this._resizeObserver = null;
94
+ }
95
+ // Clear pending debounce timer
96
+ if (this._debounceTimer) {
97
+ clearTimeout(this._debounceTimer);
98
+ this._debounceTimer = null;
99
+ }
100
+ // Remove from registry
101
+ if (this.id) {
102
+ removeSize(this.id);
103
+ }
104
+ }
105
+ }
106
+ // Register custom element
107
+ customElements.define('ty-resize-observer', TyResizeObserver);
108
+ //# sourceMappingURL=resize-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-observer.js","sourceRoot":"","sources":["../../src/components/resize-observer.ts"],"names":[],"mappings":"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"}