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
@@ -0,0 +1,568 @@
1
+
2
+ export const multiselectStyles = `
3
+ :host {
4
+ --mobile-border-color: #5858587d;
5
+ }
6
+ .dropdown-dialog {
7
+ position: fixed;
8
+ width: var(--dropdown-width, 200px);
9
+ max-width: 100vw;
10
+ margin: 0;
11
+ padding: 0;
12
+ border: none;
13
+ background: transparent;
14
+ box-sizing: border-box;
15
+ padding: var(--dropdown-padding, 20px);
16
+ opacity: 0;
17
+ transition: opacity 400ms ease;
18
+ transform: translate(var(--dropdown-offset-x, 0px), var(--dropdown-offset-y, 0px));
19
+ top: -1000px;
20
+ left: -1000px;
21
+ }
22
+ .dropdown-dialog[open] {
23
+ display: flex;
24
+ flex-direction: column;
25
+ }
26
+ .dropdown-dialog.position-below {
27
+ left: var(--dropdown-x);
28
+ top: var(--dropdown-y);
29
+ }
30
+ .dropdown-dialog.position-above {
31
+ left: var(--dropdown-x);
32
+ bottom: var(--dropdown-y);
33
+ top: auto;
34
+ flex-direction: column-reverse;
35
+ }
36
+ .dropdown-dialog.position-above .dropdown-header {
37
+ margin-top: 4px;
38
+ }
39
+ .dropdown-dialog.position-below .dropdown-header {
40
+ margin-bottom: 4px;
41
+ }
42
+ .dropdown-dialog.position-below .dropdown-options {
43
+ 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);
44
+ }
45
+ .dropdown-dialog.open {
46
+ opacity: 1;
47
+ }
48
+ .dropdown-dialog.open .dropdown-options {
49
+ opacity: 1;
50
+ transform: translateY(0) scale(1);
51
+ }
52
+ .dropdown-dialog::backdrop {
53
+ background: transparent;
54
+ }
55
+ .dropdown-header {
56
+ display: flex;
57
+ align-items: center;
58
+ gap: var(--ty-spacing-2);
59
+ position: relative;
60
+ }
61
+ .dropdown-search-input {
62
+ width: 100%;
63
+ min-width: 0;
64
+ box-sizing: border-box;
65
+ background: var(--ty-input-bg);
66
+ color: var(--ty-input-color);
67
+ border: 1px solid var(--ty-input-border);
68
+ border-radius: var(--ty-radius-md);
69
+ font-family: var(--ty-font-sans);
70
+ font-size: var(--ty-font-sm);
71
+ font-weight: var(--ty-font-normal);
72
+ line-height: var(--ty-line-height-tight);
73
+ min-height: var(--ty-size-md);
74
+ padding: var(--ty-spacing-2) var(--ty-spacing-3);
75
+ padding-right: calc(var(--ty-spacing-3) + 1rem + var(--ty-spacing-2));
76
+ transition: var(--ty-transition-all);
77
+ outline: none;
78
+ }
79
+ .dropdown-search-input:focus {
80
+ border-color: var(--ty-input-border-focus);
81
+ box-shadow: 0 0 0 3px var(--ty-input-shadow-focus);
82
+ }
83
+ .dropdown-search-input:disabled {
84
+ background-color: var(--ty-input-disabled-bg);
85
+ color: var(--ty-input-disabled-color);
86
+ cursor: not-allowed;
87
+ opacity: 0.6;
88
+ }
89
+ .dropdown-search-input::placeholder {
90
+ color: var(--ty-input-placeholder);
91
+ }
92
+ .dropdown-search-chevron {
93
+ position: absolute;
94
+ top: 50%;
95
+ right: var(--ty-spacing-3);
96
+ transform: translateY(-50%);
97
+ width: 1rem;
98
+ height: 1rem;
99
+ color: var(--ty-input-placeholder);
100
+ transition: var(--ty-transition-transform);
101
+ pointer-events: none;
102
+ }
103
+ .dropdown-search-chevron.open {
104
+ transform: translateY(-50%) rotate(180deg);
105
+ }
106
+ .dropdown-search-chevron svg {
107
+ width: 100%;
108
+ height: 100%;
109
+ }
110
+ .multiselect-stub {
111
+ min-height: 2.5rem;
112
+ display: flex;
113
+ flex-wrap: wrap;
114
+ gap: 0.25rem;
115
+ align-items: center;
116
+ padding: 0.5rem 2.5rem 0.5rem 0.75rem;
117
+ transition: var(--ty-transition-all), opacity 0.2s ease;
118
+ outline: none;
119
+ background: var(--ty-input-bg);
120
+ color: var(--ty-input-color);
121
+ border: 1px solid var(--ty-input-border);
122
+ border-radius: var(--ty-radius-md);
123
+ font-family: var(--ty-font-sans);
124
+ font-size: var(--ty-font-sm);
125
+ cursor: pointer;
126
+ position: relative;
127
+ width: 100%;
128
+ box-sizing: border-box;
129
+ }
130
+ .multiselect-stub:hover {
131
+ border-color: var(--ty-input-border-hover);
132
+ }
133
+ .multiselect-stub[disabled] {
134
+ background-color: var(--ty-input-disabled-bg);
135
+ color: var(--ty-input-disabled-color);
136
+ cursor: not-allowed;
137
+ opacity: 0.6;
138
+ }
139
+ .dropdown-wrapper:has(.dropdown-chevron.open) .multiselect-stub {
140
+ opacity: 0;
141
+ pointer-events: none;
142
+ }
143
+ .dropdown-mode-mobile .dropdown-wrapper:has(.mobile-dialog[open]) .multiselect-chips {
144
+ display: none;
145
+ }
146
+ .multiselect-stub.has-tags {
147
+ padding: 0.25rem 2.5rem 0.25rem 0.5rem;
148
+ width: 100%;
149
+ }
150
+ .multiselect-stub.has-tags slot[name="selected"] {
151
+ display: flex;
152
+ flex-wrap: wrap;
153
+ gap: 0.25rem;
154
+ }
155
+ .dropdown-chevron {
156
+ position: absolute;
157
+ top: 50%;
158
+ right: var(--ty-spacing-3);
159
+ transform: translateY(-50%);
160
+ width: 1rem;
161
+ height: 1rem;
162
+ color: var(--ty-input-placeholder);
163
+ transition: var(--ty-transition-transform);
164
+ pointer-events: none;
165
+ }
166
+ .dropdown-chevron.open {
167
+ transform: translateY(-50%) rotate(180deg);
168
+ }
169
+ .dropdown-chevron svg {
170
+ width: 100%;
171
+ height: 100%;
172
+ }
173
+ .multiselect-chips {
174
+ display: flex;
175
+ flex-wrap: wrap;
176
+ gap: 0.5rem;
177
+ align-items: center;
178
+ min-width: 0;
179
+ }
180
+ .dropdown-placeholder {
181
+ flex-grow: 1;
182
+ color: var(--ty-input-placeholder, #9ca3af);
183
+ font-size: var(--ty-font-sm);
184
+ font-weight: var(--ty-font-light);
185
+ font-style: italic;
186
+ line-height: 1.5;
187
+ }
188
+ .dropdown-placeholder.hidden {
189
+ display: none;
190
+ }
191
+ .dropdown-options {
192
+ opacity: 0;
193
+ background: var(--ty-input-bg);
194
+ border: 1px solid var(--ty-input-border);
195
+ border-radius: var(--ty-radius-lg);
196
+ box-shadow: var(--ty-shadow-md);
197
+ max-height: 16rem;
198
+ width: 100%;
199
+ max-width: 100%;
200
+ overflow-x: hidden;
201
+ overflow-y: auto;
202
+ scroll-behavior: smooth;
203
+ box-sizing: border-box;
204
+ box-shadow:
205
+ 0 20px 25px -5px rgba(0, 0, 0, 0.1),
206
+ 0 10px 10px -5px rgba(0, 0, 0, 0.04);
207
+ transform: translateY(-8px) scale(0.95);
208
+ transition:
209
+ opacity 200ms cubic-bezier(0.16, 1, 0.3, 1),
210
+ transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
211
+ display: flex;
212
+ flex-wrap: wrap;
213
+ padding: 0.5rem;
214
+ gap: 0.5rem;
215
+ }
216
+ .dropdown-options ty-tag {
217
+ user-select: none;
218
+ transition: transform 0.1s ease;
219
+ }
220
+ .dropdown-options ty-tag:hover {
221
+ transform: scale(1.02);
222
+ }
223
+ .dropdown-options ty-tag:active {
224
+ transform: scale(0.98);
225
+ }
226
+ .dropdown-options ty-tag[selected] {
227
+ opacity: 0.5;
228
+ }
229
+ .multiselect-chips ty-tag {
230
+ max-width: 150px;
231
+ }
232
+ @media (max-width: 640px) {
233
+ .multiselect-chips ty-tag {
234
+ max-width: 100px;
235
+ }
236
+ }
237
+ .multiselect-container {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: 0.25rem;
241
+ }
242
+ .dropdown-wrapper {
243
+ position: relative;
244
+ display: block;
245
+ width: 100%;
246
+ }
247
+ .dropdown-label {
248
+ font-size: 14px;
249
+ font-weight: 500;
250
+ color: var(--ty-label-color);
251
+ margin-bottom: 6px;
252
+ line-height: 1.25;
253
+ padding-left: 12px;
254
+ display: flex;
255
+ align-items: center;
256
+ }
257
+ .required-icon {
258
+ display: inline-flex;
259
+ align-items: center;
260
+ color: #ef4444;
261
+ width: 12px;
262
+ height: 12px;
263
+ vertical-align: middle;
264
+ margin-left: 4px;
265
+ }
266
+ .required-icon svg {
267
+ width: 100%;
268
+ height: 100%;
269
+ }
270
+ :host([disabled]) .multiselect-container {
271
+ pointer-events: none;
272
+ }
273
+ .dropdown-mode-mobile .mobile-dialog {
274
+ position: fixed;
275
+ top: 0;
276
+ left: 0;
277
+ right: 0;
278
+ bottom: 0;
279
+ width: 100vw;
280
+ height: 100vh;
281
+ max-width: 100vw;
282
+ max-height: 100vh;
283
+ margin: 0;
284
+ padding: 0;
285
+ padding-top: 10vh;
286
+ border: none;
287
+ background: transparent;
288
+ align-items: flex-start;
289
+ justify-content: center;
290
+ opacity: 0;
291
+ transition: opacity 300ms ease;
292
+ }
293
+ .dropdown-mode-mobile .mobile-dialog[open] {
294
+ display: flex;
295
+ }
296
+ .dropdown-mode-mobile .mobile-dialog.open {
297
+ opacity: 1;
298
+ }
299
+ .dropdown-mode-mobile .mobile-dialog::backdrop {
300
+ background: rgba(0, 0, 0, 0.5);
301
+ backdrop-filter: blur(8px);
302
+ -webkit-backdrop-filter: blur(8px);
303
+ }
304
+ .dropdown-mode-mobile .mobile-dialog-content {
305
+ position: relative;
306
+ display: flex;
307
+ flex-direction: column;
308
+ width: calc(100% - 32px);
309
+ max-width: 400px;
310
+ min-height: 200px;
311
+ max-height: calc(90vh - 10vh);
312
+ opacity: 0;
313
+ transform: scale(0.95);
314
+ transition:
315
+ opacity 300ms cubic-bezier(0.16, 1, 0.3, 1),
316
+ transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
317
+ }
318
+ .dropdown-mode-mobile .mobile-dialog.open .mobile-dialog-content {
319
+ opacity: 1;
320
+ transform: scale(1);
321
+ }
322
+ .dropdown-mode-mobile .mobile-search-input:focus {
323
+ border-color: var(--ty-border);
324
+ }
325
+ .dropdown-mode-mobile .mobile-search-header {
326
+ flex-shrink: 0;
327
+ display: flex;
328
+ align-items: center;
329
+ gap: 12px;
330
+ margin-bottom: 16px;
331
+ padding: 0;
332
+ background: transparent;
333
+ position: relative;
334
+ }
335
+ .dropdown-mode-mobile .mobile-header-content {
336
+ display: flex;
337
+ align-items: center;
338
+ gap: 12px;
339
+ width: 100%;
340
+ }
341
+ .dropdown-mode-mobile .mobile-header-nosearch {
342
+ flex-shrink: 0;
343
+ display: flex;
344
+ justify-content: flex-end;
345
+ margin-bottom: 16px;
346
+ padding: 0;
347
+ background: transparent;
348
+ position: relative;
349
+ min-height: 40px;
350
+ }
351
+ .dropdown-mode-mobile .mobile-close-button {
352
+ flex-shrink: 0;
353
+ width: 36px;
354
+ height: 36px;
355
+ display: flex;
356
+ align-items: center;
357
+ justify-content: center;
358
+ background: var(--ty-surface-floating);
359
+ border: 3px solid;
360
+ border-color: var(--mobile-border-color);
361
+ border-radius: 50%;
362
+ color: var(--ty-text-);
363
+ cursor: pointer;
364
+ transition: var(--ty-transition-all);
365
+ padding: 0;
366
+ }
367
+ .dropdown-mode-mobile .mobile-close-button:hover {
368
+ background: var(--ty-bg-neutral);
369
+ border-color: var(--ty-border);
370
+ color: var(--ty-text);
371
+ }
372
+ .dropdown-mode-mobile .mobile-close-button:active {
373
+ transform: scale(0.9);
374
+ }
375
+ .dropdown-mode-mobile .mobile-close-button svg {
376
+ width: 24px;
377
+ height: 24px;
378
+ }
379
+ .dropdown-mode-mobile .mobile-search-input {
380
+ flex: 1;
381
+ min-width: 0;
382
+ box-sizing: border-box;
383
+ background: var(--ty-surface-floating);
384
+ color: var(--ty-text);
385
+ border: 3px solid;
386
+ border-color: var(--mobile-border-color);
387
+ border-radius: var(--ty-radius-md);
388
+ font-family: var(--ty-font-sans);
389
+ font-size: var(--ty-font-sm);
390
+ font-weight: var(--ty-font-normal);
391
+ line-height: var(--ty-line-height-tight);
392
+ padding: var(--ty-spacing-2) var(--ty-spacing-3);
393
+ height: 40px;
394
+ transition: var(--ty-transition-all);
395
+ outline: none;
396
+ }
397
+ .dropdown-mode-mobile .mobile-search-input::placeholder {
398
+ color: var(--ty-text--);
399
+ }
400
+ .dropdown-mode-mobile .mobile-search-input:focus {
401
+ border-color: var(--ty-border);
402
+ }
403
+ .dropdown-mode-mobile .mobile-body {
404
+ position: relative;
405
+ display: flex;
406
+ flex-direction: column;
407
+ height: var(--body-height, 350px);
408
+ max-height: 350px;
409
+ overflow: hidden;
410
+ background: var(--ty-surface-floating);
411
+ border-radius: var(--ty-radius-lg);
412
+ box-shadow:
413
+ 0 20px 25px -5px rgba(0, 0, 0, 0.1),
414
+ 0 10px 10px -5px rgba(0, 0, 0, 0.04);
415
+ border: 3px solid;
416
+ border-color: var(--mobile-border-color);
417
+ }
418
+ .dropdown-mode-mobile .section-header {
419
+ display: flex;
420
+ align-items: center;
421
+ justify-content: space-between;
422
+ height: 48px;
423
+ flex-shrink: 0;
424
+ padding: 0 16px;
425
+ font-size: 12px;
426
+ font-weight: 600;
427
+ text-transform: uppercase;
428
+ letter-spacing: 0.05em;
429
+ color: var(--ty-text-);
430
+ background: var(--ty-bg-neutral-);
431
+ border-bottom: 1px solid var(--ty-border--);
432
+ cursor: pointer;
433
+ user-select: none;
434
+ transition: all 0.3s ease;
435
+ }
436
+ .dropdown-mode-mobile .section-header:hover {
437
+ background: var(--ty-bg-neutral);
438
+ }
439
+ .dropdown-mode-mobile .section-header:active {
440
+ background: var(--ty-bg-neutral+);
441
+ }
442
+ .dropdown-mode-mobile .section-header .section-title {
443
+ flex: 1;
444
+ }
445
+ .dropdown-mode-mobile .section-header .section-count {
446
+ font-weight: 400;
447
+ opacity: 0.7;
448
+ margin-left: 0.25rem;
449
+ }
450
+ .dropdown-mode-mobile .section-header .section-chevron {
451
+ width: 16px;
452
+ height: 16px;
453
+ color: var(--ty-text--);
454
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
455
+ display: flex;
456
+ align-items: center;
457
+ justify-content: center;
458
+ }
459
+ .dropdown-mode-mobile .section-header .section-chevron svg {
460
+ width: 100%;
461
+ height: 100%;
462
+ }
463
+ .dropdown-mode-mobile .mobile-selected-section[data-expanded="true"] .section-chevron {
464
+ transform: rotate(180deg);
465
+ }
466
+ .dropdown-mode-mobile .mobile-available-section .section-header {
467
+ cursor: default;
468
+ }
469
+ .dropdown-mode-mobile .mobile-available-section .section-header:hover {
470
+ background: var(--ty-bg-neutral-);
471
+ }
472
+ .dropdown-mode-mobile .mobile-selected-section {
473
+ display: flex;
474
+ flex-direction: column;
475
+ background: var(--ty-surface-elevated);
476
+ border-bottom: 2px solid var(--ty-border);
477
+ overflow: hidden;
478
+ transition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1);
479
+ }
480
+ .dropdown-mode-mobile .mobile-selected-section[data-expanded="false"] {
481
+ max-height: 48px;
482
+ flex: 0 0 48px;
483
+ }
484
+ .dropdown-mode-mobile .mobile-selected-section[data-expanded="true"] {
485
+ max-height: 1000px;
486
+ flex: 1;
487
+ }
488
+ .dropdown-mode-mobile .mobile-selected-section .section-content {
489
+ flex: 1;
490
+ overflow-y: auto;
491
+ padding: 0.75rem 1rem;
492
+ display: flex;
493
+ flex-wrap: wrap;
494
+ gap: 0.5rem;
495
+ align-content: flex-start;
496
+ }
497
+ .dropdown-mode-mobile .mobile-available-section {
498
+ display: flex;
499
+ flex-direction: column;
500
+ background: var(--ty-surface-floating);
501
+ overflow: hidden;
502
+ transition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1);
503
+ }
504
+ .dropdown-mode-mobile .mobile-available-section[data-expanded="false"] {
505
+ max-height: 48px;
506
+ flex: 0 0 48px;
507
+ }
508
+ .dropdown-mode-mobile .mobile-available-section[data-expanded="true"] {
509
+ max-height: 1000px;
510
+ flex: 1;
511
+ }
512
+ .dropdown-mode-mobile .mobile-available-section .section-content {
513
+ flex: 1;
514
+ overflow-y: auto;
515
+ padding: 0.75rem 1rem;
516
+ display: flex;
517
+ flex-wrap: wrap;
518
+ gap: 0.5rem;
519
+ align-content: flex-start;
520
+ }
521
+ .dropdown-mode-mobile .empty-state {
522
+ display: none;
523
+ width: 100%;
524
+ padding: 2rem 1rem;
525
+ text-align: center;
526
+ color: var(--ty-text--);
527
+ font-size: 0.875rem;
528
+ font-style: italic;
529
+ }
530
+ .dropdown-mode-mobile .mobile-selected-section[data-empty="true"] .empty-state,
531
+ .dropdown-mode-mobile .mobile-available-section[data-empty="true"] .empty-state {
532
+ display: block;
533
+ }
534
+ .dropdown-mode-mobile .mobile-selected-section[data-empty="true"] slot,
535
+ .dropdown-mode-mobile .mobile-available-section[data-empty="true"] slot {
536
+ display: none;
537
+ }
538
+ .dropdown-mode-mobile .section-content ::slotted(ty-tag) {
539
+ cursor: pointer;
540
+ user-select: none;
541
+ transition: transform 0.1s ease;
542
+ margin: 2px 0;
543
+ }
544
+ .dropdown-mode-mobile .section-content ::slotted(ty-tag:hover) {
545
+ transform: scale(1.02);
546
+ }
547
+ .dropdown-mode-mobile .section-content ::slotted(ty-tag:active) {
548
+ transform: scale(0.98);
549
+ }
550
+ .dropdown-mode-mobile .section-content ::slotted(ty-tag[hidden]) {
551
+ display: none !important;
552
+ }
553
+ .dropdown-mode-mobile .section-content::-webkit-scrollbar {
554
+ width: 6px;
555
+ }
556
+ .dropdown-mode-mobile .section-content::-webkit-scrollbar-track {
557
+ background: var(--ty-bg-neutral-);
558
+ border-radius: 3px;
559
+ }
560
+ .dropdown-mode-mobile .section-content::-webkit-scrollbar-thumb {
561
+ background: var(--ty-border);
562
+ border-radius: 3px;
563
+ }
564
+ .dropdown-mode-mobile .section-content::-webkit-scrollbar-thumb:hover {
565
+ background: var(--ty-border+);
566
+ }
567
+ `;
568
+ //# sourceMappingURL=multiselect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselect.js","sourceRoot":"","sources":["../../src/styles/multiselect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8tBhC,CAAA"}
@@ -1,2 +1,2 @@
1
1
  /** Option Component Styles */
