/**
 * @typedef {Object} GOVBREditorPaginasUserControl
 * @prop {string} IDENTIFICADOR_COMPONENTE
 * @prop {string} URL_CDN
 * @prop {string} VERSAO_JS_COMPONENTE
 * @prop {string} LARGURA_COMPONENTE
 * @prop {string} ALTURA_COMPONENTE
 * @prop {GOVBREditorPaginasUserControlComponente[]} COMPONENTES
 * @prop {GOVBREditorPaginasUserControlCategoria[]} CATEGORIAS
 * @prop {GOVBREditorPaginasUserControlPublicoAlvo[]} PUBLICO_ALVO
 * @prop {GOVBREditorPaginasUserControlTag[]} TAGS
 * @prop {GOVBREditorPaginasUserControlAgenda[]} AGENDAS
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteDadosBase
 * @prop {string} titulo
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteBase
 * @prop {string} id
 * @prop {GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 *
 * @prop {number=} numeroColunas
 * @prop {number=} numeroLinhas
 * @prop {number=} posicaoColuna
 * @prop {number=} posicaoLinha
 *
 * @prop {number=} numeroColunasLd
 * @prop {number=} numeroLinhasLd
 * @prop {number=} posicaoColunaLd
 * @prop {number=} posicaoLinhaLd
 *
 * @prop {number=} numeroColunasMd
 * @prop {number=} numeroLinhasMd
 * @prop {number=} posicaoColunaMd
 * @prop {number=} posicaoLinhaMd
 *
 * @prop {number=} numeroColunasSd
 * @prop {number=} numeroLinhasSd
 * @prop {number=} posicaoColunaSd
 * @prop {number=} posicaoLinhaSd
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteTemaDados
 * @prop {string} corDestaque
 * @prop {string} tituloPagina
 * @prop {string} linkBrasao
 * @prop {string} linkHome
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteTemaSubtype
 * @prop {'tema'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteTemaDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteTemaSubtype} GOVBREditorPaginasUserControlComponenteTema
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteAgendaDados
 * @prop {string[]} agendas
 * @prop {boolean} agendasAgrupadas
 * @prop {string} formato
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteAgendaSubtype
 * @prop {'agenda'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteAgendaDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteAgendaSubtype} GOVBREditorPaginasUserControlComponenteAgenda
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteAvisoDados
 * @prop {string} formato
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteAvisosSubtype
 * @prop {'avisos'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteAvisoDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteAvisosSubtype} GOVBREditorPaginasUserControlComponenteAvisos
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteBannerDadosBanner
 * @prop {string} descricao
 * @prop {string} url
 * @prop {string} href
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteBannerDados
 * @prop {string} estilo
 * @prop {GOVBREditorPaginasUserControlComponenteBannerDadosBanner[]} banners
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteBannerSubtype
 * @prop {'banner'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteBannerDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteBannerSubtype} GOVBREditorPaginasUserControlComponenteBanner
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteConteudoHtmlSubtype
 * @prop {'conteudo-html'} elemento
 * @prop {string=} conteudo
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteConteudoHtmlSubtype} GOVBREditorPaginasUserControlComponenteConteudoHtml
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteConteudoTextualSubtype
 * @prop {'conteudo-textual'} elemento
 * @prop {string=} conteudo
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteConteudoTextualSubtype} GOVBREditorPaginasUserControlComponenteConteudoTextual
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteEnqueteSubtype
 * @prop {'enquete'} elemento
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteEnqueteSubtype} GOVBREditorPaginasUserControlComponenteEnquete
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteImagemDados
 * @prop {string} descricao
 * @prop {string} url
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteImagemSubtype
 * @prop {'imagem'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteImagemDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteImagemSubtype} GOVBREditorPaginasUserControlComponenteImagem
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteLinksDadosLinks
 * @prop {string} link
 * @prop {string} titulo
 * @prop {string} imagem
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteLinksDados
 * @prop {string} formato
 * @prop {GOVBREditorPaginasUserControlComponenteLinksDadosLinks[]} links
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteLinksSubtype
 * @prop {'links'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteLinksDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteLinksSubtype} GOVBREditorPaginasUserControlComponenteLinks
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteMidiasDados
 * @prop {string} tipo
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteMidiasSubtype
 * @prop {'midias'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteMidiasDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteMidiasSubtype} GOVBREditorPaginasUserControlComponenteMidias
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteNoticiasDados
 * @prop {string[]} tags
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteNoticiasSubtype
 * @prop {'noticias'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteNoticiasDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteNoticiasSubtype} GOVBREditorPaginasUserControlComponenteNoticias
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteTempoDados
 * @prop {string} geokey
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteTempoSubtype
 * @prop {'tempo'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteTempoDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteTempoSubtype} GOVBREditorPaginasUserControlComponenteTempo
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteSecretariasDados
 * @prop {string} formato
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteSecretariasSubtype
 * @prop {'secretarias'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteSecretariasDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteSecretariasSubtype} GOVBREditorPaginasUserControlComponenteSecretarias
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteServicosDados
 * @prop {string} formato
 * @prop {string} agrupamentos
 * @prop {string} origem
 * @prop {string[]} categoria
 * @prop {string[]} perfil
 * @prop {string[]} tags
 * @prop {boolean} cartaServicos
 *
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteServicosSubtype
 * @prop {'servicos'} elemento
 * @prop {GOVBREditorPaginasUserControlComponenteServicosDados&GOVBREditorPaginasUserControlComponenteDadosBase=} dados
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteServicosSubtype} GOVBREditorPaginasUserControlComponenteServicos
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlComponenteTextosNormativosSubtype
 * @prop {'textos-normativos'} elemento
 * @typedef {GOVBREditorPaginasUserControlComponenteBase&GOVBREditorPaginasUserControlComponenteTextosNormativosSubtype} GOVBREditorPaginasUserControlComponenteTextosNormativos
 */

/**
 * @typedef {"tema" | "agenda" | "avisos" | "banner" | "conteudo-html" | "conteudo-textual" | "enquete" | "imagem" | "links" | "midias" | "noticias" | "secretarias" | "servicos" | "tempo" | "textos-normativos"} GOVBREditorPaginasListaElementos
 */

/**
 * @typedef {GOVBREditorPaginasUserControlComponenteTema|
 * GOVBREditorPaginasUserControlComponenteAgenda|
 * GOVBREditorPaginasUserControlComponenteAvisos|
 * GOVBREditorPaginasUserControlComponenteBanner|
 * GOVBREditorPaginasUserControlComponenteConteudoHtml|
 * GOVBREditorPaginasUserControlComponenteConteudoTextual|
 * GOVBREditorPaginasUserControlComponenteEnquete|
 * GOVBREditorPaginasUserControlComponenteImagem|
 * GOVBREditorPaginasUserControlComponenteLinks|
 * GOVBREditorPaginasUserControlComponenteMidias|
 * GOVBREditorPaginasUserControlComponenteNoticias|
 * GOVBREditorPaginasUserControlComponenteSecretarias|
 * GOVBREditorPaginasUserControlComponenteServicos|
 * GOVBREditorPaginasUserControlComponenteTempo|
 * GOVBREditorPaginasUserControlComponenteTextosNormativos} GOVBREditorPaginasUserControlComponente
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlCategoria
 * @prop {string} id
 * @prop {string} titulo
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlPublicoAlvo
 * @prop {string} id
 * @prop {string} nome
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlTag
 * @prop {string} id
 * @prop {string} nome
 */

/**
 * @typedef {Object} GOVBREditorPaginasUserControlAgenda
 * @prop {string} id
 * @prop {string} nome
 * @prop {string} icone
 */
