tyrell-components 1.0.0-TC55 → 1.0.0-TC56

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 (237) hide show
  1. package/README.md +53 -53
  2. package/css/tyrell-theme.css +7 -2
  3. package/css/tyrell.css +6 -15
  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 +14 -0
  8. package/lib/base/ty-component.d.ts.map +1 -0
  9. package/lib/base/ty-component.js +27 -0
  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 +26 -0
  22. package/lib/components/calendar.d.ts.map +1 -0
  23. package/lib/components/calendar.js +177 -4
  24. package/lib/components/calendar.js.map +1 -0
  25. package/lib/components/checkbox.d.ts.map +1 -0
  26. package/lib/components/checkbox.js +3 -3
  27. package/lib/components/checkbox.js.map +1 -0
  28. package/lib/components/copy.d.ts.map +1 -0
  29. package/lib/components/copy.js +9 -2
  30. package/lib/components/copy.js.map +1 -0
  31. package/lib/components/date-picker.d.ts +15 -16
  32. package/lib/components/date-picker.d.ts.map +1 -0
  33. package/lib/components/date-picker.js +175 -249
  34. package/lib/components/date-picker.js.map +1 -0
  35. package/lib/components/dropdown.d.ts +403 -0
  36. package/lib/components/dropdown.d.ts.map +1 -0
  37. package/lib/components/dropdown.js +1315 -0
  38. package/lib/components/dropdown.js.map +1 -0
  39. package/lib/components/file-upload.d.ts +4 -0
  40. package/lib/components/file-upload.js +14 -0
  41. package/lib/components/icon.d.ts.map +1 -0
  42. package/lib/components/icon.js.map +1 -0
  43. package/lib/components/input.d.ts.map +1 -0
  44. package/lib/components/input.js +3 -3
  45. package/lib/components/input.js.map +1 -0
  46. package/lib/components/modal.d.ts +2 -8
  47. package/lib/components/modal.d.ts.map +1 -0
  48. package/lib/components/modal.js +8 -18
  49. package/lib/components/modal.js.map +1 -0
  50. package/lib/components/multiselect.d.ts +389 -0
  51. package/lib/components/multiselect.d.ts.map +1 -0
  52. package/lib/components/multiselect.js +1301 -0
  53. package/lib/components/multiselect.js.map +1 -0
  54. package/lib/components/option.d.ts.map +1 -0
  55. package/lib/components/option.js.map +1 -0
  56. package/lib/components/popup.d.ts.map +1 -0
  57. package/lib/components/popup.js +4 -1
  58. package/lib/components/popup.js.map +1 -0
  59. package/lib/components/radio.d.ts +15 -0
  60. package/lib/components/radio.js +34 -4
  61. package/lib/components/resize-observer.d.ts.map +1 -0
  62. package/lib/components/resize-observer.js.map +1 -0
  63. package/lib/components/scroll-container.d.ts +3 -2
  64. package/lib/components/scroll-container.d.ts.map +1 -0
  65. package/lib/components/scroll-container.js +5 -8
  66. package/lib/components/scroll-container.js.map +1 -0
  67. package/lib/components/select.d.ts +14 -6
  68. package/lib/components/select.js +61 -19
  69. package/lib/components/step.d.ts.map +1 -0
  70. package/lib/components/step.js.map +1 -0
  71. package/lib/components/switch.js +3 -3
  72. package/lib/components/tab.d.ts +49 -1
  73. package/lib/components/tab.d.ts.map +1 -0
  74. package/lib/components/tab.js +151 -10
  75. package/lib/components/tab.js.map +1 -0
  76. package/lib/components/tabs.d.ts +14 -2
  77. package/lib/components/tabs.d.ts.map +1 -0
  78. package/lib/components/tabs.js +184 -135
  79. package/lib/components/tabs.js.map +1 -0
  80. package/lib/components/tag.d.ts +4 -7
  81. package/lib/components/tag.d.ts.map +1 -0
  82. package/lib/components/tag.js +6 -7
  83. package/lib/components/tag.js.map +1 -0
  84. package/lib/components/textarea.d.ts +4 -3
  85. package/lib/components/textarea.d.ts.map +1 -0
  86. package/lib/components/textarea.js +16 -15
  87. package/lib/components/textarea.js.map +1 -0
  88. package/lib/components/tooltip.d.ts +4 -3
  89. package/lib/components/tooltip.d.ts.map +1 -0
  90. package/lib/components/tooltip.js +34 -24
  91. package/lib/components/tooltip.js.map +1 -0
  92. package/lib/components/wizard.d.ts +5 -4
  93. package/lib/components/wizard.d.ts.map +1 -0
  94. package/lib/components/wizard.js +120 -156
  95. package/lib/components/wizard.js.map +1 -0
  96. package/lib/icons/fontawesome/brands.d.ts.map +1 -0
  97. package/lib/icons/fontawesome/brands.js.map +1 -0
  98. package/lib/icons/fontawesome/regular.d.ts.map +1 -0
  99. package/lib/icons/fontawesome/regular.js.map +1 -0
  100. package/lib/icons/fontawesome/solid.d.ts.map +1 -0
  101. package/lib/icons/fontawesome/solid.js.map +1 -0
  102. package/lib/icons/heroicons/micro.d.ts.map +1 -0
  103. package/lib/icons/heroicons/micro.js.map +1 -0
  104. package/lib/icons/heroicons/mini.d.ts.map +1 -0
  105. package/lib/icons/heroicons/mini.js.map +1 -0
  106. package/lib/icons/heroicons/outline.d.ts.map +1 -0
  107. package/lib/icons/heroicons/outline.js.map +1 -0
  108. package/lib/icons/heroicons/solid.d.ts.map +1 -0
  109. package/lib/icons/heroicons/solid.js.map +1 -0
  110. package/lib/icons/lucide.d.ts.map +1 -0
  111. package/lib/icons/lucide.js.map +1 -0
  112. package/lib/icons/material/filled.d.ts.map +1 -0
  113. package/lib/icons/material/filled.js.map +1 -0
  114. package/lib/icons/material/outlined.d.ts.map +1 -0
  115. package/lib/icons/material/outlined.js.map +1 -0
  116. package/lib/icons/material/round.d.ts.map +1 -0
  117. package/lib/icons/material/round.js.map +1 -0
  118. package/lib/icons/material/sharp.d.ts.map +1 -0
  119. package/lib/icons/material/sharp.js.map +1 -0
  120. package/lib/icons/material/two-tone.d.ts.map +1 -0
  121. package/lib/icons/material/two-tone.js.map +1 -0
  122. package/lib/index.d.ts +1 -1
  123. package/lib/index.d.ts.map +1 -0
  124. package/lib/index.js.map +1 -0
  125. package/lib/styles/button.d.ts.map +1 -0
  126. package/lib/styles/button.js +68 -58
  127. package/lib/styles/button.js.map +1 -0
  128. package/lib/styles/calendar-month.d.ts +3 -0
  129. package/lib/styles/calendar-month.d.ts.map +1 -0
  130. package/lib/styles/calendar-month.js +43 -27
  131. package/lib/styles/calendar-month.js.map +1 -0
  132. package/lib/styles/calendar-navigation.d.ts +1 -1
  133. package/lib/styles/calendar-navigation.d.ts.map +1 -0
  134. package/lib/styles/calendar-navigation.js +55 -26
  135. package/lib/styles/calendar-navigation.js.map +1 -0
  136. package/lib/styles/calendar.d.ts +3 -2
  137. package/lib/styles/calendar.d.ts.map +1 -0
  138. package/lib/styles/calendar.js +74 -0
  139. package/lib/styles/calendar.js.map +1 -0
  140. package/lib/styles/checkbox.js +22 -10
  141. package/lib/styles/copy.d.ts.map +1 -0
  142. package/lib/styles/copy.js +5 -1
  143. package/lib/styles/copy.js.map +1 -0
  144. package/lib/styles/date-picker.d.ts.map +1 -0
  145. package/lib/styles/date-picker.js +52 -22
  146. package/lib/styles/date-picker.js.map +1 -0
  147. package/lib/styles/dropdown.d.ts +12 -0
  148. package/lib/styles/dropdown.d.ts.map +1 -0
  149. package/lib/styles/dropdown.js +725 -0
  150. package/lib/styles/dropdown.js.map +1 -0
  151. package/lib/styles/icon.d.ts.map +1 -0
  152. package/lib/styles/icon.js.map +1 -0
  153. package/lib/styles/input.d.ts.map +1 -0
  154. package/lib/styles/input.js.map +1 -0
  155. package/lib/styles/modal.d.ts.map +1 -0
  156. package/lib/styles/modal.js.map +1 -0
  157. package/lib/styles/multiselect.d.ts +6 -0
  158. package/lib/styles/multiselect.d.ts.map +1 -0
  159. package/lib/styles/multiselect.js +568 -0
  160. package/lib/styles/multiselect.js.map +1 -0
  161. package/lib/styles/option.d.ts +1 -1
  162. package/lib/styles/option.d.ts.map +1 -0
  163. package/lib/styles/option.js +3 -3
  164. package/lib/styles/option.js.map +1 -0
  165. package/lib/styles/popup.d.ts +1 -1
  166. package/lib/styles/popup.d.ts.map +1 -0
  167. package/lib/styles/popup.js +8 -5
  168. package/lib/styles/popup.js.map +1 -0
  169. package/lib/styles/radio.js +8 -2
  170. package/lib/styles/resize-observer.d.ts.map +1 -0
  171. package/lib/styles/resize-observer.js.map +1 -0
  172. package/lib/styles/scroll-container.d.ts +1 -1
  173. package/lib/styles/scroll-container.d.ts.map +1 -0
  174. package/lib/styles/scroll-container.js +1 -1
  175. package/lib/styles/scroll-container.js.map +1 -0
  176. package/lib/styles/select.d.ts +1 -1
  177. package/lib/styles/select.js +6 -0
  178. package/lib/styles/step.d.ts +1 -1
  179. package/lib/styles/step.d.ts.map +1 -0
  180. package/lib/styles/step.js +1 -9
  181. package/lib/styles/step.js.map +1 -0
  182. package/lib/styles/switch.js +6 -3
  183. package/lib/styles/tab.d.ts +1 -1
  184. package/lib/styles/tab.d.ts.map +1 -0
  185. package/lib/styles/tab.js +67 -3
  186. package/lib/styles/tab.js.map +1 -0
  187. package/lib/styles/tabs.d.ts +1 -1
  188. package/lib/styles/tabs.d.ts.map +1 -0
  189. package/lib/styles/tabs.js +7 -3
  190. package/lib/styles/tabs.js.map +1 -0
  191. package/lib/styles/tag.d.ts.map +1 -0
  192. package/lib/styles/tag.js +1 -2
  193. package/lib/styles/tag.js.map +1 -0
  194. package/lib/styles/textarea.d.ts.map +1 -0
  195. package/lib/styles/textarea.js.map +1 -0
  196. package/lib/styles/tooltip.d.ts.map +1 -0
  197. package/lib/styles/tooltip.js.map +1 -0
  198. package/lib/styles/wizard.d.ts +9 -5
  199. package/lib/styles/wizard.d.ts.map +1 -0
  200. package/lib/styles/wizard.js +211 -99
  201. package/lib/styles/wizard.js.map +1 -0
  202. package/lib/types/common.d.ts +2 -2
  203. package/lib/types/common.d.ts.map +1 -0
  204. package/lib/types/common.js.map +1 -0
  205. package/lib/utils/calendar-utils.d.ts.map +1 -0
  206. package/lib/utils/calendar-utils.js.map +1 -0
  207. package/lib/utils/icon-registry.d.ts.map +1 -0
  208. package/lib/utils/icon-registry.js.map +1 -0
  209. package/lib/utils/locale.d.ts.map +1 -0
  210. package/lib/utils/locale.js.map +1 -0
  211. package/lib/utils/number-format.d.ts.map +1 -0
  212. package/lib/utils/number-format.js.map +1 -0
  213. package/lib/utils/parse-boolean.d.ts +39 -0
  214. package/lib/utils/parse-boolean.d.ts.map +1 -0
  215. package/lib/utils/parse-boolean.js +23 -0
  216. package/lib/utils/parse-boolean.js.map +1 -0
  217. package/lib/utils/positioning.d.ts.map +1 -0
  218. package/lib/utils/positioning.js.map +1 -0
  219. package/lib/utils/property-capture.d.ts.map +1 -0
  220. package/lib/utils/property-capture.js.map +1 -0
  221. package/lib/utils/property-manager.d.ts +1 -1
  222. package/lib/utils/property-manager.d.ts.map +1 -0
  223. package/lib/utils/property-manager.js +2 -0
  224. package/lib/utils/property-manager.js.map +1 -0
  225. package/lib/utils/resize-observer.d.ts.map +1 -0
  226. package/lib/utils/resize-observer.js.map +1 -0
  227. package/lib/utils/scroll-lock.d.ts.map +1 -0
  228. package/lib/utils/scroll-lock.js.map +1 -0
  229. package/lib/utils/styles.d.ts.map +1 -0
  230. package/lib/utils/styles.js.map +1 -0
  231. package/lib/utils/validity.d.ts +26 -0
  232. package/lib/utils/validity.js +53 -0
  233. package/lib/version.d.ts +1 -1
  234. package/lib/version.d.ts.map +1 -0
  235. package/lib/version.js +1 -1
  236. package/lib/version.js.map +1 -0
  237. package/package.json +25 -4
