tyrell-components 1.0.0-TC7

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 +1564 -0
  41. package/lib/components/dropdown.js.map +1 -0
  42. package/lib/components/icon.d.ts +107 -0
  43. package/lib/components/icon.d.ts.map +1 -0
  44. package/lib/components/icon.js +230 -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 +314 -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 +229 -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 +125 -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 +400 -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 +231 -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 +415 -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,350 @@
1
+ /**
2
+ * Styles for ty-textarea component
3
+ * Enhanced textarea with auto-resize functionality
4
+ */
5
+ export const textareaStyles = `
6
+ :host {
7
+ display: block;
8
+ font-family: var(--ty-font-sans);
9
+ width: 100%;
10
+ }
11
+
12
+ .textarea-container {
13
+ display: flex;
14
+ flex-direction: column;
15
+ width: 100%;
16
+ box-sizing: border-box;
17
+ position: relative;
18
+ /* For absolute positioned dummy element */
19
+ }
20
+
21
+ .textarea-wrapper {
22
+ position: relative;
23
+ width: 100%;
24
+ }
25
+
26
+ /* Custom scrollbar track positioning within textarea border */
27
+ .textarea-wrapper .ty-scrollbar-track-y {
28
+ top: 2px;
29
+ right: 2px;
30
+ bottom: 2px;
31
+ border-radius: 0 4px 4px 0;
32
+ }
33
+
34
+ /* ===== LABEL STYLING ===== */
35
+
36
+ .textarea-label {
37
+ font-size: var(--ty-font-sm);
38
+ line-height: var(--ty-leading-sm);
39
+ letter-spacing: var(--ty-tracking-sm);
40
+ font-weight: var(--ty-font-medium);
41
+ color: var(--ty-label-color);
42
+ margin-bottom: 6px;
43
+ padding-left: 12px;
44
+ }
45
+
46
+ /* Required indicator - using SVG icon instead of CSS */
47
+ .required-icon {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ color: var(--ty-color-danger);
51
+ width: 12px;
52
+ height: 12px;
53
+ vertical-align: middle;
54
+ }
55
+
56
+ /* ===== ERROR MESSAGE STYLING ===== */
57
+
58
+ .error-message {
59
+ font-size: var(--ty-font-xs);
60
+ line-height: var(--ty-leading-xs);
61
+ letter-spacing: var(--ty-tracking-xs);
62
+ color: var(--ty-color-danger);
63
+ margin-top: 4px;
64
+ padding-left: 12px;
65
+ }
66
+
67
+ /* Error state for textareas */
68
+ textarea.error {
69
+ border-color: var(--ty-color-danger);
70
+ background: var(--ty-bg-danger-soft);
71
+ }
72
+
73
+ textarea.error:focus {
74
+ border-color: var(--ty-color-danger-mild);
75
+ box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
76
+ }
77
+
78
+ /* ===== TEXTAREA BASE STYLING ===== */
79
+
80
+ textarea {
81
+ /* Base appearance — elegant and minimal like input */
82
+ box-sizing: border-box;
83
+ width: 100%;
84
+ border: 1px solid var(--input-border, var(--ty-input-border));
85
+ border-radius: 6px;
86
+ background: var(--input-bg, var(--ty-input-bg));
87
+ color: var(--input-color, var(--ty-input-color));
88
+ font-family: inherit;
89
+ /* Linear-paired typography */
90
+ font-size: var(--ty-font-sm);
91
+ line-height: var(--ty-leading-sm);
92
+ letter-spacing: var(--ty-tracking-sm);
93
+ font-weight: var(--ty-font-normal);
94
+ transition: all 0.15s ease-in-out;
95
+ outline: none;
96
+
97
+ /* Default size (md) - refined spacing */
98
+ min-height: 80px;
99
+ /* Larger than input for multiline */
100
+ padding: 12px 12px;
101
+ /* Slightly larger padding for text areas */
102
+
103
+ /* Auto-resize specific styles */
104
+ overflow: hidden;
105
+ /* Hide scrollbars since we're auto-resizing */
106
+ resize: none;
107
+ /* Disable manual resize by default */
108
+
109
+ /* Ensure consistent text wrapping */
110
+ white-space: pre-wrap;
111
+ word-wrap: break-word;
112
+ }
113
+
114
+ /* Hide native scrollbar for webkit when custom scrollbar is active
115
+ (scrollbar-width: none handles Firefox; this handles Chrome/Safari) */
116
+ :host([data-custom-scroll]) textarea::-webkit-scrollbar {
117
+ display: none;
118
+ }
119
+
120
+ /* Focus state - elegant blue glow like input */
121
+ textarea:focus {
122
+ border-color: var(--input-border-focus, var(--ty-input-border-focus));
123
+ box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
124
+ background: var(--input-bg, var(--ty-input-bg));
125
+ }
126
+
127
+ /* Hover state - subtle feedback */
128
+ textarea:hover:not(:disabled) {
129
+ border-color: var(--input-border-hover, var(--ty-input-border-hover));
130
+ }
131
+
132
+ /* Disabled state - refined opacity */
133
+ textarea:disabled {
134
+ cursor: not-allowed;
135
+ opacity: 0.5;
136
+ background: var(--input-disabled-bg, var(--ty-input-disabled-bg));
137
+ border-color: var(--input-disabled-border, var(--ty-input-disabled-border));
138
+ color: var(--input-disabled-color, var(--ty-input-disabled-color));
139
+ }
140
+
141
+ /* Placeholder styling - subtle and elegant */
142
+ textarea::placeholder {
143
+ color: var(--input-placeholder, var(--ty-input-placeholder));
144
+ font-weight: 400;
145
+ }
146
+
147
+ /* ===== RESIZE CONTROL OPTIONS ===== */
148
+
149
+ /* Allow manual resizing */
150
+ textarea.resize-both {
151
+ resize: both;
152
+ }
153
+
154
+ textarea.resize-horizontal {
155
+ resize: horizontal;
156
+ }
157
+
158
+ textarea.resize-vertical {
159
+ resize: vertical;
160
+ }
161
+
162
+ textarea.resize-none {
163
+ resize: none;
164
+ }
165
+
166
+ /* Auto-resize mode (default) disables manual resize */
167
+ textarea:not(.resize-both):not(.resize-horizontal):not(.resize-vertical) {
168
+ resize: none;
169
+ }
170
+
171
+ /* ===== DUMMY ELEMENT FOR AUTO-RESIZE ===== */
172
+
173
+ .textarea-dummy {
174
+ /* Hidden element that measures text height */
175
+ position: absolute !important;
176
+ top: 0 !important;
177
+ left: 0 !important;
178
+ visibility: hidden !important;
179
+ white-space: pre-wrap !important;
180
+ word-break: break-word !important;
181
+ box-sizing: border-box !important;
182
+ overflow: hidden !important;
183
+ pointer-events: none !important;
184
+ z-index: -1 !important;
185
+
186
+ /* Ensure it has the same text behavior as textarea */
187
+ word-wrap: break-word !important;
188
+ overflow-wrap: break-word !important;
189
+ }
190
+
191
+ /* ===== SIZE MODIFIERS ===== */
192
+
193
+ /* Extra Small */
194
+ textarea.xs {
195
+ min-height: 64px;
196
+ padding: 8px 10px;
197
+ font-size: var(--ty-font-xs);
198
+ line-height: var(--ty-leading-xs);
199
+ letter-spacing: var(--ty-tracking-xs);
200
+ }
201
+
202
+ /* Small */
203
+ textarea.sm {
204
+ min-height: 72px;
205
+ padding: 10px 10px;
206
+ font-size: var(--ty-font-sm);
207
+ line-height: var(--ty-leading-sm);
208
+ letter-spacing: var(--ty-tracking-sm);
209
+ }
210
+
211
+ /* Medium (default) */
212
+ textarea.md {
213
+ min-height: 80px;
214
+ padding: 12px 12px;
215
+ font-size: var(--ty-font-sm);
216
+ line-height: var(--ty-leading-sm);
217
+ letter-spacing: var(--ty-tracking-sm);
218
+ }
219
+
220
+ /* Large */
221
+ textarea.lg {
222
+ min-height: 96px;
223
+ padding: 14px 14px;
224
+ font-size: var(--ty-font-base);
225
+ line-height: var(--ty-leading-base);
226
+ letter-spacing: var(--ty-tracking-base);
227
+ }
228
+
229
+ /* Extra Large */
230
+ textarea.xl {
231
+ min-height: 112px;
232
+ padding: 16px 16px;
233
+ font-size: var(--ty-font-lg);
234
+ line-height: var(--ty-leading-lg);
235
+ letter-spacing: var(--ty-tracking-lg);
236
+ }
237
+
238
+ /* ===== ACCESSIBILITY ENHANCEMENTS ===== */
239
+
240
+ textarea:focus-visible {
241
+ outline: none;
242
+ /* We use box-shadow instead */
243
+ }
244
+
245
+ /* High contrast mode support */
246
+ @media (prefers-contrast: high) {
247
+ textarea {
248
+ border-width: 2px;
249
+ }
250
+ }
251
+
252
+ /* Reduced motion support */
253
+ @media (prefers-reduced-motion: reduce) {
254
+ textarea {
255
+ transition: none;
256
+ }
257
+
258
+ .textarea-dummy {
259
+ transition: none;
260
+ }
261
+ }
262
+
263
+ /* ===== CONTAINER-AWARE RESPONSIVE BEHAVIOR ===== */
264
+
265
+ /* Scale down on smaller containers using container queries */
266
+ @container (max-width: 480px) {
267
+ textarea.lg {
268
+ font-size: var(--ty-font-sm);
269
+ line-height: var(--ty-leading-sm);
270
+ letter-spacing: var(--ty-tracking-sm);
271
+ padding: 12px 12px;
272
+ min-height: 80px;
273
+ }
274
+
275
+ textarea.xl {
276
+ font-size: var(--ty-font-base);
277
+ line-height: var(--ty-leading-base);
278
+ letter-spacing: var(--ty-tracking-base);
279
+ padding: 14px 14px;
280
+ min-height: 96px;
281
+ }
282
+ }
283
+
284
+ @container (max-width: 320px) {
285
+ textarea.xl {
286
+ font-size: var(--ty-font-sm);
287
+ line-height: var(--ty-leading-sm);
288
+ letter-spacing: var(--ty-tracking-sm);
289
+ padding: 12px 12px;
290
+ min-height: 80px;
291
+ }
292
+ }
293
+
294
+ /* Fallback for browsers without container query support */
295
+ @media (max-width: 640px) {
296
+ textarea.lg {
297
+ font-size: var(--ty-font-sm);
298
+ line-height: var(--ty-leading-sm);
299
+ letter-spacing: var(--ty-tracking-sm);
300
+ padding: 12px 12px;
301
+ min-height: 80px;
302
+ }
303
+
304
+ textarea.xl {
305
+ font-size: var(--ty-font-base);
306
+ line-height: var(--ty-leading-base);
307
+ letter-spacing: var(--ty-tracking-base);
308
+ padding: 14px 14px;
309
+ min-height: 96px;
310
+ }
311
+ }
312
+
313
+ @media (max-width: 480px) {
314
+ textarea.xl {
315
+ font-size: var(--ty-font-sm);
316
+ line-height: var(--ty-leading-sm);
317
+ letter-spacing: var(--ty-tracking-sm);
318
+ padding: 12px 12px;
319
+ min-height: 80px;
320
+ }
321
+ }
322
+
323
+ /* ===== ANIMATION AND TRANSITIONS ===== */
324
+
325
+ /* Smooth height transitions for auto-resize */
326
+ textarea {
327
+ transition:
328
+ border-color 0.15s ease-in-out,
329
+ box-shadow 0.15s ease-in-out,
330
+ background-color 0.15s ease-in-out,
331
+ height 0.1s ease-out;
332
+ /* Smooth height changes */
333
+ }
334
+
335
+ /* Disable height transition on focus to avoid jarring effect */
336
+ textarea:focus {
337
+ transition:
338
+ border-color 0.15s ease-in-out,
339
+ box-shadow 0.15s ease-in-out,
340
+ background-color 0.15s ease-in-out;
341
+ }
342
+
343
+ /* For users who prefer reduced motion, disable height transitions */
344
+ @media (prefers-reduced-motion: reduce) {
345
+ textarea {
346
+ transition: none;
347
+ }
348
+ }
349
+ `;
350
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwV7B,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tooltip Styles
3
+ *
4
+ * Bold, button-like tooltips with high contrast and semantic colors.
5
+ * Designed to grab attention and provide clear, readable information.
6
+ */
7
+ import type { StyleContent } from '../types/common.js';
8
+ export declare const tooltipStyles: StyleContent;
9
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/styles/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,aAAa,EAAE,YAgI3B,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Tooltip Styles
3
+ *
4
+ * Bold, button-like tooltips with high contrast and semantic colors.
5
+ * Designed to grab attention and provide clear, readable information.
6
+ */
7
+ export const tooltipStyles = {
8
+ id: 'ty-tooltip',
9
+ css: `
10
+ /* Tooltip host element - display contents to not affect layout */
11
+ :host {
12
+ display: contents;
13
+ }
14
+
15
+ /* Tooltip container - positioned element */
16
+ #tooltip-container {
17
+ position: fixed;
18
+ top: var(--y, 0px);
19
+ left: var(--x, 0px);
20
+ z-index: var(--ty-z-tooltip, 9999);
21
+
22
+ /* Hidden by default */
23
+ visibility: hidden;
24
+ opacity: 0;
25
+ transition: opacity 200ms, visibility 200ms;
26
+
27
+ /* Prevent interaction */
28
+ pointer-events: none;
29
+ user-select: none;
30
+ -webkit-user-select: none;
31
+
32
+ /* Bold shadow for depth */
33
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2),
34
+ 0 4px 6px -4px rgba(0, 0, 0, 0.1);
35
+ }
36
+
37
+ /* When open */
38
+ #tooltip-container.open {
39
+ visibility: visible;
40
+ opacity: 1;
41
+ }
42
+
43
+ /* Base tooltip styling - Dark inverted style (like buttons) */
44
+ #tooltip-container {
45
+ /* Bold, high-contrast styling */
46
+ background: var(--ty-tooltip-bg, #1f2937);
47
+ color: var(--ty-tooltip-color, #ffffff);
48
+
49
+ /* Comfortable padding */
50
+ padding: var(--ty-tooltip-padding, 8px 12px);
51
+ border-radius: var(--ty-tooltip-radius, 6px);
52
+
53
+ /* No border - solid color provides contrast */
54
+ border: none;
55
+
56
+ /* Sizing */
57
+ max-width: var(--ty-tooltip-max-width, 250px);
58
+
59
+ /* Typography - clear and readable */
60
+ font-size: var(--ty-font-sm, 14px);
61
+ font-weight: var(--ty-font-semibold, 600);
62
+ line-height: 1.5;
63
+ text-align: center;
64
+ }
65
+
66
+ /* Content slot */
67
+ #tooltip-container ::slotted(*) {
68
+ /* Ensure slotted content inherits styles */
69
+ color: inherit;
70
+ font-size: inherit;
71
+ line-height: inherit;
72
+ }
73
+
74
+ /* ============================================ */
75
+ /* Flavor Variants - Bold, Button-like Colors */
76
+ /* ============================================ */
77
+
78
+ /* Primary - Bold blue (like primary button) */
79
+ #tooltip-container[data-flavor="primary"] {
80
+ background: var(--ty-color-primary, #3b82f6);
81
+ color: #ffffff;
82
+ }
83
+
84
+ /* Success - Bold green */
85
+ #tooltip-container[data-flavor="success"] {
86
+ background: var(--ty-color-success, #10b981);
87
+ color: #ffffff;
88
+ }
89
+
90
+ /* Danger - Bold red */
91
+ #tooltip-container[data-flavor="danger"] {
92
+ background: var(--ty-color-danger, #ef4444);
93
+ color: #ffffff;
94
+ }
95
+
96
+ /* Warning - Bold orange/amber */
97
+ #tooltip-container[data-flavor="warning"] {
98
+ background: var(--ty-color-warning, #f59e0b);
99
+ color: #ffffff;
100
+ }
101
+
102
+ /* Info - Bold cyan/blue */
103
+ #tooltip-container[data-flavor="info"] {
104
+ background: var(--ty-color-info, #06b6d4);
105
+ color: #ffffff;
106
+ }
107
+
108
+ /* Neutral - Medium gray (default alternative) */
109
+ #tooltip-container[data-flavor="neutral"] {
110
+ background: var(--ty-color-neutral, #6b7280);
111
+ color: #ffffff;
112
+ }
113
+
114
+ /* Light - For dark backgrounds */
115
+ #tooltip-container[data-flavor="light"] {
116
+ background: var(--ty-surface-elevated, #ffffff);
117
+ color: var(--ty-text-strong, #111827);
118
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.15),
119
+ 0 4px 6px -4px rgba(0, 0, 0, 0.1),
120
+ 0 0 0 1px rgba(0, 0, 0, 0.05);
121
+ }
122
+
123
+ /* Dark - Inverted style (default) */
124
+ #tooltip-container[data-flavor="dark"] {
125
+ background: var(--ty-tooltip-bg, #1f2937);
126
+ color: #ffffff;
127
+ }
128
+
129
+ /* Secondary - Purple/indigo */
130
+ #tooltip-container[data-flavor="secondary"] {
131
+ background: var(--ty-color-secondary, #8b5cf6);
132
+ color: #ffffff;
133
+ }
134
+ `,
135
+ };
136
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/styles/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6HN;CACA,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Wizard Component Styles
3
+ *
4
+ * Styles for the ty-wizard container component including:
5
+ * - Flexbox layout with step indicators and content carousel
6
+ * - Progress line with animated completion overlay
7
+ * - Step circles with completed/active/pending states
8
+ * - Carousel viewport with transform animations
9
+ * - Responsive design with prefers-reduced-motion support
10
+ * - Fully customizable via CSS Parts (::part)
11
+ *
12
+ * Uses global design system tokens (no component-specific variables):
13
+ * - Surfaces: --ty-surface-floating, --ty-surface-content, --ty-surface-elevated
14
+ * - Colors: --ty-color-success, --ty-color-primary, --ty-color-danger
15
+ * - Borders: --ty-border, --ty-border-soft
16
+ * - Text: --ty-text, --ty-text-soft
17
+ *
18
+ * CSS Parts (for styling via ::part):
19
+ * - indicators-wrapper: The header containing step indicators
20
+ * - progress-line: The background progress track
21
+ * - step-circle: Individual step circle indicators
22
+ * - panels-container: The content viewport
23
+ */
24
+ export declare const wizardStyles = "\n:host {\n display: block;\n width: var(--wizard-width, 100%);\n height: var(--wizard-height, 700px);\n box-sizing: border-box;\n /* Note: --step-circle-size is NOT set here to allow inheritance from light DOM.\n Use fallbacks in var() calls instead. Set on ty-wizard element to customize. */\n}\n\n.wizard-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n box-sizing: border-box;\n border-radius: 12px;\n border: 1px solid var(--ty-border);\n background: var(--ty-surface-floating);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n/* ===================================== */\n/* Step Indicators Wrapper */\n/* Expose as CSS Part for full styling control */\n/* ===================================== */\n\n.step-indicators-wrapper {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n position: relative;\n padding: 24px 24px 16px;\n border-bottom: 1px solid var(--ty-border-soft, var(--ty-border));\n background: var(--ty-surface-content);\n}\n\n/* ===================================== */\n/* Progress Line (behind step circles) */\n/* Expose as CSS Part for custom styling */\n/* ===================================== */\n\n.progress-line {\n position: absolute;\n /*\n * With equal-width indicators (flex: 1), each takes 100%/N of the width.\n * Circle centers are at: 50%/N, 150%/N, 250%/N, ... from left.\n * Line spans from first center (50%/N) to last center (100% - 50%/N).\n * Inset = 50% / step-count from each side.\n */\n left: calc(50% / var(--step-count, 4));\n right: calc(50% / var(--step-count, 4));\n /* Vertically center with step circles - uses circle size variable */\n top: calc(var(--step-circle-size, 32px) / 2 - 1px);\n height: 2px;\n background: var(--ty-border);\n z-index: 0;\n pointer-events: none;\n transition: opacity var(--transition-duration, 300ms) var(--transition-easing, ease-in-out);\n}\n\n.progress-overlay {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n background: var(--ty-color-success);\n transition: width var(--transition-duration, 500ms) var(--transition-easing, ease-in-out);\n will-change: width;\n}\n\n/* ===================================== */\n/* Step Indicators Container */\n/* ===================================== */\n\n.step-indicators {\n display: flex;\n align-items: flex-start;\n position: relative;\n /* No padding - let equal-width indicators fill the space */\n}\n\n/* ===================================== */\n/* Individual Step Indicator */\n/* Expose as CSS Part for step styling */\n/* ===================================== */\n\n.step-indicator {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n background: transparent;\n border: none;\n padding: 0;\n font: inherit;\n transition: opacity 200ms;\n /* Equal width for all indicators - makes progress line alignment predictable */\n flex: 1;\n min-width: 0;\n}\n\n.step-indicator[aria-disabled=\"true\"] {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.step-indicator:focus-visible {\n outline: 2px solid var(--ty-color-primary);\n outline-offset: 4px;\n border-radius: 50%;\n}\n\n/* ===================================== */\n/* Step Circle - Smaller, cleaner */\n/* Expose as CSS Part for circle styling */\n/* ===================================== */\n\n.step-circle {\n /* Circle size - set --step-circle-size on ty-wizard element to customize */\n width: var(--step-circle-size, 32px);\n height: var(--step-circle-size, 32px);\n border-radius: 50%;\n border: 2px solid;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 10;\n transition: all var(--transition-duration, 300ms) var(--transition-easing, ease-in-out);\n box-sizing: border-box;\n flex-shrink: 0;\n}\n\n/* Completed state - green with success glow */\n.step-circle[data-state=\"completed\"] {\n background: var(--ty-color-success);\n border-color: var(--ty-color-success-600, var(--ty-color-success));\n color: white;\n box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.1);\n}\n\n/* Active state - primary with primary glow */\n.step-circle[data-state=\"active\"] {\n background: var(--ty-color-primary);\n border-color: var(--ty-color-primary-600, var(--ty-color-primary));\n color: white;\n box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);\n}\n\n/* Pending state - neutral gray */\n.step-circle[data-state=\"pending\"] {\n background: var(--ty-surface-elevated, #f3f4f6);\n border-color: var(--ty-border, #d1d5db);\n color: var(--ty-text-soft, #6b7280);\n}\n\n/* Error state - red with danger glow */\n.step-circle[data-state=\"error\"] {\n background: var(--ty-color-danger, #ef4444);\n border-color: var(--ty-color-danger-600, #dc2626);\n color: white;\n box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.1);\n}\n\n/* ===================================== */\n/* Step Text Container */\n/* Wraps label and description */\n/* ===================================== */\n\n.step-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n align-items: center;\n}\n\n/* ===================================== */\n/* Step Label - Main title */\n/* ===================================== */\n\n.step-label {\n font-size: var(--ty-font-sm, 14px);\n font-weight: var(--ty-font-semibold, 600);\n color: var(--ty-text, inherit);\n transition: color 200ms;\n}\n\n.step-indicator[aria-selected=\"true\"] .step-label {\n color: var(--ty-text-strong, inherit);\n}\n\n.step-indicator[aria-selected=\"false\"] .step-label {\n color: var(--ty-text-soft, inherit);\n}\n\n/* ===================================== */\n/* Step Description - Subtitle */\n/* ===================================== */\n\n.step-description {\n font-size: var(--ty-font-xs, 12px);\n font-weight: var(--ty-font-normal, 400);\n color: var(--ty-text-soft, #9ca3af);\n transition: color 200ms;\n text-align: center;\n max-width: 120px;\n}\n\n.step-indicator[aria-selected=\"true\"] .step-description {\n color: var(--ty-text, inherit);\n}\n\n/* ===================================== */\n/* Custom Indicator Content via Slots */\n/* ===================================== */\n\n::slotted([slot^=\"indicator-\"]) {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n/* ===================================== */\n/* Panels Viewport */\n/* Expose as CSS Part for panels container styling */\n/* ===================================== */\n\n.panels-viewport {\n position: relative;\n flex: 1;\n overflow: hidden;\n /* Critical: hides off-screen panels */\n min-height: 0;\n /* Allows flex child to shrink */\n background: var(--ty-surface-elevated);\n}\n\n/* ===================================== */\n/* Panels Wrapper (slides horizontally) */\n/* ===================================== */\n\n.panels-wrapper {\n display: flex;\n height: 100%;\n transition: transform var(--transition-duration, 300ms) var(--transition-easing, ease-in-out);\n will-change: transform;\n}\n\n/* ===================================== */\n/* Slotted Step Panels */\n/* ===================================== */\n\n::slotted(ty-step) {\n width: var(--wizard-width, 100%);\n height: 100%;\n flex-shrink: 0;\n}\n\n/* ===================================== */\n/* Accessibility & Motion Preferences */\n/* ===================================== */\n\n/* Respect user's motion preferences */\n@media (prefers-reduced-motion: reduce) {\n .panels-wrapper {\n transition-duration: 0ms !important;\n }\n\n .progress-overlay {\n transition-duration: 0ms !important;\n }\n\n .step-circle {\n transition-duration: 0ms !important;\n }\n\n .progress-line {\n transition-duration: 0ms !important;\n }\n}\n\n/* Screen reader only content */\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n";
25
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/styles/wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,YAAY,s6PA4SxB,CAAC"}