q2-tecton-elements 1.60.0 → 1.60.2

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 (223) hide show
  1. package/dist/bundle-report.json +911 -870
  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 +171 -27
  13. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
  15. package/dist/cjs/q2-card.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
  18. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  19. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  20. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  21. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  22. package/dist/cjs/q2-checkbox.cjs.entry.js +3 -3
  23. package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-checkbox.entry.cjs.js.map +1 -1
  25. package/dist/cjs/q2-context.cjs.entry.js +2 -2
  26. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  29. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  30. package/dist/cjs/q2-dropdown.cjs.entry.js +2 -2
  31. package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
  32. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-form.cjs.entry.js +1 -1
  35. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  36. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-grid.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-loading-element.cjs.entry.js +2 -2
  42. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  43. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-modal.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
  46. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  47. package/dist/cjs/q2-option-list_2.cjs.entry.js +2 -2
  48. package/dist/cjs/q2-option.cjs.entry.js +2 -2
  49. package/dist/cjs/q2-pagination.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  53. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  54. package/dist/cjs/q2-section.cjs.entry.js +2 -2
  55. package/dist/cjs/q2-select.cjs.entry.js +2 -2
  56. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  58. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  59. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-tecton-elements.cjs.js +2 -2
  61. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  62. package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
  63. package/dist/cjs/{shapes-CmBHp0YP.js → shapes-AGx9jMFH.js} +3 -3
  64. package/dist/cjs/{shapes-CmBHp0YP.js.map → shapes-AGx9jMFH.js.map} +1 -1
  65. package/dist/cjs/tecton-tab-pane.cjs.entry.js +1 -1
  66. package/dist/collection/components/q2-checkbox/q2-checkbox.css +1 -0
  67. package/dist/collection/components/q2-data-table/q2-data-table.js +7 -7
  68. package/dist/collection/components/q2-file-picker/q2-file-picker.js +3 -3
  69. package/dist/collection/components/q2-grid/q2-grid.js +30 -30
  70. package/dist/collection/components/q2-grid-area/q2-grid-area.js +42 -42
  71. package/dist/collection/components/q2-icon/q2-icon.js +5 -20
  72. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  73. package/dist/collection/components/q2-input/q2-input.js +1 -1
  74. package/dist/collection/components/q2-loading/q2-loading.css +8 -0
  75. package/dist/collection/components/q2-loading/q2-loading.js +168 -5
  76. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  77. package/dist/collection/components/q2-option-list/q2-option-list.js +4 -4
  78. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +2 -2
  79. package/dist/collection/utils/sprites.js +16 -0
  80. package/dist/collection/utils/sprites.js.map +1 -0
  81. package/dist/components/q2-checkbox2.js +1 -1
  82. package/dist/components/q2-checkbox2.js.map +1 -1
  83. package/dist/components/q2-icon2.js +5 -20
  84. package/dist/components/q2-icon2.js.map +1 -1
  85. package/dist/components/q2-loading2.js +154 -5
  86. package/dist/components/q2-loading2.js.map +1 -1
  87. package/dist/components/sprites.js +20 -0
  88. package/dist/components/sprites.js.map +1 -0
  89. package/dist/esm/click-elsewhere.entry.js +1 -1
  90. package/dist/esm/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
  91. package/dist/esm/index-CGkHOjh1.js.map +1 -0
  92. package/dist/esm/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
  93. package/dist/{q2-tecton-elements/index-CkXFIBxL.js.map → esm/index-xCuy-dFb.js.map} +1 -1
  94. package/dist/esm/loader.js +3 -3
  95. package/dist/esm/q2-action-group_2.entry.js +2 -2
  96. package/dist/esm/q2-action-sheet.entry.js +2 -2
  97. package/dist/esm/q2-avatar.entry.js +1 -1
  98. package/dist/esm/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.js.map +1 -1
  99. package/dist/esm/q2-badge_7.entry.js +171 -27
  100. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  101. package/dist/esm/q2-calendar.entry.js +2 -2
  102. package/dist/esm/q2-card.entry.js +2 -2
  103. package/dist/esm/q2-carousel-pane.entry.js +2 -2
  104. package/dist/esm/q2-carousel.entry.js +2 -2
  105. package/dist/esm/q2-chart-area.entry.js +2 -2
  106. package/dist/esm/q2-chart-bar.entry.js +2 -2
  107. package/dist/esm/q2-chart-donut.entry.js +2 -2
  108. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  109. package/dist/esm/q2-checkbox.entry.js +3 -3
  110. package/dist/esm/q2-checkbox.entry.js.map +1 -1
  111. package/dist/esm/q2-context.entry.js +2 -2
  112. package/dist/esm/q2-currency.entry.js +1 -1
  113. package/dist/esm/q2-data-table.entry.js +2 -2
  114. package/dist/esm/q2-detail.entry.js +2 -2
  115. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  116. package/dist/esm/q2-dropdown.entry.js +2 -2
  117. package/dist/esm/q2-editable-field.entry.js +2 -2
  118. package/dist/esm/q2-example.entry.js +1 -1
  119. package/dist/esm/q2-file-picker.entry.js +2 -2
  120. package/dist/esm/q2-form.entry.js +1 -1
  121. package/dist/esm/q2-formatted-text.entry.js +1 -1
  122. package/dist/esm/q2-grid-area.entry.js +1 -1
  123. package/dist/esm/q2-grid.entry.js +1 -1
  124. package/dist/esm/q2-item.entry.js +2 -2
  125. package/dist/esm/q2-legend.entry.js +1 -1
  126. package/dist/esm/q2-link_2.entry.js +2 -2
  127. package/dist/esm/q2-loading-element.entry.js +2 -2
  128. package/dist/esm/q2-loc.entry.js +2 -2
  129. package/dist/esm/q2-message.entry.js +2 -2
  130. package/dist/esm/q2-modal.entry.js +2 -2
  131. package/dist/esm/q2-month-picker.entry.js +2 -2
  132. package/dist/esm/q2-optgroup.entry.js +2 -2
  133. package/dist/esm/q2-option-list_2.entry.js +2 -2
  134. package/dist/esm/q2-option.entry.js +2 -2
  135. package/dist/esm/q2-pagination.entry.js +2 -2
  136. package/dist/esm/q2-pill.entry.js +2 -2
  137. package/dist/esm/q2-radio-group.entry.js +2 -2
  138. package/dist/esm/q2-radio.entry.js +2 -2
  139. package/dist/esm/q2-relative-time.entry.js +2 -2
  140. package/dist/esm/q2-section.entry.js +2 -2
  141. package/dist/esm/q2-select.entry.js +2 -2
  142. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  143. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  144. package/dist/esm/q2-stepper.entry.js +2 -2
  145. package/dist/esm/q2-tag.entry.js +2 -2
  146. package/dist/esm/q2-tecton-elements.js +3 -3
  147. package/dist/esm/q2-textarea.entry.js +2 -2
  148. package/dist/esm/q2-tooltip.entry.js +2 -2
  149. package/dist/esm/{shapes-ElQYMSyu.js → shapes-B6iI6sMH.js} +3 -3
  150. package/dist/esm/{shapes-ElQYMSyu.js.map → shapes-B6iI6sMH.js.map} +1 -1
  151. package/dist/esm/tecton-tab-pane.entry.js +1 -1
  152. package/dist/q2-tecton-elements/click-elsewhere.entry.js +1 -1
  153. package/dist/q2-tecton-elements/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
  154. package/dist/q2-tecton-elements/index-CGkHOjh1.js.map +1 -0
  155. package/dist/q2-tecton-elements/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
  156. package/dist/{esm/index-CkXFIBxL.js.map → q2-tecton-elements/index-xCuy-dFb.js.map} +1 -1
  157. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  158. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +2 -2
  159. package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
  160. 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
  161. package/dist/q2-tecton-elements/q2-badge_7.entry.js +259 -121
  162. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  163. package/dist/q2-tecton-elements/q2-calendar.entry.js +2 -2
  164. package/dist/q2-tecton-elements/q2-card.entry.js +2 -2
  165. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +2 -2
  166. package/dist/q2-tecton-elements/q2-carousel.entry.js +2 -2
  167. package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
  168. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
  169. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +2 -2
  170. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
  171. package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +1 -1
  172. package/dist/q2-tecton-elements/q2-checkbox.entry.js +3 -3
  173. package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +1 -1
  174. package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
  175. package/dist/q2-tecton-elements/q2-currency.entry.js +1 -1
  176. package/dist/q2-tecton-elements/q2-data-table.entry.js +2 -2
  177. package/dist/q2-tecton-elements/q2-detail.entry.js +2 -2
  178. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
  179. package/dist/q2-tecton-elements/q2-dropdown.entry.js +9 -9
  180. package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -2
  181. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  182. package/dist/q2-tecton-elements/q2-file-picker.entry.js +2 -2
  183. package/dist/q2-tecton-elements/q2-form.entry.js +5 -5
  184. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +1 -1
  185. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  186. package/dist/q2-tecton-elements/q2-grid.entry.js +1 -1
  187. package/dist/q2-tecton-elements/q2-item.entry.js +2 -2
  188. package/dist/q2-tecton-elements/q2-legend.entry.js +1 -1
  189. package/dist/q2-tecton-elements/q2-link_2.entry.js +2 -2
  190. package/dist/q2-tecton-elements/q2-loading-element.entry.js +2 -2
  191. package/dist/q2-tecton-elements/q2-loc.entry.js +2 -2
  192. package/dist/q2-tecton-elements/q2-message.entry.js +2 -2
  193. package/dist/q2-tecton-elements/q2-modal.entry.js +2 -2
  194. package/dist/q2-tecton-elements/q2-month-picker.entry.js +2 -2
  195. package/dist/q2-tecton-elements/q2-optgroup.entry.js +2 -2
  196. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +16 -16
  197. package/dist/q2-tecton-elements/q2-option.entry.js +2 -2
  198. package/dist/q2-tecton-elements/q2-pagination.entry.js +2 -2
  199. package/dist/q2-tecton-elements/q2-pill.entry.js +2 -2
  200. package/dist/q2-tecton-elements/q2-radio-group.entry.js +12 -12
  201. package/dist/q2-tecton-elements/q2-radio.entry.js +5 -5
  202. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  203. package/dist/q2-tecton-elements/q2-section.entry.js +2 -2
  204. package/dist/q2-tecton-elements/q2-select.entry.js +2 -2
  205. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +2 -2
  206. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +2 -2
  207. package/dist/q2-tecton-elements/q2-stepper.entry.js +8 -8
  208. package/dist/q2-tecton-elements/q2-tag.entry.js +2 -2
  209. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +3 -3
  210. package/dist/q2-tecton-elements/q2-textarea.entry.js +2 -2
  211. package/dist/q2-tecton-elements/q2-tooltip.entry.js +2 -2
  212. package/dist/q2-tecton-elements/{shapes-ElQYMSyu.js → shapes-B6iI6sMH.js} +3 -3
  213. package/dist/q2-tecton-elements/{shapes-ElQYMSyu.js.map → shapes-B6iI6sMH.js.map} +1 -1
  214. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +4 -4
  215. package/dist/types/components/q2-icon/q2-icon.d.ts +0 -5
  216. package/dist/types/components/q2-loading/q2-loading.d.ts +16 -2
  217. package/dist/types/components.d.ts +2 -2
  218. package/dist/types/utils/sprites.d.ts +5 -0
  219. package/package.json +3 -3
  220. package/dist/cjs/index-JnAD7tEB.js.map +0 -1
  221. package/dist/esm/index-COzomxjJ.js.map +0 -1
  222. package/dist/q2-tecton-elements/index-COzomxjJ.js.map +0 -1
  223. /package/dist/types/{home/gitlab-runner/builds → builds}/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
