Design de produto empresarial · Novo recurso

Sistema de design Morningstar.

Crie uma interface de pesquisa em que os números se alinham, as cores dos recursos mantêm seu significado e a tipografia permanece legível. Explore as constantes do MDS, a adoção do Vue 3, a transição do Morningstar Intrinsic e um caderno fictício de alocação com opções de ordenação.

Guia OpenDesign7 capítulos37 entradas de referênciaGuia de aplicação original
01

Prévia da interface sistema de design Morningstar

Alterne entre dois modelos de alocação originais e ordene as porcentagens, mantendo as cores associadas às classes de ativos.

Caderno fictício de alocaçãoAbrir exemplo completo
Interpretação nativa e offline de HTML, com cores de alocação históricas do MDS citadas e fonte do sistema. Sem runtime Vue do MDS, classificações proprietárias ou dados de investimento em tempo real. · Referência de implementação
02

Referência de design sistema de design Morningstar

Adoção atual do Vue 3 e orientações do Intrinsic de 2025, com referências a constantes públicas explicitamente identificadas por versão. Os valores numéricos antigos da v2.37 são apenas referências históricas, não afirmações sobre o pacote atual do Vue 3. O exemplo usa as cores históricas de gráficos citadas e seu próprio layout de aplicação.

Limites da adoção atual

Fonte
Nome / RegraValor / ConfiguraçãoUso
UI scope@mdsComponentes com versões individuais.
Chart scope@mceElementos de gráfico com escopo separado.
Vue 3 packages-vue3 suffixUse a geração correspondente da biblioteca.
Registryartifacts.morningstar.com/repository/npm-prod-group/É necessário ter acesso interno.
SassDart Sass / sass packageCompile os estilos de componente fornecidos.
CSS Modules[local]___researchNotebookNamespace de exemplo da aplicação, não um sufixo oficial obrigatório.

Transição para o Intrinsic

Fonte
Nome / RegraValor / ConfiguraçãoUso
TypefaceMorningstar IntrinsicOs recursos aprovados devem ser obtidos separadamente.
WeightsRegular and BoldFamílias de pesos compatíveis atualmente.
Thin / Light / RegularMap to Intrinsic RegularNomes antigos de pesos não indicam a existência de três novos arquivos de fonte.
Bold / HeavyMap to Intrinsic BoldUse o destaque com intenção.
Vue 3 typography@mds/typography-vue3Mixins atualizados.
Legacy monolith / MBCNo Intrinsic updatesNão baseie uma nova integração no monólito antigo.

Cores de texto — snapshot de constantes 3.3.0

Fonte
Nome / RegraValor / ConfiguraçãoUso
$mds-text-color-primary#1e1e1e Texto principal em fundos claros.
$mds-text-color-secondary#5e5e5e Texto de apoio em fundos claros.
$mds-text-color-primary-on-dark#ffffff Texto principal em fundos escuros.
$mds-text-color-secondary-on-dark#ababab Texto de apoio em fundos escuros.
$mds-text-color-interactive-primary#006fba Texto interativo; para links, prefira o mixin de link.
$mds-text-color-error#ca0000 Texto de erro, distinto de um preenchimento de feedback.

Paleta histórica de alocação — v2.37

Fonte
Nome / RegraValor / ConfiguraçãoUso
$mds-visualization-color-asset-allocation-equity#1f55a5 Segmento de gráfico de ações.
$mds-visualization-color-asset-allocation-fixed-income#ef7622 Segmento de gráfico de renda fixa.
$mds-visualization-color-asset-allocation-cash#518428 Segmento de gráfico de caixa.
$mds-visualization-color-asset-allocation-alternative#a50032 Segmento de ativos alternativos.
$mds-visualization-color-asset-allocation-not-classified#e5e5e5 Segmento não classificado; associe-o a um rótulo.

Espaçamento histórico — v2.37

Fonte
Nome / RegraValor / ConfiguraçãoUso
$mds-space-quarter-x2pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-half-x4pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-1-x8pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-1-and-a-half-x12pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-2-x16pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-3-x24pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-4-x32pxConstante histórica; confira o pacote instalado antes de adotá-la.
$mds-space-6-x48pxConstante histórica; confira o pacote instalado antes de adotá-la.

Controles de composição da tabela

