tyrell-components 1.0.0-TC55 → 1.0.0-TC57

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 (248) hide show
  1. package/README.md +53 -53
  2. package/css/tyrell-theme.css +7 -2
  3. package/css/tyrell.css +9 -18
  4. package/dist/tyrell-theme.css +1 -1
  5. package/dist/tyrell.css +1 -1
  6. package/dist/tyrell.js +1 -1
  7. package/lib/base/ty-component.d.ts +17 -0
  8. package/lib/base/ty-component.d.ts.map +1 -0
  9. package/lib/base/ty-component.js +32 -1
  10. package/lib/base/ty-component.js.map +1 -0
  11. package/lib/components/button.d.ts.map +1 -0
  12. package/lib/components/button.js +7 -0
  13. package/lib/components/button.js.map +1 -0
  14. package/lib/components/calendar-month.d.ts.map +1 -0
  15. package/lib/components/calendar-month.js +3 -2
  16. package/lib/components/calendar-month.js.map +1 -0
  17. package/lib/components/calendar-navigation.d.ts +11 -0
  18. package/lib/components/calendar-navigation.d.ts.map +1 -0
  19. package/lib/components/calendar-navigation.js +51 -40
  20. package/lib/components/calendar-navigation.js.map +1 -0
  21. package/lib/components/calendar.d.ts +28 -0
  22. package/lib/components/calendar.d.ts.map +1 -0
  23. package/lib/components/calendar.js +186 -4
  24. package/lib/components/calendar.js.map +1 -0
  25. package/lib/components/checkbox.d.ts +2 -0
  26. package/lib/components/checkbox.d.ts.map +1 -0
  27. package/lib/components/checkbox.js +10 -3
  28. package/lib/components/checkbox.js.map +1 -0
  29. package/lib/components/copy.d.ts.map +1 -0
  30. package/lib/components/copy.js +9 -2
  31. package/lib/components/copy.js.map +1 -0
  32. package/lib/components/date-picker.d.ts +17 -16
  33. package/lib/components/date-picker.d.ts.map +1 -0
  34. package/lib/components/date-picker.js +182 -249
  35. package/lib/components/date-picker.js.map +1 -0
  36. package/lib/components/dropdown.d.ts +403 -0
  37. package/lib/components/dropdown.d.ts.map +1 -0
  38. package/lib/components/dropdown.js +1315 -0
  39. package/lib/components/dropdown.js.map +1 -0
  40. package/lib/components/file-upload.d.ts +6 -0
  41. package/lib/components/file-upload.js +29 -2
  42. package/lib/components/icon.d.ts.map +1 -0
  43. package/lib/components/icon.js.map +1 -0
  44. package/lib/components/input.d.ts +74 -2
  45. package/lib/components/input.d.ts.map +1 -0
  46. package/lib/components/input.js +168 -8
  47. package/lib/components/input.js.map +1 -0
  48. package/lib/components/modal.d.ts +4 -8
  49. package/lib/components/modal.d.ts.map +1 -0
  50. package/lib/components/modal.js +18 -25
  51. package/lib/components/modal.js.map +1 -0
  52. package/lib/components/multiselect.d.ts +389 -0
  53. package/lib/components/multiselect.d.ts.map +1 -0
  54. package/lib/components/multiselect.js +1301 -0
  55. package/lib/components/multiselect.js.map +1 -0
  56. package/lib/components/option.d.ts.map +1 -0
  57. package/lib/components/option.js +5 -0
  58. package/lib/components/option.js.map +1 -0
  59. package/lib/components/popup.d.ts.map +1 -0
  60. package/lib/components/popup.js +19 -4
  61. package/lib/components/popup.js.map +1 -0
  62. package/lib/components/radio.d.ts +17 -0
  63. package/lib/components/radio.js +42 -4
  64. package/lib/components/resize-observer.d.ts.map +1 -0
  65. package/lib/components/resize-observer.js.map +1 -0
  66. package/lib/components/scroll-container.d.ts +3 -2
  67. package/lib/components/scroll-container.d.ts.map +1 -0
  68. package/lib/components/scroll-container.js +5 -8
  69. package/lib/components/scroll-container.js.map +1 -0
  70. package/lib/components/select.d.ts +16 -6
  71. package/lib/components/select.js +73 -19
  72. package/lib/components/selected-tags.d.ts +7 -1
  73. package/lib/components/selected-tags.js +10 -1
  74. package/lib/components/step.d.ts.map +1 -0
  75. package/lib/components/step.js.map +1 -0
  76. package/lib/components/switch.d.ts +2 -0
  77. package/lib/components/switch.js +10 -3
  78. package/lib/components/tab.d.ts +49 -1
  79. package/lib/components/tab.d.ts.map +1 -0
  80. package/lib/components/tab.js +151 -10
  81. package/lib/components/tab.js.map +1 -0
  82. package/lib/components/tabs.d.ts +14 -2
  83. package/lib/components/tabs.d.ts.map +1 -0
  84. package/lib/components/tabs.js +184 -135
  85. package/lib/components/tabs.js.map +1 -0
  86. package/lib/components/tag.d.ts +4 -7
  87. package/lib/components/tag.d.ts.map +1 -0
  88. package/lib/components/tag.js +6 -7
  89. package/lib/components/tag.js.map +1 -0
  90. package/lib/components/textarea.d.ts +8 -3
  91. package/lib/components/textarea.d.ts.map +1 -0
  92. package/lib/components/textarea.js +23 -15
  93. package/lib/components/textarea.js.map +1 -0
  94. package/lib/components/tooltip.d.ts +4 -3
  95. package/lib/components/tooltip.d.ts.map +1 -0
  96. package/lib/components/tooltip.js +34 -24
  97. package/lib/components/tooltip.js.map +1 -0
  98. package/lib/components/wizard.d.ts +5 -4
  99. package/lib/components/wizard.d.ts.map +1 -0
  100. package/lib/components/wizard.js +120 -156
  101. package/lib/components/wizard.js.map +1 -0
  102. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  103. package/lib/icons/fontawesome/brands.js.map +1 -0
  104. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  105. package/lib/icons/fontawesome/regular.js.map +1 -0
  106. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  107. package/lib/icons/fontawesome/solid.js.map +1 -0
  108. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  109. package/lib/icons/heroicons/micro.js.map +1 -0
  110. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  111. package/lib/icons/heroicons/mini.js.map +1 -0
  112. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  113. package/lib/icons/heroicons/outline.js.map +1 -0
  114. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  115. package/lib/icons/heroicons/solid.js.map +1 -0
  116. package/lib/icons/lucide.d.ts.map +1 -0
  117. package/lib/icons/lucide.js.map +1 -0
  118. package/lib/icons/material/filled.d.ts.map +1 -0
  119. package/lib/icons/material/filled.js.map +1 -0
  120. package/lib/icons/material/outlined.d.ts.map +1 -0
  121. package/lib/icons/material/outlined.js.map +1 -0
  122. package/lib/icons/material/round.d.ts.map +1 -0
  123. package/lib/icons/material/round.js.map +1 -0
  124. package/lib/icons/material/sharp.d.ts.map +1 -0
  125. package/lib/icons/material/sharp.js.map +1 -0
  126. package/lib/icons/material/two-tone.d.ts.map +1 -0
  127. package/lib/icons/material/two-tone.js.map +1 -0
  128. package/lib/index.d.ts +1 -1
  129. package/lib/index.d.ts.map +1 -0
  130. package/lib/index.js.map +1 -0
  131. package/lib/styles/button.d.ts.map +1 -0
  132. package/lib/styles/button.js +68 -58
  133. package/lib/styles/button.js.map +1 -0
  134. package/lib/styles/calendar-month.d.ts +3 -0
  135. package/lib/styles/calendar-month.d.ts.map +1 -0
  136. package/lib/styles/calendar-month.js +43 -27
  137. package/lib/styles/calendar-month.js.map +1 -0
  138. package/lib/styles/calendar-navigation.d.ts +1 -1
  139. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  140. package/lib/styles/calendar-navigation.js +55 -26
  141. package/lib/styles/calendar-navigation.js.map +1 -0
  142. package/lib/styles/calendar.d.ts +3 -2
  143. package/lib/styles/calendar.d.ts.map +1 -0
  144. package/lib/styles/calendar.js +74 -0
  145. package/lib/styles/calendar.js.map +1 -0
  146. package/lib/styles/checkbox.js +22 -10
  147. package/lib/styles/copy.d.ts.map +1 -0
  148. package/lib/styles/copy.js +5 -1
  149. package/lib/styles/copy.js.map +1 -0
  150. package/lib/styles/date-picker.d.ts.map +1 -0
  151. package/lib/styles/date-picker.js +53 -23
  152. package/lib/styles/date-picker.js.map +1 -0
  153. package/lib/styles/dropdown.d.ts +12 -0
  154. package/lib/styles/dropdown.d.ts.map +1 -0
  155. package/lib/styles/dropdown.js +725 -0
  156. package/lib/styles/dropdown.js.map +1 -0
  157. package/lib/styles/file-upload.d.ts +1 -1
  158. package/lib/styles/file-upload.js +3 -3
  159. package/lib/styles/icon.d.ts +1 -1
  160. package/lib/styles/icon.d.ts.map +1 -0
  161. package/lib/styles/icon.js +2 -2
  162. package/lib/styles/icon.js.map +1 -0
  163. package/lib/styles/input.d.ts.map +1 -0
  164. package/lib/styles/input.js +1 -1
  165. package/lib/styles/input.js.map +1 -0
  166. package/lib/styles/modal.d.ts.map +1 -0
  167. package/lib/styles/modal.js.map +1 -0
  168. package/lib/styles/multiselect.d.ts +6 -0
  169. package/lib/styles/multiselect.d.ts.map +1 -0
  170. package/lib/styles/multiselect.js +568 -0
  171. package/lib/styles/multiselect.js.map +1 -0
  172. package/lib/styles/option.d.ts +1 -1
  173. package/lib/styles/option.d.ts.map +1 -0
  174. package/lib/styles/option.js +3 -3
  175. package/lib/styles/option.js.map +1 -0
  176. package/lib/styles/popup.d.ts +1 -1
  177. package/lib/styles/popup.d.ts.map +1 -0
  178. package/lib/styles/popup.js +8 -5
  179. package/lib/styles/popup.js.map +1 -0
  180. package/lib/styles/radio.js +10 -4
  181. package/lib/styles/resize-observer.d.ts.map +1 -0
  182. package/lib/styles/resize-observer.js.map +1 -0
  183. package/lib/styles/scroll-container.d.ts +1 -1
  184. package/lib/styles/scroll-container.d.ts.map +1 -0
  185. package/lib/styles/scroll-container.js +1 -1
  186. package/lib/styles/scroll-container.js.map +1 -0
  187. package/lib/styles/select.d.ts +1 -1
  188. package/lib/styles/select.js +6 -0
  189. package/lib/styles/step.d.ts +1 -1
  190. package/lib/styles/step.d.ts.map +1 -0
  191. package/lib/styles/step.js +1 -9
  192. package/lib/styles/step.js.map +1 -0
  193. package/lib/styles/switch.js +6 -3
  194. package/lib/styles/tab.d.ts +1 -1
  195. package/lib/styles/tab.d.ts.map +1 -0
  196. package/lib/styles/tab.js +67 -3
  197. package/lib/styles/tab.js.map +1 -0
  198. package/lib/styles/tabs.d.ts +1 -1
  199. package/lib/styles/tabs.d.ts.map +1 -0
  200. package/lib/styles/tabs.js +7 -3
  201. package/lib/styles/tabs.js.map +1 -0
  202. package/lib/styles/tag.d.ts.map +1 -0
  203. package/lib/styles/tag.js +1 -2
  204. package/lib/styles/tag.js.map +1 -0
  205. package/lib/styles/textarea.d.ts.map +1 -0
  206. package/lib/styles/textarea.js.map +1 -0
  207. package/lib/styles/tooltip.d.ts.map +1 -0
  208. package/lib/styles/tooltip.js.map +1 -0
  209. package/lib/styles/wizard.d.ts +9 -5
  210. package/lib/styles/wizard.d.ts.map +1 -0
  211. package/lib/styles/wizard.js +211 -99
  212. package/lib/styles/wizard.js.map +1 -0
  213. package/lib/types/common.d.ts +2 -2
  214. package/lib/types/common.d.ts.map +1 -0
  215. package/lib/types/common.js.map +1 -0
  216. package/lib/utils/calendar-utils.d.ts.map +1 -0
  217. package/lib/utils/calendar-utils.js.map +1 -0
  218. package/lib/utils/icon-registry.d.ts.map +1 -0
  219. package/lib/utils/icon-registry.js.map +1 -0
  220. package/lib/utils/locale.d.ts.map +1 -0
  221. package/lib/utils/locale.js.map +1 -0
  222. package/lib/utils/number-format.d.ts.map +1 -0
  223. package/lib/utils/number-format.js.map +1 -0
  224. package/lib/utils/parse-boolean.d.ts +39 -0
  225. package/lib/utils/parse-boolean.d.ts.map +1 -0
  226. package/lib/utils/parse-boolean.js +23 -0
  227. package/lib/utils/parse-boolean.js.map +1 -0
  228. package/lib/utils/positioning.d.ts.map +1 -0
  229. package/lib/utils/positioning.js.map +1 -0
  230. package/lib/utils/property-capture.d.ts.map +1 -0
  231. package/lib/utils/property-capture.js.map +1 -0
  232. package/lib/utils/property-manager.d.ts +7 -1
  233. package/lib/utils/property-manager.d.ts.map +1 -0
  234. package/lib/utils/property-manager.js +16 -4
  235. package/lib/utils/property-manager.js.map +1 -0
  236. package/lib/utils/resize-observer.d.ts.map +1 -0
  237. package/lib/utils/resize-observer.js.map +1 -0
  238. package/lib/utils/scroll-lock.d.ts.map +1 -0
  239. package/lib/utils/scroll-lock.js.map +1 -0
  240. package/lib/utils/styles.d.ts.map +1 -0
  241. package/lib/utils/styles.js.map +1 -0
  242. package/lib/utils/validity.d.ts +38 -0
  243. package/lib/utils/validity.js +116 -0
  244. package/lib/version.d.ts +1 -1
  245. package/lib/version.d.ts.map +1 -0
  246. package/lib/version.js +1 -1
  247. package/lib/version.js.map +1 -0
  248. package/package.json +26 -5