2
- export declare const optionStyles = "\n.option-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ty-spacing-2);\n box-sizing: border-box;\n width: 100%;\n\n cursor: pointer;\n user-select: none;\n\n transition: var(--ty-transition-all);\n\n /* Linear-paired typography */\n color: var(--ty-text);\n font-family: inherit;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n border-radius: var(--ty-radius-md);\n}\n\n/* Cloned copy (projected into the select's trigger field): host defaults to\n inline like any unstyled custom element, which ignores width/overflow \u2014\n force a block box so the parent's flex-basis:0 truncation (select.ts\n .select-stub.has-clone slot[name=\"selected\"]) actually clips it, and\n collapse the content to a single ellipsized line instead of wrapping. */\n:host([cloned]) {\n display: block;\n min-width: 0;\n overflow: hidden;\n}\n\n/* The clone sits in the select's TRIGGER, so its type follows the field size\n ladder (styles/field-size.ts) rather than the dropdown list's own scale \u2014\n the --ty-field-* vars inherit from ty-select through the light DOM. The\n fallbacks cover a ty-option rendered outside a select. */\n:host([cloned]) .option-content {\n display: block;\n padding: 0px;\n background: transparent;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: var(--ty-field-font, var(--ty-font-sm));\n line-height: var(--ty-field-leading, var(--ty-leading-sm));\n letter-spacing: var(--ty-field-tracking, var(--ty-tracking-sm));\n}\n\n.option-content:hover {\n background: var(--ty-bg-neutral-soft);\n}\n\n.option-content[highlighted] {\n background: var(--ty-bg-neutral-soft);\n color: var(--ty-text-strong);\n font-weight: var(--ty-font-semibold);\n}\n\n/* Selected: quiet \u2014 bolder text color only, no background slab, no weight change */\n.option-content[selected] {\n background: transparent;\n color: var(--ty-text-bold);\n}\n\n/* Lucide check \u2014 right-aligned, visible only on selected options */\n.option-check {\n display: none;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n margin-left: auto;\n color: var(--ty-color-primary);\n}\n\n.option-content[selected] .option-check {\n display: block;\n}\n\n/* Never show the check on the copy cloned into the select's trigger field */\n:host([cloned]) .option-check {\n display: none;\n}\n\n.option-content[selected]:hover {\n background: var(--ty-bg-neutral-soft);\n}\n\n.option-content[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.option-content[hidden] {}\n\n.option-content * {\n pointer-events: none;\n}\n";
2
+ export declare const optionStyles = "\n.option-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ty-spacing-2);\n box-sizing: border-box;\n width: 100%;\n\n cursor: pointer;\n user-select: none;\n\n transition: var(--ty-transition-all);\n\n /* Linear-paired typography */\n color: var(--ty-text);\n font-family: inherit;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: var(--ty-spacing-2) var(--ty-spacing-3);\n border-radius: var(--ty-radius-md);\n}\n\n/* Cloned copy (projected into the select's trigger field): host defaults to\n inline like any unstyled custom element, which ignores width/overflow \u2014\n force a block box so the parent's flex-basis:0 truncation (select.ts\n .select-stub.has-clone slot[name=\"selected\"]) actually clips it, and\n collapse the content to a single ellipsized line instead of wrapping. */\n:host([cloned]) {\n display: block;\n min-width: 0;\n overflow: hidden;\n}\n\n/* The clone sits in the select's TRIGGER, so its type follows the field size\n ladder (styles/field-size.ts) rather than the dropdown list's own scale \u2014\n the --ty-field-* vars inherit from ty-select through the light DOM. The\n fallbacks cover a ty-option rendered outside a select. */\n:host([cloned]) .option-content {\n display: block;\n padding: 0px;\n background: transparent;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: var(--ty-field-font, var(--ty-font-sm));\n line-height: var(--ty-field-leading, var(--ty-leading-sm));\n letter-spacing: var(--ty-field-tracking, var(--ty-tracking-sm));\n}\n\n.option-content:hover {\n background: var(--ty-bg-neutral-soft);\n}\n\n.option-content[highlighted] {\n background: var(--ty-bg-neutral-soft);\n color: var(--ty-text-strong);\n}\n\n/* Selected: quiet \u2014 bolder text color only, no background slab, no weight change */\n.option-content[selected] {\n background: transparent;\n color: var(--ty-text-bold);\n}\n\n/* Lucide check \u2014 right-aligned. Its box is always reserved so selecting\n (or highlighting) never changes the row's width and rewraps the text. */\n.option-check {\n display: block;\n visibility: hidden;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n margin-left: auto;\n color: var(--ty-color-primary);\n}\n\n.option-content[selected] .option-check {\n visibility: visible;\n}\n\n/* Never show the check on the copy cloned into the select's trigger field */\n:host([cloned]) .option-check {\n display: none;\n}\n\n.option-content[selected]:hover {\n background: var(--ty-bg-neutral-soft);\n}\n\n.option-content[disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.option-content[hidden] {}\n\n.option-content * {\n pointer-events: none;\n}\n";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.d.ts","sourceRoot":"","sources":["../../src/styles/option.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,mnEA6GxB,CAAA"}
@@ -40,14 +40,14 @@ background: var(--ty-bg-neutral-soft);
40
40
  .option-content[highlighted] {
41
41
  background: var(--ty-bg-neutral-soft);
42
42
  color: var(--ty-text-strong);
43
- font-weight: var(--ty-font-semibold);
44
43
  }
