tyrell-components 1.0.0-RC13 → 1.0.0-RC15

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 (358) hide show
  1. package/README.md +10 -2
  2. package/css/tyrell-theme.css +192 -180
  3. package/css/tyrell.css +23 -0
  4. package/dist/tyrell-colors-static.css +1 -316
  5. package/dist/tyrell-theme.css +1 -1454
  6. package/dist/tyrell.css +1 -1371
  7. package/dist/tyrell.js +1 -1
  8. package/lib/base/ty-component.d.ts +20 -10
  9. package/lib/base/ty-component.js +196 -319
  10. package/lib/components/button.d.ts +3 -17
  11. package/lib/components/button.js +261 -295
  12. package/lib/components/calendar-month.d.ts +4 -50
  13. package/lib/components/calendar-month.js +443 -582
  14. package/lib/components/calendar-navigation.d.ts +3 -48
  15. package/lib/components/calendar-navigation.js +239 -362
  16. package/lib/components/calendar.d.ts +8 -83
  17. package/lib/components/calendar.js +616 -829
  18. package/lib/components/checkbox.d.ts +5 -72
  19. package/lib/components/checkbox.js +273 -416
  20. package/lib/components/copy.d.ts +4 -57
  21. package/lib/components/copy.js +280 -397
  22. package/lib/components/date-picker.d.ts +21 -163
  23. package/lib/components/date-picker.js +1143 -1674
  24. package/lib/components/file-upload.d.ts +9 -15
  25. package/lib/components/file-upload.js +404 -426
  26. package/lib/components/icon.d.ts +3 -24
  27. package/lib/components/icon.js +141 -230
  28. package/lib/components/input.d.ts +8 -108
  29. package/lib/components/input.js +593 -784
  30. package/lib/components/modal.d.ts +17 -26
  31. package/lib/components/modal.js +340 -484
  32. package/lib/components/option.d.ts +2 -9
  33. package/lib/components/option.js +168 -216
  34. package/lib/components/popup.d.ts +2 -17
  35. package/lib/components/popup.js +249 -380
  36. package/lib/components/radio.d.ts +5 -25
  37. package/lib/components/radio.js +407 -461
  38. package/lib/components/resize-observer.d.ts +3 -30
  39. package/lib/components/resize-observer.js +69 -103
  40. package/lib/components/scroll-container.d.ts +2 -12
  41. package/lib/components/scroll-container.js +293 -338
  42. package/lib/components/select.d.ts +87 -159
  43. package/lib/components/select.js +1609 -2090
  44. package/lib/components/selected-tags.d.ts +5 -48
  45. package/lib/components/selected-tags.js +188 -276
  46. package/lib/components/step.d.ts +1 -6
  47. package/lib/components/step.js +62 -68
  48. package/lib/components/switch.d.ts +1 -12
  49. package/lib/components/switch.js +214 -247
  50. package/lib/components/tab.d.ts +1 -6
  51. package/lib/components/tab.js +62 -69
  52. package/lib/components/tabs.d.ts +6 -63
  53. package/lib/components/tabs.js +545 -777
  54. package/lib/components/tag.d.ts +3 -37
  55. package/lib/components/tag.js +236 -335
  56. package/lib/components/textarea.d.ts +7 -87
  57. package/lib/components/textarea.js +457 -627
  58. package/lib/components/tooltip.d.ts +3 -11
  59. package/lib/components/tooltip.js +307 -443
  60. package/lib/components/wizard.d.ts +6 -54
  61. package/lib/components/wizard.js +405 -618
  62. package/lib/icons/fontawesome/brands.d.ts +0 -1
  63. package/lib/icons/fontawesome/brands.js +0 -8
  64. package/lib/icons/fontawesome/regular.d.ts +0 -1
  65. package/lib/icons/fontawesome/regular.js +0 -8
  66. package/lib/icons/fontawesome/solid.d.ts +0 -1
  67. package/lib/icons/fontawesome/solid.js +0 -8
  68. package/lib/icons/heroicons/micro.d.ts +0 -1
  69. package/lib/icons/heroicons/micro.js +392 -400
  70. package/lib/icons/heroicons/mini.d.ts +0 -1
  71. package/lib/icons/heroicons/mini.js +382 -390
  72. package/lib/icons/heroicons/outline.d.ts +0 -1
  73. package/lib/icons/heroicons/outline.js +337 -345
  74. package/lib/icons/heroicons/solid.d.ts +0 -1
  75. package/lib/icons/heroicons/solid.js +407 -415
  76. package/lib/icons/lucide.d.ts +0 -1
  77. package/lib/icons/lucide.js +24479 -26351
  78. package/lib/icons/material/filled.d.ts +0 -1
  79. package/lib/icons/material/filled.js +9653 -9663
  80. package/lib/icons/material/outlined.d.ts +0 -1
  81. package/lib/icons/material/outlined.js +10271 -10281
  82. package/lib/icons/material/round.d.ts +0 -1
  83. package/lib/icons/material/round.js +10495 -10505
  84. package/lib/icons/material/sharp.d.ts +0 -1
  85. package/lib/icons/material/sharp.js +9905 -9915
  86. package/lib/icons/material/two-tone.d.ts +0 -1
  87. package/lib/icons/material/two-tone.js +12792 -12802
  88. package/lib/index.d.ts +0 -1
  89. package/lib/index.js +21 -41
  90. package/lib/styles/button.d.ts +2 -20
  91. package/lib/styles/button.js +202 -404
  92. package/lib/styles/calendar-month.d.ts +1 -5
  93. package/lib/styles/calendar-month.js +127 -244
  94. package/lib/styles/calendar-navigation.d.ts +2 -6
  95. package/lib/styles/calendar-navigation.js +64 -104
  96. package/lib/styles/calendar.d.ts +1 -2
  97. package/lib/styles/calendar.js +9 -22
  98. package/lib/styles/checkbox.d.ts +0 -1
  99. package/lib/styles/checkbox.js +45 -94
  100. package/lib/styles/copy.d.ts +0 -1
  101. package/lib/styles/copy.js +67 -106
  102. package/lib/styles/custom-scrollbar.d.ts +1 -2
  103. package/lib/styles/custom-scrollbar.js +80 -115
  104. package/lib/styles/date-picker.d.ts +1 -5
  105. package/lib/styles/date-picker.js +261 -335
  106. package/lib/styles/field-size.d.ts +6 -0
  107. package/lib/styles/field-size.js +91 -0
  108. package/lib/styles/file-upload.d.ts +1 -2
  109. package/lib/styles/file-upload.js +143 -188
  110. package/lib/styles/icon.d.ts +2 -6
  111. package/lib/styles/icon.js +92 -170
  112. package/lib/styles/input.d.ts +1 -6
  113. package/lib/styles/input.js +125 -290
  114. package/lib/styles/modal.d.ts +1 -2
  115. package/lib/styles/modal.js +71 -108
  116. package/lib/styles/option.d.ts +2 -6
  117. package/lib/styles/option.js +49 -64
  118. package/lib/styles/popup.d.ts +1 -2
  119. package/lib/styles/popup.js +42 -77
  120. package/lib/styles/radio.d.ts +0 -1
  121. package/lib/styles/radio.js +69 -110
  122. package/lib/styles/resize-observer.d.ts +1 -2
  123. package/lib/styles/resize-observer.js +2 -12
  124. package/lib/styles/scroll-container.d.ts +1 -2
  125. package/lib/styles/scroll-container.js +100 -149
  126. package/lib/styles/select-base.d.ts +0 -1
  127. package/lib/styles/select-base.js +597 -785
  128. package/lib/styles/select.d.ts +1 -2
  129. package/lib/styles/select.js +140 -236
  130. package/lib/styles/step.d.ts +1 -2
  131. package/lib/styles/step.js +22 -33
  132. package/lib/styles/switch.d.ts +0 -1
  133. package/lib/styles/switch.js +34 -73
  134. package/lib/styles/tab.d.ts +1 -2
  135. package/lib/styles/tab.js +22 -34
  136. package/lib/styles/tabs.d.ts +3 -11
  137. package/lib/styles/tabs.js +190 -222
  138. package/lib/styles/tag.d.ts +1 -5
  139. package/lib/styles/tag.js +136 -218
  140. package/lib/styles/textarea.d.ts +1 -2
  141. package/lib/styles/textarea.js +210 -319
  142. package/lib/styles/tooltip.d.ts +0 -1
  143. package/lib/styles/tooltip.js +3 -13
  144. package/lib/styles/wizard.d.ts +5 -21
  145. package/lib/styles/wizard.js +170 -306
  146. package/lib/types/common.d.ts +2 -2
  147. package/lib/types/common.js +6 -17
  148. package/lib/utils/calendar-utils.d.ts +4 -21
  149. package/lib/utils/calendar-utils.js +100 -273
  150. package/lib/utils/custom-scrollbar.d.ts +6 -20
  151. package/lib/utils/custom-scrollbar.js +273 -317
  152. package/lib/utils/flavor-sheet.d.ts +0 -1
  153. package/lib/utils/flavor-sheet.js +14 -37
  154. package/lib/utils/icon-registry.d.ts +0 -2
  155. package/lib/utils/icon-registry.js +137 -243
  156. package/lib/utils/icons.d.ts +0 -1
  157. package/lib/utils/icons.js +0 -9
  158. package/lib/utils/loader-registry.d.ts +0 -1
  159. package/lib/utils/loader-registry.js +3 -35
  160. package/lib/utils/locale.d.ts +2 -23
  161. package/lib/utils/locale.js +34 -120
  162. package/lib/utils/mobile.d.ts +0 -1
  163. package/lib/utils/mobile.js +1 -18
  164. package/lib/utils/number-format.d.ts +6 -3
  165. package/lib/utils/number-format.js +54 -110
  166. package/lib/utils/positioning.d.ts +50 -7
  167. package/lib/utils/positioning.js +224 -234
  168. package/lib/utils/property-capture.d.ts +5 -27
  169. package/lib/utils/property-capture.js +36 -144
  170. package/lib/utils/property-manager.d.ts +0 -1
  171. package/lib/utils/property-manager.js +126 -196
  172. package/lib/utils/resize-observer.d.ts +0 -1
  173. package/lib/utils/resize-observer.js +23 -59
  174. package/lib/utils/scroll-lock.d.ts +4 -11
  175. package/lib/utils/scroll-lock.js +65 -172
  176. package/lib/utils/styles.d.ts +0 -1
  177. package/lib/utils/styles.js +17 -41
  178. package/lib/version.d.ts +1 -2
  179. package/lib/version.js +1 -11
  180. package/package.json +4 -4
  181. package/lib/base/ty-component.d.ts.map +0 -1
  182. package/lib/base/ty-component.js.map +0 -1
  183. package/lib/components/button.d.ts.map +0 -1
  184. package/lib/components/button.js.map +0 -1
  185. package/lib/components/calendar-month.d.ts.map +0 -1
  186. package/lib/components/calendar-month.js.map +0 -1
  187. package/lib/components/calendar-navigation.d.ts.map +0 -1
  188. package/lib/components/calendar-navigation.js.map +0 -1
  189. package/lib/components/calendar.d.ts.map +0 -1
  190. package/lib/components/calendar.js.map +0 -1
  191. package/lib/components/checkbox.d.ts.map +0 -1
  192. package/lib/components/checkbox.js.map +0 -1
  193. package/lib/components/copy.d.ts.map +0 -1
  194. package/lib/components/copy.js.map +0 -1
  195. package/lib/components/date-picker.d.ts.map +0 -1
  196. package/lib/components/date-picker.js.map +0 -1
  197. package/lib/components/file-upload.d.ts.map +0 -1
  198. package/lib/components/file-upload.js.map +0 -1
  199. package/lib/components/icon.d.ts.map +0 -1
  200. package/lib/components/icon.js.map +0 -1
  201. package/lib/components/input.d.ts.map +0 -1
  202. package/lib/components/input.js.map +0 -1
  203. package/lib/components/modal.d.ts.map +0 -1
  204. package/lib/components/modal.js.map +0 -1
  205. package/lib/components/option.d.ts.map +0 -1
  206. package/lib/components/option.js.map +0 -1
  207. package/lib/components/popup.d.ts.map +0 -1
  208. package/lib/components/popup.js.map +0 -1
  209. package/lib/components/radio.d.ts.map +0 -1
  210. package/lib/components/radio.js.map +0 -1
  211. package/lib/components/resize-observer.d.ts.map +0 -1
  212. package/lib/components/resize-observer.js.map +0 -1
  213. package/lib/components/scroll-container.d.ts.map +0 -1
  214. package/lib/components/scroll-container.js.map +0 -1
  215. package/lib/components/select.d.ts.map +0 -1
  216. package/lib/components/select.js.map +0 -1
  217. package/lib/components/selected-tags.d.ts.map +0 -1
  218. package/lib/components/selected-tags.js.map +0 -1
  219. package/lib/components/step.d.ts.map +0 -1
  220. package/lib/components/step.js.map +0 -1
  221. package/lib/components/switch.d.ts.map +0 -1
  222. package/lib/components/switch.js.map +0 -1
  223. package/lib/components/tab.d.ts.map +0 -1
  224. package/lib/components/tab.js.map +0 -1
  225. package/lib/components/tabs.d.ts.map +0 -1
  226. package/lib/components/tabs.js.map +0 -1
  227. package/lib/components/tag.d.ts.map +0 -1
  228. package/lib/components/tag.js.map +0 -1
  229. package/lib/components/textarea.d.ts.map +0 -1
  230. package/lib/components/textarea.js.map +0 -1
  231. package/lib/components/tooltip.d.ts.map +0 -1
  232. package/lib/components/tooltip.js.map +0 -1
  233. package/lib/components/wizard.d.ts.map +0 -1
  234. package/lib/components/wizard.js.map +0 -1
  235. package/lib/icons/fontawesome/brands.d.ts.map +0 -1
  236. package/lib/icons/fontawesome/brands.js.map +0 -1
  237. package/lib/icons/fontawesome/regular.d.ts.map +0 -1
  238. package/lib/icons/fontawesome/regular.js.map +0 -1
  239. package/lib/icons/fontawesome/solid.d.ts.map +0 -1
  240. package/lib/icons/fontawesome/solid.js.map +0 -1
  241. package/lib/icons/heroicons/micro.d.ts.map +0 -1
  242. package/lib/icons/heroicons/micro.js.map +0 -1
  243. package/lib/icons/heroicons/mini.d.ts.map +0 -1
  244. package/lib/icons/heroicons/mini.js.map +0 -1
  245. package/lib/icons/heroicons/outline.d.ts.map +0 -1
  246. package/lib/icons/heroicons/outline.js.map +0 -1
  247. package/lib/icons/heroicons/solid.d.ts.map +0 -1
  248. package/lib/icons/heroicons/solid.js.map +0 -1
  249. package/lib/icons/lucide.d.ts.map +0 -1
  250. package/lib/icons/lucide.js.map +0 -1
  251. package/lib/icons/material/filled.d.ts.map +0 -1
  252. package/lib/icons/material/filled.js.map +0 -1
  253. package/lib/icons/material/outlined.d.ts.map +0 -1
  254. package/lib/icons/material/outlined.js.map +0 -1
  255. package/lib/icons/material/round.d.ts.map +0 -1
  256. package/lib/icons/material/round.js.map +0 -1
  257. package/lib/icons/material/sharp.d.ts.map +0 -1
  258. package/lib/icons/material/sharp.js.map +0 -1
  259. package/lib/icons/material/two-tone.d.ts.map +0 -1
  260. package/lib/icons/material/two-tone.js.map +0 -1
  261. package/lib/index.d.ts.map +0 -1
  262. package/lib/index.js.map +0 -1
  263. package/lib/styles/button.d.ts.map +0 -1
  264. package/lib/styles/button.js.map +0 -1
  265. package/lib/styles/calendar-month.d.ts.map +0 -1
  266. package/lib/styles/calendar-month.js.map +0 -1
  267. package/lib/styles/calendar-navigation.d.ts.map +0 -1
  268. package/lib/styles/calendar-navigation.js.map +0 -1
  269. package/lib/styles/calendar.d.ts.map +0 -1
  270. package/lib/styles/calendar.js.map +0 -1
  271. package/lib/styles/checkbox.d.ts.map +0 -1
  272. package/lib/styles/checkbox.js.map +0 -1
  273. package/lib/styles/copy.d.ts.map +0 -1
  274. package/lib/styles/copy.js.map +0 -1
  275. package/lib/styles/custom-scrollbar.d.ts.map +0 -1
  276. package/lib/styles/custom-scrollbar.js.map +0 -1
  277. package/lib/styles/date-picker.d.ts.map +0 -1
  278. package/lib/styles/date-picker.js.map +0 -1
  279. package/lib/styles/file-upload.d.ts.map +0 -1
  280. package/lib/styles/file-upload.js.map +0 -1
  281. package/lib/styles/icon.d.ts.map +0 -1
  282. package/lib/styles/icon.js.map +0 -1
  283. package/lib/styles/input.d.ts.map +0 -1
  284. package/lib/styles/input.js.map +0 -1
  285. package/lib/styles/modal.d.ts.map +0 -1
  286. package/lib/styles/modal.js.map +0 -1
  287. package/lib/styles/multiselect.d.ts +0 -8
  288. package/lib/styles/multiselect.d.ts.map +0 -1
  289. package/lib/styles/multiselect.js +0 -849
  290. package/lib/styles/multiselect.js.map +0 -1
  291. package/lib/styles/option.d.ts.map +0 -1
  292. package/lib/styles/option.js.map +0 -1
  293. package/lib/styles/popup.d.ts.map +0 -1
  294. package/lib/styles/popup.js.map +0 -1
  295. package/lib/styles/radio.d.ts.map +0 -1
  296. package/lib/styles/radio.js.map +0 -1
  297. package/lib/styles/resize-observer.d.ts.map +0 -1
  298. package/lib/styles/resize-observer.js.map +0 -1
  299. package/lib/styles/scroll-container.d.ts.map +0 -1
  300. package/lib/styles/scroll-container.js.map +0 -1
  301. package/lib/styles/select-base.d.ts.map +0 -1
  302. package/lib/styles/select-base.js.map +0 -1
  303. package/lib/styles/select.d.ts.map +0 -1
  304. package/lib/styles/select.js.map +0 -1
  305. package/lib/styles/step.d.ts.map +0 -1
  306. package/lib/styles/step.js.map +0 -1
  307. package/lib/styles/switch.d.ts.map +0 -1
  308. package/lib/styles/switch.js.map +0 -1
  309. package/lib/styles/tab.d.ts.map +0 -1
  310. package/lib/styles/tab.js.map +0 -1
  311. package/lib/styles/tabs.d.ts.map +0 -1
  312. package/lib/styles/tabs.js.map +0 -1
  313. package/lib/styles/tag.d.ts.map +0 -1
  314. package/lib/styles/tag.js.map +0 -1
  315. package/lib/styles/textarea.d.ts.map +0 -1
  316. package/lib/styles/textarea.js.map +0 -1
  317. package/lib/styles/tooltip.d.ts.map +0 -1
  318. package/lib/styles/tooltip.js.map +0 -1
  319. package/lib/styles/wizard.d.ts.map +0 -1
  320. package/lib/styles/wizard.js.map +0 -1
  321. package/lib/types/common.d.ts.map +0 -1
  322. package/lib/types/common.js.map +0 -1
  323. package/lib/utils/calendar-utils.d.ts.map +0 -1
  324. package/lib/utils/calendar-utils.js.map +0 -1
  325. package/lib/utils/custom-scrollbar.d.ts.map +0 -1
  326. package/lib/utils/custom-scrollbar.js.map +0 -1
  327. package/lib/utils/flavor-sheet.d.ts.map +0 -1
  328. package/lib/utils/flavor-sheet.js.map +0 -1
  329. package/lib/utils/icon-registry.d.ts.map +0 -1
  330. package/lib/utils/icon-registry.js.map +0 -1
  331. package/lib/utils/icons.d.ts.map +0 -1
  332. package/lib/utils/icons.js.map +0 -1
  333. package/lib/utils/loader-registry.d.ts.map +0 -1
  334. package/lib/utils/loader-registry.js.map +0 -1
  335. package/lib/utils/locale.d.ts.map +0 -1
  336. package/lib/utils/locale.js.map +0 -1
  337. package/lib/utils/mobile.d.ts.map +0 -1
  338. package/lib/utils/mobile.js.map +0 -1
  339. package/lib/utils/number-format.d.ts.map +0 -1
  340. package/lib/utils/number-format.js.map +0 -1
  341. package/lib/utils/parse-boolean.d.ts +0 -39
  342. package/lib/utils/parse-boolean.d.ts.map +0 -1
  343. package/lib/utils/parse-boolean.js +0 -58
  344. package/lib/utils/parse-boolean.js.map +0 -1
  345. package/lib/utils/positioning.d.ts.map +0 -1
  346. package/lib/utils/positioning.js.map +0 -1
  347. package/lib/utils/property-capture.d.ts.map +0 -1
  348. package/lib/utils/property-capture.js.map +0 -1
  349. package/lib/utils/property-manager.d.ts.map +0 -1
  350. package/lib/utils/property-manager.js.map +0 -1
  351. package/lib/utils/resize-observer.d.ts.map +0 -1
  352. package/lib/utils/resize-observer.js.map +0 -1
  353. package/lib/utils/scroll-lock.d.ts.map +0 -1
  354. package/lib/utils/scroll-lock.js.map +0 -1
  355. package/lib/utils/styles.d.ts.map +0 -1
  356. package/lib/utils/styles.js.map +0 -1
  357. package/lib/version.d.ts.map +0 -1
  358. package/lib/version.js.map +0 -1