@@ -1,22 +1,22 @@
1
1
  export const calendarNavigationStyles = `
2
2
  :host([data-size="md"]) {
3
- --nav-btn-size: 2rem;
4
- --nav-btn-icon-size: 1.25rem;
5
- --nav-font-size: 0.875rem;
3
+ --nav-btn-size: 1.875rem;
4
+ --nav-btn-icon-size: 1.125rem;
5
+ --nav-font-size: 1rem;
6
6
  --nav-padding: 0.5rem 0.75rem;
7
7
  --nav-default-width: 280px;
8
8
  }
9
9
  :host([data-size="sm"]) {
10
10
  --nav-btn-size: 1.5rem;
11
- --nav-btn-icon-size: 1rem;
11
+ --nav-btn-icon-size: 0.9375rem;
12
12
  --nav-font-size: 0.875rem;
13
13
  --nav-padding: 0.375rem 0.5rem;
14
14
  --nav-default-width: 240px;
15
15
  }
16
16
  :host([data-size="lg"]) {
17
- --nav-btn-size: 2.5rem;
18
- --nav-btn-icon-size: 1.5rem;
19
- --nav-font-size: 0.875rem;
17
+ --nav-btn-size: 2.25rem;
18
+ --nav-btn-icon-size: 1.25rem;
19
+ --nav-font-size: 1.125rem;
20
20
  --nav-padding: 0.625rem 1rem;
21
21
  --nav-default-width: 360px;
22
22
  }
@@ -34,15 +34,55 @@ box-sizing: border-box;
34
34
  display: flex;
35
35
  align-items: center;
36
36
  gap: 0.25rem;
37
- }
38
- .nav-group-left,
39
- .nav-group-right {
40
37
  flex: 0 0 auto;
41
38
  }
42
- .nav-group-center {
43
- flex: 1;
44
- justify-content: center;
39
+ .nav-title {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ gap: 0.375rem;
45
43
  min-width: 0;
44
+ margin-left: -0.375rem;
45
+ padding: 0.25rem 0.375rem;
46
+ border: none;
47
+ border-radius: var(--ty-radius-base);
48
+ background: transparent;
49
+ font-family: inherit;
50
+ font-size: var(--nav-font-size);
51
+ line-height: 1.2;
52
+ white-space: nowrap;
53
+ cursor: pointer;
54
+ transition: var(--ty-local-transition, background-color 0.15s ease);
55
+ outline: none;
56
+ }
57
+ .nav-title:hover,
58
+ .nav-title[aria-expanded="true"] {
59
+ background-color: var(--ty-calendar-nav-hover-bg, var(--ty-bg-neutral-soft));
60
+ }
61
+ .nav-title:focus-visible {
62
+ outline: 2px solid var(--ty-calendar-nav-focus-outline, var(--ty-calendar-accent, var(--ty-color-primary)));
63
+ outline-offset: 2px;
64
+ }
65
+ .nav-title-month {
66
+ font-weight: 600;
67
+ letter-spacing: -0.01em;
68
+ color: var(--ty-calendar-nav-title-color, var(--ty-text-strong, var(--ty-color-neutral-strong)));
69
+ }
70
+ .nav-title-year {
71
+ font-weight: 400;
72
+ color: var(--ty-calendar-nav-year-color, var(--ty-text-soft, var(--ty-color-neutral)));
73
+ }
74
+ .nav-caret {
75
+ display: inline-flex;
76
+ color: var(--ty-calendar-nav-color, var(--ty-color-neutral));
77
+ transition: transform 0.15s ease;
78
+ }
79
+ .nav-caret svg {
80
+ width: 1em;
81
+ height: 1em;
82
+ display: block;
83
+ }
84
+ .nav-title[aria-expanded="true"] .nav-caret {
85
+ transform: rotate(180deg);
46
86
  }
47
87
  .nav-btn {
48
88
  display: inline-flex;
@@ -51,10 +91,10 @@ justify-content: center;
51
91
  width: var(--nav-btn-size);
52
92
  height: var(--nav-btn-size);
53
93
  padding: 0;
54
- border: none;
94
+ border: 1px solid var(--ty-calendar-nav-border, var(--ty-border));
55
95
  border-radius: var(--ty-radius-base);
56
96
  background-color: transparent;
57
- color: var(--ty-calendar-nav-color, var(--ty-color-neutral));
97
+ color: var(--ty-calendar-nav-color, var(--ty-color-neutral-strong));
58
98
  cursor: pointer;
59
99
  transition: var(--ty-local-transition, all 0.15s ease);
60
100
  outline: none;
@@ -81,15 +121,4 @@ width: var(--nav-btn-icon-size);
81
121
  height: var(--nav-btn-icon-size);
82
122
  display: block;
83
123
  }
84
- .month-year-display {
85
- font-size: var(--nav-font-size);
86
- font-weight: 600;
87
- color: var(--ty-calendar-nav-title-color, var(--ty-color-neutral-strong));
88
- text-align: center;
89
- white-space: nowrap;
90
- text-transform: uppercase;
91
- letter-spacing: 0.04em;
92
- overflow: hidden;
93
- text-overflow: ellipsis;
94
- }
95
124
  `;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-navigation.js","sourceRoot":"","sources":["../../src/styles/calendar-navigation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHvC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Calendar Orchestration Styles
