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,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-JnAD7tEB.js');
4
- var index$1 = require('./index-B6mUspT0.js');
5
- var shapes = require('./shapes-CmBHp0YP.js');
3
+ var index = require('./index-BYXz4owL.js');
4
+ var index$1 = require('./index-BuXzB2ML.js');
5
+ var shapes = require('./shapes-AGx9jMFH.js');
6
6
 
7
7
  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}";
8
8
 
@@ -240,6 +240,22 @@ const Q2Btn = class {
240
240
  };
241
241
  Q2Btn.style = q2BtnCss;
242
242
 
243
+ /**
244
+ * Checks for the sprite container element in the global DOM
245
+ * If it does not exist, it creates and appends it to the body, and returns it
246
+ */
247
+ function getOrCreateSpriteContainer() {
248
+ const spriteContainerId = 'tecton-sprites';
249
+ let spriteContainer = document.querySelector(`#${spriteContainerId}`);
250
+ if (spriteContainer)
251
+ return spriteContainer;
252
+ spriteContainer = document.createElement('div');
253
+ spriteContainer.id = spriteContainerId;
254
+ spriteContainer.style.display = 'none';
255
+ document.body.appendChild(spriteContainer);
256
+ return spriteContainer;
257
+ }
258
+
243
259
  const a11y = "standard";
244
260
  const add = "standard";
245
261
  const airplane = "standard";