@@ -1,6 +1,6 @@
1
- import { r as registerInstance, h, g as getElement, F as Fragment, a as getAssetPath, c as createEvent, H as Host } from './index-COzomxjJ.js';
2
- import { l as loc, u as handleDeprecationWarning, e as handleAriaLabel, x as handleColor, o as overrideFocus, a as isEventFromElement, y as getAriaValueFromProp, c as createGuid, j as isMobile, s as setMessageHeight, h as hasSlotContent, n as nextPaint, r as renderLabel, g as renderMessages } from './index-CkXFIBxL.js';
3
- import { s as shapes } from './shapes-ElQYMSyu.js';
1
+ import { r as registerInstance, h, g as getElement, F as Fragment, a as getAssetPath, c as createEvent, H as Host } from './index-CGkHOjh1.js';
2
+ import { l as loc, u as handleDeprecationWarning, e as handleAriaLabel, x as handleColor, o as overrideFocus, a as isEventFromElement, y as getAriaValueFromProp, c as createGuid, j as isMobile, s as setMessageHeight, h as hasSlotContent, n as nextPaint, r as renderLabel, g as renderMessages } from './index-xCuy-dFb.js';
3
+ import { s as shapes } from './shapes-B6iI6sMH.js';
4
4
 
5
5
  const q2BadgeCss = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}:host{display:inline-block;line-height:0;--comp-badge-font-size:var(--app-font-size-small, 12px);--comp-badge-large-font-size:var(--app-font-size-medium, 14px);--comp-badge-background:var(--tct-badge-background, var(--t-a11y-gray-color-AAA, #6c6c6c));--comp-badge-color:var(--tct-badge-color, var(--t-base, #ffffff))}:host:host([status=info]){--comp-badge-background:var(--tct-badge-info-background, var(--const-stoplight-info, #0079c1));--comp-badge-color:var(--tct-badge-info-color, var(--const-stoplight-info-text, #ffffff))}:host:host([status=alert]){--comp-badge-background:var(--tct-badge-alert-background, var(--const-stoplight-alert, #d20a0a));--comp-badge-color:var(--tct-badge-alert-color, var(--const-stoplight-alert-text, #ffffff))}:host:host([status=warning]){--comp-badge-background:var(--tct-badge-warning-background, var(--const-stoplight-warning, #c35500));--comp-badge-color:var(--tct-badge-warning-color, var(--const-stoplight-warning-text, #ffffff))}:host:host([status=success]){--comp-badge-background:var(--tct-badge-success-background, var(--const-stoplight-success, #0e8a00));--comp-badge-color:var(--tct-badge-success-color, var(--const-stoplight-success-text, #ffffff))}:host:host([theme=primary]){--comp-badge-background:var(--tct-badge-primary-background, var(--t-primary, #6a4a9e));--comp-badge-color:var(--tct-badge-primary-color, var(--t-primary-text, #ffffff))}:host:host([theme=secondary]){--comp-badge-background:var(--tct-badge-secondary-background, var(--t-secondary, #b3c2cc));--comp-badge-color:var(--tct-badge-secondary-color, var(--t-secondary-text, #141414))}:host:host([theme=tertiary]){--comp-badge-background:var(--tct-badge-tertiary-background, var(--t-tertiary, #e8f5fc));--comp-badge-color:var(--tct-badge-tertiary-color, var(--t-tertiary-text, #141414))}.badge-container{white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;height:var(--tct-badge-height, 16px);min-width:var(--tct-badge-min-width, 16px);text-align:center;padding:var(--tct-badge-padding, 0 5px);color:var(--comp-badge-color);background:var(--comp-badge-background);border-radius:var(--tct-badge-border-radius, var(--t-badge-border-radius, 8px));border:var(--tct-badge-border);backdrop-filter:var(--tct-badge-backdrop-filter)}.badge-container .badge-text{font-size:var(--comp-badge-font-size);line-height:var(--tct-badge-line-height, 14px)}.badge-container .badge-text ::slotted(p){margin:0 !important;font-size:var(--comp-badge-font-size) !important}.badge-container.size-large{height:var(--tct-badge-large-height, 22px);min-width:var(--tct-badge-large-min-width, 22px);border-radius:var(--tct-badge-large-border-radius, 11px);padding:var(--tct-badge-large-padding, 0 6px)}.badge-container.size-large .badge-text{font-size:var(--comp-badge-large-font-size);line-height:var(--tct-badge-large-line-height, 20px)}.badge-container.size-large .badge-text ::slotted(p){margin:0 !important;font-size:var(--comp-badge-large-font-size) !important}.empty-variant{min-width:unset;width:16px;height:16px;padding:0}.empty-variant.size-large{min-width:unset;width:22px;height:22px;padding:0}";
6
6
 
@@ -238,6 +238,22 @@ const Q2Btn = class {
238
238
  };
239
239
  Q2Btn.style = q2BtnCss;
240
240
 
241
+ /**
242
+ * Checks for the sprite container element in the global DOM
243
+ * If it does not exist, it creates and appends it to the body, and returns it
244
+ */
245
+ function getOrCreateSpriteContainer() {
246
+ const spriteContainerId = 'tecton-sprites';
247
+ let spriteContainer = document.querySelector(`#${spriteContainerId}`);
248
+ if (spriteContainer)
249
+ return spriteContainer;
250
+ spriteContainer = document.createElement('div');
251
+ spriteContainer.id = spriteContainerId;
252
+ spriteContainer.style.display = 'none';
253
+ document.body.appendChild(spriteContainer);
254
+ return spriteContainer;
255
+ }
256
+
241
257
  const a11y = "standard";
242
258
  const add = "standard";
243
259
  const airplane = "standard";
@@ -857,8 +873,8 @@ const Q2Icon = class {
857
873
  checkForSprite() {
858
874
  var _a;
859
875
  const { spriteId, spriteEventName } = this;
860
- const spriteContainer = this.getOrCreateSpriteContainer();
861
- let spriteElement = document.querySelector(`#${spriteId}`);
876
+ const spriteContainer = getOrCreateSpriteContainer();
877
+ let spriteElement = document.getElementById(spriteId);
862
878
  // If the sprite element exists and has the `data-loaded` attribute, we know we have everything we need
863
879
  if ((_a = spriteElement === null || spriteElement === void 0 ? void 0 : spriteElement.hasAttribute('data-loaded')) !== null && _a !== void 0 ? _a : false) {
864
880
  this.cloneSpriteNode();
@@ -880,8 +896,7 @@ const Q2Icon = class {
880
896
  return false;
881
897
  }
882
898
  cloneSpriteNode() {
883
- const spriteContainer = this.getOrCreateSpriteContainer();
884
- const spriteNode = spriteContainer.querySelector(`#tct-${this.type}`);
899
+ const spriteNode = document.getElementById(`tct-${this.type}`);
885
900
  this.iconClone = spriteNode ? spriteNode.cloneNode(true) : undefined;
886
901
  }
887
902
  async fetchSprite() {
@@ -908,24 +923,9 @@ const Q2Icon = class {
908
923
  else {
909
924
  spriteElement.parentNode.replaceChild(svg, spriteElement);
910
925
  }
911
- spriteElement = document.querySelector(`#${spriteId}`);
926
+ spriteElement = document.getElementById(spriteId);
912
927
  spriteElement.dispatchEvent(new CustomEvent(spriteEventName, { bubbles: true }));
913
928
  }
914
- /**
915
- * Checks for the sprite container element in the global DOM
916
- * If it does not exist, it creates and appends it to the body
917
- */
918
- getOrCreateSpriteContainer() {
919
- const spriteContainerId = 'tecton-sprites';
920
- let spriteContainer = document.querySelector(`#${spriteContainerId}`);
921
- if (spriteContainer)
922
- return spriteContainer;
923
- spriteContainer = document.createElement('div');
924
- spriteContainer.id = spriteContainerId;
925
- spriteContainer.style.display = 'none';
926
- document.body.appendChild(spriteContainer);
927
- return spriteContainer;
928
- }
929
929
  setCustomSVGAttrs() {
930
930
  const innerSVG = this.hostElement.querySelector('svg');
931
931
  if (!innerSVG)
@@ -4506,13 +4506,15 @@ const Q2Input = class {
4506
4506
  };
4507
4507
  Q2Input.style = q2InputCss;
4508
4508
 
4509
- const q2LoadingCss = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.flex{display:flex}.flex-center{justify-content:center}.flex-left{justify-content:flex-start}.flex-right{justify-content:flex-end}.flex-v-center{align-items:center}.no-margin{margin:0}:host{display:block}:host([inline]),:host([modifiers*=inline]){display:inline-block}:host([hidden]){display:none}:host(:not([inline]):not([modifiers*=inline])){font-size:var(--tct-loading-spinner-size, var(--t-loading-spinner-size, var(--app-scale-12x, 60px)))}.q2-loading-animation{height:1em;width:1em}.half-circle-spinner,.half-circle-spinner *{box-sizing:border-box}.half-circle-spinner{border-radius:100%;position:relative}.half-circle-spinner .circle{position:absolute;width:100%;height:100%;border-radius:100%;border:0.0833333333em solid transparent}.half-circle-spinner .circle.circle-1{border-top-color:var(--tct-loading-primary-color, var(--t-loading-primary-color, var(--t-primary, #0079c1)));animation:half-circle-spinner-animation 1s infinite}.half-circle-spinner .circle.circle-2{border-bottom-color:var(--tct-loading-secondary-color, var(--t-loading-secondary-color, #9ddd4f));animation:half-circle-spinner-animation 1s infinite alternate}@keyframes half-circle-spinner-animation{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:host{--comp-loading-skeleton-opacity:var(--var-loading-skeleton-opacity, 0.25)}@media (prefers-contrast: more){:host{--comp-loading-skeleton-opacity:var(--var-loading-skeleton-opacity, 1)}}.q2-loading-skeleton{position:relative;width:100%;height:100%;overflow:hidden;--comp-loading-skeleton-shimmer-color:var(--tct-loading-skeleton-shimmer-color, var(--t-base, rgba(255, 255, 255, 0.5)));--comp-loading-skeleton-vertical-gap:var(--tct-loading-skeleton-vertical-gap, var(--tct-scale-2, 10px));--comp-loading-skeleton-horizontal-gap:var(--tct-loading-skeleton-horizontal-gap, var(--tct-scale-2, 10px))}.q2-loading-skeleton-shimmer{position:absolute;width:1rem;height:100%;top:0;left:-100px;animation:skeletonShimmer 3s ease-in-out infinite;background-color:var(--comp-loading-skeleton-shimmer-color);box-shadow:0 0 25px 20px var(--comp-loading-skeleton-shimmer-color);transform:rotate(10deg)}.skeleton-shape.rectangle:not(.no-margin){margin:var(--tct-loading-skeleton-vertical-gap, var(--tct-scale-2, 10px)) var(--tct-loading-skeleton-horizontal-gap, var(--tct-scale-2, 10px))}.skeleton-shape.circle,.skeleton-shape.rectangle{background:var(--tct-loading-skeleton-element-background, var(--tct-loading-skeleton-element-bg, var(--t-gray-8, #808080)));opacity:var(--comp-loading-skeleton-opacity)}.skeleton-shape.rectangle{min-height:var(--tct-loading-skeleton-rectangle-min-height, 20px)}.skeleton-shape.circle{border-radius:50%;padding-top:100%}.flex .rectangle{flex-grow:1}.skeleton-table-row .rectangle{margin:var(--comp-loading-skeleton-vertical-gap) var(--comp-loading-skeleton-horizontal-gap)}.skeleton-table-row .rectangle:not(:first-child):not(:last-child){flex-grow:2}.skeleton-table-row-border .skeleton-shape{margin:0 var(--comp-loading-skeleton-horizontal-gap)}.form{flex-wrap:wrap}.form .field{margin:var(--comp-loading-skeleton-vertical-gap) 0}.form.columns-1 .field{flex-basis:100%}.form.columns-2 .field{flex-basis:50%}.form.columns-3 .field{flex-basis:33.3333%}.form.columns-4 .field{flex-basis:25%}.form.columns-5 .field{flex-basis:20%}.text .rectangle{margin-bottom:0}.text .header.center{margin:0 auto}.text .header.right{margin-left:auto}.text .header{height:1.5rem}.text .header.smaller{height:1rem}.detailed-item{flex-wrap:wrap}.detailed-item.right{flex-flow:row-reverse}.detailed-item-image{flex:0 0 auto;display:inline-flex}.center .detailed-item-image{flex-basis:100%;display:flex}.detailed-item-image .rectangle{flex-grow:0}.detailed-item-text>div{width:100%}.detailed-item-text{flex:1 1 auto}.detailed-item-text .text{margin-top:0;margin-bottom:0}.label-value{flex-wrap:wrap}.label-value .rectangle{flex-basis:calc(50% - 2 * var(--comp-loading-skeleton-horizontal-gap))}@keyframes skeletonShimmer{0%{left:-100px;opacity:1}70%{opacity:1}100%{left:800px;opacity:0}}";
4509
+ const q2LoadingCss = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.flex{display:flex}.flex-center{justify-content:center}.flex-left{justify-content:flex-start}.flex-right{justify-content:flex-end}.flex-v-center{align-items:center}.no-margin{margin:0}:host{display:block}:host([inline]),:host([modifiers*=inline]){display:inline-block}:host([hidden]){display:none}:host(:not([inline]):not([modifiers*=inline])){font-size:var(--tct-loading-spinner-size, var(--t-loading-spinner-size, var(--app-scale-12x, 60px)))}.q2-loading-animation{height:1em;width:1em}#custom-loader-container{min-height:1em;min-width:1em}#custom-loader-container svg{display:block}.half-circle-spinner,.half-circle-spinner *{box-sizing:border-box}.half-circle-spinner{border-radius:100%;position:relative}.half-circle-spinner .circle{position:absolute;width:100%;height:100%;border-radius:100%;border:0.0833333333em solid transparent}.half-circle-spinner .circle.circle-1{border-top-color:var(--tct-loading-primary-color, var(--t-loading-primary-color, var(--t-primary, #0079c1)));animation:half-circle-spinner-animation 1s infinite}.half-circle-spinner .circle.circle-2{border-bottom-color:var(--tct-loading-secondary-color, var(--t-loading-secondary-color, #9ddd4f));animation:half-circle-spinner-animation 1s infinite alternate}@keyframes half-circle-spinner-animation{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:host{--comp-loading-skeleton-opacity:var(--var-loading-skeleton-opacity, 0.25)}@media (prefers-contrast: more){:host{--comp-loading-skeleton-opacity:var(--var-loading-skeleton-opacity, 1)}}.q2-loading-skeleton{position:relative;width:100%;height:100%;overflow:hidden;--comp-loading-skeleton-shimmer-color:var(--tct-loading-skeleton-shimmer-color, var(--t-base, rgba(255, 255, 255, 0.5)));--comp-loading-skeleton-vertical-gap:var(--tct-loading-skeleton-vertical-gap, var(--tct-scale-2, 10px));--comp-loading-skeleton-horizontal-gap:var(--tct-loading-skeleton-horizontal-gap, var(--tct-scale-2, 10px))}.q2-loading-skeleton-shimmer{position:absolute;width:1rem;height:100%;top:0;left:-100px;animation:skeletonShimmer 3s ease-in-out infinite;background-color:var(--comp-loading-skeleton-shimmer-color);box-shadow:0 0 25px 20px var(--comp-loading-skeleton-shimmer-color);transform:rotate(10deg)}.skeleton-shape.rectangle:not(.no-margin){margin:var(--tct-loading-skeleton-vertical-gap, var(--tct-scale-2, 10px)) var(--tct-loading-skeleton-horizontal-gap, var(--tct-scale-2, 10px))}.skeleton-shape.circle,.skeleton-shape.rectangle{background:var(--tct-loading-skeleton-element-background, var(--tct-loading-skeleton-element-bg, var(--t-gray-8, #808080)));opacity:var(--comp-loading-skeleton-opacity)}.skeleton-shape.rectangle{min-height:var(--tct-loading-skeleton-rectangle-min-height, 20px)}.skeleton-shape.circle{border-radius:50%;padding-top:100%}.flex .rectangle{flex-grow:1}.skeleton-table-row .rectangle{margin:var(--comp-loading-skeleton-vertical-gap) var(--comp-loading-skeleton-horizontal-gap)}.skeleton-table-row .rectangle:not(:first-child):not(:last-child){flex-grow:2}.skeleton-table-row-border .skeleton-shape{margin:0 var(--comp-loading-skeleton-horizontal-gap)}.form{flex-wrap:wrap}.form .field{margin:var(--comp-loading-skeleton-vertical-gap) 0}.form.columns-1 .field{flex-basis:100%}.form.columns-2 .field{flex-basis:50%}.form.columns-3 .field{flex-basis:33.3333%}.form.columns-4 .field{flex-basis:25%}.form.columns-5 .field{flex-basis:20%}.text .rectangle{margin-bottom:0}.text .header.center{margin:0 auto}.text .header.right{margin-left:auto}.text .header{height:1.5rem}.text .header.smaller{height:1rem}.detailed-item{flex-wrap:wrap}.detailed-item.right{flex-flow:row-reverse}.detailed-item-image{flex:0 0 auto;display:inline-flex}.center .detailed-item-image{flex-basis:100%;display:flex}.detailed-item-image .rectangle{flex-grow:0}.detailed-item-text>div{width:100%}.detailed-item-text{flex:1 1 auto}.detailed-item-text .text{margin-top:0;margin-bottom:0}.label-value{flex-wrap:wrap}.label-value .rectangle{flex-basis:calc(50% - 2 * var(--comp-loading-skeleton-horizontal-gap))}@keyframes skeletonShimmer{0%{left:-100px;opacity:1}70%{opacity:1}100%{left:800px;opacity:0}}";
4510
4510
 
4511
4511
  const Q2Loading = class {
4512
4512
  constructor(hostRef) {
4513
4513
  registerInstance(this, hostRef);
4514
4514
  this.dontUpdateScreenReaderLabel = false;
4515
4515
  this.liveRegionChangeIndicatorToggle = false;
4516
+ this.customLoaderClass = 'tct-loading-custom-loader';
4517
+ this.hasCustomLoader = false;
4516
4518
  /** Hides the loading element from screen readers. */
4517
4519
  this.hideFromScreenReaders = false;
4518
4520
  // #endregion
@@ -4520,6 +4522,9 @@ const Q2Loading = class {
4520
4522
  this.renderHalfCircleSpinner = () => {
4521
4523
  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) }))));
4522
4524
  };
4525
+ this.renderCustomLoaderContainer = () => {
4526
+ return (h("div", { id: "custom-loader-container", "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) }))));
4527
+ };
4523
4528
  this.renderSkeletonLoader = () => {
4524
4529
  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) }))));
4525
4530
  };
@@ -4534,6 +4539,7 @@ const Q2Loading = class {
4534
4539
  }
4535
4540
  componentWillLoad() {
4536
4541
  handleAriaLabel(this);
4542
+ this.handleType();
4537
4543
  }
4538
4544
  componentDidLoad() {
4539
4545
  this.setupLiveRegionDelay();
@@ -4541,8 +4547,105 @@ const Q2Loading = class {
4541
4547
  componentDidUpdate() {
4542
4548
  this.updateScreenReaderLabel();
4543
4549
  }
4550
+ componentDidRender() {
4551
+ var _a;
4552
+ if (!this.loaderClone)
4553
+ return;
4554
+ if (!this.hasCustomLoader)
4555
+ return;
4556
+ const customLoaderContainer = this.hostElement.shadowRoot.querySelector('#custom-loader-container');
4557
+ (_a = customLoaderContainer.querySelector(`svg.${this.customLoaderClass}`)) === null || _a === void 0 ? void 0 : _a.remove();
4558
+ customLoaderContainer.appendChild(this.loaderClone);
4559
+ }
4560
+ // #endregion
4561
+ // #region Listeners
4562
+ onUpdateLoaders() {
4563
+ const { customLoaderURL } = this;
4564
+ this.hasCustomLoader = !!customLoaderURL;
4565
+ this.fetchLoader();
4566
+ }
4567
+ // #endregion
4568
+ // #region Watchers
4569
+ handleType() {
4570
+ this.fetchLoader();
4571
+ }
4572
+ async fetchLoader() {
4573
+ const { isSkeletonType, customLoaderURL } = this;
4574
+ this.hasCustomLoader = false;
4575
+ if (isSkeletonType) {
4576
+ return;
4577
+ }
4578
+ if (!customLoaderURL)
4579
+ return;
4580
+ this.hasCustomLoader = true;
4581
+ let { customLoaderElement } = this;
4582
+ const loaderExists = this.checkForLoader();
4583
+ if (loaderExists)
4584
+ return;
4585
+ try {
4586
+ const response = await fetch(customLoaderURL);
4587
+ // Check for HTTP errors (including CORS issues that return error status)
4588
+ if (!response.ok) {
4589
+ throw new Error(`HTTP ${response.status}: Failed to fetch SVG. ` +
4590
+ `This may be due to incorrect URL, server error, or CORS restrictions.`);
4591
+ }
4592
+ const svgText = await response.text();
4593
+ const parser = new DOMParser();
4594
+ const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');
4595
+ const svg = svgDoc.querySelector('svg');
4596
+ if (!svg)
4597
+ throw new Error('No SVG found in the loaded content');
4598
+ svg.dataset.loaded = '';
4599
+ svg.dataset.url = customLoaderURL;
4600
+ svg.classList.add(this.customLoaderClass);
4601
+ customLoaderElement = this.customLoaderElement;
4602
+ if (!customLoaderElement)
4603
+ return;
4604
+ if (typeof customLoaderElement.replaceWith === 'function') {
4605
+ customLoaderElement.replaceWith(svg);
4606
+ }
4607
+ else {
4608
+ customLoaderElement.parentNode.replaceChild(svg, customLoaderElement);
4609
+ }
4610
+ svg.dispatchEvent(new CustomEvent(this.loaderEventName, { bubbles: true }));
4611
+ }
4612
+ catch (error) {
4613
+ // Provide more specific error messaging for common issues
4614
+ if (error instanceof TypeError && error.message === 'Failed to fetch') {
4615
+ console.error(`Failed to load custom loader from ${customLoaderURL}. ` +
4616
+ `This is likely due to a CORS (Cross-Origin Resource Sharing) error. ` +
4617
+ `Ensure the server hosting the SVG includes proper CORS headers ` +
4618
+ `(Access-Control-Allow-Origin) or host the SVG on the same domain.`, error);
4619
+ }
4620
+ else {
4621
+ console.error(`Failed to load custom loader SVG from ${customLoaderURL}:`, error);
4622
+ }
4623
+ }
4624
+ }
4544
4625
  // #endregion
4545
4626
  // #region Local Methods
4627
+ get customLoaderURL() {
4628
+ const hostComputedStyles = window.getComputedStyle(this.hostElement);
4629
+ const loadingVariableURL = hostComputedStyles.getPropertyValue(`--tct-loading-custom-${this.type || 'spinner'}-url`);
4630
+ if (!loadingVariableURL)
4631
+ return;
4632
+ return loadingVariableURL.trim().replace(/^url\(['"]?|['"]?\)$/g, '');
4633
+ }
4634
+ get isSkeletonType() {
4635
+ return this.type === 'skeleton';
4636
+ }
4637
+ get loaderEventName() {
4638
+ const { type = 'spinner', isSkeletonType } = this;
4639
+ if (isSkeletonType)
4640
+ return;
4641
+ return `tct-loaded-${type}`;
4642
+ }
4643
+ get customLoaderElement() {
4644
+ const { customLoaderURL, customLoaderClass } = this;
4645
+ if (!customLoaderURL)
4646
+ return;
4647
+ return document.querySelector(`.${customLoaderClass}[data-url="${customLoaderURL}"]`);
4648
+ }
4546
4649
  get countsArray() {
4547
4650
  if (this.type !== 'skeleton' || !this.counts) {
4548
4651
  return undefined;
@@ -4562,6 +4665,35 @@ const Q2Loading = class {
4562
4665
  var _a, _b;
4563
4666
  return (_b = (_a = shapes[this.shape]) === null || _a === void 0 ? void 0 : _a.call(shapes, this.countsArray, this.modifiersSet)) !== null && _b !== void 0 ? _b : '';
4564
4667
  }
4668
+ checkForLoader() {
4669
+ const { loaderEventName, customLoaderClass } = this;
4670
+ const spriteContainer = getOrCreateSpriteContainer();
4671
+ let { customLoaderElement } = this;
4672
+ // If the loading element exists and has the `data-loaded` attribute, we know we have everything we need
4673
+ if (customLoaderElement === null || customLoaderElement === void 0 ? void 0 : customLoaderElement.hasAttribute('data-loaded')) {
4674
+ this.cloneLoaderNode();
4675
+ return true;
4676
+ }
4677
+ // If the loading element exists but does not have the `data-loaded` attribute, we know it's being loaded
4678
+ // We'll listen for the event that will be dispatched when the element is loaded
4679
+ spriteContainer.addEventListener(loaderEventName, () => {
4680
+ this.cloneLoaderNode();
4681
+ }, { once: true });
4682
+ // If the loading element exists, we know it's being loaded and will be handled by the event listener
4683
+ if (customLoaderElement)
4684
+ return true;
4685
+ // If loading element does not exist, create a placeholder
4686
+ // This will let other icons know the element is being loaded and prevent multiple fetches
4687
+ customLoaderElement = document.createElement('div');
4688
+ customLoaderElement.classList.add(customLoaderClass);
4689
+ customLoaderElement.dataset.url = this.customLoaderURL;
4690
+ spriteContainer.appendChild(customLoaderElement);
4691
+ return false;
4692
+ }
4693
+ cloneLoaderNode() {
4694
+ const { customLoaderElement } = this;
4695
+ this.loaderClone = customLoaderElement ? customLoaderElement.cloneNode(true) : undefined;
4696
+ }
4565
4697
  cleanupLiveRegionDelay() {
4566
4698
  if (this.hideFromScreenReaders)
4567
4699
  return;
@@ -4585,14 +4717,18 @@ const Q2Loading = class {
4585
4717
  if (entry.isIntersecting) {
4586
4718
  clearTimeout(this.ariaLiveTimer);
4587
4719
  this.ariaLiveTimer = setTimeout(() => {
4588
- this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;
4720
+ if (this.screenReaderElement) {
4721
+ this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;
4722
+ }
4589
4723
  this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;
4590
4724
  this.dontUpdateScreenReaderLabel = false;
4591
4725
  }, 2000);
4592
4726
  }
4593
4727
  else {
4594
4728
  clearTimeout(this.ariaLiveTimer);
4595
- this.screenReaderElement.textContent = '';
4729
+ if (this.screenReaderElement) {
4730
+ this.screenReaderElement.textContent = '';
4731
+ }
4596
4732
  this.dontUpdateScreenReaderLabel = true;
4597
4733
  }
4598
4734
  });
@@ -4602,6 +4738,8 @@ const Q2Loading = class {
4602
4738
  updateScreenReaderLabel() {
4603
4739
  if (this.dontUpdateScreenReaderLabel)
4604
4740
  return;
4741
+ if (!this.screenReaderElement)
4742
+ return;
4605
4743
  this.screenReaderElement.textContent = this.localizedLabel;
4606
4744
  }
4607
4745
  get renderLoader() {
@@ -4609,13 +4747,19 @@ const Q2Loading = class {
4609
4747
  default: this.renderSpinner,
4610
4748
  spinner: this.renderSpinner,
4611
4749
  skeleton: this.renderSkeletonLoader,
4750
+ custom: this.renderCustomLoaderContainer,
4612
4751
  };
4613
- return loaderMap[this.type] || loaderMap.default;
4752
+ const { type, hasCustomLoader } = this;
4753
+ const loaderMapKey = hasCustomLoader ? 'custom' : type;
4754
+ return loaderMap[loaderMapKey] || loaderMap.default;
4614
4755
  }
4615
4756
  render() {
4616
4757
  return this.renderLoader();
4617
4758
  }
4618
4759
  get hostElement() { return getElement(this); }
4760
+ static get watchers() { return {
4761
+ "type": ["handleType"]
4762
+ }; }
4619
4763
  };
4620
4764
  Q2Loading.style = q2LoadingCss;
4621
4765