q2-tecton-elements 1.69.1 → 1.70.0

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 (273) hide show
  1. package/dist/bundle-report.json +2246 -355
  2. package/dist/cjs/click-elsewhere_3.cjs.entry.js +2 -2
  3. package/dist/cjs/{index-D2LFCsNP.js → index-SpDCZABA.js} +2 -2
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/q2-action-group_2.cjs.entry.js +1 -1
  6. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-badge_2.cjs.entry.js +11 -4
  8. package/dist/cjs/q2-btn_2.cjs.entry.js +6 -2
  9. package/dist/cjs/q2-calendar.cjs.entry.js +5 -3
  10. package/dist/cjs/q2-card-image.cjs.entry.js +8 -6
  11. package/dist/cjs/q2-card.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-checkbox_2.cjs.entry.js +4 -3
  19. package/dist/cjs/q2-context.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-data-table.cjs.entry.js +6 -3
  22. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -3
  25. package/dist/cjs/q2-editable-field.cjs.entry.js +12 -4
  26. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  29. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  31. package/dist/cjs/q2-loc.cjs.entry.js +20 -2
  32. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-meter.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-modal.cjs.entry.js +3 -3
  35. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-otp.cjs.entry.js +1 -1
  39. package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-pill.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-relative-time.cjs.entry.js +1 -1
  44. package/dist/cjs/q2-search.cjs.entry.js +101 -12
  45. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-select.cjs.entry.js +36 -6
  47. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +24 -18
  49. package/dist/cjs/q2-stepper.cjs.entry.js +5 -4
  50. package/dist/cjs/q2-surface.cjs.entry.js +95 -0
  51. package/dist/cjs/q2-tab-container.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
  53. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  54. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  55. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  56. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  57. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  58. package/dist/collection/collection-manifest.json +1 -0
  59. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +1 -1
  60. package/dist/collection/components/q2-btn/q2-btn.css +32 -17
  61. package/dist/collection/components/q2-btn/q2-btn.js +6 -1
  62. package/dist/collection/components/q2-calendar/q2-calendar.js +24 -2
  63. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +4 -0
  64. package/dist/collection/components/q2-card/q2-card.css +2 -2
  65. package/dist/collection/components/q2-card-image/q2-card-image.css +3 -0
  66. package/dist/collection/components/q2-card-image/q2-card-image.js +25 -23
  67. package/dist/collection/components/q2-chart-area/q2-chart-area.css +4 -0
  68. package/dist/collection/components/q2-chart-bar/q2-chart-bar.css +4 -0
  69. package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +1 -1
  70. package/dist/collection/components/q2-checkbox/q2-checkbox.js +2 -1
  71. package/dist/collection/components/q2-currency/q2-currency.css +1 -1
  72. package/dist/collection/components/q2-data-table/q2-data-table.js +5 -2
  73. package/dist/collection/components/q2-detail/q2-detail.css +12 -12
  74. package/dist/collection/components/q2-dropdown/q2-dropdown.js +2 -2
  75. package/dist/collection/components/q2-editable-field/q2-editable-field.js +11 -3
  76. package/dist/collection/components/q2-input/q2-input.css +11 -1
  77. package/dist/collection/components/q2-input/q2-input.js +29 -2
  78. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +8 -0
  79. package/dist/collection/components/q2-item/q2-item.css +10 -5
  80. package/dist/collection/components/q2-item/test/q2-item-test.vr.js +132 -0
  81. package/dist/collection/components/q2-legend/q2-legend.css +2 -2
  82. package/dist/collection/components/q2-list/q2-list.css +1 -1
  83. package/dist/collection/components/q2-loc/q2-loc.js +42 -1
  84. package/dist/collection/components/q2-message/q2-message.css +4 -0
  85. package/dist/collection/components/q2-meter/q2-meter.css +3 -3
  86. package/dist/collection/components/q2-modal/q2-modal.css +1 -1
  87. package/dist/collection/components/q2-modal/q2-modal.js +2 -2
  88. package/dist/collection/components/q2-otp/q2-otp.css +33 -0
  89. package/dist/collection/components/q2-otp/test/q2-otp-test.vr.js +83 -0
  90. package/dist/collection/components/q2-popover/q2-popover.css +2 -1
  91. package/dist/collection/components/q2-radio/q2-radio.css +2 -0
  92. package/dist/collection/components/q2-search/q2-search.css +30 -0
  93. package/dist/collection/components/q2-search/q2-search.js +99 -10
  94. package/dist/collection/components/q2-search/test/q2-search-test.vr.js +145 -0
  95. package/dist/collection/components/q2-section/q2-section.css +1 -1
  96. package/dist/collection/components/q2-select/q2-select.css +4 -2
  97. package/dist/collection/components/q2-select/q2-select.js +54 -4
  98. package/dist/collection/components/q2-select/test/q2-select-test.vr.js +5 -0
  99. package/dist/collection/components/q2-stepper/q2-stepper.css +2 -2
  100. package/dist/collection/components/q2-stepper/q2-stepper.js +3 -2
  101. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +2 -2
  102. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +22 -16
  103. package/dist/collection/components/q2-surface/q2-surface.css +348 -0
  104. package/dist/collection/components/q2-surface/q2-surface.js +381 -0
  105. package/dist/collection/components/q2-surface/test/q2-surface-test.vr.js +108 -0
  106. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  107. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  108. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  109. package/dist/collection/components/q2-toast/q2-toast.js +3 -1
  110. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  111. package/dist/collection/utils/index.js +2 -2
  112. package/dist/components/index.js +12 -10
  113. package/dist/components/index2.js +3 -3
  114. package/dist/components/q2-action-sheet.js +1 -1
  115. package/dist/components/q2-btn2.js +5 -1
  116. package/dist/components/q2-calendar.js +294 -290
  117. package/dist/components/q2-card-image.js +9 -6
  118. package/dist/components/q2-card.js +14 -14
  119. package/dist/components/q2-chart-donut.js +1 -1
  120. package/dist/components/q2-checkbox2.js +12 -12
  121. package/dist/components/q2-currency.js +1 -1
  122. package/dist/components/q2-data-table.js +4 -4
  123. package/dist/components/q2-detail.js +1 -1
  124. package/dist/components/q2-dropdown.js +8 -8
  125. package/dist/components/q2-editable-field.js +15 -5
  126. package/dist/components/q2-input2.js +46 -26
  127. package/dist/components/q2-item2.js +1 -1
  128. package/dist/components/q2-legend2.js +51 -51
  129. package/dist/components/q2-list2.js +1 -1
  130. package/dist/components/q2-loc.js +23 -8
  131. package/dist/components/q2-meter.js +10 -10
  132. package/dist/components/q2-modal.js +54 -54
  133. package/dist/components/q2-popover2.js +1 -1
  134. package/dist/components/q2-search.js +106 -51
  135. package/dist/components/q2-section.js +1 -1
  136. package/dist/components/q2-select2.js +25 -9
  137. package/dist/components/q2-stepper-vertical.js +72 -63
  138. package/dist/components/q2-stepper.js +73 -71
  139. package/dist/components/q2-surface.d.ts +11 -0
  140. package/dist/components/q2-surface.js +109 -0
  141. package/dist/components/q2-tab-container.js +12 -12
  142. package/dist/components/q2-tab-pane.js +6 -6
  143. package/dist/components/q2-tag2.js +5 -5
  144. package/dist/components/tecton-tab-pane.js +10 -10
  145. package/dist/esm/click-elsewhere_3.entry.js +2 -2
  146. package/dist/esm/{index-Bx4m6N0g.js → index-Cps4jSQM.js} +2 -2
  147. package/dist/esm/loader.js +1 -1
  148. package/dist/esm/q2-action-group_2.entry.js +1 -1
  149. package/dist/esm/q2-action-sheet.entry.js +2 -2
  150. package/dist/esm/q2-badge_2.entry.js +11 -4
  151. package/dist/esm/q2-btn_2.entry.js +6 -2
  152. package/dist/esm/q2-calendar.entry.js +5 -3
  153. package/dist/esm/q2-card-image.entry.js +8 -6
  154. package/dist/esm/q2-card.entry.js +2 -2
  155. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  156. package/dist/esm/q2-carousel.entry.js +1 -1
  157. package/dist/esm/q2-chart-area.entry.js +1 -1
  158. package/dist/esm/q2-chart-bar.entry.js +1 -1
  159. package/dist/esm/q2-chart-donut.entry.js +2 -2
  160. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  161. package/dist/esm/q2-checkbox_2.entry.js +4 -3
  162. package/dist/esm/q2-context.entry.js +1 -1
  163. package/dist/esm/q2-currency.entry.js +1 -1
  164. package/dist/esm/q2-data-table.entry.js +6 -3
  165. package/dist/esm/q2-detail.entry.js +2 -2
  166. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  167. package/dist/esm/q2-dropdown.entry.js +3 -3
  168. package/dist/esm/q2-editable-field.entry.js +12 -4
  169. package/dist/esm/q2-file-picker.entry.js +1 -1
  170. package/dist/esm/q2-icon.entry.js +1 -1
  171. package/dist/esm/q2-item.entry.js +2 -2
  172. package/dist/esm/q2-legend.entry.js +1 -1
  173. package/dist/esm/q2-link_2.entry.js +2 -2
  174. package/dist/esm/q2-loc.entry.js +20 -2
  175. package/dist/esm/q2-message.entry.js +1 -1
  176. package/dist/esm/q2-meter.entry.js +2 -2
  177. package/dist/esm/q2-modal.entry.js +3 -3
  178. package/dist/esm/q2-month-picker.entry.js +1 -1
  179. package/dist/esm/q2-optgroup.entry.js +1 -1
  180. package/dist/esm/q2-option.entry.js +1 -1
  181. package/dist/esm/q2-otp.entry.js +1 -1
  182. package/dist/esm/q2-pagination.entry.js +1 -1
  183. package/dist/esm/q2-pill.entry.js +1 -1
  184. package/dist/esm/q2-radio-group.entry.js +1 -1
  185. package/dist/esm/q2-radio.entry.js +1 -1
  186. package/dist/esm/q2-relative-time.entry.js +1 -1
  187. package/dist/esm/q2-search.entry.js +101 -12
  188. package/dist/esm/q2-section.entry.js +2 -2
  189. package/dist/esm/q2-select.entry.js +36 -6
  190. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  191. package/dist/esm/q2-stepper-vertical.entry.js +24 -18
  192. package/dist/esm/q2-stepper.entry.js +5 -4
  193. package/dist/esm/q2-surface.entry.js +93 -0
  194. package/dist/esm/q2-tab-container.entry.js +2 -2
  195. package/dist/esm/q2-tab-pane.entry.js +1 -1
  196. package/dist/esm/q2-tecton-elements.js +1 -1
  197. package/dist/esm/q2-textarea.entry.js +1 -1
  198. package/dist/esm/q2-toast.entry.js +1 -1
  199. package/dist/esm/q2-tooltip.entry.js +1 -1
  200. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  201. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +2 -2
  202. package/dist/q2-tecton-elements/{index-Bx4m6N0g.js → index-Cps4jSQM.js} +3 -3
  203. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +1 -1
  204. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +2 -2
  205. package/dist/q2-tecton-elements/q2-badge_2.entry.js +51 -32
  206. package/dist/q2-tecton-elements/q2-btn_2.entry.js +6 -2
  207. package/dist/q2-tecton-elements/q2-calendar.entry.js +7 -4
  208. package/dist/q2-tecton-elements/q2-card-image.entry.js +65 -62
  209. package/dist/q2-tecton-elements/q2-card.entry.js +2 -2
  210. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +1 -1
  211. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  212. package/dist/q2-tecton-elements/q2-chart-area.entry.js +54 -54
  213. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +3 -3
  214. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +7 -7
  215. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
  216. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +18 -18
  217. package/dist/q2-tecton-elements/q2-context.entry.js +1 -1
  218. package/dist/q2-tecton-elements/q2-currency.entry.js +1 -1
  219. package/dist/q2-tecton-elements/q2-data-table.entry.js +50 -50
  220. package/dist/q2-tecton-elements/q2-detail.entry.js +2 -2
  221. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  222. package/dist/q2-tecton-elements/q2-dropdown.entry.js +16 -16
  223. package/dist/q2-tecton-elements/q2-editable-field.entry.js +15 -8
  224. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  225. package/dist/q2-tecton-elements/q2-icon.entry.js +1 -1
  226. package/dist/q2-tecton-elements/q2-item.entry.js +2 -2
  227. package/dist/q2-tecton-elements/q2-legend.entry.js +1 -1
  228. package/dist/q2-tecton-elements/q2-link_2.entry.js +2 -2
  229. package/dist/q2-tecton-elements/q2-loc.entry.js +20 -6
  230. package/dist/q2-tecton-elements/q2-message.entry.js +1 -1
  231. package/dist/q2-tecton-elements/q2-meter.entry.js +2 -2
  232. package/dist/q2-tecton-elements/q2-modal.entry.js +55 -55
  233. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  234. package/dist/q2-tecton-elements/q2-optgroup.entry.js +1 -1
  235. package/dist/q2-tecton-elements/q2-option.entry.js +7 -7
  236. package/dist/q2-tecton-elements/q2-otp.entry.js +1 -1
  237. package/dist/q2-tecton-elements/q2-pagination.entry.js +1 -1
  238. package/dist/q2-tecton-elements/q2-pill.entry.js +1 -1
  239. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  240. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  241. package/dist/q2-tecton-elements/q2-relative-time.entry.js +1 -1
  242. package/dist/q2-tecton-elements/q2-search.entry.js +108 -53
  243. package/dist/q2-tecton-elements/q2-section.entry.js +2 -2
  244. package/dist/q2-tecton-elements/q2-select.entry.js +25 -10
  245. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  246. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +75 -66
  247. package/dist/q2-tecton-elements/q2-stepper.entry.js +47 -45
  248. package/dist/q2-tecton-elements/q2-surface.entry.js +89 -0
  249. package/dist/q2-tecton-elements/q2-tab-container.entry.js +13 -13
  250. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +2 -2
  251. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  252. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  253. package/dist/q2-tecton-elements/q2-toast.entry.js +5 -5
  254. package/dist/q2-tecton-elements/q2-tooltip.entry.js +8 -8
  255. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  256. package/dist/types/components/q2-calendar/q2-calendar.d.ts +2 -0
  257. package/dist/types/components/q2-card-image/q2-card-image.d.ts +5 -5
  258. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +1 -0
  259. package/dist/types/components/q2-input/q2-input.d.ts +3 -0
  260. package/dist/types/components/q2-item/test/q2-item-test.vr.d.ts +1 -0
  261. package/dist/types/components/q2-loc/q2-loc.d.ts +6 -0
  262. package/dist/types/components/q2-modal/q2-modal.d.ts +1 -1
  263. package/dist/types/components/q2-otp/test/q2-otp-test.vr.d.ts +1 -0
  264. package/dist/types/components/q2-search/q2-search.d.ts +7 -0
  265. package/dist/types/components/q2-search/test/q2-search-test.vr.d.ts +1 -0
  266. package/dist/types/components/q2-select/q2-select.d.ts +4 -0
  267. package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +2 -1
  268. package/dist/types/components/q2-surface/q2-surface.d.ts +54 -0
  269. package/dist/types/components/q2-surface/test/q2-surface-test.vr.d.ts +1 -0
  270. package/dist/types/components/q2-toast/q2-toast.d.ts +3 -1
  271. package/dist/types/components.d.ts +259 -13
  272. package/dist/types/utils/index.d.ts +3 -1
  273. package/package.json +4 -3
