q2-tecton-elements 1.59.1 → 1.60.1

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 (396) hide show
  1. package/dist/bundle-report.json +613 -514
  2. package/dist/cjs/click-elsewhere.cjs.entry.js +1 -1
  3. package/dist/cjs/{index-JnAD7tEB.js → index-BYXz4owL.js} +5 -2
  4. package/dist/cjs/index-BYXz4owL.js.map +1 -0
  5. package/dist/cjs/{index-B6mUspT0.js → index-BuXzB2ML.js} +3 -3
  6. package/dist/cjs/{index-B6mUspT0.js.map → index-BuXzB2ML.js.map} +1 -1
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  9. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  10. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.cjs.js.map +1 -1
  12. package/dist/cjs/q2-badge_7.cjs.entry.js +281 -79
  13. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-calendar.cjs.entry.js +13 -5
  15. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  16. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  17. package/dist/cjs/q2-card.cjs.entry.js +3 -3
  18. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  19. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  20. package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
  21. package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  24. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  25. package/dist/cjs/q2-checkbox-group.cjs.entry.js +3 -3
  26. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  27. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  28. package/dist/cjs/q2-checkbox.cjs.entry.js +5 -5
  29. package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
  30. package/dist/cjs/q2-checkbox.entry.cjs.js.map +1 -1
  31. package/dist/cjs/q2-context.cjs.entry.js +3 -3
  32. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  33. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  34. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-data-table.cjs.entry.js +5 -5
  36. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  37. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  38. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  40. package/dist/cjs/q2-dropdown.cjs.entry.js +7 -5
  41. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  42. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  43. package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-file-picker.cjs.entry.js +3 -3
  46. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  47. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  48. package/dist/cjs/q2-form.cjs.entry.js +5 -5
  49. package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
  50. package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
  51. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  52. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  53. package/dist/cjs/q2-grid.cjs.entry.js +1 -1
  54. package/dist/cjs/q2-item.cjs.entry.js +3 -3
  55. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  56. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  57. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  58. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  59. package/dist/cjs/q2-loading-element.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  61. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  62. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  63. package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
  64. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  65. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  66. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  67. package/dist/cjs/q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  68. package/dist/cjs/q2-option-list_2.cjs.entry.js +3 -3
  69. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-option.cjs.entry.js +2 -2
  71. package/dist/cjs/q2-pagination.cjs.entry.js +2 -2
  72. package/dist/cjs/q2-pill.cjs.entry.js +13 -11
  73. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  74. package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
  75. package/dist/cjs/q2-radio-group.cjs.entry.js +3 -3
  76. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  77. package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
  78. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  79. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  80. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  81. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  82. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  83. package/dist/cjs/q2-select.cjs.entry.js +2 -2
  84. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  85. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +3 -3
  86. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  87. package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
  88. package/dist/cjs/q2-stepper.cjs.entry.js +3 -3
  89. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  90. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  91. package/dist/cjs/q2-tag.cjs.entry.js +3 -3
  92. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  93. package/dist/cjs/q2-tag.entry.cjs.js.map +1 -1
  94. package/dist/cjs/q2-tecton-elements.cjs.js +2 -2
  95. package/dist/cjs/q2-textarea.cjs.entry.js +3 -3
  96. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  97. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  98. package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
  99. package/dist/cjs/{shapes-CUFxQAvI.js → shapes-AGx9jMFH.js} +11 -5
  100. package/dist/cjs/shapes-AGx9jMFH.js.map +1 -0
  101. package/dist/cjs/tecton-tab-pane.cjs.entry.js +1 -1
  102. package/dist/collection/components/q2-btn/q2-btn.css +71 -33
  103. package/dist/collection/components/q2-calendar/q2-calendar.js +11 -3
  104. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  105. package/dist/collection/components/q2-card/q2-card.css +8 -6
  106. package/dist/collection/components/q2-checkbox/q2-checkbox.css +25 -10
  107. package/dist/collection/components/q2-checkbox/q2-checkbox.js +2 -2
  108. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  109. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +8 -2
  110. package/dist/collection/components/q2-context/q2-context.css +7 -71
  111. package/dist/collection/components/q2-data-table/q2-data-table.css +3 -2
  112. package/dist/collection/components/q2-data-table/q2-data-table.js +2 -2
  113. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  114. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -3
  115. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  116. package/dist/collection/components/q2-file-picker/q2-file-picker.css +1 -1
  117. package/dist/collection/components/q2-form/q2-form.js +2 -2
  118. package/dist/collection/components/q2-form/q2-form.js.map +1 -1
  119. package/dist/collection/components/q2-icon/q2-icon.css +5 -0
  120. package/dist/collection/components/q2-icon/q2-icon.js +5 -20
  121. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  122. package/dist/collection/components/q2-input/q2-input.css +13 -4
  123. package/dist/collection/components/q2-input/q2-input.js +17 -7
  124. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  125. package/dist/collection/components/q2-item/q2-item.css +5 -2
  126. package/dist/collection/components/q2-loading/q2-loading.js +249 -29
  127. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  128. package/dist/collection/components/q2-loading/skeleton/shapes.js +8 -2
  129. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  130. package/dist/collection/components/q2-optgroup/q2-optgroup.js +3 -3
  131. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  132. package/dist/collection/components/q2-pill/q2-pill.css +23 -7
  133. package/dist/collection/components/q2-pill/q2-pill.js +11 -7
  134. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  135. package/dist/collection/components/q2-popover/q2-popover.css +1 -0
  136. package/dist/collection/components/q2-radio/q2-radio.css +5 -3
  137. package/dist/collection/components/q2-radio-group/q2-radio-group.css +5 -0
  138. package/dist/collection/components/q2-stepper/q2-stepper.css +16 -4
  139. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +2 -0
  140. package/dist/collection/components/q2-tab-container/q2-tab-container.css +4 -2
  141. package/dist/collection/components/q2-tab-container/q2-tab-container.js +27 -19
  142. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  143. package/dist/collection/components/q2-tag/q2-tag.css +7 -0
  144. package/dist/collection/components/q2-textarea/q2-textarea.css +13 -3
  145. package/dist/collection/utils/sprites.js +16 -0
  146. package/dist/collection/utils/sprites.js.map +1 -0
  147. package/dist/components/q2-btn2.js +1 -1
  148. package/dist/components/q2-btn2.js.map +1 -1
  149. package/dist/components/q2-calendar.js +11 -3
  150. package/dist/components/q2-calendar.js.map +1 -1
  151. package/dist/components/q2-card.js +1 -1
  152. package/dist/components/q2-card.js.map +1 -1
  153. package/dist/components/q2-checkbox-group.js +1 -1
  154. package/dist/components/q2-checkbox-group.js.map +1 -1
  155. package/dist/components/q2-checkbox2.js +3 -3
  156. package/dist/components/q2-checkbox2.js.map +1 -1
  157. package/dist/components/q2-context.js +1 -1
  158. package/dist/components/q2-context.js.map +1 -1
  159. package/dist/components/q2-data-table.js +3 -3
  160. package/dist/components/q2-data-table.js.map +1 -1
  161. package/dist/components/q2-dropdown.js +5 -3
  162. package/dist/components/q2-dropdown.js.map +1 -1
  163. package/dist/components/q2-file-picker.js +1 -1
  164. package/dist/components/q2-file-picker.js.map +1 -1
  165. package/dist/components/q2-form.js +4 -4
  166. package/dist/components/q2-form.js.map +1 -1
  167. package/dist/components/q2-icon2.js +6 -21
  168. package/dist/components/q2-icon2.js.map +1 -1
  169. package/dist/components/q2-input2.js +18 -8
  170. package/dist/components/q2-input2.js.map +1 -1
  171. package/dist/components/q2-item2.js +1 -1
  172. package/dist/components/q2-item2.js.map +1 -1
  173. package/dist/components/q2-loading2.js +217 -29
  174. package/dist/components/q2-loading2.js.map +1 -1
  175. package/dist/components/q2-optgroup2.js +1 -1
  176. package/dist/components/q2-optgroup2.js.map +1 -1
  177. package/dist/components/q2-pill.js +13 -10
  178. package/dist/components/q2-pill.js.map +1 -1
  179. package/dist/components/q2-popover2.js +1 -1
  180. package/dist/components/q2-popover2.js.map +1 -1
  181. package/dist/components/q2-radio-group.js +1 -1
  182. package/dist/components/q2-radio-group.js.map +1 -1
  183. package/dist/components/q2-radio.js +1 -1
  184. package/dist/components/q2-radio.js.map +1 -1
  185. package/dist/components/q2-stepper-vertical.js +1 -1
  186. package/dist/components/q2-stepper-vertical.js.map +1 -1
  187. package/dist/components/q2-stepper.js +1 -1
  188. package/dist/components/q2-stepper.js.map +1 -1
  189. package/dist/components/q2-tab-container.js +28 -20
  190. package/dist/components/q2-tab-container.js.map +1 -1
  191. package/dist/components/q2-tag.js +1 -1
  192. package/dist/components/q2-tag.js.map +1 -1
  193. package/dist/components/q2-textarea.js +1 -1
  194. package/dist/components/q2-textarea.js.map +1 -1
  195. package/dist/components/shapes.js +8 -2
  196. package/dist/components/shapes.js.map +1 -1
  197. package/dist/components/sprites.js +20 -0
  198. package/dist/components/sprites.js.map +1 -0
  199. package/dist/esm/click-elsewhere.entry.js +1 -1
  200. package/dist/esm/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
  201. package/dist/esm/index-CGkHOjh1.js.map +1 -0
  202. package/dist/esm/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
  203. package/dist/{q2-tecton-elements/index-CkXFIBxL.js.map → esm/index-xCuy-dFb.js.map} +1 -1
  204. package/dist/esm/loader.js +3 -3
  205. package/dist/esm/q2-action-group_2.entry.js +2 -2
  206. package/dist/esm/q2-action-sheet.entry.js +2 -2
  207. package/dist/esm/q2-avatar.entry.js +1 -1
  208. package/dist/esm/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.js.map +1 -1
  209. package/dist/esm/q2-badge_7.entry.js +281 -79
  210. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  211. package/dist/esm/q2-calendar.entry.js +13 -5
  212. package/dist/esm/q2-calendar.entry.js.map +1 -1
  213. package/dist/esm/q2-card.entry.js +3 -3
  214. package/dist/esm/q2-card.entry.js.map +1 -1
  215. package/dist/esm/q2-carousel-pane.entry.js +2 -2
  216. package/dist/esm/q2-carousel.entry.js +2 -2
  217. package/dist/esm/q2-chart-area.entry.js +2 -2
  218. package/dist/esm/q2-chart-bar.entry.js +2 -2
  219. package/dist/esm/q2-chart-donut.entry.js +2 -2
  220. package/dist/esm/q2-checkbox-group.entry.js +3 -3
  221. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  222. package/dist/esm/q2-checkbox.entry.js +5 -5
  223. package/dist/esm/q2-checkbox.entry.js.map +1 -1
  224. package/dist/esm/q2-context.entry.js +3 -3
  225. package/dist/esm/q2-context.entry.js.map +1 -1
  226. package/dist/esm/q2-currency.entry.js +1 -1
  227. package/dist/esm/q2-data-table.entry.js +5 -5
  228. package/dist/esm/q2-data-table.entry.js.map +1 -1
  229. package/dist/esm/q2-detail.entry.js +2 -2
  230. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  231. package/dist/esm/q2-dropdown.entry.js +7 -5
  232. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  233. package/dist/esm/q2-editable-field.entry.js +2 -2
  234. package/dist/esm/q2-example.entry.js +1 -1
  235. package/dist/esm/q2-file-picker.entry.js +3 -3
  236. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  237. package/dist/esm/q2-form.entry.js +5 -5
  238. package/dist/esm/q2-form.entry.js.map +1 -1
  239. package/dist/esm/q2-formatted-text.entry.js +1 -1
  240. package/dist/esm/q2-grid-area.entry.js +1 -1
  241. package/dist/esm/q2-grid.entry.js +1 -1
  242. package/dist/esm/q2-item.entry.js +3 -3
  243. package/dist/esm/q2-item.entry.js.map +1 -1
  244. package/dist/esm/q2-legend.entry.js +1 -1
  245. package/dist/esm/q2-link_2.entry.js +2 -2
  246. package/dist/esm/q2-loading-element.entry.js +2 -2
  247. package/dist/esm/q2-loc.entry.js +2 -2
  248. package/dist/esm/q2-message.entry.js +2 -2
  249. package/dist/esm/q2-modal.entry.js +2 -2
  250. package/dist/esm/q2-month-picker.entry.js +2 -2
  251. package/dist/esm/q2-optgroup.entry.js +3 -3
  252. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  253. package/dist/esm/q2-option-list.q2-popover.entry.js.map +1 -1
  254. package/dist/esm/q2-option-list_2.entry.js +3 -3
  255. package/dist/esm/q2-option-list_2.entry.js.map +1 -1
  256. package/dist/esm/q2-option.entry.js +2 -2
  257. package/dist/esm/q2-pagination.entry.js +2 -2
  258. package/dist/esm/q2-pill.entry.js +13 -11
  259. package/dist/esm/q2-pill.entry.js.map +1 -1
  260. package/dist/esm/q2-radio-group.entry.js +3 -3
  261. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  262. package/dist/esm/q2-radio.entry.js +3 -3
  263. package/dist/esm/q2-radio.entry.js.map +1 -1
  264. package/dist/esm/q2-relative-time.entry.js +2 -2
  265. package/dist/esm/q2-section.entry.js +2 -2
  266. package/dist/esm/q2-select.entry.js +2 -2
  267. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  268. package/dist/esm/q2-stepper-vertical.entry.js +3 -3
  269. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  270. package/dist/esm/q2-stepper.entry.js +3 -3
  271. package/dist/esm/q2-stepper.entry.js.map +1 -1
  272. package/dist/esm/q2-tag.entry.js +3 -3
  273. package/dist/esm/q2-tag.entry.js.map +1 -1
  274. package/dist/esm/q2-tecton-elements.js +3 -3
  275. package/dist/esm/q2-textarea.entry.js +3 -3
  276. package/dist/esm/q2-textarea.entry.js.map +1 -1
  277. package/dist/esm/q2-tooltip.entry.js +2 -2
  278. package/dist/esm/{shapes-BrIjALih.js → shapes-B6iI6sMH.js} +11 -5
  279. package/dist/esm/shapes-B6iI6sMH.js.map +1 -0
  280. package/dist/esm/tecton-tab-pane.entry.js +1 -1
  281. package/dist/jest.setup.js +33 -0
  282. package/dist/jest.setup.js.map +1 -1
  283. package/dist/q2-tecton-elements/click-elsewhere.entry.js +1 -1
  284. package/dist/q2-tecton-elements/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
  285. package/dist/q2-tecton-elements/index-CGkHOjh1.js.map +1 -0
  286. package/dist/q2-tecton-elements/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
  287. package/dist/{esm/index-CkXFIBxL.js.map → q2-tecton-elements/index-xCuy-dFb.js.map} +1 -1
  288. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  289. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +2 -2
  290. package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
  291. package/dist/q2-tecton-elements/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.esm.js.map +1 -1
  292. package/dist/q2-tecton-elements/q2-badge_7.entry.js +426 -229
  293. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  294. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  295. package/dist/q2-tecton-elements/q2-calendar.entry.js +105 -98
  296. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  297. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  298. package/dist/q2-tecton-elements/q2-card.entry.js +45 -45
  299. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  300. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +2 -2
  301. package/dist/q2-tecton-elements/q2-carousel.entry.js +2 -2
  302. package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
  303. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
  304. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +2 -2
  305. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  306. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +6 -6
  307. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  308. package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +1 -1
  309. package/dist/q2-tecton-elements/q2-checkbox.entry.js +30 -25
  310. package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +1 -1
  311. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  312. package/dist/q2-tecton-elements/q2-context.entry.js +3 -3
  313. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  314. package/dist/q2-tecton-elements/q2-currency.entry.js +1 -1
  315. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  316. package/dist/q2-tecton-elements/q2-data-table.entry.js +29 -29
  317. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  318. package/dist/q2-tecton-elements/q2-detail.entry.js +2 -2
  319. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
  320. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  321. package/dist/q2-tecton-elements/q2-dropdown.entry.js +12 -11
  322. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  323. package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -2
  324. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  325. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  326. package/dist/q2-tecton-elements/q2-file-picker.entry.js +3 -3
  327. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  328. package/dist/q2-tecton-elements/q2-form.entry.esm.js.map +1 -1
  329. package/dist/q2-tecton-elements/q2-form.entry.js +7 -7
  330. package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
  331. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +1 -1
  332. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  333. package/dist/q2-tecton-elements/q2-grid.entry.js +1 -1
  334. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  335. package/dist/q2-tecton-elements/q2-item.entry.js +9 -9
  336. package/dist/q2-tecton-elements/q2-legend.entry.js +1 -1
  337. package/dist/q2-tecton-elements/q2-link_2.entry.js +2 -2
  338. package/dist/q2-tecton-elements/q2-loading-element.entry.js +2 -2
  339. package/dist/q2-tecton-elements/q2-loc.entry.js +2 -2
  340. package/dist/q2-tecton-elements/q2-message.entry.js +2 -2
  341. package/dist/q2-tecton-elements/q2-modal.entry.js +2 -2
  342. package/dist/q2-tecton-elements/q2-month-picker.entry.js +2 -2
  343. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  344. package/dist/q2-tecton-elements/q2-optgroup.entry.js +3 -3
  345. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  346. package/dist/q2-tecton-elements/q2-option-list.q2-popover.entry.esm.js.map +1 -1
  347. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +17 -17
  348. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
  349. package/dist/q2-tecton-elements/q2-option.entry.js +2 -2
  350. package/dist/q2-tecton-elements/q2-pagination.entry.js +2 -2
  351. package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
  352. package/dist/q2-tecton-elements/q2-pill.entry.js +40 -38
  353. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  354. package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
  355. package/dist/q2-tecton-elements/q2-radio-group.entry.js +44 -44
  356. package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
  357. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  358. package/dist/q2-tecton-elements/q2-radio.entry.js +20 -20
  359. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  360. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  361. package/dist/q2-tecton-elements/q2-section.entry.js +2 -2
  362. package/dist/q2-tecton-elements/q2-select.entry.js +2 -2
  363. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +2 -2
  364. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
  365. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +3 -3
  366. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
  367. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  368. package/dist/q2-tecton-elements/q2-stepper.entry.js +33 -33
  369. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  370. package/dist/q2-tecton-elements/q2-tag.entry.esm.js.map +1 -1
  371. package/dist/q2-tecton-elements/q2-tag.entry.js +38 -38
  372. package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
  373. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +3 -3
  374. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  375. package/dist/q2-tecton-elements/q2-textarea.entry.js +18 -18
  376. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  377. package/dist/q2-tecton-elements/q2-tooltip.entry.js +2 -2
  378. package/dist/q2-tecton-elements/{shapes-BrIjALih.js → shapes-B6iI6sMH.js} +41 -40
  379. package/dist/q2-tecton-elements/shapes-B6iI6sMH.js.map +1 -0
  380. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +4 -4
  381. package/dist/types/components/q2-form/q2-form.d.ts +1 -1
  382. package/dist/types/components/q2-icon/q2-icon.d.ts +0 -5
  383. package/dist/types/components/q2-input/q2-input.d.ts +2 -0
  384. package/dist/types/components/q2-loading/q2-loading.d.ts +32 -7
  385. package/dist/types/components/q2-optgroup/q2-optgroup.d.ts +2 -2
  386. package/dist/types/components/q2-pill/q2-pill.d.ts +1 -1
  387. package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +4 -2
  388. package/dist/types/components.d.ts +16 -6
  389. package/dist/types/utils/sprites.d.ts +5 -0
  390. package/package.json +4 -3
  391. package/dist/cjs/index-JnAD7tEB.js.map +0 -1
  392. package/dist/cjs/shapes-CUFxQAvI.js.map +0 -1
  393. package/dist/esm/index-COzomxjJ.js.map +0 -1
  394. package/dist/esm/shapes-BrIjALih.js.map +0 -1
  395. package/dist/q2-tecton-elements/index-COzomxjJ.js.map +0 -1
  396. package/dist/q2-tecton-elements/shapes-BrIjALih.js.map +0 -1
