@ds-mo/ui 14.20.0 → 14.21.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 (257) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +386 -33
  4. package/dist/angular/ds-chip.d.ts +1 -1
  5. package/dist/angular/ds-chip.js +3 -3
  6. package/dist/angular/ds-filter-menu.d.ts +7 -1
  7. package/dist/angular/ds-filter-menu.js +7 -4
  8. package/dist/angular/ds-input.d.ts +1 -1
  9. package/dist/angular/ds-input.js +3 -3
  10. package/dist/angular/ds-tab-group.d.ts +1 -1
  11. package/dist/angular/ds-tab-group.js +3 -3
  12. package/dist/angular/ds-table-filter.d.ts +7 -1
  13. package/dist/angular/ds-table-filter.js +7 -4
  14. package/dist/angular/ds-table-group.d.ts +29 -0
  15. package/dist/angular/ds-table-group.js +48 -0
  16. package/dist/angular/ds-table-search.d.ts +20 -0
  17. package/dist/angular/ds-table-search.js +49 -0
  18. package/dist/angular/ds-table.d.ts +1 -1
  19. package/dist/angular/ds-table.js +3 -3
  20. package/dist/angular/index.d.ts +1 -1
  21. package/dist/angular/index.js +2 -0
  22. package/dist/angular/proxies.d.ts +2 -0
  23. package/dist/angular/proxies.js +2 -0
  24. package/dist/components/ds-agent-activity.js +1 -1
  25. package/dist/components/ds-agent-questionnaire.js +1 -1
  26. package/dist/components/ds-agent-response.js +1 -1
  27. package/dist/components/ds-agent-source-list.js +1 -1
  28. package/dist/components/ds-agent-tool-call.js +1 -1
  29. package/dist/components/ds-attachment-list.js +1 -1
  30. package/dist/components/ds-badge.js +1 -1
  31. package/dist/components/ds-banner.js +1 -1
  32. package/dist/components/ds-bar-action.js +1 -1
  33. package/dist/components/ds-bar-nav.js +1 -1
  34. package/dist/components/ds-bar-title.js +1 -1
  35. package/dist/components/ds-bar-workflow.js +1 -1
  36. package/dist/components/ds-breadcrumb.js +1 -1
  37. package/dist/components/ds-button-filled.js +1 -1
  38. package/dist/components/ds-button-unfilled.js +1 -1
  39. package/dist/components/ds-card-chart.js +1 -1
  40. package/dist/components/ds-card-overview.js +1 -1
  41. package/dist/components/ds-card-setting.js +1 -1
  42. package/dist/components/ds-chart-legend.js +1 -1
  43. package/dist/components/ds-chart.js +1 -1
  44. package/dist/components/ds-checkbox.js +1 -1
  45. package/dist/components/ds-chip.js +1 -1
  46. package/dist/components/ds-chip.js.map +1 -1
  47. package/dist/components/ds-code-block.js +1 -1
  48. package/dist/components/ds-conversation-list-item.js +1 -1
  49. package/dist/components/ds-conversation-list-section.js +1 -1
  50. package/dist/components/ds-empty-state.js +1 -1
  51. package/dist/components/ds-field.js +1 -1
  52. package/dist/components/ds-filter-menu.js +1 -1
  53. package/dist/components/ds-input.js +1 -1
  54. package/dist/components/ds-markdown.js +1 -1
  55. package/dist/components/ds-menu.js +1 -1
  56. package/dist/components/ds-message-actions.js +1 -1
  57. package/dist/components/ds-message-composer.js +1 -1
  58. package/dist/components/ds-message-scroller.js +1 -1
  59. package/dist/components/ds-message-scroller.js.map +1 -1
  60. package/dist/components/ds-message.js +1 -1
  61. package/dist/components/ds-mobile-bar-nav.js +1 -1
  62. package/dist/components/ds-mobile-header.js +1 -1
  63. package/dist/components/ds-mobile-section-switcher.js +1 -1
  64. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  65. package/dist/components/ds-modal.js +1 -1
  66. package/dist/components/ds-pagination.js +1 -1
  67. package/dist/components/ds-panel-nav.js +1 -1
  68. package/dist/components/ds-panel-sub-nav.js +1 -1
  69. package/dist/components/ds-panel-tool-header.js +1 -1
  70. package/dist/components/ds-panel-tool-search.js +1 -1
  71. package/dist/components/ds-panel-tool-search.js.map +1 -1
  72. package/dist/components/ds-panel-tools.js +1 -1
  73. package/dist/components/ds-paper-texture.js +1 -1
  74. package/dist/components/ds-radio.js +1 -1
  75. package/dist/components/ds-select.js +1 -1
  76. package/dist/components/ds-shell-app.js +1 -1
  77. package/dist/components/ds-shell-page.js +1 -1
  78. package/dist/components/ds-shell-tools.js +1 -1
  79. package/dist/components/ds-slider.js +1 -1
  80. package/dist/components/ds-swatch-picker.js +1 -1
  81. package/dist/components/ds-tab-group.js +1 -1
  82. package/dist/components/ds-table-filter.js +1 -1
  83. package/dist/components/ds-table-filter.js.map +1 -1
  84. package/dist/components/ds-table-group.d.ts +11 -0
  85. package/dist/components/ds-table-group.js +2 -0
  86. package/dist/components/ds-table-group.js.map +1 -0
  87. package/dist/components/ds-table-saved-views.js +1 -1
  88. package/dist/components/ds-table-search.d.ts +11 -0
  89. package/dist/components/ds-table-search.js +2 -0
  90. package/dist/components/ds-table-search.js.map +1 -0
  91. package/dist/components/ds-table-sort.js +1 -1
  92. package/dist/components/ds-table-sort.js.map +1 -1
  93. package/dist/components/ds-table-toolbar.js +1 -1
  94. package/dist/components/ds-table-toolbar.js.map +1 -1
  95. package/dist/components/ds-table.js +1 -1
  96. package/dist/components/ds-table.js.map +1 -1
  97. package/dist/components/ds-tag.js +1 -1
  98. package/dist/components/ds-text.js +1 -1
  99. package/dist/components/ds-toast.js +1 -1
  100. package/dist/components/ds-tooltip-chart.js +1 -1
  101. package/dist/components/ds-tooltip.js +1 -1
  102. package/dist/components/ds-typing-indicator.js +1 -1
  103. package/dist/components/{p-Bf7PZJPT.js → p-5Z4oYuiK.js} +2 -2
  104. package/dist/components/{p-DIlScMvI.js → p-6rB0eAda.js} +2 -2
  105. package/dist/components/{p-CptSB-tA.js → p-9ykZwPlI.js} +2 -2
  106. package/dist/components/{p-BHhmB9-4.js → p-B0kSlcaw.js} +2 -2
  107. package/dist/components/{p-DWjTOoXs.js → p-B1wMpt1z.js} +2 -2
  108. package/dist/components/p-BEttT0UB.js +2 -0
  109. package/dist/components/p-BEttT0UB.js.map +1 -0
  110. package/dist/components/p-BFit8o0r.js +2 -0
  111. package/dist/components/p-BFit8o0r.js.map +1 -0
  112. package/dist/components/{p-fRDzpfi9.js → p-BXv6RpoF.js} +2 -2
  113. package/dist/components/{p-D7QlTWbN.js → p-BbG7nOcz.js} +2 -2
  114. package/dist/components/{p-B2FT4Da6.js → p-Bc_z1UwJ.js} +2 -2
  115. package/dist/components/{p-Bx5BSd6F.js → p-BcxidW9k.js} +2 -2
  116. package/dist/components/{p-1UAVanY9.js → p-Bd8I2oXN.js} +2 -2
  117. package/dist/components/{p-DGe5oXR0.js → p-Bjq1KP_Y.js} +2 -2
  118. package/dist/components/p-Bjq1KP_Y.js.map +1 -0
  119. package/dist/components/{p-DW5Ita-P.js → p-BnTPuV3x.js} +2 -2
  120. package/dist/components/{p-DW5Ita-P.js.map → p-BnTPuV3x.js.map} +1 -1
  121. package/dist/components/p-BqVXMEJm.js +2 -0
  122. package/dist/components/p-BqVXMEJm.js.map +1 -0
  123. package/dist/components/{p-DdH7b4JF.js → p-CBymzuOO.js} +2 -2
  124. package/dist/components/{p-BjRD57w3.js → p-CE2b5GPu.js} +2 -2
  125. package/dist/components/{p-DfDoqOlx.js → p-CEnoPUn5.js} +2 -2
  126. package/dist/components/{p-DBYv7fRq.js → p-CFkZSDwI.js} +2 -2
  127. package/dist/components/{p-Bb4KnRy0.js → p-CTH3dSYg.js} +2 -2
  128. package/dist/components/{p-BmssRAEZ.js → p-CZ144LS5.js} +2 -2
  129. package/dist/components/{p-B-HsfQOK.js → p-Cd1JnnVK.js} +2 -2
  130. package/dist/components/p-CeKa4VbU.js +2 -0
  131. package/dist/components/{p-AtUP95E_.js.map → p-CeKa4VbU.js.map} +1 -1
  132. package/dist/components/{p-CDw_WEVt.js → p-Cnsvgx1M.js} +2 -2
  133. package/dist/components/{p-BYFS2qWb.js → p-CpeJMKJ5.js} +2 -2
  134. package/dist/components/{p-DM1Z_hh0.js → p-D36EmETH.js} +2 -2
  135. package/dist/components/{p-DFC0sRM-.js → p-DI8DUozc.js} +2 -2
  136. package/dist/components/{p-v4oqkJms.js → p-DSy1oOnd.js} +2 -2
  137. package/dist/components/{p-v4oqkJms.js.map → p-DSy1oOnd.js.map} +1 -1
  138. package/dist/components/{p-DQBT1Jkf.js → p-DbLLH3hr.js} +2 -2
  139. package/dist/components/{p-B6rSDhJY.js → p-Dit6JmAK.js} +2 -2
  140. package/dist/components/{p-caLOcQUK.js → p-DzPtYdXy.js} +2 -2
  141. package/dist/components/{p-Do8wbFff.js → p-XaCYqck3.js} +2 -2
  142. package/dist/components/{p-DKt_8s-U.js → p-Y5_MkCFn.js} +2 -2
  143. package/dist/components/{p-BUexfjjg.js → p-YDxDyedE.js} +2 -2
  144. package/dist/components/{p-L8IIeDXM.js → p-_C-XRpCB.js} +2 -2
  145. package/dist/components/{p-CyZqk196.js → p-bHnk8t5I.js} +2 -2
  146. package/dist/components/p-hYjmOPCI.js +2 -0
  147. package/dist/components/p-hYjmOPCI.js.map +1 -0
  148. package/dist/components/{p-ChfVRPHw.js → p-pUOA3iDG.js} +2 -2
  149. package/dist/components/{p-DLbHgbVj.js → p-pnO8tAYB.js} +2 -2
  150. package/dist/components/{p-CCmgtju-.js → p-pxN8JGEh.js} +2 -2
  151. package/dist/components/p-pxN8JGEh.js.map +1 -0
  152. package/dist/components/{p-B4wTnsUL.js → p-w9fkkwL2.js} +2 -2
  153. package/dist/components/p-x5u5Ueli.js +2 -0
  154. package/dist/components/{p-BeA6Jv-3.js.map → p-x5u5Ueli.js.map} +1 -1
  155. package/dist/docs/components.json +1291 -33
  156. package/dist/mcp-data/registry/button-filled.json +1 -0
  157. package/dist/mcp-data/registry/button-unfilled.json +1 -0
  158. package/dist/mcp-data/registry/chip.json +39 -2
  159. package/dist/mcp-data/registry/filter-menu.json +84 -11
  160. package/dist/mcp-data/registry/input.json +54 -2
  161. package/dist/mcp-data/registry/panel-tool-search.json +4 -5
  162. package/dist/mcp-data/registry/registry.json +391 -32
  163. package/dist/mcp-data/registry/select.json +1 -0
  164. package/dist/mcp-data/registry/tab-group.json +21 -2
  165. package/dist/mcp-data/registry/table-filter.json +79 -9
  166. package/dist/mcp-data/registry/table-group.json +301 -0
  167. package/dist/mcp-data/registry/table-search.json +343 -0
  168. package/dist/mcp-data/registry/table-sort.json +1 -1
  169. package/dist/mcp-data/registry/table-toolbar.json +7 -6
  170. package/dist/mcp-data/registry/table.json +55 -17
  171. package/dist/react/components.d.ts +2 -0
  172. package/dist/react/components.js +2 -0
  173. package/dist/react/ds-filter-menu.d.ts +2 -1
  174. package/dist/react/ds-filter-menu.js +1 -0
  175. package/dist/react/ds-table-filter.d.ts +2 -1
  176. package/dist/react/ds-table-filter.js +1 -0
  177. package/dist/react/ds-table-group.d.ts +14 -0
  178. package/dist/react/ds-table-group.js +16 -0
  179. package/dist/react/ds-table-search.d.ts +14 -0
  180. package/dist/react/ds-table-search.js +16 -0
  181. package/dist/styles/table.css +46 -0
  182. package/dist/types/components/Chip/Chip.d.ts +5 -0
  183. package/dist/types/components/FilterMenu/FilterMenu.d.ts +26 -0
  184. package/dist/types/components/Input/Input.d.ts +6 -0
  185. package/dist/types/components/TabGroup/TabGroup.d.ts +2 -0
  186. package/dist/types/components/Table/Table.d.ts +6 -0
  187. package/dist/types/components/Table/index.d.ts +1 -1
  188. package/dist/types/components/Table/table-cell-model.d.ts +11 -1
  189. package/dist/types/components/Table/table-highlight.d.ts +12 -0
  190. package/dist/types/components/Table/table-model.d.ts +6 -5
  191. package/dist/types/components/Table/table-render-model.d.ts +1 -1
  192. package/dist/types/components/Table/table-row-view.d.ts +4 -1
  193. package/dist/types/components/Table/table-types.d.ts +22 -4
  194. package/dist/types/components/Table/table-virtual-model.d.ts +2 -0
  195. package/dist/types/components/TableFilter/TableFilter.d.ts +9 -1
  196. package/dist/types/components/TableGroup/TableGroup.d.ts +60 -0
  197. package/dist/types/components/TableSearch/TableSearch.d.ts +56 -0
  198. package/dist/types/components/TableSearch/table-search-model.d.ts +10 -0
  199. package/dist/types/components/TableSearch/table-search-types.d.ts +10 -0
  200. package/dist/types/components.d.ts +386 -6
  201. package/dist/types/utils/choice-list-parts.d.ts +11 -1
  202. package/dist/types/utils/select-controller.d.ts +1 -1
  203. package/dist/vue/components.d.ts +2 -0
  204. package/dist/vue/components.js +2 -0
  205. package/dist/vue/ds-chip.js +2 -0
  206. package/dist/vue/ds-filter-menu.js +5 -0
  207. package/dist/vue/ds-input.js +3 -0
  208. package/dist/vue/ds-tab-group.js +1 -0
  209. package/dist/vue/ds-table-filter.js +5 -0
  210. package/dist/vue/ds-table-group.d.ts +3 -0
  211. package/dist/vue/ds-table-group.js +20 -0
  212. package/dist/vue/ds-table-search.d.ts +3 -0
  213. package/dist/vue/ds-table-search.js +22 -0
  214. package/dist/vue/ds-table.js +2 -0
  215. package/package.json +1 -1
  216. package/dist/components/p-AtUP95E_.js +0 -2
  217. package/dist/components/p-B5-R5mb8.js +0 -2
  218. package/dist/components/p-B5-R5mb8.js.map +0 -1
  219. package/dist/components/p-BeA6Jv-3.js +0 -2
  220. package/dist/components/p-BkelrY4-.js +0 -2
  221. package/dist/components/p-BkelrY4-.js.map +0 -1
  222. package/dist/components/p-CCmgtju-.js.map +0 -1
  223. package/dist/components/p-DA5H_Iq_.js +0 -2
  224. package/dist/components/p-DA5H_Iq_.js.map +0 -1
  225. package/dist/components/p-DGe5oXR0.js.map +0 -1
  226. /package/dist/components/{p-Bf7PZJPT.js.map → p-5Z4oYuiK.js.map} +0 -0
  227. /package/dist/components/{p-DIlScMvI.js.map → p-6rB0eAda.js.map} +0 -0
  228. /package/dist/components/{p-CptSB-tA.js.map → p-9ykZwPlI.js.map} +0 -0
  229. /package/dist/components/{p-BHhmB9-4.js.map → p-B0kSlcaw.js.map} +0 -0
  230. /package/dist/components/{p-DWjTOoXs.js.map → p-B1wMpt1z.js.map} +0 -0
  231. /package/dist/components/{p-fRDzpfi9.js.map → p-BXv6RpoF.js.map} +0 -0
  232. /package/dist/components/{p-D7QlTWbN.js.map → p-BbG7nOcz.js.map} +0 -0
  233. /package/dist/components/{p-B2FT4Da6.js.map → p-Bc_z1UwJ.js.map} +0 -0
  234. /package/dist/components/{p-Bx5BSd6F.js.map → p-BcxidW9k.js.map} +0 -0
  235. /package/dist/components/{p-1UAVanY9.js.map → p-Bd8I2oXN.js.map} +0 -0
  236. /package/dist/components/{p-DdH7b4JF.js.map → p-CBymzuOO.js.map} +0 -0
  237. /package/dist/components/{p-BjRD57w3.js.map → p-CE2b5GPu.js.map} +0 -0
  238. /package/dist/components/{p-DfDoqOlx.js.map → p-CEnoPUn5.js.map} +0 -0
  239. /package/dist/components/{p-DBYv7fRq.js.map → p-CFkZSDwI.js.map} +0 -0
  240. /package/dist/components/{p-Bb4KnRy0.js.map → p-CTH3dSYg.js.map} +0 -0
  241. /package/dist/components/{p-BmssRAEZ.js.map → p-CZ144LS5.js.map} +0 -0
  242. /package/dist/components/{p-B-HsfQOK.js.map → p-Cd1JnnVK.js.map} +0 -0
  243. /package/dist/components/{p-CDw_WEVt.js.map → p-Cnsvgx1M.js.map} +0 -0
  244. /package/dist/components/{p-BYFS2qWb.js.map → p-CpeJMKJ5.js.map} +0 -0
  245. /package/dist/components/{p-DM1Z_hh0.js.map → p-D36EmETH.js.map} +0 -0
  246. /package/dist/components/{p-DFC0sRM-.js.map → p-DI8DUozc.js.map} +0 -0
  247. /package/dist/components/{p-DQBT1Jkf.js.map → p-DbLLH3hr.js.map} +0 -0
  248. /package/dist/components/{p-B6rSDhJY.js.map → p-Dit6JmAK.js.map} +0 -0
  249. /package/dist/components/{p-caLOcQUK.js.map → p-DzPtYdXy.js.map} +0 -0
  250. /package/dist/components/{p-Do8wbFff.js.map → p-XaCYqck3.js.map} +0 -0
  251. /package/dist/components/{p-DKt_8s-U.js.map → p-Y5_MkCFn.js.map} +0 -0
  252. /package/dist/components/{p-BUexfjjg.js.map → p-YDxDyedE.js.map} +0 -0
  253. /package/dist/components/{p-L8IIeDXM.js.map → p-_C-XRpCB.js.map} +0 -0
  254. /package/dist/components/{p-CyZqk196.js.map → p-bHnk8t5I.js.map} +0 -0
  255. /package/dist/components/{p-ChfVRPHw.js.map → p-pUOA3iDG.js.map} +0 -0
  256. /package/dist/components/{p-DLbHgbVj.js.map → p-pnO8tAYB.js.map} +0 -0
  257. /package/dist/components/{p-B4wTnsUL.js.map → p-w9fkkwL2.js.map} +0 -0
