@ds-mo/ui 13.11.1 → 13.13.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 (167) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +307 -10
  4. package/dist/angular/ds-button-filled.d.ts +1 -1
  5. package/dist/angular/ds-button-filled.js +3 -3
  6. package/dist/angular/ds-button-unfilled.d.ts +1 -1
  7. package/dist/angular/ds-button-unfilled.js +3 -3
  8. package/dist/angular/ds-mobile-header.d.ts +1 -1
  9. package/dist/angular/ds-mobile-header.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.d.ts +31 -0
  13. package/dist/angular/ds-table.js +57 -0
  14. package/dist/angular/ds-tag.d.ts +1 -1
  15. package/dist/angular/ds-tag.js +3 -3
  16. package/dist/angular/index.d.ts +1 -1
  17. package/dist/angular/index.js +1 -0
  18. package/dist/angular/proxies.d.ts +1 -0
  19. package/dist/angular/proxies.js +1 -0
  20. package/dist/components/ds-agent-response.js +1 -1
  21. package/dist/components/ds-banner.js +1 -1
  22. package/dist/components/ds-bar-nav.js +1 -1
  23. package/dist/components/ds-bar-title.js +1 -1
  24. package/dist/components/ds-bar-workflow.js +1 -1
  25. package/dist/components/ds-bar-workflow.js.map +1 -1
  26. package/dist/components/ds-button-filled.js +1 -1
  27. package/dist/components/ds-button-unfilled.js +1 -1
  28. package/dist/components/ds-card-chart.js +1 -1
  29. package/dist/components/ds-card-overview.js +1 -1
  30. package/dist/components/ds-card-overview.js.map +1 -1
  31. package/dist/components/ds-card-setting.js +1 -1
  32. package/dist/components/ds-chart-legend.js +1 -1
  33. package/dist/components/ds-chart-legend.js.map +1 -1
  34. package/dist/components/ds-checkbox.js +1 -1
  35. package/dist/components/ds-chip.js +1 -1
  36. package/dist/components/ds-chip.js.map +1 -1
  37. package/dist/components/ds-code-block.js +1 -1
  38. package/dist/components/ds-conversation-list-item.js +1 -1
  39. package/dist/components/ds-conversation-list-item.js.map +1 -1
  40. package/dist/components/ds-input.js +1 -1
  41. package/dist/components/ds-input.js.map +1 -1
  42. package/dist/components/ds-markdown.js +1 -1
  43. package/dist/components/ds-menu.js +1 -1
  44. package/dist/components/ds-message-actions.js +1 -1
  45. package/dist/components/ds-message-composer.js +1 -1
  46. package/dist/components/ds-message-scroller.js +1 -1
  47. package/dist/components/ds-mobile-bar-nav.js +1 -1
  48. package/dist/components/ds-mobile-header.js +1 -1
  49. package/dist/components/ds-mobile-section-switcher.js +1 -1
  50. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  51. package/dist/components/ds-modal.js +1 -1
  52. package/dist/components/ds-panel-nav.js +1 -1
  53. package/dist/components/ds-panel-sub-nav.js +1 -1
  54. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  55. package/dist/components/ds-panel-tool-header.js +1 -1
  56. package/dist/components/ds-panel-tool-search.js +1 -1
  57. package/dist/components/ds-panel-tools.js +1 -1
  58. package/dist/components/ds-radio.js +1 -1
  59. package/dist/components/ds-radio.js.map +1 -1
  60. package/dist/components/ds-scroll-overlay.js +1 -1
  61. package/dist/components/ds-scroll-overlay.js.map +1 -1
  62. package/dist/components/ds-select.js +1 -1
  63. package/dist/components/ds-select.js.map +1 -1
  64. package/dist/components/ds-shell-app.js +1 -1
  65. package/dist/components/ds-shell-app.js.map +1 -1
  66. package/dist/components/ds-shell-tools.js +1 -1
  67. package/dist/components/ds-skeleton.js +1 -1
  68. package/dist/components/ds-slider.js +1 -1
  69. package/dist/components/ds-switch.js +1 -1
  70. package/dist/components/ds-tab-group.js +1 -1
  71. package/dist/components/ds-table.d.ts +11 -0
  72. package/dist/components/ds-table.js +2 -0
  73. package/dist/components/ds-table.js.map +1 -0
  74. package/dist/components/ds-tag.js +1 -1
  75. package/dist/components/ds-tag.js.map +1 -1
  76. package/dist/components/ds-toast.js +1 -1
  77. package/dist/components/ds-typing-indicator.js +1 -1
  78. package/dist/components/index.d.ts +30 -0
  79. package/dist/components/p-B1JB0Zn-.js +2 -0
  80. package/dist/components/{p-DgglLVCj.js.map → p-B1JB0Zn-.js.map} +1 -1
  81. package/dist/components/p-B2t8alvH.js +2 -0
  82. package/dist/components/{p-DK4PGrHm.js.map → p-B2t8alvH.js.map} +1 -1
  83. package/dist/components/p-BAGTb6cZ.js +2 -0
  84. package/dist/components/p-BAGTb6cZ.js.map +1 -0
  85. package/dist/components/p-BEEYhbIb.js +2 -0
  86. package/dist/components/p-BEEYhbIb.js.map +1 -0
  87. package/dist/components/{p-BRajO-Za.js → p-BFMV9TJO.js} +2 -2
  88. package/dist/components/p-BNHPCCw8.js +2 -0
  89. package/dist/components/{p-DCN04sgt.js.map → p-BNHPCCw8.js.map} +1 -1
  90. package/dist/components/{p-DJGdoPMG.js → p-BUZLhvs1.js} +2 -2
  91. package/dist/components/p-BgaF83uh.js +2 -0
  92. package/dist/components/{p-C5gZHZHU.js.map → p-BgaF83uh.js.map} +1 -1
  93. package/dist/components/p-Br0fwWUG.js +2 -0
  94. package/dist/components/{p-BHb3Ws8e.js.map → p-Br0fwWUG.js.map} +1 -1
  95. package/dist/components/{p-DcmqsAMP.js → p-BydCwx7x.js} +2 -2
  96. package/dist/components/p-C3Z01Glr.js +2 -0
  97. package/dist/components/p-C3Z01Glr.js.map +1 -0
  98. package/dist/components/{p-Dg9qiMDa.js → p-C9StMCWg.js} +2 -2
  99. package/dist/components/{p-BX57q1Lo.js → p-CSlTJWFG.js} +2 -2
  100. package/dist/components/{p-BQ7Nzx9A.js → p-Ch5yT3UA.js} +2 -2
  101. package/dist/components/p-Cw1bbiCG.js +2 -0
  102. package/dist/components/p-Cw1bbiCG.js.map +1 -0
  103. package/dist/components/p-CzV4gIxd.js +2 -0
  104. package/dist/components/p-CzV4gIxd.js.map +1 -0
  105. package/dist/components/p-D-F8eyXy.js +2 -0
  106. package/dist/components/p-D-F8eyXy.js.map +1 -0
  107. package/dist/components/p-DGvzGGcu.js +2 -0
  108. package/dist/components/{p-CIlO_j3q.js.map → p-DGvzGGcu.js.map} +1 -1
  109. package/dist/components/{p-DkhE3BsH.js → p-bLCbOPYa.js} +2 -2
  110. package/dist/components/p-cPh32CFB.js +2 -0
  111. package/dist/components/{p-BnGJrBPG.js.map → p-cPh32CFB.js.map} +1 -1
  112. package/dist/docs/components.json +1590 -59
  113. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  114. package/dist/lib/components/MobileHeader/mobile-header-types.d.ts +3 -2
  115. package/dist/mcp-data/registry/button-filled.json +20 -1
  116. package/dist/mcp-data/registry/button-unfilled.json +20 -1
  117. package/dist/mcp-data/registry/mobile-header.json +48 -10
  118. package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
  119. package/dist/mcp-data/registry/registry.json +309 -9
  120. package/dist/mcp-data/registry/shell-app.json +4 -2
  121. package/dist/mcp-data/registry/shell-tools.json +4 -4
  122. package/dist/mcp-data/registry/tab-group.json +22 -2
  123. package/dist/mcp-data/registry/table.json +777 -0
  124. package/dist/mcp-data/registry/tag.json +22 -3
  125. package/dist/react/components.d.ts +1 -0
  126. package/dist/react/components.js +1 -0
  127. package/dist/react/ds-table.d.ts +17 -0
  128. package/dist/react/ds-table.js +19 -0
  129. package/dist/styles/table.css +874 -0
  130. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  131. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  132. package/dist/types/components/MobileHeader/MobileHeader.d.ts +8 -3
  133. package/dist/types/components/MobileHeader/index.d.ts +1 -1
  134. package/dist/types/components/MobileHeader/mobile-header-types.d.ts +3 -2
  135. package/dist/types/components/ShellApp/ShellApp.d.ts +8 -0
  136. package/dist/types/components/TabGroup/TabGroup.d.ts +3 -0
  137. package/dist/types/components/Table/Table.d.ts +126 -0
  138. package/dist/types/components/Table/index.d.ts +2 -0
  139. package/dist/types/components/Table/table-model.d.ts +29 -0
  140. package/dist/types/components/Table/table-types.d.ts +189 -0
  141. package/dist/types/components/Tag/Tag.d.ts +2 -0
  142. package/dist/types/components.d.ts +417 -6
  143. package/package.json +3 -2
  144. package/dist/components/p-BHb3Ws8e.js +0 -2
  145. package/dist/components/p-BnGJrBPG.js +0 -2
  146. package/dist/components/p-C5gZHZHU.js +0 -2
  147. package/dist/components/p-CIlO_j3q.js +0 -2
  148. package/dist/components/p-CVmtbj-6.js +0 -2
  149. package/dist/components/p-CVmtbj-6.js.map +0 -1
  150. package/dist/components/p-DAbaMtEX.js +0 -2
  151. package/dist/components/p-DAbaMtEX.js.map +0 -1
  152. package/dist/components/p-DCN04sgt.js +0 -2
  153. package/dist/components/p-DK4PGrHm.js +0 -2
  154. package/dist/components/p-DW9p068S.js +0 -2
  155. package/dist/components/p-DW9p068S.js.map +0 -1
  156. package/dist/components/p-DgglLVCj.js +0 -2
  157. package/dist/components/p-Xftomzsv.js +0 -2
  158. package/dist/components/p-Xftomzsv.js.map +0 -1
  159. package/dist/components/p-c1pY-Mqq.js +0 -2
  160. package/dist/components/p-c1pY-Mqq.js.map +0 -1
  161. /package/dist/components/{p-BRajO-Za.js.map → p-BFMV9TJO.js.map} +0 -0
  162. /package/dist/components/{p-DJGdoPMG.js.map → p-BUZLhvs1.js.map} +0 -0
  163. /package/dist/components/{p-DcmqsAMP.js.map → p-BydCwx7x.js.map} +0 -0
  164. /package/dist/components/{p-Dg9qiMDa.js.map → p-C9StMCWg.js.map} +0 -0
  165. /package/dist/components/{p-BX57q1Lo.js.map → p-CSlTJWFG.js.map} +0 -0
  166. /package/dist/components/{p-BQ7Nzx9A.js.map → p-Ch5yT3UA.js.map} +0 -0
  167. /package/dist/components/{p-DkhE3BsH.js.map → p-bLCbOPYa.js.map} +0 -0