@@ -1,352 +1,253 @@
1
- /**
2
- * TyTag Web Component
3
- * PORTED FROM: clj/ty/components/tag.cljs
4
- * Tag component with slots and semantic flavors
5
- */
1
+ import { DEFAULT_SIZE } from "../types/common.js";
6
2
  import { syncCustomFlavorSheet } from "../utils/flavor-sheet.js";
7
3
  import { TyComponent } from "../base/ty-component.js";
8
4
  import { ensureStyles } from "../utils/styles.js";
9
5
  import { tagStyles } from "../styles/tag.js";
10
- /**
11
- * Ty Tag Component
12
- *
13
- * @example
14
- * ```html
15
- * <ty-tag flavor="primary">Primary Tag</ty-tag>
16
- * <ty-tag flavor="success" dismissible>Success Tag</ty-tag>
17
- * <ty-tag flavor="danger" clickable>Clickable Tag</ty-tag>
18
- * <ty-tag value="tag-1" selected>Selected Tag</ty-tag>
19
- * ```
20
- */
21
6
  export class TyTag extends TyComponent {
22
- constructor() {
23
- super(); // TyComponent handles attachInternals() and attachShadow()
24
- // ============================================================================
25
- // INTERNAL STATE
26
- // ============================================================================
27
- // Event listener cleanup function
28
- this._cleanup = null;
29
- // Adopted sheet holding generated rules for a custom (non-built-in) flavor.
30
- // Must be an adopted sheet, not a <style> element — render() replaces
31
- // shadowRoot.innerHTML, which would destroy an injected element.
32
- this._customFlavorSheet = null;
33
- // ============================================================================
34
- // EVENT HANDLERS (arrow functions for stable references)
35
- // ============================================================================
36
- /**
37
- * Handle tag click events
38
- */
39
- this.handleClick = (event) => {
40
- if (this.clickable && !this.disabled) {
41
- event.preventDefault();
42
- event.stopPropagation();
43
- this.dispatchTagEvent("click", { target: this });
44
- this.dispatchTagEvent("pointerdown", { target: this });
45
- }
46
- };
47
- /**
48
- * Handle tag dismiss events
49
- */
50
- this.handleDismiss = (event) => {
51
- if (this.dismissible && !this.disabled) {
52
- event.preventDefault();
53
- event.stopPropagation();
54
- this.dispatchTagEvent("dismiss", { target: this });
55
- }
56
- };
57
- /**
58
- * Handle keyboard interactions
59
- */
60
- this.handleKeydown = (event) => {
61
- const keyboardEvent = event;
62
- if (this.disabled)
63
- return;
64
- const keyCode = keyboardEvent.keyCode;
65
- switch (keyCode) {
66
- // ENTER or SPACE - trigger click if clickable
67
- case 13: // Enter
68
- case 32: // Space
69
- if (this.clickable) {
70
- keyboardEvent.preventDefault();
71
- this.dispatchTagEvent("click", { target: this });
72
- }
73
- break;
74
- // DELETE or BACKSPACE - trigger dismiss if dismissible
75
- case 8: // Backspace
76
- case 46: // Delete
77
- if (this.dismissible) {
78
- keyboardEvent.preventDefault();
79
- this.dispatchTagEvent("dismiss", { target: this });
80
- }
81
- break;
82
- }
83
- };
84
- // Apply styles to shadow root
85
- ensureStyles(this.shadowRoot, { css: tagStyles, id: "ty-tag" });
86
- }
87
- // observedAttributes auto-generated by TyComponent from properties config
88
- // ============================================================================
89
- // TYCOMPONENT LIFECYCLE HOOKS
90
- // ============================================================================
91
- /**
92
- * Called when component connects to DOM
93
- * TyComponent already handled pre-connection property capture
94
- * TyComponent will call render() automatically after this hook
95
- */
96
- onConnect() {
97
- this._syncCustomFlavor();
98
- // Setup event listeners after initial render happens
99
- // Use queueMicrotask to ensure render() has been called by TyComponent
100
- queueMicrotask(() => {
101
- this.setupEventListeners();
102
- });
103
- }
104
- /**
105
- * Custom (non-built-in) flavors: generate the same --tag-* wiring the
106
- * built-in flavors get, pointed at the user's design tokens
107
- * (--ty-bg-X / --ty-color-X / --ty-border-X). See utils/flavor-sheet.ts
108
- * for why this is an adopted sheet and how page-level overrides survive.
109
- */
110
- _syncCustomFlavor() {
111
- this._customFlavorSheet = syncCustomFlavorSheet(this.shadowRoot, this._customFlavorSheet, this.flavor, ({ flavor, base, shade }) => {
112
- const bg = shade === "+" ? `--ty-bg-${base}-bold`
113
- : shade === "-" ? `--ty-bg-${base}-soft`
114
- : `--ty-bg-${base}`;
115
- const color = shade === "+" ? `--ty-color-${base}-strong` : `--ty-color-${base}`;
116
- return `
7
+ constructor() {
8
+ super();
9
+ this._cleanup = null;
10
+ this._customFlavorSheet = null;
11
+ this.handleClick = (event) => {
12
+ if (this.clickable && !this.disabled) {
13
+ event.preventDefault();
14
+ event.stopPropagation();
15
+ this.dispatchTagEvent("click", { target: this });
16
+ this.dispatchTagEvent("pointerdown", { target: this });
17
+ }
18
+ };
19
+ this.handleDismiss = (event) => {
20
+ if (this.dismissible && !this.disabled) {
21
+ event.preventDefault();
22
+ event.stopPropagation();
23
+ this.dispatchTagEvent("dismiss", { target: this });
24
+ }
25
+ };
26
+ this.handleKeydown = (event) => {
27
+ const keyboardEvent = event;
28
+ if (this.disabled)
29
+ return;
30
+ const keyCode = keyboardEvent.keyCode;
31
+ switch (keyCode) {
32
+ case 13:
33
+ case 32:
34
+ if (this.clickable) {
35
+ keyboardEvent.preventDefault();
36
+ this.dispatchTagEvent("click", { target: this });
37
+ }
38
+ break;
39
+ case 8:
40
+ case 46:
41
+ if (this.dismissible) {
42
+ keyboardEvent.preventDefault();
43
+ this.dispatchTagEvent("dismiss", { target: this });
44
+ }
45
+ break;
46
+ }
47
+ };
48
+ ensureStyles(this.shadowRoot, { css: tagStyles, id: "ty-tag" });
49
+ }
50
+ onConnect() {
51
+ this._syncCustomFlavor();
52
+ queueMicrotask(() => {
53
+ this.setupEventListeners();
54
+ });
55
+ }
56
+ _syncCustomFlavor() {
57
+ this._customFlavorSheet = syncCustomFlavorSheet(this.shadowRoot, this._customFlavorSheet, this.flavor, ({ flavor, base, shade }) => {
58
+ const bg = shade === "+" ? `--ty-bg-${base}-bold`
59
+ : shade === "-" ? `--ty-bg-${base}-soft`
60
+ : `--ty-bg-${base}`;
61
+ const color = shade === "+" ? `--ty-color-${base}-strong` : `--ty-color-${base}`;
62
+ return `
117
63
  :host([flavor="${flavor}"]) {
118
- --tag-bg: var(${bg});
119
- --tag-color: var(${color});
120
- --tag-border-color: var(--ty-border-${base}, var(--ty-color-${base}));
64
+ --tag-bg: var(${bg});
65
+ --tag-color: var(${color});
66
+ --tag-border-color: var(--ty-border-${base}, var(--ty-color-${base}));
121
67
  }
122
68
  :host([flavor="${flavor}"]) .tag-container[tabindex]:hover {
123
- background: var(--ty-bg-${base}-bold, var(--tag-bg));
69
+ background: var(--ty-bg-${base}-bold, var(--tag-bg));
124
70
  }
125
71
  :host([flavor="${flavor}"]) .tag-container[tabindex]:focus {
126
- box-shadow: 0 0 0 3px var(--ty-color-${base}-faint, var(--tag-color));
72
+ box-shadow: 0 0 0 3px var(--ty-color-${base}-faint, var(--tag-color));
127
73
  }`;
128
- });
129
- }
130
- /**
131
- * Called when component disconnects from DOM
132
- */
133
- onDisconnect() {
134
- this.cleanupEventListeners();
135
- }
136
- /**
137
- * Handle property changes - called BEFORE render
138
- */
139
- onPropertiesChanged(changes) {
140
- if (changes.some((c) => c.name === "flavor")) {
141
- this._syncCustomFlavor();
142
- }
143
- }
144
- // ============================================================================
145
- // EVENT HELPERS
146
- // ============================================================================
147
- /**
148
- * Dispatch custom tag events
149
- */
150
- dispatchTagEvent(eventType, detail) {
151
- this.dispatchEvent(new CustomEvent(eventType, {
152
- detail,
153
- bubbles: true,
154
- composed: true,
155
- cancelable: true,
156
- }));
157
- }
158
- /**
159
- * Clean up existing event listeners
160
- */
161
- cleanupEventListeners() {
162
- if (this._cleanup) {
163
- this._cleanup();
164
- this._cleanup = null;
165
- }
166
- }
167
- /**
168
- * Setup event listeners for tag interactions
169
- */
170
- setupEventListeners() {
171
- // Clean up any existing listeners first
172
- this.cleanupEventListeners();
173
- const shadow = this.shadowRoot;
174
- const container = shadow.querySelector(".tag-container");
175
- const dismissBtn = shadow.querySelector(".tag-dismiss");
176
- if (!container)
177
- return;
178
- // Click handler for main tag
179
- container.addEventListener("click", this.handleClick);
180
- container.addEventListener("keydown", this.handleKeydown);
181
- // Dismiss button handler
182
- if (dismissBtn) {
183
- dismissBtn.addEventListener("click", this.handleDismiss);
184
- }
185
- // Store cleanup function
186
- this._cleanup = () => {
187
- container.removeEventListener("click", this.handleClick);
188
- container.removeEventListener("keydown", this.handleKeydown);
189
- if (dismissBtn) {
190
- dismissBtn.removeEventListener("click", this.handleDismiss);
191
- }
192
- };
193
- }
194
- // ============================================================================
195
- // RENDER
196
- // ============================================================================
197
- /**
198
- * Render the tag component
199
- */
200
- render() {
201
- const shadow = this.shadowRoot;
202
- // Build the tag container
203
- const tabindex = this.clickable ? ' tabindex="0"' : "";
204
- const ariaDisabled = this.disabled ? ' aria-disabled="true"' : "";
205
- const dataValue = this.value ? ` data-value="${this.value}"` : "";
206
- // Build dismiss button SVG
207
- const dismissButton = this.dismissible
208
- ? `
209
- <button class="tag-dismiss" type="button" aria-label="Remove tag">
210
- <svg viewBox="0 0 20 20" fill="currentColor">
211
- <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" />
212
- </svg>
213
- </button>
214
- `
215
- : "";
216
- shadow.innerHTML = `
217
- <div class="tag-container" part="container"${tabindex}${ariaDisabled}${dataValue}>
218
- <div class="tag-start">
219
- <slot name="start" class="tag-start"></slot>
220
- </div>
221
- <div class="tag-content">
222
- <slot></slot>
223
- </div>
224
- <div class="tag-end">
225
- <slot name="end"></slot>
226
- ${dismissButton}
227
- </div>
228
- </div>
229
- `;
230
- // Re-setup event listeners after innerHTML replace (destroys old elements)
231
- if (this._connected) {
232
- this.setupEventListeners();
233
- }
234
- }
235
- // ============================================================================
236
- // PROPERTY ACCESSORS - Simple wrappers (no logic!)
237
- // ============================================================================
238
- get flavor() {
239
- return this.getProperty("flavor");
240
- }
241
- set flavor(value) {
242
- this.setProperty("flavor", value);
243
- }
244
- get size() {
245
- return this.getProperty("size");
246
- }
247
- set size(value) {
248
- this.setProperty("size", value);
249
- }
250
- get value() {
251
- return this.getProperty("value");
252
- }
253
- set value(val) {
254
- this.setProperty("value", val);
255
- }
256
- get selected() {
257
- return this.getProperty("selected");
258
- }
259
- set selected(value) {
260
- this.setProperty("selected", value);
261
- }
262
- get pill() {
263
- return this.getProperty("pill");
264
- }
265
- set pill(value) {
266
- this.setProperty("pill", value);
267
- }
268
- get clickable() {
269
- return this.getProperty("clickable");
270
- }
271
- set clickable(value) {
272
- this.setProperty("clickable", value);
273
- }
274
- get dismissible() {
275
- return this.getProperty("dismissible");
276
- }
277
- set dismissible(value) {
278
- this.setProperty("dismissible", value);
279
- }
280
- get disabled() {
281
- return this.getProperty("disabled");
282
- }
283
- set disabled(value) {
284
- this.setProperty("disabled", value);
285
- }
74
+ });
75
+ }
76
+ onDisconnect() {
77
+ this.cleanupEventListeners();
78
+ }
79
+ onPropertiesChanged(changes) {
80
+ if (changes.some((c) => c.name === "flavor")) {
81
+ this._syncCustomFlavor();
82
+ }
83
+ }
84
+ dispatchTagEvent(eventType, detail) {
85
+ this.dispatchEvent(new CustomEvent(eventType, {
86
+ detail,
87
+ bubbles: true,
88
+ composed: true,
89
+ cancelable: true,
90
+ }));
91
+ }
92
+ cleanupEventListeners() {
93
+ if (this._cleanup) {
94
+ this._cleanup();
95
+ this._cleanup = null;
96
+ }
97
+ }
98
+ setupEventListeners() {
99
+ this.cleanupEventListeners();
100
+ const shadow = this.shadowRoot;
101
+ const container = shadow.querySelector(".tag-container");
102
+ const dismissBtn = shadow.querySelector(".tag-dismiss");
103
+ if (!container)
104
+ return;
105
+ container.addEventListener("click", this.handleClick);
106
+ container.addEventListener("keydown", this.handleKeydown);
107
+ if (dismissBtn) {
108
+ dismissBtn.addEventListener("click", this.handleDismiss);
109
+ }
110
+ this._cleanup = () => {
111
+ container.removeEventListener("click", this.handleClick);
112
+ container.removeEventListener("keydown", this.handleKeydown);
113
+ if (dismissBtn) {
114
+ dismissBtn.removeEventListener("click", this.handleDismiss);
115
+ }
116
+ };
117
+ }
118
+ render() {
119
+ const shadow = this.shadowRoot;
120
+ const tabindex = this.clickable ? ' tabindex="0"' : "";
121
+ const ariaDisabled = this.disabled ? ' aria-disabled="true"' : "";
122
+ const dataValue = this.value ? ` data-value="${this.value}"` : "";
123
+ const dismissButton = this.dismissible
124
+ ? `
125
+ <button class="tag-dismiss" type="button" aria-label="Remove tag">
126
+ <svg viewBox="0 0 20 20" fill="currentColor">
127
+ <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd" />
128
+ </svg>
129
+ </button>
130
+ `
131
+ : "";
132
+ shadow.innerHTML = `
133
+ <div class="tag-container" part="container"${tabindex}${ariaDisabled}${dataValue}>
134
+ <div class="tag-start">
135
+ <slot name="start" class="tag-start"></slot>
136
+ </div>
137
+ <div class="tag-content">
138
+ <slot></slot>
139
+ </div>
140
+ <div class="tag-end">
141
+ <slot name="end"></slot>
142
+ ${dismissButton}
143
+ </div>
144
+ </div>
145
+ `;
146
+ if (this._connected) {
147
+ this.setupEventListeners();
148
+ }
149
+ }
150
+ get flavor() {
151
+ return this.getProperty("flavor");
152
+ }
153
+ set flavor(value) {
154
+ this.setProperty("flavor", value);
155
+ }
156
+ get size() {
157
+ return this.getProperty("size");
158
+ }
159
+ set size(value) {
160
+ this.setProperty("size", value);
161
+ }
162
+ get value() {
163
+ return this.getProperty("value");
164
+ }
165
+ set value(val) {
166
+ this.setProperty("value", val);
167
+ }
168
+ get selected() {
169
+ return this.getProperty("selected");
170
+ }
171
+ set selected(value) {
172
+ this.setProperty("selected", value);
173
+ }
174
+ get pill() {
175
+ return this.getProperty("pill");
176
+ }
177
+ set pill(value) {
178
+ this.setProperty("pill", value);
179
+ }
180
+ get clickable() {
181
+ return this.getProperty("clickable");
182
+ }
183
+ set clickable(value) {
184
+ this.setProperty("clickable", value);
185
+ }
186
+ get dismissible() {
187
+ return this.getProperty("dismissible");
188
+ }
189
+ set dismissible(value) {
190
+ this.setProperty("dismissible", value);
191
+ }
192
+ get disabled() {
193
+ return this.getProperty("disabled");
194
+ }
195
+ set disabled(value) {
196
+ this.setProperty("disabled", value);
197
+ }
286
198
  }
287
199
  TyTag.formAssociated = true;
288
- // ============================================================================
289
- // PROPERTY CONFIGURATION - Declarative property lifecycle
290
- // ============================================================================
291
200
  TyTag.properties = {
292
- flavor: {
293
- type: "string",
294
- visual: true,
295
- default: "neutral",
296
- // Built-in: primary | success | danger | warning | neutral.
297
- // Append `+` for stronger or `-` for softer shade (e.g. "primary+",
298
- // "danger-"). Any other string is a custom flavor: if you define the
299
- // design tokens (--ty-bg-X, --ty-color-X, --ty-border-X) it just works
300
- // (see _syncCustomFlavor), and ty-tag[flavor="X"] { --tag-bg: ...; }
301
- // rules in the page still override.
302
- },
303
- size: {
304
- type: "string",
305
- visual: true,
306
- default: "md",
307
- validate: (v) => ["xs", "sm", "md", "lg", "xl"].includes(v),
308
- coerce: (v) => {
309
- if (!["xs", "sm", "md", "lg", "xl"].includes(v)) {
310
- console.warn(`[ty-tag] Invalid size '${v}'. Using 'md'.`);
311
- return "md";
312
- }
313
- return v;
314
- },
315
- },
316
- value: {
317
- type: "string",
318
- visual: true,
319
- default: "",
320
- },
321
- selected: {
322
- type: "boolean",
323
- visual: true,
324
- default: false,
325
- },
326
- pill: {
327
- type: "boolean",
328
- visual: true,
329
- default: true,
330
- aliases: { "not-pill": false },
331
- },
332
- clickable: {
333
- type: "boolean",
334
- visual: true,
335
- default: false,
336
- },
337
- dismissible: {
338
- type: "boolean",
339
- visual: true,
340
- default: false,
341
- },
342
- disabled: {
343
- type: "boolean",
344
- visual: true,
345
- default: false,
346
- },
201
+ flavor: {
202
+ type: "string",
203
+ visual: true,
204
+ default: "neutral",
205
+ },
206
+ size: {
207
+ type: "string",
208
+ visual: true,
209
+ default: DEFAULT_SIZE,
210
+ validate: (v) => ["xs", "sm", "md", "lg", "xl"].includes(v),
211
+ coerce: (v) => {
212
+ if (!["xs", "sm", "md", "lg", "xl"].includes(v)) {
213
+ console.warn(`[ty-tag] Invalid size '${v}'. Using '${DEFAULT_SIZE}'.`);
214
+ return DEFAULT_SIZE;
215
+ }
216
+ return v;
217
+ },
218
+ },
219
+ value: {
220
+ type: "string",
221
+ visual: true,
222
+ default: "",
223
+ },
224
+ selected: {
225
+ type: "boolean",
226
+ visual: true,
227
+ default: false,
228
+ },
229
+ pill: {
230
+ type: "boolean",
231
+ visual: true,
232
+ default: true,
233
+ aliases: { "not-pill": false },
234
+ },
235
+ clickable: {
236
+ type: "boolean",
237
+ visual: true,
238
+ default: false,
239
+ },
240
+ dismissible: {
241
+ type: "boolean",
242
+ visual: true,
243
+ default: false,
244
+ },
245
+ disabled: {
246
+ type: "boolean",
247
+ visual: true,
248
+ default: false,
249
+ },
347
250
  };
348
- // Register the custom element
349
251
  if (!customElements.get("ty-tag")) {
350
- customElements.define("ty-tag", TyTag);
252
+ customElements.define("ty-tag", TyTag);
351
253
  }
352
- //# sourceMappingURL=tag.js.map