@ds-mo/ui 15.11.2 → 15.12.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 (300) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +120 -19
  4. package/dist/angular/ds-card-action-center.d.ts +1 -1
  5. package/dist/angular/ds-card-action-center.js +3 -3
  6. package/dist/angular/ds-card-chart.d.ts +1 -1
  7. package/dist/angular/ds-card-chart.js +3 -3
  8. package/dist/angular/ds-card-navigation.d.ts +1 -1
  9. package/dist/angular/ds-card-navigation.js +3 -3
  10. package/dist/angular/ds-card-setting.d.ts +1 -1
  11. package/dist/angular/ds-card-setting.js +3 -3
  12. package/dist/angular/ds-card-settings-scope.d.ts +1 -1
  13. package/dist/angular/ds-card-settings-scope.js +3 -3
  14. package/dist/angular/ds-field.d.ts +1 -1
  15. package/dist/angular/ds-field.js +3 -3
  16. package/dist/angular/ds-inline-banner-settings.d.ts +1 -1
  17. package/dist/angular/ds-inline-banner-settings.js +3 -3
  18. package/dist/angular/ds-pagination.d.ts +1 -1
  19. package/dist/angular/ds-pagination.js +3 -3
  20. package/dist/angular/ds-radio.d.ts +1 -1
  21. package/dist/angular/ds-radio.js +3 -3
  22. package/dist/angular/ds-setting-row-radio.d.ts +1 -1
  23. package/dist/angular/ds-setting-row-radio.js +3 -3
  24. package/dist/angular/ds-setting-row-toggle.d.ts +1 -1
  25. package/dist/angular/ds-setting-row-toggle.js +3 -3
  26. package/dist/angular/ds-skeleton.d.ts +1 -1
  27. package/dist/angular/ds-skeleton.js +3 -3
  28. package/dist/components/ds-agent-activity.js +1 -1
  29. package/dist/components/ds-agent-questionnaire.js +1 -1
  30. package/dist/components/ds-agent-response.js +1 -1
  31. package/dist/components/ds-agent-response.js.map +1 -1
  32. package/dist/components/ds-agent-source-list.js +1 -1
  33. package/dist/components/ds-agent-tool-call.js +1 -1
  34. package/dist/components/ds-attachment-list.js +1 -1
  35. package/dist/components/ds-badge.js +1 -1
  36. package/dist/components/ds-banner.js +1 -1
  37. package/dist/components/ds-bar-action.js +1 -1
  38. package/dist/components/ds-bar-nav.js +1 -1
  39. package/dist/components/ds-bar-page-title.js +1 -1
  40. package/dist/components/ds-bar-title.js +1 -1
  41. package/dist/components/ds-bar-workflow.js +1 -1
  42. package/dist/components/ds-breadcrumb.js +1 -1
  43. package/dist/components/ds-button-filled.js +1 -1
  44. package/dist/components/ds-button-inverted.js +1 -1
  45. package/dist/components/ds-button-unfilled.js +1 -1
  46. package/dist/components/ds-calendar.js +1 -1
  47. package/dist/components/ds-card-action-center.js +1 -1
  48. package/dist/components/ds-card-action-center.js.map +1 -1
  49. package/dist/components/ds-card-chart.js +1 -1
  50. package/dist/components/ds-card-chart.js.map +1 -1
  51. package/dist/components/ds-card-navigation.js +1 -1
  52. package/dist/components/ds-card-navigation.js.map +1 -1
  53. package/dist/components/ds-card-overview.js +1 -1
  54. package/dist/components/ds-card-overview.js.map +1 -1
  55. package/dist/components/ds-card-setting.js +1 -1
  56. package/dist/components/ds-card-setting.js.map +1 -1
  57. package/dist/components/ds-card-settings-scope.js +1 -1
  58. package/dist/components/ds-card-settings-scope.js.map +1 -1
  59. package/dist/components/ds-chart-legend.js +1 -1
  60. package/dist/components/ds-chart.js +1 -1
  61. package/dist/components/ds-checkbox-group.js +1 -1
  62. package/dist/components/ds-checkbox.js +1 -1
  63. package/dist/components/ds-chip.js +1 -1
  64. package/dist/components/ds-code-block.js +1 -1
  65. package/dist/components/ds-conversation-list-item.js +1 -1
  66. package/dist/components/ds-conversation-list-section.js +1 -1
  67. package/dist/components/ds-conversation-list.js +1 -1
  68. package/dist/components/ds-data-customize.js +1 -1
  69. package/dist/components/ds-data-customize.js.map +1 -1
  70. package/dist/components/ds-data-filter.js +1 -1
  71. package/dist/components/ds-data-group.js +1 -1
  72. package/dist/components/ds-data-preferences.js +1 -1
  73. package/dist/components/ds-data-saved-views.js +1 -1
  74. package/dist/components/ds-data-saved-views.js.map +1 -1
  75. package/dist/components/ds-data-search.js +1 -1
  76. package/dist/components/ds-data-sort.js +1 -1
  77. package/dist/components/ds-data-toolbar.js +1 -1
  78. package/dist/components/ds-divider.js +1 -1
  79. package/dist/components/ds-empty-state.js +1 -1
  80. package/dist/components/ds-field.js +1 -1
  81. package/dist/components/ds-filter-menu.js +1 -1
  82. package/dist/components/ds-inline-banner-settings.js +1 -1
  83. package/dist/components/ds-inline-banner-settings.js.map +1 -1
  84. package/dist/components/ds-input-date.js +1 -1
  85. package/dist/components/ds-input-time.js +1 -1
  86. package/dist/components/ds-input.js +1 -1
  87. package/dist/components/ds-map-cluster-marker.js +1 -1
  88. package/dist/components/ds-map-entity-marker.js +1 -1
  89. package/dist/components/ds-map-marker.js +1 -1
  90. package/dist/components/ds-markdown.js +1 -1
  91. package/dist/components/ds-menu.js +1 -1
  92. package/dist/components/ds-message-actions.js +1 -1
  93. package/dist/components/ds-message-bubble.js +1 -1
  94. package/dist/components/ds-message-composer.js +1 -1
  95. package/dist/components/ds-message-scroller.js +1 -1
  96. package/dist/components/ds-message.js +1 -1
  97. package/dist/components/ds-mobile-bar-nav.js +1 -1
  98. package/dist/components/ds-mobile-header.js +1 -1
  99. package/dist/components/ds-mobile-section-switcher.js +1 -1
  100. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  101. package/dist/components/ds-modal.js +1 -1
  102. package/dist/components/ds-navigation-tab-group.js +1 -1
  103. package/dist/components/ds-pagination.js +1 -1
  104. package/dist/components/ds-panel-nav.js +1 -1
  105. package/dist/components/ds-panel-sub-nav.js +1 -1
  106. package/dist/components/ds-panel-tool-header.js +1 -1
  107. package/dist/components/ds-panel-tool-search.js +1 -1
  108. package/dist/components/ds-panel-tools.js +1 -1
  109. package/dist/components/ds-paper-texture.js +1 -1
  110. package/dist/components/ds-radio-tile.js +1 -1
  111. package/dist/components/ds-radio.js +1 -1
  112. package/dist/components/ds-score.js +1 -1
  113. package/dist/components/ds-scroll-overlay.js +1 -1
  114. package/dist/components/ds-select-toggle.js +1 -1
  115. package/dist/components/ds-select.js +1 -1
  116. package/dist/components/ds-setting-row-checkbox.js +1 -1
  117. package/dist/components/ds-setting-row-radio.js +1 -1
  118. package/dist/components/ds-setting-row-radio.js.map +1 -1
  119. package/dist/components/ds-setting-row-toggle.js +1 -1
  120. package/dist/components/ds-setting-row-toggle.js.map +1 -1
  121. package/dist/components/ds-shell-app.js +1 -1
  122. package/dist/components/ds-shell-app.js.map +1 -1
  123. package/dist/components/ds-shell-page.js +1 -1
  124. package/dist/components/ds-shell-tools.js +1 -1
  125. package/dist/components/ds-skeleton.js +1 -1
  126. package/dist/components/ds-slider.js +1 -1
  127. package/dist/components/ds-swatch-picker.js +1 -1
  128. package/dist/components/ds-switch.js +1 -1
  129. package/dist/components/ds-tab-group.js +1 -1
  130. package/dist/components/ds-table.js +1 -1
  131. package/dist/components/ds-table.js.map +1 -1
  132. package/dist/components/ds-tag.js +1 -1
  133. package/dist/components/ds-text.js +1 -1
  134. package/dist/components/ds-textarea.js +1 -1
  135. package/dist/components/ds-time-picker.js +1 -1
  136. package/dist/components/ds-toast.js +1 -1
  137. package/dist/components/ds-tooltip-chart.js +1 -1
  138. package/dist/components/ds-tooltip.js +1 -1
  139. package/dist/components/ds-typing-indicator.js +1 -1
  140. package/dist/components/p-3Xp9hXbL.js +2 -0
  141. package/dist/components/{p-BI6L3JoU.js.map → p-3Xp9hXbL.js.map} +1 -1
  142. package/dist/components/{p-6QYDIPd1.js → p-3dG9v5Aw.js} +2 -2
  143. package/dist/components/{p-C4kVTIBc.js → p-5PReYMiY.js} +2 -2
  144. package/dist/components/{p-CzTJAO2J.js → p-8fddX3V3.js} +2 -2
  145. package/dist/components/{p-Cw1ljgW1.js → p-9u2WDF0J.js} +2 -2
  146. package/dist/components/{p-M9pOLcyK.js → p-B-ChwMFE.js} +2 -2
  147. package/dist/components/{p-BvlkO__o.js → p-BAIYOobl.js} +2 -2
  148. package/dist/components/{p-BrJebF5t.js → p-BIMW5_Z7.js} +2 -2
  149. package/dist/components/{p-BkKdzYZP.js → p-BMI0F08u.js} +2 -2
  150. package/dist/components/{p-D0kzIzGQ.js → p-BV8sNEVP.js} +2 -2
  151. package/dist/components/{p-DNtwJJOC.js → p-BVUdtuog.js} +2 -2
  152. package/dist/components/{p-CgYDQSLW.js → p-BYo1-6b5.js} +2 -2
  153. package/dist/components/{p-CJ-igzsZ.js → p-BZbJkJpG.js} +2 -2
  154. package/dist/components/{p-D2rASHHq.js → p-BcYzHn1E.js} +2 -2
  155. package/dist/components/{p-0EpjqRWc.js → p-BfRAVR40.js} +2 -2
  156. package/dist/components/p-BhbniDw4.js +2 -0
  157. package/dist/components/p-BhbniDw4.js.map +1 -0
  158. package/dist/components/{p-BBZz2Dvg.js → p-BoWpIl_m.js} +2 -2
  159. package/dist/components/{p-529k8euH.js → p-BpPHCF63.js} +2 -2
  160. package/dist/components/{p-DXEInGEq.js → p-By_jYvHp.js} +2 -2
  161. package/dist/components/p-C5HGwzy9.js +2 -0
  162. package/dist/components/{p-CXF8wj9I.js.map → p-C5HGwzy9.js.map} +1 -1
  163. package/dist/components/{p-D4r6oWyQ.js → p-C860ilDn.js} +2 -2
  164. package/dist/components/{p-DcVK0W4X.js → p-CEHhx4VQ.js} +2 -2
  165. package/dist/components/p-CGtq7TnC.js +2 -0
  166. package/dist/components/p-CGtq7TnC.js.map +1 -0
  167. package/dist/components/p-CL0FpMKo.js +2 -0
  168. package/dist/components/{p-BjYoM1f8.js.map → p-CL0FpMKo.js.map} +1 -1
  169. package/dist/components/{p-CEm0AoDR.js → p-CQnjpuMX.js} +2 -2
  170. package/dist/components/{p-4qKHg502.js → p-CUG4EkKn.js} +2 -2
  171. package/dist/components/{p-CTstnsLe.js → p-CYmz92EF.js} +2 -2
  172. package/dist/components/{p-YE1r-XSR.js → p-CbP9ASmI.js} +2 -2
  173. package/dist/components/{p-C31AjGbg.js → p-CbPGO7vl.js} +2 -2
  174. package/dist/components/{p-DfphSI9S.js → p-CdMIA5hz.js} +2 -2
  175. package/dist/components/{p-Ds58qo_J.js → p-CeaIWw1Q.js} +2 -2
  176. package/dist/components/{p-DxVokKm8.js → p-Cfqvxxs2.js} +2 -2
  177. package/dist/components/{p-CsPqGA8B.js → p-CpqLGzv4.js} +2 -2
  178. package/dist/components/p-D538svhW.js +2 -0
  179. package/dist/components/p-D538svhW.js.map +1 -0
  180. package/dist/components/{p-DKg181YU.js → p-DFR9hqDU.js} +2 -2
  181. package/dist/components/{p-DEJLfD7k.js → p-DKZP3jCY.js} +2 -2
  182. package/dist/components/{p-CTAF7SkL.js → p-DMPn_dt7.js} +2 -2
  183. package/dist/components/{p-CYRTkP1A.js → p-DYruK9cb.js} +2 -2
  184. package/dist/components/p-DcvPY30Q.js +2 -0
  185. package/dist/components/p-DcvPY30Q.js.map +1 -0
  186. package/dist/components/{p-CqfYCn-e.js → p-DiUaIJ91.js} +2 -2
  187. package/dist/components/{p-Cqg9T781.js → p-DimFbKZH.js} +2 -2
  188. package/dist/components/{p-DHmHllUM.js → p-DuhJ49iN.js} +2 -2
  189. package/dist/components/{p-D_iZPukF.js → p-G6r6yYg8.js} +2 -2
  190. package/dist/components/{p-87FjWil8.js → p-IQdLCfJJ.js} +2 -2
  191. package/dist/components/{p-CAARHqjE.js → p-KTaiJztz.js} +2 -2
  192. package/dist/components/{p-BM-UYlIS.js → p-N-2CZze7.js} +2 -2
  193. package/dist/components/{p-Ch00yccW.js → p-Nx52go85.js} +2 -2
  194. package/dist/components/{p-DDawngok.js → p-P2-eHQJU.js} +2 -2
  195. package/dist/components/{p-CC4X8rpT.js → p-WEffoQQD.js} +2 -2
  196. package/dist/components/{p-vrRbdZAI.js → p-nakO4viw.js} +2 -2
  197. package/dist/components/{p-BC9xYdJD.js → p-pkJ3X3s7.js} +2 -2
  198. package/dist/components/{p-C6VWVB87.js → p-r_e6_0nP.js} +2 -2
  199. package/dist/docs/components.json +656 -7
  200. package/dist/lint/index.js +1 -1
  201. package/dist/mcp-data/registry/card-action-center.json +23 -3
  202. package/dist/mcp-data/registry/card-chart.json +23 -3
  203. package/dist/mcp-data/registry/card-navigation.json +23 -3
  204. package/dist/mcp-data/registry/card-overview.json +2 -2
  205. package/dist/mcp-data/registry/card-setting.json +23 -3
  206. package/dist/mcp-data/registry/card-settings-scope.json +22 -2
  207. package/dist/mcp-data/registry/field.json +22 -2
  208. package/dist/mcp-data/registry/inline-banner-settings.json +22 -2
  209. package/dist/mcp-data/registry/pagination.json +22 -2
  210. package/dist/mcp-data/registry/radio.json +22 -2
  211. package/dist/mcp-data/registry/registry.json +119 -18
  212. package/dist/mcp-data/registry/setting-row-radio.json +22 -2
  213. package/dist/mcp-data/registry/setting-row-toggle.json +23 -3
  214. package/dist/mcp-data/registry/shell-app.json +3 -2
  215. package/dist/mcp-data/registry/skeleton.json +120 -9
  216. package/dist/mcp-data/registry/table.json +7 -6
  217. package/dist/types/components/CardActionCenter/CardActionCenter.d.ts +2 -0
  218. package/dist/types/components/CardChart/CardChart.d.ts +2 -0
  219. package/dist/types/components/CardNavigation/CardNavigation.d.ts +2 -0
  220. package/dist/types/components/CardSetting/CardSetting.d.ts +2 -0
  221. package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +2 -0
  222. package/dist/types/components/Field/Field.d.ts +3 -0
  223. package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +2 -0
  224. package/dist/types/components/Pagination/Pagination.d.ts +3 -0
  225. package/dist/types/components/Radio/Radio.d.ts +2 -0
  226. package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +2 -0
  227. package/dist/types/components/SettingRowToggle/SettingRowToggle.d.ts +2 -0
  228. package/dist/types/components/Skeleton/Skeleton.d.ts +24 -1
  229. package/dist/types/components/Skeleton/index.d.ts +1 -1
  230. package/dist/types/components/Table/Table.d.ts +1 -1
  231. package/dist/types/components.d.ts +180 -4
  232. package/dist/vue/ds-card-action-center.js +1 -0
  233. package/dist/vue/ds-card-chart.js +1 -0
  234. package/dist/vue/ds-card-navigation.js +1 -0
  235. package/dist/vue/ds-card-setting.js +1 -0
  236. package/dist/vue/ds-card-settings-scope.js +1 -0
  237. package/dist/vue/ds-field.js +2 -1
  238. package/dist/vue/ds-inline-banner-settings.js +2 -1
  239. package/dist/vue/ds-pagination.js +1 -0
  240. package/dist/vue/ds-radio.js +1 -0
  241. package/dist/vue/ds-setting-row-radio.js +2 -1
  242. package/dist/vue/ds-setting-row-toggle.js +1 -0
  243. package/dist/vue/ds-skeleton.js +5 -0
  244. package/package.json +1 -1
  245. package/dist/components/p-BI6L3JoU.js +0 -2
  246. package/dist/components/p-BjYoM1f8.js +0 -2
  247. package/dist/components/p-CXF8wj9I.js +0 -2
  248. package/dist/components/p-Cnzry0_v.js +0 -2
  249. package/dist/components/p-Cnzry0_v.js.map +0 -1
  250. package/dist/components/p-DwcAROOo.js +0 -2
  251. package/dist/components/p-DwcAROOo.js.map +0 -1
  252. package/dist/components/p-hWKa8Jn8.js +0 -2
  253. package/dist/components/p-hWKa8Jn8.js.map +0 -1
  254. package/dist/components/p-xCqqM1Rg.js +0 -2
  255. package/dist/components/p-xCqqM1Rg.js.map +0 -1
  256. /package/dist/components/{p-6QYDIPd1.js.map → p-3dG9v5Aw.js.map} +0 -0
  257. /package/dist/components/{p-C4kVTIBc.js.map → p-5PReYMiY.js.map} +0 -0
  258. /package/dist/components/{p-CzTJAO2J.js.map → p-8fddX3V3.js.map} +0 -0
  259. /package/dist/components/{p-Cw1ljgW1.js.map → p-9u2WDF0J.js.map} +0 -0
  260. /package/dist/components/{p-M9pOLcyK.js.map → p-B-ChwMFE.js.map} +0 -0
  261. /package/dist/components/{p-BvlkO__o.js.map → p-BAIYOobl.js.map} +0 -0
  262. /package/dist/components/{p-BrJebF5t.js.map → p-BIMW5_Z7.js.map} +0 -0
  263. /package/dist/components/{p-BkKdzYZP.js.map → p-BMI0F08u.js.map} +0 -0
  264. /package/dist/components/{p-D0kzIzGQ.js.map → p-BV8sNEVP.js.map} +0 -0
  265. /package/dist/components/{p-DNtwJJOC.js.map → p-BVUdtuog.js.map} +0 -0
  266. /package/dist/components/{p-CgYDQSLW.js.map → p-BYo1-6b5.js.map} +0 -0
  267. /package/dist/components/{p-CJ-igzsZ.js.map → p-BZbJkJpG.js.map} +0 -0
  268. /package/dist/components/{p-D2rASHHq.js.map → p-BcYzHn1E.js.map} +0 -0
  269. /package/dist/components/{p-0EpjqRWc.js.map → p-BfRAVR40.js.map} +0 -0
  270. /package/dist/components/{p-BBZz2Dvg.js.map → p-BoWpIl_m.js.map} +0 -0
  271. /package/dist/components/{p-529k8euH.js.map → p-BpPHCF63.js.map} +0 -0
  272. /package/dist/components/{p-DXEInGEq.js.map → p-By_jYvHp.js.map} +0 -0
  273. /package/dist/components/{p-D4r6oWyQ.js.map → p-C860ilDn.js.map} +0 -0
  274. /package/dist/components/{p-DcVK0W4X.js.map → p-CEHhx4VQ.js.map} +0 -0
  275. /package/dist/components/{p-CEm0AoDR.js.map → p-CQnjpuMX.js.map} +0 -0
  276. /package/dist/components/{p-4qKHg502.js.map → p-CUG4EkKn.js.map} +0 -0
  277. /package/dist/components/{p-CTstnsLe.js.map → p-CYmz92EF.js.map} +0 -0
  278. /package/dist/components/{p-YE1r-XSR.js.map → p-CbP9ASmI.js.map} +0 -0
  279. /package/dist/components/{p-C31AjGbg.js.map → p-CbPGO7vl.js.map} +0 -0
  280. /package/dist/components/{p-DfphSI9S.js.map → p-CdMIA5hz.js.map} +0 -0
  281. /package/dist/components/{p-Ds58qo_J.js.map → p-CeaIWw1Q.js.map} +0 -0
  282. /package/dist/components/{p-DxVokKm8.js.map → p-Cfqvxxs2.js.map} +0 -0
  283. /package/dist/components/{p-CsPqGA8B.js.map → p-CpqLGzv4.js.map} +0 -0
  284. /package/dist/components/{p-DKg181YU.js.map → p-DFR9hqDU.js.map} +0 -0
  285. /package/dist/components/{p-DEJLfD7k.js.map → p-DKZP3jCY.js.map} +0 -0
  286. /package/dist/components/{p-CTAF7SkL.js.map → p-DMPn_dt7.js.map} +0 -0
  287. /package/dist/components/{p-CYRTkP1A.js.map → p-DYruK9cb.js.map} +0 -0
  288. /package/dist/components/{p-CqfYCn-e.js.map → p-DiUaIJ91.js.map} +0 -0
  289. /package/dist/components/{p-Cqg9T781.js.map → p-DimFbKZH.js.map} +0 -0
  290. /package/dist/components/{p-DHmHllUM.js.map → p-DuhJ49iN.js.map} +0 -0
  291. /package/dist/components/{p-D_iZPukF.js.map → p-G6r6yYg8.js.map} +0 -0
  292. /package/dist/components/{p-87FjWil8.js.map → p-IQdLCfJJ.js.map} +0 -0
  293. /package/dist/components/{p-CAARHqjE.js.map → p-KTaiJztz.js.map} +0 -0
  294. /package/dist/components/{p-BM-UYlIS.js.map → p-N-2CZze7.js.map} +0 -0
  295. /package/dist/components/{p-Ch00yccW.js.map → p-Nx52go85.js.map} +0 -0
  296. /package/dist/components/{p-DDawngok.js.map → p-P2-eHQJU.js.map} +0 -0
  297. /package/dist/components/{p-CC4X8rpT.js.map → p-WEffoQQD.js.map} +0 -0
  298. /package/dist/components/{p-vrRbdZAI.js.map → p-nakO4viw.js.map} +0 -0
  299. /package/dist/components/{p-BC9xYdJD.js.map → p-pkJ3X3s7.js.map} +0 -0
  300. /package/dist/components/{p-C6VWVB87.js.map → p-r_e6_0nP.js.map} +0 -0