45
44
  .option-content[selected] {
46
45
  background: transparent;
47
46
  color: var(--ty-text-bold);
48
47
  }
49
48
  .option-check {
50
- display: none;
49
+ display: block;
50
+ visibility: hidden;
51
51
  flex-shrink: 0;
52
52
  width: 14px;
53
53
  height: 14px;
@@ -55,7 +55,7 @@ margin-left: auto;
55
55
  color: var(--ty-color-primary);
56
56
  }
57
57
  .option-content[selected] .option-check {
58
- display: block;
58
+ visibility: visible;
59
59
  }
60
60
  :host([cloned]) .option-check {
61
61
  display: none;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.js","sourceRoot":"","sources":["../../src/styles/option.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G3B,CAAA"}
@@ -4,4 +4,4 @@
4
4
  * Popup component with dropdown-like behavior and tooltip positioning.
5
5
  * Uses dialog element for top layer rendering like dropdown and date-picker.
6
6
  */
7
- export declare const popupStyles = "\n.popup-dialog {\n position: fixed;\n top: 0;\n left: 0;\n\n /* Reset dialog defaults */\n margin: 0;\n border: none;\n background: transparent;\n max-width: none;\n max-height: none;\n\n /* Shadow infrastructure - provide space for user shadows */\n padding: var(--popup-padding, 16px);\n\n /* Hidden by default - even when [open] (for positioning phase) */\n visibility: hidden;\n opacity: 0;\n /* NO TRANSFORM here - apply only when animating to avoid measurement errors! */\n\n transition:\n opacity var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),\n visibility var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),\n transform var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1));\n\n /* Prevent interactions when hidden */\n pointer-events: none;\n}\n\n/* Apply position variables only when position is calculated (like dropdown) */\n.popup-dialog.position-calculated {\n top: var(--popup-y, 0px);\n left: var(--popup-x, 0px);\n}\n\n/* Entrance prep (right before .open): scale + a short slide from the anchor\n side. data-side is the RESOLVED side (post-flip), set by updatePosition. */\n.popup-dialog.preparing-animation {\n transform: scale(0.96);\n}\n\n.popup-dialog[data-side=\"bottom\"].preparing-animation:not(.open) {\n transform: translateY(-6px) scale(0.96);\n}\n\n.popup-dialog[data-side=\"top\"].preparing-animation:not(.open) {\n transform: translateY(6px) scale(0.96);\n}\n\n.popup-dialog[data-side=\"left\"].preparing-animation:not(.open) {\n transform: translateX(6px) scale(0.96);\n}\n\n.popup-dialog[data-side=\"right\"].preparing-animation:not(.open) {\n transform: translateX(-6px) scale(0.96);\n}\n\n.popup-dialog.open {\n visibility: visible;\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* Make dialog backdrop transparent like dropdown/date-picker */\n.popup-dialog::backdrop {\n background: transparent;\n}\n\n/* Neutral structural container \u2014 users control all visuals via slotted content */\n.popup-container {\n display: contents;\n}\n\n/* Slotted content defines its own styling */\n#popup-content {\n display: contents;\n}\n\n/* Users have complete control over the popup's appearance; only essential\n positioning is imposed here. */\n#popup-content ::slotted(*) {\n position: relative;\n\n /* Prevent content from being too wide - still helpful */\n max-width: min(400px, 90vw);\n max-height: min(500px, 80vh);\n overflow: auto;\n}\n";
7
+ export declare const popupStyles = "\n.popup-dialog {\n position: fixed;\n top: 0;\n left: 0;\n\n /* Reset dialog defaults */\n margin: 0;\n border: none;\n background: transparent;\n max-width: none;\n max-height: none;\n\n /* Shadow infrastructure - provide space for user shadows */\n padding: var(--popup-padding, 16px);\n\n /* Hidden by default - even when [open] (for positioning phase) */\n visibility: hidden;\n opacity: 0;\n /* NO TRANSFORM here - apply only when animating to avoid measurement errors! */\n\n transition:\n opacity var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),\n visibility var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1)),\n transform var(--ty-popup-duration, 180ms) var(--ty-popup-ease, cubic-bezier(0.34, 1.56, 0.64, 1));\n\n /* Prevent interactions when hidden */\n pointer-events: none;\n}\n\n/* Apply position variables only when position is calculated (like dropdown) */\n.popup-dialog.position-calculated {\n top: var(--popup-y, 0px);\n left: var(--popup-x, 0px);\n}\n\n/* Entrance prep (right before .open): scale + a short slide from the anchor\n side. data-side is the RESOLVED side (post-flip), set by updatePosition. */\n.popup-dialog.preparing-animation {\n transform: scale(var(--ty-popup-scale, 0.96));\n}\n\n/* The prep pose must land instantly. Transitioned, it had barely left\n scale(1) when .open arrived a frame later, so the entrance (and any\n springy --ty-popup-ease) ran over almost no distance. */\n.popup-dialog.preparing-animation:not(.open) {\n transition: none;\n}\n\n.popup-dialog[data-side=\"bottom\"].preparing-animation:not(.open) {\n transform: translateY(-6px) scale(var(--ty-popup-scale, 0.96));\n}\n\n.popup-dialog[data-side=\"top\"].preparing-animation:not(.open) {\n transform: translateY(6px) scale(var(--ty-popup-scale, 0.96));\n}\n\n.popup-dialog[data-side=\"left\"].preparing-animation:not(.open) {\n transform: translateX(6px) scale(var(--ty-popup-scale, 0.96));\n}\n\n.popup-dialog[data-side=\"right\"].preparing-animation:not(.open) {\n transform: translateX(-6px) scale(var(--ty-popup-scale, 0.96));\n}\n\n.popup-dialog.open {\n visibility: visible;\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* Make dialog backdrop transparent like dropdown/date-picker */\n.popup-dialog::backdrop {\n background: transparent;\n}\n\n/* Neutral structural container \u2014 users control all visuals via slotted content */\n.popup-container {\n display: contents;\n}\n\n/* Slotted content defines its own styling */\n#popup-content {\n display: contents;\n}\n\n/* Users have complete control over the popup's appearance; only essential\n positioning is imposed here. */\n#popup-content ::slotted(*) {\n position: relative;\n\n /* Prevent content from being too wide - still helpful */\n max-width: min(400px, 90vw);\n max-height: min(500px, 80vh);\n overflow: auto;\n}\n";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.d.ts","sourceRoot":"","sources":["../../src/styles/popup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,WAAW,gzEAuFvB,CAAC"}
@@ -22,19 +22,22 @@ top: var(--popup-y, 0px);
22
22
  left: var(--popup-x, 0px);
23
23
  }