Fonte
Nome / RegraValor / ConfiguraçãoUso
row-numbersBoolean on mds-tableForneça o número da linha em mds-tr.
nested-headersNumber of levelsUse os slots mds-thead-group-n.
multiselectionBoolean on mds-tableSepare os estados de seleção total e parcial.
mds-thead.indeterminateBooleanRepresenta uma seleção parcial.
mds-tr.multiselection-labelRow-identifying textIdentifica a caixa de seleção.
mds-pagination-page-changedPagination eventA aplicação fornece a lógica de mudança de página.
03

Guia completo sistema de design Morningstar

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-morningstar.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Sistema de design Morningstar Um caderno de pesquisa baseado em números comparáveis

As tabelas apresentam os valores exatos

O exemplo original mostra dois modelos fictícios de alocação, uma barra empilhada e uma tabela com valores exatos. A faixa visual explica a composição relativa; a tabela continua sendo a referência para a leitura. Cada modelo totaliza 100%, e o modelo selecionado é identificado tanto no título quanto na legenda da tabela.

Com base neste guia de OpenDesign

A ordenação altera a ordem das linhas sem mudar o denominador nem as cores das classes de ativos. O leitor pode passar de uma visão geral da alocação ao percentual exato sem interpretar um ícone proprietário de classificação. Esta é uma interação de pesquisa concreta, não um produto ou recomendação inventados da Morningstar.

Consulte a especificação de apoio

Sistema de design Morningstar As constantes têm funções definidas e limites de versão

Não transforme todo tom de cinza em um token de texto

O MDS diferencia constantes baseadas em função de cores genéricas. O guia de engenharia separa especificamente uma cor de texto de um tom neutro genérico quando o mesmo valor visual é necessário para um elemento não textual. O exemplo Sass fornecido usa a função de leitura para o texto e um tom neutro genérico para uma linha personalizada da tabela.

As tabelas de referência mantêm os limites entre versões: constants 3.3.0 oferece suporte aos valores de texto citados, enquanto o arquivo público da v2.37 contém os valores históricos de alocação e espaçamento. Eles são úteis para ler uma interface existente, mas não comprovam que todas as constantes atuais do Vue 3 tenham a mesma resolução. Inspecione o pacote instalado e autorizado antes de tratar um número arquivado como requisito atual de design.

Consulte a especificação de apoio

Sistema de design Morningstar O Morningstar Intrinsic altera a base de implementação

Duas famílias de pesos, atualizações coordenadas de componentes

O anúncio do Intrinsic de 2025 associa os nomes antigos thin, light e regular à fonte regular, e bold e heavy à fonte bold. Atualizar apenas a declaração de font-family não reproduz essa migração: o anúncio pede atualizações de componentes, incluindo os pacotes de fonte e tipografia.

O monólito antigo morningstar-design-system e o Morningstar Base Charts não recebem atualizações do Intrinsic. Novos exemplos não devem combinar esses caminhos de instalação arquivados com as instruções atuais do Vue 3. O caderno offline usa uma fonte substituta do sistema e não inclui arquivos de fontes proprietárias.

Consulte a especificação de apoio

Sistema de design Morningstar Componha os recursos da tabela explicitamente

Seleção, cabeçalhos aninhados e paginação são responsabilidades distintas

O MDS oferece elementos de tabela para composição, sem obrigar que todas as operações de dados sejam reunidas em uma grade opaca. Os padrões documentados incluem números de linha, slots para cabeçalhos aninhados, seleção múltipla e paginação. A aplicação continua responsável pela transformação dos dados e pelo estado de seleção.

O exemplo funcional fornecido usa intencionalmente uma tabela nativa com estilos baseados em constantes. A referência documentada de composição do MDS continua sendo útil ao migrar para a família de componentes nativos: uma seleção parcial deve aparecer no estado indeterminado do cabeçalho, e cada caixa de seleção de linha precisa de um rótulo de seleção múltipla que identifique a linha.

  • Mantenha os valores percentuais como números até formatá-los para exibição; não ordene strings formatadas.
  • Alinhe à direita os cabeçalhos numéricos, assim como as células correspondentes.
  • Preserve o rótulo do ativo ao ordenar; as posições dos índices não são identificadores estáveis de registros.

Consulte a especificação de apoio

Sistema de design Morningstar As cores dos ativos não são decoração genérica

Mantenha um significado fixo e uma leitura equivalente em texto

A paleta histórica de alocação diferencia ações, renda fixa, caixa, alternativas e ativos não classificados. No exemplo, as três cores relevantes dos ativos permanecem associadas às respectivas classes quando o modelo ou a ordem das linhas muda. As cores não se alternam conforme o segmento que aparece primeiro.

