@ds-mo/ui 15.11.2 → 15.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +114 -18
  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-6QYDIPd1.js → p-3dG9v5Aw.js} +2 -2
  141. package/dist/components/{p-C4kVTIBc.js → p-5PReYMiY.js} +2 -2
  142. package/dist/components/{p-CzTJAO2J.js → p-8fddX3V3.js} +2 -2
  143. package/dist/components/{p-Cw1ljgW1.js → p-9u2WDF0J.js} +2 -2
  144. package/dist/components/{p-M9pOLcyK.js → p-B-ChwMFE.js} +2 -2
  145. package/dist/components/{p-BvlkO__o.js → p-BAIYOobl.js} +2 -2
  146. package/dist/components/{p-BrJebF5t.js → p-BIMW5_Z7.js} +2 -2
  147. package/dist/components/{p-BkKdzYZP.js → p-BMI0F08u.js} +2 -2
  148. package/dist/components/{p-D0kzIzGQ.js → p-BV8sNEVP.js} +2 -2
  149. package/dist/components/{p-DNtwJJOC.js → p-BVUdtuog.js} +2 -2
  150. package/dist/components/{p-CgYDQSLW.js → p-BYo1-6b5.js} +2 -2
  151. package/dist/components/{p-CJ-igzsZ.js → p-BZbJkJpG.js} +2 -2
  152. package/dist/components/{p-D2rASHHq.js → p-BcYzHn1E.js} +2 -2
  153. package/dist/components/{p-0EpjqRWc.js → p-BfRAVR40.js} +2 -2
  154. package/dist/components/p-BnE9MeXS.js +2 -0
  155. package/dist/components/{p-BI6L3JoU.js.map → p-BnE9MeXS.js.map} +1 -1
  156. package/dist/components/p-BoFK9lmP.js +2 -0
  157. package/dist/components/p-BoFK9lmP.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-BpssHpam.js +2 -0
  161. package/dist/components/p-BpssHpam.js.map +1 -0
  162. package/dist/components/{p-DXEInGEq.js → p-By_jYvHp.js} +2 -2
  163. package/dist/components/p-C5HGwzy9.js +2 -0
  164. package/dist/components/{p-CXF8wj9I.js.map → p-C5HGwzy9.js.map} +1 -1
  165. package/dist/components/{p-D4r6oWyQ.js → p-C860ilDn.js} +2 -2
  166. package/dist/components/{p-DcVK0W4X.js → p-CEHhx4VQ.js} +2 -2
  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-DKg181YU.js → p-DFR9hqDU.js} +2 -2
  179. package/dist/components/{p-DEJLfD7k.js → p-DKZP3jCY.js} +2 -2
  180. package/dist/components/{p-CTAF7SkL.js → p-DMPn_dt7.js} +2 -2
  181. package/dist/components/{p-CYRTkP1A.js → p-DYruK9cb.js} +2 -2
  182. package/dist/components/{p-CqfYCn-e.js → p-DiUaIJ91.js} +2 -2
  183. package/dist/components/{p-Cqg9T781.js → p-DimFbKZH.js} +2 -2
  184. package/dist/components/p-DmyU1fd-.js +2 -0
  185. package/dist/components/p-DmyU1fd-.js.map +1 -0
  186. package/dist/components/{p-DHmHllUM.js → p-DuhJ49iN.js} +2 -2
  187. package/dist/components/{p-D_iZPukF.js → p-G6r6yYg8.js} +2 -2
  188. package/dist/components/{p-87FjWil8.js → p-IQdLCfJJ.js} +2 -2
  189. package/dist/components/{p-CAARHqjE.js → p-KTaiJztz.js} +2 -2
  190. package/dist/components/{p-BM-UYlIS.js → p-N-2CZze7.js} +2 -2
  191. package/dist/components/{p-Ch00yccW.js → p-Nx52go85.js} +2 -2
  192. package/dist/components/{p-CC4X8rpT.js → p-WEffoQQD.js} +2 -2
  193. package/dist/components/{p-DDawngok.js → p-XKt6j1UN.js} +2 -2
  194. package/dist/components/{p-vrRbdZAI.js → p-nakO4viw.js} +2 -2
  195. package/dist/components/{p-BC9xYdJD.js → p-pkJ3X3s7.js} +2 -2
  196. package/dist/components/{p-C6VWVB87.js → p-r_e6_0nP.js} +2 -2
  197. package/dist/components/p-zsWHUNJ9.js +2 -0
  198. package/dist/components/p-zsWHUNJ9.js.map +1 -0
  199. package/dist/docs/components.json +627 -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 +113 -17
  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 +100 -8
  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 +13 -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 +169 -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 +4 -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-CC4X8rpT.js.map → p-WEffoQQD.js.map} +0 -0
  297. /package/dist/components/{p-DDawngok.js.map → p-XKt6j1UN.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,7 +59,9 @@
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.",
@@ -103,7 +105,11 @@
103
105
  "textVariant",
104
106
  "iconSize",
105
107
  "controlSize",
106
- "rounded"
108
+ "rounded",
109
+ "preserveLayout",
110
+ "isLoading",
111
+ "controlAppearance",
112
+ "controlContent"
107
113
  ]
108
114
  },
109
115
  {
@@ -116,7 +122,9 @@
116
122
  "reason": "The component owns its surface and interaction treatment; use its semantic presentation props or compose an application-owned surrounding surface.",
117
123
  "props": [
118
124
  "background",
119
- "variant"
125
+ "variant",
126
+ "controlAppearance",
127
+ "controlContent"
120
128
  ]
121
129
  }
122
130
  ],
@@ -133,6 +141,24 @@
133
141
  "mutable": false,
134
142
  "description": "Actual parent surface context. Omit on primary and secondary surfaces."