@@ -59,11 +59,14 @@
59
59
  "Shimmer is on by default and may be disabled for a static placeholder. Reduced motion always produces the static final shape.",
60
60
  "Rounded is an optional visual treatment for icon and control atoms rather than a semantic state.",
61
61
  "Omitted background is for primary and secondary surfaces. Explicit faint documents a faint parent while using the same standard base and shimmer tokens; other contexts use matching surface tokens.",
62
- "The owner decides whether to delay initial visibility and when to replace the complete composition."
62
+ "The owner decides whether to delay initial visibility and when to replace the complete composition.",
63
+ "preserveLayout uses projected text or a control as the hidden, inert size source, retaining wrapping and responsive dimensions; set isLoading false to reveal that same mounted content. Use one atom per text or control, not a whole page.",
64
+ "Control appearance mirrors the pending control: filled masks the entire container; outlined retains its border with icon or text atoms; borderless masks only those contents. Set controlContent to match the control anatomy and preserveLayout to retain its exact footprint."
63
65
  ],
64
66
  "responsiveBehavior": [
65
67
  "The owning layout changes placeholder count, width, visibility, and arrangement to match its real responsive content.",
66
- "Skeleton does not infer breakpoints or rearrange sibling atoms."
68
+ "Set collapseLabel on a control skeleton when its real control opts into compact table-caption behavior. It follows the same table or standalone data-toolbar measurement, replacing icon-and-label anatomy with a centered icon while preserving the enclosing control footprint.",
69
+ "Other skeletons do not infer breakpoints or rearrange sibling atoms. Icon canvases retain their square geometry in flex layouts."
67
70
  ],