3
- * Simple container for navigation + month display
3
+ * Container for navigation + month display, plus the month/year grid
4
+ * ty-calendar shows in place of the day grid.
4
5
  */
5
- export declare const calendarStyles = "\n.calendar-container {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n box-sizing: border-box;\n font-family: inherit;\n /* Nav is a fixed width and the grid is fit-content, so in any host wider\n than them (a popup, a stretched cell) the default stretch alignment\n left-pinned both. Centring keeps the block centred in whatever space it\n gets \u2014 without widening the calendar itself to fill it. */\n align-items: center;\n}\n\n@media (max-width: 320px) {\n .calendar-container {\n gap: 0.375rem;\n }\n}\n";
6
+ export declare const calendarStyles: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/styles/calendar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,snBAsB1B,CAAC"}
@@ -1,3 +1,6 @@
1
+ import { calendarMonthFlavorCss } from './calendar-month.js';
2
+ const selectedBg = 'var(--ty-calendar-selected-bg, var(--ty-calendar-accent, var(--calendar-month-selected-bg, var(--ty-solid-primary, var(--ty-color-primary)))))';
3
+ const selectedFg = 'var(--ty-calendar-selected-color, var(--calendar-month-selected-color, var(--ty-solid-primary-fg, white)))';
1
4
  export const calendarStyles = `
2
5
  .calendar-container {
3
6
  display: flex;
@@ -12,4 +15,75 @@ align-items: center;
12
15
  gap: 0.375rem;
13
16
  }
14
17
  }
18
+ .month-grid {
19
+ display: grid;
20
+ grid-template-columns: repeat(3, 1fr);
21
+ grid-auto-rows: 1fr;
22
+ gap: 0.375rem;
23
+ box-sizing: border-box;
24
+ padding: 0.75rem;
25
+ min-width: 280px;
26
+ width: var(--calendar-width, auto);
27
+ }
28
+ .month-grid.size-sm { padding: 0.5rem; min-width: 240px; gap: 0.25rem; }
29
+ .month-grid.size-lg { padding: 1rem; min-width: 360px; gap: 0.5rem; }
30
+ .month-cell {
31
+ position: relative;
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ min-height: 2.5rem;
36
+ padding: 0;
37
+ border: none;
38
+ border-radius: var(--ty-calendar-day-radius, 0.5rem);
39
+ background: transparent;
40
+ color: var(--ty-calendar-day-color, var(--ty-text));
41
+ font-family: inherit;
42
+ font-size: 0.875rem;
43
+ cursor: pointer;
44
+ outline: none;
45
+ transition: var(--ty-local-transition, background-color 0.15s ease, color 0.15s ease);
46
+ }
47
+ .month-grid.size-sm .month-cell { font-size: 0.75rem; min-height: 2rem; }
48
+ .month-grid.size-lg .month-cell { font-size: 1rem; min-height: 3rem; }
49
+ .month-cell:hover {
50
+ color: var(--ty-calendar-day-hover-color, var(--ty-text-strong));
51
+ background-color: var(--ty-calendar-day-hover-bg, var(--ty-bg-neutral));
52
+ font-weight: 500;
53
+ }
54
+ .month-cell:focus-visible {
55
+ box-shadow: 0 0 0 2px var(--calendar-month-accent, var(--ty-color-primary));
56
+ }
57
+ .month-cell.current {
58
+ color: var(--ty-calendar-today-color, var(--ty-calendar-today-accent, var(--calendar-month-accent, var(--ty-color-primary))));
59
+ font-weight: 600;
60
+ }
61
+ .month-cell.current::after {
62
+ content: "";
63
+ position: absolute;
64
+ top: calc(50% + 0.72em);
65
+ left: 50%;
66
+ width: 4px;
67
+ height: 4px;
68
+ margin-left: -2px;
69
+ border-radius: 50%;
70
+ background: currentColor;
71
+ }
72
+ .month-cell.selected {
73
+ background-color: ${selectedBg};
74
+ color: ${selectedFg};
75
+ font-weight: 600;
76
+ }
77
+ .month-cell.selected:hover {
78
+ background-color: var(--ty-calendar-selected-hover-bg, var(--calendar-month-selected-hover-bg, color-mix(in oklab, ${selectedBg} 85%, ${selectedFg})));
79
+ }
80
+ .month-cell:disabled {
81
+ color: var(--ty-calendar-disabled-color, var(--ty-text-faint));
82
+ opacity: var(--ty-calendar-disabled-opacity, 0.7);
83
+ text-decoration: line-through;
84
+ text-decoration-color: color-mix(in oklab, currentColor 60%, transparent);
85
+ cursor: default;
86
+ pointer-events: none;
87
+ }
88
+ ${calendarMonthFlavorCss}
15
89
  `;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/styles/calendar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB7B,CAAC"}