135
143
  },
144
+ "controlAppearance": {
145
+ "type": "SkeletonControlAppearance",
146
+ "resolvedType": "\"borderless\" | \"filled\" | \"outlined\"",
147
+ "attribute": "control-appearance",
148
+ "default": "'filled'",
149
+ "required": false,
150
+ "mutable": false,
151
+ "description": "Filled controls replace the entire shape; other appearances retain the frame and mask its contents."
152
+ },
153
+ "controlContent": {
154
+ "type": "SkeletonControlContent",
155
+ "resolvedType": "\"icon\" | \"icon-label\" | \"icon-label-icon\" | \"label\" | \"label-icon\"",
156
+ "attribute": "control-content",
157
+ "default": "'label'",
158
+ "required": false,
159
+ "mutable": false,
160
+ "description": "Content anatomy for outlined and borderless control placeholders."
161
+ },
136
162
  "controlSize": {
137
163
  "type": "ControlSize",
138
164
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -151,6 +177,24 @@
151
177
  "mutable": false,
152
178
  "description": "Iconography token whose square canvas defines the icon canvas."
153
179
  },
180
+ "isLoading": {
181
+ "type": "boolean",
182
+ "resolvedType": "boolean",
183
+ "attribute": "is-loading",
184
+ "default": "true",
185
+ "required": false,
186
+ "mutable": false,
187
+ "description": "With preserveLayout, reveal the same projected content when loading completes."
188
+ },
189
+ "preserveLayout": {
190
+ "type": "boolean",
191
+ "resolvedType": "boolean",
192
+ "attribute": "preserve-layout",
193
+ "default": "false",
194
+ "required": false,
195
+ "mutable": false,
196
+ "description": "Derive geometry from a projected control or text instead of estimating its footprint."
197
+ },
154
198
  "rounded": {
155
199
  "type": "boolean",
156
200
  "resolvedType": "boolean",
@@ -197,7 +241,12 @@
197
241
  },
198
242
  "events": [],
199
243
  "methods": [],
200
- "slots": []
244
+ "slots": [
245
+ {
246
+ "name": "",
247
+ "description": "Real text or a control whose footprint is retained with preserveLayout."
248
+ }
249
+ ]
201
250
  },
202
251
  "props": {
203
252
  "background": {
@@ -208,6 +257,24 @@
208
257
  "mutable": false,
209
258
  "description": "Actual parent surface context. Omit on primary and secondary surfaces."
210
259
  },
260
+ "controlAppearance": {
261
+ "type": "SkeletonControlAppearance",
262
+ "resolvedType": "\"borderless\" | \"filled\" | \"outlined\"",
263
+ "attribute": "control-appearance",
264
+ "default": "'filled'",
265
+ "required": false,
266
+ "mutable": false,
267
+ "description": "Filled controls replace the entire shape; other appearances retain the frame and mask its contents."
268
+ },
269
+ "controlContent": {
270
+ "type": "SkeletonControlContent",
271
+ "resolvedType": "\"icon\" | \"icon-label\" | \"icon-label-icon\" | \"label\" | \"label-icon\"",
272
+ "attribute": "control-content",
273
+ "default": "'label'",
274
+ "required": false,
275
+ "mutable": false,
276
+ "description": "Content anatomy for outlined and borderless control placeholders."
277
+ },
211
278
  "controlSize": {
212
279
  "type": "ControlSize",
213
280
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -226,6 +293,24 @@
226
293
  "mutable": false,
227
294
  "description": "Iconography token whose square canvas defines the icon canvas."
228
295
  },
296
+ "isLoading": {
297
+ "type": "boolean",
298
+ "resolvedType": "boolean",
299
+ "attribute": "is-loading",
300
+ "default": "true",
301
+ "required": false,
302
+ "mutable": false,
303
+ "description": "With preserveLayout, reveal the same projected content when loading completes."
304
+ },
305
+ "preserveLayout": {
306
+ "type": "boolean",
307
+ "resolvedType": "boolean",
308
+ "attribute": "preserve-layout",
309
+ "default": "false",
310
+ "required": false,
311
+ "mutable": false,
312
+ "description": "Derive geometry from a projected control or text instead of estimating its footprint."
313
+ },
229
314
  "rounded": {
230
315
  "type": "boolean",
231
316
  "resolvedType": "boolean",
@@ -272,7 +357,12 @@
272
357
  },
273
358
  "events": [],
274
359
  "methods": [],
275
- "slots": [],
360
+ "slots": [
361
+ {
362
+ "name": "",
363
+ "description": "Real text or a control whose footprint is retained with preserveLayout."
364
+ }
365
+ ],
276
366
  "exports": {
277
367
  "customElement": "ds-skeleton",
278
368
  "react": "DsSkeleton",
@@ -311,16 +401,18 @@
311
401
  "@ds-mo/ui",
312
402
  "@ds-mo/tokens"
313
403
  ],
314
- "registryDependencies": [],
404
+ "registryDependencies": [
405
+ "skeleton"
406
+ ],
315
407
  "files": [
316
408
  {
317
409
  "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",
410
+ "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 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 /* Alpha mask only: each retained line uses the atomic text skeleton's inset. */\n mask-image: repeating-linear-gradient(\n to bottom,\n transparent 0,\n transparent calc(var(--ds-skeleton-canvas-size) * 0.125),\n currentColor calc(var(--ds-skeleton-canvas-size) * 0.125),\n currentColor 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
411
  "type": "registry:ui"
320
412
  },
321
413
  {
322
414
  "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",
415
+ "content": "import { Component, Prop, 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';\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 @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 /** 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 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 = this.controlContent === '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
416
  "type": "registry:ui"
325
417
  }
326
418
  ]