@@ -859,8 +875,8 @@ const Q2Icon = class {
859
875
  checkForSprite() {
860
876
  var _a;
861
877
  const { spriteId, spriteEventName } = this;
862
- const spriteContainer = this.getOrCreateSpriteContainer();
863
- let spriteElement = document.querySelector(`#${spriteId}`);
878
+ const spriteContainer = getOrCreateSpriteContainer();
879
+ let spriteElement = document.getElementById(spriteId);
864
880
  // If the sprite element exists and has the `data-loaded` attribute, we know we have everything we need
865
881
  if ((_a = spriteElement === null || spriteElement === void 0 ? void 0 : spriteElement.hasAttribute('data-loaded')) !== null && _a !== void 0 ? _a : false) {
866
882
  this.cloneSpriteNode();
@@ -882,8 +898,7 @@ const Q2Icon = class {
882
898
  return false;
883
899
  }
884
900
  cloneSpriteNode() {
885
- const spriteContainer = this.getOrCreateSpriteContainer();
886
- const spriteNode = spriteContainer.querySelector(`#tct-${this.type}`);
901
+ const spriteNode = document.getElementById(`tct-${this.type}`);
887
902
  this.iconClone = spriteNode ? spriteNode.cloneNode(true) : undefined;
888
903
  }
889
904
  async fetchSprite() {
@@ -910,24 +925,9 @@ const Q2Icon = class {
910
925
  else {
911
926
  spriteElement.parentNode.replaceChild(svg, spriteElement);
912
927
  }
913
- spriteElement = document.querySelector(`#${spriteId}`);
928
+ spriteElement = document.getElementById(spriteId);
914
929
  spriteElement.dispatchEvent(new CustomEvent(spriteEventName, { bubbles: true }));
915
930
  }
916
- /**
917
- * Checks for the sprite container element in the global DOM
918
- * If it does not exist, it creates and appends it to the body
919
- */
920
- getOrCreateSpriteContainer() {
921
- const spriteContainerId = 'tecton-sprites';
922
- let spriteContainer = document.querySelector(`#${spriteContainerId}`);
923
- if (spriteContainer)
924
- return spriteContainer;
925
- spriteContainer = document.createElement('div');
926
- spriteContainer.id = spriteContainerId;
927
- spriteContainer.style.display = 'none';
928
- document.body.appendChild(spriteContainer);
929
- return spriteContainer;
930
- }
931
931
  setCustomSVGAttrs() {
932
932
  const innerSVG = this.hostElement.querySelector('svg');
933
933
  if (!innerSVG)
@@ -4508,13 +4508,15 @@ const Q2Input = class {
4508
4508
  };
4509
4509
  Q2Input.style = q2InputCss;
4510
4510
 
4511
- 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}}";
4511
+ 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}}";
4512
4512
 
4513
4513
  const Q2Loading = class {
4514
4514
  constructor(hostRef) {
4515
4515
  index.registerInstance(this, hostRef);
4516
4516
  this.dontUpdateScreenReaderLabel = false;
4517
4517
  this.liveRegionChangeIndicatorToggle = false;
4518
+ this.customLoaderClass = 'tct-loading-custom-loader';
4519
+ this.hasCustomLoader = false;
4518
4520
  /** Hides the loading element from screen readers. */
4519
4521
  this.hideFromScreenReaders = false;
4520
4522
  // #endregion
@@ -4522,6 +4524,9 @@ const Q2Loading = class {
4522
4524
  this.renderHalfCircleSpinner = () => {
4523
4525
  return (index.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 }, index.h("div", { class: "circle circle-1" }), index.h("div", { class: "circle circle-2" }), !this.hideFromScreenReaders && (index.h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
4524
4526
  };
4527
+ this.renderCustomLoaderContainer = () => {
4528
+ return (index.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 && (index.h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
4529
+ };
4525
4530
  this.renderSkeletonLoader = () => {
4526
4531
  return (index.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' ? index.h("slot", null) : this.skeletonShape, index.h("div", { class: "q2-loading-skeleton-shimmer" }), !this.hideFromScreenReaders && (index.h("div", { class: "sr", ref: el => (this.screenReaderElement = el) }))));
4527
4532
  };
@@ -4536,6 +4541,7 @@ const Q2Loading = class {
4536
4541
  }
4537
4542
  componentWillLoad() {
4538
4543
  index$1.handleAriaLabel(this);
4544
+ this.handleType();
4539
4545
  }
4540
4546
  componentDidLoad() {
4541
4547
  this.setupLiveRegionDelay();
@@ -4543,8 +4549,105 @@ const Q2Loading = class {
4543
4549
  componentDidUpdate() {
4544
4550
  this.updateScreenReaderLabel();
4545
4551
  }
4552
+ componentDidRender() {
4553
+ var _a;
4554
+ if (!this.loaderClone)
4555
+ return;
4556
+ if (!this.hasCustomLoader)
4557
+ return;
4558
+ const customLoaderContainer = this.hostElement.shadowRoot.querySelector('#custom-loader-container');
4559
+ (_a = customLoaderContainer.querySelector(`svg.${this.customLoaderClass}`)) === null || _a === void 0 ? void 0 : _a.remove();
4560
+ customLoaderContainer.appendChild(this.loaderClone);
4561
+ }
4562
+ // #endregion
4563
+ // #region Listeners
4564
+ onUpdateLoaders() {
4565
+ const { customLoaderURL } = this;
4566
+ this.hasCustomLoader = !!customLoaderURL;
4567
+ this.fetchLoader();
4568
+ }
4569
+ // #endregion
4570
+ // #region Watchers
4571
+ handleType() {
4572
+ this.fetchLoader();
4573
+ }
4574
+ async fetchLoader() {
4575
+ const { isSkeletonType, customLoaderURL } = this;
4576
+ this.hasCustomLoader = false;
4577
+ if (isSkeletonType) {
4578
+ return;
4579
+ }
4580
+ if (!customLoaderURL)
4581
+ return;
4582
+ this.hasCustomLoader = true;
4583
+ let { customLoaderElement } = this;
4584
+ const loaderExists = this.checkForLoader();
4585
+ if (loaderExists)
4586
+ return;
4587
+ try {
4588
+ const response = await fetch(customLoaderURL);
4589
+ // Check for HTTP errors (including CORS issues that return error status)
4590
+ if (!response.ok) {
4591
+ throw new Error(`HTTP ${response.status}: Failed to fetch SVG. ` +
4592
+ `This may be due to incorrect URL, server error, or CORS restrictions.`);
4593
+ }
4594
+ const svgText = await response.text();
4595
+ const parser = new DOMParser();
4596
+ const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');
4597
+ const svg = svgDoc.querySelector('svg');
4598
+ if (!svg)
4599
+ throw new Error('No SVG found in the loaded content');
4600
+ svg.dataset.loaded = '';
4601
+ svg.dataset.url = customLoaderURL;
4602
+ svg.classList.add(this.customLoaderClass);
4603
+ customLoaderElement = this.customLoaderElement;
4604
+ if (!customLoaderElement)
4605
+ return;
4606
+ if (typeof customLoaderElement.replaceWith === 'function') {
4607
+ customLoaderElement.replaceWith(svg);
4608
+ }
4609
+ else {
4610
+ customLoaderElement.parentNode.replaceChild(svg, customLoaderElement);
4611
+ }
4612
+ svg.dispatchEvent(new CustomEvent(this.loaderEventName, { bubbles: true }));
4613
+ }
4614
+ catch (error) {
4615
+ // Provide more specific error messaging for common issues
4616
+ if (error instanceof TypeError && error.message === 'Failed to fetch') {
4617
+ console.error(`Failed to load custom loader from ${customLoaderURL}. ` +
4618
+ `This is likely due to a CORS (Cross-Origin Resource Sharing) error. ` +
4619
+ `Ensure the server hosting the SVG includes proper CORS headers ` +
4620
+ `(Access-Control-Allow-Origin) or host the SVG on the same domain.`, error);
4621
+ }
4622
+ else {
4623
+ console.error(`Failed to load custom loader SVG from ${customLoaderURL}:`, error);
4624
+ }
4625
+ }
4626
+ }
4546
4627
  // #endregion
4547
4628
  // #region Local Methods
4629
+ get customLoaderURL() {
4630
+ const hostComputedStyles = window.getComputedStyle(this.hostElement);
4631
+ const loadingVariableURL = hostComputedStyles.getPropertyValue(`--tct-loading-custom-${this.type || 'spinner'}-url`);
4632
+ if (!loadingVariableURL)
4633
+ return;
4634
+ return loadingVariableURL.trim().replace(/^url\(['"]?|['"]?\)$/g, '');
4635
+ }
4636
+ get isSkeletonType() {
4637
+ return this.type === 'skeleton';
4638
+ }
4639
+ get loaderEventName() {
4640
+ const { type = 'spinner', isSkeletonType } = this;
4641
+ if (isSkeletonType)
4642
+ return;
4643
+ return `tct-loaded-${type}`;
4644
+ }
4645
+ get customLoaderElement() {
4646
+ const { customLoaderURL, customLoaderClass } = this;
4647
+ if (!customLoaderURL)
4648
+ return;
4649
+ return document.querySelector(`.${customLoaderClass}[data-url="${customLoaderURL}"]`);
4650
+ }
4548
4651
  get countsArray() {
4549
4652
  if (this.type !== 'skeleton' || !this.counts) {
4550
4653
  return undefined;
@@ -4564,6 +4667,35 @@ const Q2Loading = class {
4564
4667
  var _a, _b;
4565
4668
  return (_b = (_a = shapes.shapes[this.shape]) === null || _a === void 0 ? void 0 : _a.call(shapes.shapes, this.countsArray, this.modifiersSet)) !== null && _b !== void 0 ? _b : '';
4566
4669
  }
4670
+ checkForLoader() {
4671
+ const { loaderEventName, customLoaderClass } = this;
4672
+ const spriteContainer = getOrCreateSpriteContainer();
4673
+ let { customLoaderElement } = this;
4674
+ // If the loading element exists and has the `data-loaded` attribute, we know we have everything we need
4675
+ if (customLoaderElement === null || customLoaderElement === void 0 ? void 0 : customLoaderElement.hasAttribute('data-loaded')) {
4676
+ this.cloneLoaderNode();
4677
+ return true;
4678
+ }
4679
+ // If the loading element exists but does not have the `data-loaded` attribute, we know it's being loaded
4680
+ // We'll listen for the event that will be dispatched when the element is loaded
4681
+ spriteContainer.addEventListener(loaderEventName, () => {
4682
+ this.cloneLoaderNode();
4683
+ }, { once: true });
4684
+ // If the loading element exists, we know it's being loaded and will be handled by the event listener
4685
+ if (customLoaderElement)
4686
+ return true;
4687
+ // If loading element does not exist, create a placeholder
4688
+ // This will let other icons know the element is being loaded and prevent multiple fetches
4689
+ customLoaderElement = document.createElement('div');
4690
+ customLoaderElement.classList.add(customLoaderClass);
4691
+ customLoaderElement.dataset.url = this.customLoaderURL;
4692
+ spriteContainer.appendChild(customLoaderElement);
4693
+ return false;
4694
+ }
4695
+ cloneLoaderNode() {
4696
+ const { customLoaderElement } = this;
4697
+ this.loaderClone = customLoaderElement ? customLoaderElement.cloneNode(true) : undefined;
4698
+ }
4567
4699
  cleanupLiveRegionDelay() {
4568
4700
  if (this.hideFromScreenReaders)
4569
4701
  return;
@@ -4587,14 +4719,18 @@ const Q2Loading = class {
4587
4719
  if (entry.isIntersecting) {
4588
4720
  clearTimeout(this.ariaLiveTimer);
4589
4721
  this.ariaLiveTimer = setTimeout(() => {
4590
- this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;
4722
+ if (this.screenReaderElement) {
4723
+ this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;
4724
+ }
4591
4725
  this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;
4592
4726
  this.dontUpdateScreenReaderLabel = false;
4593
4727
  }, 2000);
4594
4728
  }
4595
4729
  else {
4596
4730
  clearTimeout(this.ariaLiveTimer);
4597
- this.screenReaderElement.textContent = '';
4731
+ if (this.screenReaderElement) {
4732
+ this.screenReaderElement.textContent = '';
4733
+ }
4598
4734
  this.dontUpdateScreenReaderLabel = true;
4599
4735
  }
4600
4736
  });
@@ -4604,6 +4740,8 @@ const Q2Loading = class {
4604
4740
  updateScreenReaderLabel() {
4605
4741
  if (this.dontUpdateScreenReaderLabel)
4606
4742
  return;
4743
+ if (!this.screenReaderElement)
4744
+ return;
4607
4745
  this.screenReaderElement.textContent = this.localizedLabel;
4608
4746
  }
4609
4747
  get renderLoader() {
@@ -4611,13 +4749,19 @@ const Q2Loading = class {
4611
4749
  default: this.renderSpinner,
4612
4750
  spinner: this.renderSpinner,
4613
4751
  skeleton: this.renderSkeletonLoader,
4752
+ custom: this.renderCustomLoaderContainer,
4614
4753
  };
4615
- return loaderMap[this.type] || loaderMap.default;
4754
+ const { type, hasCustomLoader } = this;
4755
+ const loaderMapKey = hasCustomLoader ? 'custom' : type;
4756
+ return loaderMap[loaderMapKey] || loaderMap.default;
4616
4757
  }
4617
4758
  render() {
4618
4759
  return this.renderLoader();
4619
4760
  }
4620
4761
  get hostElement() { return index.getElement(this); }
4762
+ static get watchers() { return {
4763
+ "type": ["handleType"]
4764
+ }; }
4621
4765
  };
4622
4766
  Q2Loading.style = q2LoadingCss;
4623
4767