@ds-mo/ui 15.11.2 → 15.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +120 -19
- package/dist/angular/ds-card-action-center.d.ts +1 -1
- package/dist/angular/ds-card-action-center.js +3 -3
- package/dist/angular/ds-card-chart.d.ts +1 -1
- package/dist/angular/ds-card-chart.js +3 -3
- package/dist/angular/ds-card-navigation.d.ts +1 -1
- package/dist/angular/ds-card-navigation.js +3 -3
- package/dist/angular/ds-card-setting.d.ts +1 -1
- package/dist/angular/ds-card-setting.js +3 -3
- package/dist/angular/ds-card-settings-scope.d.ts +1 -1
- package/dist/angular/ds-card-settings-scope.js +3 -3
- package/dist/angular/ds-field.d.ts +1 -1
- package/dist/angular/ds-field.js +3 -3
- package/dist/angular/ds-inline-banner-settings.d.ts +1 -1
- package/dist/angular/ds-inline-banner-settings.js +3 -3
- package/dist/angular/ds-pagination.d.ts +1 -1
- package/dist/angular/ds-pagination.js +3 -3
- package/dist/angular/ds-radio.d.ts +1 -1
- package/dist/angular/ds-radio.js +3 -3
- package/dist/angular/ds-setting-row-radio.d.ts +1 -1
- package/dist/angular/ds-setting-row-radio.js +3 -3
- package/dist/angular/ds-setting-row-toggle.d.ts +1 -1
- package/dist/angular/ds-setting-row-toggle.js +3 -3
- package/dist/angular/ds-skeleton.d.ts +1 -1
- package/dist/angular/ds-skeleton.js +3 -3
- 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-response.js.map +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-bar-action.js +1 -1
- package/dist/components/ds-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.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-breadcrumb.js +1 -1
- package/dist/components/ds-button-filled.js +1 -1
- package/dist/components/ds-button-inverted.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-action-center.js +1 -1
- package/dist/components/ds-card-action-center.js.map +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-navigation.js +1 -1
- package/dist/components/ds-card-navigation.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-card-settings-scope.js +1 -1
- package/dist/components/ds-card-settings-scope.js.map +1 -1
- package/dist/components/ds-chart-legend.js +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-checkbox-group.js +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-chip.js +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-section.js +1 -1
- package/dist/components/ds-conversation-list.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-customize.js.map +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-group.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-saved-views.js.map +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-sort.js +1 -1
- package/dist/components/ds-data-toolbar.js +1 -1
- package/dist/components/ds-divider.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-inline-banner-settings.js +1 -1
- package/dist/components/ds-inline-banner-settings.js.map +1 -1
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-map-cluster-marker.js +1 -1
- package/dist/components/ds-map-entity-marker.js +1 -1
- package/dist/components/ds-map-marker.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-bubble.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +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-navigation-tab-group.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-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +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-tile.js +1 -1
- package/dist/components/ds-radio.js +1 -1
- package/dist/components/ds-score.js +1 -1
- package/dist/components/ds-scroll-overlay.js +1 -1
- package/dist/components/ds-select-toggle.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-setting-row-checkbox.js +1 -1
- package/dist/components/ds-setting-row-radio.js +1 -1
- package/dist/components/ds-setting-row-radio.js.map +1 -1
- package/dist/components/ds-setting-row-toggle.js +1 -1
- package/dist/components/ds-setting-row-toggle.js.map +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-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.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-textarea.js +1 -1
- package/dist/components/ds-time-picker.js +1 -1
- package/dist/components/ds-toast.js +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/p-3Xp9hXbL.js +2 -0
- package/dist/components/{p-BI6L3JoU.js.map → p-3Xp9hXbL.js.map} +1 -1
- package/dist/components/{p-6QYDIPd1.js → p-3dG9v5Aw.js} +2 -2
- package/dist/components/{p-C4kVTIBc.js → p-5PReYMiY.js} +2 -2
- package/dist/components/{p-CzTJAO2J.js → p-8fddX3V3.js} +2 -2
- package/dist/components/{p-Cw1ljgW1.js → p-9u2WDF0J.js} +2 -2
- package/dist/components/{p-M9pOLcyK.js → p-B-ChwMFE.js} +2 -2
- package/dist/components/{p-BvlkO__o.js → p-BAIYOobl.js} +2 -2
- package/dist/components/{p-BrJebF5t.js → p-BIMW5_Z7.js} +2 -2
- package/dist/components/{p-BkKdzYZP.js → p-BMI0F08u.js} +2 -2
- package/dist/components/{p-D0kzIzGQ.js → p-BV8sNEVP.js} +2 -2
- package/dist/components/{p-DNtwJJOC.js → p-BVUdtuog.js} +2 -2
- package/dist/components/{p-CgYDQSLW.js → p-BYo1-6b5.js} +2 -2
- package/dist/components/{p-CJ-igzsZ.js → p-BZbJkJpG.js} +2 -2
- package/dist/components/{p-D2rASHHq.js → p-BcYzHn1E.js} +2 -2
- package/dist/components/{p-0EpjqRWc.js → p-BfRAVR40.js} +2 -2
- package/dist/components/p-BhbniDw4.js +2 -0
- package/dist/components/p-BhbniDw4.js.map +1 -0
- package/dist/components/{p-BBZz2Dvg.js → p-BoWpIl_m.js} +2 -2
- package/dist/components/{p-529k8euH.js → p-BpPHCF63.js} +2 -2
- package/dist/components/{p-DXEInGEq.js → p-By_jYvHp.js} +2 -2
- package/dist/components/p-C5HGwzy9.js +2 -0
- package/dist/components/{p-CXF8wj9I.js.map → p-C5HGwzy9.js.map} +1 -1
- package/dist/components/{p-D4r6oWyQ.js → p-C860ilDn.js} +2 -2
- package/dist/components/{p-DcVK0W4X.js → p-CEHhx4VQ.js} +2 -2
- package/dist/components/p-CGtq7TnC.js +2 -0
- package/dist/components/p-CGtq7TnC.js.map +1 -0
- package/dist/components/p-CL0FpMKo.js +2 -0
- package/dist/components/{p-BjYoM1f8.js.map → p-CL0FpMKo.js.map} +1 -1
- package/dist/components/{p-CEm0AoDR.js → p-CQnjpuMX.js} +2 -2
- package/dist/components/{p-4qKHg502.js → p-CUG4EkKn.js} +2 -2
- package/dist/components/{p-CTstnsLe.js → p-CYmz92EF.js} +2 -2
- package/dist/components/{p-YE1r-XSR.js → p-CbP9ASmI.js} +2 -2
- package/dist/components/{p-C31AjGbg.js → p-CbPGO7vl.js} +2 -2
- package/dist/components/{p-DfphSI9S.js → p-CdMIA5hz.js} +2 -2
- package/dist/components/{p-Ds58qo_J.js → p-CeaIWw1Q.js} +2 -2
- package/dist/components/{p-DxVokKm8.js → p-Cfqvxxs2.js} +2 -2
- package/dist/components/{p-CsPqGA8B.js → p-CpqLGzv4.js} +2 -2
- package/dist/components/p-D538svhW.js +2 -0
- package/dist/components/p-D538svhW.js.map +1 -0
- package/dist/components/{p-DKg181YU.js → p-DFR9hqDU.js} +2 -2
- package/dist/components/{p-DEJLfD7k.js → p-DKZP3jCY.js} +2 -2
- package/dist/components/{p-CTAF7SkL.js → p-DMPn_dt7.js} +2 -2
- package/dist/components/{p-CYRTkP1A.js → p-DYruK9cb.js} +2 -2
- package/dist/components/p-DcvPY30Q.js +2 -0
- package/dist/components/p-DcvPY30Q.js.map +1 -0
- package/dist/components/{p-CqfYCn-e.js → p-DiUaIJ91.js} +2 -2
- package/dist/components/{p-Cqg9T781.js → p-DimFbKZH.js} +2 -2
- package/dist/components/{p-DHmHllUM.js → p-DuhJ49iN.js} +2 -2
- package/dist/components/{p-D_iZPukF.js → p-G6r6yYg8.js} +2 -2
- package/dist/components/{p-87FjWil8.js → p-IQdLCfJJ.js} +2 -2
- package/dist/components/{p-CAARHqjE.js → p-KTaiJztz.js} +2 -2
- package/dist/components/{p-BM-UYlIS.js → p-N-2CZze7.js} +2 -2
- package/dist/components/{p-Ch00yccW.js → p-Nx52go85.js} +2 -2
- package/dist/components/{p-DDawngok.js → p-P2-eHQJU.js} +2 -2
- package/dist/components/{p-CC4X8rpT.js → p-WEffoQQD.js} +2 -2
- package/dist/components/{p-vrRbdZAI.js → p-nakO4viw.js} +2 -2
- package/dist/components/{p-BC9xYdJD.js → p-pkJ3X3s7.js} +2 -2
- package/dist/components/{p-C6VWVB87.js → p-r_e6_0nP.js} +2 -2
- package/dist/docs/components.json +656 -7
- package/dist/lint/index.js +1 -1
- package/dist/mcp-data/registry/card-action-center.json +23 -3
- package/dist/mcp-data/registry/card-chart.json +23 -3
- package/dist/mcp-data/registry/card-navigation.json +23 -3
- package/dist/mcp-data/registry/card-overview.json +2 -2
- package/dist/mcp-data/registry/card-setting.json +23 -3
- package/dist/mcp-data/registry/card-settings-scope.json +22 -2
- package/dist/mcp-data/registry/field.json +22 -2
- package/dist/mcp-data/registry/inline-banner-settings.json +22 -2
- package/dist/mcp-data/registry/pagination.json +22 -2
- package/dist/mcp-data/registry/radio.json +22 -2
- package/dist/mcp-data/registry/registry.json +119 -18
- package/dist/mcp-data/registry/setting-row-radio.json +22 -2
- package/dist/mcp-data/registry/setting-row-toggle.json +23 -3
- package/dist/mcp-data/registry/shell-app.json +3 -2
- package/dist/mcp-data/registry/skeleton.json +120 -9
- package/dist/mcp-data/registry/table.json +7 -6
- package/dist/types/components/CardActionCenter/CardActionCenter.d.ts +2 -0
- package/dist/types/components/CardChart/CardChart.d.ts +2 -0
- package/dist/types/components/CardNavigation/CardNavigation.d.ts +2 -0
- package/dist/types/components/CardSetting/CardSetting.d.ts +2 -0
- package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +2 -0
- package/dist/types/components/Field/Field.d.ts +3 -0
- package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +2 -0
- package/dist/types/components/Pagination/Pagination.d.ts +3 -0
- package/dist/types/components/Radio/Radio.d.ts +2 -0
- package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +2 -0
- package/dist/types/components/SettingRowToggle/SettingRowToggle.d.ts +2 -0
- package/dist/types/components/Skeleton/Skeleton.d.ts +24 -1
- package/dist/types/components/Skeleton/index.d.ts +1 -1
- package/dist/types/components/Table/Table.d.ts +1 -1
- package/dist/types/components.d.ts +180 -4
- package/dist/vue/ds-card-action-center.js +1 -0
- package/dist/vue/ds-card-chart.js +1 -0
- package/dist/vue/ds-card-navigation.js +1 -0
- package/dist/vue/ds-card-setting.js +1 -0
- package/dist/vue/ds-card-settings-scope.js +1 -0
- package/dist/vue/ds-field.js +2 -1
- package/dist/vue/ds-inline-banner-settings.js +2 -1
- package/dist/vue/ds-pagination.js +1 -0
- package/dist/vue/ds-radio.js +1 -0
- package/dist/vue/ds-setting-row-radio.js +2 -1
- package/dist/vue/ds-setting-row-toggle.js +1 -0
- package/dist/vue/ds-skeleton.js +5 -0
- package/package.json +1 -1
- package/dist/components/p-BI6L3JoU.js +0 -2
- package/dist/components/p-BjYoM1f8.js +0 -2
- package/dist/components/p-CXF8wj9I.js +0 -2
- package/dist/components/p-Cnzry0_v.js +0 -2
- package/dist/components/p-Cnzry0_v.js.map +0 -1
- package/dist/components/p-DwcAROOo.js +0 -2
- package/dist/components/p-DwcAROOo.js.map +0 -1
- package/dist/components/p-hWKa8Jn8.js +0 -2
- package/dist/components/p-hWKa8Jn8.js.map +0 -1
- package/dist/components/p-xCqqM1Rg.js +0 -2
- package/dist/components/p-xCqqM1Rg.js.map +0 -1
- /package/dist/components/{p-6QYDIPd1.js.map → p-3dG9v5Aw.js.map} +0 -0
- /package/dist/components/{p-C4kVTIBc.js.map → p-5PReYMiY.js.map} +0 -0
- /package/dist/components/{p-CzTJAO2J.js.map → p-8fddX3V3.js.map} +0 -0
- /package/dist/components/{p-Cw1ljgW1.js.map → p-9u2WDF0J.js.map} +0 -0
- /package/dist/components/{p-M9pOLcyK.js.map → p-B-ChwMFE.js.map} +0 -0
- /package/dist/components/{p-BvlkO__o.js.map → p-BAIYOobl.js.map} +0 -0
- /package/dist/components/{p-BrJebF5t.js.map → p-BIMW5_Z7.js.map} +0 -0
- /package/dist/components/{p-BkKdzYZP.js.map → p-BMI0F08u.js.map} +0 -0
- /package/dist/components/{p-D0kzIzGQ.js.map → p-BV8sNEVP.js.map} +0 -0
- /package/dist/components/{p-DNtwJJOC.js.map → p-BVUdtuog.js.map} +0 -0
- /package/dist/components/{p-CgYDQSLW.js.map → p-BYo1-6b5.js.map} +0 -0
- /package/dist/components/{p-CJ-igzsZ.js.map → p-BZbJkJpG.js.map} +0 -0
- /package/dist/components/{p-D2rASHHq.js.map → p-BcYzHn1E.js.map} +0 -0
- /package/dist/components/{p-0EpjqRWc.js.map → p-BfRAVR40.js.map} +0 -0
- /package/dist/components/{p-BBZz2Dvg.js.map → p-BoWpIl_m.js.map} +0 -0
- /package/dist/components/{p-529k8euH.js.map → p-BpPHCF63.js.map} +0 -0
- /package/dist/components/{p-DXEInGEq.js.map → p-By_jYvHp.js.map} +0 -0
- /package/dist/components/{p-D4r6oWyQ.js.map → p-C860ilDn.js.map} +0 -0
- /package/dist/components/{p-DcVK0W4X.js.map → p-CEHhx4VQ.js.map} +0 -0
- /package/dist/components/{p-CEm0AoDR.js.map → p-CQnjpuMX.js.map} +0 -0
- /package/dist/components/{p-4qKHg502.js.map → p-CUG4EkKn.js.map} +0 -0
- /package/dist/components/{p-CTstnsLe.js.map → p-CYmz92EF.js.map} +0 -0
- /package/dist/components/{p-YE1r-XSR.js.map → p-CbP9ASmI.js.map} +0 -0
- /package/dist/components/{p-C31AjGbg.js.map → p-CbPGO7vl.js.map} +0 -0
- /package/dist/components/{p-DfphSI9S.js.map → p-CdMIA5hz.js.map} +0 -0
- /package/dist/components/{p-Ds58qo_J.js.map → p-CeaIWw1Q.js.map} +0 -0
- /package/dist/components/{p-DxVokKm8.js.map → p-Cfqvxxs2.js.map} +0 -0
- /package/dist/components/{p-CsPqGA8B.js.map → p-CpqLGzv4.js.map} +0 -0
- /package/dist/components/{p-DKg181YU.js.map → p-DFR9hqDU.js.map} +0 -0
- /package/dist/components/{p-DEJLfD7k.js.map → p-DKZP3jCY.js.map} +0 -0
- /package/dist/components/{p-CTAF7SkL.js.map → p-DMPn_dt7.js.map} +0 -0
- /package/dist/components/{p-CYRTkP1A.js.map → p-DYruK9cb.js.map} +0 -0
- /package/dist/components/{p-CqfYCn-e.js.map → p-DiUaIJ91.js.map} +0 -0
- /package/dist/components/{p-Cqg9T781.js.map → p-DimFbKZH.js.map} +0 -0
- /package/dist/components/{p-DHmHllUM.js.map → p-DuhJ49iN.js.map} +0 -0
- /package/dist/components/{p-D_iZPukF.js.map → p-G6r6yYg8.js.map} +0 -0
- /package/dist/components/{p-87FjWil8.js.map → p-IQdLCfJJ.js.map} +0 -0
- /package/dist/components/{p-CAARHqjE.js.map → p-KTaiJztz.js.map} +0 -0
- /package/dist/components/{p-BM-UYlIS.js.map → p-N-2CZze7.js.map} +0 -0
- /package/dist/components/{p-Ch00yccW.js.map → p-Nx52go85.js.map} +0 -0
- /package/dist/components/{p-DDawngok.js.map → p-P2-eHQJU.js.map} +0 -0
- /package/dist/components/{p-CC4X8rpT.js.map → p-WEffoQQD.js.map} +0 -0
- /package/dist/components/{p-vrRbdZAI.js.map → p-nakO4viw.js.map} +0 -0
- /package/dist/components/{p-BC9xYdJD.js.map → p-pkJ3X3s7.js.map} +0 -0
- /package/dist/components/{p-C6VWVB87.js.map → p-r_e6_0nP.js.map} +0 -0
|
@@ -3313,7 +3313,8 @@
|
|
|
3313
3313
|
"states": [
|
|
3314
3314
|
"Rows expose distinct rest, hover, pressed, keyboard-focus, and inactive states.",
|
|
3315
3315
|
"An empty sections array or groups with no items render the configured empty message.",
|
|
3316
|
-
"The application owns
|
|
3316
|
+
"The application owns data fetching, error, permission, routing, and post-activation consequences and reflects availability through the supplied item data.",
|
|
3317
|
+
"isLoading preserves the section and row layout while skeletonizing all headings, labels, and values; actions become inert and the card exposes its busy state."
|
|
3317
3318
|
],
|
|
3318
3319
|
"responsiveBehavior": [
|
|
3319
3320
|
"The card fills its parent width and never establishes a product breakpoint.",
|
|
@@ -3373,6 +3374,10 @@
|
|
|
3373
3374
|
"type": "string",
|
|
3374
3375
|
"required": false
|
|
3375
3376
|
},
|
|
3377
|
+
"isLoading": {
|
|
3378
|
+
"type": "boolean",
|
|
3379
|
+
"required": false
|
|
3380
|
+
},
|
|
3376
3381
|
"sections": {
|
|
3377
3382
|
"type": "ReadonlyArray<CardActionCenterSection>",
|
|
3378
3383
|
"required": false
|
|
@@ -3398,6 +3403,7 @@
|
|
|
3398
3403
|
],
|
|
3399
3404
|
"registryDependencies": [
|
|
3400
3405
|
"divider",
|
|
3406
|
+
"skeleton",
|
|
3401
3407
|
"tag",
|
|
3402
3408
|
"text"
|
|
3403
3409
|
]
|
|
@@ -3448,7 +3454,8 @@
|
|
|
3448
3454
|
"states": [
|
|
3449
3455
|
"Custom mode provides flexible body chrome and does not mutate chart or legend interaction.",
|
|
3450
3456
|
"Chart mode keeps a slotted external legend static by disabling hover emphasis.",
|
|
3451
|
-
"showFilter adds the standard filter action and emits dsFilterClick without owning filter state."
|
|
3457
|
+
"showFilter adds the standard filter action and emits dsFilterClick without owning filter state.",
|
|
3458
|
+
"isLoading preserves card geometry, skeletonizes the heading and standard filter control, and replaces a chart canvas with one quiet placeholder. The owner supplies skeletons for custom body content and slotted actions."
|
|
3452
3459
|
],
|
|
3453
3460
|
"responsiveBehavior": [
|
|
3454
3461
|
"The sm, md, or lg width sets a matching token-based minimum height and remains constrained by its parent.",
|
|
@@ -3521,6 +3528,10 @@
|
|
|
3521
3528
|
"type": "string",
|
|
3522
3529
|
"required": true
|
|
3523
3530
|
},
|
|
3531
|
+
"isLoading": {
|
|
3532
|
+
"type": "boolean",
|
|
3533
|
+
"required": false
|
|
3534
|
+
},
|
|
3524
3535
|
"showFilter": {
|
|
3525
3536
|
"type": "boolean",
|
|
3526
3537
|
"required": false
|
|
@@ -3550,6 +3561,7 @@
|
|
|
3550
3561
|
],
|
|
3551
3562
|
"registryDependencies": [
|
|
3552
3563
|
"button-unfilled",
|
|
3564
|
+
"skeleton",
|
|
3553
3565
|
"text"
|
|
3554
3566
|
]
|
|
3555
3567
|
},
|
|
@@ -3606,7 +3618,8 @@
|
|
|
3606
3618
|
"In content mode, the native link owns those interaction states only across the header while the body remains application-owned.",
|
|
3607
3619
|
"An empty or unsafe href renders non-interactive card chrome without a false keyboard target.",
|
|
3608
3620
|
"Copy is always stacked, so a missing description keeps the heading at the start of the column instead of centering it in the header.",
|
|
3609
|
-
"The application owns destination loading, authorization, not-found, and recovery states after navigation."
|
|
3621
|
+
"The application owns destination loading, authorization, not-found, and recovery states after navigation.",
|
|
3622
|
+
"isLoading preserves card geometry and copy wrapping while showing skeletons and preventing navigation."
|
|
3610
3623
|
],
|
|
3611
3624
|
"responsiveBehavior": [
|
|
3612
3625
|
"Choose sm, md, or lg from the parent layout; the surface never exceeds its parent width.",
|
|
@@ -3691,6 +3704,10 @@
|
|
|
3691
3704
|
"type": "string",
|
|
3692
3705
|
"required": true
|
|
3693
3706
|
},
|
|
3707
|
+
"isLoading": {
|
|
3708
|
+
"type": "boolean",
|
|
3709
|
+
"required": false
|
|
3710
|
+
},
|
|
3694
3711
|
"variant": {
|
|
3695
3712
|
"type": "CardNavigationVariant",
|
|
3696
3713
|
"required": false
|
|
@@ -3717,6 +3734,7 @@
|
|
|
3717
3734
|
],
|
|
3718
3735
|
"registryDependencies": [
|
|
3719
3736
|
"icon",
|
|
3737
|
+
"skeleton",
|
|
3720
3738
|
"text"
|
|
3721
3739
|
]
|
|
3722
3740
|
},
|
|
@@ -3777,7 +3795,7 @@
|
|
|
3777
3795
|
"Trend is supplied already resolved as a direction, a formatted value, and a tone. Whether a rise reads well is a product decision, so the component never infers tone from the numbers. Derive it with resolveMetricTrend.",
|
|
3778
3796
|
"Omit a trend when there is nothing to report; resolveMetricTrend returns null in that case so no zero change is rendered.",
|
|
3779
3797
|
"Omit score to render a centered Score unavailable cell with a tertiary border and no score fill. Set scoreErrorMessage to replace that copy while the measures remain readable.",
|
|
3780
|
-
"Loading replaces the score and
|
|
3798
|
+
"Loading replaces the score, measures, and fixed period copy with skeletons. The owner supplies loading atoms for slotted controls. Score loading replaces only the fill figure; the overview still skeletons the score-copy spacer and trend. When measures are already supplied, their count preserves the resolved grid shape; otherwise five measure placeholders join the score in the standard six-cell grid.",
|
|
3781
3799
|
"At most seven measures are shown. Keep larger collections outside the summary bar rather than turning it into a dense dashboard.",
|
|
3782
3800
|
"The period and filter controls are slotted rather than owned. Use the period slot when the current range is selectable; otherwise periodLabel supplies fixed current copy in the same md control-frame and label-inset anatomy. Use the filter slot for the application-owned comparison-window control. Slotted Selects use hasBorder false so the 48px bar owns their surrounding boundary and allowClear false because both controls always require one selected reporting period.",
|
|
3783
3801
|
"A numeric safety score infers fair from 0–50, good from 51–80, and excellent from 81–100. The level can be supplied explicitly when the displayed value is not numeric. The deprecated band field is ignored.",
|
|
@@ -3992,7 +4010,8 @@
|
|
|
3992
4010
|
"The parent owns read-only versus editable body composition, dirty state, validation, persistence, loading, success, and error consequences.",
|
|
3993
4011
|
"A save request keeps the section editing while validation or persistence is pending; the parent exits only after success.",
|
|
3994
4012
|
"A cancel request does not persist changes; the parent restores its chosen value snapshot and exits editing.",
|
|
3995
|
-
"The immediate variant keeps the resting card surface and omits header actions even if editing is supplied. The application applies and persists each control change independently."
|
|
4013
|
+
"The immediate variant keeps the resting card surface and omits header actions even if editing is supplied. The application applies and persists each control change independently.",
|
|
4014
|
+
"isLoading replaces header copy and actions with skeletons while retaining card geometry; projected body loading remains owned by the application."
|
|
3996
4015
|
],
|
|
3997
4016
|
"responsiveBehavior": [
|
|
3998
4017
|
"Choose sm, md, or lg from the parent layout. Empty editable cards use the matching minimum height. Cards with body content, and immediate cards, fit that content.",
|
|
@@ -4089,6 +4108,10 @@
|
|
|
4089
4108
|
"type": "string",
|
|
4090
4109
|
"required": true
|
|
4091
4110
|
},
|
|
4111
|
+
"isLoading": {
|
|
4112
|
+
"type": "boolean",
|
|
4113
|
+
"required": false
|
|
4114
|
+
},
|
|
4092
4115
|
"saveLabel": {
|
|
4093
4116
|
"type": "string",
|
|
4094
4117
|
"required": false
|
|
@@ -4119,6 +4142,7 @@
|
|
|
4119
4142
|
"registryDependencies": [
|
|
4120
4143
|
"button-filled",
|
|
4121
4144
|
"button-unfilled",
|
|
4145
|
+
"skeleton",
|
|
4122
4146
|
"text"
|
|
4123
4147
|
]
|
|
4124
4148
|
},
|
|
@@ -4155,6 +4179,7 @@
|
|
|
4155
4179
|
"The shared text-action recipe supplies brand foreground, hover underline, and keyboard focus indication."
|
|
4156
4180
|
],
|
|
4157
4181
|
"states": [
|
|
4182
|
+
"Loading retains the card surface, sentence wrapping, and control footprints while replacing each fragment with an inert text skeleton. Text actions mask only their labels, preserving the surrounding button's hit area.",
|
|
4158
4183
|
"The application owns the selected area, profile, available choices, permissions, and empty-state copy. Existing complete area-trigger labels remain compatible. Applications that separate the localizable settings noun from the control supply the area-only trigger label and noun together.",
|
|
4159
4184
|
"The card reports popup requests without changing selection or expanded state.",
|
|
4160
4185
|
"The surface follows the active theme rather than imposing always-dark colors."
|
|
@@ -4215,6 +4240,10 @@
|
|
|
4215
4240
|
"type": "string",
|
|
4216
4241
|
"required": false
|
|
4217
4242
|
},
|
|
4243
|
+
"isLoading": {
|
|
4244
|
+
"type": "boolean",
|
|
4245
|
+
"required": false
|
|
4246
|
+
},
|
|
4218
4247
|
"managingLabel": {
|
|
4219
4248
|
"type": "string",
|
|
4220
4249
|
"required": false
|
|
@@ -4263,6 +4292,7 @@
|
|
|
4263
4292
|
"@ds-mo/tokens"
|
|
4264
4293
|
],
|
|
4265
4294
|
"registryDependencies": [
|
|
4295
|
+
"skeleton",
|
|
4266
4296
|
"text"
|
|
4267
4297
|
]
|
|
4268
4298
|
},
|
|
@@ -7204,6 +7234,7 @@
|
|
|
7204
7234
|
"Do not use placeholder text as the only label. Keep label text concise and put format or consequence guidance in description."
|
|
7205
7235
|
],
|
|
7206
7236
|
"states": [
|
|
7237
|
+
"Loading masks field copy and the slotted control in place. The control remains mounted with its value, native form association, and accessible label intact; the field is inert until loading ends.",
|
|
7207
7238
|
"The visible label is optional. Omit it when a nearby heading already names the field; Field still associates description and error text with the slotted control.",
|
|
7208
7239
|
"Label, control, description, and error content follow the shared 4px vertical field flow without changing the slotted control's width or semantics. When the slotted control is borderless, description and error copy inset to that control's text origin instead of the resting bordered edge.",
|
|
7209
7240
|
"Field exposes data-focused, data-filled, data-dirty, data-touched, data-invalid, data-disabled, and data-required hooks while the slotted control remains the source of value and interaction behavior.",
|
|
@@ -7269,6 +7300,10 @@
|
|
|
7269
7300
|
"type": "string | undefined",
|
|
7270
7301
|
"required": false
|
|
7271
7302
|
},
|
|
7303
|
+
"isLoading": {
|
|
7304
|
+
"type": "boolean",
|
|
7305
|
+
"required": false
|
|
7306
|
+
},
|
|
7272
7307
|
"label": {
|
|
7273
7308
|
"type": "string",
|
|
7274
7309
|
"required": false
|
|
@@ -7288,6 +7323,7 @@
|
|
|
7288
7323
|
"@ds-mo/tokens"
|
|
7289
7324
|
],
|
|
7290
7325
|
"registryDependencies": [
|
|
7326
|
+
"skeleton",
|
|
7291
7327
|
"text"
|
|
7292
7328
|
]
|
|
7293
7329
|
},
|
|
@@ -7827,7 +7863,8 @@
|
|
|
7827
7863
|
"states": [
|
|
7828
7864
|
"The description renders verbatim in every state in which the owning settings card projects the component.",
|
|
7829
7865
|
"The component has no internal visibility, editing, or dismissal state; the owning settings card controls whether it is present.",
|
|
7830
|
-
"The content height is intrinsic: the banner contributes 8px block padding and its inner content container contributes 4px block padding. A single body-small line is 24px inside that container (4px + 16px line-height + 4px), followed by the tertiary bottom boundary."
|
|
7866
|
+
"The content height is intrinsic: the banner contributes 8px block padding and its inner content container contributes 4px block padding. A single body-small line is 24px inside that container (4px + 16px line-height + 4px), followed by the tertiary bottom boundary.",
|
|
7867
|
+
"isLoading replaces the copy with a wrapping text skeleton inside the original banner geometry."
|
|
7831
7868
|
],
|
|
7832
7869
|
"responsiveBehavior": [
|
|
7833
7870
|
"The component fills the available inline size and lets body-small copy wrap naturally.",
|
|
@@ -7874,6 +7911,10 @@
|
|
|
7874
7911
|
"description": {
|
|
7875
7912
|
"type": "string",
|
|
7876
7913
|
"required": true
|
|
7914
|
+
},
|
|
7915
|
+
"isLoading": {
|
|
7916
|
+
"type": "boolean",
|
|
7917
|
+
"required": false
|
|
7877
7918
|
}
|
|
7878
7919
|
},
|
|
7879
7920
|
"events": [],
|
|
@@ -7890,6 +7931,7 @@
|
|
|
7890
7931
|
"@ds-mo/tokens"
|
|
7891
7932
|
],
|
|
7892
7933
|
"registryDependencies": [
|
|
7934
|
+
"skeleton",
|
|
7893
7935
|
"text"
|
|
7894
7936
|
]
|
|
7895
7937
|
},
|
|
@@ -11331,7 +11373,8 @@
|
|
|
11331
11373
|
"Zero results display Page 1 of 1. A partial final page still derives from totalItems. Assistive status keeps the complete item range.",
|
|
11332
11374
|
"loading preserves the full pagination surface, applies aria-busy to the navigation region, and prevents page or page-size requests.",
|
|
11333
11375
|
"fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while page position reflects the resulting window. fitToPageInactive keeps that choice visible but unavailable when fitting is not meaningful for the current data shape. Pagination does not measure layouts itself.",
|
|
11334
|
-
"showFirstLastButtons defaults to false. Enable it when direct jumps to both result boundaries materially help the workflow."
|
|
11376
|
+
"showFirstLastButtons defaults to false. Enable it when direct jumps to both result boundaries materially help the workflow.",
|
|
11377
|
+
"chromeLoading shows separate skeletons for the page-size label, selector, page position and each configured navigation control, retaining their intrinsic and responsive geometry. It also prevents requests."
|
|
11335
11378
|
],
|
|
11336
11379
|
"responsiveBehavior": [
|
|
11337
11380
|
"The full-width controls remain on one line with noun, selected size, a vertical divider, page position, Previous and Next, plus optional First and Last navigation.",
|
|
@@ -11361,6 +11404,10 @@
|
|
|
11361
11404
|
}
|
|
11362
11405
|
},
|
|
11363
11406
|
"props": {
|
|
11407
|
+
"chromeLoading": {
|
|
11408
|
+
"type": "boolean",
|
|
11409
|
+
"required": false
|
|
11410
|
+
},
|
|
11364
11411
|
"fitPageSize": {
|
|
11365
11412
|
"type": "number | undefined",
|
|
11366
11413
|
"required": false
|
|
@@ -11448,6 +11495,7 @@
|
|
|
11448
11495
|
"button-unfilled",
|
|
11449
11496
|
"divider",
|
|
11450
11497
|
"select",
|
|
11498
|
+
"skeleton",
|
|
11451
11499
|
"text"
|
|
11452
11500
|
]
|
|
11453
11501
|
},
|
|
@@ -12640,7 +12688,8 @@
|
|
|
12640
12688
|
"Description-rich options grow beyond the fixed density height while retaining its minimum target size and primitive-owned selection anatomy.",
|
|
12641
12689
|
"A visible group label uses the same density height and horizontal text origin as a menu section heading above the option list without adding a second interaction target. Copy uses text-body-small emphasis.",
|
|
12642
12690
|
"Vertical form options use a 4px gap; a medium single-line option and its group label each use the shared 32px control height.",
|
|
12643
|
-
"Form and settings usage omits a row hover or pressed wash by default; set hasInteractionFill only when each radio option is presented as a choice-list row."
|
|
12691
|
+
"Form and settings usage omits a row hover or pressed wash by default; set hasInteractionFill only when each radio option is presented as a choice-list row.",
|
|
12692
|
+
"isLoading preserves option geometry and the submitted form value while skeletonizing the circles and copy. Loading options cannot receive focus or change selection."
|
|
12644
12693
|
],
|
|
12645
12694
|
"responsiveBehavior": [
|
|
12646
12695
|
"Choose size from the density of the containing form or settings row.",
|
|
@@ -12740,6 +12789,10 @@
|
|
|
12740
12789
|
"type": "boolean",
|
|
12741
12790
|
"required": false
|
|
12742
12791
|
},
|
|
12792
|
+
"isLoading": {
|
|
12793
|
+
"type": "boolean",
|
|
12794
|
+
"required": false
|
|
12795
|
+
},
|
|
12743
12796
|
"name": {
|
|
12744
12797
|
"type": "string | undefined",
|
|
12745
12798
|
"required": false
|
|
@@ -12784,6 +12837,7 @@
|
|
|
12784
12837
|
"@ds-mo/tokens"
|
|
12785
12838
|
],
|
|
12786
12839
|
"registryDependencies": [
|
|
12840
|
+
"skeleton",
|
|
12787
12841
|
"text"
|
|
12788
12842
|
]
|
|
12789
12843
|
},
|
|
@@ -13932,7 +13986,8 @@
|
|
|
13932
13986
|
"The row is a neutral padded composition; selected, focus, and inactive states belong to the slotted Radio without a choice-list hover or pressed wash.",
|
|
13933
13987
|
"The owning application handles dsChange and updates the slotted Radio value.",
|
|
13934
13988
|
"Heading, saved-value choice, and slotted Radio stay mounted. presentation reflects on the host so view/edit is CSS visibility only; do not swap Host children or ngIf the Radio.",
|
|
13935
|
-
"View presentation hides the slotted Radio with ::slotted host CSS and shows the saved option label plus optional consequence copy. The Radio stays in the tree."
|
|
13989
|
+
"View presentation hides the slotted Radio with ::slotted host CSS and shows the saved option label plus optional consequence copy. The Radio stays in the tree.",
|
|
13990
|
+
"isLoading preserves the heading and saved-value copy as text skeletons. The owner also sets isLoading on the slotted Radio when its editing presentation is pending."
|
|
13936
13991
|
],
|
|
13937
13992
|
"responsiveBehavior": [
|
|
13938
13993
|
"The row never exceeds its parent width; the slotted Radio keeps its option copy in the flexible column and wraps descriptions when needed."
|
|
@@ -13962,6 +14017,10 @@
|
|
|
13962
14017
|
"type": "string",
|
|
13963
14018
|
"required": false
|
|
13964
14019
|
},
|
|
14020
|
+
"isLoading": {
|
|
14021
|
+
"type": "boolean",
|
|
14022
|
+
"required": false
|
|
14023
|
+
},
|
|
13965
14024
|
"label": {
|
|
13966
14025
|
"type": "string",
|
|
13967
14026
|
"required": false
|
|
@@ -13989,6 +14048,7 @@
|
|
|
13989
14048
|
"@ds-mo/tokens"
|
|
13990
14049
|
],
|
|
13991
14050
|
"registryDependencies": [
|
|
14051
|
+
"skeleton",
|
|
13992
14052
|
"text"
|
|
13993
14053
|
]
|
|
13994
14054
|
},
|
|
@@ -14027,7 +14087,8 @@
|
|
|
14027
14087
|
"The application accepts or rejects change requests by updating the controlled checked value and owns persistence and errors.",
|
|
14028
14088
|
"Name the enabled setting consistently; the label must not change when the switch is toggled.",
|
|
14029
14089
|
"Non-emphasis rows without supporting copy use ds-text color secondary (foreground-secondary) on the title. Non-emphasis rows with description keep a primary title.",
|
|
14030
|
-
"Supporting copy is text-body-small in every variant."
|
|
14090
|
+
"Supporting copy is text-body-small in every variant.",
|
|
14091
|
+
"isLoading preserves the copy wrapping and switch footprint, replaces them with skeletons, and prevents value changes."
|
|
14031
14092
|
],
|
|
14032
14093
|
"responsiveBehavior": [
|
|
14033
14094
|
"The copy wraps while the switch keeps its natural size in the trailing column, including at narrow widths."
|
|
@@ -14066,6 +14127,10 @@
|
|
|
14066
14127
|
"type": "boolean",
|
|
14067
14128
|
"required": false
|
|
14068
14129
|
},
|
|
14130
|
+
"isLoading": {
|
|
14131
|
+
"type": "boolean",
|
|
14132
|
+
"required": false
|
|
14133
|
+
},
|
|
14069
14134
|
"label": {
|
|
14070
14135
|
"type": "string",
|
|
14071
14136
|
"required": true
|
|
@@ -14094,6 +14159,7 @@
|
|
|
14094
14159
|
"@ds-mo/tokens"
|
|
14095
14160
|
],
|
|
14096
14161
|
"registryDependencies": [
|
|
14162
|
+
"skeleton",
|
|
14097
14163
|
"switch",
|
|
14098
14164
|
"text"
|
|
14099
14165
|
]
|
|
@@ -14204,7 +14270,8 @@
|
|
|
14204
14270
|
"Managed page-header capacity follows only the fixed shell breakpoint: roomy on desktop and compact on tablet. Opening PanelTools does not compact or constrain BarTitle.",
|
|
14205
14271
|
"Mobile keeps at most the first eligible ordered icon command visible and moves labeled buttons, menu choices, split actions, and explicit overflow commands into one shell-owned text-only page-actions menu.",
|
|
14206
14272
|
"The bottom bar remains visible at all route and tool depths in the foundation release.",
|
|
14207
|
-
"A mobile shell banner paints a fixed top edge with its resolved background through exit motion. Color variants and theme changes follow the banner automatically; native Safari status-area tint remains a device-verified browser behavior."
|
|
14273
|
+
"A mobile shell banner paints a fixed top edge with its resolved background through exit motion. Color variants and theme changes follow the banner automatically; native Safari status-area tint remains a device-verified browser behavior.",
|
|
14274
|
+
"The routed content lane owns a size-query container. Full-height page compositions consume --ds-shell-content-block-size and subtract their page-local header; banners and desktop or mobile navigation resize that lane automatically."
|
|
14208
14275
|
],
|
|
14209
14276
|
"frameworkCaveats": {
|
|
14210
14277
|
"customElements": [
|
|
@@ -14853,11 +14920,14 @@
|
|
|
14853
14920
|
"Shimmer is on by default and may be disabled for a static placeholder. Reduced motion always produces the static final shape.",
|
|
14854
14921
|
"Rounded is an optional visual treatment for icon and control atoms rather than a semantic state.",
|
|
14855
14922
|
"Omitted background is for primary and secondary surfaces. Explicit faint documents a faint parent while using the same standard base and shimmer tokens; other contexts use matching surface tokens.",
|
|
14856
|
-
"The owner decides whether to delay initial visibility and when to replace the complete composition."
|
|
14923
|
+
"The owner decides whether to delay initial visibility and when to replace the complete composition.",
|
|
14924
|
+
"preserveLayout uses projected text or a control as the hidden, inert size source, retaining wrapping and responsive dimensions; set isLoading false to reveal that same mounted content. Use one atom per text or control, not a whole page.",
|
|
14925
|
+
"Control appearance mirrors the pending control: filled masks the entire container; outlined retains its border with icon or text atoms; borderless masks only those contents. Set controlContent to match the control anatomy and preserveLayout to retain its exact footprint."
|
|
14857
14926
|
],
|
|
14858
14927
|
"responsiveBehavior": [
|
|
14859
14928
|
"The owning layout changes placeholder count, width, visibility, and arrangement to match its real responsive content.",
|
|
14860
|
-
"
|
|
14929
|
+
"Set collapseLabel on a control skeleton when its real control opts into compact table-caption behavior. It follows the same table or standalone data-toolbar measurement, replacing icon-and-label anatomy with a centered icon while preserving the enclosing control footprint.",
|
|
14930
|
+
"Other skeletons do not infer breakpoints or rearrange sibling atoms. Icon canvases retain their square geometry in flex layouts."
|
|
14861
14931
|
],
|
|
14862
14932
|
"frameworkCaveats": {
|
|
14863
14933
|
"customElements": [
|
|
@@ -14897,7 +14967,11 @@
|
|
|
14897
14967
|
"textVariant",
|
|
14898
14968
|
"iconSize",
|
|
14899
14969
|
"controlSize",
|
|
14900
|
-
"rounded"
|
|
14970
|
+
"rounded",
|
|
14971
|
+
"preserveLayout",
|
|
14972
|
+
"isLoading",
|
|
14973
|
+
"controlAppearance",
|
|
14974
|
+
"controlContent"
|
|
14901
14975
|
]
|
|
14902
14976
|
},
|
|
14903
14977
|
{
|
|
@@ -14910,7 +14984,9 @@
|
|
|
14910
14984
|
"reason": "The component owns its surface and interaction treatment; use its semantic presentation props or compose an application-owned surrounding surface.",
|
|
14911
14985
|
"props": [
|
|
14912
14986
|
"background",
|
|
14913
|
-
"variant"
|
|
14987
|
+
"variant",
|
|
14988
|
+
"controlAppearance",
|
|
14989
|
+
"controlContent"
|
|
14914
14990
|
]
|
|
14915
14991
|
}
|
|
14916
14992
|
],
|
|
@@ -14922,6 +14998,18 @@
|
|
|
14922
14998
|
"type": "SkeletonBackground | undefined",
|
|
14923
14999
|
"required": false
|
|
14924
15000
|
},
|
|
15001
|
+
"collapseLabel": {
|
|
15002
|
+
"type": "boolean",
|
|
15003
|
+
"required": false
|
|
15004
|
+
},
|
|
15005
|
+
"controlAppearance": {
|
|
15006
|
+
"type": "SkeletonControlAppearance",
|
|
15007
|
+
"required": false
|
|
15008
|
+
},
|
|
15009
|
+
"controlContent": {
|
|
15010
|
+
"type": "SkeletonControlContent",
|
|
15011
|
+
"required": false
|
|
15012
|
+
},
|
|
14925
15013
|
"controlSize": {
|
|
14926
15014
|
"type": "ControlSize",
|
|
14927
15015
|
"required": false
|
|
@@ -14930,6 +15018,14 @@
|
|
|
14930
15018
|
"type": "IconSize",
|
|
14931
15019
|
"required": false
|
|
14932
15020
|
},
|
|
15021
|
+
"isLoading": {
|
|
15022
|
+
"type": "boolean",
|
|
15023
|
+
"required": false
|
|
15024
|
+
},
|
|
15025
|
+
"preserveLayout": {
|
|
15026
|
+
"type": "boolean",
|
|
15027
|
+
"required": false
|
|
15028
|
+
},
|
|
14933
15029
|
"rounded": {
|
|
14934
15030
|
"type": "boolean",
|
|
14935
15031
|
"required": false
|
|
@@ -14952,7 +15048,9 @@
|
|
|
14952
15048
|
}
|
|
14953
15049
|
},
|
|
14954
15050
|
"events": [],
|
|
14955
|
-
"slots": [
|
|
15051
|
+
"slots": [
|
|
15052
|
+
""
|
|
15053
|
+
],
|
|
14956
15054
|
"exports": {
|
|
14957
15055
|
"customElement": "ds-skeleton",
|
|
14958
15056
|
"react": "DsSkeleton",
|
|
@@ -14964,7 +15062,9 @@
|
|
|
14964
15062
|
"@ds-mo/ui",
|
|
14965
15063
|
"@ds-mo/tokens"
|
|
14966
15064
|
],
|
|
14967
|
-
"registryDependencies": [
|
|
15065
|
+
"registryDependencies": [
|
|
15066
|
+
"skeleton"
|
|
15067
|
+
]
|
|
14968
15068
|
},
|
|
14969
15069
|
{
|
|
14970
15070
|
"name": "slider",
|
|
@@ -15886,7 +15986,8 @@
|
|
|
15886
15986
|
"While any checkbox selection is active, row activation toggles selection instead of opening details. Clearing the selection restores ordinary row activation. Nested controls retain their own intent, and disabled or non-selectable rows cannot be selected by activating their row.",
|
|
15887
15987
|
"Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure.",
|
|
15888
15988
|
"An external ds-data-preferences may own column controls. Hide only the built-in Customize trigger, keep column customization enabled, and share hidden-column and ordering state with the external surface.",
|
|
15889
|
-
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback."
|
|
15989
|
+
"Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
|
|
15990
|
+
"chromeLoading replaces column header labels and selection chrome with skeletons, preserving column geometry and accessible names as well as table-owned caption controls."
|
|
15890
15991
|
],
|
|
15891
15992
|
"responsiveBehavior": [
|
|
15892
15993
|
"Editable cells compose the shared borderless controls with cell-owned interaction and focus chrome. Only the active cell mounts a field. Single-select choices complete the edit immediately; multiline fields reserve Enter for a newline and use Ctrl/Command+Enter to commit. Date and time fields keep their picker keyboard behavior and emit canonical scalar values. Drafts stay local until a controlled change is proposed.",
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"The row is a neutral padded composition; selected, focus, and inactive states belong to the slotted Radio without a choice-list hover or pressed wash.",
|
|
38
38
|
"The owning application handles dsChange and updates the slotted Radio value.",
|
|
39
39
|
"Heading, saved-value choice, and slotted Radio stay mounted. presentation reflects on the host so view/edit is CSS visibility only; do not swap Host children or ngIf the Radio.",
|
|
40
|
-
"View presentation hides the slotted Radio with ::slotted host CSS and shows the saved option label plus optional consequence copy. The Radio stays in the tree."
|
|
40
|
+
"View presentation hides the slotted Radio with ::slotted host CSS and shows the saved option label plus optional consequence copy. The Radio stays in the tree.",
|
|
41
|
+
"isLoading preserves the heading and saved-value copy as text skeletons. The owner also sets isLoading on the slotted Radio when its editing presentation is pending."
|
|
41
42
|
],
|
|
42
43
|
"responsiveBehavior": [
|
|
43
44
|
"The row never exceeds its parent width; the slotted Radio keeps its option copy in the flexible column and wraps descriptions when needed."
|
|
@@ -72,6 +73,15 @@
|
|
|
72
73
|
"mutable": false,
|
|
73
74
|
"description": "Optional consequence or supporting copy for the saved option."
|
|
74
75
|
},
|
|
76
|
+
"isLoading": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"resolvedType": "boolean",
|
|
79
|
+
"attribute": "is-loading",
|
|
80
|
+
"default": "false",
|
|
81
|
+
"required": false,
|
|
82
|
+
"mutable": false,
|
|
83
|
+
"description": "Skeletonize the row copy without changing the saved choice or edit presentation."
|
|
84
|
+
},
|
|
75
85
|
"label": {
|
|
76
86
|
"type": "string",
|
|
77
87
|
"resolvedType": "string | undefined",
|
|
@@ -111,6 +121,15 @@
|
|
|
111
121
|
"mutable": false,
|
|
112
122
|
"description": "Optional consequence or supporting copy for the saved option."
|
|
113
123
|
},
|
|
124
|
+
"isLoading": {
|
|
125
|
+
"type": "boolean",
|
|
126
|
+
"resolvedType": "boolean",
|
|
127
|
+
"attribute": "is-loading",
|
|
128
|
+
"default": "false",
|
|
129
|
+
"required": false,
|
|
130
|
+
"mutable": false,
|
|
131
|
+
"description": "Skeletonize the row copy without changing the saved choice or edit presentation."
|
|
132
|
+
},
|
|
114
133
|
"label": {
|
|
115
134
|
"type": "string",
|
|
116
135
|
"resolvedType": "string | undefined",
|
|
@@ -179,6 +198,7 @@
|
|
|
179
198
|
"@ds-mo/tokens"
|
|
180
199
|
],
|
|
181
200
|
"registryDependencies": [
|
|
201
|
+
"skeleton",
|
|
182
202
|
"text"
|
|
183
203
|
],
|
|
184
204
|
"files": [
|
|
@@ -189,7 +209,7 @@
|
|
|
189
209
|
},
|
|
190
210
|
{
|
|
191
211
|
"path": "src/wc/components/SettingRowRadio/SettingRowRadio.tsx",
|
|
192
|
-
"content": "import { Component, Element, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type SettingRowRadioPresentation = 'edit' | 'view';\n\ntype SettingsRadio = HTMLElement & {\n groupLabel: string;\n ariaLabel: string | null;\n ariaLabelledby?: string;\n};\n\nlet settingRowRadioHeadingId = 0;\n\n/** Padded settings-row composition for a Radio group. */\n@Component({\n tag: 'ds-setting-row-radio',\n styleUrl: 'SettingRowRadio.css',\n scoped: true,\n})\nexport class SettingRowRadio {\n @Element() el!: HTMLElement;\n\n /** Interactive Radio group or non-interactive saved-value readout. */\n @Prop({ reflect: true }) presentation: SettingRowRadioPresentation = 'edit';\n /** Settings heading shown in both presentations. Not Radio's form groupLabel. */\n @Prop() label?: string;\n /** Saved option label shown in view presentation. */\n @Prop() valueLabel?: string;\n /** Optional consequence or supporting copy for the saved option. */\n @Prop() description?: string;\n\n private readonly headingId = `ds-setting-row-radio-heading-${++settingRowRadioHeadingId}`;\n\n componentWillLoad() {\n this.syncSlottedRadio();\n }\n\n componentDidLoad() {\n this.syncSlottedRadio();\n }\n\n private syncSlottedRadio = () => {\n for (const radio of this.el.querySelectorAll<SettingsRadio>('ds-radio')) {\n radio.groupLabel = '';\n if (this.label) {\n radio.ariaLabelledby = this.headingId;\n radio.ariaLabel = null;\n }\n }\n };\n\n render() {\n return (\n <Host>\n <ds-text\n
|
|
212
|
+
"content": "import { Component, Element, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type SettingRowRadioPresentation = 'edit' | 'view';\n\ntype SettingsRadio = HTMLElement & {\n groupLabel: string;\n ariaLabel: string | null;\n ariaLabelledby?: string;\n};\n\nlet settingRowRadioHeadingId = 0;\n\n/** Padded settings-row composition for a Radio group. */\n@Component({\n tag: 'ds-setting-row-radio',\n styleUrl: 'SettingRowRadio.css',\n scoped: true,\n})\nexport class SettingRowRadio {\n @Element() el!: HTMLElement;\n\n /** Interactive Radio group or non-interactive saved-value readout. */\n @Prop({ reflect: true }) presentation: SettingRowRadioPresentation = 'edit';\n /** Settings heading shown in both presentations. Not Radio's form groupLabel. */\n @Prop() label?: string;\n /** Saved option label shown in view presentation. */\n @Prop() valueLabel?: string;\n /** Optional consequence or supporting copy for the saved option. */\n @Prop() description?: string;\n /** Skeletonize the row copy without changing the saved choice or edit presentation. */\n @Prop() isLoading: boolean = false;\n\n private readonly headingId = `ds-setting-row-radio-heading-${++settingRowRadioHeadingId}`;\n\n componentWillLoad() {\n this.syncSlottedRadio();\n }\n\n componentDidLoad() {\n this.syncSlottedRadio();\n }\n\n private syncSlottedRadio = () => {\n for (const radio of this.el.querySelectorAll<SettingsRadio>('ds-radio')) {\n radio.groupLabel = '';\n if (this.label) {\n radio.ariaLabelledby = this.headingId;\n radio.ariaLabel = null;\n }\n }\n };\n\n render() {\n return (\n <Host aria-busy={this.isLoading ? 'true' : undefined}>\n <ds-skeleton\n preserveLayout\n isLoading={this.isLoading}\n textVariant={CONTROL_TEXT_VARIANT.md}\n >\n <ds-text\n key=\"setting-row-radio-heading\"\n class=\"setting-row-radio__heading\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT.md}\n emphasis\n textId={this.label ? this.headingId : undefined}\n >\n {this.label}\n </ds-text>\n </ds-skeleton>\n <div key=\"setting-row-radio-choice\" class=\"setting-row-radio__choice\">\n {this.valueLabel ? (\n <ds-skeleton\n preserveLayout\n isLoading={this.isLoading}\n textVariant={CONTROL_TEXT_VARIANT.md}\n >\n <ds-text key=\"setting-row-radio-value\" as=\"span\" variant={CONTROL_TEXT_VARIANT.md}>\n {this.valueLabel}\n </ds-text>\n </ds-skeleton>\n ) : null}\n {this.description ? (\n <ds-skeleton\n preserveLayout\n isLoading={this.isLoading}\n textVariant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n >\n <ds-text\n key=\"setting-row-radio-description\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n </ds-skeleton>\n ) : null}\n </div>\n <slot onSlotchange={this.syncSlottedRadio} />\n </Host>\n );\n }\n}\n",
|
|
193
213
|
"type": "registry:ui"
|
|
194
214
|
}
|
|
195
215
|
]
|
|
@@ -34,7 +34,8 @@
|
|
|
34
34
|
"The application accepts or rejects change requests by updating the controlled checked value and owns persistence and errors.",
|
|
35
35
|
"Name the enabled setting consistently; the label must not change when the switch is toggled.",
|
|
36
36
|
"Non-emphasis rows without supporting copy use ds-text color secondary (foreground-secondary) on the title. Non-emphasis rows with description keep a primary title.",
|
|
37
|
-
"Supporting copy is text-body-small in every variant."
|
|
37
|
+
"Supporting copy is text-body-small in every variant.",
|
|
38
|
+
"isLoading preserves the copy wrapping and switch footprint, replaces them with skeletons, and prevents value changes."
|
|
38
39
|
],
|
|
39
40
|
"responsiveBehavior": [
|
|
40
41
|
"The copy wraps while the switch keeps its natural size in the trailing column, including at narrow widths."
|
|
@@ -88,6 +89,15 @@
|
|
|
88
89
|
"mutable": false,
|
|
89
90
|
"description": "Prevent changes while the setting is unavailable."
|
|
90
91
|
},
|
|
92
|
+
"isLoading": {
|
|
93
|
+
"type": "boolean",
|
|
94
|
+
"resolvedType": "boolean",
|
|
95
|
+
"attribute": "is-loading",
|
|
96
|
+
"default": "false",
|
|
97
|
+
"required": false,
|
|
98
|
+
"mutable": false,
|
|
99
|
+
"description": "Preserve the real row geometry while replacing copy and switch with skeletons."
|
|
100
|
+
},
|
|
91
101
|
"label": {
|
|
92
102
|
"type": "string",
|
|
93
103
|
"resolvedType": "string",
|
|
@@ -146,6 +156,15 @@
|
|
|
146
156
|
"mutable": false,
|
|
147
157
|
"description": "Prevent changes while the setting is unavailable."
|
|
148
158
|
},
|
|
159
|
+
"isLoading": {
|
|
160
|
+
"type": "boolean",
|
|
161
|
+
"resolvedType": "boolean",
|
|
162
|
+
"attribute": "is-loading",
|
|
163
|
+
"default": "false",
|
|
164
|
+
"required": false,
|
|
165
|
+
"mutable": false,
|
|
166
|
+
"description": "Preserve the real row geometry while replacing copy and switch with skeletons."
|
|
167
|
+
},
|
|
149
168
|
"label": {
|
|
150
169
|
"type": "string",
|
|
151
170
|
"resolvedType": "string",
|
|
@@ -215,18 +234,19 @@
|
|
|
215
234
|
"@ds-mo/tokens"
|
|
216
235
|
],
|
|
217
236
|
"registryDependencies": [
|
|
237
|
+
"skeleton",
|
|
218
238
|
"switch",
|
|
219
239
|
"text"
|
|
220
240
|
],
|
|
221
241
|
"files": [
|
|
222
242
|
{
|
|
223
243
|
"path": "src/wc/components/SettingRowToggle/SettingRowToggle.css",
|
|
224
|
-
"content": "@import '../../utils/settings-row.css';\n\n:host {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--dimension-space-200);\n}\n\n.setting-row-toggle__copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n -webkit-user-select: none;\n user-select: none;\n}\n",
|
|
244
|
+
"content": "@import '../../utils/settings-row.css';\n\n:host {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--dimension-space-200);\n}\n\n.setting-row-toggle__copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n -webkit-user-select: none;\n user-select: none;\n}\n\n.setting-row-toggle__line,\n.setting-row-toggle__control {\n display: grid;\n min-width: 0;\n align-items: center;\n}\n\n.setting-row-toggle__line > *,\n.setting-row-toggle__control > * {\n grid-area: 1 / 1;\n}\n\n:host(.setting-row-toggle--loading) ds-text,\n:host(.setting-row-toggle--loading) ds-switch {\n visibility: hidden;\n}\n\n.setting-row-toggle__control > ds-skeleton {\n height: 100%;\n}\n",
|
|
225
245
|
"type": "registry:ui"
|
|
226
246
|
},
|
|
227
247
|
{
|
|
228
248
|
"path": "src/wc/components/SettingRowToggle/SettingRowToggle.tsx",
|
|
229
|
-
"content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT } from '../../utils';\n\nlet settingRowToggleSequence = 0;\n\nexport type SettingRowToggleVariant = 'emphasis' | 'non-emphasis';\n\n/** A labeled binary setting that applies immediately through its application owner. */\n@Component({\n tag: 'ds-setting-row-toggle',\n styleUrl: 'SettingRowToggle.css',\n scoped: true,\n})\nexport class SettingRowToggle {\n /** Name of the enabled setting. */\n @Prop() label!: string;\n /** Supporting copy explaining the setting and its alternative. */\n @Prop() description?: string;\n /** Controlled enabled state. */\n @Prop() checked = false;\n /** Prevent changes while the setting is unavailable. */\n @Prop() disabled = false;\n /** Typography recipe for the setting copy. */\n @Prop() variant: SettingRowToggleVariant = 'emphasis';\n\n /** Requests the next value; the application owns acceptance and persistence. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private readonly rowId = `ds-setting-row-toggle-${++settingRowToggleSequence}`;\n\n private handleChange = (event: CustomEvent<boolean>) => {\n event.stopPropagation();\n // Keep the composed switch controlled until the owner accepts this request.\n (event.target as HTMLDsSwitchElement).checked = this.checked;\n this.dsChange.emit(event.detail);\n };\n\n render() {\n const hasDescription = Boolean(this.description?.trim());\n const titleColor = this.variant === 'non-emphasis' && !hasDescription ? 'secondary' : 'primary';\n\n return (\n <Host>\n <div class=\"setting-row-toggle__copy\">\n <ds-text\n
|
|
249
|
+
"content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT } from '../../utils';\n\nlet settingRowToggleSequence = 0;\n\nexport type SettingRowToggleVariant = 'emphasis' | 'non-emphasis';\n\n/** A labeled binary setting that applies immediately through its application owner. */\n@Component({\n tag: 'ds-setting-row-toggle',\n styleUrl: 'SettingRowToggle.css',\n scoped: true,\n})\nexport class SettingRowToggle {\n /** Name of the enabled setting. */\n @Prop() label!: string;\n /** Supporting copy explaining the setting and its alternative. */\n @Prop() description?: string;\n /** Controlled enabled state. */\n @Prop() checked = false;\n /** Prevent changes while the setting is unavailable. */\n @Prop() disabled = false;\n /** Preserve the real row geometry while replacing copy and switch with skeletons. */\n @Prop() isLoading = false;\n /** Typography recipe for the setting copy. */\n @Prop() variant: SettingRowToggleVariant = 'emphasis';\n\n /** Requests the next value; the application owns acceptance and persistence. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private readonly rowId = `ds-setting-row-toggle-${++settingRowToggleSequence}`;\n\n private handleChange = (event: CustomEvent<boolean>) => {\n event.stopPropagation();\n // Keep the composed switch controlled until the owner accepts this request.\n (event.target as HTMLDsSwitchElement).checked = this.checked;\n if (!this.isLoading) this.dsChange.emit(event.detail);\n };\n\n render() {\n const hasDescription = Boolean(this.description?.trim());\n const titleColor = this.variant === 'non-emphasis' && !hasDescription ? 'secondary' : 'primary';\n\n return (\n <Host\n aria-busy={this.isLoading ? 'true' : undefined}\n class={{ 'setting-row-toggle--loading': this.isLoading }}\n >\n <div class=\"setting-row-toggle__copy\">\n <div class=\"setting-row-toggle__line\">\n <ds-text\n textId={`${this.rowId}-label`}\n variant=\"text-body-medium\"\n color={titleColor}\n emphasis={this.variant === 'emphasis'}\n >\n {this.label}\n </ds-text>\n {this.isLoading && <ds-skeleton width=\"75%\" />}\n </div>\n {hasDescription && (\n <div class=\"setting-row-toggle__line\">\n <ds-text\n textId={`${this.rowId}-description`}\n variant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n {this.isLoading && (\n <ds-skeleton width=\"95%\" textVariant={CONTROL_SUPPORTING_TEXT_VARIANT.md} />\n )}\n </div>\n )}\n </div>\n <div class=\"setting-row-toggle__control\" inert={this.isLoading}>\n <ds-switch\n checked={this.checked}\n disabled={this.disabled}\n aria-labelledby={`${this.rowId}-label`}\n aria-describedby={hasDescription ? `${this.rowId}-description` : undefined}\n onDsChange={this.handleChange}\n />\n {this.isLoading && <ds-skeleton variant=\"control\" width=\"100%\" rounded={true} />}\n </div>\n </Host>\n );\n }\n}\n",
|
|
230
250
|
"type": "registry:ui"
|
|
231
251
|
}
|
|
232
252
|
]
|
|
@@ -105,7 +105,8 @@
|
|
|
105
105
|
"Managed page-header capacity follows only the fixed shell breakpoint: roomy on desktop and compact on tablet. Opening PanelTools does not compact or constrain BarTitle.",
|
|
106
106
|
"Mobile keeps at most the first eligible ordered icon command visible and moves labeled buttons, menu choices, split actions, and explicit overflow commands into one shell-owned text-only page-actions menu.",
|
|
107
107
|
"The bottom bar remains visible at all route and tool depths in the foundation release.",
|
|
108
|
-
"A mobile shell banner paints a fixed top edge with its resolved background through exit motion. Color variants and theme changes follow the banner automatically; native Safari status-area tint remains a device-verified browser behavior."
|
|
108
|
+
"A mobile shell banner paints a fixed top edge with its resolved background through exit motion. Color variants and theme changes follow the banner automatically; native Safari status-area tint remains a device-verified browser behavior.",
|
|
109
|
+
"The routed content lane owns a size-query container. Full-height page compositions consume --ds-shell-content-block-size and subtract their page-local header; banners and desktop or mobile navigation resize that lane automatically."
|
|
109
110
|
],
|
|
110
111
|
"frameworkCaveats": {
|
|
111
112
|
"customElements": [
|
|
@@ -721,7 +722,7 @@
|
|
|
721
722
|
"files": [
|
|
722
723
|
{
|
|
723
724
|
"path": "src/wc/components/ShellApp/ShellApp.css",
|
|
724
|
-
"content": ":host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n font-family: var(--typography-font-family-ui, system-ui);\n --ds-shell-panel-tools-width: var(--dimension-panel-width-xs);\n --ds-shell-gradient-context: flat;\n}\n\n:host {\n /* Shared solid Chrome base; gradient and paper layers composite above it. */\n --_shell-chrome-bg: var(--color-chrome-background-theme);\n}\n\n:host(.shell-app--gradient) {\n --ds-shell-gradient-context: gradient;\n}\n\n.shell-app__row {\n display: flex;\n flex: 1 1 0;\n min-height: 0;\n position: relative;\n}\n\n.shell-app__banner {\n --_shell-banner-edge-display: none;\n flex: 0 0 auto;\n min-width: 0;\n position: relative;\n z-index: 5;\n}\n\n.shell-app__banner ::slotted(ds-banner) {\n display: grid;\n width: 100%;\n}\n\n/*\n * One chrome layer behind the shell row. Wash uses background-attachment: fixed\n * so the pattern is locked to the viewport — panel/tools collapse only changes the\n * transparent window, not the pattern phase. JS sets wash background-size from\n * readShellViewportDimensions(), not the shell element box.\n */\n.shell-app__chrome {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n background-color: var(--_shell-chrome-bg);\n}\n\n:host(.shell-app--gradient) .shell-app__chrome::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-position: 0 0;\n background-attachment: fixed;\n z-index: 1;\n opacity: var(--ds-shell-gradient-opacity, 1);\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-repeat: no-repeat;\n}\n\n.shell-app__paper-texture {\n z-index: 2;\n}\n\n.shell-app__panel {\n flex: 0 0 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n /* Above main so resize handle line can paint over the workspace edge */\n z-index: 2;\n}\n\n.shell-app__panel ::slotted(ds-panel-nav) {\n display: block;\n height: 100%;\n}\n\n.shell-app__panel > ds-panel-nav {\n display: block;\n height: 100%;\n}\n\n.shell-app__main {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas:\n 'bar tools'\n 'content tools';\n position: relative;\n z-index: 1;\n}\n\n.shell-app__mobile-sheet-nav,\n.shell-app__mobile-bar-nav {\n display: none;\n}\n\n.shell-app__bar {\n grid-area: bar;\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.shell-app__bar ::slotted(ds-bar-nav) {\n display: block;\n}\n\n.shell-app__bar ::slotted(ds-bar-title),\n.shell-app__bar ::slotted(ds-bar-page-title) {\n display: block;\n}\n\n.shell-app__bar > ds-bar-nav {\n display: block;\n}\n\n.shell-app__bar > ds-bar-title,\n.shell-app__bar > ds-bar-page-title {\n display: block;\n}\n\n.shell-app__content {\n grid-area: content;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: none;\n /* Limit reflow to the page column — not on __main (breaks tools flex shrink). */\n contain: layout;\n}\n\n/* Layout scroller, not a control: keep it keyboard-focusable without a page-sized ring. */\n.shell-app__content:focus,\n.shell-app__content:focus-visible {\n outline: none;\n}\n\n/* Opaque page surface — masks the fixed chrome layer in the content column. */\n.shell-app__content {\n position: relative;\n z-index: 1;\n background-color: var(--color-background-primary);\n}\n\n.shell-app__tools {\n grid-area: tools;\n flex: 0 0 auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n display: flex;\n position: relative;\n z-index: 0;\n overflow: hidden;\n /* Chrome surface context inherited by PanelTools and its slotted products. */\n --_shell-tools-border: var(--color-chrome-border-tertiary);\n --_shell-tools-border-secondary: var(--color-chrome-border-secondary);\n --_shell-tools-divider: var(--color-chrome-divider);\n --_shell-tools-background-theme: var(--color-chrome-background-theme);\n --_shell-tools-fg-primary: var(--color-chrome-foreground-primary);\n --_shell-tools-fg-secondary: var(--color-chrome-foreground-secondary);\n}\n\n.shell-app__tools ::slotted(ds-panel-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools ::slotted(ds-shell-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools > ds-shell-tools {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tool-slot-proxy {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.shell-app__content > ds-shell-page {\n display: block;\n min-height: 100%;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__row {\n /* Anchor fixed fullscreen tools to the available stage below the banner. */\n contain: layout;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__main {\n /* Above panel chrome while remaining below the global banner layer. */\n z-index: 3;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__tools {\n /* Fullscreen tools must outrank retained page-owned overlays in content. */\n z-index: 2;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__panel,\n:host(.shell-app--tools-fullscreen) .shell-app__bar,\n:host(.shell-app--tools-fullscreen) .shell-app__content {\n visibility: hidden;\n /* Descendants can override visibility, but must not paint through tools. */\n content-visibility: hidden;\n}\n\n:host(.shell-app--mobile) {\n --_shell-chrome-bg: var(--color-background-primary);\n padding-block-start: env(safe-area-inset-top);\n background: var(--ds-shell-safe-area-background, var(--color-background-primary));\n}\n\n:host(.shell-app--mobile) .shell-app__banner {\n --_shell-banner-edge-display: block;\n}\n\n/* Refresh the Mobile WebKit stage layer without remounting app content. */\n:host(.shell-app--mobile.shell-app--foreground-refresh) .shell-app__main {\n transform: translateZ(0);\n}\n\n:host(.shell-app--mobile) .shell-app__chrome,\n:host(.shell-app--mobile) .shell-app__panel,\n:host(.shell-app--mobile) .shell-app__bar {\n display: none;\n}\n\n:host(.shell-app--mobile) .shell-app__main {\n width: 100%;\n box-sizing: border-box;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr) auto;\n grid-template-areas:\n 'stage'\n 'mobile-bar-nav';\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__content,\n:host(.shell-app--mobile) .shell-app__tools,\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n grid-area: stage;\n min-width: 0;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n:host(.shell-app--mobile) .shell-app__content {\n z-index: 1;\n overflow: auto;\n}\n\n:host(.shell-app--mobile) .shell-app__tools {\n z-index: 2;\n width: 100%;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n display: block;\n z-index: 3;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav {\n grid-area: mobile-bar-nav;\n display: block;\n min-width: 0;\n position: relative;\n z-index: 4;\n}\n\n:host(.shell-app--mobile) .shell-app__tools[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav[hidden] {\n display: none;\n}\n\n:host(.shell-app--mobile-tool-active) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__tools {\n visibility: hidden;\n}\n",
|
|
725
|
+
"content": ":host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n overflow: hidden;\n overscroll-behavior: none;\n font-family: var(--typography-font-family-ui, system-ui);\n --ds-shell-panel-tools-width: var(--dimension-panel-width-xs);\n --ds-shell-gradient-context: flat;\n}\n\n:host {\n /* Shared solid Chrome base; gradient and paper layers composite above it. */\n --_shell-chrome-bg: var(--color-chrome-background-theme);\n}\n\n:host(.shell-app--gradient) {\n --ds-shell-gradient-context: gradient;\n}\n\n.shell-app__row {\n display: flex;\n flex: 1 1 0;\n min-height: 0;\n position: relative;\n}\n\n.shell-app__banner {\n --_shell-banner-edge-display: none;\n flex: 0 0 auto;\n min-width: 0;\n position: relative;\n z-index: 5;\n}\n\n.shell-app__banner ::slotted(ds-banner) {\n display: grid;\n width: 100%;\n}\n\n/*\n * One chrome layer behind the shell row. Wash uses background-attachment: fixed\n * so the pattern is locked to the viewport — panel/tools collapse only changes the\n * transparent window, not the pattern phase. JS sets wash background-size from\n * readShellViewportDimensions(), not the shell element box.\n */\n.shell-app__chrome {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 0;\n overflow: hidden;\n background-color: var(--_shell-chrome-bg);\n}\n\n:host(.shell-app--gradient) .shell-app__chrome::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n background-position: 0 0;\n background-attachment: fixed;\n z-index: 1;\n opacity: var(--ds-shell-gradient-opacity, 1);\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-repeat: no-repeat;\n}\n\n.shell-app__paper-texture {\n z-index: 2;\n}\n\n.shell-app__panel {\n flex: 0 0 auto;\n min-height: 0;\n height: 100%;\n position: relative;\n /* Above main so resize handle line can paint over the workspace edge */\n z-index: 2;\n}\n\n.shell-app__panel ::slotted(ds-panel-nav) {\n display: block;\n height: 100%;\n}\n\n.shell-app__panel > ds-panel-nav {\n display: block;\n height: 100%;\n}\n\n.shell-app__main {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas:\n 'bar tools'\n 'content tools';\n position: relative;\n z-index: 1;\n}\n\n.shell-app__mobile-sheet-nav,\n.shell-app__mobile-bar-nav {\n display: none;\n}\n\n.shell-app__bar {\n grid-area: bar;\n flex: 0 0 auto;\n min-width: 0;\n}\n\n.shell-app__bar ::slotted(ds-bar-nav) {\n display: block;\n}\n\n.shell-app__bar ::slotted(ds-bar-title),\n.shell-app__bar ::slotted(ds-bar-page-title) {\n display: block;\n}\n\n.shell-app__bar > ds-bar-nav {\n display: block;\n}\n\n.shell-app__bar > ds-bar-title,\n.shell-app__bar > ds-bar-page-title {\n display: block;\n}\n\n.shell-app__content {\n grid-area: content;\n /* Full-height pages use this lane, including banner and mobile navigation reflow. */\n container-type: size;\n container-name: ds-shell-content;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: none;\n /* Limit reflow to the page column — not on __main (breaks tools flex shrink). */\n contain: layout;\n}\n\n/* Layout scroller, not a control: keep it keyboard-focusable without a page-sized ring. */\n.shell-app__content:focus,\n.shell-app__content:focus-visible {\n outline: none;\n}\n\n/* Opaque page surface — masks the fixed chrome layer in the content column. */\n.shell-app__content {\n position: relative;\n z-index: 1;\n background-color: var(--color-background-primary);\n}\n\n.shell-app__tools {\n grid-area: tools;\n flex: 0 0 auto;\n min-width: 0;\n min-height: 0;\n height: 100%;\n display: flex;\n position: relative;\n z-index: 0;\n overflow: hidden;\n /* Chrome surface context inherited by PanelTools and its slotted products. */\n --_shell-tools-border: var(--color-chrome-border-tertiary);\n --_shell-tools-border-secondary: var(--color-chrome-border-secondary);\n --_shell-tools-divider: var(--color-chrome-divider);\n --_shell-tools-background-theme: var(--color-chrome-background-theme);\n --_shell-tools-fg-primary: var(--color-chrome-foreground-primary);\n --_shell-tools-fg-secondary: var(--color-chrome-foreground-secondary);\n}\n\n.shell-app__tools ::slotted(ds-panel-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools ::slotted(ds-shell-tools) {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tools > ds-shell-tools {\n display: block;\n height: 100%;\n min-height: 0;\n}\n\n.shell-app__tool-slot-proxy {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.shell-app__content > ds-shell-page {\n --ds-shell-content-block-size: 100cqh;\n display: block;\n min-height: 100%;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__row {\n /* Anchor fixed fullscreen tools to the available stage below the banner. */\n contain: layout;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__main {\n /* Above panel chrome while remaining below the global banner layer. */\n z-index: 3;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__tools {\n /* Fullscreen tools must outrank retained page-owned overlays in content. */\n z-index: 2;\n}\n\n:host(.shell-app--tools-fullscreen) .shell-app__panel,\n:host(.shell-app--tools-fullscreen) .shell-app__bar,\n:host(.shell-app--tools-fullscreen) .shell-app__content {\n visibility: hidden;\n /* Descendants can override visibility, but must not paint through tools. */\n content-visibility: hidden;\n}\n\n:host(.shell-app--mobile) {\n --_shell-chrome-bg: var(--color-background-primary);\n padding-block-start: env(safe-area-inset-top);\n background: var(--ds-shell-safe-area-background, var(--color-background-primary));\n}\n\n:host(.shell-app--mobile) .shell-app__banner {\n --_shell-banner-edge-display: block;\n}\n\n/* Refresh the Mobile WebKit stage layer without remounting app content. */\n:host(.shell-app--mobile.shell-app--foreground-refresh) .shell-app__main {\n transform: translateZ(0);\n}\n\n:host(.shell-app--mobile) .shell-app__chrome,\n:host(.shell-app--mobile) .shell-app__panel,\n:host(.shell-app--mobile) .shell-app__bar {\n display: none;\n}\n\n:host(.shell-app--mobile) .shell-app__main {\n width: 100%;\n box-sizing: border-box;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr) auto;\n grid-template-areas:\n 'stage'\n 'mobile-bar-nav';\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__content,\n:host(.shell-app--mobile) .shell-app__tools,\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n grid-area: stage;\n min-width: 0;\n min-height: 0;\n height: 100%;\n position: relative;\n}\n\n:host(.shell-app--mobile) .shell-app__content {\n z-index: 1;\n overflow: auto;\n}\n\n:host(.shell-app--mobile) .shell-app__tools {\n z-index: 2;\n width: 100%;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav {\n display: block;\n z-index: 3;\n overflow: hidden;\n background: var(--color-background-primary);\n}\n\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav {\n grid-area: mobile-bar-nav;\n display: block;\n min-width: 0;\n position: relative;\n z-index: 4;\n}\n\n:host(.shell-app--mobile) .shell-app__tools[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-sheet-nav[hidden],\n:host(.shell-app--mobile) .shell-app__mobile-bar-nav[hidden] {\n display: none;\n}\n\n:host(.shell-app--mobile-tool-active) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__content,\n:host(.shell-app--mobile-sheet-nav-open) .shell-app__tools {\n visibility: hidden;\n}\n",
|
|
725
726
|
"type": "registry:ui"
|
|
726
727
|
},
|
|
727
728
|
{
|