Uma tabela textual repete todos os valores, então o usuário não precisa diferenciar azul, laranja e verde para entender o modelo. O exemplo evita imagens de estrelas, medalhas ou style boxes da Morningstar: a referência oficial de ícones reserva os ícones de propriedade intelectual para seus significados estabelecidos.

Consulte a especificação de apoio

Sistema de design Morningstar Separe a escala histórica do layout da aplicação

Uma área de leitura compacta sem colunas ocultas

O arquivo documenta um intervalo-base de espaçamento de 8 pixels, com incrementos de um quarto e de metade desse valor. O exemplo usa uma sequência contida de 8/16/24/32, inspirada nessa referência histórica. A largura total, a altura das barras empilhadas e o limite para dispositivos móveis são escolhas originais da aplicação, não constantes oficiais inventadas.

A tabela tem apenas três colunas: classe de ativo, percentual e barra comparativa. Em telas estreitas, a barra comparativa em miniatura é removida, enquanto o ativo e o percentual exato permanecem. O seletor de modelo fica acima dos dados e seu rótulo continua visível; não há filtro representado apenas por um ícone sem rótulo.

Consulte a especificação de apoio

Sistema de design Morningstar Adote a geração atual do pacote dentro dos limites de acesso

Configure os ativos reais antes de estilizar um produto

Equipes autorizadas podem usar o registro interno documentado, o sufixo do pacote para Vue 3 e a configuração do Sass. CSS Os módulos isolam os estilos dos componentes, permitindo que diferentes versões coexistam; o exemplo usa um namespace específico do produto. Os ativos de fontes hospedados devem ser configurados antes dos estilos que os utilizam.

A prévia pública não exige nenhum desses acessos. É uma demonstração HTML completa e independente da interação de alocação, com cores históricas respaldadas por fontes e uma alternativa explícita de fonte do sistema. O exemplo separado para Vue é um caminho concreto de adoção baseado em constantes, não uma afirmação de que esta página pode conceder acesso ao registro ou às fontes.

  1. Confirme o acesso aprovado ao registro interno e às fontes e, em seguida, crie a configuração de projeto isolada mostrada acima.
  2. Compile o arquivo de entrada do Sass antes do componente da aplicação e monte o exemplo completo de App.vue.
  3. Alterne o modelo de alocação na prévia, ordene nos dois sentidos e verifique se os rótulos, os valores e o total continuam sincronizados.

Consulte a especificação de apoio

Sistema de design Morningstar Exemplos de componentes do sistema de design

Exemplo interativo completo e independente

