tyrell-components 1.0.0-RC6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/css/tyrell.css +1783 -0
  4. package/dist/tyrell.css +1783 -0
  5. package/dist/tyrell.js +2 -0
  6. package/lib/base/ty-component.d.ts +133 -0
  7. package/lib/base/ty-component.d.ts.map +1 -0
  8. package/lib/base/ty-component.js +297 -0
  9. package/lib/base/ty-component.js.map +1 -0
  10. package/lib/components/button.d.ts +126 -0
  11. package/lib/components/button.d.ts.map +1 -0
  12. package/lib/components/button.js +244 -0
  13. package/lib/components/button.js.map +1 -0
  14. package/lib/components/calendar-month.d.ts +132 -0
  15. package/lib/components/calendar-month.d.ts.map +1 -0
  16. package/lib/components/calendar-month.js +440 -0
  17. package/lib/components/calendar-month.js.map +1 -0
  18. package/lib/components/calendar-navigation.d.ts +137 -0
  19. package/lib/components/calendar-navigation.d.ts.map +1 -0
  20. package/lib/components/calendar-navigation.js +366 -0
  21. package/lib/components/calendar-navigation.js.map +1 -0
  22. package/lib/components/calendar.d.ts +166 -0
  23. package/lib/components/calendar.d.ts.map +1 -0
  24. package/lib/components/calendar.js +774 -0
  25. package/lib/components/calendar.js.map +1 -0
  26. package/lib/components/checkbox.d.ts +189 -0
  27. package/lib/components/checkbox.d.ts.map +1 -0
  28. package/lib/components/checkbox.js +400 -0
  29. package/lib/components/checkbox.js.map +1 -0
  30. package/lib/components/copy.d.ts +180 -0
  31. package/lib/components/copy.d.ts.map +1 -0
  32. package/lib/components/copy.js +393 -0
  33. package/lib/components/copy.js.map +1 -0
  34. package/lib/components/date-picker.d.ts +379 -0
  35. package/lib/components/date-picker.d.ts.map +1 -0
  36. package/lib/components/date-picker.js +1586 -0
  37. package/lib/components/date-picker.js.map +1 -0
  38. package/lib/components/dropdown.d.ts +402 -0
  39. package/lib/components/dropdown.d.ts.map +1 -0
  40. package/lib/components/dropdown.js +1552 -0
  41. package/lib/components/dropdown.js.map +1 -0
  42. package/lib/components/icon.d.ts +118 -0
  43. package/lib/components/icon.d.ts.map +1 -0
  44. package/lib/components/icon.js +245 -0
  45. package/lib/components/icon.js.map +1 -0
  46. package/lib/components/input.d.ts +270 -0
  47. package/lib/components/input.d.ts.map +1 -0
  48. package/lib/components/input.js +721 -0
  49. package/lib/components/input.js.map +1 -0
  50. package/lib/components/modal.d.ts +58 -0
  51. package/lib/components/modal.d.ts.map +1 -0
  52. package/lib/components/modal.js +473 -0
  53. package/lib/components/modal.js.map +1 -0
  54. package/lib/components/multiselect.d.ts +397 -0
  55. package/lib/components/multiselect.d.ts.map +1 -0
  56. package/lib/components/multiselect.js +1580 -0
  57. package/lib/components/multiselect.js.map +1 -0
  58. package/lib/components/option.d.ts +66 -0
  59. package/lib/components/option.d.ts.map +1 -0
  60. package/lib/components/option.js +314 -0
  61. package/lib/components/option.js.map +1 -0
  62. package/lib/components/popup.d.ts +43 -0
  63. package/lib/components/popup.d.ts.map +1 -0
  64. package/lib/components/popup.js +380 -0
  65. package/lib/components/popup.js.map +1 -0
  66. package/lib/components/radio.d.ts +198 -0
  67. package/lib/components/radio.d.ts.map +1 -0
  68. package/lib/components/radio.js +437 -0
  69. package/lib/components/radio.js.map +1 -0
  70. package/lib/components/resize-observer.d.ts +48 -0
  71. package/lib/components/resize-observer.d.ts.map +1 -0
  72. package/lib/components/resize-observer.js +108 -0
  73. package/lib/components/resize-observer.js.map +1 -0
  74. package/lib/components/scroll-container.d.ts +51 -0
  75. package/lib/components/scroll-container.d.ts.map +1 -0
  76. package/lib/components/scroll-container.js +239 -0
  77. package/lib/components/scroll-container.js.map +1 -0
  78. package/lib/components/step.d.ts +26 -0
  79. package/lib/components/step.d.ts.map +1 -0
  80. package/lib/components/step.js +75 -0
  81. package/lib/components/step.js.map +1 -0
  82. package/lib/components/switch.d.ts +111 -0
  83. package/lib/components/switch.d.ts.map +1 -0
  84. package/lib/components/switch.js +240 -0
  85. package/lib/components/switch.js.map +1 -0
  86. package/lib/components/tab.d.ts +23 -0
  87. package/lib/components/tab.d.ts.map +1 -0
  88. package/lib/components/tab.js +76 -0
  89. package/lib/components/tab.js.map +1 -0
  90. package/lib/components/tabs.d.ts +93 -0
  91. package/lib/components/tabs.d.ts.map +1 -0
  92. package/lib/components/tabs.js +653 -0
  93. package/lib/components/tabs.js.map +1 -0
  94. package/lib/components/tag.d.ts +144 -0
  95. package/lib/components/tag.d.ts.map +1 -0
  96. package/lib/components/tag.js +316 -0
  97. package/lib/components/tag.js.map +1 -0
  98. package/lib/components/textarea.d.ts +241 -0
  99. package/lib/components/textarea.d.ts.map +1 -0
  100. package/lib/components/textarea.js +585 -0
  101. package/lib/components/textarea.js.map +1 -0
  102. package/lib/components/tooltip.d.ts +40 -0
  103. package/lib/components/tooltip.d.ts.map +1 -0
  104. package/lib/components/tooltip.js +439 -0
  105. package/lib/components/tooltip.js.map +1 -0
  106. package/lib/components/wizard.d.ts +86 -0
  107. package/lib/components/wizard.d.ts.map +1 -0
  108. package/lib/components/wizard.js +636 -0
  109. package/lib/components/wizard.js.map +1 -0
  110. package/lib/icons/fontawesome/brands.d.ts +557 -0
  111. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  112. package/lib/icons/fontawesome/brands.js +557 -0
  113. package/lib/icons/fontawesome/brands.js.map +1 -0
  114. package/lib/icons/fontawesome/regular.d.ts +281 -0
  115. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  116. package/lib/icons/fontawesome/regular.js +281 -0
  117. package/lib/icons/fontawesome/regular.js.map +1 -0
  118. package/lib/icons/fontawesome/solid.d.ts +1992 -0
  119. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  120. package/lib/icons/fontawesome/solid.js +1992 -0
  121. package/lib/icons/fontawesome/solid.js.map +1 -0
  122. package/lib/icons/heroicons/micro.d.ts +324 -0
  123. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  124. package/lib/icons/heroicons/micro.js +1032 -0
  125. package/lib/icons/heroicons/micro.js.map +1 -0
  126. package/lib/icons/heroicons/mini.d.ts +332 -0
  127. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  128. package/lib/icons/heroicons/mini.js +1038 -0
  129. package/lib/icons/heroicons/mini.js.map +1 -0
  130. package/lib/icons/heroicons/outline.d.ts +332 -0
  131. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  132. package/lib/icons/heroicons/outline.js +993 -0
  133. package/lib/icons/heroicons/outline.js.map +1 -0
  134. package/lib/icons/heroicons/solid.d.ts +332 -0
  135. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  136. package/lib/icons/heroicons/solid.js +1063 -0
  137. package/lib/icons/heroicons/solid.js.map +1 -0
  138. package/lib/icons/lucide.d.ts +1872 -0
  139. package/lib/icons/lucide.d.ts.map +1 -0
  140. package/lib/icons/lucide.js +28212 -0
  141. package/lib/icons/lucide.js.map +1 -0
  142. package/lib/icons/material/filled.d.ts +2180 -0
  143. package/lib/icons/material/filled.d.ts.map +1 -0
  144. package/lib/icons/material/filled.js +14003 -0
  145. package/lib/icons/material/filled.js.map +1 -0
  146. package/lib/icons/material/outlined.d.ts +2142 -0
  147. package/lib/icons/material/outlined.d.ts.map +1 -0
  148. package/lib/icons/material/outlined.js +14545 -0
  149. package/lib/icons/material/outlined.js.map +1 -0
  150. package/lib/icons/material/round.d.ts +2147 -0
  151. package/lib/icons/material/round.d.ts.map +1 -0
  152. package/lib/icons/material/round.js +14779 -0
  153. package/lib/icons/material/round.js.map +1 -0
  154. package/lib/icons/material/sharp.d.ts +2147 -0
  155. package/lib/icons/material/sharp.d.ts.map +1 -0
  156. package/lib/icons/material/sharp.js +14189 -0
  157. package/lib/icons/material/sharp.js.map +1 -0
  158. package/lib/icons/material/two-tone.d.ts +2185 -0
  159. package/lib/icons/material/two-tone.d.ts.map +1 -0
  160. package/lib/icons/material/two-tone.js +17152 -0
  161. package/lib/icons/material/two-tone.js.map +1 -0
  162. package/lib/index.d.ts +78 -0
  163. package/lib/index.d.ts.map +1 -0
  164. package/lib/index.js +71 -0
  165. package/lib/index.js.map +1 -0
  166. package/lib/styles/button.d.ts +14 -0
  167. package/lib/styles/button.d.ts.map +1 -0
  168. package/lib/styles/button.js +457 -0
  169. package/lib/styles/button.js.map +1 -0
  170. package/lib/styles/calendar-month.d.ts +6 -0
  171. package/lib/styles/calendar-month.d.ts.map +1 -0
  172. package/lib/styles/calendar-month.js +275 -0
  173. package/lib/styles/calendar-month.js.map +1 -0
  174. package/lib/styles/calendar-navigation.d.ts +6 -0
  175. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  176. package/lib/styles/calendar-navigation.js +143 -0
  177. package/lib/styles/calendar-navigation.js.map +1 -0
  178. package/lib/styles/calendar.d.ts +6 -0
  179. package/lib/styles/calendar.d.ts.map +1 -0
  180. package/lib/styles/calendar.js +28 -0
  181. package/lib/styles/calendar.js.map +1 -0
  182. package/lib/styles/checkbox.d.ts +9 -0
  183. package/lib/styles/checkbox.d.ts.map +1 -0
  184. package/lib/styles/checkbox.js +19 -0
  185. package/lib/styles/checkbox.js.map +1 -0
  186. package/lib/styles/copy.d.ts +7 -0
  187. package/lib/styles/copy.d.ts.map +1 -0
  188. package/lib/styles/copy.js +94 -0
  189. package/lib/styles/copy.js.map +1 -0
  190. package/lib/styles/custom-scrollbar.d.ts +6 -0
  191. package/lib/styles/custom-scrollbar.d.ts.map +1 -0
  192. package/lib/styles/custom-scrollbar.js +157 -0
  193. package/lib/styles/custom-scrollbar.js.map +1 -0
  194. package/lib/styles/date-picker.d.ts +6 -0
  195. package/lib/styles/date-picker.d.ts.map +1 -0
  196. package/lib/styles/date-picker.js +435 -0
  197. package/lib/styles/date-picker.js.map +1 -0
  198. package/lib/styles/dropdown.d.ts +12 -0
  199. package/lib/styles/dropdown.d.ts.map +1 -0
  200. package/lib/styles/dropdown.js +983 -0
  201. package/lib/styles/dropdown.js.map +1 -0
  202. package/lib/styles/icon.d.ts +6 -0
  203. package/lib/styles/icon.d.ts.map +1 -0
  204. package/lib/styles/icon.js +241 -0
  205. package/lib/styles/icon.js.map +1 -0
  206. package/lib/styles/input.d.ts +7 -0
  207. package/lib/styles/input.d.ts.map +1 -0
  208. package/lib/styles/input.js +685 -0
  209. package/lib/styles/input.js.map +1 -0
  210. package/lib/styles/modal.d.ts +8 -0
  211. package/lib/styles/modal.d.ts.map +1 -0
  212. package/lib/styles/modal.js +134 -0
  213. package/lib/styles/modal.js.map +1 -0
  214. package/lib/styles/multiselect.d.ts +6 -0
  215. package/lib/styles/multiselect.d.ts.map +1 -0
  216. package/lib/styles/multiselect.js +774 -0
  217. package/lib/styles/multiselect.js.map +1 -0
  218. package/lib/styles/option.d.ts +6 -0
  219. package/lib/styles/option.d.ts.map +1 -0
  220. package/lib/styles/option.js +116 -0
  221. package/lib/styles/option.js.map +1 -0
  222. package/lib/styles/popup.d.ts +8 -0
  223. package/lib/styles/popup.d.ts.map +1 -0
  224. package/lib/styles/popup.js +95 -0
  225. package/lib/styles/popup.js.map +1 -0
  226. package/lib/styles/radio.d.ts +8 -0
  227. package/lib/styles/radio.d.ts.map +1 -0
  228. package/lib/styles/radio.js +160 -0
  229. package/lib/styles/radio.js.map +1 -0
  230. package/lib/styles/resize-observer.d.ts +6 -0
  231. package/lib/styles/resize-observer.d.ts.map +1 -0
  232. package/lib/styles/resize-observer.js +18 -0
  233. package/lib/styles/resize-observer.js.map +1 -0
  234. package/lib/styles/scroll-container.d.ts +6 -0
  235. package/lib/styles/scroll-container.d.ts.map +1 -0
  236. package/lib/styles/scroll-container.js +198 -0
  237. package/lib/styles/scroll-container.js.map +1 -0
  238. package/lib/styles/step.d.ts +5 -0
  239. package/lib/styles/step.d.ts.map +1 -0
  240. package/lib/styles/step.js +50 -0
  241. package/lib/styles/step.js.map +1 -0
  242. package/lib/styles/switch.d.ts +9 -0
  243. package/lib/styles/switch.d.ts.map +1 -0
  244. package/lib/styles/switch.js +100 -0
  245. package/lib/styles/switch.js.map +1 -0
  246. package/lib/styles/tab.d.ts +5 -0
  247. package/lib/styles/tab.d.ts.map +1 -0
  248. package/lib/styles/tab.js +51 -0
  249. package/lib/styles/tab.js.map +1 -0
  250. package/lib/styles/tabs.d.ts +13 -0
  251. package/lib/styles/tabs.d.ts.map +1 -0
  252. package/lib/styles/tabs.js +184 -0
  253. package/lib/styles/tabs.js.map +1 -0
  254. package/lib/styles/tag.d.ts +6 -0
  255. package/lib/styles/tag.d.ts.map +1 -0
  256. package/lib/styles/tag.js +420 -0
  257. package/lib/styles/tag.js.map +1 -0
  258. package/lib/styles/textarea.d.ts +6 -0
  259. package/lib/styles/textarea.d.ts.map +1 -0
  260. package/lib/styles/textarea.js +350 -0
  261. package/lib/styles/textarea.js.map +1 -0
  262. package/lib/styles/tooltip.d.ts +9 -0
  263. package/lib/styles/tooltip.d.ts.map +1 -0
  264. package/lib/styles/tooltip.js +136 -0
  265. package/lib/styles/tooltip.js.map +1 -0
  266. package/lib/styles/wizard.d.ts +25 -0
  267. package/lib/styles/wizard.d.ts.map +1 -0
  268. package/lib/styles/wizard.js +325 -0
  269. package/lib/styles/wizard.js.map +1 -0
  270. package/lib/types/common.d.ts +143 -0
  271. package/lib/types/common.d.ts.map +1 -0
  272. package/lib/types/common.js +5 -0
  273. package/lib/types/common.js.map +1 -0
  274. package/lib/utils/calendar-utils.d.ts +176 -0
  275. package/lib/utils/calendar-utils.d.ts.map +1 -0
  276. package/lib/utils/calendar-utils.js +370 -0
  277. package/lib/utils/calendar-utils.js.map +1 -0
  278. package/lib/utils/custom-scrollbar.d.ts +82 -0
  279. package/lib/utils/custom-scrollbar.d.ts.map +1 -0
  280. package/lib/utils/custom-scrollbar.js +320 -0
  281. package/lib/utils/custom-scrollbar.js.map +1 -0
  282. package/lib/utils/icon-registry.d.ts +78 -0
  283. package/lib/utils/icon-registry.d.ts.map +1 -0
  284. package/lib/utils/icon-registry.js +304 -0
  285. package/lib/utils/icon-registry.js.map +1 -0
  286. package/lib/utils/locale.d.ts +136 -0
  287. package/lib/utils/locale.d.ts.map +1 -0
  288. package/lib/utils/locale.js +213 -0
  289. package/lib/utils/locale.js.map +1 -0
  290. package/lib/utils/mobile.d.ts +14 -0
  291. package/lib/utils/mobile.d.ts.map +1 -0
  292. package/lib/utils/mobile.js +21 -0
  293. package/lib/utils/mobile.js.map +1 -0
  294. package/lib/utils/number-format.d.ts +83 -0
  295. package/lib/utils/number-format.d.ts.map +1 -0
  296. package/lib/utils/number-format.js +143 -0
  297. package/lib/utils/number-format.js.map +1 -0
  298. package/lib/utils/parse-boolean.d.ts +39 -0
  299. package/lib/utils/parse-boolean.d.ts.map +1 -0
  300. package/lib/utils/parse-boolean.js +58 -0
  301. package/lib/utils/parse-boolean.js.map +1 -0
  302. package/lib/utils/positioning.d.ts +143 -0
  303. package/lib/utils/positioning.d.ts.map +1 -0
  304. package/lib/utils/positioning.js +308 -0
  305. package/lib/utils/positioning.js.map +1 -0
  306. package/lib/utils/property-capture.d.ts +132 -0
  307. package/lib/utils/property-capture.d.ts.map +1 -0
  308. package/lib/utils/property-capture.js +152 -0
  309. package/lib/utils/property-capture.js.map +1 -0
  310. package/lib/utils/property-manager.d.ts +90 -0
  311. package/lib/utils/property-manager.d.ts.map +1 -0
  312. package/lib/utils/property-manager.js +197 -0
  313. package/lib/utils/property-manager.js.map +1 -0
  314. package/lib/utils/resize-observer.d.ts +42 -0
  315. package/lib/utils/resize-observer.d.ts.map +1 -0
  316. package/lib/utils/resize-observer.js +71 -0
  317. package/lib/utils/resize-observer.js.map +1 -0
  318. package/lib/utils/scroll-lock.d.ts +79 -0
  319. package/lib/utils/scroll-lock.d.ts.map +1 -0
  320. package/lib/utils/scroll-lock.js +197 -0
  321. package/lib/utils/scroll-lock.js.map +1 -0
  322. package/lib/utils/styles.d.ts +27 -0
  323. package/lib/utils/styles.d.ts.map +1 -0
  324. package/lib/utils/styles.js +53 -0
  325. package/lib/utils/styles.js.map +1 -0
  326. package/lib/version.d.ts +8 -0
  327. package/lib/version.d.ts.map +1 -0
  328. package/lib/version.js +11 -0
  329. package/lib/version.js.map +1 -0
  330. package/package.json +159 -0
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Tabs Component Styles
3
+ *
4
+ * Styles for the ty-tabs container component including:
5
+ * - Flexbox layout with top/bottom placement
6
+ * - Tab buttons with hover and active states
7
+ * - Animated marker that follows active tab
8
+ * - Carousel viewport with transform animations
9
+ * - Responsive design with prefers-reduced-motion support
10
+ * - Fully customizable via CSS Parts (::part)
11
+ */
12
+ export const tabsStyles = `
13
+ :host {
14
+ display: block;
15
+ width: var(--tabs-width, 100%);
16
+ height: var(--tabs-height, 400px);
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ .tabs-container {
21
+ width: 100%;
22
+ height: 100%;
23
+ display: flex;
24
+ flex-direction: column;
25
+ position: relative;
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ /* Bottom placement reverses the order */
30
+ .tabs-container[data-placement="bottom"] {
31
+ flex-direction: column-reverse;
32
+ }
33
+
34
+ /* ===================================== */
35
+ /* Tab Buttons Container */
36
+ /* Expose as CSS Part for full styling control */
37
+ /* ===================================== */
38
+
39
+ .tab-buttons {
40
+ display: flex;
41
+ gap: 0;
42
+ flex-shrink: 0;
43
+ position: relative;
44
+ /* For absolute positioned marker */
45
+
46
+ /* Default minimal styling - customize via ::part(buttons-container) */
47
+ border-bottom: 1px solid var(--ty-border);
48
+ background: transparent;
49
+ }
50
+
51
+ /* Bottom placement moves border to top */
52
+ .tabs-container[data-placement="bottom"] .tab-buttons {
53
+ border-bottom: none;
54
+ border-top: 1px solid var(--ty-border);
55
+ }
56
+
57
+ /* ===================================== */
58
+ /* Marker Wrapper */
59
+ /* Expose as CSS Part for custom marker styling */
60
+ /* ===================================== */
61
+
62
+ .marker-wrapper {
63
+ position: absolute;
64
+ z-index: 0;
65
+ /* Behind buttons */
66
+ pointer-events: none;
67
+ /* Don't block clicks */
68
+ transition: left var(--transition-duration, 300ms) var(--transition-easing, ease-in-out),
69
+ width var(--transition-duration, 300ms) var(--transition-easing, ease-in-out),
70
+ height var(--transition-duration, 300ms) var(--transition-easing, ease-in-out),
71
+ top var(--transition-duration, 300ms) var(--transition-easing, ease-in-out);
72
+ }
73
+
74
+ /* Default marker - simple underline */
75
+ .default-marker {
76
+ position: absolute;
77
+ bottom: 0;
78
+ left: 0;
79
+ height: 2px;
80
+ width: 100%;
81
+ background: var(--ty-color-primary);
82
+ pointer-events: none;
83
+ }
84
+
85
+ /* Hide default marker when custom marker is slotted */
86
+ .marker-wrapper:has(::slotted([slot="marker"])) .default-marker {
87
+ display: none;
88
+ }
89
+
90
+ /* User's marker element fills the wrapper */
91
+ ::slotted([slot="marker"]) {
92
+ display: block;
93
+ width: 100%;
94
+ height: 100%;
95
+ box-sizing: border-box;
96
+ }
97
+
98
+ /* ===================================== */
99
+ /* Tab Buttons */
100
+ /* ===================================== */
101
+
102
+ .tab-button {
103
+ min-width: 120px;
104
+ padding: 6px 12px;
105
+ border: none;
106
+ background: transparent;
107
+ cursor: pointer;
108
+ font: inherit;
109
+ color: var(--ty-text-soft);
110
+ transition: color 200ms, background-color 200ms;
111
+ white-space: nowrap;
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ gap: 8px;
116
+ font-weight: var(--ty-font-bold);
117
+ font-size: var(--ty-font-sm);
118
+ position: relative;
119
+ /* Establish stacking context */
120
+ z-index: 10;
121
+ /* Above marker */
122
+ }
123
+
124
+ .tab-button[aria-selected=true] {
125
+ color: var(--ty-text-strong);
126
+ }
127
+
128
+ .tab-button[disabled] {
129
+ opacity: 0.5;
130
+ cursor: not-allowed;
131
+ pointer-events: none;
132
+ }
133
+
134
+ .tab-button:focus-visible {
135
+ outline: 2px solid var(--ty-color-primary);
136
+ outline-offset: -2px;
137
+ }
138
+
139
+ /* ===================================== */
140
+ /* Panels Viewport */
141
+ /* Expose as CSS Part for panels container styling */
142
+ /* ===================================== */
143
+
144
+ .panels-viewport {
145
+ position: relative;
146
+ flex: 1;
147
+ overflow: hidden;
148
+ /* Critical: hides off-screen panels */
149
+ min-height: 0;
150
+ /* Allows flex child to shrink */
151
+ }
152
+
153
+ /* ===================================== */
154
+ /* Panels Wrapper (slides horizontally) */
155
+ /* ===================================== */
156
+
157
+ .panels-wrapper {
158
+ display: flex;
159
+ height: 100%;
160
+ transition: transform var(--transition-duration, 300ms) var(--transition-easing, ease-in-out);
161
+ }
162
+
163
+ /* Respect user's motion preferences */
164
+ @media (prefers-reduced-motion: reduce) {
165
+ .panels-wrapper {
166
+ transition-duration: 0ms !important;
167
+ }
168
+
169
+ .marker-wrapper {
170
+ transition-duration: 0ms !important;
171
+ }
172
+ }
173
+
174
+ /* ===================================== */
175
+ /* Slotted Tab Panels */
176
+ /* ===================================== */
177
+
178
+ ::slotted(ty-tab) {
179
+ width: var(--tabs-width, 100%);
180
+ height: 100%;
181
+ flex-shrink: 0;
182
+ }
183
+ `;
184
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/styles/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2KzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tag Component Styles
3
+ * PORTED FROM: clj/ty/components/tag.css
4
+ */
5
+ export declare const tagStyles = "\n/* Tag Component Styles using centralized ty.variables.css */\n\n/* Host element */\n\n/* Hidden attribute support */\n:host([hidden]) {\n display: none !important;\n}\n\n/* Main container */\n.tag-container {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ty-spacing-1);\n /* Default pill shape - can be overridden */\n border-radius: var(--ty-radius-full);\n font-weight: var(--ty-font-medium);\n text-align: center;\n white-space: nowrap;\n user-select: none;\n box-sizing: border-box;\n\n /* Default MD size \u2014 anchor at 28px, even +4 steps for other sizes */\n padding: 0 0.625rem; /* 0 10px */\n font-size: var(--ty-font-xs); /* 14px */\n line-height: var(--ty-leading-xs); /* 21px */\n letter-spacing: var(--ty-tracking-xs); /* -0.013em */\n min-height: 28px;\n\n /* Transitions using centralized values */\n transition: var(--ty-transition-all);\n\n /* Colors via custom properties \u2014 override on :host for full control */\n background: var(--tag-bg, transparent);\n color: var(--tag-color, var(--ty-text));\n border: 1px solid;jk\n border-color: var(--tag-border-color, var(--ty-border));\n}\n\n/* Non-pill variant - rectangular with rounded corners */\n:host([pill=\"false\"]) .tag-container,\n:host([not-pill]) .tag-container {\n border-radius: var(--ty-radius-md);\n /* 6px instead of full pill */\n}\n\n/* Tags with value attribute but NOT selected should be clickable */\n:host([value]:not([selected])) .tag-container:not([aria-disabled=\"true\"]) {\n cursor: pointer;\n}\n\n:host([selected]) .tag-container:not([aria-disabled=\"true\"]) {\n cursor: initial;\n}\n\n.tag-container[tabindex]:not([aria-disabled=\"true\"]):hover {\n background: var(--ty-bg-neutral-soft);\n transform: translateY(-1px);\n box-shadow: var(--ty-shadow-sm);\n}\n\n.tag-container[tabindex]:not([aria-disabled=\"true\"]):active {\n transform: translateY(0);\n box-shadow: var(--ty-shadow-sm);\n}\n\n.tag-container[tabindex]:focus {\n outline: none;\n}\n\n/* Disabled state */\n.tag-container[aria-disabled=\"true\"] {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Slot containers */\n.tag-start,\n.tag-content,\n.tag-end {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.tag-content {\n flex: 1;\n min-width: 0;\n}\n\n/* Dismiss button */\n.tag-dismiss {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n background: none;\n border: none;\n color: currentColor;\n cursor: pointer;\n border-radius: var(--ty-radius-full);\n transition: var(--ty-transition-all);\n opacity: 0.7;\n flex-shrink: 0;\n /* Default MD dismiss button size */\n width: var(--ty-spacing-4);\n /* 16px */\n height: var(--ty-spacing-4);\n}\n\n.tag-dismiss:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.1);\n}\n\n.tag-dismiss svg {\n width: 100%;\n height: 100%;\n}\n\n/* Size variants - override defaults */\n:host([size=\"xs\"]) .tag-container {\n padding: 0 0.375rem; /* 0 6px */\n font-size: var(--ty-font-xs); /* 12px */\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n min-height: 20px;\n}\n\n:host([size=\"xs\"]) .tag-dismiss {\n width: var(--ty-spacing-3);\n height: var(--ty-spacing-3);\n margin-left: var(--ty-spacing-2);\n}\n\n:host([size=\"sm\"]) .tag-container {\n padding: 0 var(--ty-spacing-2); /* 0 8px */\n font-size: var(--ty-font-xs); /* 12px */\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n min-height: 24px;\n}\n\n:host([size=\"sm\"]) .tag-dismiss {\n width: var(--ty-spacing-3);\n height: var(--ty-spacing-3);\n margin-left: var(--ty-spacing-2);\n}\n\n/* MD is now the default - no need for explicit [size=\"md\"] selector */\n/* All default styles above apply to MD size (min-height: 24px) */\n\n:host([size=\"lg\"]) .tag-container {\n padding: 0 var(--ty-spacing-3); /* 0 12px */\n font-size: var(--ty-font-sm); /* 14px */\n line-height: var(--ty-leading-sm); /* 21px */\n letter-spacing: var(--ty-tracking-sm); /* -0.013em */\n min-height: 32px;\n}\n\n:host([size=\"lg\"]) .tag-dismiss {\n width: var(--ty-spacing-5);\n height: var(--ty-spacing-5);\n margin-left: var(--ty-spacing-4);\n}\n\n:host([size=\"xl\"]) .tag-container {\n padding: 0 0.875rem; /* 0 14px */\n font-size: var(--ty-font-sm); /* 14px */\n line-height: var(--ty-leading-sm); /* 21px */\n letter-spacing: var(--ty-tracking-sm); /* -0.013em */\n min-height: 36px;\n}\n\n:host([size=\"xl\"]) .tag-dismiss {\n width: var(--ty-spacing-5);\n height: var(--ty-spacing-5);\n margin-left: var(--ty-spacing-4);\n}\n\n/* ===== FLAVOR VARIANTS =====\n Each flavor sets --tag-bg / --tag-color / --tag-border-color on :host.\n Append '+' to flavor for a stronger shade (mild background, strong color),\n or '-' for a softer shade (soft background, base color). */\n\n/* ----- PRIMARY ----- */\n:host([flavor=\"primary\"]) {\n --tag-bg: var(--ty-bg-primary);\n --tag-color: var(--ty-color-primary-strong);\n --tag-border-color: var(--ty-border-primary);\n}\n:host([flavor=\"primary+\"]) {\n --tag-bg: var(--ty-bg-primary-mild);\n --tag-color: var(--ty-color-primary-strong);\n --tag-border-color: var(--ty-color-primary);\n}\n:host([flavor=\"primary-\"]) {\n --tag-bg: var(--ty-bg-primary-soft);\n --tag-color: var(--ty-color-primary);\n --tag-border-color: var(--ty-border-primary);\n}\n:host([flavor=\"primary\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"primary+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"primary-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-primary-mild);\n}\n:host([flavor=\"primary\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"primary+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"primary-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-primary-faint);\n}\n\n/* ----- SECONDARY ----- */\n:host([flavor=\"secondary\"]) {\n --tag-bg: var(--ty-bg-secondary);\n --tag-color: var(--ty-color-secondary-strong);\n --tag-border-color: var(--ty-border-secondary);\n}\n:host([flavor=\"secondary+\"]) {\n --tag-bg: var(--ty-bg-secondary-mild);\n --tag-color: var(--ty-color-secondary-strong);\n --tag-border-color: var(--ty-color-secondary);\n}\n:host([flavor=\"secondary-\"]) {\n --tag-bg: var(--ty-bg-secondary-soft);\n --tag-color: var(--ty-color-secondary);\n --tag-border-color: var(--ty-border-secondary);\n}\n:host([flavor=\"secondary\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"secondary+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"secondary-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-secondary-mild);\n}\n:host([flavor=\"secondary\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"secondary+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"secondary-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);\n}\n\n/* ----- SUCCESS ----- */\n:host([flavor=\"success\"]) {\n --tag-bg: var(--ty-bg-success);\n --tag-color: var(--ty-color-success-strong);\n --tag-border-color: var(--ty-border-success);\n}\n:host([flavor=\"success+\"]) {\n --tag-bg: var(--ty-bg-success-mild);\n --tag-color: var(--ty-color-success-strong);\n --tag-border-color: var(--ty-color-success);\n}\n:host([flavor=\"success-\"]) {\n --tag-bg: var(--ty-bg-success-soft);\n --tag-color: var(--ty-color-success);\n --tag-border-color: var(--ty-border-success);\n}\n:host([flavor=\"success\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"success+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"success-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-success-mild);\n}\n:host([flavor=\"success\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"success+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"success-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-success-faint);\n}\n\n/* ----- DANGER ----- */\n:host([flavor=\"danger\"]) {\n --tag-bg: var(--ty-bg-danger);\n --tag-color: var(--ty-color-danger-strong);\n --tag-border-color: var(--ty-border-danger);\n}\n:host([flavor=\"danger+\"]) {\n --tag-bg: var(--ty-bg-danger-mild);\n --tag-color: var(--ty-color-danger-strong);\n --tag-border-color: var(--ty-color-danger);\n}\n:host([flavor=\"danger-\"]) {\n --tag-bg: var(--ty-bg-danger-soft);\n --tag-color: var(--ty-color-danger);\n --tag-border-color: var(--ty-border-danger);\n}\n:host([flavor=\"danger\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"danger+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"danger-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-danger-mild);\n}\n:host([flavor=\"danger\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"danger+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"danger-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-danger-faint);\n}\n\n/* ----- WARNING ----- */\n:host([flavor=\"warning\"]) {\n --tag-bg: var(--ty-bg-warning);\n --tag-color: var(--ty-color-warning-strong);\n --tag-border-color: var(--ty-border-warning);\n}\n:host([flavor=\"warning+\"]) {\n --tag-bg: var(--ty-bg-warning-mild);\n --tag-color: var(--ty-color-warning-strong);\n --tag-border-color: var(--ty-color-warning);\n}\n:host([flavor=\"warning-\"]) {\n --tag-bg: var(--ty-bg-warning-soft);\n --tag-color: var(--ty-color-warning);\n --tag-border-color: var(--ty-border-warning);\n}\n:host([flavor=\"warning\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"warning+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"warning-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-warning-mild);\n}\n:host([flavor=\"warning\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"warning+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"warning-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-warning-faint);\n}\n\n/* ----- INFO (kept for back-compat \u2014 not in built-in Flavor union) ----- */\n:host([flavor=\"info\"]) {\n --tag-bg: var(--ty-bg-info);\n --tag-color: var(--ty-color-info-strong);\n --tag-border-color: var(--ty-border-info);\n}\n\n:host([flavor=\"info\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-info-mild);\n}\n\n:host([flavor=\"info\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-info-faint);\n}\n\n/* ----- NEUTRAL ----- */\n:host([flavor=\"neutral\"]) {\n --tag-color: var(--ty-text-mild);\n --tag-bg: var(--ty-bg-neutral-soft);\n --tag-border-color: var(--ty-border-mild);\n}\n\n:host([flavor=\"neutral+\"]) {\n --tag-bg: var(--ty-bg-neutral-mild);\n --tag-color: var(--ty-text-mild);\n --tag-border-color: var(--ty-border-strong);\n}\n:host([flavor=\"neutral-\"]) {\n --tag-bg: var(--ty-bg-neutral-soft);\n --tag-color: var(--ty-text-soft);\n --tag-border-color: var(--ty-border-mildstrong);\n}\n:host([flavor=\"neutral\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"neutral+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"neutral-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-neutral-soft);\n}\n:host([flavor=\"neutral\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"neutral+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"neutral-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-border-soft);\n}\n\n/* Slotted content styling */\n.tag-start ::slotted(*),\n.tag-content ::slotted(*),\n.tag-end ::slotted(*) {\n display: flex;\n align-items: center;\n}\n\n/* Icon sizing for slotted icons */\n.tag-start ::slotted(ty-icon),\n.tag-end ::slotted(ty-icon) {\n width: 1em;\n height: 1em;\n flex-shrink: 0;\n}\n\n/* Count/badge styling using centralized spacing */\n.tag-end ::slotted(.count) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--ty-spacing-6);\n /* 24px */\n height: var(--ty-spacing-5);\n /* 20px */\n padding: 0 var(--ty-spacing-2);\n /* 0 8px */\n background: rgba(0, 0, 0, 0.1);\n border-radius: var(--ty-radius-full);\n font-size: var(--ty-font-xs);\n font-weight: var(--ty-font-semibold);\n line-height: var(--ty-line-height-none);\n flex-shrink: 0;\n}\n\n/* Special handling for long text content */\n.tag-content {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n:host([data-type=\"user\"]) .tag-container {\n min-width: var(--ty-spacing-20);\n /* 80px for user tags */\n}\n\n/* Dark mode is handled automatically by the centralized variables */\n";
6
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,SAAS,uiZA8ZrB,CAAC"}
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Tag Component Styles
3
+ * PORTED FROM: clj/ty/components/tag.css
4
+ */
5
+ export const tagStyles = `
6
+ /* Tag Component Styles using centralized ty.variables.css */
7
+
8
+ /* Host element */
9
+
10
+ /* Hidden attribute support */
11
+ :host([hidden]) {
12
+ display: none !important;
13
+ }
14
+
15
+ /* Main container */
16
+ .tag-container {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: center;
20
+ gap: var(--ty-spacing-1);
21
+ /* Default pill shape - can be overridden */
22
+ border-radius: var(--ty-radius-full);
23
+ font-weight: var(--ty-font-medium);
24
+ text-align: center;
25
+ white-space: nowrap;
26
+ user-select: none;
27
+ box-sizing: border-box;
28
+
29
+ /* Default MD size — anchor at 28px, even +4 steps for other sizes */
30
+ padding: 0 0.625rem; /* 0 10px */
31
+ font-size: var(--ty-font-xs); /* 14px */
32
+ line-height: var(--ty-leading-xs); /* 21px */
33
+ letter-spacing: var(--ty-tracking-xs); /* -0.013em */
34
+ min-height: 28px;
35
+
36
+ /* Transitions using centralized values */
37
+ transition: var(--ty-transition-all);
38
+
39
+ /* Colors via custom properties — override on :host for full control */
40
+ background: var(--tag-bg, transparent);
41
+ color: var(--tag-color, var(--ty-text));
42
+ border: 1px solid;jk
43
+ border-color: var(--tag-border-color, var(--ty-border));
44
+ }
45
+
46
+ /* Non-pill variant - rectangular with rounded corners */
47
+ :host([pill="false"]) .tag-container,
48
+ :host([not-pill]) .tag-container {
49
+ border-radius: var(--ty-radius-md);
50
+ /* 6px instead of full pill */
51
+ }
52
+
53
+ /* Tags with value attribute but NOT selected should be clickable */
54
+ :host([value]:not([selected])) .tag-container:not([aria-disabled="true"]) {
55
+ cursor: pointer;
56
+ }
57
+
58
+ :host([selected]) .tag-container:not([aria-disabled="true"]) {
59
+ cursor: initial;
60
+ }
61
+
62
+ .tag-container[tabindex]:not([aria-disabled="true"]):hover {
63
+ background: var(--ty-bg-neutral-soft);
64
+ transform: translateY(-1px);
65
+ box-shadow: var(--ty-shadow-sm);
66
+ }
67
+
68
+ .tag-container[tabindex]:not([aria-disabled="true"]):active {
69
+ transform: translateY(0);
70
+ box-shadow: var(--ty-shadow-sm);
71
+ }
72
+
73
+ .tag-container[tabindex]:focus {
74
+ outline: none;
75
+ }
76
+
77
+ /* Disabled state */
78
+ .tag-container[aria-disabled="true"] {
79
+ opacity: 0.6;
80
+ cursor: not-allowed;
81
+ pointer-events: none;
82
+ }
83
+
84
+ /* Slot containers */
85
+ .tag-start,
86
+ .tag-content,
87
+ .tag-end {
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ flex-shrink: 0;
92
+ }
93
+
94
+ .tag-content {
95
+ flex: 1;
96
+ min-width: 0;
97
+ }
98
+
99
+ /* Dismiss button */
100
+ .tag-dismiss {
101
+ display: inline-flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ padding: 0;
105
+ background: none;
106
+ border: none;
107
+ color: currentColor;
108
+ cursor: pointer;
109
+ border-radius: var(--ty-radius-full);
110
+ transition: var(--ty-transition-all);
111
+ opacity: 0.7;
112
+ flex-shrink: 0;
113
+ /* Default MD dismiss button size */
114
+ width: var(--ty-spacing-4);
115
+ /* 16px */
116
+ height: var(--ty-spacing-4);
117
+ }
118
+
119
+ .tag-dismiss:hover {
120
+ opacity: 1;
121
+ background: rgba(0, 0, 0, 0.1);
122
+ }
123
+
124
+ .tag-dismiss svg {
125
+ width: 100%;
126
+ height: 100%;
127
+ }
128
+
129
+ /* Size variants - override defaults */
130
+ :host([size="xs"]) .tag-container {
131
+ padding: 0 0.375rem; /* 0 6px */
132
+ font-size: var(--ty-font-xs); /* 12px */
133
+ line-height: var(--ty-leading-xs);
134
+ letter-spacing: var(--ty-tracking-xs);
135
+ min-height: 20px;
136
+ }
137
+
138
+ :host([size="xs"]) .tag-dismiss {
139
+ width: var(--ty-spacing-3);
140
+ height: var(--ty-spacing-3);
141
+ margin-left: var(--ty-spacing-2);
142
+ }
143
+
144
+ :host([size="sm"]) .tag-container {
145
+ padding: 0 var(--ty-spacing-2); /* 0 8px */
146
+ font-size: var(--ty-font-xs); /* 12px */
147
+ line-height: var(--ty-leading-xs);
148
+ letter-spacing: var(--ty-tracking-xs);
149
+ min-height: 24px;
150
+ }
151
+
152
+ :host([size="sm"]) .tag-dismiss {
153
+ width: var(--ty-spacing-3);
154
+ height: var(--ty-spacing-3);
155
+ margin-left: var(--ty-spacing-2);
156
+ }
157
+
158
+ /* MD is now the default - no need for explicit [size="md"] selector */
159
+ /* All default styles above apply to MD size (min-height: 24px) */
160
+
161
+ :host([size="lg"]) .tag-container {
162
+ padding: 0 var(--ty-spacing-3); /* 0 12px */
163
+ font-size: var(--ty-font-sm); /* 14px */
164
+ line-height: var(--ty-leading-sm); /* 21px */
165
+ letter-spacing: var(--ty-tracking-sm); /* -0.013em */
166
+ min-height: 32px;
167
+ }
168
+
169
+ :host([size="lg"]) .tag-dismiss {
170
+ width: var(--ty-spacing-5);
171
+ height: var(--ty-spacing-5);
172
+ margin-left: var(--ty-spacing-4);
173
+ }
174
+
175
+ :host([size="xl"]) .tag-container {
176
+ padding: 0 0.875rem; /* 0 14px */
177
+ font-size: var(--ty-font-sm); /* 14px */
178
+ line-height: var(--ty-leading-sm); /* 21px */
179
+ letter-spacing: var(--ty-tracking-sm); /* -0.013em */
180
+ min-height: 36px;
181
+ }
182
+
183
+ :host([size="xl"]) .tag-dismiss {
184
+ width: var(--ty-spacing-5);
185
+ height: var(--ty-spacing-5);
186
+ margin-left: var(--ty-spacing-4);
187
+ }
188
+
189
+ /* ===== FLAVOR VARIANTS =====
190
+ Each flavor sets --tag-bg / --tag-color / --tag-border-color on :host.
191
+ Append '+' to flavor for a stronger shade (mild background, strong color),
192
+ or '-' for a softer shade (soft background, base color). */
193
+
194
+ /* ----- PRIMARY ----- */
195
+ :host([flavor="primary"]) {
196
+ --tag-bg: var(--ty-bg-primary);
197
+ --tag-color: var(--ty-color-primary-strong);
198
+ --tag-border-color: var(--ty-border-primary);
199
+ }
200
+ :host([flavor="primary+"]) {
201
+ --tag-bg: var(--ty-bg-primary-mild);
202
+ --tag-color: var(--ty-color-primary-strong);
203
+ --tag-border-color: var(--ty-color-primary);
204
+ }
205
+ :host([flavor="primary-"]) {
206
+ --tag-bg: var(--ty-bg-primary-soft);
207
+ --tag-color: var(--ty-color-primary);
208
+ --tag-border-color: var(--ty-border-primary);
209
+ }
210
+ :host([flavor="primary"]) .tag-container[tabindex]:hover,
211
+ :host([flavor="primary+"]) .tag-container[tabindex]:hover,
212
+ :host([flavor="primary-"]) .tag-container[tabindex]:hover {
213
+ background: var(--ty-bg-primary-mild);
214
+ }
215
+ :host([flavor="primary"]) .tag-container[tabindex]:focus,
216
+ :host([flavor="primary+"]) .tag-container[tabindex]:focus,
217
+ :host([flavor="primary-"]) .tag-container[tabindex]:focus {
218
+ box-shadow: 0 0 0 3px var(--ty-color-primary-faint);
219
+ }
220
+
221
+ /* ----- SECONDARY ----- */
222
+ :host([flavor="secondary"]) {
223
+ --tag-bg: var(--ty-bg-secondary);
224
+ --tag-color: var(--ty-color-secondary-strong);
225
+ --tag-border-color: var(--ty-border-secondary);
226
+ }
227
+ :host([flavor="secondary+"]) {
228
+ --tag-bg: var(--ty-bg-secondary-mild);
229
+ --tag-color: var(--ty-color-secondary-strong);
230
+ --tag-border-color: var(--ty-color-secondary);
231
+ }
232
+ :host([flavor="secondary-"]) {
233
+ --tag-bg: var(--ty-bg-secondary-soft);
234
+ --tag-color: var(--ty-color-secondary);
235
+ --tag-border-color: var(--ty-border-secondary);
236
+ }
237
+ :host([flavor="secondary"]) .tag-container[tabindex]:hover,
238
+ :host([flavor="secondary+"]) .tag-container[tabindex]:hover,
239
+ :host([flavor="secondary-"]) .tag-container[tabindex]:hover {
240
+ background: var(--ty-bg-secondary-mild);
241
+ }
242
+ :host([flavor="secondary"]) .tag-container[tabindex]:focus,
243
+ :host([flavor="secondary+"]) .tag-container[tabindex]:focus,
244
+ :host([flavor="secondary-"]) .tag-container[tabindex]:focus {
245
+ box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);
246
+ }
247
+
248
+ /* ----- SUCCESS ----- */
249
+ :host([flavor="success"]) {
250
+ --tag-bg: var(--ty-bg-success);
251
+ --tag-color: var(--ty-color-success-strong);
252
+ --tag-border-color: var(--ty-border-success);
253
+ }
254
+ :host([flavor="success+"]) {
255
+ --tag-bg: var(--ty-bg-success-mild);
256
+ --tag-color: var(--ty-color-success-strong);
257
+ --tag-border-color: var(--ty-color-success);
258
+ }
259
+ :host([flavor="success-"]) {
260
+ --tag-bg: var(--ty-bg-success-soft);
261
+ --tag-color: var(--ty-color-success);
262
+ --tag-border-color: var(--ty-border-success);
263
+ }
264
+ :host([flavor="success"]) .tag-container[tabindex]:hover,
265
+ :host([flavor="success+"]) .tag-container[tabindex]:hover,
266
+ :host([flavor="success-"]) .tag-container[tabindex]:hover {
267
+ background: var(--ty-bg-success-mild);
268
+ }
269
+ :host([flavor="success"]) .tag-container[tabindex]:focus,
270
+ :host([flavor="success+"]) .tag-container[tabindex]:focus,
271
+ :host([flavor="success-"]) .tag-container[tabindex]:focus {
272
+ box-shadow: 0 0 0 3px var(--ty-color-success-faint);
273
+ }
274
+
275
+ /* ----- DANGER ----- */
276
+ :host([flavor="danger"]) {
277
+ --tag-bg: var(--ty-bg-danger);
278
+ --tag-color: var(--ty-color-danger-strong);
279
+ --tag-border-color: var(--ty-border-danger);
280
+ }
281
+ :host([flavor="danger+"]) {
282
+ --tag-bg: var(--ty-bg-danger-mild);
283
+ --tag-color: var(--ty-color-danger-strong);
284
+ --tag-border-color: var(--ty-color-danger);
285
+ }
286
+ :host([flavor="danger-"]) {
287
+ --tag-bg: var(--ty-bg-danger-soft);
288
+ --tag-color: var(--ty-color-danger);
289
+ --tag-border-color: var(--ty-border-danger);
290
+ }
291
+ :host([flavor="danger"]) .tag-container[tabindex]:hover,
292
+ :host([flavor="danger+"]) .tag-container[tabindex]:hover,
293
+ :host([flavor="danger-"]) .tag-container[tabindex]:hover {
294
+ background: var(--ty-bg-danger-mild);
295
+ }
296
+ :host([flavor="danger"]) .tag-container[tabindex]:focus,
297
+ :host([flavor="danger+"]) .tag-container[tabindex]:focus,
298
+ :host([flavor="danger-"]) .tag-container[tabindex]:focus {
299
+ box-shadow: 0 0 0 3px var(--ty-color-danger-faint);
300
+ }
301
+
302
+ /* ----- WARNING ----- */
303
+ :host([flavor="warning"]) {
304
+ --tag-bg: var(--ty-bg-warning);
305
+ --tag-color: var(--ty-color-warning-strong);
306
+ --tag-border-color: var(--ty-border-warning);
307
+ }
308
+ :host([flavor="warning+"]) {
309
+ --tag-bg: var(--ty-bg-warning-mild);
310
+ --tag-color: var(--ty-color-warning-strong);
311
+ --tag-border-color: var(--ty-color-warning);
312
+ }
313
+ :host([flavor="warning-"]) {
314
+ --tag-bg: var(--ty-bg-warning-soft);
315
+ --tag-color: var(--ty-color-warning);
316
+ --tag-border-color: var(--ty-border-warning);
317
+ }
318
+ :host([flavor="warning"]) .tag-container[tabindex]:hover,
319
+ :host([flavor="warning+"]) .tag-container[tabindex]:hover,
320
+ :host([flavor="warning-"]) .tag-container[tabindex]:hover {
321
+ background: var(--ty-bg-warning-mild);
322
+ }
323
+ :host([flavor="warning"]) .tag-container[tabindex]:focus,
324
+ :host([flavor="warning+"]) .tag-container[tabindex]:focus,
325
+ :host([flavor="warning-"]) .tag-container[tabindex]:focus {
326
+ box-shadow: 0 0 0 3px var(--ty-color-warning-faint);
327
+ }
328
+
329
+ /* ----- INFO (kept for back-compat — not in built-in Flavor union) ----- */
330
+ :host([flavor="info"]) {
331
+ --tag-bg: var(--ty-bg-info);
332
+ --tag-color: var(--ty-color-info-strong);
333
+ --tag-border-color: var(--ty-border-info);
334
+ }
335
+
336
+ :host([flavor="info"]) .tag-container[tabindex]:hover {
337
+ background: var(--ty-bg-info-mild);
338
+ }
339
+
340
+ :host([flavor="info"]) .tag-container[tabindex]:focus {
341
+ box-shadow: 0 0 0 3px var(--ty-color-info-faint);
342
+ }
343
+
344
+ /* ----- NEUTRAL ----- */
345
+ :host([flavor="neutral"]) {
346
+ --tag-color: var(--ty-text-mild);
347
+ --tag-bg: var(--ty-bg-neutral-soft);
348
+ --tag-border-color: var(--ty-border-mild);
349
+ }
350
+
351
+ :host([flavor="neutral+"]) {
352
+ --tag-bg: var(--ty-bg-neutral-mild);
353
+ --tag-color: var(--ty-text-mild);
354
+ --tag-border-color: var(--ty-border-strong);
355
+ }
356
+ :host([flavor="neutral-"]) {
357
+ --tag-bg: var(--ty-bg-neutral-soft);
358
+ --tag-color: var(--ty-text-soft);
359
+ --tag-border-color: var(--ty-border-mildstrong);
360
+ }
361
+ :host([flavor="neutral"]) .tag-container[tabindex]:hover,
362
+ :host([flavor="neutral+"]) .tag-container[tabindex]:hover,
363
+ :host([flavor="neutral-"]) .tag-container[tabindex]:hover {
364
+ background: var(--ty-bg-neutral-soft);
365
+ }
366
+ :host([flavor="neutral"]) .tag-container[tabindex]:focus,
367
+ :host([flavor="neutral+"]) .tag-container[tabindex]:focus,
368
+ :host([flavor="neutral-"]) .tag-container[tabindex]:focus {
369
+ box-shadow: 0 0 0 3px var(--ty-border-soft);
370
+ }
371
+
372
+ /* Slotted content styling */
373
+ .tag-start ::slotted(*),
374
+ .tag-content ::slotted(*),
375
+ .tag-end ::slotted(*) {
376
+ display: flex;
377
+ align-items: center;
378
+ }
379
+
380
+ /* Icon sizing for slotted icons */
381
+ .tag-start ::slotted(ty-icon),
382
+ .tag-end ::slotted(ty-icon) {
383
+ width: 1em;
384
+ height: 1em;
385
+ flex-shrink: 0;
386
+ }
387
+
388
+ /* Count/badge styling using centralized spacing */
389
+ .tag-end ::slotted(.count) {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ min-width: var(--ty-spacing-6);
394
+ /* 24px */
395
+ height: var(--ty-spacing-5);
396
+ /* 20px */
397
+ padding: 0 var(--ty-spacing-2);
398
+ /* 0 8px */
399
+ background: rgba(0, 0, 0, 0.1);
400
+ border-radius: var(--ty-radius-full);
401
+ font-size: var(--ty-font-xs);
402
+ font-weight: var(--ty-font-semibold);
403
+ line-height: var(--ty-line-height-none);
404
+ flex-shrink: 0;
405
+ }
406
+
407
+ /* Special handling for long text content */
408
+ .tag-content {
409
+ overflow: hidden;
410
+ text-overflow: ellipsis;
411
+ }
412
+
413
+ :host([data-type="user"]) .tag-container {
414
+ min-width: var(--ty-spacing-20);
415
+ /* 80px for user tags */
416
+ }
417
+
418
+ /* Dark mode is handled automatically by the centralized variables */
419
+ `;
420
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ZxB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Styles for ty-textarea component
3
+ * Enhanced textarea with auto-resize functionality
4
+ */
5
+ export declare const textareaStyles = "\n:host {\n display: block;\n font-family: var(--ty-font-sans);\n width: 100%;\n}\n\n.textarea-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n /* For absolute positioned dummy element */\n}\n\n.textarea-wrapper {\n position: relative;\n width: 100%;\n}\n\n/* Custom scrollbar track positioning within textarea border */\n.textarea-wrapper .ty-scrollbar-track-y {\n top: 2px;\n right: 2px;\n bottom: 2px;\n border-radius: 0 4px 4px 0;\n}\n\n/* ===== LABEL STYLING ===== */\n\n.textarea-label {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-medium);\n color: var(--ty-label-color);\n margin-bottom: 6px;\n padding-left: 12px;\n}\n\n/* Required indicator - using SVG icon instead of CSS */\n.required-icon {\n display: inline-flex;\n align-items: center;\n color: var(--ty-color-danger);\n width: 12px;\n height: 12px;\n vertical-align: middle;\n}\n\n/* ===== ERROR MESSAGE STYLING ===== */\n\n.error-message {\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n color: var(--ty-color-danger);\n margin-top: 4px;\n padding-left: 12px;\n}\n\n/* Error state for textareas */\ntextarea.error {\n border-color: var(--ty-color-danger);\n background: var(--ty-bg-danger-soft);\n}\n\ntextarea.error:focus {\n border-color: var(--ty-color-danger-mild);\n box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));\n}\n\n/* ===== TEXTAREA BASE STYLING ===== */\n\ntextarea {\n /* Base appearance \u2014 elegant and minimal like input */\n box-sizing: border-box;\n width: 100%;\n border: 1px solid var(--input-border, var(--ty-input-border));\n border-radius: 6px;\n background: var(--input-bg, var(--ty-input-bg));\n color: var(--input-color, var(--ty-input-color));\n font-family: inherit;\n /* Linear-paired typography */\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-normal);\n transition: all 0.15s ease-in-out;\n outline: none;\n\n /* Default size (md) - refined spacing */\n min-height: 80px;\n /* Larger than input for multiline */\n padding: 12px 12px;\n /* Slightly larger padding for text areas */\n\n /* Auto-resize specific styles */\n overflow: hidden;\n /* Hide scrollbars since we're auto-resizing */\n resize: none;\n /* Disable manual resize by default */\n\n /* Ensure consistent text wrapping */\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n/* Hide native scrollbar for webkit when custom scrollbar is active\n (scrollbar-width: none handles Firefox; this handles Chrome/Safari) */\n:host([data-custom-scroll]) textarea::-webkit-scrollbar {\n display: none;\n}\n\n/* Focus state - elegant blue glow like input */\ntextarea:focus {\n border-color: var(--input-border-focus, var(--ty-input-border-focus));\n box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));\n background: var(--input-bg, var(--ty-input-bg));\n}\n\n/* Hover state - subtle feedback */\ntextarea:hover:not(:disabled) {\n border-color: var(--input-border-hover, var(--ty-input-border-hover));\n}\n\n/* Disabled state - refined opacity */\ntextarea:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n background: var(--input-disabled-bg, var(--ty-input-disabled-bg));\n border-color: var(--input-disabled-border, var(--ty-input-disabled-border));\n color: var(--input-disabled-color, var(--ty-input-disabled-color));\n}\n\n/* Placeholder styling - subtle and elegant */\ntextarea::placeholder {\n color: var(--input-placeholder, var(--ty-input-placeholder));\n font-weight: 400;\n}\n\n/* ===== RESIZE CONTROL OPTIONS ===== */\n\n/* Allow manual resizing */\ntextarea.resize-both {\n resize: both;\n}\n\ntextarea.resize-horizontal {\n resize: horizontal;\n}\n\ntextarea.resize-vertical {\n resize: vertical;\n}\n\ntextarea.resize-none {\n resize: none;\n}\n\n/* Auto-resize mode (default) disables manual resize */\ntextarea:not(.resize-both):not(.resize-horizontal):not(.resize-vertical) {\n resize: none;\n}\n\n/* ===== DUMMY ELEMENT FOR AUTO-RESIZE ===== */\n\n.textarea-dummy {\n /* Hidden element that measures text height */\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n visibility: hidden !important;\n white-space: pre-wrap !important;\n word-break: break-word !important;\n box-sizing: border-box !important;\n overflow: hidden !important;\n pointer-events: none !important;\n z-index: -1 !important;\n\n /* Ensure it has the same text behavior as textarea */\n word-wrap: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n/* ===== SIZE MODIFIERS ===== */\n\n/* Extra Small */\ntextarea.xs {\n min-height: 64px;\n padding: 8px 10px;\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n}\n\n/* Small */\ntextarea.sm {\n min-height: 72px;\n padding: 10px 10px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Medium (default) */\ntextarea.md {\n min-height: 80px;\n padding: 12px 12px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Large */\ntextarea.lg {\n min-height: 96px;\n padding: 14px 14px;\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n}\n\n/* Extra Large */\ntextarea.xl {\n min-height: 112px;\n padding: 16px 16px;\n font-size: var(--ty-font-lg);\n line-height: var(--ty-leading-lg);\n letter-spacing: var(--ty-tracking-lg);\n}\n\n/* ===== ACCESSIBILITY ENHANCEMENTS ===== */\n\ntextarea:focus-visible {\n outline: none;\n /* We use box-shadow instead */\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n textarea {\n border-width: 2px;\n }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n\n .textarea-dummy {\n transition: none;\n }\n}\n\n/* ===== CONTAINER-AWARE RESPONSIVE BEHAVIOR ===== */\n\n/* Scale down on smaller containers using container queries */\n@container (max-width: 480px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@container (max-width: 320px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* Fallback for browsers without container query support */\n@media (max-width: 640px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@media (max-width: 480px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* ===== ANIMATION AND TRANSITIONS ===== */\n\n/* Smooth height transitions for auto-resize */\ntextarea {\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out,\n height 0.1s ease-out;\n /* Smooth height changes */\n}\n\n/* Disable height transition on focus to avoid jarring effect */\ntextarea:focus {\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out;\n}\n\n/* For users who prefer reduced motion, disable height transitions */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n}\n";
6
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,muQAwV1B,CAAA"}