@@ -63,12 +63,13 @@
63
63
  "Warning signals higher urgency or risk than caution, which asks for attention before a possible issue.",
64
64
  "Contrast changes visual prominence without changing semantic intent or parent surface context.",
65
65
  "Rounded is an optional visual style with no semantic difference.",
66
+ "isInset opts into reduced outer geometry only when Tag is nested inside a control of the same density; semantic styling, typography, icons, gaps, radius, and interaction remain unchanged.",
66
67
  "Labels stay on one line and truncate only when the owner supplies a maximum width.",
67
68
  "Omitted interactive renders static metadata with no focus, event, or suffix. Interactive adds the fixed ChevronUpDown suffix and emits dsClick without toggling expanded internally.",
68
69
  "isInactive disables only the interactive button and applies the shared inactive treatment."
69
70
  ],
70
71
  "responsiveBehavior": [
71
- "The owner selects md, sm, or xs density to match its local layout and owns collection wrapping, overflow, and condensation.",
72
+ "The owner selects md, sm, or xs density to match its local layout and owns collection wrapping, overflow, and condensation. Use isInset only for same-density control nesting.",
72
73
  "Tag does not change size or behavior automatically at breakpoints."
73
74
  ],
74
75
  "frameworkCaveats": {
@@ -151,6 +152,15 @@
151
152
  "mutable": false,
152
153
  "description": "Disable an interactive Tag and apply the shared inactive treatment."
153
154
  },