68
71
  "frameworkCaveats": {
69
72
  "customElements": [
@@ -103,7 +106,11 @@
103
106
  "textVariant",
104
107
  "iconSize",
105
108
  "controlSize",
106
- "rounded"
109
+ "rounded",
110
+ "preserveLayout",
111
+ "isLoading",
112
+ "controlAppearance",
113
+ "controlContent"
107
114
  ]
108
115
  },
109
116
  {
@@ -116,7 +123,9 @@
116
123
  "reason": "The component owns its surface and interaction treatment; use its semantic presentation props or compose an application-owned surrounding surface.",
117
124
  "props": [
118
125
  "background",
119
- "variant"
126
+ "variant",
127
+ "controlAppearance",
128
+ "controlContent"
120
129
  ]
121
130
  }
122
131
  ],
@@ -133,6 +142,33 @@
133
142
  "mutable": false,
134
143
  "description": "Actual parent surface context. Omit on primary and secondary surfaces."
135
144
  },
145
+ "collapseLabel": {
146
+ "type": "boolean",
147
+ "resolvedType": "boolean",
148
+ "attribute": "collapse-label",
149
+ "default": "false",
150
+ "required": false,
151
+ "mutable": false,
152
+ "description": "Follow the owning table or data toolbar's compact icon-only control presentation."
153
+ },
154
+ "controlAppearance": {
155
+ "type": "SkeletonControlAppearance",
156
+ "resolvedType": "\"borderless\" | \"filled\" | \"outlined\"",
157
+ "attribute": "control-appearance",
158
+ "default": "'filled'",
159
+ "required": false,
160
+ "mutable": false,
161
+ "description": "Filled controls replace the entire shape; other appearances retain the frame and mask its contents."
162
+ },
163
+ "controlContent": {
164
+ "type": "SkeletonControlContent",
165
+ "resolvedType": "\"icon\" | \"icon-label\" | \"icon-label-icon\" | \"label\" | \"label-icon\"",
166
+ "attribute": "control-content",
167
+ "default": "'label'",
168
+ "required": false,
169
+ "mutable": false,
170
+ "description": "Content anatomy for outlined and borderless control placeholders."
171
+ },
136
172
  "controlSize": {
137
173
  "type": "ControlSize",
138
174
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -151,6 +187,24 @@
151
187
  "mutable": false,
152
188
  "description": "Iconography token whose square canvas defines the icon canvas."
153
189
  },