@@ -4,9 +4,9 @@ const tok = (s) => fb
4
4
  ? `var(--ty-color-${f}${s}, var(--ty-color-${fb}${s}))`
5
5
  : `var(--ty-color-${f}${s})`;
6
6
  return `
7
- :host([flavor="${f}"]) { --checkbox-color: ${tok("")}; --checkbox-color-off: ${tok("-soft")}; --checkbox-ring: color-mix(in oklab, ${tok("")} 25%, transparent); }
8
- :host([flavor="${f}+"]) { --checkbox-color: ${tok("-strong")}; --checkbox-color-off: ${tok("-soft")}; --checkbox-ring: color-mix(in oklab, ${tok("-strong")} 25%, transparent); }
9
- :host([flavor="${f}-"]) { --checkbox-color: ${tok("-soft")}; --checkbox-color-off: ${tok("-faint")}; --checkbox-ring: color-mix(in oklab, ${tok("-soft")} 25%, transparent); }
7
+ :host([flavor="${f}"]) { --checkbox-color: ${tok("-strong")}; --checkbox-ring: color-mix(in oklab, ${tok("")} 25%, transparent); }
8
+ :host([flavor="${f}+"]) { --checkbox-color: ${tok("-strong")}; --checkbox-ring: color-mix(in oklab, ${tok("-strong")} 25%, transparent); }
9
+ :host([flavor="${f}-"]) { --checkbox-color: ${tok("")}; --checkbox-ring: color-mix(in oklab, ${tok("")} 25%, transparent); }
10
10
  `;
11
11
  };
12
12
  export const checkboxCustomFlavorCss = (base) => checkboxFlavor(base, "neutral");