@@ -1 +1 @@
1
- export declare const fileUploadStyles = "\n:host {\n display: block;\n font-family: inherit;\n width: 100%;\n}\n\n.file-upload-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n}\n\n.upload-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: 4px;\n display: flex;\n align-items: center;\n}\n\n.required-icon {\n color: var(--ty-color-danger);\n margin-left: 4px;\n font-size: 0.75rem;\n line-height: 1;\n}\n\n.drop-zone {\n border: 2px dashed var(--ty-border);\n border-radius: var(--ty-radius-base);\n padding: 2rem 1.5rem;\n text-align: center;\n cursor: pointer;\n transition: var(--ty-local-transition, border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease);\n outline: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n min-height: 140px;\n user-select: none;\n}\n\n.drop-zone:hover:not(.disabled) {\n border-color: var(--ty-input-border-hover);\n background: var(--ty-surface-content);\n}\n\n.drop-zone.focused {\n border-color: var(--ty-input-border-focus);\n box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);\n}\n\n.drop-zone.drag-active {\n border-color: var(--ty-color-primary);\n border-style: solid;\n background: var(--ty-bg-primary-);\n}\n\n.drop-zone.drag-active .upload-icon {\n color: var(--ty-color-primary);\n transform: translateY(-2px);\n}\n\n.drop-zone.has-files {\n min-height: 80px;\n padding: 1.25rem 1.5rem;\n}\n\n.drop-zone.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.drop-zone.error {\n border-color: var(--ty-color-danger);\n}\n\n.drop-zone.error:not(.disabled) {\n background: var(--ty-bg-danger-);\n}\n\n.upload-icon {\n color: var(--ty-text-faint);\n width: 2.5rem;\n height: 2.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--ty-local-transition, color 0.15s ease, transform 0.15s ease);\n pointer-events: none;\n}\n\n.upload-icon svg {\n width: 100%;\n height: 100%;\n}\n\n.upload-hint {\n color: var(--ty-text-soft);\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n pointer-events: none;\n}\n\n.browse-link {\n color: var(--ty-color-primary);\n font-weight: var(--ty-font-medium);\n}\n\n.upload-sub-hint {\n color: var(--ty-text-faint);\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n pointer-events: none;\n}\n\n.file-list {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n margin-top: 0.5rem;\n}\n\n.file-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: var(--ty-radius-base);\n background: var(--ty-surface-content);\n border: 1px solid var(--ty-border-soft);\n}\n\n.file-icon {\n color: var(--ty-text-faint);\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n display: flex;\n align-items: center;\n}\n\n.file-icon svg {\n width: 100%;\n height: 100%;\n}\n\n.file-name {\n flex: 1;\n font-size: var(--ty-font-sm);\n color: var(--ty-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n.file-size {\n font-size: var(--ty-font-xs);\n color: var(--ty-text-faint);\n flex-shrink: 0;\n font-variant-numeric: tabular-nums;\n}\n\n.file-remove {\n flex-shrink: 0;\n cursor: pointer;\n color: var(--ty-text-faint);\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: var(--ty-local-transition, color 0.15s ease, background-color 0.15s ease);\n border: none;\n background: none;\n padding: 0;\n outline: none;\n}\n\n.file-remove:hover {\n color: var(--ty-color-danger);\n background: var(--ty-bg-danger-);\n}\n\n.file-remove:focus-visible {\n box-shadow: 0 0 0 2px var(--ty-color-danger);\n}\n\n.file-remove svg {\n width: 12px;\n height: 12px;\n}\n\n.error-message {\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n color: var(--ty-color-danger);\n margin-top: 4px;\n padding-left: 4px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .drop-zone,\n .upload-icon,\n .file-remove {\n transition: none;\n }\n}\n\n@media (prefers-contrast: high) {\n .drop-zone {\n border-width: 3px;\n }\n}\n";
1
+ export declare const fileUploadStyles = "\n:host {\n display: block;\n font-family: inherit;\n width: 100%;\n}\n\n.file-upload-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n}\n\n.upload-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: 4px;\n display: flex;\n align-items: center;\n}\n\n.required-icon {\n color: var(--ty-color-danger);\n margin-left: 4px;\n font-size: 0.75rem;\n line-height: 1;\n}\n\n.drop-zone {\n border: 2px dashed var(--ty-border);\n border-radius: var(--ty-radius-base);\n padding: 2rem 1.5rem;\n text-align: center;\n cursor: pointer;\n transition: var(--ty-local-transition, border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease);\n outline: none;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n min-height: 140px;\n user-select: none;\n}\n\n.drop-zone:hover:not(.disabled) {\n border-color: var(--ty-input-border-hover);\n background: var(--ty-surface-content);\n}\n\n.drop-zone.focused {\n border-color: var(--ty-input-border-focus);\n box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);\n}\n\n.drop-zone.drag-active {\n border-color: var(--ty-color-primary);\n border-style: solid;\n background: var(--ty-bg-primary-soft);\n}\n\n.drop-zone.drag-active .upload-icon {\n color: var(--ty-color-primary);\n transform: translateY(-2px);\n}\n\n.drop-zone.has-files {\n min-height: 80px;\n padding: 1.25rem 1.5rem;\n}\n\n.drop-zone.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.drop-zone.error {\n border-color: var(--ty-color-danger);\n}\n\n.drop-zone.error:not(.disabled) {\n background: var(--ty-bg-danger-soft);\n}\n\n.upload-icon {\n color: var(--ty-text-faint);\n width: 2.5rem;\n height: 2.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--ty-local-transition, color 0.15s ease, transform 0.15s ease);\n pointer-events: none;\n}\n\n.upload-icon svg {\n width: 100%;\n height: 100%;\n}\n\n.upload-hint {\n color: var(--ty-text-soft);\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n pointer-events: none;\n}\n\n.browse-link {\n color: var(--ty-color-primary);\n font-weight: var(--ty-font-medium);\n}\n\n.upload-sub-hint {\n color: var(--ty-text-faint);\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n pointer-events: none;\n}\n\n.file-list {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n margin-top: 0.5rem;\n}\n\n.file-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: var(--ty-radius-base);\n background: var(--ty-surface-content);\n border: 1px solid var(--ty-border-soft);\n}\n\n.file-icon {\n color: var(--ty-text-faint);\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n display: flex;\n align-items: center;\n}\n\n.file-icon svg {\n width: 100%;\n height: 100%;\n}\n\n.file-name {\n flex: 1;\n font-size: var(--ty-font-sm);\n color: var(--ty-text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n\n.file-size {\n font-size: var(--ty-font-xs);\n color: var(--ty-text-faint);\n flex-shrink: 0;\n font-variant-numeric: tabular-nums;\n}\n\n.file-remove {\n flex-shrink: 0;\n cursor: pointer;\n color: var(--ty-text-faint);\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: var(--ty-local-transition, color 0.15s ease, background-color 0.15s ease);\n border: none;\n background: none;\n padding: 0;\n outline: none;\n}\n\n.file-remove:hover {\n color: var(--ty-color-danger);\n background: var(--ty-bg-danger-soft);\n}\n\n.file-remove:focus-visible {\n box-shadow: 0 0 0 2px var(--ty-color-danger);\n}\n\n.file-remove svg {\n width: 12px;\n height: 12px;\n}\n\n.error-message {\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n color: var(--ty-color-danger);\n margin-top: 4px;\n padding-left: 4px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .drop-zone,\n .upload-icon,\n .file-remove {\n transition: none;\n }\n}\n\n@media (prefers-contrast: high) {\n .drop-zone {\n border-width: 3px;\n }\n}\n";
@@ -54,7 +54,7 @@ box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);
54
54
  .drop-zone.drag-active {
55
55
  border-color: var(--ty-color-primary);
56
56
  border-style: solid;
57
- background: var(--ty-bg-primary-);
57
+ background: var(--ty-bg-primary-soft);
58
58
  }