Salve o documento completo como index.html e abra-o em um navegador. Interpretação nativa e offline HTML que usa as cores históricas de alocação do MDS citadas e uma fonte do sistema. Não inclui o runtime Vue do MDS, classificações proprietárias nem dados de investimento em tempo real.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Allocation notebook — MDS interpretation</title><style>*{box-sizing:border-box}body{margin:0;background:#fff;color:#1e1e1e;font:16px/1.45 Arial,sans-serif}.app{max-width:1100px;margin:auto;padding:32px}.mast{border-bottom:2px solid #333;display:flex;justify-content:space-between;padding-bottom:16px;gap:16px}.mast b{letter-spacing:.06em}.mast span,.muted{color:#5e5e5e;font-size:13px}h1{font-size:36px;font-weight:400;line-height:1.2;margin:28px 0 10px}.intro{max-width:600px;color:#5e5e5e;margin:0 0 24px}.controls{background:#f2f2f2;display:flex;align-items:center;gap:16px;padding:16px;margin-bottom:24px}select{font:inherit;padding:8px 32px 8px 10px;background:white;border:1px solid #808080;border-radius:2px}button:focus-visible,select:focus-visible{outline:3px solid #006fba;outline-offset:3px}.chart{display:grid;grid-template-columns:1fr 90px;gap:24px;align-items:center;margin:28px 0 32px}.stack{display:flex;height:42px;overflow:hidden}.segment{min-width:0}.total{text-align:right;font-size:30px}.total small{display:block;font-size:11px;color:#5e5e5e}.legend{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;margin-top:12px}.legend i{display:inline-block;width:8px;height:8px;margin-right:6px}table{width:100%;border-collapse:collapse}caption{text-align:left;font-size:20px;padding-bottom:12px}th,td{padding:16px 8px;border-bottom:1px solid #e5e5e5;text-align:left;font-weight:400}thead th{border-top:2px solid #333;border-bottom:1px solid #808080;font-size:13px}.numeric{text-align:right;font-variant-numeric:tabular-nums}.sort{border:0;background:none;color:#006fba;cursor:pointer;padding:0;font:inherit;text-align:right}.spark{width:35%}.track{height:6px;background:#f2f2f2}.fill{height:6px}.status{font-size:12px;min-height:20px;color:#5e5e5e}.foot{margin-top:32px;padding-top:16px;border-top:1px solid #ccc;font-size:12px;color:#5e5e5e}@media(max-width:600px){.app{padding:20px}.mast{flex-direction:column;gap:4px}h1{font-size:30px}.controls{align-items:flex-start;flex-direction:column;gap:8px}.chart{grid-template-columns:1fr 70px;gap:12px}.spark{display:none}.numeric{width:35%}th,td{padding:16px 4px}.legend{gap:10px}}</style><main class="app"><header class="mast"><b>RESEARCH NOTEBOOK</b><span>Independent MDS interpretation</span></header><h1>One model. Every allocation.</h1><p class="intro">Read the mix at a glance, then inspect the exact numbers. These two original models are fictional.</p><div class="controls"><label for="model">Sample model</label><select id="model"><option value="balanced">Balanced sample</option><option value="reserve">Reserve sample</option></select><span class="muted">No market data or investment recommendation</span></div><div class="chart"><div><div class="stack" id="stack" aria-hidden="true"></div><div class="legend"><span><i style="background:#1f55a5"></i>Equity</span><span><i style="background:#ef7622"></i>Fixed income</span><span><i style="background:#518428"></i>Cash</span></div></div><div class="total">100<small>PERCENT TOTAL</small></div></div><table><caption id="caption">Balanced sample allocation</caption><thead><tr><th scope="col">Asset class</th><th scope="col" id="sorthead" class="numeric" aria-sort="descending"><button class="sort" id="sort">Allocation (%) ↓</button></th><th scope="col" class="spark">Share of model</th></tr></thead><tbody id="rows"></tbody></table><p class="status" id="status" role="status">Sorted by allocation, highest first.</p><p class="foot">Historical MDS v2.37 allocation colors; original application layout and system-font fallback. No Morningstar ratings, proprietary font assets or native Vue components are included.</p></main><script>const models={balanced:[55,35,10],reserve:[20,45,35]},assets=[{name:'Equity',color:'#1f55a5'},{name:'Fixed income',color:'#ef7622'},{name:'Cash',color:'#518428'}];let ascending=false;const model=document.querySelector('#model');function render(){const entries=assets.map((a,i)=>({...a,value:models[model.value][i]}));document.querySelector('#stack').innerHTML=entries.map(a=>`<div class="segment" style="width:${a.value}%;background:${a.color}"></div>`).join('');document.querySelector('#caption').textContent=model.selectedOptions[0].textContent+' allocation';document.querySelector('#rows').innerHTML=[...entries].sort((a,b)=>ascending?a.value-b.value:b.value-a.value).map(a=>`<tr><th scope="row">${a.name}</th><td class="numeric">${a.value.toFixed(1)}%</td><td class="spark"><div class="track"><div class="fill" style="width:${a.value}%;background:${a.color}"></div></div></td></tr>`).join('');document.querySelector('#sorthead').setAttribute('aria-sort',ascending?'ascending':'descending');document.querySelector('#sort').textContent='Allocation (%) '+(ascending?'↑':'↓');document.querySelector('#status').textContent='Sorted by allocation, '+(ascending?'lowest first.':'highest first.')}model.onchange=render;document.querySelector('#sort').onclick=()=>{ascending=!ascending;render()};render();</script></html>

Referência de código

  • Os valores de alocação são fictícios. As cores dos ativos mantêm o significado de cada categoria durante a ordenação; este documento não inclui ativos proprietários do Vue do MDS nem fontes Intrinsic.

Uma tabela completa e ordenável com denominador explícito

Uma tabela em Vue 3 usa semântica nativa e a configuração de linguagem visual do MDS apresentada acima. A ordenação preserva os valores numéricos e indica a direção.

vue
<!-- src/App.vue — native table styled with MDS constants, not MdsTable -->
<script setup>
import {computed,ref} from 'vue';
const ascending=ref(false);
const rows=[{name:'Sample Equity',allocation:55},{name:'Sample Bonds',allocation:35},{name:'Sample Cash',allocation:10}];
const sorted=computed(()=>[...rows].sort((a,b)=>ascending.value?a.allocation-b.allocation:b.allocation-a.allocation));
</script>
<template>
 <main><h1>Research notebook</h1><p>Fictional allocation; not an investment recommendation.</p>
 <table><caption>Sample allocation, total 100%</caption><thead><tr><th scope="col">Asset</th><th scope="col" class="numeric" :aria-sort="ascending?'ascending':'descending'"><button type="button" @click="ascending=!ascending">Allocation (%) {{ascending?'↑':'↓'}}</button></th></tr></thead>
 <tbody><tr v-for="row in sorted" :key="row.name"><th scope="row">{{row.name}}</th><td class="numeric">{{row.allocation.toFixed(1)}}%</td></tr></tbody></table>
 <p role="status">Sorted by allocation, {{ascending?'lowest first':'highest first'}}.</p></main>
</template>

Referência de código

  • O MDS permite que as equipes adaptem suas constantes e linguagem visual sem usar seus componentes Vue.
  • Este exemplo não inventa deliberadamente imports de MdsTable nem eventos de ordenação não documentados.
  • A alocação 55/35/10 é fictícia, soma 100 e não representa dados de mercado.

Separe a escala tipográfica do nível semântico do título

O mixin oficial pode estilizar um h1 com escala visual de nível 2 sem alterar seu significado no documento.

scss
@use '@mds/constants-vue3' as *;
@use '@mds/typography-vue3' as *;
h1 { @include mds-level-2-heading($bold:true); color:$mds-text-color-primary; }
p { @include mds-body-text-m(); color:$mds-text-color-primary; }

Referência de código

  • Os mixins tipográficos não definem a cor do texto.
  • Use constantes MCE isoladas para os elementos do gráfico, em vez de presumir que as substituições do MDS se propagam para os gráficos.
04

Sistema de design Morningstar Configuração do AI agent

Ponto de partida para implementação

Configuração de registro restrito para equipes autorizadas. O caminho da fonte deve apontar para arquivos licenciados e realmente hospedados pela aplicação. Combine com o App.vue abaixo. Esta é uma tabela nativa HTML baseada em constantes, não uma afirmação de que os pacotes MDS estão disponíveis publicamente ou de que a compilação nativa foi verificada.

terminal / JavaScript / SCSS
# Authorized Morningstar teams only: project .npmrc
@mds:registry=https://artifacts.morningstar.com/repository/npm-prod-group/
@mce:registry=https://artifacts.morningstar.com/repository/npm-prod-group/

# Within a Vite Vue 3 project with approved registry access
pnpm add @mds/constants-vue3 @mds/typography-vue3 @mds/fonts-vue3
pnpm add -D sass

// vite.config.js
import {defineConfig} from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
  plugins:[vue()],
  css:{modules:{generateScopedName:'[local]___researchNotebook'}}
});