190
+ "isLoading": {
191
+ "type": "boolean",
192
+ "resolvedType": "boolean",
193
+ "attribute": "is-loading",
194
+ "default": "true",
195
+ "required": false,
196
+ "mutable": false,
197
+ "description": "With preserveLayout, reveal the same projected content when loading completes."
198
+ },
199
+ "preserveLayout": {
200
+ "type": "boolean",
201
+ "resolvedType": "boolean",
202
+ "attribute": "preserve-layout",
203
+ "default": "false",
204
+ "required": false,
205
+ "mutable": false,
206
+ "description": "Derive geometry from a projected control or text instead of estimating its footprint."
207
+ },
154
208
  "rounded": {
155
209
  "type": "boolean",
156
210
  "resolvedType": "boolean",
@@ -197,7 +251,12 @@
197
251
  },
198
252
  "events": [],
199
253
  "methods": [],
200
- "slots": []
254
+ "slots": [
255
+ {
256
+ "name": "",
257
+ "description": "Real text or a control whose footprint is retained with preserveLayout."
258
+ }
259
+ ]
201
260
  },
202
261
  "props": {
203
262
  "background": {
@@ -208,6 +267,33 @@
208
267
  "mutable": false,
209
268
  "description": "Actual parent surface context. Omit on primary and secondary surfaces."
210
269
  },
270
+ "collapseLabel": {
271
+ "type": "boolean",
272
+ "resolvedType": "boolean",
273
+ "attribute": "collapse-label",
274
+ "default": "false",
275
+ "required": false,
276
+ "mutable": false,
277
+ "description": "Follow the owning table or data toolbar's compact icon-only control presentation."
278
+ },
279
+ "controlAppearance": {
280
+ "type": "SkeletonControlAppearance",
281
+ "resolvedType": "\"borderless\" | \"filled\" | \"outlined\"",
282
+ "attribute": "control-appearance",
283
+ "default": "'filled'",
284
+ "required": false,
285
+ "mutable": false,
286
+ "description": "Filled controls replace the entire shape; other appearances retain the frame and mask its contents."
287
+ },
288
+ "controlContent": {
289
+ "type": "SkeletonControlContent",
290
+ "resolvedType": "\"icon\" | \"icon-label\" | \"icon-label-icon\" | \"label\" | \"label-icon\"",
291
+ "attribute": "control-content",
292
+ "default": "'label'",
293
+ "required": false,
294
+ "mutable": false,
295
+ "description": "Content anatomy for outlined and borderless control placeholders."
296
+ },
211
297
  "controlSize": {
212
298
  "type": "ControlSize",
213
299
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -226,6 +312,24 @@
226
312
  "mutable": false,
227
313
  "description": "Iconography token whose square canvas defines the icon canvas."
228
314
  },
315
+ "isLoading": {
316
+ "type": "boolean",
317
+ "resolvedType": "boolean",
318
+ "attribute": "is-loading",
319
+ "default": "true",
320
+ "required": false,
321
+ "mutable": false,
322
+ "description": "With preserveLayout, reveal the same projected content when loading completes."
323
+ },
324
+ "preserveLayout": {
325
+ "type": "boolean",
326
+ "resolvedType": "boolean",
327
+ "attribute": "preserve-layout",
328
+ "default": "false",
329
+ "required": false,
330
+ "mutable": false,
331
+ "description": "Derive geometry from a projected control or text instead of estimating its footprint."
332
+ },
229
333
  "rounded": {
230
334
  "type": "boolean",
231
335
  "resolvedType": "boolean",
@@ -272,7 +376,12 @@
272
376
  },
273
377
  "events": [],
274
378
  "methods": [],
275
- "slots": [],
379
+ "slots": [
380
+ {
381
+ "name": "",
382
+ "description": "Real text or a control whose footprint is retained with preserveLayout."
383
+ }
384
+ ],
276
385
  "exports": {
277
386
  "customElement": "ds-skeleton",
278
387
  "react": "DsSkeleton",
@@ -311,16 +420,18 @@
311
420
  "@ds-mo/ui",
312
421
  "@ds-mo/tokens"
313
422
  ],
314
- "registryDependencies": [],
423
+ "registryDependencies": [
424
+ "skeleton"
425
+ ],
315
426
  "files": [
316
427
  {
317
428
  "path": "src/wc/components/Skeleton/Skeleton.css",
318
- "content": "@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/shimmer.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n vertical-align: middle;\n --ds-skeleton-base: var(--color-foreground-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer);\n}\n\n.skeleton__shape {\n --ds-shimmer-surface-base: var(--ds-skeleton-base);\n\n display: block;\n width: 100%;\n height: 100%;\n flex: 0 0 auto;\n background-color: var(--ds-skeleton-base);\n border-radius: var(--dimension-radius-025);\n}\n\n/* ── Background context ────────────────────────────────────────────────── */\n\n:host(.skeleton--background-medium) {\n --ds-skeleton-base: var(--color-foreground-on-medium-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-medium-background);\n}\n\n:host(.skeleton--background-bold) {\n --ds-skeleton-base: var(--color-foreground-on-bold-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-bold-background);\n}\n\n:host(.skeleton--background-strong) {\n --ds-skeleton-base: var(--color-foreground-on-strong-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-strong-background);\n}\n\n:host(.skeleton--background-translucent) {\n --ds-skeleton-base: var(--color-translucent-foreground-quaternary);\n --ds-shimmer: var(--color-translucent-shimmer);\n}\n\n:host(.skeleton--background-inverted) {\n --ds-skeleton-base: var(--color-inverted-foreground-quaternary);\n --ds-shimmer: var(--color-inverted-shimmer);\n}\n\n:host(.skeleton--background-media) {\n --ds-skeleton-base: var(--color-media-foreground-quaternary);\n --ds-shimmer: var(--color-media-shimmer);\n}\n\n:host(.skeleton--background-always-dark) {\n --ds-skeleton-base: var(--color-always-dark-foreground-quaternary);\n --ds-shimmer: var(--color-always-dark-shimmer);\n}\n\n:host(.skeleton--background-navigation) {\n --ds-skeleton-base: var(--color-navigation-foreground-quaternary);\n --ds-shimmer: var(--color-navigation-shimmer);\n}\n\n/* ── Text ──────────────────────────────────────────────────────────────── */\n\n:host(.skeleton--text) {\n width: 100%;\n height: var(--ds-skeleton-canvas-size);\n padding-block: 0;\n}\n\n:host(.skeleton--text) .skeleton__shape {\n height: 75%;\n}\n\n:host(.skeleton--text-text-display-medium) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-3xl);\n}\n:host(.skeleton--text-text-display-small) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-2xl);\n}\n:host(.skeleton--text-text-title-large) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-xl);\n}\n:host(.skeleton--text-text-title-medium),\n:host(.skeleton--text-text-body-large) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-lg);\n}\n:host(.skeleton--text-text-title-small),\n:host(.skeleton--text-text-body-medium) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-md);\n}\n:host(.skeleton--text-text-body-small) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-sm);\n}\n:host(.skeleton--text-text-caption) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-xs);\n}\n\n/* ── Icon ──────────────────────────────────────────────────────────────── */\n\n:host(.skeleton--icon) {\n width: var(--ds-skeleton-canvas-size);\n height: var(--ds-skeleton-canvas-size);\n padding: 0;\n}\n\n:host(.skeleton--icon) .skeleton__shape {\n width: 75%;\n height: 75%;\n}\n\n:host(.skeleton--icon.skeleton--rounded) .skeleton__shape {\n border-radius: var(--dimension-radius-half);\n}\n\n:host(.skeleton--icon-xs) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-xs);\n}\n:host(.skeleton--icon-sm) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-sm);\n}\n:host(.skeleton--icon-md) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-md);\n}\n:host(.skeleton--icon-lg) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-lg);\n}\n:host(.skeleton--icon-xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-xl);\n}\n:host(.skeleton--icon-2xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-2xl);\n}\n:host(.skeleton--icon-3xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-3xl);\n}\n\n/* ── Control ───────────────────────────────────────────────────────────── */\n\n:host(.skeleton--control) {\n width: 100%;\n height: var(--ds-control-height);\n}\n\n:host(.skeleton--control) .skeleton__shape {\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n}\n\n:host(.skeleton--control.skeleton--rounded) .skeleton__shape {\n border-radius: var(--dimension-radius-half);\n}\n\n@media (forced-colors: active) {\n .skeleton__shape {\n background-color: var(--ds-forced-color-disabled);\n }\n}\n",
429
+ "content": "@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/shimmer.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n vertical-align: middle;\n --ds-skeleton-base: var(--color-foreground-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer);\n --ds-skeleton-border: var(--color-border-secondary);\n}\n\n.skeleton__shape {\n --ds-shimmer-surface-base: var(--ds-skeleton-base);\n\n display: block;\n width: 100%;\n height: 100%;\n flex: 0 0 auto;\n background-color: var(--ds-skeleton-base);\n border-radius: var(--dimension-radius-025);\n}\n\n/* ── Background context ────────────────────────────────────────────────── */\n\n:host(.skeleton--background-medium) {\n --ds-skeleton-border: var(--color-border-on-medium-background-secondary);\n --ds-skeleton-base: var(--color-foreground-on-medium-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-medium-background);\n}\n\n:host(.skeleton--background-bold) {\n --ds-skeleton-border: var(--color-border-on-bold-background-secondary);\n --ds-skeleton-base: var(--color-foreground-on-bold-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-bold-background);\n}\n\n:host(.skeleton--background-strong) {\n --ds-skeleton-border: var(--color-border-on-strong-background-secondary);\n --ds-skeleton-base: var(--color-foreground-on-strong-background-quaternary);\n --ds-shimmer: var(--color-shimmer-shimmer-on-strong-background);\n}\n\n:host(.skeleton--background-translucent) {\n --ds-skeleton-border: var(--color-translucent-border-secondary);\n --ds-skeleton-base: var(--color-translucent-foreground-quaternary);\n --ds-shimmer: var(--color-translucent-shimmer);\n}\n\n:host(.skeleton--background-inverted) {\n --ds-skeleton-border: var(--color-inverted-border-secondary);\n --ds-skeleton-base: var(--color-inverted-foreground-quaternary);\n --ds-shimmer: var(--color-inverted-shimmer);\n}\n\n:host(.skeleton--background-media) {\n --ds-skeleton-border: var(--color-media-border-secondary);\n --ds-skeleton-base: var(--color-media-foreground-quaternary);\n --ds-shimmer: var(--color-media-shimmer);\n}\n\n:host(.skeleton--background-always-dark) {\n --ds-skeleton-border: var(--color-always-dark-border-secondary);\n --ds-skeleton-base: var(--color-always-dark-foreground-quaternary);\n --ds-shimmer: var(--color-always-dark-shimmer);\n}\n\n:host(.skeleton--background-navigation) {\n --ds-skeleton-base: var(--color-navigation-foreground-quaternary);\n --ds-shimmer: var(--color-navigation-shimmer);\n}\n\n/* ── Text ──────────────────────────────────────────────────────────────── */\n\n:host(.skeleton--text) {\n width: 100%;\n height: var(--ds-skeleton-canvas-size);\n padding-block: 0;\n}\n\n:host(.skeleton--text) .skeleton__shape {\n height: 75%;\n}\n\n:host(.skeleton--text-text-display-medium) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-3xl);\n}\n:host(.skeleton--text-text-display-small) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-2xl);\n}\n:host(.skeleton--text-text-title-large) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-xl);\n}\n:host(.skeleton--text-text-title-medium),\n:host(.skeleton--text-text-body-large) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-lg);\n}\n:host(.skeleton--text-text-title-small),\n:host(.skeleton--text-text-body-medium) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-md);\n}\n:host(.skeleton--text-text-body-small) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-sm);\n}\n:host(.skeleton--text-text-caption) {\n --ds-skeleton-canvas-size: var(--typography-lineheight-xs);\n}\n\n/* ── Icon ──────────────────────────────────────────────────────────────── */\n\n:host(.skeleton--icon) {\n flex-shrink: 0;\n width: var(--ds-skeleton-canvas-size);\n height: var(--ds-skeleton-canvas-size);\n padding: 0;\n}\n\n:host(.skeleton--icon) .skeleton__shape {\n width: 75%;\n height: 75%;\n}\n\n:host(.skeleton--icon.skeleton--rounded) .skeleton__shape {\n border-radius: var(--dimension-radius-half);\n}\n\n:host(.skeleton--icon-xs) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-xs);\n}\n:host(.skeleton--icon-sm) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-sm);\n}\n:host(.skeleton--icon-md) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-md);\n}\n:host(.skeleton--icon-lg) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-lg);\n}\n:host(.skeleton--icon-xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-xl);\n}\n:host(.skeleton--icon-2xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-2xl);\n}\n:host(.skeleton--icon-3xl) {\n --ds-skeleton-canvas-size: var(--dimension-iconography-3xl);\n}\n\n/* ── Control ───────────────────────────────────────────────────────────── */\n\n:host(.skeleton--control) {\n width: 100%;\n height: var(--ds-control-height);\n}\n\n:host(.skeleton--control) .skeleton__shape {\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n}\n\n:host(.skeleton--control.skeleton--rounded) .skeleton__shape {\n border-radius: var(--dimension-radius-half);\n}\n\n.skeleton__control {\n width: 100%;\n height: 100%;\n min-width: 0;\n}\n\n.skeleton__control--icon {\n justify-content: center;\n padding: 0;\n}\n\n.skeleton__control-label {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n overflow: hidden;\n}\n\n:host(.skeleton--control-outlined) .skeleton__control {\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-012) var(--ds-skeleton-border);\n}\n\n:host(.skeleton--rounded) .skeleton__control {\n border-radius: var(--dimension-radius-half);\n}\n\n@media (forced-colors: active) {\n .skeleton__shape {\n background-color: var(--ds-forced-color-disabled);\n }\n :host(.skeleton--control-outlined) .skeleton__control {\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-disabled);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n\n/* Projected content supplies its intrinsic size, wrapping and responsive metrics. */\n:host(.skeleton--preserve-layout) {\n display: grid;\n width: auto;\n height: auto;\n align-items: stretch;\n justify-content: stretch;\n padding: 0;\n}\n\n:host(.skeleton--preserve-layout) .skeleton__source,\n:host(.skeleton--preserve-layout) .skeleton__control,\n:host(.skeleton--preserve-layout) .skeleton__shape {\n grid-area: 1 / 1;\n min-width: 0;\n}\n\n.skeleton__source {\n display: grid;\n visibility: hidden;\n}\n\n:host(.skeleton--preserve-layout) .skeleton__shape {\n height: 100%;\n width: 100%;\n}\n\n:host(.skeleton--preserve-layout.skeleton--text) .skeleton__shape {\n /* Geometry only: inherited text alpha must not dim the skeleton's own token. */\n mask-image: repeating-linear-gradient(\n to bottom,\n transparent 0,\n transparent calc(var(--ds-skeleton-canvas-size) * 0.125),\n rgb(from currentColor r g b / 1) calc(var(--ds-skeleton-canvas-size) * 0.125),\n rgb(from currentColor r g b / 1) calc(var(--ds-skeleton-canvas-size) * 0.875),\n transparent calc(var(--ds-skeleton-canvas-size) * 0.875),\n transparent var(--ds-skeleton-canvas-size)\n );\n}\n\n:host(.skeleton--content-ready) .skeleton__source {\n visibility: inherit;\n}\n",
319
430
  "type": "registry:ui"
320
431
  },
321
432
  {
322
433
  "path": "src/wc/components/Skeleton/Skeleton.tsx",
323
- "content": "import { Component, Prop, h, Host } from '@stencil/core';\nimport type { IconSize } from '../Icon/Icon';\nimport type { TextVariant } from '../Text/text-types';\nimport type { ControlSize } from '../../utils/control-text';\n\nexport type SkeletonVariant = 'text' | 'icon' | 'control';\nexport type SkeletonBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'navigation'\n | 'always-dark';\n\n@Component({\n tag: 'ds-skeleton',\n styleUrl: 'Skeleton.css',\n shadow: true,\n})\nexport class Skeleton {\n @Prop() variant: SkeletonVariant = 'text';\n /** Text metric recipe whose line-height defines the text canvas. */\n @Prop() textVariant: TextVariant = 'text-body-medium';\n /** Iconography token whose square canvas defines the icon canvas. */\n @Prop() iconSize: IconSize = 'md';\n /** Shared control-density size whose height defines the control canvas. */\n @Prop() controlSize: ControlSize = 'md';\n /** Width of text and control skeleton canvases. Numbers resolve to px. Ignored for icons. */\n @Prop() width: string | number | undefined;\n /** Round icon skeletons into circles and control skeletons into pills. Ignored for text. */\n @Prop() rounded: boolean = false;\n /** Whether to show the shimmer animation. */\n @Prop() shimmer: boolean = true;\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: SkeletonBackground | undefined;\n\n private get widthCss() {\n const v = this.width;\n if (v == null) return undefined;\n return typeof v === 'number' ? `${v}px` : v;\n }\n\n render() {\n return (\n <Host\n aria-hidden=\"true\"\n class={{\n skeleton: true,\n [`skeleton--${this.variant}`]: true,\n [`skeleton--text-${this.textVariant}`]: this.variant === 'text',\n [`skeleton--icon-${this.iconSize}`]: this.variant === 'icon',\n [`ds-control--${this.controlSize}`]: this.variant === 'control',\n [`skeleton--background-${this.background}`]: !!this.background,\n 'skeleton--rounded': this.variant !== 'text' && this.rounded,\n }}\n style={this.variant === 'icon' ? undefined : { width: this.widthCss }}\n >\n <span\n class={{\n skeleton__shape: true,\n 'ds-shimmer-surface': this.shimmer,\n }}\n />\n </Host>\n );\n }\n}\n",
434
+ "content": "import { Component, Element, Prop, State, Watch, h, Host } from '@stencil/core';\nimport type { IconSize } from '../Icon/Icon';\nimport type { TextVariant } from '../Text/text-types';\nimport { CONTROL_TEXT_VARIANT, type ControlSize } from '../../utils/control-text';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\n\nexport type SkeletonVariant = 'text' | 'icon' | 'control';\nexport type SkeletonControlAppearance = 'filled' | 'outlined' | 'borderless';\nexport type SkeletonControlContent =\n | 'label'\n | 'icon'\n | 'icon-label'\n | 'label-icon'\n | 'icon-label-icon';\nexport type SkeletonBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'navigation'\n | 'always-dark';\n\n/** @slot - Real text or a control whose footprint is retained with preserveLayout. */\n@Component({\n tag: 'ds-skeleton',\n styleUrl: 'Skeleton.css',\n shadow: true,\n})\nexport class Skeleton {\n @Element() el!: HTMLElement;\n @Prop() variant: SkeletonVariant = 'text';\n /** Text metric recipe whose line-height defines the text canvas. */\n @Prop() textVariant: TextVariant = 'text-body-medium';\n /** Iconography token whose square canvas defines the icon canvas. */\n @Prop() iconSize: IconSize = 'md';\n /** Shared control-density size whose height defines the control canvas. */\n @Prop() controlSize: ControlSize = 'md';\n /** Filled controls replace the entire shape; other appearances retain the frame and mask its contents. */\n @Prop() controlAppearance: SkeletonControlAppearance = 'filled';\n /** Content anatomy for outlined and borderless control placeholders. */\n @Prop() controlContent: SkeletonControlContent = 'label';\n /** Follow the owning table or data toolbar's compact icon-only control presentation. */\n @Prop() collapseLabel: boolean = false;\n /** Width of text and control skeleton canvases. Numbers resolve to px. Ignored for icons. */\n @Prop() width: string | number | undefined;\n /** Round icon skeletons into circles and control skeletons into pills. Ignored for text. */\n @Prop() rounded: boolean = false;\n /** Whether to show the shimmer animation. */\n @Prop() shimmer: boolean = true;\n /** Derive geometry from a projected control or text instead of estimating its footprint. */\n @Prop() preserveLayout: boolean = false;\n /** With preserveLayout, reveal the same projected content when loading completes. */\n @Prop() isLoading: boolean = true;\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: SkeletonBackground | undefined;\n\n @State() private captionCompact = false;\n private captionCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n\n componentDidLoad(): void {\n this.hasLoaded = true;\n this.syncCaptionCompactObserver();\n }\n\n connectedCallback(): void {\n if (this.hasLoaded) this.syncCaptionCompactObserver();\n }\n\n disconnectedCallback(): void {\n this.disconnectCaptionCompactObserver();\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n @Watch('collapseLabel')\n syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n this.captionCompact = compact;\n });\n }\n\n private get widthCss() {\n const v = this.width;\n if (v == null) return undefined;\n return typeof v === 'number' ? `${v}px` : v;\n }\n\n private renderControl() {\n const iconOnly =\n this.controlContent === 'icon' ||\n (this.collapseLabel && this.captionCompact && this.controlContent.includes('icon'));\n const icon = () => (\n <ds-skeleton\n variant=\"icon\"\n iconSize={this.controlSize}\n background={this.background}\n shimmer={this.shimmer}\n />\n );\n return (\n <span\n class={{\n skeleton__control: true,\n 'ds-control-frame': true,\n 'skeleton__control--icon': iconOnly,\n }}\n >\n {(iconOnly || this.controlContent.startsWith('icon-')) && icon()}\n {!iconOnly && (\n <span class=\"skeleton__control-label ds-control-label-box\">\n <ds-skeleton\n textVariant={CONTROL_TEXT_VARIANT[this.controlSize]}\n background={this.background}\n shimmer={this.shimmer}\n />\n </span>\n )}\n {!iconOnly && this.controlContent.endsWith('-icon') && icon()}\n </span>\n );\n }\n\n render() {\n return (\n <Host\n aria-hidden={this.isLoading ? 'true' : undefined}\n class={{\n skeleton: true,\n [`skeleton--${this.variant}`]: true,\n [`skeleton--text-${this.textVariant}`]: this.variant === 'text',\n [`skeleton--icon-${this.iconSize}`]: this.variant === 'icon',\n [`ds-control--${this.controlSize}`]: this.variant === 'control',\n [`skeleton--control-${this.controlAppearance}`]: this.variant === 'control',\n [`skeleton--background-${this.background}`]: !!this.background,\n 'skeleton--rounded': this.variant !== 'text' && this.rounded,\n 'skeleton--preserve-layout': this.preserveLayout,\n 'skeleton--content-ready': this.preserveLayout && !this.isLoading,\n }}\n style={this.variant === 'icon' ? undefined : { width: this.widthCss }}\n >\n {this.preserveLayout && (\n <span class=\"skeleton__source\" inert={this.isLoading}>\n <slot />\n </span>\n )}\n {this.isLoading &&\n (this.variant === 'control' && this.controlAppearance !== 'filled' ? (\n this.renderControl()\n ) : (\n <span\n class={{\n skeleton__shape: true,\n 'ds-shimmer-surface': this.shimmer,\n }}\n />\n ))}\n </Host>\n );\n }\n}\n",
324
435
  "type": "registry:ui"
325
436
  }
326
437
  ]