@@ -1,46 +1,152 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { handleAriaLabel, loc } from "../../utils/index";
3
3
  import skeletonShapes from "./skeleton/shapes";
4
+ import { getOrCreateSpriteContainer } from "../../utils/sprites";
4
5
  export class Q2Loading {
5
6
  constructor() {
6
- this.halfCircleSpinner = () => {
7
- return (h("div", { class: "q2-loading-animation half-circle-spinner", "aria-label": this.localizedLabel, role: "status", "aria-live": "polite" }, h("div", { class: "circle circle-1" }), h("div", { class: "circle circle-2" })));
7
+ this.dontUpdateScreenReaderLabel = false;
8
+ this.liveRegionChangeIndicatorToggle = false;
9
+ this.customLoaderClass = 'tct-loading-custom-loader';
10
+ this.hasCustomLoader = false;
11
+ /** Hides the loading element from screen readers. */
12
+ this.hideFromScreenReaders = false;
13
+ // #endregion
14
+ // #region Render Methods
15
+ this.renderHalfCircleSpinner = () => {
16
+ return (h("div", { class: "q2-loading-animation half-circle-spinner", "aria-hidden": this.hideFromScreenReaders ? 'true' : undefined, "aria-live": !this.hideFromScreenReaders ? 'polite' : undefined, role: !this.hideFromScreenReaders ? 'status' : undefined }, h("div", { class: "circle circle-1" }), h("div", { class: "circle circle-2" }), !this.hideFromScreenReaders && (h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
8
17
  };
9
- this.skeletonLoader = () => {
10
- return (h("div", { class: "q2-loading-skeleton", "aria-label": this.localizedLabel, role: "status", "aria-live": "polite" }, this.shape === 'custom' ? h("slot", null) : this.skeletonShape, h("div", { class: "q2-loading-skeleton-shimmer" })));
18
+ this.renderCustomLoaderContainer = () => {
19
+ return (h("div", { id: "custom-loader-container", class: "q2-loading-animation", "aria-hidden": this.hideFromScreenReaders ? 'true' : undefined, "aria-live": !this.hideFromScreenReaders ? 'polite' : undefined, role: !this.hideFromScreenReaders ? 'status' : undefined }, !this.hideFromScreenReaders && (h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
11
20
  };
12
- this.spinner = () => {
13
- return this.halfCircleSpinner();
21
+ this.renderSkeletonLoader = () => {
22
+ return (h("div", { class: "q2-loading-skeleton", "aria-hidden": this.hideFromScreenReaders ? 'true' : undefined, "aria-live": !this.hideFromScreenReaders ? 'polite' : undefined, role: !this.hideFromScreenReaders ? 'status' : undefined }, this.shape === 'custom' ? h("slot", null) : this.skeletonShape, h("div", { class: "q2-loading-skeleton-shimmer" }), !this.hideFromScreenReaders && (h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
23
+ };
24
+ this.renderSpinner = () => {
25
+ return this.renderHalfCircleSpinner();
14
26
  };
15
27
  }
16
28
  // #endregion
17
29
  // #region Component Lifecycle Events
30
+ disconnectedCallback() {
31
+ this.cleanupLiveRegionDelay();
32
+ }
18
33
  componentWillLoad() {
19
34
  handleAriaLabel(this);
35
+ this.handleType();
36
+ }
37
+ componentDidLoad() {
38
+ this.setupLiveRegionDelay();
39
+ }
40
+ componentDidUpdate() {
41
+ this.updateScreenReaderLabel();
42
+ }
43
+ componentDidRender() {
44
+ var _a;
45
+ if (!this.loaderClone)
46
+ return;
47
+ if (!this.hasCustomLoader)
48
+ return;
49
+ const customLoaderContainer = this.hostElement.shadowRoot.querySelector('#custom-loader-container');
50
+ (_a = customLoaderContainer.querySelector(`svg.${this.customLoaderClass}`)) === null || _a === void 0 ? void 0 : _a.remove();
51
+ customLoaderContainer.appendChild(this.loaderClone);
52
+ }
53
+ // #endregion
54
+ // #region Listeners
55
+ onUpdateLoaders() {
56
+ const { customLoaderURL } = this;
57
+ this.hasCustomLoader = !!customLoaderURL;
58
+ this.fetchLoader();
20
59
  }
21
60
  // #endregion
22
61
  // #region Watchers
23
- ariaLabelObserver() {
24
- handleAriaLabel(this);
62
+ handleType() {
63
+ this.fetchLoader();
64
+ }
65
+ async fetchLoader() {
66
+ const { isSkeletonType, customLoaderURL } = this;
67
+ this.hasCustomLoader = false;
68
+ if (isSkeletonType) {
69
+ return;
70
+ }
71
+ if (!customLoaderURL)
72
+ return;
73
+ this.hasCustomLoader = true;
74
+ let { customLoaderElement } = this;
75
+ const loaderExists = this.checkForLoader();
76
+ if (loaderExists)
77
+ return;
78
+ try {
79
+ const response = await fetch(customLoaderURL);
80
+ // Check for HTTP errors (including CORS issues that return error status)
81
+ if (!response.ok) {
82
+ throw new Error(`HTTP ${response.status}: Failed to fetch SVG. ` +
83
+ `This may be due to incorrect URL, server error, or CORS restrictions.`);
84
+ }
85
+ const svgText = await response.text();
86
+ const parser = new DOMParser();
87
+ const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');
88
+ const svg = svgDoc.querySelector('svg');
89
+ if (!svg)
90
+ throw new Error('No SVG found in the loaded content');
91
+ svg.dataset.loaded = '';
92
+ svg.dataset.url = customLoaderURL;
93
+ svg.classList.add(this.customLoaderClass);
94
+ customLoaderElement = this.customLoaderElement;
95
+ if (!customLoaderElement)
96
+ return;
97
+ if (typeof customLoaderElement.replaceWith === 'function') {
98
+ customLoaderElement.replaceWith(svg);
99
+ }
100
+ else {
101
+ customLoaderElement.parentNode.replaceChild(svg, customLoaderElement);
102
+ }
103
+ svg.dispatchEvent(new CustomEvent(this.loaderEventName, { bubbles: true }));
104
+ }
105
+ catch (error) {
106
+ // Provide more specific error messaging for common issues
107
+ if (error instanceof TypeError && error.message === 'Failed to fetch') {
108
+ console.error(`Failed to load custom loader from ${customLoaderURL}. ` +
109
+ `This is likely due to a CORS (Cross-Origin Resource Sharing) error. ` +
110
+ `Ensure the server hosting the SVG includes proper CORS headers ` +
111
+ `(Access-Control-Allow-Origin) or host the SVG on the same domain.`, error);
112
+ }
113
+ else {
114
+ console.error(`Failed to load custom loader SVG from ${customLoaderURL}:`, error);
115
+ }
116
+ }
25
117
  }
26
118
  // #endregion
27
119
  // #region Local Methods
120
+ get customLoaderURL() {
121
+ const hostComputedStyles = window.getComputedStyle(this.hostElement);
122
+ const loadingVariableURL = hostComputedStyles.getPropertyValue(`--tct-loading-custom-${this.type || 'spinner'}-url`);
123
+ if (!loadingVariableURL)
124
+ return;
125
+ return loadingVariableURL.trim().replace(/^url\(['"]?|['"]?\)$/g, '');
126
+ }
127
+ get isSkeletonType() {
128
+ return this.type === 'skeleton';
129
+ }
130
+ get loaderEventName() {
131
+ const { type = 'spinner', isSkeletonType } = this;
132
+ if (isSkeletonType)
133
+ return;
134
+ return `tct-loaded-${type}`;
135
+ }
136
+ get customLoaderElement() {
137
+ const { customLoaderURL, customLoaderClass } = this;
138
+ if (!customLoaderURL)
139
+ return;
140
+ return document.querySelector(`.${customLoaderClass}[data-url="${customLoaderURL}"]`);
141
+ }
28
142
  get countsArray() {
29
143
  if (this.type !== 'skeleton' || !this.counts) {
30
144
  return undefined;
31
145
  }
32
146
  return this.counts.split('x').map(Number);
33
147
  }
34
- get loader() {
35
- const loaderMap = {
36
- default: this.spinner,
37
- spinner: this.spinner,
38
- skeleton: this.skeletonLoader,
39
- };
40
- return loaderMap[this.type] || loaderMap.default;
41
- }
42
148
  get localizedLabel() {
43
- return loc(this.label || 'tecton.element.loading.ariaLabel');
149
+ return loc(this.label || this.ariaLabel || 'tecton.element.loading.ariaLabel');
44
150
  }
45
151
  get modifiersSet() {
46
152
  if (this.type !== 'skeleton' || !this.modifiers) {
@@ -52,17 +158,96 @@ export class Q2Loading {
52
158
  var _a, _b;
53
159
  return (_b = (_a = skeletonShapes[this.shape]) === null || _a === void 0 ? void 0 : _a.call(skeletonShapes, this.countsArray, this.modifiersSet)) !== null && _b !== void 0 ? _b : '';
54
160
  }
55
- get spinnerShape() {
56
- const spinnerMap = {
57
- default: this.halfCircleSpinner,
58
- 'half-circle': this.halfCircleSpinner,
161
+ checkForLoader() {
162
+ const { loaderEventName, customLoaderClass } = this;
163
+ const spriteContainer = getOrCreateSpriteContainer();
164
+ let { customLoaderElement } = this;
165
+ // If the loading element exists and has the `data-loaded` attribute, we know we have everything we need
166
+ if (customLoaderElement === null || customLoaderElement === void 0 ? void 0 : customLoaderElement.hasAttribute('data-loaded')) {
167
+ this.cloneLoaderNode();
168
+ return true;
169
+ }
170
+ // If the loading element exists but does not have the `data-loaded` attribute, we know it's being loaded
171
+ // We'll listen for the event that will be dispatched when the element is loaded
172
+ spriteContainer.addEventListener(loaderEventName, () => {
173
+ this.cloneLoaderNode();
174
+ }, { once: true });
175
+ // If the loading element exists, we know it's being loaded and will be handled by the event listener
176
+ if (customLoaderElement)
177
+ return true;
178
+ // If loading element does not exist, create a placeholder
179
+ // This will let other icons know the element is being loaded and prevent multiple fetches
180
+ customLoaderElement = document.createElement('div');
181
+ customLoaderElement.classList.add(customLoaderClass);
182
+ customLoaderElement.dataset.url = this.customLoaderURL;
183
+ spriteContainer.appendChild(customLoaderElement);
184
+ return false;
185
+ }
186
+ cloneLoaderNode() {
187
+ const { customLoaderElement } = this;
188
+ this.loaderClone = customLoaderElement ? customLoaderElement.cloneNode(true) : undefined;
189
+ }
190
+ cleanupLiveRegionDelay() {
191
+ if (this.hideFromScreenReaders)
192
+ return;
193
+ clearTimeout(this.ariaLiveTimer);
194
+ this.observer.disconnect();
195
+ this.observer = null;
196
+ }
197
+ setupLiveRegionDelay() {
198
+ if (this.hideFromScreenReaders)
199
+ return;
200
+ // The screen reader element starts out empty and is then populated by the
201
+ // label text after a delay to ensure that it is announced by screen
202
+ // readers.
203
+ const options = {
204
+ root: null,
205
+ rootMargin: '0px',
206
+ threshold: [1],
59
207
  };
60
- return spinnerMap[this.type] || spinnerMap.default;
208
+ this.observer = new IntersectionObserver(entries => {
209
+ entries.forEach(entry => {
210
+ if (entry.isIntersecting) {
211
+ clearTimeout(this.ariaLiveTimer);
212
+ this.ariaLiveTimer = setTimeout(() => {
213
+ if (this.screenReaderElement) {
214
+ this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;
215
+ }
216
+ this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;
217
+ this.dontUpdateScreenReaderLabel = false;
218
+ }, 2000);
219
+ }
220
+ else {
221
+ clearTimeout(this.ariaLiveTimer);
222
+ if (this.screenReaderElement) {
223
+ this.screenReaderElement.textContent = '';
224
+ }
225
+ this.dontUpdateScreenReaderLabel = true;
226
+ }
227
+ });
228
+ }, options);
229
+ this.observer.observe(this.hostElement);
230
+ }
231
+ updateScreenReaderLabel() {
232
+ if (this.dontUpdateScreenReaderLabel)
233
+ return;
234
+ if (!this.screenReaderElement)
235
+ return;
236
+ this.screenReaderElement.textContent = this.localizedLabel;
237
+ }
238
+ get renderLoader() {
239
+ const loaderMap = {
240
+ default: this.renderSpinner,
241
+ spinner: this.renderSpinner,
242
+ skeleton: this.renderSkeletonLoader,
243
+ custom: this.renderCustomLoaderContainer,
244
+ };
245
+ const { type, hasCustomLoader } = this;
246
+ const loaderMapKey = hasCustomLoader ? 'custom' : type;
247
+ return loaderMap[loaderMapKey] || loaderMap.default;
61
248
  }
62
- // #endregion
63
- // #region Render Methods
64
249
  render() {
65
- return this.loader();
250
+ return this.renderLoader();
66
251
  }
67
252
  static get is() { return "q2-loading"; }
68
253
  static get encapsulation() { return "shadow"; }
@@ -179,6 +364,26 @@ export class Q2Loading {
179
364
  "setter": false,
180
365
  "reflect": true
181
366
  },
367
+ "hideFromScreenReaders": {
368
+ "type": "boolean",
369
+ "attribute": "hide-from-screen-readers",
370
+ "mutable": false,
371
+ "complexType": {
372
+ "original": "boolean",
373
+ "resolved": "boolean",
374
+ "references": {}
375
+ },
376
+ "required": false,
377
+ "optional": false,
378
+ "docs": {
379
+ "tags": [],
380
+ "text": "Hides the loading element from screen readers."
381
+ },
382
+ "getter": false,
383
+ "setter": false,
384
+ "reflect": true,
385
+ "defaultValue": "false"
386
+ },
182
387
  "shape": {
183
388
  "type": "string",
184
389
  "attribute": "shape",
@@ -206,8 +411,8 @@ export class Q2Loading {
206
411
  "attribute": "type",
207
412
  "mutable": false,
208
413
  "complexType": {
209
- "original": "'spinner' | 'skeleton'",
210
- "resolved": "\"skeleton\" | \"spinner\"",
414
+ "original": "'brand' | 'spinner' | 'skeleton'",
415
+ "resolved": "\"brand\" | \"skeleton\" | \"spinner\"",
211
416
  "references": {}
212
417
  },
213
418
  "required": false,
@@ -222,11 +427,26 @@ export class Q2Loading {
222
427
  }
223
428
  };
224
429
  }
430
+ static get states() {
431
+ return {
432
+ "loaderClone": {},
433
+ "hasCustomLoader": {}
434
+ };
435
+ }
225
436
  static get elementRef() { return "hostElement"; }
226
437
  static get watchers() {
227
438
  return [{
228
- "propName": "ariaLabel",
229
- "methodName": "ariaLabelObserver"
439
+ "propName": "type",
440
+ "methodName": "handleType"
441
+ }];
442
+ }
443
+ static get listeners() {
444
+ return [{
445
+ "name": "tctUpdateLoaders",
446
+ "method": "onUpdateLoaders",
447
+ "target": "document",
448
+ "capture": false,
449
+ "passive": false
230
450
  }];
231
451
  }
232
452
  }
@@ -1 +1 @@
1
- {"version":3,"file":"q2-loading.js","sourceRoot":"","sources":["../../../../src/components/q2-loading/q2-loading.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAsB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAG/C,MAAM,OAAO,SAAS;IADtB;QAgII,sBAAiB,GAAG,GAAG,EAAE;YACrB,OAAO,CACH,WACI,KAAK,EAAC,0CAA0C,gBACpC,IAAI,CAAC,cAAc,EAC/B,IAAI,EAAC,QAAQ,eACH,QAAQ;gBAElB,WAAK,KAAK,EAAC,iBAAiB,GAAO;gBACnC,WAAK,KAAK,EAAC,iBAAiB,GAAO,CACjC,CACT,CAAC;QACN,CAAC,CAAC;QAEF,mBAAc,GAAG,GAAG,EAAE;YAClB,OAAO,CACH,WACI,KAAK,EAAC,qBAAqB,gBACf,IAAI,CAAC,cAAc,EAC/B,IAAI,EAAC,QAAQ,eACH,QAAQ;gBAEjB,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa;gBACxD,WAAK,KAAK,EAAC,6BAA6B,GAAO,CAC7C,CACT,CAAC;QACN,CAAC,CAAC;QAEF,YAAO,GAAG,GAAG,EAAE;YACX,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpC,CAAC,CAAC;KAUL;IArGG,aAAa;IACb,qCAAqC;IAErC,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,WAAW;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,MAAM;QACN,MAAM,SAAS,GAAG;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,cAAc;SAChC,CAAC;QAEF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC;IACrD,CAAC;IAED,IAAI,cAAc;QACd,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,kCAAkC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,YAAY;QACZ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,aAAa;;QACb,OAAO,MAAA,MAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,+DAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,mCAAI,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,YAAY;QACZ,MAAM,UAAU,GAAG;YACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;YAC/B,aAAa,EAAE,IAAI,CAAC,iBAAiB;SACxC,CAAC;QAEF,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC;IACvD,CAAC;IAkCD,aAAa;IACb,yBAAyB;IAEzB,MAAM;QACF,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, Prop, h, ComponentInterface, Element, Watch } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Local Methods\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get loader() {\n const loaderMap = {\n default: this.spinner,\n spinner: this.spinner,\n skeleton: this.skeletonLoader,\n };\n\n return loaderMap[this.type] || loaderMap.default;\n }\n\n get localizedLabel() {\n return loc(this.label || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n get spinnerShape() {\n const spinnerMap = {\n default: this.halfCircleSpinner,\n 'half-circle': this.halfCircleSpinner,\n };\n\n return spinnerMap[this.type] || spinnerMap.default;\n }\n\n halfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n </div>\n );\n };\n\n skeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n </div>\n );\n };\n\n spinner = () => {\n return this.halfCircleSpinner();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return this.loader();\n }\n\n // #endregion\n}\n"]}
1
+ {"version":3,"file":"q2-loading.js","sourceRoot":"","sources":["../../../../src/components/q2-loading/q2-loading.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, ComponentInterface, Listen, Element, Watch, State } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\nimport { getOrCreateSpriteContainer } from '@/utils/sprites';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Own Properties\n\n ariaLiveTimer;\n dontUpdateScreenReaderLabel = false;\n observer: IntersectionObserver;\n screenReaderElement: HTMLElement;\n liveRegionChangeIndicatorToggle = false;\n customLoaderClass = 'tct-loading-custom-loader';\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n loaderClone: SVGElement;\n\n @State()\n hasCustomLoader: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /** Hides the loading element from screen readers. */\n @Prop({ reflect: true })\n hideFromScreenReaders: boolean = false;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'brand' | 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback(): void {\n this.cleanupLiveRegionDelay();\n }\n\n componentWillLoad() {\n handleAriaLabel(this);\n this.handleType();\n }\n\n componentDidLoad(): void {\n this.setupLiveRegionDelay();\n }\n\n componentDidUpdate(): void {\n this.updateScreenReaderLabel();\n }\n\n componentDidRender(): void {\n if (!this.loaderClone) return;\n if (!this.hasCustomLoader) return;\n const customLoaderContainer = this.hostElement.shadowRoot.querySelector('#custom-loader-container');\n customLoaderContainer.querySelector(`svg.${this.customLoaderClass}`)?.remove();\n customLoaderContainer.appendChild(this.loaderClone);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('tctUpdateLoaders', { target: 'document' })\n onUpdateLoaders() {\n const { customLoaderURL } = this;\n this.hasCustomLoader = !!customLoaderURL;\n this.fetchLoader();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('type')\n handleType() {\n this.fetchLoader();\n }\n\n async fetchLoader() {\n const { isSkeletonType, customLoaderURL } = this;\n this.hasCustomLoader = false;\n if (isSkeletonType) {\n return;\n }\n\n if (!customLoaderURL) return;\n this.hasCustomLoader = true;\n\n let { customLoaderElement } = this;\n const loaderExists = this.checkForLoader();\n\n if (loaderExists) return;\n\n try {\n const response = await fetch(customLoaderURL);\n\n // Check for HTTP errors (including CORS issues that return error status)\n if (!response.ok) {\n throw new Error(\n `HTTP ${response.status}: Failed to fetch SVG. ` +\n `This may be due to incorrect URL, server error, or CORS restrictions.`\n );\n }\n\n const svgText = await response.text();\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');\n const svg = svgDoc.querySelector('svg');\n\n if (!svg) throw new Error('No SVG found in the loaded content');\n\n svg.dataset.loaded = '';\n svg.dataset.url = customLoaderURL;\n svg.classList.add(this.customLoaderClass);\n\n customLoaderElement = this.customLoaderElement;\n if (!customLoaderElement) return;\n if (typeof customLoaderElement.replaceWith === 'function') {\n customLoaderElement.replaceWith(svg);\n } else {\n customLoaderElement.parentNode.replaceChild(svg, customLoaderElement);\n }\n\n svg.dispatchEvent(new CustomEvent(this.loaderEventName, { bubbles: true }));\n } catch (error) {\n // Provide more specific error messaging for common issues\n if (error instanceof TypeError && error.message === 'Failed to fetch') {\n console.error(\n `Failed to load custom loader from ${customLoaderURL}. ` +\n `This is likely due to a CORS (Cross-Origin Resource Sharing) error. ` +\n `Ensure the server hosting the SVG includes proper CORS headers ` +\n `(Access-Control-Allow-Origin) or host the SVG on the same domain.`,\n error\n );\n } else {\n console.error(`Failed to load custom loader SVG from ${customLoaderURL}:`, error);\n }\n }\n }\n // #endregion\n // #region Local Methods\n\n get customLoaderURL() {\n const hostComputedStyles = window.getComputedStyle(this.hostElement);\n const loadingVariableURL = hostComputedStyles.getPropertyValue(\n `--tct-loading-custom-${this.type || 'spinner'}-url`\n );\n if (!loadingVariableURL) return;\n\n return loadingVariableURL.trim().replace(/^url\\(['\"]?|['\"]?\\)$/g, '');\n }\n\n get isSkeletonType() {\n return this.type === 'skeleton';\n }\n\n get loaderEventName() {\n const { type = 'spinner', isSkeletonType } = this;\n if (isSkeletonType) return;\n return `tct-loaded-${type}`;\n }\n\n get customLoaderElement() {\n const { customLoaderURL, customLoaderClass } = this;\n if (!customLoaderURL) return;\n return document.querySelector<HTMLElement>(`.${customLoaderClass}[data-url=\"${customLoaderURL}\"]`);\n }\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get localizedLabel() {\n return loc(this.label || this.ariaLabel || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n checkForLoader() {\n const { loaderEventName, customLoaderClass } = this;\n const spriteContainer = getOrCreateSpriteContainer();\n let { customLoaderElement } = this;\n\n // If the loading element exists and has the `data-loaded` attribute, we know we have everything we need\n if (customLoaderElement?.hasAttribute('data-loaded')) {\n this.cloneLoaderNode();\n return true;\n }\n\n // If the loading element exists but does not have the `data-loaded` attribute, we know it's being loaded\n // We'll listen for the event that will be dispatched when the element is loaded\n spriteContainer.addEventListener(\n loaderEventName,\n () => {\n this.cloneLoaderNode();\n },\n { once: true }\n );\n\n // If the loading element exists, we know it's being loaded and will be handled by the event listener\n if (customLoaderElement) return true;\n\n // If loading element does not exist, create a placeholder\n // This will let other icons know the element is being loaded and prevent multiple fetches\n customLoaderElement = document.createElement('div');\n customLoaderElement.classList.add(customLoaderClass);\n customLoaderElement.dataset.url = this.customLoaderURL;\n spriteContainer.appendChild(customLoaderElement);\n return false;\n }\n\n cloneLoaderNode() {\n const { customLoaderElement } = this;\n this.loaderClone = customLoaderElement ? (customLoaderElement.cloneNode(true) as SVGElement) : undefined;\n }\n\n cleanupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n clearTimeout(this.ariaLiveTimer);\n this.observer.disconnect();\n this.observer = null;\n }\n\n setupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n // The screen reader element starts out empty and is then populated by the\n // label text after a delay to ensure that it is announced by screen\n // readers.\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [1],\n };\n this.observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n clearTimeout(this.ariaLiveTimer);\n this.ariaLiveTimer = setTimeout(() => {\n if (this.screenReaderElement) {\n this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;\n }\n this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;\n this.dontUpdateScreenReaderLabel = false;\n }, 2000);\n } else {\n clearTimeout(this.ariaLiveTimer);\n if (this.screenReaderElement) {\n this.screenReaderElement.textContent = '';\n }\n this.dontUpdateScreenReaderLabel = true;\n }\n });\n }, options);\n this.observer.observe(this.hostElement);\n }\n\n updateScreenReaderLabel() {\n if (this.dontUpdateScreenReaderLabel) return;\n if (!this.screenReaderElement) return;\n this.screenReaderElement.textContent = this.localizedLabel;\n }\n\n // #endregion\n // #region Render Methods\n\n renderHalfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n get renderLoader() {\n const loaderMap = {\n default: this.renderSpinner,\n spinner: this.renderSpinner,\n skeleton: this.renderSkeletonLoader,\n custom: this.renderCustomLoaderContainer,\n };\n const { type, hasCustomLoader } = this;\n const loaderMapKey = hasCustomLoader ? 'custom' : type;\n\n return loaderMap[loaderMapKey] || loaderMap.default;\n }\n\n renderCustomLoaderContainer = () => {\n return (\n <div\n id=\"custom-loader-container\"\n class=\"q2-loading-animation\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n renderSkeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n renderSpinner = () => {\n return this.renderHalfCircleSpinner();\n };\n\n render() {\n return this.renderLoader();\n }\n\n // #endregion\n}\n"]}
@@ -18,7 +18,10 @@ export const molecules = {
18
18
  return (h("div", { class: "skeleton-shape text" }, hasHeader && atoms.rectangle({ width: '60%', additionalClasses }), !!rows &&
19
19
  Array(rows)
20
20
  .fill(undefined)
21
- .map(() => atoms.rectangle({ height: '1rem' }))));
21
+ .map(() => atoms.rectangle({
22
+ height: '1rem',
23
+ borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',
24
+ }))));
22
25
  },
23
26
  };
24
27
  export const shapes = {
@@ -26,7 +29,10 @@ export const shapes = {
26
29
  return atoms.circle({ width: '100%' });
27
30
  },
28
31
  rectangle: () => {
29
- return atoms.rectangle({ height: '100%', borderRadius: 'var(--tct-border-radius-1, 4px)' });
32
+ return atoms.rectangle({
33
+ height: '100%',
34
+ borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',
35
+ });
30
36
  },
31
37
  table: (counts, modifiers) => {
32
38
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../../../src/components/q2-loading/skeleton/shapes.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h } from '@stencil/core';\nimport { JSX } from './../../../components';\n\ninterface AtomOptions {\n width?: string;\n height?: string;\n borderRadius?: string;\n additionalClasses?: string;\n}\n\nexport const atoms = {\n circle: ({ width, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape circle ${additionalClasses || ''}`}\n style={{ width, height: width }}\n ></div>\n ),\n rectangle: ({ width, height, borderRadius, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape rectangle ${additionalClasses || ''}`}\n style={{ width, height, borderRadius }}\n ></div>\n ),\n};\n\nexport const molecules = {\n field: (): JSX.IntrinsicElements => (\n <div class=\"skeleton-shape field\">\n <div class=\"skeleton-field-label\">{atoms.rectangle({ height: '1rem', width: '50%' })}</div>\n {atoms.rectangle({\n height: 'var(--tct-input-height, 42px)',\n borderRadius: '3px',\n })}\n </div>\n ),\n text: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const rows = counts?.[0] ?? 1;\n const hasHeader = modifiers?.has('header');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n const smallHeaderClass = modifiers?.has('smallheader') ? ' smaller' : '';\n const additionalClasses = hasHeader ? `header ${alignment}${smallHeaderClass}` : '';\n return (\n <div class=\"skeleton-shape text\">\n {hasHeader && atoms.rectangle({ width: '60%', additionalClasses })}\n {!!rows &&\n Array(rows)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n );\n },\n};\n\nexport const shapes = {\n circle: (): JSX.IntrinsicElements => {\n return atoms.circle({ width: '100%' });\n },\n rectangle: (): JSX.IntrinsicElements => {\n return atoms.rectangle({ height: '100%', borderRadius: 'var(--tct-border-radius-1, 4px)' });\n },\n table: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const columnCount = counts?.[0] ?? 5;\n const rowCount = counts?.[1] ?? 5;\n const headless = modifiers?.has('headless');\n const bordered = modifiers?.has('bordered');\n return (\n <div class=\"skeleton-shape table\">\n {!headless && (\n <div class=\"skeleton-table-head\">\n <div class=\"skeleton-table-row skeleton-table-header flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n <div class=\"skeleton-table-row-border\">{atoms.rectangle({ height: '3px' })}</div>\n </div>\n )}\n <div class=\"skeleton-table-body\">\n {!!rowCount &&\n Array(rowCount)\n .fill(undefined)\n .map(() => (\n <div class=\"skeleton-table-row-wrapper\">\n <div class=\"skeleton-table-row flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1.5rem' }))}\n </div>\n {bordered && (\n <div class=\"skeleton-table-row-border\">\n {atoms.rectangle({\n height: '1px',\n additionalClasses: 'no-margin',\n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n },\n field: molecules.field,\n form: (counts?: number[]): JSX.IntrinsicElements => {\n const columns = (counts?.[1] && counts?.[0]) ?? 1;\n const rows = counts?.[1] ?? counts?.[0] ?? 1;\n const totalItems = columns * rows;\n return (\n <div class={`skeleton-shape form flex columns-${columns}`}>\n {!!totalItems && Array(totalItems).fill(undefined).map(molecules.field)}\n </div>\n );\n },\n text: molecules.text,\n 'detailed-item': (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const isSquare = modifiers?.has('square');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n return (\n <div class={`skeleton-shape detailed-item flex ${alignment}`}>\n <div class={`detailed-item-image flex-${alignment}`}>\n {isSquare\n ? atoms.rectangle({ width: '1.5em', height: '1.5em', borderRadius: '3px' })\n : atoms.circle({ width: '1.5em' })}\n </div>\n <div class={`detailed-item-text flex flex-v-center flex-${alignment}`}>\n <div>{molecules.text(counts, modifiers)}</div>\n </div>\n </div>\n );\n },\n 'label-value': (counts?: number[]): JSX.IntrinsicElements => {\n const cells = 2 * (counts?.[0] ?? 1);\n return (\n <div class=\"skeleton-shape label-value flex\">\n {!!cells &&\n Array(cells)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n );\n },\n};\n\nexport default shapes;\n"]}
1
+ {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../../../src/components/q2-loading/skeleton/shapes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAUlC,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAe,EAAyB,EAAE,CAAC,CAC1E,WACI,KAAK,EAAE,yBAAyB,iBAAiB,IAAI,EAAE,EAAE,EACzD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAC5B,CACV;IACD,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAe,EAAyB,EAAE,CAAC,CACnG,WACI,KAAK,EAAE,4BAA4B,iBAAiB,IAAI,EAAE,EAAE,EAC5D,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,GACnC,CACV;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,KAAK,EAAE,GAA0B,EAAE,CAAC,CAChC,WAAK,KAAK,EAAC,sBAAsB;QAC7B,WAAK,KAAK,EAAC,sBAAsB,IAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAO;QAC1F,KAAK,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,+BAA+B;YACvC,YAAY,EAAE,KAAK;SACtB,CAAC,CACA,CACT;IACD,IAAI,EAAE,CAAC,MAAiB,EAAE,SAAuB,EAAyB,EAAE;;QACxE,MAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,QAAQ,CAAC,KAAI,QAAQ,CAAC,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,OAAO,CAAC,KAAI,OAAO,CAAC,IAAI,MAAM,CAAC;QAC3G,MAAM,gBAAgB,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,SAAS,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,OAAO,CACH,WAAK,KAAK,EAAC,qBAAqB;YAC3B,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;YACjE,CAAC,CAAC,IAAI;gBACH,KAAK,CAAC,IAAI,CAAC;qBACN,IAAI,CAAC,SAAS,CAAC;qBACf,GAAG,CAAC,GAAG,EAAE,CACN,KAAK,CAAC,SAAS,CAAC;oBACZ,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,6DAA6D;iBAC9E,CAAC,CACL,CACP,CACT,CAAC;IACN,CAAC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,MAAM,EAAE,GAA0B,EAAE;QAChC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,EAAE,GAA0B,EAAE;QACnC,OAAO,KAAK,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,6DAA6D;SAC9E,CAAC,CAAC;IACP,CAAC;IACD,KAAK,EAAE,CAAC,MAAiB,EAAE,SAAuB,EAAyB,EAAE;;QACzE,MAAM,WAAW,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,CACH,WAAK,KAAK,EAAC,sBAAsB;YAC5B,CAAC,QAAQ,IAAI,CACV,WAAK,KAAK,EAAC,qBAAqB;gBAC5B,WAAK,KAAK,EAAC,+CAA+C,IACrD,CAAC,CAAC,WAAW;oBACV,KAAK,CAAC,WAAW,CAAC;yBACb,IAAI,CAAC,SAAS,CAAC;yBACf,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CACrD;gBACN,WAAK,KAAK,EAAC,2BAA2B,IAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAO,CAC/E,CACT;YACD,WAAK,KAAK,EAAC,qBAAqB,IAC3B,CAAC,CAAC,QAAQ;gBACP,KAAK,CAAC,QAAQ,CAAC;qBACV,IAAI,CAAC,SAAS,CAAC;qBACf,GAAG,CAAC,GAAG,EAAE,CAAC,CACP,WAAK,KAAK,EAAC,4BAA4B;oBACnC,WAAK,KAAK,EAAC,yBAAyB,IAC/B,CAAC,CAAC,WAAW;wBACV,KAAK,CAAC,WAAW,CAAC;6BACb,IAAI,CAAC,SAAS,CAAC;6BACf,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CACvD;oBACL,QAAQ,IAAI,CACT,WAAK,KAAK,EAAC,2BAA2B,IACjC,KAAK,CAAC,SAAS,CAAC;wBACb,MAAM,EAAE,KAAK;wBACb,iBAAiB,EAAE,WAAW;qBACjC,CAAC,CACA,CACT,CACC,CACT,CAAC,CACR,CACJ,CACT,CAAC;IACN,CAAC;IACD,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,IAAI,EAAE,CAAC,MAAiB,EAAyB,EAAE;;QAC/C,MAAM,OAAO,GAAG,MAAA,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,MAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,CAAA,CAAC,mCAAI,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;QAClC,OAAO,CACH,WAAK,KAAK,EAAE,oCAAoC,OAAO,EAAE,IACpD,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CACrE,CACT,CAAC;IACN,CAAC;IACD,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,eAAe,EAAE,CAAC,MAAiB,EAAE,SAAuB,EAAyB,EAAE;QACnF,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,QAAQ,CAAC,KAAI,QAAQ,CAAC,IAAI,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,GAAG,CAAC,OAAO,CAAC,KAAI,OAAO,CAAC,IAAI,MAAM,CAAC;QAC3G,OAAO,CACH,WAAK,KAAK,EAAE,qCAAqC,SAAS,EAAE;YACxD,WAAK,KAAK,EAAE,4BAA4B,SAAS,EAAE,IAC9C,QAAQ;gBACL,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBAC3E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CACpC;YACN,WAAK,KAAK,EAAE,8CAA8C,SAAS,EAAE;gBACjE,eAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAO,CAC5C,CACJ,CACT,CAAC;IACN,CAAC;IACD,aAAa,EAAE,CAAC,MAAiB,EAAyB,EAAE;;QACxD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;QACrC,OAAO,CACH,WAAK,KAAK,EAAC,iCAAiC,IACvC,CAAC,CAAC,KAAK;YACJ,KAAK,CAAC,KAAK,CAAC;iBACP,IAAI,CAAC,SAAS,CAAC;iBACf,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CACrD,CACT,CAAC;IACN,CAAC;CACJ,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { h } from '@stencil/core';\nimport { JSX } from './../../../components';\n\ninterface AtomOptions {\n width?: string;\n height?: string;\n borderRadius?: string;\n additionalClasses?: string;\n}\n\nexport const atoms = {\n circle: ({ width, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape circle ${additionalClasses || ''}`}\n style={{ width, height: width }}\n ></div>\n ),\n rectangle: ({ width, height, borderRadius, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape rectangle ${additionalClasses || ''}`}\n style={{ width, height, borderRadius }}\n ></div>\n ),\n};\n\nexport const molecules = {\n field: (): JSX.IntrinsicElements => (\n <div class=\"skeleton-shape field\">\n <div class=\"skeleton-field-label\">{atoms.rectangle({ height: '1rem', width: '50%' })}</div>\n {atoms.rectangle({\n height: 'var(--tct-input-height, 42px)',\n borderRadius: '3px',\n })}\n </div>\n ),\n text: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const rows = counts?.[0] ?? 1;\n const hasHeader = modifiers?.has('header');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n const smallHeaderClass = modifiers?.has('smallheader') ? ' smaller' : '';\n const additionalClasses = hasHeader ? `header ${alignment}${smallHeaderClass}` : '';\n return (\n <div class=\"skeleton-shape text\">\n {hasHeader && atoms.rectangle({ width: '60%', additionalClasses })}\n {!!rows &&\n Array(rows)\n .fill(undefined)\n .map(() =>\n atoms.rectangle({\n height: '1rem',\n borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',\n })\n )}\n </div>\n );\n },\n};\n\nexport const shapes = {\n circle: (): JSX.IntrinsicElements => {\n return atoms.circle({ width: '100%' });\n },\n rectangle: (): JSX.IntrinsicElements => {\n return atoms.rectangle({\n height: '100%',\n borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',\n });\n },\n table: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const columnCount = counts?.[0] ?? 5;\n const rowCount = counts?.[1] ?? 5;\n const headless = modifiers?.has('headless');\n const bordered = modifiers?.has('bordered');\n return (\n <div class=\"skeleton-shape table\">\n {!headless && (\n <div class=\"skeleton-table-head\">\n <div class=\"skeleton-table-row skeleton-table-header flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n <div class=\"skeleton-table-row-border\">{atoms.rectangle({ height: '3px' })}</div>\n </div>\n )}\n <div class=\"skeleton-table-body\">\n {!!rowCount &&\n Array(rowCount)\n .fill(undefined)\n .map(() => (\n <div class=\"skeleton-table-row-wrapper\">\n <div class=\"skeleton-table-row flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1.5rem' }))}\n </div>\n {bordered && (\n <div class=\"skeleton-table-row-border\">\n {atoms.rectangle({\n height: '1px',\n additionalClasses: 'no-margin',\n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n },\n field: molecules.field,\n form: (counts?: number[]): JSX.IntrinsicElements => {\n const columns = (counts?.[1] && counts?.[0]) ?? 1;\n const rows = counts?.[1] ?? counts?.[0] ?? 1;\n const totalItems = columns * rows;\n return (\n <div class={`skeleton-shape form flex columns-${columns}`}>\n {!!totalItems && Array(totalItems).fill(undefined).map(molecules.field)}\n </div>\n );\n },\n text: molecules.text,\n 'detailed-item': (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const isSquare = modifiers?.has('square');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n return (\n <div class={`skeleton-shape detailed-item flex ${alignment}`}>\n <div class={`detailed-item-image flex-${alignment}`}>\n {isSquare\n ? atoms.rectangle({ width: '1.5em', height: '1.5em', borderRadius: '3px' })\n : atoms.circle({ width: '1.5em' })}\n </div>\n <div class={`detailed-item-text flex flex-v-center flex-${alignment}`}>\n <div>{molecules.text(counts, modifiers)}</div>\n </div>\n </div>\n );\n },\n 'label-value': (counts?: number[]): JSX.IntrinsicElements => {\n const cells = 2 * (counts?.[0] ?? 1);\n return (\n <div class=\"skeleton-shape label-value flex\">\n {!!cells &&\n Array(cells)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n );\n },\n};\n\nexport default shapes;\n"]}
@@ -9,7 +9,7 @@ export class Q2Optgroup {
9
9
  this.hidden = false;
10
10
  // #endregion
11
11
  // #region Public Property API
12
- /** Serves as the group header text. */
12
+ /** Determines whether all nested options are disabled. */
13
13
  this.disabled = false;
14
14
  this.setHidden = () => {
15
15
  this.hidden = this.options.every(opt => opt.hidden || opt._multiSelectHidden);
@@ -77,7 +77,7 @@ export class Q2Optgroup {
77
77
  "optional": false,
78
78
  "docs": {
79
79
  "tags": [],
80
- "text": "Serves as the group header text."
80
+ "text": "Determines whether all nested options are disabled."
81
81
  },
82
82
  "getter": false,
83
83
  "setter": false,
@@ -97,7 +97,7 @@ export class Q2Optgroup {
97
97
  "optional": false,
98
98
  "docs": {
99
99
  "tags": [],
100
- "text": "Determines whether all nested options are disabled."
100
+ "text": "Serves as the group header text."
101
101
  },
102
102
  "getter": false,
103
103
  "setter": false,
@@ -1 +1 @@
1
- {"version":3,"file":"q2-optgroup.js","sourceRoot":"","sources":["../../../../src/components/q2-optgroup/q2-optgroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAsB,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAG5C,MAAM,OAAO,UAAU;IADvB;QAEI,yBAAyB;QAEzB,SAAI,GAAW,UAAU,EAAE,CAAC;QAS5B,aAAa;QACb,2BAA2B;QAG3B,WAAM,GAAY,KAAK,CAAC;QAExB,aAAa;QACb,8BAA8B;QAE9B,uCAAuC;QAEvC,aAAQ,GAAY,KAAK,CAAC;QA6C1B,cAAS,GAAG,GAAG,EAAE;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClF,CAAC,CAAC;KA2BL;IApEG,aAAa;IACb,qCAAqC;IAErC,oBAAoB;;QAChB,MAAA,IAAI,CAAC,gBAAgB,0CAAE,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,iBAAiB;QACb,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QAEjC,gBAAgB;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,eAAe,CAAC,QAAiB;QAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,QAAQ;QACR,OAAO,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAMD,aAAa;IACb,yBAAyB;IAEzB,MAAM;QACF,OAAO,CACH,4DACI,KAAK,EAAC,uBAAuB,EAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,qBACF,IAAI,CAAC,QAAQ,EAC9B,IAAI,EAAC,OAAO;YAEZ,4DACI,KAAK,EAAC,oBAAoB,EAC1B,EAAE,EAAE,IAAI,CAAC,QAAQ,IAEhB,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CACpC;YACN,4DAAK,KAAK,EAAC,qBAAqB;gBAC5B,8DAAQ,CACN,CACJ,CACT,CAAC;IACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, h, ComponentInterface, Prop, Element, Watch, State } from '@stencil/core';\nimport { createGuid, loc } from 'src/utils';\n\n@Component({ tag: 'q2-optgroup', shadow: true, styleUrl: 'q2-optgroup.scss' })\nexport class Q2Optgroup implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hidden: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Serves as the group header text. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Determines whether all nested options are disabled. */\n @Prop({ reflect: true })\n label: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(this.setHidden);\n observer.observe(this.hostElement, { childList: true, attributes: true, subtree: true });\n this.mutationObserver = observer;\n\n // set initially\n this.setHidden();\n this.disabledWatcher(this.disabled);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledWatcher(disabled: boolean) {\n this.options.forEach(opt => {\n opt.disabledGroup = !!disabled;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get headerId() {\n return `q2-optgroup-header-${this.guid}`;\n }\n\n get options() {\n return Array.from(this.hostElement.querySelectorAll('q2-option'));\n }\n\n setHidden = () => {\n this.hidden = this.options.every(opt => opt.hidden || opt._multiSelectHidden);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n class=\"q2-optgroup-container\"\n hidden={this.hidden}\n aria-labelledby={this.headerId}\n role=\"group\"\n >\n <div\n class=\"q2-optgroup-header\"\n id={this.headerId}\n >\n {(this.label && loc(this.label)) || ''}\n </div>\n <div class=\"q2-optgroup-options\">\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"]}
1
+ {"version":3,"file":"q2-optgroup.js","sourceRoot":"","sources":["../../../../src/components/q2-optgroup/q2-optgroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAsB,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAG5C,MAAM,OAAO,UAAU;IADvB;QAEI,yBAAyB;QAEzB,SAAI,GAAW,UAAU,EAAE,CAAC;QAS5B,aAAa;QACb,2BAA2B;QAG3B,WAAM,GAAY,KAAK,CAAC;QAExB,aAAa;QACb,8BAA8B;QAE9B,0DAA0D;QAE1D,aAAQ,GAAY,KAAK,CAAC;QA6C1B,cAAS,GAAG,GAAG,EAAE;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClF,CAAC,CAAC;KA2BL;IApEG,aAAa;IACb,qCAAqC;IAErC,oBAAoB;;QAChB,MAAA,IAAI,CAAC,gBAAgB,0CAAE,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,iBAAiB;QACb,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;QAEjC,gBAAgB;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,eAAe,CAAC,QAAiB;QAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACvB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,QAAQ;QACR,OAAO,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAMD,aAAa;IACb,yBAAyB;IAEzB,MAAM;QACF,OAAO,CACH,4DACI,KAAK,EAAC,uBAAuB,EAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,qBACF,IAAI,CAAC,QAAQ,EAC9B,IAAI,EAAC,OAAO;YAEZ,4DACI,KAAK,EAAC,oBAAoB,EAC1B,EAAE,EAAE,IAAI,CAAC,QAAQ,IAEhB,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CACpC;YACN,4DAAK,KAAK,EAAC,qBAAqB;gBAC5B,8DAAQ,CACN,CACJ,CACT,CAAC;IACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, h, ComponentInterface, Prop, Element, Watch, State } from '@stencil/core';\nimport { createGuid, loc } from 'src/utils';\n\n@Component({ tag: 'q2-optgroup', shadow: true, styleUrl: 'q2-optgroup.scss' })\nexport class Q2Optgroup implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n mutationObserver: MutationObserver;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hidden: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Determines whether all nested options are disabled. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Serves as the group header text. */\n @Prop({ reflect: true })\n label: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(this.setHidden);\n observer.observe(this.hostElement, { childList: true, attributes: true, subtree: true });\n this.mutationObserver = observer;\n\n // set initially\n this.setHidden();\n this.disabledWatcher(this.disabled);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledWatcher(disabled: boolean) {\n this.options.forEach(opt => {\n opt.disabledGroup = !!disabled;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get headerId() {\n return `q2-optgroup-header-${this.guid}`;\n }\n\n get options() {\n return Array.from(this.hostElement.querySelectorAll('q2-option'));\n }\n\n setHidden = () => {\n this.hidden = this.options.every(opt => opt.hidden || opt._multiSelectHidden);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n class=\"q2-optgroup-container\"\n hidden={this.hidden}\n aria-labelledby={this.headerId}\n role=\"group\"\n >\n <div\n class=\"q2-optgroup-header\"\n id={this.headerId}\n >\n {(this.label && loc(this.label)) || ''}\n </div>\n <div class=\"q2-optgroup-options\">\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"]}