// src/main.js
import {createApp} from 'vue';
import './main.scss';
import App from './App.vue';
createApp(App).mount('#app');

// src/main.scss — host licensed font files at this application path first
@use '@mds/fonts-vue3/scss/config' with ($font-path:'/fonts/morningstar-intrinsic');
@use '@mds/fonts-vue3';
@use '@mds/constants-vue3' as *;
@use '@mds/typography-vue3' as *;
h1 { @include mds-level-2-heading($bold:true); color:$mds-text-color-primary; }
p,td,th { @include mds-body-text-m(); color:$mds-text-color-primary; }
main { margin:$mds-space-4-x; }
table { width:100%;border-collapse:collapse; }
th,td { text-align:left; border-bottom:1px solid $mds-color-neutral-37; }
.numeric { text-align:right;font-variant-numeric:tabular-nums; }
button { font:inherit;cursor:pointer; }

Um prompt para seu projeto

Prompt para agente de IA
Crie um caderno de pesquisa inspirado na Morningstar usando os limites de versão explícitos deste guia. Mantenha os valores exatos de alocação em uma tabela semântica e associe as cores às categorias de ativos correspondentes. Não invente classificações nem use ícones IP como decoração. Use a configuração atual de fontes, constantes e Vue 3 autorizada somente com acesso aprovado; caso contrário, identifique claramente a implementação offline.
05

Sistema de design Morningstar Fontes e escopo

Guia independente OpenDesign. Os exemplos de alocação são fictícios e não constituem aconselhamento financeiro. As constantes numéricas históricas são identificadas pela versão de origem; o acesso atual aos pacotes e às fontes continua sob controle da Morningstar.