59
59
  .drop-zone.drag-active .upload-icon {
60
60
  color: var(--ty-color-primary);
@@ -73,7 +73,7 @@ pointer-events: none;
73
73
  border-color: var(--ty-color-danger);
74
74
  }
75
75
  .drop-zone.error:not(.disabled) {
76
- background: var(--ty-bg-danger-);
76
+ background: var(--ty-bg-danger-soft);
77
77
  }
78
78
  .upload-icon {
79
79
  color: var(--ty-text-faint);
@@ -165,7 +165,7 @@ outline: none;
165
165
  }
166
166
  .file-remove:hover {
167
167
  color: var(--ty-color-danger);
168
- background: var(--ty-bg-danger-);
168
+ background: var(--ty-bg-danger-soft);
169
169
  }
170
170
  .file-remove:focus-visible {
171
171
  box-shadow: 0 0 0 2px var(--ty-color-danger);
@@ -1,2 +1,2 @@
1
1
  /** Icon Component Styles */
2
- export declare const iconStyles = "\n:host {\n /* Display & Layout - CRITICAL: No containment to prevent paint deferral */\n /* Block-level flex, NOT inline-flex: as an inline box the icon generates a\n line box in its parent, so a shrink-wrapping wrapper (badge, .rounded-full\n chip) inherits the parent's line-height strut and renders taller than wide\n \u2014 a 12px icon in a 24px-line-height badge becomes a 22x34 oval. To place an\n icon inline with text, make the *text wrapper* inline-flex instead. */\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n \n width: var(--ty-icon-size, 1em);\n height: var(--ty-icon-size, 1em);\n \n aspect-ratio: 1 / 1;\n \n \n color: inherit;\n transition: color var(--ty-transition-fast);\n \n flex-shrink: 0;\n \n /* Visibility - Force immediate rendering */\n visibility: visible !important;\n opacity: 1;\n \n /* ANTI-FLICKER: Force browser to paint immediately */\n will-change: contents;\n \n /* Prevent any sub-pixel rendering issues */\n transform: translateZ(0);\n -webkit-font-smoothing: antialiased;\n}\n\n/* The SVG element inside shadow DOM (registry / fallback path) */\n:host svg {\n width: 100%;\n height: 100%;\n display: block;\n\n /* Force immediate SVG rendering */\n will-change: auto;\n transform: translateZ(0);\n}\n\n/* Slotted SVG (server-side path: <ty-icon><svg>...</svg></ty-icon>).\n ::slotted() targets light-DOM children so they fill the host the same way\n shadow-DOM SVG does. Color is inherited from :host via currentColor. */\n::slotted(svg),\n::slotted(img) {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* In a named slot the icon sits alongside text (button start/end), so inline\n layout is what the host expects there. */\n:host([slot]) {\n display: inline-flex;\n}\n\n:host(.icon-xs) {\n width: 0.75em;\n height: 0.75em;\n}\n\n:host(.icon-sm) {\n width: 0.875em;\n height: 0.875em;\n}\n\n:host(.icon-md) {\n width: 1em;\n height: 1em;\n}\n\n:host(.icon-lg) {\n width: 1.25em;\n height: 1.25em;\n}\n\n:host(.icon-xl) {\n width: 1.5em;\n height: 1.5em;\n}\n\n:host(.icon-2xl) {\n width: 2em;\n height: 2em;\n}\n\n/* Fixed pixel sizes */\n:host(.icon-12) {\n width: 12px;\n height: 12px;\n}\n\n:host(.icon-14) {\n width: 14px;\n height: 14px;\n}\n\n:host(.icon-16) {\n width: 16px;\n height: 16px;\n}\n\n:host(.icon-18) {\n width: 18px;\n height: 18px;\n}\n\n:host(.icon-20) {\n width: 20px;\n height: 20px;\n}\n\n:host(.icon-24) {\n width: 24px;\n height: 24px;\n}\n\n:host(.icon-32) {\n width: 32px;\n height: 32px;\n}\n\n:host(.icon-48) {\n width: 48px;\n height: 48px;\n}\n\n:host(.icon-64) {\n width: 64px;\n height: 64px;\n}\n\n:host(.icon-80) {\n width: 80px;\n height: 80px;\n}\n\n:host(.icon-96) {\n width: 96px;\n height: 96px;\n}\n\n:host(.icon-spin) {\n animation: icon-spin 1s linear infinite;\n}\n\n:host(.icon-spin.icon-tempo-slow) {\n animation: icon-spin 2s linear infinite;\n}\n\n:host(.icon-spin.icon-tempo-fast) {\n animation: icon-spin 0.5s linear infinite;\n}\n\n@keyframes icon-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n:host(.icon-pulse) {\n animation: icon-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n:host(.icon-pulse.icon-tempo-slow) {\n animation: icon-pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n:host(.icon-pulse.icon-tempo-fast) {\n animation: icon-pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@keyframes icon-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n}\n\n/* Accessibility: ensure icons are not announced by screen readers by default */\n:host {\n -webkit-user-select: none;\n user-select: none;\n}\n\n:host(:not(.icon-clickable)) {\n pointer-events: none;\n}\n\n:host(.icon-clickable) {\n cursor: pointer;\n pointer-events: auto;\n transition: color var(--ty-transition-fast), transform var(--ty-transition-fast);\n}\n\n:host(.icon-clickable:hover) {\n transform: scale(1.1);\n}\n\n:host(.icon-clickable:active) {\n transform: scale(0.95);\n}\n\n:host(.icon-disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n:host(.icon-block) {\n display: block;\n}\n";
2
+ export declare const iconStyles = "\n:host {\n /* Display & Layout - CRITICAL: No containment to prevent paint deferral */\n /* Block-level flex, NOT inline-flex: as an inline box the icon generates a\n line box in its parent, so a shrink-wrapping wrapper (badge, .rounded-full\n chip) inherits the parent's line-height strut and renders taller than wide\n \u2014 a 12px icon in a 24px-line-height badge becomes a 22x34 oval. To place an\n icon inline with text, make the *text wrapper* inline-flex instead. */\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n \n width: var(--ty-icon-size, 1em);\n height: var(--ty-icon-size, 1em);\n \n aspect-ratio: 1 / 1;\n \n \n color: inherit;\n transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1);\n \n flex-shrink: 0;\n \n /* Visibility - Force immediate rendering */\n visibility: visible !important;\n opacity: 1;\n \n /* ANTI-FLICKER: Force browser to paint immediately */\n will-change: contents;\n \n /* Prevent any sub-pixel rendering issues */\n transform: translateZ(0);\n -webkit-font-smoothing: antialiased;\n}\n\n/* The SVG element inside shadow DOM (registry / fallback path) */\n:host svg {\n width: 100%;\n height: 100%;\n display: block;\n\n /* Force immediate SVG rendering */\n will-change: auto;\n transform: translateZ(0);\n}\n\n/* Slotted SVG (server-side path: <ty-icon><svg>...</svg></ty-icon>).\n ::slotted() targets light-DOM children so they fill the host the same way\n shadow-DOM SVG does. Color is inherited from :host via currentColor. */\n::slotted(svg),\n::slotted(img) {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* In a named slot the icon sits alongside text (button start/end), so inline\n layout is what the host expects there. */\n:host([slot]) {\n display: inline-flex;\n}\n\n:host(.icon-xs) {\n width: 0.75em;\n height: 0.75em;\n}\n\n:host(.icon-sm) {\n width: 0.875em;\n height: 0.875em;\n}\n\n:host(.icon-md) {\n width: 1em;\n height: 1em;\n}\n\n:host(.icon-lg) {\n width: 1.25em;\n height: 1.25em;\n}\n\n:host(.icon-xl) {\n width: 1.5em;\n height: 1.5em;\n}\n\n:host(.icon-2xl) {\n width: 2em;\n height: 2em;\n}\n\n/* Fixed pixel sizes */\n:host(.icon-12) {\n width: 12px;\n height: 12px;\n}\n\n:host(.icon-14) {\n width: 14px;\n height: 14px;\n}\n\n:host(.icon-16) {\n width: 16px;\n height: 16px;\n}\n\n:host(.icon-18) {\n width: 18px;\n height: 18px;\n}\n\n:host(.icon-20) {\n width: 20px;\n height: 20px;\n}\n\n:host(.icon-24) {\n width: 24px;\n height: 24px;\n}\n\n:host(.icon-32) {\n width: 32px;\n height: 32px;\n}\n\n:host(.icon-48) {\n width: 48px;\n height: 48px;\n}\n\n:host(.icon-64) {\n width: 64px;\n height: 64px;\n}\n\n:host(.icon-80) {\n width: 80px;\n height: 80px;\n}\n\n:host(.icon-96) {\n width: 96px;\n height: 96px;\n}\n\n:host(.icon-spin) {\n animation: icon-spin 1s linear infinite;\n}\n\n:host(.icon-spin.icon-tempo-slow) {\n animation: icon-spin 2s linear infinite;\n}\n\n:host(.icon-spin.icon-tempo-fast) {\n animation: icon-spin 0.5s linear infinite;\n}\n\n@keyframes icon-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n:host(.icon-pulse) {\n animation: icon-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n:host(.icon-pulse.icon-tempo-slow) {\n animation: icon-pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n:host(.icon-pulse.icon-tempo-fast) {\n animation: icon-pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n@keyframes icon-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n}\n\n/* Accessibility: ensure icons are not announced by screen readers by default */\n:host {\n -webkit-user-select: none;\n user-select: none;\n}\n\n:host(:not(.icon-clickable)) {\n pointer-events: none;\n}\n\n:host(.icon-clickable) {\n cursor: pointer;\n pointer-events: auto;\n transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n:host(.icon-clickable:hover) {\n transform: scale(1.1);\n}\n\n:host(.icon-clickable:active) {\n transform: scale(0.95);\n}\n\n:host(.icon-disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n:host(.icon-block) {\n display: block;\n}\n";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../src/styles/icon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU,k9HAoOtB,CAAA"}
@@ -8,7 +8,7 @@ width: var(--ty-icon-size, 1em);
8
8
  height: var(--ty-icon-size, 1em);
9
9
  aspect-ratio: 1 / 1;
10
10
  color: inherit;
11
- transition: color var(--ty-transition-fast);
11
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1);
12
12
  flex-shrink: 0;
