API do Dice View

Entrypoints, métodos, requests, resultados, adaptadores e cancelamento.

Este artigo documenta a V2 publicada. Para a prévia atual com física, veja o guia V3. V3 ↗ Licenças ↗

Referência do contrato público de @erpg/dice3dview 2.6.1. O View é uma camada de apresentação; valores e regras vêm do chamador.

Entrypoints

Import Uso
@erpg/dice3dview/external Renderer para aplicação com bundler e Babylon compartilhado
@erpg/dice3dview/adapters Conversores puros, sem renderer gráfico
@erpg/dice3dview/style.css Estilos do canvas
@erpg/dice3dview Build autocontido para compatibilidade e CDN

DiceResultViewer

Membro Contrato Efeito
canvas HTMLCanvasElement Canvas criado no construtor
constructor(options?) ViewerOptions Anexa canvas ao container
init() Promise<this> Inicializa renderer, tema e observação do tamanho; idempotente
display(request) Promise<DisplayResult> Apresenta faces resolvidas; inicializa se necessário
displayTimeline(request) Promise<DisplayTimelineResult> Executa journal semântico validado
clear() void Cancela apresentação e limpa cena
updateOptions(options) Promise<void> Mescla opções compatíveis
resize() void Recalcula palco, piso e paredes
dispose() void Libera recursos e remove canvas; idempotente

Após dispose(), crie outra instância. Uma apresentação nova ou clear() rejeita a Promise anterior com DisplayCancelledError.

display()

type DiceSides = 2 | 4 | 6 | 8 | 10 | 12 | 20 | 100
type DisplayMode = 'kinematic' | 'physics'

interface ResolvedDie {
  id: string
  sides: DiceSides
  value: number
  discarded?: boolean
  theme?: string
  themeColor?: string
}

interface DisplayRequest {
  id: string
  dice: readonly ResolvedDie[]
  seed?: string
  mode?: DisplayMode
}

interface DisplayResult {
  id: string
  dice: readonly ResolvedDie[]
  durationMs: number
}

id e dice não podem ser vazios. value deve ser inteiro finito entre 1 e sides; d2 aceita somente 1 ou 2. O seed padrão é request.id; mode, theme e themeColor usam os defaults do viewer; discarded usa false. ID de dado vazio recebe ${request.id}-die-${index}. O retorno contém clones normalizados e congelados. durationMs inclui inicialização lazy, tema e animação.

display() registra falhas gráficas, de asset ou físicas depois da validação e ainda devolve o resultado normalizado. Não recalcula faces.

displayTimeline()

O request contém id, dice: TimelineDieDefinition[] (cada definição com id, sides, tema e cor opcionais), events: DiceTimelineEvent[], seed? e mode?. Uma definição não contém value; os eventos carregam as faces. O retorno acrescenta eventCount, phaseCount e degraded ao DisplayResult. Falhas durante a execução são propagadas. Consulte Timeline semântica para cada evento.

Adaptadores

@erpg/dice3dview/adapters exporta createSystemDisplayRequest, createMixedDisplayRequest, toSystemResolvedDie, toSystemResolvedDice, toMixedResolvedDice, SYSTEM_THEME_PROFILES, getSystemThemeProfile e isSystemDiceProfileId.

createSystemDisplayRequest({ id, dice, seed?, mode?, keptIds?, themeColors? }) usa o profileId de cada dado para validar lados e aplicar tema/cor. keptIds aceita ID ou sourceDieId; os demais dados ficam descartados. IDs duplicados são rejeitados.

createMixedDisplayRequest({ id, dice, seed?, mode?, unsupportedDice?, theme?, themeColor?, keptIds?, themeColors? }) aceita a lista achatada de rollMixedDice().dice. Usa physicalValue ?? rawValue ?? value. Dados genéricos sem geometria são omitidos por padrão (unsupportedDice: 'omit'); 'error' rejeita. Perfis de sistemas são sempre validados. Se todos os dados forem omitidos, o adaptador rejeita.

Cancelamento

import { isDisplayCancelledError } from '@erpg/dice3dview/external'

try {
  await viewer.display(request)
} catch (error) {
  if (isDisplayCancelledError(error)) return
  throw error
}

Também são exportados DisplayCancelledError e DISPLAY_CANCELLED_CODE ('DISPLAY_CANCELLED'). Use o helper para reconhecer cancelamento inclusive entre bundles.

Veja Configuração para todas as opções e Integre Core e View para exemplos completos.