@@ -63,6 +63,7 @@
63
63
  ],
64
64
  "states": [
65
65
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
66
+ "Every button has a minimum inline size equal to its resolved height. Short labels therefore form a square control while longer labels continue to hug their content.",
66
67
  "Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry.",
67
68
  "Use only one filled action per local decision area; render all secondary actions with ButtonUnfilled.",
68
69
  "Choose brand or neutral for general commands. Reserve positive, negative, warning, and caution for matching action consequences, and AI, guide, or walkthrough for actions that enter those feature experiences.",
@@ -64,6 +64,7 @@
64
64
  ],
65
65
  "states": [
66
66
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
67
+ "Every button has a minimum inline size equal to its resolved height. Short labels therefore form a square control while longer labels continue to hug their content.",
67
68
  "Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry.",
68
69
  "A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
69
70
  "General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
@@ -57,6 +57,7 @@
57
57
  "The dismiss action is the chip's only interaction, and the parent owns data mutation after dsRemove.",
58
58
  "Long labels remain on one line and truncate only when the consuming layout supplies a maximum width; otherwise the chip sizes to its content.",
59
59
  "Rounded shape is a visual choice and does not change semantics or interaction.",
60
+ "isInset opts into reduced outer geometry only when Chip is nested inside a control of the same density. The dismiss button applies the same inset depth again inside the Chip's already-reduced height, and its trailing padding matches the resulting top and bottom space. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs.",
60
61
  "Chip is designed only for primary surfaces and has no surface-context API."
61
62
  ],
