@ds-mo/ui 14.15.1 → 14.16.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.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +3 -3
- package/dist/agent.json +159 -22
- package/dist/angular/ds-button-unfilled.d.ts +1 -1
- package/dist/angular/ds-button-unfilled.js +3 -3
- package/dist/angular/ds-filter-menu.d.ts +1 -1
- package/dist/angular/ds-filter-menu.js +3 -3
- package/dist/angular/ds-select.d.ts +1 -1
- package/dist/angular/ds-select.js +3 -3
- package/dist/angular/ds-table-sort.d.ts +16 -0
- package/dist/angular/ds-table-sort.js +43 -0
- package/dist/angular/index.d.ts +1 -1
- package/dist/angular/index.js +1 -0
- package/dist/angular/proxies.d.ts +1 -0
- package/dist/angular/proxies.js +1 -0
- package/dist/components/ds-agent-activity.js +1 -1
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-agent-source-list.js +1 -1
- package/dist/components/ds-agent-tool-call.js +1 -1
- package/dist/components/ds-attachment-list.js +1 -1
- package/dist/components/ds-badge.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-banner.js.map +1 -1
- package/dist/components/ds-bar-action.js +1 -1
- package/dist/components/ds-bar-action.js.map +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-bar-workflow.js.map +1 -1
- package/dist/components/ds-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-chart.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart-legend.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +1 -1
- package/dist/components/ds-chip.js.map +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-conversation-list-section.js +1 -1
- package/dist/components/ds-empty-state.js +1 -1
- package/dist/components/ds-field.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-filter-menu.js.map +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-loader.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-actions.js.map +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-composer.js.map +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-message.js +1 -1
- package/dist/components/ds-mobile-bar-nav.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js +1 -1
- package/dist/components/ds-panel-sub-nav.js.map +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tool-search.js.map +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-paper-texture.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-app.js.map +1 -1
- package/dist/components/ds-shell-page.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-skeleton.js +1 -1
- package/dist/components/ds-slider.js +1 -1
- package/dist/components/ds-slider.js.map +1 -1
- package/dist/components/ds-swatch-picker.js +1 -1
- package/dist/components/ds-switch.js +1 -1
- package/dist/components/ds-tab-group.js +1 -1
- package/dist/components/ds-table-saved-views.js +1 -1
- package/dist/components/ds-table-saved-views.js.map +1 -1
- package/dist/components/ds-table-sort.d.ts +11 -0
- package/dist/components/ds-table-sort.js +2 -0
- package/dist/components/ds-table-sort.js.map +1 -0
- package/dist/components/ds-table-toolbar.js +1 -1
- package/dist/components/ds-table-toolbar.js.map +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-tag.js +1 -1
- package/dist/components/ds-text.js +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-toast.js.map +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/ds-typing-indicator.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-CjgnFGd6.js → p-0IbKxhqM.js} +2 -2
- package/dist/components/{p-CjgnFGd6.js.map → p-0IbKxhqM.js.map} +1 -1
- package/dist/components/p-23u3lIr1.js +2 -0
- package/dist/components/{p-DLkNcCY0.js.map → p-23u3lIr1.js.map} +1 -1
- package/dist/components/{p-DfyfrfHL.js → p-3dYwA4i_.js} +2 -2
- package/dist/components/{p-DfyfrfHL.js.map → p-3dYwA4i_.js.map} +1 -1
- package/dist/components/{p-C1q-tq3U.js → p-7tZx4ukz.js} +2 -2
- package/dist/components/{p-C5TrNd31.js → p-B0PEg5RF.js} +2 -2
- package/dist/components/{p-C5TrNd31.js.map → p-B0PEg5RF.js.map} +1 -1
- package/dist/components/{p-DZFilC--.js → p-BGXqFq2C.js} +2 -2
- package/dist/components/{p-Rfpd5mWO.js → p-BHDkJmrC.js} +2 -2
- package/dist/components/{p-Rfpd5mWO.js.map → p-BHDkJmrC.js.map} +1 -1
- package/dist/components/{p-BXPQmp7q.js → p-BK-JjdoN.js} +2 -2
- package/dist/components/p-BUhShHfb.js +2 -0
- package/dist/components/{p-URdgCwEs.js.map → p-BUhShHfb.js.map} +1 -1
- package/dist/components/{p-CKY989vF.js → p-BUrbVZJU.js} +2 -2
- package/dist/components/{p-CKY989vF.js.map → p-BUrbVZJU.js.map} +1 -1
- package/dist/components/{p-V2ywPfsR.js → p-BVlfQ8xZ.js} +2 -2
- package/dist/components/{p-V2ywPfsR.js.map → p-BVlfQ8xZ.js.map} +1 -1
- package/dist/components/p-BdnQv7Zl.js +2 -0
- package/dist/components/p-BdnQv7Zl.js.map +1 -0
- package/dist/components/{p-Btxwp4lJ.js → p-BhYWdbEp.js} +2 -2
- package/dist/components/{p-Btxwp4lJ.js.map → p-BhYWdbEp.js.map} +1 -1
- package/dist/components/{p-B80NfEqc.js → p-C0X2zKbB.js} +2 -2
- package/dist/components/{p-Cyw9odJX.js → p-C4p2i59V.js} +2 -2
- package/dist/components/{p-Cyw9odJX.js.map → p-C4p2i59V.js.map} +1 -1
- package/dist/components/p-C91izpHV.js +2 -0
- package/dist/components/{p-CnWC0QvG.js.map → p-C91izpHV.js.map} +1 -1
- package/dist/components/p-COVcyUAA.js +2 -0
- package/dist/components/p-COVcyUAA.js.map +1 -0
- package/dist/components/{p-D1Nqlrrl.js → p-C_TOgX82.js} +2 -2
- package/dist/components/{p-D1Nqlrrl.js.map → p-C_TOgX82.js.map} +1 -1
- package/dist/components/{p-Ct-m0I6U.js → p-CaAZ-D08.js} +2 -2
- package/dist/components/p-Cr2VT5zv.js +2 -0
- package/dist/components/{p-M9DPfXbP.js.map → p-Cr2VT5zv.js.map} +1 -1
- package/dist/components/{p-Dsn1RCS5.js → p-Ct2GVdSI.js} +2 -2
- package/dist/components/{p-Dsn1RCS5.js.map → p-Ct2GVdSI.js.map} +1 -1
- package/dist/components/p-CwkcFMMe.js +2 -0
- package/dist/components/{p-CWDmHPJC.js.map → p-CwkcFMMe.js.map} +1 -1
- package/dist/components/p-CxBE3l74.js +2 -0
- package/dist/components/{p-CKJzHclc.js.map → p-CxBE3l74.js.map} +1 -1
- package/dist/components/{p-PzI11fs8.js → p-CzcWZiH-.js} +2 -2
- package/dist/components/{p-PzI11fs8.js.map → p-CzcWZiH-.js.map} +1 -1
- package/dist/components/{p-BagXfn1G.js → p-D1YhYulL.js} +2 -2
- package/dist/components/{p-BzObtSlo.js → p-D2z2DgtX.js} +2 -2
- package/dist/components/{p-BzObtSlo.js.map → p-D2z2DgtX.js.map} +1 -1
- package/dist/components/{p-DcPVSNDr.js → p-D8Qd6gkf.js} +2 -2
- package/dist/components/{p-DcPVSNDr.js.map → p-D8Qd6gkf.js.map} +1 -1
- package/dist/components/p-DAV32g35.js +2 -0
- package/dist/components/p-DAV32g35.js.map +1 -0
- package/dist/components/{p-BHjw0x3L.js → p-DAqSoyd4.js} +2 -2
- package/dist/components/{p-BHjw0x3L.js.map → p-DAqSoyd4.js.map} +1 -1
- package/dist/components/{p-Bf_D3crn.js → p-DNJTN_s0.js} +2 -2
- package/dist/components/{p-DL_5VENG.js → p-DQqOzDEq.js} +2 -2
- package/dist/components/{p-C5eosu67.js → p-DRBTr6TS.js} +2 -2
- package/dist/components/{p-C5eosu67.js.map → p-DRBTr6TS.js.map} +1 -1
- package/dist/components/{p-D-kWb8cF.js → p-DSIOINBK.js} +2 -2
- package/dist/components/{p-QdI17bl-.js → p-Dg9qiMDa.js} +2 -2
- package/dist/components/{p-DTMxwYQj.js → p-EWI6ccs-.js} +2 -2
- package/dist/components/p-JPTkZ3Ji.js +2 -0
- package/dist/components/p-JPTkZ3Ji.js.map +1 -0
- package/dist/components/p-MxptXwlW.js +2 -0
- package/dist/components/{p-C2n8A8NA.js.map → p-MxptXwlW.js.map} +1 -1
- package/dist/components/{p-B7Hf86NF.js → p-PD1Vfg0t.js} +2 -2
- package/dist/components/{p-B7Hf86NF.js.map → p-PD1Vfg0t.js.map} +1 -1
- package/dist/components/{p-BxqBiVbH.js → p-U8JIZzI2.js} +2 -2
- package/dist/components/{p-BxqBiVbH.js.map → p-U8JIZzI2.js.map} +1 -1
- package/dist/components/{p-Ck_VRQYi.js → p-WGZWqh-B.js} +2 -2
- package/dist/components/{p-Ck_VRQYi.js.map → p-WGZWqh-B.js.map} +1 -1
- package/dist/components/{p-vWK5faWZ.js → p-a6qP60zb.js} +2 -2
- package/dist/components/p-vzxD117T.js +2 -0
- package/dist/components/{p-BzLnSwG9.js.map → p-vzxD117T.js.map} +1 -1
- package/dist/components/{p-jMCRaxQW.js → p-y4jhIkRc.js} +2 -2
- package/dist/components/{p-jMCRaxQW.js.map → p-y4jhIkRc.js.map} +1 -1
- package/dist/docs/components.json +318 -10
- package/dist/mcp-data/registry/button-unfilled.json +26 -7
- package/dist/mcp-data/registry/filter-menu.json +25 -6
- package/dist/mcp-data/registry/loader.json +1 -1
- package/dist/mcp-data/registry/registry.json +161 -21
- package/dist/mcp-data/registry/select.json +22 -3
- package/dist/mcp-data/registry/table-saved-views.json +4 -4
- package/dist/mcp-data/registry/table-sort.json +229 -0
- package/dist/mcp-data/registry/table-toolbar.json +19 -12
- package/dist/mcp-data/registry/table.json +10 -8
- package/dist/react/components.d.ts +1 -0
- package/dist/react/components.js +1 -0
- package/dist/react/ds-table-sort.d.ts +12 -0
- package/dist/react/ds-table-sort.js +12 -0
- package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +16 -1
- package/dist/types/components/FilterMenu/FilterMenu.d.ts +11 -0
- package/dist/types/components/Select/Select.d.ts +11 -0
- package/dist/types/components/Table/Table.d.ts +4 -0
- package/dist/types/components/Table/table-column-customizer.d.ts +2 -0
- package/dist/types/components/TableSort/TableSort.d.ts +24 -0
- package/dist/types/components/TableSort/table-sort-menu.d.ts +15 -0
- package/dist/types/components/TableToolbar/TableToolbar.d.ts +6 -0
- package/dist/types/components.d.ts +102 -6
- package/dist/types/utils/table-caption-compact.d.ts +6 -0
- package/dist/vue/components.d.ts +1 -0
- package/dist/vue/components.js +1 -0
- package/dist/vue/ds-button-unfilled.js +1 -0
- package/dist/vue/ds-filter-menu.js +1 -0
- package/dist/vue/ds-select.js +1 -0
- package/dist/vue/ds-table-sort.d.ts +3 -0
- package/dist/vue/ds-table-sort.js +13 -0
- package/package.json +1 -1
- package/dist/components/p-BzLnSwG9.js +0 -2
- package/dist/components/p-C2n8A8NA.js +0 -2
- package/dist/components/p-C7rzVotG.js +0 -2
- package/dist/components/p-C7rzVotG.js.map +0 -1
- package/dist/components/p-CKJzHclc.js +0 -2
- package/dist/components/p-CWDmHPJC.js +0 -2
- package/dist/components/p-Ca-I2UnB.js +0 -2
- package/dist/components/p-Ca-I2UnB.js.map +0 -1
- package/dist/components/p-CnWC0QvG.js +0 -2
- package/dist/components/p-CooNucm0.js +0 -2
- package/dist/components/p-CooNucm0.js.map +0 -1
- package/dist/components/p-DLkNcCY0.js +0 -2
- package/dist/components/p-M9DPfXbP.js +0 -2
- package/dist/components/p-URdgCwEs.js +0 -2
- /package/dist/components/{p-C1q-tq3U.js.map → p-7tZx4ukz.js.map} +0 -0
- /package/dist/components/{p-DZFilC--.js.map → p-BGXqFq2C.js.map} +0 -0
- /package/dist/components/{p-BXPQmp7q.js.map → p-BK-JjdoN.js.map} +0 -0
- /package/dist/components/{p-B80NfEqc.js.map → p-C0X2zKbB.js.map} +0 -0
- /package/dist/components/{p-Ct-m0I6U.js.map → p-CaAZ-D08.js.map} +0 -0
- /package/dist/components/{p-BagXfn1G.js.map → p-D1YhYulL.js.map} +0 -0
- /package/dist/components/{p-Bf_D3crn.js.map → p-DNJTN_s0.js.map} +0 -0
- /package/dist/components/{p-DL_5VENG.js.map → p-DQqOzDEq.js.map} +0 -0
- /package/dist/components/{p-D-kWb8cF.js.map → p-DSIOINBK.js.map} +0 -0
- /package/dist/components/{p-QdI17bl-.js.map → p-Dg9qiMDa.js.map} +0 -0
- /package/dist/components/{p-DTMxwYQj.js.map → p-EWI6ccs-.js.map} +0 -0
- /package/dist/components/{p-vWK5faWZ.js.map → p-a6qP60zb.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"timestamp": "2026-08-
|
|
2
|
+
"timestamp": "2026-08-25T04:02:43",
|
|
3
3
|
"compiler": {
|
|
4
4
|
"name": "@stencil/core",
|
|
5
5
|
"version": "4.43.5",
|
|
@@ -5132,6 +5132,35 @@
|
|
|
5132
5132
|
"getter": false,
|
|
5133
5133
|
"setter": false
|
|
5134
5134
|
},
|
|
5135
|
+
{
|
|
5136
|
+
"name": "collapseLabel",
|
|
5137
|
+
"type": "boolean",
|
|
5138
|
+
"complexType": {
|
|
5139
|
+
"original": "boolean",
|
|
5140
|
+
"resolved": "boolean",
|
|
5141
|
+
"references": {}
|
|
5142
|
+
},
|
|
5143
|
+
"mutable": false,
|
|
5144
|
+
"attr": "collapse-label",
|
|
5145
|
+
"reflectToAttr": true,
|
|
5146
|
+
"docs": "Collapse the visible label and chevron to an icon-only control when the\nowning `ds-table` caption is narrower than 900px. The trigger omits those\nparts rather than clipping them.",
|
|
5147
|
+
"docsTags": [
|
|
5148
|
+
{
|
|
5149
|
+
"name": "default",
|
|
5150
|
+
"text": "false"
|
|
5151
|
+
}
|
|
5152
|
+
],
|
|
5153
|
+
"default": "false",
|
|
5154
|
+
"values": [
|
|
5155
|
+
{
|
|
5156
|
+
"type": "boolean"
|
|
5157
|
+
}
|
|
5158
|
+
],
|
|
5159
|
+
"optional": false,
|
|
5160
|
+
"required": false,
|
|
5161
|
+
"getter": false,
|
|
5162
|
+
"setter": false
|
|
5163
|
+
},
|
|
5135
5164
|
{
|
|
5136
5165
|
"name": "controls",
|
|
5137
5166
|
"type": "string | undefined",
|
|
@@ -5279,7 +5308,7 @@
|
|
|
5279
5308
|
"mutable": false,
|
|
5280
5309
|
"attr": "has-menu",
|
|
5281
5310
|
"reflectToAttr": false,
|
|
5282
|
-
"docs": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `
|
|
5311
|
+
"docs": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `Table` for Customize table.\n\nUse `haspopup` directly for non-menu popups.",
|
|
5283
5312
|
"docsTags": [
|
|
5284
5313
|
{
|
|
5285
5314
|
"name": "default",
|
|
@@ -5910,6 +5939,7 @@
|
|
|
5910
5939
|
"ds-shell-tools",
|
|
5911
5940
|
"ds-table",
|
|
5912
5941
|
"ds-table-saved-views",
|
|
5942
|
+
"ds-table-sort",
|
|
5913
5943
|
"ds-toast"
|
|
5914
5944
|
],
|
|
5915
5945
|
"dependencies": [
|
|
@@ -6003,6 +6033,9 @@
|
|
|
6003
6033
|
"ds-table-saved-views": [
|
|
6004
6034
|
"ds-button-unfilled"
|
|
6005
6035
|
],
|
|
6036
|
+
"ds-table-sort": [
|
|
6037
|
+
"ds-button-unfilled"
|
|
6038
|
+
],
|
|
6006
6039
|
"ds-toast": [
|
|
6007
6040
|
"ds-button-unfilled"
|
|
6008
6041
|
]
|
|
@@ -9012,7 +9045,8 @@
|
|
|
9012
9045
|
"dependents": [
|
|
9013
9046
|
"ds-pagination",
|
|
9014
9047
|
"ds-panel-tool-search",
|
|
9015
|
-
"ds-table"
|
|
9048
|
+
"ds-table",
|
|
9049
|
+
"ds-table-toolbar"
|
|
9016
9050
|
],
|
|
9017
9051
|
"dependencies": [],
|
|
9018
9052
|
"dependencyGraph": {
|
|
@@ -9024,6 +9058,9 @@
|
|
|
9024
9058
|
],
|
|
9025
9059
|
"ds-table": [
|
|
9026
9060
|
"ds-divider"
|
|
9061
|
+
],
|
|
9062
|
+
"ds-table-toolbar": [
|
|
9063
|
+
"ds-divider"
|
|
9027
9064
|
]
|
|
9028
9065
|
}
|
|
9029
9066
|
},
|
|
@@ -9592,6 +9629,35 @@
|
|
|
9592
9629
|
"getter": false,
|
|
9593
9630
|
"setter": false
|
|
9594
9631
|
},
|
|
9632
|
+
{
|
|
9633
|
+
"name": "collapseLabel",
|
|
9634
|
+
"type": "boolean",
|
|
9635
|
+
"complexType": {
|
|
9636
|
+
"original": "boolean",
|
|
9637
|
+
"resolved": "boolean",
|
|
9638
|
+
"references": {}
|
|
9639
|
+
},
|
|
9640
|
+
"mutable": false,
|
|
9641
|
+
"attr": "collapse-label",
|
|
9642
|
+
"reflectToAttr": true,
|
|
9643
|
+
"docs": "Opt into table-caption icon-only chrome below 900px. The trigger omits its\nvisible label and chevron; keep an accessible name via aria-label.",
|
|
9644
|
+
"docsTags": [
|
|
9645
|
+
{
|
|
9646
|
+
"name": "default",
|
|
9647
|
+
"text": "false"
|
|
9648
|
+
}
|
|
9649
|
+
],
|
|
9650
|
+
"default": "false",
|
|
9651
|
+
"values": [
|
|
9652
|
+
{
|
|
9653
|
+
"type": "boolean"
|
|
9654
|
+
}
|
|
9655
|
+
],
|
|
9656
|
+
"optional": false,
|
|
9657
|
+
"required": false,
|
|
9658
|
+
"getter": false,
|
|
9659
|
+
"setter": false
|
|
9660
|
+
},
|
|
9595
9661
|
{
|
|
9596
9662
|
"name": "filters",
|
|
9597
9663
|
"type": "FilterMenuFilter[]",
|
|
@@ -9757,10 +9823,10 @@
|
|
|
9757
9823
|
"docsTags": [
|
|
9758
9824
|
{
|
|
9759
9825
|
"name": "default",
|
|
9760
|
-
"text": "'
|
|
9826
|
+
"text": "'Filter'"
|
|
9761
9827
|
}
|
|
9762
9828
|
],
|
|
9763
|
-
"default": "'
|
|
9829
|
+
"default": "'Filter'",
|
|
9764
9830
|
"values": [
|
|
9765
9831
|
{
|
|
9766
9832
|
"type": "string"
|
|
@@ -9973,10 +10039,10 @@
|
|
|
9973
10039
|
"docsTags": [
|
|
9974
10040
|
{
|
|
9975
10041
|
"name": "default",
|
|
9976
|
-
"text": "'
|
|
10042
|
+
"text": "'Filter'"
|
|
9977
10043
|
}
|
|
9978
10044
|
],
|
|
9979
|
-
"default": "'
|
|
10045
|
+
"default": "'Filter'",
|
|
9980
10046
|
"values": [
|
|
9981
10047
|
{
|
|
9982
10048
|
"type": "string"
|
|
@@ -12697,7 +12763,8 @@
|
|
|
12697
12763
|
"ds-bar-title",
|
|
12698
12764
|
"ds-mobile-section-switcher",
|
|
12699
12765
|
"ds-table",
|
|
12700
|
-
"ds-table-saved-views"
|
|
12766
|
+
"ds-table-saved-views",
|
|
12767
|
+
"ds-table-sort"
|
|
12701
12768
|
],
|
|
12702
12769
|
"dependencies": [
|
|
12703
12770
|
"ds-text",
|
|
@@ -12737,6 +12804,9 @@
|
|
|
12737
12804
|
],
|
|
12738
12805
|
"ds-table-saved-views": [
|
|
12739
12806
|
"ds-menu"
|
|
12807
|
+
],
|
|
12808
|
+
"ds-table-sort": [
|
|
12809
|
+
"ds-menu"
|
|
12740
12810
|
]
|
|
12741
12811
|
}
|
|
12742
12812
|
},
|
|
@@ -19803,6 +19873,35 @@
|
|
|
19803
19873
|
"getter": false,
|
|
19804
19874
|
"setter": false
|
|
19805
19875
|
},
|
|
19876
|
+
{
|
|
19877
|
+
"name": "collapseLabel",
|
|
19878
|
+
"type": "boolean",
|
|
19879
|
+
"complexType": {
|
|
19880
|
+
"original": "boolean",
|
|
19881
|
+
"resolved": "boolean",
|
|
19882
|
+
"references": {}
|
|
19883
|
+
},
|
|
19884
|
+
"mutable": false,
|
|
19885
|
+
"attr": "collapse-label",
|
|
19886
|
+
"reflectToAttr": true,
|
|
19887
|
+
"docs": "Opt into table-caption icon-only chrome below 900px. The trigger omits its\nvisible label and chevron; keep an accessible name via aria-label.",
|
|
19888
|
+
"docsTags": [
|
|
19889
|
+
{
|
|
19890
|
+
"name": "default",
|
|
19891
|
+
"text": "false"
|
|
19892
|
+
}
|
|
19893
|
+
],
|
|
19894
|
+
"default": "false",
|
|
19895
|
+
"values": [
|
|
19896
|
+
{
|
|
19897
|
+
"type": "boolean"
|
|
19898
|
+
}
|
|
19899
|
+
],
|
|
19900
|
+
"optional": false,
|
|
19901
|
+
"required": false,
|
|
19902
|
+
"getter": false,
|
|
19903
|
+
"setter": false
|
|
19904
|
+
},
|
|
19806
19905
|
{
|
|
19807
19906
|
"name": "disabled",
|
|
19808
19907
|
"type": "boolean",
|
|
@@ -27624,6 +27723,209 @@
|
|
|
27624
27723
|
]
|
|
27625
27724
|
}
|
|
27626
27725
|
},
|
|
27726
|
+
{
|
|
27727
|
+
"filePath": "src/wc/components/TableSort/TableSort.tsx",
|
|
27728
|
+
"encapsulation": "scoped",
|
|
27729
|
+
"tag": "ds-table-sort",
|
|
27730
|
+
"docs": "",
|
|
27731
|
+
"docsTags": [],
|
|
27732
|
+
"usage": {},
|
|
27733
|
+
"props": [
|
|
27734
|
+
{
|
|
27735
|
+
"name": "ariaLabel",
|
|
27736
|
+
"type": "null | string",
|
|
27737
|
+
"complexType": {
|
|
27738
|
+
"original": "string | null",
|
|
27739
|
+
"resolved": "null | string",
|
|
27740
|
+
"references": {}
|
|
27741
|
+
},
|
|
27742
|
+
"mutable": false,
|
|
27743
|
+
"attr": "aria-label",
|
|
27744
|
+
"reflectToAttr": false,
|
|
27745
|
+
"docs": "Accessible name for the trigger and menu.",
|
|
27746
|
+
"docsTags": [
|
|
27747
|
+
{
|
|
27748
|
+
"name": "default",
|
|
27749
|
+
"text": "null"
|
|
27750
|
+
}
|
|
27751
|
+
],
|
|
27752
|
+
"default": "null",
|
|
27753
|
+
"values": [
|
|
27754
|
+
{
|
|
27755
|
+
"type": "null"
|
|
27756
|
+
},
|
|
27757
|
+
{
|
|
27758
|
+
"type": "string"
|
|
27759
|
+
}
|
|
27760
|
+
],
|
|
27761
|
+
"optional": false,
|
|
27762
|
+
"required": false,
|
|
27763
|
+
"getter": false,
|
|
27764
|
+
"setter": false
|
|
27765
|
+
},
|
|
27766
|
+
{
|
|
27767
|
+
"name": "columns",
|
|
27768
|
+
"type": "TableColumn[]",
|
|
27769
|
+
"complexType": {
|
|
27770
|
+
"original": "TableColumn[]",
|
|
27771
|
+
"resolved": "TableColumn[]",
|
|
27772
|
+
"references": {
|
|
27773
|
+
"TableColumn": {
|
|
27774
|
+
"location": "import",
|
|
27775
|
+
"path": "../Table/table-types",
|
|
27776
|
+
"id": "src/wc/components/Table/table-types.ts::TableColumn",
|
|
27777
|
+
"referenceLocation": "TableColumn"
|
|
27778
|
+
}
|
|
27779
|
+
}
|
|
27780
|
+
},
|
|
27781
|
+
"mutable": false,
|
|
27782
|
+
"reflectToAttr": false,
|
|
27783
|
+
"docs": "Catalog used to derive sortable fields, including compound header segments.",
|
|
27784
|
+
"docsTags": [
|
|
27785
|
+
{
|
|
27786
|
+
"name": "default",
|
|
27787
|
+
"text": "[]"
|
|
27788
|
+
}
|
|
27789
|
+
],
|
|
27790
|
+
"default": "[]",
|
|
27791
|
+
"values": [
|
|
27792
|
+
{
|
|
27793
|
+
"type": "TableColumn[]"
|
|
27794
|
+
}
|
|
27795
|
+
],
|
|
27796
|
+
"optional": false,
|
|
27797
|
+
"required": false,
|
|
27798
|
+
"getter": false,
|
|
27799
|
+
"setter": false
|
|
27800
|
+
},
|
|
27801
|
+
{
|
|
27802
|
+
"name": "sort",
|
|
27803
|
+
"type": "TableSortState | null",
|
|
27804
|
+
"complexType": {
|
|
27805
|
+
"original": "TableSortState | null",
|
|
27806
|
+
"resolved": "TableSortState | null",
|
|
27807
|
+
"references": {
|
|
27808
|
+
"TableSortState": {
|
|
27809
|
+
"location": "import",
|
|
27810
|
+
"path": "../Table/table-types",
|
|
27811
|
+
"id": "src/wc/components/Table/table-types.ts::TableSortState",
|
|
27812
|
+
"referenceLocation": "TableSortState"
|
|
27813
|
+
}
|
|
27814
|
+
}
|
|
27815
|
+
},
|
|
27816
|
+
"mutable": false,
|
|
27817
|
+
"reflectToAttr": false,
|
|
27818
|
+
"docs": "Controlled table sort. Header sorting and this menu share the same value.",
|
|
27819
|
+
"docsTags": [
|
|
27820
|
+
{
|
|
27821
|
+
"name": "default",
|
|
27822
|
+
"text": "null"
|
|
27823
|
+
}
|
|
27824
|
+
],
|
|
27825
|
+
"default": "null",
|
|
27826
|
+
"values": [
|
|
27827
|
+
{
|
|
27828
|
+
"type": "TableSortState"
|
|
27829
|
+
},
|
|
27830
|
+
{
|
|
27831
|
+
"type": "null"
|
|
27832
|
+
}
|
|
27833
|
+
],
|
|
27834
|
+
"optional": false,
|
|
27835
|
+
"required": false,
|
|
27836
|
+
"getter": false,
|
|
27837
|
+
"setter": false
|
|
27838
|
+
}
|
|
27839
|
+
],
|
|
27840
|
+
"methods": [
|
|
27841
|
+
{
|
|
27842
|
+
"name": "setFocus",
|
|
27843
|
+
"returns": {
|
|
27844
|
+
"type": "Promise<void>",
|
|
27845
|
+
"docs": ""
|
|
27846
|
+
},
|
|
27847
|
+
"complexType": {
|
|
27848
|
+
"signature": "() => Promise<void>",
|
|
27849
|
+
"parameters": [],
|
|
27850
|
+
"references": {
|
|
27851
|
+
"Promise": {
|
|
27852
|
+
"location": "global",
|
|
27853
|
+
"id": "global::Promise"
|
|
27854
|
+
},
|
|
27855
|
+
"HTMLElement": {
|
|
27856
|
+
"location": "global",
|
|
27857
|
+
"id": "global::HTMLElement"
|
|
27858
|
+
}
|
|
27859
|
+
},
|
|
27860
|
+
"return": "Promise<void>"
|
|
27861
|
+
},
|
|
27862
|
+
"signature": "setFocus() => Promise<void>",
|
|
27863
|
+
"parameters": [],
|
|
27864
|
+
"docs": "",
|
|
27865
|
+
"docsTags": []
|
|
27866
|
+
}
|
|
27867
|
+
],
|
|
27868
|
+
"events": [
|
|
27869
|
+
{
|
|
27870
|
+
"event": "dsSortChange",
|
|
27871
|
+
"detail": "TableSortChangeDetail",
|
|
27872
|
+
"bubbles": false,
|
|
27873
|
+
"complexType": {
|
|
27874
|
+
"original": "TableSortChangeDetail",
|
|
27875
|
+
"resolved": "TableSortChangeDetail",
|
|
27876
|
+
"references": {
|
|
27877
|
+
"TableSortChangeDetail": {
|
|
27878
|
+
"location": "import",
|
|
27879
|
+
"path": "../Table/table-types",
|
|
27880
|
+
"id": "src/wc/components/Table/table-types.ts::TableSortChangeDetail",
|
|
27881
|
+
"referenceLocation": "TableSortChangeDetail"
|
|
27882
|
+
}
|
|
27883
|
+
}
|
|
27884
|
+
},
|
|
27885
|
+
"cancelable": true,
|
|
27886
|
+
"composed": true,
|
|
27887
|
+
"docs": "",
|
|
27888
|
+
"docsTags": []
|
|
27889
|
+
}
|
|
27890
|
+
],
|
|
27891
|
+
"listeners": [],
|
|
27892
|
+
"styles": [],
|
|
27893
|
+
"slots": [],
|
|
27894
|
+
"parts": [],
|
|
27895
|
+
"states": [],
|
|
27896
|
+
"dependents": [],
|
|
27897
|
+
"dependencies": [
|
|
27898
|
+
"ds-button-unfilled",
|
|
27899
|
+
"ds-menu"
|
|
27900
|
+
],
|
|
27901
|
+
"dependencyGraph": {
|
|
27902
|
+
"ds-table-sort": [
|
|
27903
|
+
"ds-button-unfilled",
|
|
27904
|
+
"ds-menu"
|
|
27905
|
+
],
|
|
27906
|
+
"ds-button-unfilled": [
|
|
27907
|
+
"ds-loader",
|
|
27908
|
+
"ds-icon",
|
|
27909
|
+
"ds-badge",
|
|
27910
|
+
"ds-text"
|
|
27911
|
+
],
|
|
27912
|
+
"ds-badge": [
|
|
27913
|
+
"ds-text"
|
|
27914
|
+
],
|
|
27915
|
+
"ds-menu": [
|
|
27916
|
+
"ds-text",
|
|
27917
|
+
"ds-swatch-picker",
|
|
27918
|
+
"ds-icon",
|
|
27919
|
+
"ds-tag",
|
|
27920
|
+
"ds-badge",
|
|
27921
|
+
"ds-switch"
|
|
27922
|
+
],
|
|
27923
|
+
"ds-tag": [
|
|
27924
|
+
"ds-icon",
|
|
27925
|
+
"ds-text"
|
|
27926
|
+
]
|
|
27927
|
+
}
|
|
27928
|
+
},
|
|
27627
27929
|
{
|
|
27628
27930
|
"filePath": "src/wc/components/TableToolbar/TableToolbar.tsx",
|
|
27629
27931
|
"encapsulation": "scoped",
|
|
@@ -27670,8 +27972,14 @@
|
|
|
27670
27972
|
"parts": [],
|
|
27671
27973
|
"states": [],
|
|
27672
27974
|
"dependents": [],
|
|
27673
|
-
"dependencies": [
|
|
27674
|
-
|
|
27975
|
+
"dependencies": [
|
|
27976
|
+
"ds-divider"
|
|
27977
|
+
],
|
|
27978
|
+
"dependencyGraph": {
|
|
27979
|
+
"ds-table-toolbar": [
|
|
27980
|
+
"ds-divider"
|
|
27981
|
+
]
|
|
27982
|
+
}
|
|
27675
27983
|
},
|
|
27676
27984
|
{
|
|
27677
27985
|
"filePath": "src/wc/components/Tag/Tag.tsx",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
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.",
|
|
68
68
|
"A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
|
|
69
69
|
"General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
|
|
70
|
-
"Shell, navigation, and tool-rail composites use isActive with foreground-only emphasis and no selected fill or border.",
|
|
70
|
+
"Shell, navigation, and tool-rail composites use isActive with foreground-only emphasis and no selected fill or border. On icon-label that emphasis is the label; the leading icon and menu chevron keep the resting foreground. On icon, the glyph is the only content and takes the primary foreground.",
|
|
71
71
|
"The omitted default surface treatment is for primary and secondary parent surfaces and uses the brand-active selected fill; pass faint explicitly on faint surfaces to use the neutral active fill.",
|
|
72
72
|
"Surface context must match the actual parent surface; translucent, inverted, media, and always-dark treatments are reserved for those surfaces.",
|
|
73
73
|
"Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
|
|
@@ -75,11 +75,12 @@
|
|
|
75
75
|
"Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
|
|
76
76
|
"Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
|
|
77
77
|
"hasMenu covers two distinct menu-button shapes and the variant selects between them. With label or icon-label the action has a menu, and a trailing chevron carries the affordance. With icon the button is a menu and no chevron is added.",
|
|
78
|
-
"Because the icon-only shape has no chevron, its glyph must convey the menu on its own. Use Ellipses for a generic more-options or overflow control. Use a specific icon when the menu has a named purpose, such as
|
|
78
|
+
"Because the icon-only shape has no chevron, its glyph must convey the menu on its own. Use Ellipses for a generic more-options or overflow control. Use a specific icon when the menu has a named purpose, such as Table for Customize table.",
|
|
79
79
|
"An open popup is a transient pressed state rather than a selected one. While expanded is true and haspopup or hasMenu identifies a popup, the pressed wash is held for the popup's complete rendered lifecycle and survives hover without promoting foreground or selected fill, including when chrome opts out of selected fills with activeFill set to false. Expanded disclosure buttons without popup semantics remain visually neutral."
|
|
80
80
|
],
|
|
81
81
|
"responsiveBehavior": [
|
|
82
|
-
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants.",
|
|
82
|
+
"The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants. Table caption Customize is one such layout: below 900px it uses the icon shape, and a customized catalog promotes the Table icon to primary.",
|
|
83
|
+
"When collapseLabel is set inside a named ds-table container narrower than 900px, an icon-label caption action omits its label and chevron and becomes icon-only while keeping its accessible name. An active control then promotes the icon to primary.",
|
|
83
84
|
"Use fill width only when the parent layout requires a full-width secondary action."
|
|
84
85
|
],
|
|
85
86
|
"frameworkCaveats": {
|
|
@@ -129,6 +130,15 @@
|
|
|
129
130
|
"mutable": false,
|
|
130
131
|
"description": "Actual parent surface context. Omit on primary and secondary surfaces."
|
|
131
132
|
},
|
|
133
|
+
"collapseLabel": {
|
|
134
|
+
"type": "boolean",
|
|
135
|
+
"resolvedType": "boolean",
|
|
136
|
+
"attribute": "collapse-label",
|
|
137
|
+
"default": "false",
|
|
138
|
+
"required": false,
|
|
139
|
+
"mutable": false,
|
|
140
|
+
"description": "Collapse the visible label and chevron to an icon-only control when the\nowning `ds-table` caption is narrower than 900px. The trigger omits those\nparts rather than clipping them."
|
|
141
|
+
},
|
|
132
142
|
"controls": {
|
|
133
143
|
"type": "string | undefined",
|
|
134
144
|
"resolvedType": "string | undefined",
|
|
@@ -177,7 +187,7 @@
|
|
|
177
187
|
"default": "false",
|
|
178
188
|
"required": false,
|
|
179
189
|
"mutable": false,
|
|
180
|
-
"description": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `
|
|
190
|
+
"description": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `Table` for Customize table.\n\nUse `haspopup` directly for non-menu popups."
|
|
181
191
|
},
|
|
182
192
|
"haspopup": {
|
|
183
193
|
"type": "ButtonUnfilledPopup | undefined",
|
|
@@ -363,6 +373,15 @@
|
|
|
363
373
|
"mutable": false,
|
|
364
374
|
"description": "Actual parent surface context. Omit on primary and secondary surfaces."
|
|
365
375
|
},
|
|
376
|
+
"collapseLabel": {
|
|
377
|
+
"type": "boolean",
|
|
378
|
+
"resolvedType": "boolean",
|
|
379
|
+
"attribute": "collapse-label",
|
|
380
|
+
"default": "false",
|
|
381
|
+
"required": false,
|
|
382
|
+
"mutable": false,
|
|
383
|
+
"description": "Collapse the visible label and chevron to an icon-only control when the\nowning `ds-table` caption is narrower than 900px. The trigger omits those\nparts rather than clipping them."
|
|
384
|
+
},
|
|
366
385
|
"controls": {
|
|
367
386
|
"type": "string | undefined",
|
|
368
387
|
"resolvedType": "string | undefined",
|
|
@@ -411,7 +430,7 @@
|
|
|
411
430
|
"default": "false",
|
|
412
431
|
"required": false,
|
|
413
432
|
"mutable": false,
|
|
414
|
-
"description": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `
|
|
433
|
+
"description": "Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\nboth menu-button shapes:\n\n- `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n the affordance.\n- `icon` — the button *is* a menu. No chevron is added, so the glyph must\n convey the menu on its own. Use `Ellipses` for generic more-options;\n use a specific icon when the menu has a named purpose, such as\n `Table` for Customize table.\n\nUse `haspopup` directly for non-menu popups."
|
|
415
434
|
},
|
|
416
435
|
"haspopup": {
|
|
417
436
|
"type": "ButtonUnfilledPopup | undefined",
|
|
@@ -617,12 +636,12 @@
|
|
|
617
636
|
"files": [
|
|
618
637
|
{
|
|
619
638
|
"path": "src/wc/components/ButtonUnfilled/ButtonUnfilled.css",
|
|
620
|
-
"content": "@import '../../utils/button-base.css';\n\n:host {\n --ds-button-unfilled-fg: var(--color-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-secondary);\n --ds-button-unfilled-border: var(--color-border-secondary);\n}\n\n.button-unfilled {\n background: transparent;\n color: var(--ds-button-unfilled-fg);\n /* Hover/press/selected fill: `.ds-interaction-fill` (+ `--selected` / `--on-*`).\n Active foreground changes remain independent from popup-open pressed paint. */\n}\n\n.button-unfilled--active {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/*\n * An open popup is a transient pressed state, not a selected state. Keep the\n * pressed wash visible for the popup's complete rendered lifecycle without\n * promoting the resting foreground or selected fill.\n */\n/* Inset stroke via interaction-fill ::after (above selected / hover washes). */\n.button-unfilled--bordered {\n --ds-interaction-border-color: var(--ds-button-unfilled-border);\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n/* Foreground / chrome tokens per surface — interaction tokens come from util `--on-*`. */\n.button-unfilled--background-medium {\n --ds-button-unfilled-fg: var(--color-foreground-on-medium-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-medium-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-medium-neutral);\n --ds-button-unfilled-border: var(--color-border-on-medium-background-secondary);\n}\n\n.button-unfilled--background-bold {\n --ds-button-unfilled-fg: var(--color-foreground-on-bold-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-bold-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-bold-neutral);\n --ds-button-unfilled-border: var(--color-border-on-bold-background-secondary);\n}\n\n.button-unfilled--background-strong {\n --ds-button-unfilled-fg: var(--color-foreground-on-strong-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-strong-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-strong-neutral);\n --ds-button-unfilled-border: var(--color-border-on-strong-background-secondary);\n}\n\n.button-unfilled--background-translucent {\n --ds-button-unfilled-fg: var(--color-translucent-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-translucent-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-translucent-translucent);\n --ds-button-unfilled-border: var(--color-translucent-border-secondary);\n}\n\n.button-unfilled--background-inverted {\n --ds-button-unfilled-fg: var(--color-inverted-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-inverted-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-inverted-background);\n --ds-button-unfilled-border: var(--color-inverted-border-secondary);\n}\n\n.button-unfilled--background-media {\n --ds-button-unfilled-fg: var(--color-media-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-media-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-media-background);\n --ds-button-unfilled-border: var(--color-media-border-secondary);\n}\n\n.button-unfilled--on-always-dark {\n --ds-button-unfilled-fg: var(--color-always-dark-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-always-dark-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-always-dark-background);\n --ds-button-unfilled-border: var(--color-always-dark-border-secondary);\n}\n\n/*\n * After surface ring defaults: selected fill remaps the knock-out to the active\n * wash so the badge halo matches the selected background.\n */\n.button-unfilled.ds-interaction-fill--selected {\n --ds-button-unfilled-dot-ring: var(--ds-interaction-active);\n}\n",
|
|
639
|
+
"content": "@import '../../utils/button-base.css';\n@import '../../utils/table-caption-control.css';\n\n:host {\n --ds-button-unfilled-fg: var(--color-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-secondary);\n --ds-button-unfilled-border: var(--color-border-secondary);\n}\n\n.button-unfilled {\n background: transparent;\n color: var(--ds-button-unfilled-fg);\n /* Hover/press/selected fill: `.ds-interaction-fill` (+ `--selected` / `--on-*`).\n Active foreground changes remain independent from popup-open pressed paint. */\n}\n\n.button-unfilled--active {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/*\n * Foreground-only active on icon-label: the word carries the selected meaning.\n * Icon and menu chevron keep the resting foreground. Icon-only active still\n * promotes the glyph because that is the only content.\n */\n.button-unfilled--icon-label.button-unfilled--active:not(.ds-interaction-fill--selected) {\n color: var(--ds-button-unfilled-fg);\n}\n\n.button-unfilled--icon-label.button-unfilled--active:not(.ds-interaction-fill--selected) .button-unfilled__label {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/*\n * An open popup is a transient pressed state, not a selected state. Keep the\n * pressed wash visible for the popup's complete rendered lifecycle without\n * promoting the resting foreground or selected fill.\n */\n/* Inset stroke via interaction-fill ::after (above selected / hover washes). */\n.button-unfilled--bordered {\n --ds-interaction-border-color: var(--ds-button-unfilled-border);\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n/* Foreground / chrome tokens per surface — interaction tokens come from util `--on-*`. */\n.button-unfilled--background-medium {\n --ds-button-unfilled-fg: var(--color-foreground-on-medium-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-medium-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-medium-neutral);\n --ds-button-unfilled-border: var(--color-border-on-medium-background-secondary);\n}\n\n.button-unfilled--background-bold {\n --ds-button-unfilled-fg: var(--color-foreground-on-bold-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-bold-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-bold-neutral);\n --ds-button-unfilled-border: var(--color-border-on-bold-background-secondary);\n}\n\n.button-unfilled--background-strong {\n --ds-button-unfilled-fg: var(--color-foreground-on-strong-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-strong-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-strong-neutral);\n --ds-button-unfilled-border: var(--color-border-on-strong-background-secondary);\n}\n\n.button-unfilled--background-translucent {\n --ds-button-unfilled-fg: var(--color-translucent-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-translucent-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-translucent-translucent);\n --ds-button-unfilled-border: var(--color-translucent-border-secondary);\n}\n\n.button-unfilled--background-inverted {\n --ds-button-unfilled-fg: var(--color-inverted-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-inverted-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-inverted-background);\n --ds-button-unfilled-border: var(--color-inverted-border-secondary);\n}\n\n.button-unfilled--background-media {\n --ds-button-unfilled-fg: var(--color-media-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-media-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-media-background);\n --ds-button-unfilled-border: var(--color-media-border-secondary);\n}\n\n.button-unfilled--on-always-dark {\n --ds-button-unfilled-fg: var(--color-always-dark-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-always-dark-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-always-dark-background);\n --ds-button-unfilled-border: var(--color-always-dark-border-secondary);\n}\n\n/*\n * After surface ring defaults: selected fill remaps the knock-out to the active\n * wash so the badge halo matches the selected background.\n */\n.button-unfilled.ds-interaction-fill--selected {\n --ds-button-unfilled-dot-ring: var(--ds-interaction-active);\n}\n",
|
|
621
640
|
"type": "registry:ui"
|
|
622
641
|
},
|
|
623
642
|
{
|
|
624
643
|
"path": "src/wc/components/ButtonUnfilled/ButtonUnfilled.tsx",
|
|
625
|
-
"content": "import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';\nimport { controlWidthClass } from '../../utils';\nimport { beginElevatedControlPress } from '../../utils/control-press';\nimport { renderButtonContent } from '../../utils/button-render';\nimport type { ControlInsetDepth } from '../../utils/control-text';\nimport type {\n ButtonPopup,\n ButtonSize,\n ButtonVariant,\n ButtonWidth,\n} from '../../utils/button-types';\n\nexport type ButtonUnfilledBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'always-dark';\n\nexport type ButtonUnfilledVariant = ButtonVariant;\nexport type ButtonUnfilledSize = ButtonSize;\nexport type ButtonUnfilledWidth = ButtonWidth;\nexport type ButtonUnfilledPopup = ButtonPopup;\n\n@Component({\n tag: 'ds-button-unfilled',\n styleUrl: 'ButtonUnfilled.css',\n scoped: true,\n})\nexport class ButtonUnfilled {\n @Element() el!: HTMLElement;\n\n /**\n * Content layout. Default is label-only; pass `icon` for icon-only chrome\n * (nav / tool rails) or `icon-label` for leading icon + text.\n */\n @Prop() variant: ButtonUnfilledVariant = 'label';\n\n /** Control density (height, padding, icon, type). */\n @Prop() size: ButtonUnfilledSize = 'md';\n\n /** Use reduced outer geometry when nested inside a control of the same size. */\n @Prop() isInset: boolean = false;\n\n /** Single removes 4px overall; double removes 8px overall (xs stays single). */\n @Prop() insetDepth: ControlInsetDepth = 'single';\n\n /** Width fit — hug content (default) or fill the parent. */\n @Prop() width: ButtonUnfilledWidth = 'hug';\n\n /** Visible text for `label` / `icon-label` variants. */\n @Prop() label: string = '';\n\n /** Icon name passed to <ds-icon> for `icon` / `icon-label` variants. */\n @Prop() icon: string = '';\n\n /**\n * Owner-controlled visual emphasis inside a composite. This does not add\n * toggle semantics and does not emit dsChange.\n */\n @Prop() isActive: boolean = false;\n\n /**\n * When active, render the selected interaction fill.\n * Default `true` for general UI. Shell chrome (nav / tool rails) should pass\n * `false` so selection is foreground-only (primary color, no fill).\n */\n @Prop() activeFill: boolean = true;\n\n /** Show a 1px secondary inset border. Default on; shell chrome can pass `false`. */\n @Prop() hasBorder: boolean = true;\n\n /** Use the half-radius treatment instead of the default control radius. */\n @Prop() rounded: boolean = false;\n\n /**\n * Scale down during a physical pointer press.\n * Disable when an owning composite requires fixed child or background geometry.\n */\n @Prop() pressScale: boolean = true;\n\n /** Show a notification dot at the top-right of the icon zone (icon variant only). */\n @Prop() dot: boolean = false;\n\n /** Disables interaction. */\n @Prop() isInactive: boolean = false;\n\n /** Shows an inline loader and prevents interaction without applying inactive opacity. */\n @Prop() isLoading: boolean = false;\n\n /** Native button type. */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: ButtonUnfilledBackground | undefined;\n\n /** Accessible name override. Required for icon-only buttons. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop() controls: string | undefined;\n /**\n * Controlled disclosure or popup state forwarded to `aria-expanded`.\n * Popup triggers hold only the pressed wash while open; their resting\n * foreground is unchanged. Ordinary disclosures remain visually neutral.\n */\n @Prop() expanded: boolean | undefined;\n @Prop() haspopup: ButtonUnfilledPopup | undefined;\n /**\n * Controlled state for a genuine toggle button. Adds aria-pressed, promotes\n * active styling, and makes activation emit dsChange with the requested state.\n */\n @Prop() pressed: boolean | undefined;\n\n /**\n * Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\n * both menu-button shapes:\n *\n * - `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n * the affordance.\n * - `icon` — the button *is* a menu. No chevron is added, so the glyph must\n * convey the menu on its own. Use `Ellipses` for generic more-options;\n * use a specific icon when the menu has a named purpose, such as\n * `Preferences` for Customize table.\n *\n * Use `haspopup` directly for non-menu popups.\n */\n @Prop() hasMenu: boolean = false;\n\n /**\n * Native `tabindex` for roving keyboard groups in shell chrome.\n * Omit for the default button tab stop (`0`).\n */\n @Prop({ attribute: 'tab-index' }) focusTabIndex?: number;\n\n @Event() dsClick!: EventEmitter<MouseEvent>;\n @Event() dsChange!: EventEmitter<boolean>;\n\n private buttonEl: HTMLButtonElement | null = null;\n\n @Method()\n async setFocus() {\n this.buttonEl?.focus();\n }\n\n private handleClick = (event: MouseEvent) => {\n if (this.isInactive || this.isLoading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dsClick.emit(event);\n if (this.pressed !== undefined) this.dsChange.emit(!this.pressed);\n };\n\n private get showDot(): boolean {\n return this.variant === 'icon' && this.dot && !this.isLoading;\n }\n\n private get resolvedHaspopup(): ButtonUnfilledPopup | undefined {\n return this.haspopup ?? (this.hasMenu ? 'menu' : undefined);\n }\n\n private get doubleInset(): boolean {\n return this.isInset && this.insetDepth === 'double' && this.size !== 'xs';\n }\n\n /** Only popup triggers hold a pressed visual while expanded. */\n private get expandedPopup(): boolean {\n return this.expanded === true && this.resolvedHaspopup !== undefined && !this.isInactive;\n }\n\n private get visuallyActive(): boolean {\n return this.isActive || this.pressed === true;\n }\n\n /** Knock-out ring: selected fill → active wash; otherwise surface token. */\n private get dotRing(): string {\n if ((this.isActive || this.pressed === true) && this.activeFill) {\n return 'var(--ds-interaction-active)';\n }\n return 'var(--ds-button-unfilled-dot-ring)';\n }\n\n private get accessibleName(): string | undefined {\n if (this.ariaLabel) return this.ariaLabel;\n if (this.isLoading && this.variant === 'label' && this.label) return this.label;\n return undefined;\n }\n\n render() {\n const bg = this.background;\n const cls: Record<string, boolean> = {\n 'button-unfilled': true,\n 'ds-button': true,\n 'ds-focus-ring-inset': true,\n 'ds-control-press-scale': this.pressScale,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected':\n (this.isActive || this.pressed === true) &&\n this.activeFill &&\n !this.isInactive,\n 'ds-interaction-fill--on-faint': bg === 'faint',\n 'ds-interaction-fill--on-medium': bg === 'medium',\n 'ds-interaction-fill--on-bold': bg === 'bold',\n 'ds-interaction-fill--on-strong': bg === 'strong',\n 'ds-interaction-fill--on-translucent': bg === 'translucent',\n 'ds-interaction-fill--on-inverted': bg === 'inverted',\n 'ds-interaction-fill--on-media': bg === 'media',\n 'ds-interaction-fill--on-always-dark': bg === 'always-dark',\n 'button-unfilled--active': this.visuallyActive,\n 'button-unfilled--expanded': this.expandedPopup,\n 'ds-button--expanded': this.expandedPopup,\n 'button-unfilled--bordered': this.hasBorder,\n 'ds-button--bordered': this.hasBorder,\n 'button-unfilled--rounded': this.rounded,\n 'ds-button--rounded': this.rounded,\n 'ds-control-inactive': this.isInactive,\n 'ds-control--lg': this.size === 'lg',\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 && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n 'ds-control-frame': true,\n 'button-unfilled--icon': this.variant === 'icon',\n 'ds-button--icon': this.variant === 'icon',\n 'button-unfilled--label': this.variant === 'label',\n 'button-unfilled--icon-label': this.variant === 'icon-label',\n 'button-unfilled--background-faint': bg === 'faint',\n 'button-unfilled--background-medium': bg === 'medium',\n 'button-unfilled--background-bold': bg === 'bold',\n 'button-unfilled--background-strong': bg === 'strong',\n 'button-unfilled--background-translucent': bg === 'translucent',\n 'button-unfilled--background-inverted': bg === 'inverted',\n 'button-unfilled--background-media': bg === 'media',\n 'button-unfilled--on-always-dark': bg === 'always-dark',\n };\n\n return (\n <Host\n class={{\n 'button-unfilled-host': true,\n 'button-unfilled-host--icon': this.variant === 'icon',\n 'ds-button-host--icon': this.variant === 'icon',\n 'ds-control--lg': this.size === 'lg',\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 && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n ...controlWidthClass(this.width),\n }}\n tabIndex={-1}\n >\n <button\n ref={el => {\n this.buttonEl = el ?? null;\n }}\n type={this.type}\n class={cls}\n disabled={this.isInactive}\n tabIndex={this.focusTabIndex ?? 0}\n aria-label={this.accessibleName}\n aria-busy={this.isLoading ? 'true' : undefined}\n aria-disabled={this.isLoading ? 'true' : undefined}\n aria-controls={this.controls}\n aria-expanded={this.expanded === undefined ? undefined : String(this.expanded)}\n aria-haspopup={this.resolvedHaspopup}\n aria-pressed={this.pressed === undefined ? undefined : String(this.pressed)}\n onPointerDown={event =>\n beginElevatedControlPress(\n event,\n this.pressScale && !this.isInactive && !this.isLoading,\n )\n }\n onClick={this.handleClick}\n >\n {renderButtonContent({\n namespace: 'button-unfilled',\n variant: this.variant,\n size: this.size,\n label: this.label,\n icon: this.icon,\n hasMenu: this.hasMenu,\n isLoading: this.isLoading,\n dot: {\n visible: this.showDot,\n background: this.dotRing,\n },\n })}\n </button>\n </Host>\n );\n }\n}\n",
|
|
644
|
+
"content": "import { Component, Element, Event, EventEmitter, h, Host, Method, Prop, State, Watch } from '@stencil/core';\nimport { controlWidthClass } from '../../utils';\nimport { beginElevatedControlPress } from '../../utils/control-press';\nimport { renderButtonContent } from '../../utils/button-render';\nimport type { ControlInsetDepth } from '../../utils/control-text';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type {\n ButtonPopup,\n ButtonSize,\n ButtonVariant,\n ButtonWidth,\n} from '../../utils/button-types';\n\nexport type ButtonUnfilledBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'always-dark';\n\nexport type ButtonUnfilledVariant = ButtonVariant;\nexport type ButtonUnfilledSize = ButtonSize;\nexport type ButtonUnfilledWidth = ButtonWidth;\nexport type ButtonUnfilledPopup = ButtonPopup;\n\n@Component({\n tag: 'ds-button-unfilled',\n styleUrl: 'ButtonUnfilled.css',\n scoped: true,\n})\nexport class ButtonUnfilled {\n @Element() el!: HTMLElement;\n\n /**\n * Content layout. Default is label-only; pass `icon` for icon-only chrome\n * (nav / tool rails) or `icon-label` for leading icon + text.\n */\n @Prop() variant: ButtonUnfilledVariant = 'label';\n\n /** Control density (height, padding, icon, type). */\n @Prop() size: ButtonUnfilledSize = 'md';\n\n /** Use reduced outer geometry when nested inside a control of the same size. */\n @Prop() isInset: boolean = false;\n\n /** Single removes 4px overall; double removes 8px overall (xs stays single). */\n @Prop() insetDepth: ControlInsetDepth = 'single';\n\n /** Width fit — hug content (default) or fill the parent. */\n @Prop() width: ButtonUnfilledWidth = 'hug';\n\n /** Visible text for `label` / `icon-label` variants. */\n @Prop() label: string = '';\n\n /** Icon name passed to <ds-icon> for `icon` / `icon-label` variants. */\n @Prop() icon: string = '';\n\n /**\n * Owner-controlled visual emphasis inside a composite. This does not add\n * toggle semantics and does not emit dsChange.\n */\n @Prop() isActive: boolean = false;\n\n /**\n * When active, render the selected interaction fill.\n * Default `true` for general UI. Shell chrome (nav / tool rails) should pass\n * `false` so selection is foreground-only (primary color, no fill).\n */\n @Prop() activeFill: boolean = true;\n\n /** Show a 1px secondary inset border. Default on; shell chrome can pass `false`. */\n @Prop() hasBorder: boolean = true;\n\n /** Use the half-radius treatment instead of the default control radius. */\n @Prop() rounded: boolean = false;\n\n /**\n * Scale down during a physical pointer press.\n * Disable when an owning composite requires fixed child or background geometry.\n */\n @Prop() pressScale: boolean = true;\n\n /** Show a notification dot at the top-right of the icon zone (icon variant only). */\n @Prop() dot: boolean = false;\n\n /** Disables interaction. */\n @Prop() isInactive: boolean = false;\n\n /** Shows an inline loader and prevents interaction without applying inactive opacity. */\n @Prop() isLoading: boolean = false;\n\n /** Native button type. */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: ButtonUnfilledBackground | undefined;\n\n /** Accessible name override. Required for icon-only buttons. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop() controls: string | undefined;\n /**\n * Controlled disclosure or popup state forwarded to `aria-expanded`.\n * Popup triggers hold only the pressed wash while open; their resting\n * foreground is unchanged. Ordinary disclosures remain visually neutral.\n */\n @Prop() expanded: boolean | undefined;\n @Prop() haspopup: ButtonUnfilledPopup | undefined;\n /**\n * Controlled state for a genuine toggle button. Adds aria-pressed, promotes\n * active styling, and makes activation emit dsChange with the requested state.\n */\n @Prop() pressed: boolean | undefined;\n\n /**\n * Collapse the visible label and chevron to an icon-only control when the\n * owning `ds-table` caption is narrower than 900px. The trigger omits those\n * parts rather than clipping them.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n\n /**\n * Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\n * both menu-button shapes:\n *\n * - `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n * the affordance.\n * - `icon` — the button *is* a menu. No chevron is added, so the glyph must\n * convey the menu on its own. Use `Ellipses` for generic more-options;\n * use a specific icon when the menu has a named purpose, such as\n * `Table` for Customize table.\n *\n * Use `haspopup` directly for non-menu popups.\n */\n @Prop() hasMenu: boolean = false;\n\n /**\n * Native `tabindex` for roving keyboard groups in shell chrome.\n * Omit for the default button tab stop (`0`).\n */\n @Prop({ attribute: 'tab-index' }) focusTabIndex?: number;\n\n @Event() dsClick!: EventEmitter<MouseEvent>;\n @Event() dsChange!: EventEmitter<boolean>;\n\n @State() private captionCompact = false;\n\n private buttonEl: HTMLButtonElement | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n\n componentDidLoad(): void {\n this.syncCaptionCompactObserver();\n }\n\n disconnectedCallback(): void {\n this.disconnectCaptionCompactObserver();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Method()\n async setFocus() {\n this.buttonEl?.focus();\n }\n\n private handleClick = (event: MouseEvent) => {\n if (this.isInactive || this.isLoading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dsClick.emit(event);\n if (this.pressed !== undefined) this.dsChange.emit(!this.pressed);\n };\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel &&\n this.captionCompact &&\n this.variant === 'icon-label' &&\n Boolean(this.icon)\n );\n }\n\n private get visualVariant(): ButtonUnfilledVariant {\n return this.captionIconOnly ? 'icon' : this.variant;\n }\n\n private get showDot(): boolean {\n return this.variant === 'icon' && this.dot && !this.isLoading;\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private get resolvedHaspopup(): ButtonUnfilledPopup | undefined {\n return this.haspopup ?? (this.hasMenu ? 'menu' : undefined);\n }\n\n private get doubleInset(): boolean {\n return this.isInset && this.insetDepth === 'double' && this.size !== 'xs';\n }\n\n /** Only popup triggers hold a pressed visual while expanded. */\n private get expandedPopup(): boolean {\n return this.expanded === true && this.resolvedHaspopup !== undefined && !this.isInactive;\n }\n\n private get visuallyActive(): boolean {\n return this.isActive || this.pressed === true;\n }\n\n /** Knock-out ring: selected fill → active wash; otherwise surface token. */\n private get dotRing(): string {\n if ((this.isActive || this.pressed === true) && this.activeFill) {\n return 'var(--ds-interaction-active)';\n }\n return 'var(--ds-button-unfilled-dot-ring)';\n }\n\n private get accessibleName(): string | undefined {\n if (this.ariaLabel) return this.ariaLabel;\n if (this.isLoading && this.variant === 'label' && this.label) return this.label;\n return undefined;\n }\n\n render() {\n const bg = this.background;\n const cls: Record<string, boolean> = {\n 'button-unfilled': true,\n 'ds-button': true,\n 'ds-focus-ring-inset': true,\n 'ds-control-press-scale': this.pressScale,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected':\n (this.isActive || this.pressed === true) &&\n this.activeFill &&\n !this.isInactive,\n 'ds-interaction-fill--on-faint': bg === 'faint',\n 'ds-interaction-fill--on-medium': bg === 'medium',\n 'ds-interaction-fill--on-bold': bg === 'bold',\n 'ds-interaction-fill--on-strong': bg === 'strong',\n 'ds-interaction-fill--on-translucent': bg === 'translucent',\n 'ds-interaction-fill--on-inverted': bg === 'inverted',\n 'ds-interaction-fill--on-media': bg === 'media',\n 'ds-interaction-fill--on-always-dark': bg === 'always-dark',\n 'button-unfilled--active': this.visuallyActive,\n 'button-unfilled--expanded': this.expandedPopup,\n 'ds-button--expanded': this.expandedPopup,\n 'button-unfilled--bordered': this.hasBorder,\n 'ds-button--bordered': this.hasBorder,\n 'button-unfilled--rounded': this.rounded,\n 'ds-button--rounded': this.rounded,\n 'ds-control-inactive': this.isInactive,\n 'ds-control--lg': this.size === 'lg',\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 && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n 'ds-control-frame': true,\n 'button-unfilled--icon': this.visualVariant === 'icon',\n 'ds-button--icon': this.visualVariant === 'icon',\n 'button-unfilled--label': this.visualVariant === 'label',\n 'button-unfilled--icon-label': this.visualVariant === 'icon-label',\n 'button-unfilled--background-faint': bg === 'faint',\n 'button-unfilled--background-medium': bg === 'medium',\n 'button-unfilled--background-bold': bg === 'bold',\n 'button-unfilled--background-strong': bg === 'strong',\n 'button-unfilled--background-translucent': bg === 'translucent',\n 'button-unfilled--background-inverted': bg === 'inverted',\n 'button-unfilled--background-media': bg === 'media',\n 'button-unfilled--on-always-dark': bg === 'always-dark',\n };\n\n return (\n <Host\n class={{\n 'button-unfilled-host': true,\n 'button-unfilled-host--icon': this.visualVariant === 'icon',\n 'ds-button-host--icon': this.visualVariant === 'icon',\n 'ds-control--lg': this.size === 'lg',\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 && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n tabIndex={-1}\n >\n <button\n ref={el => {\n this.buttonEl = el ?? null;\n }}\n type={this.type}\n class={cls}\n disabled={this.isInactive}\n tabIndex={this.focusTabIndex ?? 0}\n aria-label={this.accessibleName}\n aria-busy={this.isLoading ? 'true' : undefined}\n aria-disabled={this.isLoading ? 'true' : undefined}\n aria-controls={this.controls}\n aria-expanded={this.expanded === undefined ? undefined : String(this.expanded)}\n aria-haspopup={this.resolvedHaspopup}\n aria-pressed={this.pressed === undefined ? undefined : String(this.pressed)}\n onPointerDown={event =>\n beginElevatedControlPress(\n event,\n this.pressScale && !this.isInactive && !this.isLoading,\n )\n }\n onClick={this.handleClick}\n >\n {renderButtonContent({\n namespace: 'button-unfilled',\n variant: this.visualVariant,\n size: this.size,\n label: this.label,\n icon: this.icon,\n hasMenu: this.hasMenu,\n isLoading: this.isLoading,\n dot: {\n visible: this.showDot,\n background: this.dotRing,\n },\n })}\n </button>\n </Host>\n );\n }\n}\n",
|
|
626
645
|
"type": "registry:ui"
|
|
627
646
|
}
|
|
628
647
|
]
|