24
24
  .popup-dialog.preparing-animation {
25
- transform: scale(0.96);
25
+ transform: scale(var(--ty-popup-scale, 0.96));
26
+ }
27
+ .popup-dialog.preparing-animation:not(.open) {
28
+ transition: none;
26
29
  }
27
30
  .popup-dialog[data-side="bottom"].preparing-animation:not(.open) {
28
- transform: translateY(-6px) scale(0.96);
31
+ transform: translateY(-6px) scale(var(--ty-popup-scale, 0.96));
29
32
  }
30
33
  .popup-dialog[data-side="top"].preparing-animation:not(.open) {
31
- transform: translateY(6px) scale(0.96);
34
+ transform: translateY(6px) scale(var(--ty-popup-scale, 0.96));
32
35
  }
33
36
  .popup-dialog[data-side="left"].preparing-animation:not(.open) {
34
- transform: translateX(6px) scale(0.96);
37
+ transform: translateX(6px) scale(var(--ty-popup-scale, 0.96));
35
38
  }
36
39
  .popup-dialog[data-side="right"].preparing-animation:not(.open) {
37
- transform: translateX(-6px) scale(0.96);
40
+ transform: translateX(-6px) scale(var(--ty-popup-scale, 0.96));
38
41
  }
39
42
  .popup-dialog.open {
40
43
  visibility: visible;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.js","sourceRoot":"","sources":["../../src/styles/popup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF1B,CAAC"}