62
63
  "responsiveBehavior": [
@@ -83,6 +84,15 @@
83
84
  },
84
85
  "api": {
85
86
  "props": {
87
+ "insetDepth": {
88
+ "type": "ControlInsetDepth",
89
+ "resolvedType": "\"double\" | \"single\"",
90
+ "attribute": "inset-depth",
91
+ "default": "'single'",
92
+ "required": false,
93
+ "mutable": false,
94
+ "description": "Single removes 4px overall; double removes 8px overall (xs stays single)."
95
+ },
86
96
  "isInactive": {
87
97
  "type": "boolean",
88
98
  "resolvedType": "boolean",
@@ -91,6 +101,15 @@
91
101
  "required": false,
92
102
  "mutable": false
93
103
  },
104
+ "isInset": {
105
+ "type": "boolean",
106
+ "resolvedType": "boolean",
107
+ "attribute": "is-inset",
108
+ "default": "false",
109
+ "required": false,
110
+ "mutable": false,
111
+ "description": "Use reduced outer geometry when nested inside a control of the same size."
112
+ },
94
113
  "label": {
95
114
  "type": "string",
96
115
  "resolvedType": "string",
@@ -154,6 +173,15 @@
154
173
  "slots": []
155
174
  },
156
175
  "props": {
176
+ "insetDepth": {
177
+ "type": "ControlInsetDepth",
178
+ "resolvedType": "\"double\" | \"single\"",
179
+ "attribute": "inset-depth",
180
+ "default": "'single'",
181
+ "required": false,
182
+ "mutable": false,
183
+ "description": "Single removes 4px overall; double removes 8px overall (xs stays single)."
184
+ },
157
185
  "isInactive": {
158
186
  "type": "boolean",
159
187
  "resolvedType": "boolean",
@@ -162,6 +190,15 @@
162
190
  "required": false,
163
191
  "mutable": false
164
192
  },
193
+ "isInset": {
194
+ "type": "boolean",
195
+ "resolvedType": "boolean",
196
+ "attribute": "is-inset",
197
+ "default": "false",
198
+ "required": false,
199
+ "mutable": false,
200
+ "description": "Use reduced outer geometry when nested inside a control of the same size."
201
+ },
165
202
  "label": {
166
203
  "type": "string",
167
204
  "resolvedType": "string",
@@ -269,12 +306,12 @@
269
306
  "files": [
270
307
  {
271
308
  "path": "src/wc/components/Chip/Chip.css",
272
- "content": "@import '../../utils/tag-chip.css';\n\n/*\n * Semantic state colors — Chip’s differentiator from Tag.\n * All states use the faint contrast weight; hue comes from the state.\n */\n:host(.chip--default) {\n background-color: var(--color-background-faint-neutral);\n color: var(--color-foreground-bold-neutral);\n}\n\n:host(.chip--active) {\n background-color: var(--color-background-faint-brand);\n color: var(--color-foreground-bold-brand);\n}\n\n:host(.chip--error) {\n background-color: var(--color-background-faint-negative);\n color: var(--color-foreground-bold-negative);\n}\n\n:host(.chip--caution) {\n background-color: var(--color-background-faint-caution);\n color: var(--color-foreground-bold-caution);\n}\n\n/*\n * Label↔dismiss uses host gap, mirroring Tag icon↔label spacing:\n * [inset][text][inset][gap][icon].\n */\n.tag__remove {\n padding: 0;\n margin: 0;\n border: none;\n background: none;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: default;\n color: inherit;\n flex-shrink: 0;\n position: relative;\n z-index: 2;\n border-radius: var(--dimension-radius-half);\n}\n\n.tag__remove::before {\n content: '';\n position: absolute;\n inset: var(--dimension-space-n025);\n border-radius: var(--dimension-radius-half);\n background-color: transparent;\n transition: var(--effect-transition-interaction-background-short-2);\n pointer-events: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .tag__remove:hover::before {\n background-color: var(--color-interaction-hover);\n }\n}\n\n.tag__remove:active::before {\n background-color: var(--color-interaction-pressed);\n}\n\n:host(.tag--size-sm) .tag__remove::before {\n inset: var(--dimension-space-n012);\n}\n\n:host(.tag--size-xs) .tag__remove::before {\n inset: 0;\n}\n\n.tag__remove-x {\n display: inline-flex;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n",
309
+ "content": "@import '../../utils/tag-chip.css';\n@import '../../utils/control-density-inset.css';\n\n/*\n * Semantic state colors — Chip’s differentiator from Tag.\n * All states use the faint contrast weight; hue comes from the state.\n */\n:host(.chip--default) {\n background-color: var(--color-background-faint-neutral);\n color: var(--color-foreground-bold-neutral);\n}\n\n:host(.chip--active) {\n background-color: var(--color-background-faint-brand);\n color: var(--color-foreground-bold-brand);\n}\n\n:host(.chip--error) {\n background-color: var(--color-background-faint-negative);\n color: var(--color-foreground-bold-negative);\n}\n\n:host(.chip--caution) {\n background-color: var(--color-background-faint-caution);\n color: var(--color-foreground-bold-caution);\n}\n\n/*\n * Label↔dismiss uses host gap, mirroring Tag icon↔label spacing:\n * [inset][text][inset][gap][icon].\n */\n.tag__remove {\n --ds-chip-remove-size: var(--ds-control-height);\n\n padding: 0;\n margin: 0;\n border: none;\n box-sizing: border-box;\n background: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--ds-chip-remove-size);\n height: var(--ds-chip-remove-size);\n cursor: default;\n color: inherit;\n flex-shrink: 0;\n position: relative;\n z-index: 2;\n border-radius: var(--dimension-radius-half);\n}\n\n/* The dismiss action nests inside the already-inset chip, so its reduction is additive. */\n:host(.ds-control--inset) .tag__remove {\n --ds-chip-remove-size: calc(var(--ds-control-height) - var(--dimension-space-050));\n}\n\n:host(.ds-control--inset) {\n padding-inline-end: var(--dimension-space-025);\n}\n\n:host(.ds-control--inset-double) .tag__remove {\n --ds-chip-remove-size: calc(var(--ds-control-height) - var(--dimension-space-100));\n}\n\n:host(.ds-control--inset-double) {\n padding-inline-end: var(--dimension-space-050);\n}\n\n.tag__remove::before {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dimension-radius-half);\n background-color: transparent;\n transition: var(--effect-transition-interaction-background-short-2);\n pointer-events: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .tag__remove:hover::before {\n background-color: var(--color-interaction-hover);\n }\n}\n\n.tag__remove:active::before {\n background-color: var(--color-interaction-pressed);\n}\n\n.tag__remove-x {\n display: inline-flex;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n",
273
310
  "type": "registry:ui"
274
311
  },
275
312
  {
276
313
  "path": "src/wc/components/Chip/Chip.tsx",
277
- "content": "import { Component, Prop, Event, EventEmitter, h, Host } from '@stencil/core';\nimport { CONTROL_TEXT_VARIANT } from '../../utils';\n\n/**\n * Semantic chip state — replaces Tag’s intent × contrast matrix.\n * - `default` — neutral faint\n * - `active` — brand faint\n * - `error` — negative faint\n * - `caution` — caution faint\n */\nexport type ChipState = 'default' | 'active' | 'error' | 'caution';\nexport type ChipSize = 'md' | 'sm' | 'xs';\n\n/** Dismiss `ds-icon` size — same iconography metrics as Tag’s leading icon. */\nconst ICON_SIZE: Record<ChipSize, 'md' | 'sm' | 'xs'> = {\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\n/**\n * Removable chip — same density recipe as Tag, but colored by semantic `state`\n * (not intent × contrast). Not a toggle/select control; the only intentional\n * action is remove.\n */\n@Component({\n tag: 'ds-chip',\n styleUrl: 'Chip.css',\n scoped: true,\n})\nexport class Chip {\n @Prop() label!: string;\n /** Semantic color state. @default 'default' */\n @Prop() state: ChipState = 'default';\n @Prop() size: ChipSize = 'md';\n @Prop() rounded: boolean = false;\n @Prop() maxWidth: string | number | undefined;\n @Prop() isInactive: boolean = false;\n /** Accessible remove action. Use `{label}` as the chip-label placeholder. */\n @Prop() removeLabel: string = 'Remove {label}';\n\n /** Fired when the remove button is clicked. */\n @Event() dsRemove!: EventEmitter<void>;\n\n private handleRemove = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.isInactive) return;\n this.dsRemove.emit();\n };\n\n render() {\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const maxWidthStyle =\n this.maxWidth != null\n ? { maxWidth: typeof this.maxWidth === 'number' ? `${this.maxWidth}px` : this.maxWidth }\n : undefined;\n\n return (\n <Host\n class={{\n tag: true,\n chip: true,\n [`chip--${this.state}`]: true,\n [`tag--size-${this.size}`]: true,\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n 'tag--rounded': this.rounded,\n 'tag--removable': true,\n /* Hover overlay on the chip surface — dismiss is the only action. */\n 'ds-interaction-fill': !this.isInactive,\n 'ds-control-inactive': this.isInactive,\n }}\n style={maxWidthStyle}\n aria-disabled={this.isInactive ? 'true' : undefined}\n >\n <ds-text class=\"tag__label\" as=\"span\" variant={textVariant} color=\"inherit\">\n {this.label}\n </ds-text>\n <button\n type=\"button\"\n class=\"tag__remove ds-focus-ring-inset\"\n onClick={this.handleRemove}\n aria-label={this.removeLabel.replace('{label}', this.label)}\n disabled={this.isInactive || undefined}\n >\n <ds-icon class=\"tag__remove-x\" name=\"Cross\" size={iconSize} color=\"inherit\"></ds-icon>\n </button>\n </Host>\n );\n }\n}\n",
314
+ "content": "import { Component, Prop, Event, EventEmitter, h, Host } from '@stencil/core';\nimport { CONTROL_TEXT_VARIANT, type ControlInsetDepth } from '../../utils';\n\n/**\n * Semantic chip state — replaces Tag’s intent × contrast matrix.\n * - `default` — neutral faint\n * - `active` — brand faint\n * - `error` — negative faint\n * - `caution` — caution faint\n */\nexport type ChipState = 'default' | 'active' | 'error' | 'caution';\nexport type ChipSize = 'md' | 'sm' | 'xs';\n\n/** Dismiss `ds-icon` size — same iconography metrics as Tag’s leading icon. */\nconst ICON_SIZE: Record<ChipSize, 'md' | 'sm' | 'xs'> = {\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\n/**\n * Removable chip — same density recipe as Tag, but colored by semantic `state`\n * (not intent × contrast). Not a toggle/select control; the only intentional\n * action is remove.\n */\n@Component({\n tag: 'ds-chip',\n styleUrl: 'Chip.css',\n scoped: true,\n})\nexport class Chip {\n @Prop() label!: string;\n /** Semantic color state. @default 'default' */\n @Prop() state: ChipState = 'default';\n @Prop() size: ChipSize = 'md';\n /** Use reduced outer geometry when nested inside a control of the same size. */\n @Prop() isInset: boolean = false;\n /** Single removes 4px overall; double removes 8px overall (xs stays single). */\n @Prop() insetDepth: ControlInsetDepth = 'single';\n @Prop() rounded: boolean = false;\n @Prop() maxWidth: string | number | undefined;\n @Prop() isInactive: boolean = false;\n /** Accessible remove action. Use `{label}` as the chip-label placeholder. */\n @Prop() removeLabel: string = 'Remove {label}';\n\n /** Fired when the remove button is clicked. */\n @Event() dsRemove!: EventEmitter<void>;\n\n private handleRemove = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.isInactive) return;\n this.dsRemove.emit();\n };\n\n render() {\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const doubleInset = this.isInset && this.insetDepth === 'double' && this.size !== 'xs';\n\n const maxWidthStyle =\n this.maxWidth != null\n ? { maxWidth: typeof this.maxWidth === 'number' ? `${this.maxWidth}px` : this.maxWidth }\n : undefined;\n\n return (\n <Host\n class={{\n tag: true,\n chip: true,\n [`chip--${this.state}`]: true,\n [`tag--size-${this.size}`]: true,\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n 'ds-control--inset': this.isInset && !doubleInset,\n 'ds-control--inset-double': doubleInset,\n 'tag--rounded': this.rounded,\n 'tag--removable': true,\n /* Hover overlay on the chip surface — dismiss is the only action. */\n 'ds-interaction-fill': !this.isInactive,\n 'ds-control-inactive': this.isInactive,\n }}\n style={maxWidthStyle}\n aria-disabled={this.isInactive ? 'true' : undefined}\n >\n <ds-text class=\"tag__label\" as=\"span\" variant={textVariant} color=\"inherit\">\n {this.label}\n </ds-text>\n <button\n type=\"button\"\n class={{\n tag__remove: true,\n 'ds-focus-ring-inset': true,\n }}\n onClick={this.handleRemove}\n aria-label={this.removeLabel.replace('{label}', this.label)}\n disabled={this.isInactive || undefined}\n >\n <ds-icon class=\"tag__remove-x\" name=\"Cross\" size={iconSize} color=\"inherit\"></ds-icon>\n </button>\n </Host>\n );\n }\n}\n",
278
315
  "type": "registry:ui"
279
316
  }
280
317
  ]