155
+ "isInset": {
156
+ "type": "boolean",
157
+ "resolvedType": "boolean",
158
+ "attribute": "is-inset",
159
+ "default": "false",
160
+ "required": false,
161
+ "mutable": false,
162
+ "description": "Use the reduced outer geometry when nested inside a control of the same size."
163
+ },
154
164
  "label": {
155
165
  "type": "string",
156
166
  "resolvedType": "string",
@@ -256,6 +266,15 @@
256
266
  "mutable": false,
257
267
  "description": "Disable an interactive Tag and apply the shared inactive treatment."
258
268
  },
269
+ "isInset": {
270
+ "type": "boolean",
271
+ "resolvedType": "boolean",
272
+ "attribute": "is-inset",
273
+ "default": "false",
274
+ "required": false,
275
+ "mutable": false,
276
+ "description": "Use the reduced outer geometry when nested inside a control of the same size."
277
+ },
259
278
  "label": {
260
279
  "type": "string",
261
280
  "resolvedType": "string",
@@ -340,12 +359,12 @@
340
359
  "files": [
341
360
  {
342
361
  "path": "src/wc/components/Tag/Tag.css",
343
- "content": "@import '../../utils/tag-chip.css';\n\n/* ── Intent × Contrast — strong ─────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-strong) { background-color: var(--color-background-strong-neutral); color: var(--color-foreground-medium-neutral); }\n:host(.tag--intent-brand.tag--contrast-strong) { background-color: var(--color-background-strong-brand); color: var(--color-foreground-on-strong-background-primary); }\n:host(.tag--intent-ai.tag--contrast-strong) { background-color: var(--color-background-strong-ai); color: var(--color-foreground-medium-ai); }\n:host(.tag--intent-negative.tag--contrast-strong) { background-color: var(--color-background-strong-negative); color: var(--color-foreground-medium-negative); }\n:host(.tag--intent-warning.tag--contrast-strong) { background-color: var(--color-background-strong-warning); color: var(--color-foreground-medium-warning); }\n:host(.tag--intent-caution.tag--contrast-strong) { background-color: var(--color-background-strong-caution); color: var(--color-foreground-medium-caution); }\n:host(.tag--intent-positive.tag--contrast-strong) { background-color: var(--color-background-strong-positive); color: var(--color-foreground-medium-positive); }\n\n/* ── Intent × Contrast — bold ───────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-bold) { background-color: var(--color-background-bold-neutral); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-brand.tag--contrast-bold) { background-color: var(--color-background-bold-brand); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-ai.tag--contrast-bold) { background-color: var(--color-background-bold-ai); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-negative.tag--contrast-bold) { background-color: var(--color-background-bold-negative); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-warning.tag--contrast-bold) { background-color: var(--color-background-bold-warning); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-caution.tag--contrast-bold) { background-color: var(--color-background-bold-caution); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-positive.tag--contrast-bold) { background-color: var(--color-background-bold-positive); color: var(--color-foreground-on-bold-background-primary); }\n\n/* ── Intent × Contrast — medium ─────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-medium) { background-color: var(--color-background-medium-neutral); color: var(--color-foreground-strong-neutral); }\n:host(.tag--intent-brand.tag--contrast-medium) { background-color: var(--color-background-medium-brand); color: var(--color-foreground-on-medium-background-primary); }\n:host(.tag--intent-ai.tag--contrast-medium) { background-color: var(--color-background-medium-ai); color: var(--color-foreground-strong-ai); }\n:host(.tag--intent-negative.tag--contrast-medium) { background-color: var(--color-background-medium-negative); color: var(--color-foreground-strong-negative); }\n:host(.tag--intent-warning.tag--contrast-medium) { background-color: var(--color-background-medium-warning); color: var(--color-foreground-strong-warning); }\n:host(.tag--intent-caution.tag--contrast-medium) { background-color: var(--color-background-medium-caution); color: var(--color-foreground-strong-caution); }\n:host(.tag--intent-positive.tag--contrast-medium) { background-color: var(--color-background-medium-positive); color: var(--color-foreground-strong-positive); }\n\n/* ── Intent × Contrast — faint ──────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-faint) { background-color: var(--color-background-faint-neutral); color: var(--color-foreground-bold-neutral); }\n:host(.tag--intent-brand.tag--contrast-faint) { background-color: var(--color-background-faint-brand); color: var(--color-foreground-bold-brand); }\n:host(.tag--intent-ai.tag--contrast-faint) { background-color: var(--color-background-faint-ai); color: var(--color-foreground-bold-ai); }\n:host(.tag--intent-negative.tag--contrast-faint) { background-color: var(--color-background-faint-negative); color: var(--color-foreground-bold-negative); }\n:host(.tag--intent-warning.tag--contrast-faint) { background-color: var(--color-background-faint-warning); color: var(--color-foreground-bold-warning); }\n:host(.tag--intent-caution.tag--contrast-faint) { background-color: var(--color-background-faint-caution); color: var(--color-foreground-bold-caution); }\n:host(.tag--intent-positive.tag--contrast-faint) { background-color: var(--color-background-faint-positive); color: var(--color-foreground-bold-positive); }\n\n/* ── Interactive menu trigger ───────────────────────────────────────────── */\n\n:host(.tag--interactive) {\n padding: 0;\n gap: 0;\n}\n\n.tag__button {\n all: unset;\n position: relative;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n height: 100%;\n padding: 0 var(--ds-control-padding-inline);\n gap: var(--ds-control-gap);\n border-radius: inherit;\n color: inherit;\n cursor: default;\n}\n\n.tag__button:disabled {\n cursor: not-allowed;\n}\n\n.tag__button--expanded::after {\n background: var(--ds-interaction-pressed);\n}\n\n/* Hover/press wash stays above the Tag's semantic background. */\n\n/* ── Icons ──────────────────────────────────────────────────────────────── */\n\n.tag__prefix-icon,\n.tag__suffix-icon {\n position: relative;\n z-index: 2;\n display: inline-flex;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n",
362
+ "content": "@import '../../utils/tag-chip.css';\n@import '../../utils/control-density-inset.css';\n\n/* ── Intent × Contrast — strong ─────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-strong) { background-color: var(--color-background-strong-neutral); color: var(--color-foreground-medium-neutral); }\n:host(.tag--intent-brand.tag--contrast-strong) { background-color: var(--color-background-strong-brand); color: var(--color-foreground-on-strong-background-primary); }\n:host(.tag--intent-ai.tag--contrast-strong) { background-color: var(--color-background-strong-ai); color: var(--color-foreground-medium-ai); }\n:host(.tag--intent-negative.tag--contrast-strong) { background-color: var(--color-background-strong-negative); color: var(--color-foreground-medium-negative); }\n:host(.tag--intent-warning.tag--contrast-strong) { background-color: var(--color-background-strong-warning); color: var(--color-foreground-medium-warning); }\n:host(.tag--intent-caution.tag--contrast-strong) { background-color: var(--color-background-strong-caution); color: var(--color-foreground-medium-caution); }\n:host(.tag--intent-positive.tag--contrast-strong) { background-color: var(--color-background-strong-positive); color: var(--color-foreground-medium-positive); }\n\n/* ── Intent × Contrast — bold ───────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-bold) { background-color: var(--color-background-bold-neutral); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-brand.tag--contrast-bold) { background-color: var(--color-background-bold-brand); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-ai.tag--contrast-bold) { background-color: var(--color-background-bold-ai); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-negative.tag--contrast-bold) { background-color: var(--color-background-bold-negative); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-warning.tag--contrast-bold) { background-color: var(--color-background-bold-warning); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-caution.tag--contrast-bold) { background-color: var(--color-background-bold-caution); color: var(--color-foreground-on-bold-background-primary); }\n:host(.tag--intent-positive.tag--contrast-bold) { background-color: var(--color-background-bold-positive); color: var(--color-foreground-on-bold-background-primary); }\n\n/* ── Intent × Contrast — medium ─────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-medium) { background-color: var(--color-background-medium-neutral); color: var(--color-foreground-strong-neutral); }\n:host(.tag--intent-brand.tag--contrast-medium) { background-color: var(--color-background-medium-brand); color: var(--color-foreground-on-medium-background-primary); }\n:host(.tag--intent-ai.tag--contrast-medium) { background-color: var(--color-background-medium-ai); color: var(--color-foreground-strong-ai); }\n:host(.tag--intent-negative.tag--contrast-medium) { background-color: var(--color-background-medium-negative); color: var(--color-foreground-strong-negative); }\n:host(.tag--intent-warning.tag--contrast-medium) { background-color: var(--color-background-medium-warning); color: var(--color-foreground-strong-warning); }\n:host(.tag--intent-caution.tag--contrast-medium) { background-color: var(--color-background-medium-caution); color: var(--color-foreground-strong-caution); }\n:host(.tag--intent-positive.tag--contrast-medium) { background-color: var(--color-background-medium-positive); color: var(--color-foreground-strong-positive); }\n\n/* ── Intent × Contrast — faint ──────────────────────────────────────────── */\n\n:host(.tag--intent-neutral.tag--contrast-faint) { background-color: var(--color-background-faint-neutral); color: var(--color-foreground-bold-neutral); }\n:host(.tag--intent-brand.tag--contrast-faint) { background-color: var(--color-background-faint-brand); color: var(--color-foreground-bold-brand); }\n:host(.tag--intent-ai.tag--contrast-faint) { background-color: var(--color-background-faint-ai); color: var(--color-foreground-bold-ai); }\n:host(.tag--intent-negative.tag--contrast-faint) { background-color: var(--color-background-faint-negative); color: var(--color-foreground-bold-negative); }\n:host(.tag--intent-warning.tag--contrast-faint) { background-color: var(--color-background-faint-warning); color: var(--color-foreground-bold-warning); }\n:host(.tag--intent-caution.tag--contrast-faint) { background-color: var(--color-background-faint-caution); color: var(--color-foreground-bold-caution); }\n:host(.tag--intent-positive.tag--contrast-faint) { background-color: var(--color-background-faint-positive); color: var(--color-foreground-bold-positive); }\n\n/* ── Interactive menu trigger ───────────────────────────────────────────── */\n\n:host(.tag--interactive) {\n padding: 0;\n gap: 0;\n}\n\n.tag__button {\n all: unset;\n position: relative;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n height: 100%;\n padding: 0 var(--ds-control-padding-inline);\n gap: var(--ds-control-gap);\n border-radius: inherit;\n color: inherit;\n cursor: default;\n}\n\n.tag__button:disabled {\n cursor: not-allowed;\n}\n\n.tag__button--expanded::after {\n background: var(--ds-interaction-pressed);\n}\n\n/* Hover/press wash stays above the Tag's semantic background. */\n\n/* ── Icons ──────────────────────────────────────────────────────────────── */\n\n.tag__prefix-icon,\n.tag__suffix-icon {\n position: relative;\n z-index: 2;\n display: inline-flex;\n flex-shrink: 0;\n width: var(--ds-control-icon);\n height: var(--ds-control-icon);\n}\n",
344
363
  "type": "registry:ui"
345
364
  },
346
365
  {
347
366
  "path": "src/wc/components/Tag/Tag.tsx",
348
- "content": "import { Component, Event, EventEmitter, Prop, h, Host } from '@stencil/core';\nimport { CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type TagIntent = 'neutral' | 'brand' | 'ai' | 'negative' | 'warning' | 'caution' | 'positive';\nexport type TagContrast = 'strong' | 'bold' | 'medium' | 'faint';\nexport type TagSize = 'md' | 'sm' | 'xs';\n\n/**\n * `ds-icon` size prop matching control-density icon metrics\n * (md→20 / sm→16 / xs→12 via `--dimension-iconography-*`).\n */\nconst ICON_SIZE: Record<TagSize, 'md' | 'sm' | 'xs'> = {\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\n@Component({\n tag: 'ds-tag',\n styleUrl: 'Tag.css',\n scoped: true,\n})\nexport class Tag {\n @Prop() label!: string;\n /** Canonical icon name rendered before the visible label. */\n @Prop() icon: string = '';\n @Prop() intent: TagIntent = 'neutral';\n @Prop() contrast: TagContrast = 'faint';\n @Prop() size: TagSize = 'md';\n @Prop() rounded: boolean = false;\n @Prop() maxWidth: string | number | undefined;\n /** Render a menu-trigger button with a fixed ChevronUpDown suffix. */\n @Prop() interactive: boolean = false;\n /** Controlled open state for the menu triggered by an interactive Tag. */\n @Prop() expanded: boolean = false;\n /** ID of the menu controlled by an interactive Tag. */\n @Prop() ariaControls: string | undefined;\n /** Disable an interactive Tag and apply the shared inactive treatment. */\n @Prop() isInactive: boolean = false;\n\n /** Fired when the interactive Tag button is activated. */\n @Event() dsClick!: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n if (!this.interactive || this.isInactive) return;\n this.dsClick.emit(event);\n };\n\n render() {\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const maxWidthStyle = this.maxWidth != null\n ? { maxWidth: typeof this.maxWidth === 'number' ? `${this.maxWidth}px` : this.maxWidth }\n : undefined;\n const hostClass = {\n 'tag': true,\n [`tag--intent-${this.intent}`]: true,\n [`tag--contrast-${this.contrast}`]: 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--interactive': this.interactive,\n 'ds-control-inactive': this.interactive && this.isInactive,\n };\n const content = [\n this.icon && (\n <ds-icon\n class=\"tag__prefix-icon\"\n name={this.icon}\n size={iconSize}\n color=\"inherit\"\n ></ds-icon>\n ),\n <ds-text class=\"tag__label\" as=\"span\" variant={textVariant} color=\"inherit\">\n {this.label}\n </ds-text>,\n ];\n\n if (!this.interactive) {\n return <Host class={hostClass} style={maxWidthStyle}>{content}</Host>;\n }\n\n return (\n <Host class={hostClass} style={maxWidthStyle}>\n <button\n type=\"button\"\n class={{\n 'tag__button': true,\n 'tag__button--expanded': this.expanded,\n 'ds-interaction-fill': true,\n 'ds-focus-ring-inset': true,\n }}\n aria-haspopup=\"menu\"\n aria-expanded={this.expanded ? 'true' : 'false'}\n aria-controls={this.ariaControls}\n disabled={this.isInactive || undefined}\n onClick={this.handleClick}\n >\n {content}\n <ds-icon\n class=\"tag__suffix-icon\"\n name=\"ChevronUpDown\"\n size={iconSize}\n color=\"inherit\"\n ></ds-icon>\n </button>\n </Host>\n );\n }\n}\n",
367
+ "content": "import { Component, Event, EventEmitter, Prop, h, Host } from '@stencil/core';\nimport { CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type TagIntent = 'neutral' | 'brand' | 'ai' | 'negative' | 'warning' | 'caution' | 'positive';\nexport type TagContrast = 'strong' | 'bold' | 'medium' | 'faint';\nexport type TagSize = 'md' | 'sm' | 'xs';\n\n/**\n * `ds-icon` size prop matching control-density icon metrics\n * (md→20 / sm→16 / xs→12 via `--dimension-iconography-*`).\n */\nconst ICON_SIZE: Record<TagSize, 'md' | 'sm' | 'xs'> = {\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\n@Component({\n tag: 'ds-tag',\n styleUrl: 'Tag.css',\n scoped: true,\n})\nexport class Tag {\n @Prop() label!: string;\n /** Canonical icon name rendered before the visible label. */\n @Prop() icon: string = '';\n @Prop() intent: TagIntent = 'neutral';\n @Prop() contrast: TagContrast = 'faint';\n @Prop() size: TagSize = 'md';\n /** Use the reduced outer geometry when nested inside a control of the same size. */\n @Prop() isInset: boolean = false;\n @Prop() rounded: boolean = false;\n @Prop() maxWidth: string | number | undefined;\n /** Render a menu-trigger button with a fixed ChevronUpDown suffix. */\n @Prop() interactive: boolean = false;\n /** Controlled open state for the menu triggered by an interactive Tag. */\n @Prop() expanded: boolean = false;\n /** ID of the menu controlled by an interactive Tag. */\n @Prop() ariaControls: string | undefined;\n /** Disable an interactive Tag and apply the shared inactive treatment. */\n @Prop() isInactive: boolean = false;\n\n /** Fired when the interactive Tag button is activated. */\n @Event() dsClick!: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n if (!this.interactive || this.isInactive) return;\n this.dsClick.emit(event);\n };\n\n render() {\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const maxWidthStyle = this.maxWidth != null\n ? { maxWidth: typeof this.maxWidth === 'number' ? `${this.maxWidth}px` : this.maxWidth }\n : undefined;\n const hostClass = {\n 'tag': true,\n [`tag--intent-${this.intent}`]: true,\n [`tag--contrast-${this.contrast}`]: 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,\n 'tag--rounded': this.rounded,\n 'tag--interactive': this.interactive,\n 'ds-control-inactive': this.interactive && this.isInactive,\n };\n const content = [\n this.icon && (\n <ds-icon\n class=\"tag__prefix-icon\"\n name={this.icon}\n size={iconSize}\n color=\"inherit\"\n ></ds-icon>\n ),\n <ds-text class=\"tag__label\" as=\"span\" variant={textVariant} color=\"inherit\">\n {this.label}\n </ds-text>,\n ];\n\n if (!this.interactive) {\n return <Host class={hostClass} style={maxWidthStyle}>{content}</Host>;\n }\n\n return (\n <Host class={hostClass} style={maxWidthStyle}>\n <button\n type=\"button\"\n class={{\n 'tag__button': true,\n 'tag__button--expanded': this.expanded,\n 'ds-interaction-fill': true,\n 'ds-focus-ring-inset': true,\n }}\n aria-haspopup=\"menu\"\n aria-expanded={this.expanded ? 'true' : 'false'}\n aria-controls={this.ariaControls}\n disabled={this.isInactive || undefined}\n onClick={this.handleClick}\n >\n {content}\n <ds-icon\n class=\"tag__suffix-icon\"\n name=\"ChevronUpDown\"\n size={iconSize}\n color=\"inherit\"\n ></ds-icon>\n </button>\n </Host>\n );\n }\n}\n",
349
368
  "type": "registry:ui"
350
369
  }
351
370
  ]
@@ -61,6 +61,7 @@ export { DsSlider } from "./ds-slider.js";
61
61
  export { DsSwatchPicker } from "./ds-swatch-picker.js";
62
62
  export { DsSwitch } from "./ds-switch.js";
63
63
  export { DsTabGroup } from "./ds-tab-group.js";
64
+ export { DsTable } from "./ds-table.js";
64
65
  export { DsTag } from "./ds-tag.js";
65
66
  export { DsText } from "./ds-text.js";
66
67
  export { DsToast } from "./ds-toast.js";
@@ -62,6 +62,7 @@ export { DsSlider } from "./ds-slider.js";
62
62
  export { DsSwatchPicker } from "./ds-swatch-picker.js";
63
63
  export { DsSwitch } from "./ds-switch.js";
64
64
  export { DsTabGroup } from "./ds-tab-group.js";
65
+ export { DsTable } from "./ds-table.js";
65
66
  export { DsTag } from "./ds-tag.js";
66
67
  export { DsText } from "./ds-text.js";
67
68
  export { DsToast } from "./ds-toast.js";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { EventName, StencilReactComponent } from './react-runtime.js';
6
+ import { type DsTableCustomEvent, type TableCellActionDetail, type TableGroupingChangeDetail, type TableLoadMoreDetail, type TableRowActivateDetail, type TableSelectionChangeDetail, type TableSortChangeDetail } from "@ds-mo/ui";
7
+ import type { Components } from "@ds-mo/ui/dist/components";
8
+ import { DsTable as DsTableElement } from "@ds-mo/ui/dist/components/ds-table.js";
9
+ export type DsTableEvents = {
10
+ onDsSortChange: EventName<DsTableCustomEvent<TableSortChangeDetail>>;
11
+ onDsGroupingChange: EventName<DsTableCustomEvent<TableGroupingChangeDetail>>;
12
+ onDsSelectionChange: EventName<DsTableCustomEvent<TableSelectionChangeDetail>>;
13
+ onDsLoadMore: EventName<DsTableCustomEvent<TableLoadMoreDetail>>;
14
+ onDsCellAction: EventName<DsTableCustomEvent<TableCellActionDetail>>;
15
+ onDsRowActivate: EventName<DsTableCustomEvent<TableRowActivateDetail>>;
16
+ };
17
+ export declare const DsTable: StencilReactComponent<DsTableElement, DsTableEvents, Components.DsTable, 'caption'>;
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { createComponent } from './react-runtime.js';
3
+ import React from 'react';
4
+ import { DsTable as DsTableElement, defineCustomElement as defineDsTable } from "@ds-mo/ui/dist/components/ds-table.js";
5
+ export const DsTable = /*@__PURE__*/ createComponent({
6
+ tagName: 'ds-table',
7
+ elementClass: DsTableElement,
8
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
+ react: React,
10
+ events: {
11
+ onDsSortChange: 'dsSortChange',
12
+ onDsGroupingChange: 'dsGroupingChange',
13
+ onDsSelectionChange: 'dsSelectionChange',
14
+ onDsLoadMore: 'dsLoadMore',
15
+ onDsCellAction: 'dsCellAction',
16
+ onDsRowActivate: 'dsRowActivate'
17
+ },
18
+ defineCustomElement: defineDsTable
19
+ });