@@ -0,0 +1,132 @@
1
+ import { expect } from "@playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
4
+ const DROPDOWN_OPTIONS = `
5
+ <q2-option value="first">First</q2-option>
6
+ <q2-option value="second">Second</q2-option>
7
+ <q2-option separator></q2-option>
8
+ <q2-option value="third">Third</q2-option>
9
+ <q2-option value="fourth">Fourth</q2-option>
10
+ `;
11
+ const DROPDOWN_ACTION = `<q2-dropdown slot="action" type="icon" label="My dropdown" icon="options" popover-alignment="left" hide-label="">${DROPDOWN_OPTIONS}</q2-dropdown>`;
12
+ const BUTTON_ACTION = `<q2-btn intent="workflow-primary" slot="action">Action</q2-btn>`;
13
+ const ICON_BUTTON_ACTION = `<q2-btn slot="action" intent="workflow-primary"><q2-icon type="edit"></q2-icon></q2-btn>`;
14
+ const CHECKBOX_ACTION = `<q2-checkbox label="Item checkbox" hide-label slot="action"></q2-checkbox>`;
15
+ const PILL_ACTION = `<q2-pill label="Item pill" slot="action"></q2-pill>`;
16
+ const AVATAR_DECORATOR = `<q2-avatar icon="home" slot="decorator"></q2-avatar>`;
17
+ const ICON_DECORATOR = `<q2-icon type="home" slot="decorator"></q2-icon>`;
18
+ const FULL_CONTENT = `
19
+ <div slot="header">Header Text</div>
20
+ <div slot="body">Body Text</div>
21
+ <div slot="footer">Footer Text</div>
22
+ `;
23
+ const VARIANTS = [
24
+ {
25
+ name: 'default',
26
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}${DROPDOWN_ACTION}</q2-item>`,
27
+ states: ['resting'],
28
+ },
29
+ {
30
+ name: 'decorator-icon',
31
+ html: `<q2-item>${ICON_DECORATOR}${FULL_CONTENT}${DROPDOWN_ACTION}</q2-item>`,
32
+ states: ['resting'],
33
+ },
34
+ {
35
+ name: 'no-decorator',
36
+ html: `<q2-item>${FULL_CONTENT}${DROPDOWN_ACTION}</q2-item>`,
37
+ states: ['resting'],
38
+ },
39
+ {
40
+ name: 'action-button',
41
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}${BUTTON_ACTION}</q2-item>`,
42
+ states: ['resting'],
43
+ },
44
+ {
45
+ name: 'action-icon-button',
46
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}${ICON_BUTTON_ACTION}</q2-item>`,
47
+ states: ['resting'],
48
+ },
49
+ {
50
+ name: 'action-checkbox',
51
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}${CHECKBOX_ACTION}</q2-item>`,
52
+ states: ['resting'],
53
+ },
54
+ {
55
+ name: 'action-pill',
56
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}${PILL_ACTION}</q2-item>`,
57
+ states: ['resting'],
58
+ },
59
+ {
60
+ name: 'no-action',
61
+ html: `<q2-item>${AVATAR_DECORATOR}${FULL_CONTENT}</q2-item>`,
62
+ states: ['resting'],
63
+ },
64
+ {
65
+ name: 'no-action-no-decorator',
66
+ html: `<q2-item>${FULL_CONTENT}</q2-item>`,
67
+ states: ['resting'],
68
+ },
69
+ {
70
+ name: 'clickable',
71
+ html: `<q2-item clickable>${AVATAR_DECORATOR}${FULL_CONTENT}${DROPDOWN_ACTION}</q2-item>`,
72
+ states: ['resting', 'hover', 'focus', 'active'],
73
+ },
74
+ {
75
+ name: 'vertical-align-center',
76
+ html: `<q2-item vertical-align="center">${AVATAR_DECORATOR}<div slot="header">Header Text</div></q2-item>`,
77
+ states: ['resting'],
78
+ },
79
+ {
80
+ name: 'vertical-align-bottom',
81
+ html: `<q2-item vertical-align="bottom">${AVATAR_DECORATOR}<div slot="header">Header Text</div></q2-item>`,
82
+ states: ['resting'],
83
+ },
84
+ ];
85
+ const restingCase = (variant, theme) => {
86
+ test(`q2-item--${variant.name}--resting — ${theme}`, async ({ page }) => {
87
+ await setupPage(page, variant.html, { theme });
88
+ await expect(page).toHaveScreenshot(`q2-item--${variant.name}--resting--${theme}.png`);
89
+ });
90
+ };
91
+ const hoverCase = (variant, theme) => {
92
+ test(`q2-item--${variant.name}--hover — ${theme}`, async ({ page }) => {
93
+ await setupPage(page, variant.html, { theme });
94
+ await page.locator('q2-item').hover();
95
+ await expect(page).toHaveScreenshot(`q2-item--${variant.name}--hover--${theme}.png`);
96
+ });
97
+ };
98
+ const focusCase = (variant, theme) => {
99
+ test(`q2-item--${variant.name}--focus — ${theme}`, async ({ page }) => {
100
+ await setupPage(page, variant.html, { theme });
101
+ await page.keyboard.press('Tab');
102
+ await expect(page).toHaveScreenshot(`q2-item--${variant.name}--focus--${theme}.png`);
103
+ });
104
+ };
105
+ const activeCase = (variant, theme) => {
106
+ test(`q2-item--${variant.name}--active — ${theme}`, async ({ page }) => {
107
+ await setupPage(page, variant.html, { theme });
108
+ const item = page.locator('q2-item');
109
+ const box = await item.boundingBox();
110
+ if (!box)
111
+ throw new Error('q2-item bounding box unavailable');
112
+ await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
113
+ await page.mouse.down();
114
+ await page.waitForTimeout(50);
115
+ await expect(page).toHaveScreenshot(`q2-item--${variant.name}--active--${theme}.png`);
116
+ await page.mouse.up();
117
+ });
118
+ };
119
+ test.describe('q2-item — variants × themes', () => {
120
+ for (const variant of VARIANTS) {
121
+ for (const theme of THEMES) {
122
+ if (variant.states.includes('resting'))
123
+ restingCase(variant, theme);
124
+ if (variant.states.includes('hover'))
125
+ hoverCase(variant, theme);
126
+ if (variant.states.includes('focus'))
127
+ focusCase(variant, theme);
128
+ if (variant.states.includes('active'))
129
+ activeCase(variant, theme);
130
+ }
131
+ }
132
+ });
@@ -124,7 +124,7 @@ ul {
124
124
  }
125
125
 
126
126
  .item-name {
127
- color: var(--tct-legend-item-name-font-color, var(--t-text, #4d4d4d));
127
+ color: var(--tct-legend-item-name-font-color, inherit);
128
128
  display: inline-block;
129
129
  flex-grow: 1;
130
130
  font-size: var(--tct-legend-item-name-font-size, var(--app-font-size, 14px));
@@ -134,7 +134,7 @@ ul {
134
134
  }
135
135
 
136
136
  .item-value {
137
- color: var(--tct-legend-item-value-font-color, var(--t-text, #4d4d4d));
137
+ color: var(--tct-legend-item-value-font-color, inherit);
138
138
  display: inline-block;
139
139
  margin-left: auto;
140
140
  flex-grow: 0;
@@ -180,7 +180,7 @@ button {
180
180
  line-height: var(--tct-list-label-line-height, 44px);
181
181
  font-size: var(--tct-list-label-font-size, var(--app-font-size, 14px));
182
182
  font-weight: var(--tct-list-label-font-weight, 600);
183
- color: var(--tct-list-label-font-color, var(--t-text, #4d4d4d));
183
+ color: var(--tct-list-label-font-color, inherit);
184
184
  }
185
185
 
186
186
  slot:not([name]) {
@@ -1,3 +1,4 @@
1
+ import sanitizeHTMLString from "../../utils/sanitize-html-string";
1
2
  import { loc } from "../../utils/index";
2
3
  /**
3
4
  * @name Localization
@@ -6,6 +7,13 @@ import { loc } from "../../utils/index";
6
7
  */
7
8
  export class Q2Loc {
8
9
  constructor() {
10
+ // #endregion
11
+ // #region Public Property API
12
+ /**
13
+ * When true, allows HTML tags in the localized string to be rendered as HTML.
14
+ * @warning Only use this with trusted localization strings, as it uses innerHTML and may expose XSS vulnerabilities. See the FAQ "Can I add HTML to my localization strings?" for usage guidance.
15
+ */
16
+ this.ignoreTag = false;
9
17
  this.initMutationObserver = () => {
10
18
  if (!('MutationObserver' in window))
11
19
  return;
@@ -41,22 +49,55 @@ export class Q2Loc {
41
49
  componentDidLoad() {
42
50
  this.initMutationObserver();
43
51
  }
52
+ componentDidRender() {
53
+ if (this.ignoreTag) {
54
+ this.hostElement.innerHTML = sanitizeHTMLString(this.translatedValue);
55
+ }
56
+ }
44
57
  // #endregion
45
58
  // #region Local Methods
46
59
  get hostTextContent() {
47
60
  return this.hostElement.textContent.trim();
48
61
  }
49
62
  get translatedValue() {
50
- return loc(this.value, this.substitutions);
63
+ return loc(this.value, this.substitutions, this.ignoreTag ? { ignoreTag: true } : undefined);
51
64
  }
52
65
  // #endregion
53
66
  // #region Render Methods
54
67
  render() {
68
+ if (this.ignoreTag) {
69
+ // When ignoreTag is true, render HTML content using innerHTML
70
+ // We need to do this in componentDidRender to ensure the host element exists
71
+ return null;
72
+ }
55
73
  return this.translatedValue;
56
74
  }
57
75
  static get is() { return "q2-loc"; }
58
76
  static get properties() {
59
77
  return {
78
+ "ignoreTag": {
79
+ "type": "boolean",
80
+ "mutable": false,
81
+ "complexType": {
82
+ "original": "boolean",
83
+ "resolved": "boolean",
84
+ "references": {}
85
+ },
86
+ "required": false,
87
+ "optional": false,
88
+ "docs": {
89
+ "tags": [{
90
+ "name": "warning",
91
+ "text": "Only use this with trusted localization strings, as it uses innerHTML and may expose XSS vulnerabilities. See the FAQ \"Can I add HTML to my localization strings?\" for usage guidance."
92
+ }],
93
+ "text": "When true, allows HTML tags in the localized string to be rendered as HTML."
94
+ },
95
+ "getter": false,
96
+ "setter": false,
97
+ "reflect": false,
98
+ "attribute": "ignore-tag",
99
+ "defaultValue": "false"
100
+ },
60
101
  "substitutions": {
61
102
  "type": "unknown",
62
103
  "mutable": false,
@@ -88,6 +88,10 @@ button {
88
88
  * @prop --tct-message-success-bar-color: (<color>) Controls the color of the status bar when the message type is success.
89
89
  * @prop --tct-message-warning-bar-color: (<color>) Controls the color of the status bar when the message type is warning.
90
90
  * @prop --tct-message-error-bar-color: (<color>) Controls the color of the status bar when the message type is error or danger.
91
+ * @prop --tct-message-info-background: (<color>) Controls the background color of the message container when the message type is info.
92
+ * @prop --tct-message-success-background: (<color>) Controls the background color of the message container when the message type is success.
93
+ * @prop --tct-message-warning-background: (<color>) Controls the background color of the message container when the message type is warning.
94
+ * @prop --tct-message-error-background: (<color>) Controls the background color of the message container when the message type is error or danger.
91
95
  */
92
96
  :host {
93
97
  display: block;
@@ -135,13 +135,13 @@ button {
135
135
  .meter-container .label {
136
136
  font-size: var(--tct-meter-label-font-size, 14px);
137
137
  font-weight: var(--tct-meter-label-font-weight, 600);
138
- color: var(--tct-meter-label-color, var(--t-text, #4D4D4D));
138
+ color: var(--tct-meter-label-color, inherit);
139
139
  margin: var(--tct-meter-label-margin, 5px 0);
140
140
  }
141
141
  .meter-container .description {
142
142
  font-size: var(--tct-meter-description-font-size, 14px);
143
143
  font-weight: var(--tct-meter-description-font-weight, 400);
144
- color: var(--tct-meter-description-color, #000000);
144
+ color: var(--tct-meter-description-color, inherit);
145
145
  line-height: var(--tct-meter-description-line-height, 21px);
146
146
  margin: var(--tct-meter-description-margin, 5px 0);
147
147
  }
@@ -230,7 +230,7 @@ button {
230
230
  display: flex;
231
231
  flex-direction: row;
232
232
  justify-content: space-between;
233
- color: var(--tct-meter-legend-label-color, var(--t-textA, #767676));
233
+ color: var(--tct-meter-legend-label-color, inherit);
234
234
  font-weight: var(--tct-meter-legend-font-weight, 400);
235
235
  margin: var(--tct-meter-legend-margin, 5px 0);
236
236
  }
@@ -103,7 +103,7 @@ dialog {
103
103
  --comp-close-button-size: var(--tct-modal-close-button-size, var(--t-a11y-min-size, 44px));
104
104
  --comp-header-height: var(--tct-modal-header-height, var(--t-a11y-min-size, 44px));
105
105
  --comp-dialog-background: var(--tct-modal-background, var(--t-base, #ffffff));
106
- --comp-dialog-color: var(--tct-modal-color, var(--t-text, #4d4d4d));
106
+ --comp-dialog-color: var(--tct-modal-color, inherit);
107
107
  --comp-dialog-padding: var(--tct-modal-padding, var(--app-scale-3x, 15px));
108
108
  --comp-content-gradient-height: var(--tct-modal-content-gradient-height, var(--app-scale-2x, 10px));
109
109
  --comp-dialog-gap: var(--tct-modal-gap, var(--app-scale-2x, 10px));
@@ -3,7 +3,7 @@ import { debounce, hasSlotContent, waitForNextPaint } from "../../utils/index";
3
3
  import sanitizeHTMLString from "../../utils/sanitize-html-string";
4
4
  /**
5
5
  * @name Modal
6
- * @category Display
6
+ * @category Platform
7
7
  * @summary Use for focused interactions that require user attention before continuing.
8
8
  * @slot content - A slot to display custom content in the modal body above the description.
9
9
  * @slot action - A slot to display up to four elements compatible with [Action Group](https://tecton.q2developer.com/design-system/q2-action-group) in the modal's footer.
@@ -136,7 +136,7 @@ export class Q2Modal {
136
136
  render() {
137
137
  const interiorClasses = `interior`;
138
138
  const renderStatus = `${this.renderStatus || ''}`;
139
- return (h("dialog", { key: 'f07045cb3a3e85c9ebb018aba4693f1b547da800', ref: el => (this.dialogElement = el), class: renderStatus, onClick: this.onClick }, h("div", { key: '215739e96bf781f3c9d7b1e67250820ccf858b75', class: interiorClasses }, this.title && (h("header", { key: '77ce6f5b51a36f296fd110e3506c44ff94d72c48' }, this.title && h("h2", { key: 'fe6c7e59889383c6af5615093e66c3837dd24bc4', class: "title" }, this.title), !!this.closable && (h("q2-btn", { key: '8da0a4c5499caffd385bbf78f2010f77f8c35785', class: "btn-close", "test-id": "btnClose", onClick: this.onCancel, label: "tecton.element.modal.close", "hide-label": true }, h("q2-icon", { key: '3526408cfbc99d56d74e3167624049a86dded3a4', type: "close" }))))), h("div", { key: 'ce3c96886c1d28d78040401b3782892c5bda7399', class: "content", ref: el => (this.contentElement = el) }, this.icon && (h("div", { key: 'e4bae20593b8877f9c713f5bf63e59574042735b', class: "icon" }, h("q2-icon", { key: '466a83589286d503c6a5a36ba1999a73df951c19', type: this.icon }))), this.imageSrc && (h("div", { key: '56a0e413b40319b7a40e79136575ee8849c339c6', class: "image" }, h("img", { key: '0d32cee3447aa42273a816c4cd8941d5df62b3b2', src: this.imageSrc }))), hasSlotContent(this.hostElement, 'content') && h("slot", { key: '3687527d29977c662dd480e6fb9727f47eb3522a', name: "content" }), this.description && h("p", { key: '34b49f5bb615192deec83726391b66680541eb12', class: "description" }, this.description), this.customMarkup && (h("p", { key: 'a44e20822b497cc95e2ad16430f3e3e27f1c164a', class: "customMarkup", innerHTML: sanitizeHTMLString(this.customMarkup) }))), h("footer", { key: 'ae01296dc46f5502b1cdfa7b1949639df942c124' }, h("q2-action-group", { key: 'b89615558a7129659ce1574cc026c2bc4d728e8b', "full-width": true }, h("slot", { key: 'f12ed356d57b290222a5dab301c83a85fbdc9c34', name: "action" }))))));
139
+ return (h("dialog", { key: '92dc143e4337dbe56582ec8ef8f0568dd71e3e55', ref: el => (this.dialogElement = el), class: renderStatus, onClick: this.onClick }, h("div", { key: '8528e0443f56c88b0e3454cc5b33e5307c93b4b3', class: interiorClasses }, this.title && (h("header", { key: '58082ec96ee55a2054ced1d14c71ca048a9af336' }, this.title && h("h2", { key: '8ac56ee9d3eb84056faaa748a9a2d69ef946eeeb', class: "title" }, this.title), !!this.closable && (h("q2-btn", { key: '664890ce00ec76f4f4339f1b32579cfe95f8ad40', class: "btn-close", "test-id": "btnClose", onClick: this.onCancel, label: "tecton.element.modal.close", "hide-label": true }, h("q2-icon", { key: '3c9349bf6456c8684ac87d3c6918820081e2657b', type: "close" }))))), h("div", { key: '76fa2465d4d60db5e0843274348b85eaf1a49ed6', class: "content", ref: el => (this.contentElement = el) }, this.icon && (h("div", { key: 'd9d7ae8b43dae09abbaf3fcfec61fdf66ab0f619', class: "icon" }, h("q2-icon", { key: '3db0ae939a529933b79018a23b88a7d429658a9a', type: this.icon }))), this.imageSrc && (h("div", { key: 'bf295b4c233610b87b6f75557f4c4d439d757c96', class: "image" }, h("img", { key: 'ffcd4e115096ed4e48349ba28b00a261bdd78f7b', src: this.imageSrc }))), hasSlotContent(this.hostElement, 'content') && h("slot", { key: '09342f081d5307fe109e247a6c2de7bca0fd6b0f', name: "content" }), this.description && h("p", { key: '892e4550e230f47e26e757b6f483c2bee0f424ce', class: "description" }, this.description), this.customMarkup && (h("p", { key: '625a6ee4350fe16c3589ebed630f86be8a420609', class: "customMarkup", innerHTML: sanitizeHTMLString(this.customMarkup) }))), h("footer", { key: '7663cc739e8fe908b9a916e1ddbc0a0364c8023f' }, h("q2-action-group", { key: 'a426f7228f0f4a7ae991fc65d221795279ec2530', "full-width": true }, h("slot", { key: 'f6862c2074f18f31a9775f2de07aaa3e8904ac76', name: "action" }))))));
140
140
  }
141
141
  static get is() { return "q2-modal"; }
142
142
  static get encapsulation() { return "shadow"; }
@@ -65,6 +65,39 @@ button {
65
65
  visibility: hidden;
66
66
  }
67
67
 
68
+ /**
69
+ * @prop --tct-otp-margin?: (<length-percentage>+) Controls the margin of the component host as a shorthand. Overrides --tct-otp-margin-top and --tct-otp-margin-bottom when set.
70
+ * @prop --tct-otp-margin-top: (<length-percentage>) Controls the top margin of the component host.
71
+ * @prop --tct-otp-margin-bottom: (<length-percentage>) Controls the bottom margin of the component host.
72
+ * @prop --tct-otp-vertical-gap: (<length-percentage>) Controls the vertical spacing between the label, fields, helper text, and actions.
73
+ * @prop --tct-otp-field-gap: (<length-percentage>) Controls the horizontal spacing between individual OTP fields.
74
+ * @prop --tct-otp-field-background: (<color>) Controls the background color of each OTP input field.
75
+ * @prop --tct-otp-field-border-color: (<color>) Controls the border color of each OTP input field.
76
+ * @prop --tct-otp-field-border-radius: (<length-percentage>) Controls the corner radius of each OTP input field.
77
+ * @prop --tct-otp-field-border-width: (<length>) Controls the border width of each OTP input field.
78
+ * @prop --tct-otp-field-font-color: (<color>) Controls the text color inside each OTP input field.
79
+ * @prop --tct-otp-field-font-size: (<length-percentage>) Controls the font size of characters inside each OTP input field.
80
+ * @prop --tct-otp-field-font-weight: (<number>) Controls the font weight of characters inside each OTP input field.
81
+ * @prop --tct-otp-field-masked-color: (<color>) Controls the color of the mask dot shown when the field is in masked mode.
82
+ * @prop --tct-otp-field-masked-size: (<length>) Controls the diameter of the mask dot shown when the field is in masked mode.
83
+ * @prop --tct-otp-field-focus-border-color?: (<color>) Controls the border color of the active (focused) OTP field. Defaults to the regular field border color.
84
+ * @prop --tct-otp-field-focus-box-shadow: (*) Controls the box-shadow applied to the active (focused) OTP field.
85
+ * @prop --tct-otp-field-error-border-color: (<color>) Controls the border color of each OTP field when the component is in the error state.
86
+ * @prop --tct-otp-field-error-focus-ring-color: (<color>) Controls the focus ring color of the active field when the component is in the error state.
87
+ * @prop --tct-otp-field-error-focus-box-shadow: (*) Controls the box-shadow of the active field when the component is in the error state.
88
+ * @prop --tct-otp-field-success-border-color: (<color>) Controls the border color of each OTP field when the component is in the success state.
89
+ * @prop --tct-otp-field-success-focus-ring-color: (<color>) Controls the focus ring color of the active field when the component is in the success state.
90
+ * @prop --tct-otp-field-success-focus-box-shadow: (*) Controls the box-shadow of the active field when the component is in the success state.
91
+ * @prop --tct-otp-field-disabled-opacity: (<number>) Controls the opacity of each OTP field when the component is disabled.
92
+ * @prop --tct-otp-separator-color: (<color>) Controls the color of the separator character between field groups.
93
+ * @prop --tct-otp-separator-font-size: (<length-percentage>) Controls the font size of the separator character.
94
+ * @prop --tct-otp-separator-font-weight: (<number>) Controls the font weight of the separator character.
95
+ * @prop --tct-otp-helper-font-color: (<color>) Controls the color of the helper text below the fields.
96
+ * @prop --tct-otp-helper-font-size: (<length-percentage>) Controls the font size of the helper text below the fields.
97
+ * @prop --tct-otp-processing-overlay-background: (<color>) Controls the background of the overlay shown during processing.
98
+ * @prop --tct-otp-processing-spinner-size: (<length>) Controls the size of the spinner shown during processing.
99
+ * @prop --tct-otp-tween: (*) Controls the transition timing applied to field state changes.
100
+ */
68
101
  :host {
69
102
  display: flex;
70
103
  justify-content: center;
@@ -0,0 +1,83 @@
1
+ import { expect } from "@playwright/test";
2
+ import { test } from "@stencil/playwright";
3
+ import { setupPage, THEMES } from "../../../utils/test/vr-helpers";
4
+ const VARIANTS = [
5
+ {
6
+ name: 'default',
7
+ html: `<q2-otp label="Verification Code" submit-label="Verify"></q2-otp>`,
8
+ states: ['resting', 'focus'],
9
+ },
10
+ {
11
+ name: 'filled',
12
+ html: `<q2-otp label="Verification Code" submit-label="Verify" value="123456"></q2-otp>`,
13
+ states: ['resting'],
14
+ },
15
+ {
16
+ name: 'masked',
17
+ html: `<q2-otp label="Masked Code" submit-label="Verify" masked value="123456"></q2-otp>`,
18
+ states: ['resting'],
19
+ },
20
+ {
21
+ name: 'grouped-3-3',
22
+ html: `<q2-otp label="Verification Code" submit-label="Verify" length="[3,3]" value="123456"></q2-otp>`,
23
+ states: ['resting'],
24
+ },
25
+ {
26
+ name: 'length-4',
27
+ html: `<q2-otp label="Security Code" submit-label="Verify" length="4" value="1234"></q2-otp>`,
28
+ states: ['resting'],
29
+ },
30
+ {
31
+ name: 'helper-text',
32
+ html: `<q2-otp label="Verification Code" submit-label="Verify" helper-text="Codes refresh every 30 seconds" show-helper-text></q2-otp>`,
33
+ states: ['resting'],
34
+ },
35
+ {
36
+ name: 'state-error',
37
+ html: `<q2-otp label="Verification Code" submit-label="Verify" state="error" error-message="Invalid verification code." value="123456"></q2-otp>`,
38
+ states: ['resting'],
39
+ },
40
+ {
41
+ name: 'state-success',
42
+ html: `<q2-otp label="Verification Code" submit-label="Verify" state="success" success-message="Verification code accepted." value="123456"></q2-otp>`,
43
+ states: ['resting'],
44
+ },
45
+ {
46
+ name: 'state-verifying',
47
+ html: `<q2-otp label="Verification Code" submit-label="Verify" processing-label="Verifying" state="verifying" value="123456"></q2-otp>`,
48
+ states: ['resting'],
49
+ },
50
+ {
51
+ name: 'state-ready',
52
+ html: `<q2-otp label="Verification Code" submit-label="Verify" state="ready"></q2-otp>`,
53
+ states: ['resting', 'focus'],
54
+ },
55
+ {
56
+ name: 'disabled',
57
+ html: `<q2-otp label="Verification Code" submit-label="Verify" disabled value="123456"></q2-otp>`,
58
+ states: ['resting'],
59
+ },
60
+ ];
61
+ const restingCase = (variant, theme) => {
62
+ test(`q2-otp--${variant.name}--resting — ${theme}`, async ({ page }) => {
63
+ await setupPage(page, variant.html, { theme, setupLoc: true });
64
+ await expect(page).toHaveScreenshot(`q2-otp--${variant.name}--resting--${theme}.png`);
65
+ });
66
+ };
67
+ const focusCase = (variant, theme) => {
68
+ test(`q2-otp--${variant.name}--focus — ${theme}`, async ({ page }) => {
69
+ await setupPage(page, variant.html, { theme, setupLoc: true });
70
+ await page.keyboard.press('Tab');
71
+ await expect(page).toHaveScreenshot(`q2-otp--${variant.name}--focus--${theme}.png`);
72
+ });
73
+ };
74
+ test.describe('q2-otp — variants × themes', () => {
75
+ for (const variant of VARIANTS) {
76
+ for (const theme of THEMES) {
77
+ if (variant.states.includes('resting'))
78
+ restingCase(variant, theme);
79
+ if (variant.states.includes('focus'))
80
+ focusCase(variant, theme);
81
+ }
82
+ }
83
+ });
@@ -76,6 +76,7 @@ button {
76
76
  * @prop --tct-popover-padding?: (<length-percentage>+) Controls the optional inner padding of the popover.
77
77
  * @prop --tct-popover-margin-block?: (<length-percentage>+) Controls the optional block-axis margin of the popover.
78
78
  * @prop --tct-popover-min-width: (<length-percentage>) Controls the minimum width of the popover.
79
+ * @prop --tct-popover-width?: (<length-percentage>) Controls the optional width of the popover.
79
80
  * @prop --tct-popover-top: (<length-percentage>) Controls the top offset of the popover when opening downward.
80
81
  * @prop --tct-popover-z-index: (<integer>) Controls the z-index of the legacy popover element.
81
82
  * @prop --tct-popover-open-animation-duration: (<time>) Controls the duration of the popover open animation.
@@ -121,7 +122,7 @@ button {
121
122
  overflow: auto;
122
123
  background: var(--tct-popover-background, var(--app-white, #ffffff));
123
124
  backdrop-filter: var(--tct-popover-backdrop-filter, none);
124
- color: var(--tct-popover-font-color, var(--t-text, #4d4d4d));
125
+ color: var(--tct-popover-font-color, inherit);
125
126
  min-width: var(--tct-popover-min-width, 135px);
126
127
  width: var(--tct-popover-width, auto);
127
128
  margin-block: var(--tct-popover-margin-block, 0);
@@ -76,6 +76,7 @@ button {
76
76
  * @prop --tct-radio-background-transition: (*) Controls the transition timing applied to the radio fill.
77
77
  * @prop --tct-radio-box-shadow?: (*) Controls the optional box shadow of the radio.
78
78
  * @prop --tct-radio-box-shadow-focus-visible: (*) Controls the box shadow of the radio when focused via keyboard.
79
+ * @prop --tct-radio-focus-box-shadow?: (*) Controls the optional box shadow of the radio on focus.
79
80
  * @prop --tct-radio-select-fill-default?: (<color>) Controls the optional inner-circle fill in the default state.
80
81
  * @prop --tct-radio-select-fill-checked: (<color>) Controls the inner-circle fill when the radio is checked.
81
82
  * @prop --tct-radio-checked-fill: (<color>) Controls the inner-circle fill when the radio is checked (legacy alias).
@@ -107,6 +108,7 @@ button {
107
108
  * @prop --tct-radio-label-gap: (<length-percentage>) Controls the gap between the radio circle and label content.
108
109
  * @prop --tct-radio-label-margin-right: (<length-percentage>) Controls the right margin of the radio label.
109
110
  * @prop --tct-radio-hidden-columns: (*) Controls the grid-template-columns when the label is visually hidden.
111
+ * @prop --tct-radio-label-hidden-columns?: (*) Controls the optional grid-template-columns when the label is visually hidden.
110
112
  * @prop --tct-radio-tile-border-radius: (<length-percentage>) Controls the corner radius of the radio tile.
111
113
  * @prop --tct-radio-tile-label-font-size: (<length-percentage>) Controls the font size of the radio tile label.
112
114
  * @prop --tct-radio-tile-checked-stroke-color: (<color>) Controls the border color of the radio tile when checked.
@@ -124,11 +124,41 @@ button {
124
124
  display: block;
125
125
  }
126
126
 
127
+ /**
128
+ * @prop --tct-search-margin?: (<length-percentage>+) Controls the margin of the component host as a shorthand. Overrides --tct-search-margin-top and --tct-search-margin-bottom when set.
129
+ * @prop --tct-search-margin-top: (<length-percentage>) Controls the top margin of the component host.
130
+ * @prop --tct-search-margin-bottom: (<length-percentage>) Controls the bottom margin of the component host.
131
+ * @prop --tct-search-input-min-height?: (*) Controls the minimum height of the search input.
132
+ * @prop --tct-search-input-max-height?: (*) Controls the maximum height of the search input.
133
+ * @prop --tct-search-input-horizontal-gap: (<length-percentage>) Controls the horizontal gap between elements inside the search input.
134
+ * @prop --tct-search-icon-min-width?: (*) Controls the minimum width of the icon container in the search input.
135
+ * @prop --tct-search-loading-popover-height?: (<length-percentage>) Controls the minimum height of the popover while the component is in the loading state.
136
+ * @prop --tct-search-loading-spinner-size: (<length-percentage>) Controls the size of the loading spinner.
137
+ * @prop --tct-search-multi-select-header-padding: (<length-percentage>+) Controls the padding of the multi-select filter header.
138
+ * @prop --tct-search-multi-select-header-background: (<color>) Controls the background color of the multi-select filter header.
139
+ * @prop --tct-search-multi-select-option-padding: (<length-percentage>+) Controls the padding of each filter option label.
140
+ * @prop --tct-search-multi-select-option-font-size: (<length-percentage>) Controls the font size of each filter option label.
141
+ * @prop --tct-search-multi-select-option-border-radius: (<length-percentage>) Controls the corner radius of each filter option label.
142
+ * @prop --tct-search-multi-select-option-background: (<color>) Controls the default background color of each filter option label.
143
+ * @prop --tct-search-multi-select-option-font-color: (<color>) Controls the default text color of each filter option label.
144
+ * @prop --tct-search-multi-select-option-hover-background: (<color>) Controls the background color of a filter option label on hover.
145
+ * @prop --tct-search-multi-select-option-hover-font-color: (<color>) Controls the text color of a filter option label on hover.
146
+ * @prop --tct-search-multi-select-option-active-background: (<color>) Controls the background color of the selected filter option label.
147
+ * @prop --tct-search-multi-select-option-active-font-color: (<color>) Controls the text color of the selected filter option label.
148
+ * @prop --tct-search-multi-select-option-disabled-opacity: (<number>) Controls the opacity of a disabled filter option label.
149
+ * @prop --tct-search-no-results-padding: (<length-percentage>+) Controls the padding of the no-results message.
150
+ * @prop --tct-search-no-results-font-color: (<color>) Controls the text color of the no-results message.
151
+ */
127
152
  :host {
128
153
  display: block;
129
154
  margin: var(--tct-search-margin, var(--tct-search-margin-top, var(--app-scale-5x, 25px)) 0 var(--tct-search-margin-bottom, var(--app-scale-5x, 25px)));
130
155
  }
131
156
 
157
+ ::slotted([slot=_selected-display]) {
158
+ width: 100%;
159
+ min-height: var(--comp-selected-display-height, 44px);
160
+ }
161
+
132
162
  .q2-search-container {
133
163
  display: block;
134
164
  position: relative;