13
13
  visibility: visible !important;
14
14
  opacity: 1;
@@ -145,7 +145,7 @@ pointer-events: none;
145
145
  :host(.icon-clickable) {
146
146
  cursor: pointer;
147
147
  pointer-events: auto;
148
- transition: color var(--ty-transition-fast), transform var(--ty-transition-fast);
148
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);
149
149
  }
150
150
  :host(.icon-clickable:hover) {
151
151
  transform: scale(1.1);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/styles/icon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoOzB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/styles/input.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,WAAW,6tYA8oBvB,CAAA"}
@@ -96,7 +96,7 @@ display: flex;
96
96
  align-items: center;
97
97
  justify-content: center;
98
98
  flex-shrink: 0;
99
- color: var(--ty-color-text-soft);
99
+ color: var(--ty-text-soft);
100
100
  }
101
101
  .password-toggle {
102
102
  display: flex;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/styles/input.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8oB1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../src/styles/modal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,WAAW,w3FA8HvB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../../src/styles/modal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8H1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Multiselect Component Styles
3
+ * PORTED FROM: clj/ty/components/multiselect.css
4
+ */
5
+ export declare const multiselectStyles = "\n/* Multiselect-specific styles extending dropdown base styles */\n\n:host {\n --mobile-border-color: #5858587d;\n}\n\n/* ===== DIALOG POSITIONING SUPPORT ===== */\n\n.dropdown-dialog {\n position: fixed;\n width: var(--dropdown-width, 200px);\n max-width: 100vw;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n box-sizing: border-box;\n padding: var(--dropdown-padding, 20px);\n /* Modal handles z-index automatically */\n\n /* Hidden by default */\n opacity: 0;\n transition: opacity 400ms ease;\n\n transform: translate(var(--dropdown-offset-x, 0px), var(--dropdown-offset-y, 0px));\n top: -1000px;\n left: -1000px;\n}\n\n/* When opened via showModal(), apply flex layout and direction */\n.dropdown-dialog[open] {\n display: flex;\n flex-direction: column;\n}\n\n/* Direction-based positioning with CSS classes */\n.dropdown-dialog.position-below {\n left: var(--dropdown-x);\n top: var(--dropdown-y);\n}\n\n.dropdown-dialog.position-above {\n left: var(--dropdown-x);\n bottom: var(--dropdown-y);\n top: auto;\n flex-direction: column-reverse;\n}\n\n.dropdown-dialog.position-above .dropdown-header {\n margin-top: 4px;\n}\n\n.dropdown-dialog.position-below .dropdown-header {\n margin-bottom: 4px;\n}\n\n.dropdown-dialog.position-below .dropdown-options {\n /* Optional: Add upward-pointing shadow for below positioning */\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1), var(--ty-shadow-md);\n}\n\n/* Animate when .open class is added */\n.dropdown-dialog.open {\n opacity: 1;\n}\n\n.dropdown-dialog.open .dropdown-options {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n\n.dropdown-dialog::backdrop {\n background: transparent;\n}\n\n/* ===== DIALOG HEADER ===== */\n\n.dropdown-header {\n display: flex;\n align-items: center;\n gap: var(--ty-spacing-2);\n position: relative;\n}\n\n.dropdown-search-input {\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n background: var(--ty-input-bg);\n color: var(--ty-input-color);\n border: 1px solid var(--ty-input-border);\n border-radius: var(--ty-radius-md);\n font-family: var(--ty-font-sans);\n font-size: var(--ty-font-sm);\n font-weight: var(--ty-font-normal);\n line-height: var(--ty-line-height-tight);\n min-height: var(--ty-size-md);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));\n transition: var(--ty-transition-all);\n outline: none;\n}\n\n.dropdown-search-input:focus {\n border-color: var(--ty-input-border-focus);\n box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);\n}\n\n.dropdown-search-input:disabled {\n background-color: var(--ty-input-disabled-bg);\n color: var(--ty-input-disabled-color);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.dropdown-search-input::placeholder {\n color: var(--ty-input-placeholder);\n}\n\n.dropdown-search-chevron {\n position: absolute;\n top: 50%;\n right: var(--ty-spacing-3);\n transform: translateY(-50%);\n width: 1rem;\n height: 1rem;\n color: var(--ty-input-placeholder);\n transition: var(--ty-transition-transform);\n pointer-events: none;\n}\n\n.dropdown-search-chevron.open {\n transform: translateY(-50%) rotate(180deg);\n}\n\n.dropdown-search-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n/* ===== MULTISELECT-SPECIFIC STYLES ===== */\n\n/* Multiselect stub modifications */\n.multiselect-stub {\n min-height: 2.5rem;\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n align-items: center;\n padding: 0.5rem 2.5rem 0.5rem 0.75rem;\n /* Transitions - includes opacity for open state */\n transition: var(--ty-transition-all), opacity 0.2s ease;\n outline: none;\n background: var(--ty-input-bg);\n color: var(--ty-input-color);\n border: 1px solid var(--ty-input-border);\n border-radius: var(--ty-radius-md);\n font-family: var(--ty-font-sans);\n font-size: var(--ty-font-sm);\n cursor: pointer;\n position: relative;\n width: 100%;\n box-sizing: border-box;\n}\n\n.multiselect-stub:hover {\n border-color: var(--ty-input-border-hover);\n}\n\n.multiselect-stub[disabled] {\n background-color: var(--ty-input-disabled-bg);\n color: var(--ty-input-disabled-color);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n/* Hide stub when dropdown is open */\n.dropdown-wrapper:has(.dropdown-chevron.open) .multiselect-stub {\n opacity: 0;\n pointer-events: none;\n}\n\n/* Hide stub chips when mobile dialog is open (let modal show them) */\n.dropdown-mode-mobile .dropdown-wrapper:has(.mobile-dialog[open]) .multiselect-chips {\n display: none;\n}\n\n/* When tags are present, reduce padding to make room */\n.multiselect-stub.has-tags {\n padding: 0.25rem 2.5rem 0.25rem 0.5rem;\n width: 100%;\n}\n\n.multiselect-stub.has-tags slot[name=\"selected\"] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n}\n\n/* ===== CHEVRON INDICATOR ===== */\n\n.dropdown-chevron {\n position: absolute;\n top: 50%;\n right: var(--ty-spacing-3);\n transform: translateY(-50%);\n width: 1rem;\n height: 1rem;\n color: var(--ty-input-placeholder);\n transition: var(--ty-transition-transform);\n pointer-events: none;\n}\n\n.dropdown-chevron.open {\n transform: translateY(-50%) rotate(180deg);\n}\n\n.dropdown-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n\n/* Tags container */\n.multiselect-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-items: center;\n min-width: 0;\n}\n\n.dropdown-placeholder {\n flex-grow: 1;\n color: var(--ty-input-placeholder, #9ca3af);\n font-size: var(--ty-font-sm);\n font-weight: var(--ty-font-light);\n font-style: italic;\n line-height: 1.5;\n}\n\n/* Placeholder styling when tags are present */\n.dropdown-placeholder.hidden {\n display: none;\n}\n\n/* Options area styling - Override for multiselect */\n.dropdown-options {\n opacity: 0;\n background: var(--ty-input-bg);\n border: 1px solid var(--ty-input-border);\n border-radius: var(--ty-radius-lg);\n box-shadow: var(--ty-shadow-md);\n max-height: 16rem;\n width: 100%;\n max-width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n scroll-behavior: smooth;\n box-sizing: border-box;\n box-shadow:\n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n\n /* Animation properties */\n transform: translateY(-8px) scale(0.95);\n transition:\n opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),\n transform 200ms cubic-bezier(0.16, 1, 0.3, 1);\n\n /* Multiselect-specific: flex wrap for tags */\n display: flex;\n flex-wrap: wrap;\n padding: 0.5rem;\n gap: 0.5rem;\n}\n\n/* Make ty-tags in dropdown clickable with pointer cursor */\n.dropdown-options ty-tag {\n user-select: none;\n transition: transform 0.1s ease;\n}\n\n.dropdown-options ty-tag:hover {\n transform: scale(1.02);\n}\n\n.dropdown-options ty-tag:active {\n transform: scale(0.98);\n}\n\n/* Visual feedback for selected tags in options */\n.dropdown-options ty-tag[selected] {\n opacity: 0.5;\n}\n\n/* Ensure ty-tag components in multiselect have proper sizing */\n.multiselect-chips ty-tag {\n max-width: 150px;\n}\n\n/* Responsive adjustments */\n@media (max-width: 640px) {\n .multiselect-chips ty-tag {\n max-width: 100px;\n }\n}\n\n\n/* Ensure proper spacing in container layouts */\n.multiselect-container {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n/* ===== DROPDOWN WRAPPER & LABEL ===== */\n\n.dropdown-wrapper {\n position: relative;\n display: block;\n width: 100%;\n}\n\n.dropdown-label {\n font-size: 14px;\n font-weight: 500;\n color: var(--ty-label-color);\n margin-bottom: 6px;\n line-height: 1.25;\n padding-left: 12px;\n display: flex;\n align-items: center;\n}\n\n/* Required indicator - using SVG icon */\n.required-icon {\n display: inline-flex;\n align-items: center;\n color: #ef4444;\n width: 12px;\n height: 12px;\n vertical-align: middle;\n margin-left: 4px;\n}\n\n.required-icon svg {\n width: 100%;\n height: 100%;\n}\n\n:host([disabled]) .multiselect-container {\n pointer-events: none;\n}\n\n/* ============================================================================\n MOBILE MODAL STYLES\n ============================================================================ */\n\n.dropdown-mode-mobile .mobile-dialog {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n max-width: 100vw;\n max-height: 100vh;\n margin: 0;\n padding: 0;\n padding-top: 10vh; /* Position content from top */\n border: none;\n background: transparent; /* Backdrop handles background */\n /* Note: Don't set display - browser controls <dialog> visibility */\n align-items: flex-start;\n justify-content: center;\n opacity: 0;\n transition: opacity 300ms ease;\n}\n\n/* When opened via showModal(), add flex layout */\n.dropdown-mode-mobile .mobile-dialog[open] {\n display: flex;\n}\n\n.dropdown-mode-mobile .mobile-dialog.open {\n opacity: 1;\n}\n\n/* Native dialog backdrop with blur */\n.dropdown-mode-mobile .mobile-dialog::backdrop {\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n}\n\n.dropdown-mode-mobile .mobile-dialog-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: calc(100% - 32px); /* Side margins */\n max-width: 400px; /* Constrained width like dropdown */\n min-height: 200px;\n max-height: calc(90vh - 10vh);\n opacity: 0;\n transform: scale(0.95);\n transition: \n opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),\n transform 300ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n.dropdown-mode-mobile .mobile-dialog.open .mobile-dialog-content {\n opacity: 1;\n transform: scale(1);\n}\n\n.dropdown-mode-mobile .mobile-search-input:focus {\n border-color: var(--ty-border);\n}\n\n/* Mobile search header - floating row with search and close */\n.dropdown-mode-mobile .mobile-search-header {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n padding: 0;\n background: transparent;\n position: relative;\n}\n\n.dropdown-mode-mobile .mobile-header-content {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n}\n\n/* Header for non-searchable (close button only) */\n.dropdown-mode-mobile .mobile-header-nosearch {\n flex-shrink: 0;\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n padding: 0;\n background: transparent;\n position: relative;\n min-height: 40px;\n}\n\n/* Close button - circular with border (matches dropdown.ts) */\n.dropdown-mode-mobile .mobile-close-button {\n flex-shrink: 0;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--ty-surface-floating);\n border: 3px solid;\n border-color: var(--mobile-border-color);\n border-radius: 50%;\n color: var(--ty-text-);\n cursor: pointer;\n transition: var(--ty-transition-all);\n padding: 0;\n}\n\n.dropdown-mode-mobile .mobile-close-button:hover {\n background: var(--ty-bg-neutral);\n border-color: var(--ty-border);\n color: var(--ty-text);\n}\n\n.dropdown-mode-mobile .mobile-close-button:active {\n transform: scale(0.9);\n}\n\n.dropdown-mode-mobile .mobile-close-button svg {\n width: 24px;\n height: 24px;\n}\n\n/* Mobile search input (matches dropdown.ts) */\n.dropdown-mode-mobile .mobile-search-input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n background: var(--ty-surface-floating);\n color: var(--ty-text);\n border: 3px solid;\n border-color: var(--mobile-border-color);\n border-radius: var(--ty-radius-md);\n font-family: var(--ty-font-sans);\n font-size: var(--ty-font-sm);\n font-weight: var(--ty-font-normal);\n line-height: var(--ty-line-height-tight);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n height: 40px;\n transition: var(--ty-transition-all);\n outline: none;\n}\n\n.dropdown-mode-mobile .mobile-search-input::placeholder {\n color: var(--ty-text--);\n}\n\n.dropdown-mode-mobile .mobile-search-input:focus {\n border-color: var(--ty-border);\n}\n\n/* ============================================================================\n MOBILE BODY & SECTIONS - UPDATED STRUCTURE\n ============================================================================ */\n\n/* Mobile body - contains both sections */\n.dropdown-mode-mobile .mobile-body {\n position: relative;\n display: flex;\n flex-direction: column;\n height: var(--body-height, 350px);\n max-height: 350px;\n overflow: hidden;\n background: var(--ty-surface-floating);\n border-radius: var(--ty-radius-lg);\n box-shadow: \n 0 20px 25px -5px rgba(0, 0, 0, 0.1),\n 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n border: 3px solid;\n border-color: var(--mobile-border-color);\n}\n\n/* ===== SECTION HEADERS - Fixed 48px height ===== */\n\n.dropdown-mode-mobile .section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 48px;\n flex-shrink: 0;\n padding: 0 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--ty-text-);\n background: var(--ty-bg-neutral-);\n border-bottom: 1px solid var(--ty-border--);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.dropdown-mode-mobile .section-header:hover {\n background: var(--ty-bg-neutral);\n}\n\n.dropdown-mode-mobile .section-header:active {\n background: var(--ty-bg-neutral+);\n}\n\n.dropdown-mode-mobile .section-header .section-title {\n flex: 1;\n}\n\n.dropdown-mode-mobile .section-header .section-count {\n font-weight: 400;\n opacity: 0.7;\n margin-left: 0.25rem;\n}\n\n/* Chevron indicator (only for selected section) */\n.dropdown-mode-mobile .section-header .section-chevron {\n width: 16px;\n height: 16px;\n color: var(--ty-text--);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.dropdown-mode-mobile .section-header .section-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n/* Rotate chevron when expanded */\n.dropdown-mode-mobile .mobile-selected-section[data-expanded=\"true\"] .section-chevron {\n transform: rotate(180deg);\n}\n\n/* Available section header - not clickable */\n.dropdown-mode-mobile .mobile-available-section .section-header {\n cursor: default;\n}\n\n.dropdown-mode-mobile .mobile-available-section .section-header:hover {\n background: var(--ty-bg-neutral-);\n}\n\n/* ===== SELECTED SECTION - Expandable with smooth transition ===== */\n\n.dropdown-mode-mobile .mobile-selected-section {\n display: flex;\n flex-direction: column;\n background: var(--ty-surface-elevated);\n border-bottom: 2px solid var(--ty-border);\n overflow: hidden;\n transition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Collapsed state - just header (48px) */\n.dropdown-mode-mobile .mobile-selected-section[data-expanded=\"false\"] {\n max-height: 48px;\n flex: 0 0 48px;\n}\n\n/* Expanded state - takes remaining space */\n.dropdown-mode-mobile .mobile-selected-section[data-expanded=\"true\"] {\n max-height: 1000px; /* Large enough for content */\n flex: 1;\n}\n\n.dropdown-mode-mobile .mobile-selected-section .section-content {\n flex: 1;\n overflow-y: auto;\n padding: 0.75rem 1rem;\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-content: flex-start;\n}\n\n/* ===== AVAILABLE SECTION ===== */\n\n.dropdown-mode-mobile .mobile-available-section {\n display: flex;\n flex-direction: column;\n background: var(--ty-surface-floating);\n overflow: hidden;\n transition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* Collapsed state - just header (48px) */\n.dropdown-mode-mobile .mobile-available-section[data-expanded=\"false\"] {\n max-height: 48px;\n flex: 0 0 48px;\n}\n\n/* Expanded state - takes remaining space */\n.dropdown-mode-mobile .mobile-available-section[data-expanded=\"true\"] {\n max-height: 1000px; /* Large enough for content */\n flex: 1;\n}\n\n.dropdown-mode-mobile .mobile-available-section .section-content {\n flex: 1;\n overflow-y: auto;\n padding: 0.75rem 1rem;\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n align-content: flex-start;\n}\n\n/* ===== EMPTY STATES ===== */\n\n.dropdown-mode-mobile .empty-state {\n display: none;\n width: 100%;\n padding: 2rem 1rem;\n text-align: center;\n color: var(--ty-text--);\n font-size: 0.875rem;\n font-style: italic;\n}\n\n/* Show empty state when no tags present */\n.dropdown-mode-mobile .mobile-selected-section[data-empty=\"true\"] .empty-state,\n.dropdown-mode-mobile .mobile-available-section[data-empty=\"true\"] .empty-state {\n display: block;\n}\n\n/* Hide slot content when empty */\n.dropdown-mode-mobile .mobile-selected-section[data-empty=\"true\"] slot,\n.dropdown-mode-mobile .mobile-available-section[data-empty=\"true\"] slot {\n display: none;\n}\n\n/* ===== TAG STYLING IN MOBILE ===== */\n\n.dropdown-mode-mobile .section-content ::slotted(ty-tag) {\n cursor: pointer;\n user-select: none;\n transition: transform 0.1s ease;\n margin: 2px 0; /* Vertical spacing like dropdown options */\n}\n\n.dropdown-mode-mobile .section-content ::slotted(ty-tag:hover) {\n transform: scale(1.02);\n}\n\n.dropdown-mode-mobile .section-content ::slotted(ty-tag:active) {\n transform: scale(0.98);\n}\n\n/* Dimmed appearance for hidden filtered tags */\n.dropdown-mode-mobile .section-content ::slotted(ty-tag[hidden]) {\n display: none !important;\n}\n\n/* ===== SCROLLBAR STYLING ===== */\n\n.dropdown-mode-mobile .section-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.dropdown-mode-mobile .section-content::-webkit-scrollbar-track {\n background: var(--ty-bg-neutral-);\n border-radius: 3px;\n}\n\n.dropdown-mode-mobile .section-content::-webkit-scrollbar-thumb {\n background: var(--ty-border);\n border-radius: 3px;\n}\n\n.dropdown-mode-mobile .section-content::-webkit-scrollbar-thumb:hover {\n background: var(--ty-border+);\n}\n";
6
+ //# sourceMappingURL=multiselect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselect.d.ts","sourceRoot":"","sources":["../../src/styles/multiselect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,iBAAiB,grjBA8tB7B,CAAA"}