@@ -19,16 +19,28 @@ vertical-align: middle;
19
19
  .checkbox-container {
20
20
  display: inline-flex;
21
21
  align-items: center;
22
+ justify-content: center;
23
+ min-height: 1.25em;
24
+ min-height: 1lh;
22
25
  outline: none;
23
26
  transition: var(--ty-local-transition, all 0.15s ease-in-out);
24
27
  user-select: none;
25
28
  cursor: pointer;
26
29
  border-radius: 6px;
27
30
  gap: var(--ty-spacing-1);
28
- color: var(--checkbox-color-off, var(--ty-color-neutral-soft));
31
+ color: var(--checkbox-color-off, color-mix(in oklab, var(--ty-text) 30%, transparent));
32
+ box-sizing: border-box;
33
+ padding: 2px;
34
+ border-radius: 5px;
35
+ }
36
+ .checkbox-container:hover {
37
+ background: var(--checkbox-hover-bg, color-mix(in oklab, var(--ty-text) 8%, transparent));
38
+ }
39
+ .checkbox-container:not([aria-checked="true"]):not([aria-checked="mixed"]):hover {
40
+ color: var(--checkbox-color-off-hover, color-mix(in oklab, var(--ty-text) 50%, transparent));
29
41
  }
30
42
  .checkbox-container[aria-checked="true"] {
31
- color: var(--checkbox-color, var(--ty-color-neutral));
43
+ color: var(--checkbox-color, var(--ty-text));
32
44
  }
33
45
  .checkbox-container.focused,
34
46
  .checkbox-container:focus-visible {
@@ -63,11 +75,8 @@ width: 24px;
63
75
  height: 24px;
64
76
  }
65
77
  ${FLAVORS.map((f) => checkboxFlavor(f)).join("")}
66
- .checkbox-container:not([aria-checked="true"]) {
67
- opacity: 0.35;
68
- }
69
78
  .checkbox-container[aria-checked="mixed"] {
70
- opacity: 0.7;
79
+ color: var(--checkbox-color, var(--ty-text));
71
80
  }
72
81
  .checkbox-container.disabled {
73
82
  pointer-events: none;
@@ -76,7 +85,10 @@ opacity: 0.5;
76
85
  filter: grayscale(1);
77
86
  }
78
87
  .checkbox-container.disabled:not([aria-checked="true"]) {
79
- opacity: 0.2;
88
+ opacity: 0.45;
89
+ }
90
+ .checkbox-container.disabled:hover {
91
+ background: none;
80
92
  }
81
93
  .checkbox-container.error .checkbox-icon {
82
94
  color: var(--ty-color-danger);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/styles/copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,UAAU,0hDAkFtB,CAAA"}
@@ -27,9 +27,13 @@ padding: 0;
27
27
  margin: 0;
28
28
  background: transparent;
29
29
  border: none;
30
- color: inherit;
30
+ color: var(--input-color, var(--ty-input-color));
31
31
  font-family: inherit;
32
32
  }
33
+ code.copy-field-value {
34
+ font-family: var(--ty-font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
35
+ font-size: calc(var(--ty-field-font) * 0.93);
36
+ }
33
37
  .copy-field-value.multiline {
34
38
  white-space: pre-wrap;
35
39
  word-break: break-word;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/styles/copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFzB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/styles/date-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB,u7QAwW5B,CAAC"}
@@ -277,50 +277,80 @@ cursor: pointer;
277
277
  }
278
278
  .time-section {
279
279
  display: flex;
280
- min-height: 2.5rem;
281
- align-items: center;
282
- justify-content: center;
283
- gap: 0.5rem;
284
- padding: 0.5rem 1rem;
285
- border-top: 1px solid var(--ty-calendar-time-border);
286
- background-color: var(--ty-calendar-time-bg);
280
+ flex-direction: column;
281
+ gap: 0.375rem;
287
282
  width: 100%;
288
283
  box-sizing: border-box;
289
- position: relative;
284
+ padding: 0.75rem 1rem 0.875rem;
285
+ border-top: 1px solid var(--ty-calendar-time-border);
286
+ background-color: var(--ty-calendar-time-bg);
287
+ }
288
+ .time-row {
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: space-between;
292
+ gap: 0.75rem;
290
293
  }
291
294
  .time-label {
295
+ display: inline-flex;
296
+ align-items: center;
297
+ gap: 0.5rem;
292
298
  font-size: var(--ty-font-sm);
293
299
  font-weight: 500;
294
300
  color: var(--ty-calendar-time-label-color);
295
- flex-shrink: 0;
301
+ }
302
+ .time-icon {
303
+ display: flex;
304
+ color: var(--ty-calendar-time-icon-color);
305
+ width: 1rem;
306
+ height: 1rem;
307
+ }
308
+ .time-fields {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ gap: 0.25rem;
312
+ }
313
+ .time-colon {
314
+ font-weight: 600;
315
+ color: var(--ty-calendar-time-label-color);
296
316
  }
297
317
  .time-input {
298
- width: 3.5rem;
318
+ width: 2.75rem;
319
+ height: 2.125rem;
320
+ box-sizing: border-box;
299
321
  border: 1px solid var(--ty-input-border);
300
- border-radius: var(--ty-radius-sm);
322
+ border-radius: var(--ty-radius-md, 0.5rem);
301
323
  background: var(--ty-input-bg);
302
324
  color: var(--ty-calendar-time-input-color);
303
325
  font-family: inherit;
304
- font-size: var(--ty-font-sm);
326
+ font-size: var(--ty-font-base, 0.9375rem);
327
+ font-weight: 500;
305
328
  font-variant-numeric: tabular-nums;
306
329
  text-align: center;
307
- padding: 0.25rem 0.375rem;
330
+ padding: 0;
308
331
  outline: none;
332
+ caret-color: transparent;
309
333
  transition: var(--ty-transition-all);
310
334
  }
335
+ .time-input::selection {
336
+ background: var(--ty-bg-primary-soft, var(--ty-bg-primary));
337
+ }
338
+ .time-input:hover {
339
+ border-color: var(--ty-input-border-hover, var(--ty-input-border));
340
+ }
311
341
  .time-input:focus {
312
342
  border-color: var(--ty-input-border-focus);
313
343
  box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);
314
344
  }
315
- .time-input::placeholder {
316
- color: var(--ty-calendar-time-placeholder-color);
317
- }
318
- .time-icon {
345
+ .time-summary {
319
346
  display: flex;
320
- align-items: center;
321
- color: var(--ty-calendar-time-icon-color);
322
- width: 1rem;
323
- height: 1rem;
324
- flex-shrink: 0;
347
+ justify-content: space-between;
348
+ gap: 0.75rem;
349
+ font-size: var(--ty-font-xs, 0.75rem);
350
+ color: var(--ty-calendar-time-label-color);
351
+ }
352
+ .time-summary-iso {
353
+ font-family: var(--ty-font-mono, ui-monospace, SFMono-Regular, monospace);
354
+ color: var(--ty-calendar-time-placeholder-color);
325
355
  }
326
356
  `;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/styles/date-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwW/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Dropdown Component Styles
3
+ *
4
+ * ARCHITECTURE:
5
+ * - Shared styles: Apply to both desktop and mobile
6
+ * - Desktop styles: Scoped under .dropdown-mode-desktop
7
+ * - Mobile styles: Scoped under .dropdown-mode-mobile
8
+ *
9
+ * This prevents CSS conflicts between desktop dialog and mobile modal implementations.
10
+ */
11
+ export declare const dropdownStyles = "\n/* ==================== SHARED STYLES ==================== */\n/* These apply to BOTH desktop and mobile modes */\n\n:host {\n display: block;\n width: auto;\n min-width: 200px;\n}\n\n:host {\n --mobile-border-color: #5858587d; \n}\n\n.dropdown-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n}\n\n/* Label styling */\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}\n\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.dropdown-wrapper {\n position: relative;\n display: block;\n width: 100%;\n}\n\n/* ==================== DESKTOP MODE STYLES ==================== */\n/* All styles scoped under .dropdown-mode-desktop */\n\n/* Stub (trigger button) */\n.dropdown-mode-desktop .dropdown-stub {\n width: 100%;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n display: flex;\n align-items: center;\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), opacity 0.2s ease;\n outline: none;\n}\n\n.dropdown-mode-desktop .dropdown-stub:hover {\n border-color: var(--ty-input-border-hover);\n}\n\n.dropdown-mode-desktop .dropdown-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.dropdown-mode-desktop .dropdown-stub:focus {\n border-color: var(--ty-input-border-hover);\n}\n\n/* Hide stub when dropdown is open */\n.dropdown-mode-desktop .dropdown-wrapper:has(.dropdown-chevron.open) .dropdown-stub {\n opacity: 0;\n pointer-events: none;\n}\n\n/* Size variants */\n.dropdown-mode-desktop .dropdown-stub.xs {\n min-height: var(--ty-size-xs);\n font-size: var(--ty-font-xs);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-desktop .dropdown-stub.sm {\n min-height: var(--ty-size-sm);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-desktop .dropdown-stub.md {\n min-height: var(--ty-size-md);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));\n}\n\n.dropdown-mode-desktop .dropdown-stub.lg {\n min-height: var(--ty-size-lg);\n font-size: var(--ty-font-base);\n padding: var(--ty-spacing-3) var(--ty-spacing-4);\n padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));\n}\n\n.dropdown-mode-desktop .dropdown-stub.xl {\n min-height: var(--ty-size-xl);\n font-size: var(--ty-font-lg);\n padding: var(--ty-spacing-4) var(--ty-spacing-5);\n padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));\n}\n\n/* Clearable adjustments */\n.dropdown-mode-desktop .dropdown-stub.xs.clearable.has-selection {\n padding-right: calc(var(--ty-spacing-2) + 2rem + var(--ty-spacing-2));\n}\n\n.dropdown-mode-desktop .dropdown-stub.sm.clearable.has-selection {\n padding-right: calc(var(--ty-spacing-2) + 2rem + var(--ty-spacing-2));\n}\n\n.dropdown-mode-desktop .dropdown-stub.md.clearable.has-selection {\n padding-right: calc(var(--ty-spacing-3) + 2rem + var(--ty-spacing-3));\n}\n\n.dropdown-mode-desktop .dropdown-stub.lg.clearable.has-selection {\n padding-right: calc(var(--ty-spacing-4) + 2rem + var(--ty-spacing-4));\n}\n\n.dropdown-mode-desktop .dropdown-stub.xl.clearable.has-selection {\n padding-right: calc(var(--ty-spacing-5) + 2rem + var(--ty-spacing-5));\n}\n\n/* Placeholder */\n.dropdown-mode-desktop .dropdown-placeholder {\n color: var(--ty-input-placeholder);\n font-weight: var(--ty-font-light);\n font-size: var(--ty-font-sm);\n font-style: italic;\n pointer-events: none;\n}\n\n.dropdown-mode-desktop .dropdown-stub.has-selection .dropdown-placeholder {\n display: none;\n}\n\n/* Selected content */\n.dropdown-mode-desktop .dropdown-stub slot[name=\"selected\"] {\n display: block;\n}\n\n.dropdown-mode-desktop .dropdown-stub.has-selection slot[name=\"selected\"] {\n width: 100%;\n}\n\n.dropdown-mode-desktop .dropdown-stub slot[name=\"selected\"] * {\n display: block;\n width: 100%;\n padding: 0;\n margin: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n line-height: inherit;\n outline: none;\n appearance: none;\n}\n\n/* Chevron */\n.dropdown-mode-desktop .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-mode-desktop .dropdown-chevron.open {\n transform: translateY(-50%) rotate(180deg);\n}\n\n.dropdown-mode-desktop .dropdown-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n/* Clear button */\n.dropdown-mode-desktop .dropdown-clear-btn {\n position: absolute;\n top: 50%;\n right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));\n transform: translateY(-50%);\n width: 1rem;\n height: 1rem;\n padding: 0;\n border: none;\n background: none;\n color: var(--ty-input-placeholder);\n cursor: pointer;\n transition: var(--ty-transition-colors);\n display: none;\n}\n\n.dropdown-mode-desktop .dropdown-clear-btn:hover {\n color: var(--ty-color-danger);\n}\n\n.dropdown-mode-desktop .dropdown-clear-btn:active {\n transform: translateY(-50%) scale(0.9);\n}\n\n.dropdown-mode-desktop .dropdown-clear-btn svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n/* Dialog */\n.dropdown-mode-desktop .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 opacity: 0;\n transition: opacity 400ms ease;\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-mode-desktop .dropdown-dialog[open] {\n display: flex;\n flex-direction: column;\n}\n\n.dropdown-mode-desktop .dropdown-dialog.position-below {\n left: var(--dropdown-x);\n top: var(--dropdown-y);\n}\n\n.dropdown-mode-desktop .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-mode-desktop .dropdown-dialog.position-above .dropdown-header {\n margin-top: 4px;\n}\n\n.dropdown-mode-desktop .dropdown-dialog.position-below .dropdown-header {\n margin-bottom: 4px;\n}\n\n.dropdown-mode-desktop .dropdown-dialog.position-below .dropdown-options {\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.dropdown-mode-desktop .dropdown-dialog.open {\n display: flex;\n opacity: 1;\n}\n\n.dropdown-mode-desktop .dropdown-dialog.open .dropdown-options {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n\n.dropdown-mode-desktop .dropdown-dialog::backdrop {\n background: transparent;\n}\n\n/* Dialog header */\n.dropdown-mode-desktop .dropdown-header {\n display: flex;\n align-items: center;\n gap: var(--ty-spacing-2);\n position: relative;\n}\n\n.dropdown-mode-desktop .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-mode-desktop .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-mode-desktop .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-mode-desktop .dropdown-search-input::placeholder {\n color: var(--ty-input-placeholder);\n}\n\n/* Search input sizes */\n.dropdown-mode-desktop .dropdown-search-input.xs {\n min-height: var(--ty-size-xs);\n font-size: var(--ty-font-xs);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-desktop .dropdown-search-input.sm {\n min-height: var(--ty-size-sm);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-desktop .dropdown-search-input.md {\n min-height: var(--ty-size-md);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));\n}\n\n.dropdown-mode-desktop .dropdown-search-input.lg {\n min-height: var(--ty-size-lg);\n font-size: var(--ty-font-base);\n padding: var(--ty-spacing-3) var(--ty-spacing-4);\n padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));\n}\n\n.dropdown-mode-desktop .dropdown-search-input.xl {\n min-height: var(--ty-size-xl);\n font-size: var(--ty-font-lg);\n padding: var(--ty-spacing-4) var(--ty-spacing-5);\n padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));\n}\n\n.dropdown-mode-desktop .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-mode-desktop .dropdown-search-chevron.open {\n transform: translateY(-50%) rotate(180deg);\n}\n\n.dropdown-mode-desktop .dropdown-search-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n/* Options container */\n.dropdown-mode-desktop .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 transform: translateY(-20px) scale(0.90);\n transition:\n opacity 100ms cubic-bezier(0.16, 1, 0.3, 1),\n transform 200ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n/* Option elements */\n.dropdown-mode-desktop .dropdown-options ::slotted(option) {\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n color: var(--ty-input-color);\n cursor: pointer;\n transition:\n var(--ty-transition-colors),\n transform 150ms cubic-bezier(0.16, 1, 0.3, 1);\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n width: 100%;\n text-align: left;\n box-sizing: border-box;\n transform: translateX(0);\n}\n\n.dropdown-mode-desktop .dropdown-options ::slotted(option:hover) {\n background-color: var(--ty-bg-neutral-soft);\n}\n\n.dropdown-mode-desktop .dropdown-options ::slotted(option[highlighted]) {\n background-color: var(--ty-bg-primary-soft);\n color: var(--ty-color-primary-mild);\n}\n\n.dropdown-mode-desktop .dropdown-options ::slotted(option[selected]) {\n background-color: var(--ty-color-primary);\n color: #ffffff;\n}\n\n.dropdown-mode-desktop .dropdown-options ::slotted(option[hidden]),\n.dropdown-mode-desktop .dropdown-options ::slotted(ty-option[hidden]),\n.dropdown-mode-desktop .dropdown-options ::slotted(ty-tag[hidden]) {\n display: none;\n}\n\n/* ==================== MOBILE MODE STYLES ==================== */\n/* All styles scoped under .dropdown-mode-mobile */\n/* Floating modal design (centered card with backdrop) */\n\n/* Stub (trigger button) - same as desktop but scoped */\n.dropdown-mode-mobile .dropdown-stub {\n width: 100%;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n display: flex;\n align-items: center;\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-mode-mobile .dropdown-stub:hover {\n border-color: var(--ty-input-border-hover);\n}\n\n.dropdown-mode-mobile .dropdown-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/* Size variants */\n.dropdown-mode-mobile .dropdown-stub.xs {\n min-height: var(--ty-size-xs);\n font-size: var(--ty-font-xs);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-mobile .dropdown-stub.sm {\n min-height: var(--ty-size-sm);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-1) var(--ty-spacing-2);\n padding-right: calc(var(--ty-spacing-2) + 1rem + var(--ty-spacing-1));\n}\n\n.dropdown-mode-mobile .dropdown-stub.md {\n min-height: var(--ty-size-md);\n font-size: var(--ty-font-sm);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));\n}\n\n.dropdown-mode-mobile .dropdown-stub.lg {\n min-height: var(--ty-size-lg);\n font-size: var(--ty-font-base);\n padding: var(--ty-spacing-3) var(--ty-spacing-4);\n padding-right: calc(var(--ty-spacing-4) + 1rem + var(--ty-spacing-3));\n}\n\n.dropdown-mode-mobile .dropdown-stub.xl {\n min-height: var(--ty-size-xl);\n font-size: var(--ty-font-lg);\n padding: var(--ty-spacing-4) var(--ty-spacing-5);\n padding-right: calc(var(--ty-spacing-5) + 1rem + var(--ty-spacing-4));\n}\n\n/* Placeholder */\n.dropdown-mode-mobile .dropdown-placeholder {\n color: var(--ty-input-placeholder);\n font-weight: var(--ty-font-light);\n font-size: var(--ty-font-sm);\n font-style: italic;\n pointer-events: none;\n}\n\n.dropdown-mode-mobile .dropdown-stub.has-selection .dropdown-placeholder {\n display: none;\n}\n\n/* Selected content */\n.dropdown-mode-mobile .dropdown-stub slot[name=\"selected\"] {\n display: block;\n}\n\n.dropdown-mode-mobile .dropdown-stub.has-selection slot[name=\"selected\"] {\n width: 100%;\n}\n\n.dropdown-mode-mobile .dropdown-stub slot[name=\"selected\"] * {\n display: block;\n width: 100%;\n padding: 0;\n margin: 0;\n border: none;\n background: none;\n color: inherit;\n font: inherit;\n line-height: inherit;\n outline: none;\n appearance: none;\n}\n\n/* Chevron */\n.dropdown-mode-mobile .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-mode-mobile .dropdown-chevron svg {\n width: 100%;\n height: 100%;\n}\n\n/* Mobile modal - full screen overlay with centered floating card */\n.dropdown-mode-mobile .mobile-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n z-index: 9999;\n display: flex;\n align-items: flex-start; /* Align to top */\n justify-content: center;\n padding-top: 10vh; /* Fixed position from top */\n opacity: 0;\n transition: opacity 300ms ease;\n pointer-events: none;\n}\n\n.dropdown-mode-mobile .mobile-modal.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Mobile backdrop - full viewport with blur */\n.dropdown-mode-mobile .mobile-modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 1;\n}\n\n/* Mobile content container - floating card (transparent background) */\n.dropdown-mode-mobile .mobile-modal-content {\n position: relative;\n z-index: 2;\n display: flex;\n flex-direction: column;\n width: calc(100% - 32px); /* Side margins */\n max-width: 400px; /* Constrained width */\n min-height: 200px;\n max-height: calc(90vh - 10vh); /* Account for top padding */\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-modal.open .mobile-modal-content {\n opacity: 1;\n transform: scale(1);\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 */\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: 1px solid var(--ty-border-);\n border-radius: 50%; /* Circular */\n color: var(--ty-text-);\n cursor: pointer;\n transition: var(--ty-transition-all);\n padding: 0;\n border: 3px solid;\n border-color: var(--mobile-border-color);\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 */\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: 1px solid var(--ty-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 padding: var(--ty-spacing-2) var(--ty-spacing-3);\n height: 40px;\n transition: var(--ty-transition-all);\n outline: none;\n border: 3px solid;\n border-color: var(--mobile-border-color);\n}\n\n.dropdown-mode-mobile .mobile-search-input::placeholder {\n color: var(--ty-text--);\n}\n\n/* Mobile options container - floating card with elevation */\n.dropdown-mode-mobile .mobile-options-container {\n position: relative;\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch;\n background: var(--ty-surface-floating); /* Floating card background */\n border-radius: var(--ty-radius-lg);\n border: 1px solid var(--ty-border-);\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/* Hide scrollbar but keep functionality */\n.dropdown-mode-mobile .mobile-options-container {\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n}\n\n.dropdown-mode-mobile .mobile-options-container::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera */\n}\n\n/* Mobile option styling - native <option> only */\n.dropdown-mode-mobile .mobile-options-container ::slotted(option) {\n display: block;\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n margin: 2px 8px;\n color: var(--ty-text);\n cursor: pointer;\n transition: var(--ty-transition-all);\n border: none;\n background: transparent;\n font-size: var(--ty-font-sm);\n font-family: inherit;\n width: calc(100% - 16px);\n text-align: left;\n box-sizing: border-box;\n border-radius: var(--ty-radius-sm);\n min-height: 36px;\n}\n\n.dropdown-mode-mobile .mobile-options-container ::slotted(option:active) {\n background-color: var(--ty-bg-neutral-soft);\n}\n\n.dropdown-mode-mobile .mobile-options-container ::slotted(option[highlighted]) {\n background-color: var(--ty-bg-primary-soft);\n color: var(--ty-color-primary-mild);\n}\n\n.dropdown-mode-mobile .mobile-options-container ::slotted(option[selected]) {\n background: var(--ty-bg-primary);\n color: var(--ty-color-primary-strong);\n}\n\n.dropdown-mode-mobile .mobile-options-container ::slotted(option[hidden]),\n.dropdown-mode-mobile .mobile-options-container ::slotted(ty-option[hidden]),\n.dropdown-mode-mobile .mobile-options-container ::slotted(ty-tag[hidden]) {\n display: none;\n}\n\n/* ==================== FLAVOR VARIANTS ==================== */\n/* Apply to both modes */\n\n:host([flavor=\"primary\"]) .dropdown-stub,\n:host([flavor=\"primary\"]) .dropdown-search-input {\n border-color: var(--ty-color-primary);\n}\n\n:host([flavor=\"primary\"]) .dropdown-stub:hover,\n:host([flavor=\"primary\"]) .dropdown-search-input:focus {\n border-color: var(--ty-color-primary-mild);\n box-shadow: 0 0 0 3px var(--ty-color-primary-faint);\n}\n\n:host([flavor=\"secondary\"]) .dropdown-stub,\n:host([flavor=\"secondary\"]) .dropdown-search-input {\n border-color: var(--ty-color-secondary);\n}\n\n:host([flavor=\"secondary\"]) .dropdown-stub:hover,\n:host([flavor=\"secondary\"]) .dropdown-search-input:focus {\n border-color: var(--ty-color-secondary-mild);\n box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);\n}\n\n:host([flavor=\"success\"]) .dropdown-stub,\n:host([flavor=\"success\"]) .dropdown-search-input {\n border-color: var(--ty-color-success);\n}\n\n:host([flavor=\"success\"]) .dropdown-stub:hover,\n:host([flavor=\"success\"]) .dropdown-search-input:focus {\n border-color: var(--ty-color-success-mild);\n box-shadow: 0 0 0 3px var(--ty-color-success-faint);\n}\n\n:host([flavor=\"danger\"]) .dropdown-stub,\n:host([flavor=\"danger\"]) .dropdown-search-input {\n border-color: var(--ty-color-danger);\n}\n\n:host([flavor=\"danger\"]) .dropdown-stub:hover,\n:host([flavor=\"danger\"]) .dropdown-search-input:focus {\n border-color: var(--ty-color-danger-mild);\n box-shadow: 0 0 0 3px var(--ty-color-danger-faint);\n}\n\n:host([flavor=\"warning\"]) .dropdown-stub,\n:host([flavor=\"warning\"]) .dropdown-search-input {\n border-color: var(--ty-color-warning);\n}\n\n:host([flavor=\"warning\"]) .dropdown-stub:hover,\n:host([flavor=\"warning\"]) .dropdown-search-input:focus {\n border-color: var(--ty-color-warning-mild);\n box-shadow: 0 0 0 3px var(--ty-color-warning-faint);\n}\n\n/* ==================== READONLY STATE ==================== */\n\n:host([readonly]) .dropdown-chevron {\n display: none;\n}\n\n:host([readonly]) .dropdown-stub {\n padding-right: var(--ty-spacing-3);\n}\n\n:host([readonly]) .dropdown-stub,\n:host([readonly]) .dropdown-stub slot[name=\"selected\"] {\n cursor: initial;\n}\n";
12
+ //# sourceMappingURL=dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/styles/dropdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc,+7vBA82B1B,CAAA"}