@documental-xyz/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +424 -0
- package/integration.ts +113 -0
- package/package.json +83 -0
- package/src/admin/admin.astro +29 -0
- package/src/assets/scripts/App.js +70 -0
- package/src/assets/scripts/EnteringAnimations.js +34 -0
- package/src/assets/scripts/MapBoxHandler.js +680 -0
- package/src/assets/scripts/ScrollProgressionBar.js +24 -0
- package/src/assets/scripts/utils/ScrollObserver.js +166 -0
- package/src/assets/styles/config/_breakpoints.scss +37 -0
- package/src/assets/styles/config/_colors.scss +8 -0
- package/src/assets/styles/config/_config.scss +5 -0
- package/src/assets/styles/config/_functions.scss +90 -0
- package/src/assets/styles/config/_grrr.configs.scss +7 -0
- package/src/assets/styles/config/_mixins.scss +207 -0
- package/src/assets/styles/config/_type.scss +175 -0
- package/src/assets/styles/config/_vars.scss +16 -0
- package/src/assets/styles/globals/_content.scss +47 -0
- package/src/assets/styles/globals/_grrr.scss +18 -0
- package/src/assets/styles/globals/_html.scss +25 -0
- package/src/assets/styles/globals/_lists.scss +19 -0
- package/src/assets/styles/globals/_map-anchors.scss +32 -0
- package/src/assets/styles/globals/_reset.scss +240 -0
- package/src/assets/styles/globals/_reveal-animations.scss +104 -0
- package/src/assets/styles/globals/_root.scss +6 -0
- package/src/assets/styles/globals/_scroll-progression-bar.scss +8 -0
- package/src/assets/styles/main.scss +17 -0
- package/src/assets/styles/utils/.gitkeep +0 -0
- package/src/assets/styles/utils/grrr/_grrr.scss +433 -0
- package/src/assets/styles/utils/list-styles/_list-styles.scss +190 -0
- package/src/components/AnimationToggle.astro +19 -0
- package/src/components/BigNumbers.astro +83 -0
- package/src/components/Button.astro +49 -0
- package/src/components/Caption.astro +15 -0
- package/src/components/Card.astro +68 -0
- package/src/components/Cards.astro +66 -0
- package/src/components/CardsCall.astro +125 -0
- package/src/components/ChartBar.astro +217 -0
- package/src/components/ChartPercentage.astro +137 -0
- package/src/components/Column.astro +54 -0
- package/src/components/ColumnSticky.astro +129 -0
- package/src/components/Columns.astro +139 -0
- package/src/components/Compare.astro +266 -0
- package/src/components/Cta.astro +242 -0
- package/src/components/Gallery.astro +594 -0
- package/src/components/Group.astro +140 -0
- package/src/components/HtmlEmbed.astro +98 -0
- package/src/components/ImageBlock.astro +134 -0
- package/src/components/InnerColumns.astro +54 -0
- package/src/components/LogosGroup.astro +102 -0
- package/src/components/Map.astro +321 -0
- package/src/components/MapBox.astro +96 -0
- package/src/components/MapView.astro +30 -0
- package/src/components/Menu.astro +278 -0
- package/src/components/Pullquote.astro +46 -0
- package/src/components/Slider.astro +223 -0
- package/src/components/Spacer.astro +25 -0
- package/src/components/Text.astro +173 -0
- package/src/components/TextPlaceholder.astro +98 -0
- package/src/components/Timeline.astro +73 -0
- package/src/components/TimelineBullet.astro +67 -0
- package/src/components/VideoEmbed.astro +99 -0
- package/src/content/loader.ts +29 -0
- package/src/content/pages/alter-ameacada.md +80 -0
- package/src/content/pages/expulsions.md +1447 -0
- package/src/content/pages/home.md +346 -0
- package/src/content/pages/nhanderekoa-studio-autonoma.md +3113 -0
- package/src/content/pages/nhanderekoa-terra-ind/303/255gena-jaragu/303/241.md +3806 -0
- package/src/content/pages/nova-landing-page.md +546 -0
- package/src/content/pages/territ/303/263rios-de-exce/303/247/303/243o.md +2199 -0
- package/src/content/pages/teste-alter-do-chao.md +955 -0
- package/src/content/pages/teste-layout.md +1484 -0
- package/src/content/pages/thiago.md +93 -0
- package/src/content/schema/blog.ts +11 -0
- package/src/content/schema/geostorys.ts +13 -0
- package/src/content/schema/index.ts +3 -0
- package/src/content/schema/pages.ts +494 -0
- package/src/content.config.ts +49 -0
- package/src/env.d.ts +1 -0
- package/src/integration/override-aliases.ts +67 -0
- package/src/layouts/components/ButtonLayout.astro +8 -0
- package/src/layouts/components/CardLayout.astro +8 -0
- package/src/layouts/components/CardsCallLayout.astro +26 -0
- package/src/layouts/components/CardsLayout.astro +14 -0
- package/src/layouts/components/ChartBarLayout.astro +21 -0
- package/src/layouts/components/ChartPercentageLayout.astro +17 -0
- package/src/layouts/components/ColumnLayout.astro +11 -0
- package/src/layouts/components/ColumnStickyLayout.astro +10 -0
- package/src/layouts/components/ColumnsLayout.astro +13 -0
- package/src/layouts/components/CompareLayout.astro +22 -0
- package/src/layouts/components/CtaLayout.astro +91 -0
- package/src/layouts/components/GalleryLayout.astro +24 -0
- package/src/layouts/components/GroupLayout.astro +53 -0
- package/src/layouts/components/HtmlEmbedLayout.astro +18 -0
- package/src/layouts/components/ImageBlockLayout.astro +20 -0
- package/src/layouts/components/InnerColumnsLayout.astro +14 -0
- package/src/layouts/components/LogosGroupLayout.astro +22 -0
- package/src/layouts/components/MapLayout.astro +41 -0
- package/src/layouts/components/MapViewLayout.astro +8 -0
- package/src/layouts/components/MapboxLayout.astro +248 -0
- package/src/layouts/components/PullquoteLayout.astro +13 -0
- package/src/layouts/components/SliderLayout.astro +18 -0
- package/src/layouts/components/SpacerLayout.astro +8 -0
- package/src/layouts/components/TextLayout.astro +17 -0
- package/src/layouts/components/TextPlaceholderLayout.astro +7 -0
- package/src/layouts/components/TimelineBulletLayout.astro +14 -0
- package/src/layouts/components/TimelineLayout.astro +10 -0
- package/src/layouts/components/VideoEmbedLayout.astro +28 -0
- package/src/layouts/pages/Layout.astro +90 -0
- package/src/layouts/pages/PageLayout.astro +200 -0
- package/src/lib/collections.ts +1 -0
- package/src/routes/[slug].astro +17 -0
- package/src/routes/index.astro +5 -0
- package/src/vite/yaml-merge-plugin.ts +234 -0
package/README.md
ADDED
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
# Documental 2.0
|
|
2
|
+
|
|
3
|
+
### Plataforma open-source para criação de sites estáticos focados em geo-narrativas e documentação de direitos humanos
|
|
4
|
+
|
|
5
|
+
[](https://github.com/thiagopaixao/documentalxyz/generate)
|
|
6
|
+
[](https://gitpod.io/#https://github.com/thiagopaixao/documentalxyz)
|
|
7
|
+
[](https://stackblitz.com/github/thiagopaixao/documentalxyz)
|
|
8
|
+
[](https://deploy.workers.cloudflare.com/?url=https://github.com/thiagopaixao/documentalxyz)
|
|
9
|
+
|
|
10
|
+
## 🚀 Tecnologias
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+

|
|
14
|
+

|
|
15
|
+

|
|
16
|
+

|
|
17
|
+

|
|
18
|
+

|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
## 📖 Sobre o Projeto
|
|
22
|
+
|
|
23
|
+
**Documental 2.0** é uma plataforma open-source para criação de sites estáticos com foco em geo-narrativas para denúncias de violações de direitos humanos. Desenvolvida com tecnologias modernas como Astro e Sveltia CMS, oferece uma solução completa para organizações, jornalistas e ativistas criarem narrativas visuais impactantes com mapas interativos, componentes modulares e sistema de gerenciamento de conteúdo intuitivo. É a base tecnológica do portal Documenta.xyz.
|
|
24
|
+
|
|
25
|
+
### Motivação
|
|
26
|
+
|
|
27
|
+
O projeto nasceu da necessidade de democratizar a criação de narrativas digitais que combinam dados geográficos com storytelling para documentar violações de direitos humanos. Muitas organizações e jornalistas independentes enfrentam barreiras técnicas para criar sites que apresentem suas investigações de forma visualmente impactante e geograficamente contextualizada.
|
|
28
|
+
|
|
29
|
+
A plataforma resolve esse problema oferecendo uma solução técnica robusta, mas acessível, que permite a criação de sites estáticos de alta performance sem necessidade de conhecimento técnico avançado. O sistema de componentes modulares facilita a construção de narrativas complexas, enquanto a integração com MapBox possibilita a criação de mapas interativos sofisticados.
|
|
30
|
+
|
|
31
|
+
O diferencial está na especialização para geo-narrativas de direitos humanos, oferecendo componentes específicos como linhas do tempo, gráficos de dados, galerias de evidências, comparadores de imagens e mapas com layers customizáveis. Tudo isso mantendo os princípios de código aberto, performance otimizada e facilidade de deploy em plataformas gratuitas como GitHub Pages e Cloudflare Pages.
|
|
32
|
+
|
|
33
|
+
## ✨ Principais Funcionalidades
|
|
34
|
+
|
|
35
|
+
- 🗺️ **Mapas Interativos Avançados** - Integração completa com MapBox, layers customizáveis e filtros dinâmicos
|
|
36
|
+
- 🎨 **30+ Componentes Modulares** - Timeline, gráficos, galerias, comparadores, cards e muito mais
|
|
37
|
+
- 📝 **CMS Visual Integrado** - Sveltia CMS para edição de conteúdo sem necessidade de código
|
|
38
|
+
- 🎭 **Sistema de Temas Dinâmico** - Customização completa de cores, fontes e espaçamentos
|
|
39
|
+
- 🌐 **Multilíngue Nativo** - Suporte a português, inglês e espanhol
|
|
40
|
+
- ⚡ **Performance Otimizada** - Sites estáticos ultra-rápidos com Astro
|
|
41
|
+
- 📱 **Totalmente Responsivo** - Adaptação perfeita para todos os dispositivos
|
|
42
|
+
- 🎬 **Sistema de Animações** - Animações suaves e interações avançadas
|
|
43
|
+
- 🔧 **Altamente Customizável** - Configuração flexível para diferentes tipos de narrativa
|
|
44
|
+
|
|
45
|
+
## 🏗️ Arquitetura (JAMStack)
|
|
46
|
+
|
|
47
|
+
O Documental 2.0 segue a arquitetura **JAMStack** (JavaScript, APIs, Markup) para máxima performance e segurança:
|
|
48
|
+
|
|
49
|
+
- **JavaScript**: Astro como framework principal com componentes Svelte para interatividade
|
|
50
|
+
- **APIs**: Integração com MapBox API para mapas e Sveltia CMS para gerenciamento de conteúdo
|
|
51
|
+
- **Markup**: Geração de sites estáticos otimizados com carregamento ultra-rápido
|
|
52
|
+
|
|
53
|
+
### Estrutura do Projeto
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
src/
|
|
57
|
+
├── components/ # 30+ componentes reutilizáveis
|
|
58
|
+
├── layouts/ # Layouts para páginas e componentes
|
|
59
|
+
├── content/ # Conteúdo gerenciado pelo CMS
|
|
60
|
+
├── assets/ # Estilos SCSS e scripts
|
|
61
|
+
└── pages/ # Páginas dinâmicas
|
|
62
|
+
|
|
63
|
+
public/
|
|
64
|
+
├── admin/ # Configuração do Sveltia CMS
|
|
65
|
+
└── uploads/ # Arquivos de mídia
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 🎯 Diferenciais e Aplicações
|
|
69
|
+
|
|
70
|
+
### Diferenciais Únicos
|
|
71
|
+
- **Especialização em Direitos Humanos** - Componentes e workflows otimizados para documentação de violações
|
|
72
|
+
- **Geo-narrativas Avançadas** - Sistema completo para storytelling baseado em localização
|
|
73
|
+
- **Zero Configuração** - Deploy imediato em plataformas gratuitas
|
|
74
|
+
- **CMS Visual Poderoso** - Edição intuitiva sem conhecimento técnico
|
|
75
|
+
- **Performance Excepcional** - Sites que carregam em menos de 2 segundos
|
|
76
|
+
|
|
77
|
+
### Aplicações Práticas
|
|
78
|
+
- 📰 **Jornalismo Investigativo** - Reportagens com mapas e dados interativos
|
|
79
|
+
- 🏛️ **ONGs e Organizações** - Relatórios de impacto e campanhas de conscientização
|
|
80
|
+
- 🎓 **Pesquisa Acadêmica** - Apresentação de estudos com visualizações geográficas
|
|
81
|
+
- 🌍 **Ativismo Digital** - Campanhas de denúncia e mobilização social
|
|
82
|
+
- 📊 **Transparência Pública** - Dashboards de dados governamentais e sociais
|
|
83
|
+
|
|
84
|
+
## 🚀 Como Usar e Publicar
|
|
85
|
+
|
|
86
|
+
### Via GitHub Pages
|
|
87
|
+
1. Use este repositório como template
|
|
88
|
+
2. Configure o GitHub Pages nas configurações do repositório
|
|
89
|
+
3. Seus sites serão publicados automaticamente em `https://seuusuario.github.io/seurepositorio`
|
|
90
|
+
|
|
91
|
+
### Via Cloudflare Pages
|
|
92
|
+
1. Conecte seu repositório ao Cloudflare Pages
|
|
93
|
+
2. Configure o build command: `npm run build`
|
|
94
|
+
3. Diretório de output: `dist`
|
|
95
|
+
4. Deploy automático a cada commit
|
|
96
|
+
|
|
97
|
+
### Deploy Manual
|
|
98
|
+
```bash
|
|
99
|
+
npm run build
|
|
100
|
+
# Upload da pasta 'dist' para qualquer servidor web
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 💻 Desenvolvimento
|
|
104
|
+
|
|
105
|
+
### Via Gitpod (Recomendado)
|
|
106
|
+
[](https://gitpod.io/#https://github.com/thiagopaixao/documentalxyz)
|
|
107
|
+
|
|
108
|
+
Ambiente de desenvolvimento completo no navegador, sem necessidade de instalação local.
|
|
109
|
+
|
|
110
|
+
### Via StackBlitz
|
|
111
|
+
[](https://stackblitz.com/github/thiagopaixao/documentalxyz)
|
|
112
|
+
|
|
113
|
+
Editor online com preview em tempo real.
|
|
114
|
+
|
|
115
|
+
### Desenvolvimento Local
|
|
116
|
+
|
|
117
|
+
#### Pré-requisitos
|
|
118
|
+
- Node.js 18+
|
|
119
|
+
- npm ou yarn
|
|
120
|
+
|
|
121
|
+
#### Instalação
|
|
122
|
+
```bash
|
|
123
|
+
# Clone o repositório
|
|
124
|
+
git clone https://github.com/thiagopaixao/documentalxyz.git
|
|
125
|
+
cd documentalxyz
|
|
126
|
+
|
|
127
|
+
# Instale as dependências
|
|
128
|
+
npm install
|
|
129
|
+
|
|
130
|
+
# Rode os scripts de geração
|
|
131
|
+
npm run build
|
|
132
|
+
|
|
133
|
+
# Inicie o servidor de desenvolvimento
|
|
134
|
+
npm run dev
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### Comandos Disponíveis
|
|
138
|
+
|
|
139
|
+
| Comando | Ação |
|
|
140
|
+
|---------|------|
|
|
141
|
+
| `npm install` | Instala as dependências |
|
|
142
|
+
| `npm run dev` | Inicia servidor local em `localhost:4321` |
|
|
143
|
+
| `npm run build` | Gera build de produção em `./dist/` |
|
|
144
|
+
| `npm run preview` | Preview local do build de produção |
|
|
145
|
+
| `npm run serve` | Serve o build em `localhost:3000` |
|
|
146
|
+
|
|
147
|
+
### Configuração do CMS
|
|
148
|
+
1. Acesse `/admin` ou `/admin/install.html` no seu site local
|
|
149
|
+
2. Configure a autenticação GitHub nas configurações do Sveltia
|
|
150
|
+
3. Edite o conteúdo através da interface visual
|
|
151
|
+
|
|
152
|
+
## 🎨 Componentes Disponíveis
|
|
153
|
+
|
|
154
|
+
### Componentes de Conteúdo
|
|
155
|
+
- **Text** - Textos formatados com Markdown
|
|
156
|
+
- **ImageBlock** - Imagens com legendas
|
|
157
|
+
- **VideoEmbed** - Vídeos do YouTube/Vimeo
|
|
158
|
+
- **HtmlEmbed** - Código HTML customizado
|
|
159
|
+
- **Pullquote** - Citações destacadas
|
|
160
|
+
|
|
161
|
+
### Componentes de Layout
|
|
162
|
+
- **Columns** - Layouts em colunas responsivas
|
|
163
|
+
- **Group** - Agrupamento de componentes com temas
|
|
164
|
+
- **ColumnSticky** - Conteúdo fixo durante scroll
|
|
165
|
+
- **Spacer** - Espaçamentos customizáveis
|
|
166
|
+
|
|
167
|
+
### Componentes de Dados
|
|
168
|
+
- **ChartBar** - Gráficos de barras
|
|
169
|
+
- **ChartPercentage** - Gráficos de pizza
|
|
170
|
+
- **BigNumbers** - Números destacados
|
|
171
|
+
- **Timeline** - Linhas do tempo interativas
|
|
172
|
+
|
|
173
|
+
### Componentes Interativos
|
|
174
|
+
- **Gallery** - Galerias de imagens
|
|
175
|
+
- **Slider** - Carrosséis de conteúdo
|
|
176
|
+
- **Compare** - Comparador de imagens
|
|
177
|
+
- **Cards** - Cards informativos
|
|
178
|
+
- **CardsCall** - Cards com call-to-action
|
|
179
|
+
|
|
180
|
+
### Componentes de Mapa
|
|
181
|
+
- **Map** - Container principal de mapas
|
|
182
|
+
- **MapBox** - Configuração do MapBox
|
|
183
|
+
- **MapView** - Views específicas do mapa
|
|
184
|
+
|
|
185
|
+
## 📋 Changelog
|
|
186
|
+
|
|
187
|
+
### v0.1.0 - Setup Inicial
|
|
188
|
+
- ✨ Configuração inicial do Astro
|
|
189
|
+
- ✨ Estrutura básica de componentes
|
|
190
|
+
- ✨ Workflow do GitHub Actions
|
|
191
|
+
- 🔧 Configurações de build e desenvolvimento
|
|
192
|
+
|
|
193
|
+
### v0.1.1 - Ajustes Iniciais
|
|
194
|
+
- 🐛 Correção na importação do App.js
|
|
195
|
+
- 🎨 Ajuste nas fontes padrão do conteúdo
|
|
196
|
+
- 🔧 Melhorias na configuração inicial
|
|
197
|
+
|
|
198
|
+
### v0.2.0 - Integração Sveltia CMS
|
|
199
|
+
- ✨ Instalação e configuração do Sveltia CMS
|
|
200
|
+
- ✨ Implementação de widgets personalizados
|
|
201
|
+
- ✨ Layouts para componentes
|
|
202
|
+
- ✨ Sistema de gerenciamento de conteúdo
|
|
203
|
+
- 📝 Configuração de collections e campos
|
|
204
|
+
|
|
205
|
+
### v0.2.1 - Correções Sveltia
|
|
206
|
+
- 🐛 Correção de erro com imagens externas
|
|
207
|
+
- 🔧 Remoção de seções desnecessárias
|
|
208
|
+
- 🔧 Desabilitação do preview no Sveltia
|
|
209
|
+
- 🎨 Ajustes na interface do CMS
|
|
210
|
+
|
|
211
|
+
### v0.2.2 - Melhorias CMS
|
|
212
|
+
- 🔧 Ajuste nos parâmetros de seleção de imagens
|
|
213
|
+
- 🔧 Implementação de roteamento dinâmico
|
|
214
|
+
- 📝 Criação de conteúdo exemplo para home page
|
|
215
|
+
|
|
216
|
+
### v0.3.0 - Integração MapBox
|
|
217
|
+
- ✨ Implementação da API MapBox
|
|
218
|
+
- ✨ Componentes Map, MapBox e MapView
|
|
219
|
+
- ✨ Sistema básico de layers e filtros
|
|
220
|
+
- ✨ Configuração do Sveltia para mapas
|
|
221
|
+
- 🗺️ Suporte a geo-narrativas interativas
|
|
222
|
+
|
|
223
|
+
### v0.3.1 - Correções MapBox
|
|
224
|
+
- 🐛 Correção nos campos latitude e longitude
|
|
225
|
+
- 🐛 Ajuste na verificação de valores de array
|
|
226
|
+
- 🐛 Correção de erro undefined em valores nulos
|
|
227
|
+
- 🔧 Melhor tratamento de dados geográficos
|
|
228
|
+
|
|
229
|
+
### v0.3.2 - Filtros Avançados
|
|
230
|
+
- ✨ Novos filtros para Map Views
|
|
231
|
+
- ✨ Suporte a números float no MapBox
|
|
232
|
+
- 🔧 Reorganização dos campos do MapBox
|
|
233
|
+
- ⚡ Melhorias de performance nos mapas
|
|
234
|
+
|
|
235
|
+
### v0.3.3 - Otimizações MapBox
|
|
236
|
+
- 🐛 Correções na performance do MapBox
|
|
237
|
+
- 🔧 Melhor organização dos campos por prioridade
|
|
238
|
+
- 📱 Ajustes para dispositivos móveis
|
|
239
|
+
- 🎨 Melhorias na interface de configuração
|
|
240
|
+
|
|
241
|
+
### v0.4.0 - Componentes Avançados
|
|
242
|
+
- ✨ Componente Timeline interativo
|
|
243
|
+
- ✨ Gráficos de barras e percentuais
|
|
244
|
+
- ✨ Sistema de galeria de imagens
|
|
245
|
+
- ✨ Componente de comparação de imagens
|
|
246
|
+
- ✨ Cards e elementos informativos
|
|
247
|
+
|
|
248
|
+
### v0.4.1 - Correções Timeline
|
|
249
|
+
- 🐛 Correção na altura da linha vertical do timeline
|
|
250
|
+
- 🔧 Ajustes responsivos no timeline
|
|
251
|
+
- 🎨 Melhorias visuais nos bullets
|
|
252
|
+
|
|
253
|
+
### v0.4.2 - Ajustes Gráficos
|
|
254
|
+
- 🐛 Correção no cálculo de percentuais nos gráficos
|
|
255
|
+
- 🔧 Remoção de valores padrão desnecessários
|
|
256
|
+
- 🎨 Melhorias nas cores dos gráficos
|
|
257
|
+
|
|
258
|
+
### v0.5.0 - Sistema de Animações
|
|
259
|
+
- ✨ Implementação de animações de revelação
|
|
260
|
+
- ✨ ScrollObserver para interações
|
|
261
|
+
- ✨ Animações customizadas por componente
|
|
262
|
+
- ✨ Barra de progresso de scroll
|
|
263
|
+
- 🎬 Sistema completo de animações suaves
|
|
264
|
+
|
|
265
|
+
### v0.5.1 - Correções Animações
|
|
266
|
+
- 🐛 Correção nas animações de revelação da galeria
|
|
267
|
+
- 🔧 Ajustes no sistema de scroll
|
|
268
|
+
- ⚡ Otimizações de performance nas animações
|
|
269
|
+
|
|
270
|
+
### v0.5.2 - Melhorias ScrollObserver
|
|
271
|
+
- 🔧 Refatoração do ScrollObserver
|
|
272
|
+
- 🔧 Melhor detecção de elementos móveis
|
|
273
|
+
- 🔧 Padronização de labels e variáveis
|
|
274
|
+
|
|
275
|
+
### v0.6.0 - Temas e Multilíngue
|
|
276
|
+
- ✨ Sistema de customização de temas
|
|
277
|
+
- ✨ Suporte a múltiplos idiomas (PT, EN, ES)
|
|
278
|
+
- ✨ Customização de cores por página
|
|
279
|
+
- ✨ Fontes personalizáveis via Google Fonts
|
|
280
|
+
- 🎨 Sistema completo de identidade visual
|
|
281
|
+
|
|
282
|
+
### v0.6.1 - Correções Temas
|
|
283
|
+
- 🐛 Correção na implementação de fontes customizadas
|
|
284
|
+
- 🔧 Ajustes nas cores auxiliares
|
|
285
|
+
- 🎨 Melhorias na aplicação de temas
|
|
286
|
+
|
|
287
|
+
### v0.6.2 - Ajustes Visuais
|
|
288
|
+
- 🔧 Correção na implementação de cores auxiliares
|
|
289
|
+
- 🔧 Ajustes nos blocos de cards
|
|
290
|
+
- 🎨 Melhorias gerais na interface
|
|
291
|
+
|
|
292
|
+
### v0.7.0 - Otimizações Mobile
|
|
293
|
+
- ✨ Parâmetros específicos para mobile no MapBox
|
|
294
|
+
- ✨ Melhorias responsivas em todos os componentes
|
|
295
|
+
- 📱 Otimizações para dispositivos móveis
|
|
296
|
+
- ⚡ Melhorias gerais de performance
|
|
297
|
+
|
|
298
|
+
### v0.7.1 - Correções Mobile
|
|
299
|
+
- 🐛 Correção nos parâmetros mobile do MapBox
|
|
300
|
+
- 📱 Ajustes nas legendas mobile
|
|
301
|
+
- 🔧 Melhor tratamento de floating text
|
|
302
|
+
|
|
303
|
+
### v0.7.2 - Ajustes Responsivos
|
|
304
|
+
- 🔧 Testes e ajustes em componentes
|
|
305
|
+
- 🔧 Melhorias na estrutura de arquivos
|
|
306
|
+
- 📱 Otimizações responsivas adicionais
|
|
307
|
+
|
|
308
|
+
### v0.8.0 - MapBox Avançado
|
|
309
|
+
- ✨ Sistema avançado de layers e filtros
|
|
310
|
+
- ✨ Melhor organização dos campos do MapBox
|
|
311
|
+
- ✨ Novos widgets para configuração
|
|
312
|
+
- 🗺️ Recursos avançados de geo-narrativa
|
|
313
|
+
- ⚡ Otimizações significativas de performance
|
|
314
|
+
|
|
315
|
+
### v0.8.1 - Correções Layers
|
|
316
|
+
- 🐛 Correção nos filtros de layers
|
|
317
|
+
- 🔧 Melhorias na aplicação de filtros
|
|
318
|
+
- 🔧 Ajustes nos campos do MapBox para melhor organização
|
|
319
|
+
|
|
320
|
+
### v0.8.2 - Otimizações Finais MapBox
|
|
321
|
+
- 🔧 Organização final dos campos do MapBox
|
|
322
|
+
- ⚡ Melhorias de performance significativas
|
|
323
|
+
- 🔧 Ajustes para melhor experiência no Sveltia
|
|
324
|
+
|
|
325
|
+
### v0.9.0 - Preparação Produção
|
|
326
|
+
- ✨ Sistema de ativação/desativação de animações
|
|
327
|
+
- ✨ Melhorias finais na interface
|
|
328
|
+
- ✨ Implementação de ícones customizáveis
|
|
329
|
+
- 📝 Documentação completa
|
|
330
|
+
- 🔧 Otimizações finais para produção
|
|
331
|
+
|
|
332
|
+
### v0.9.1 - Ajustes Finais
|
|
333
|
+
- 🔧 Atualização de conteúdo
|
|
334
|
+
- 🐛 Correções em campos mobile e legendas
|
|
335
|
+
- 🔧 Remoção acidental do App.js corrigida
|
|
336
|
+
|
|
337
|
+
### v0.9.2 - Release Candidate
|
|
338
|
+
- 🔧 Correções finais de configuração
|
|
339
|
+
- 📝 Atualização final de conteúdo
|
|
340
|
+
- ✅ Preparação para release estável
|
|
341
|
+
|
|
342
|
+
## 🗺️ Roadmap
|
|
343
|
+
|
|
344
|
+
### 🎯 Próximas Versões
|
|
345
|
+
|
|
346
|
+
### v1.0.0 - Versão final estável
|
|
347
|
+
- [ ] Limpeza completa do repositório
|
|
348
|
+
- [ ] Remoção de dependências não utilizadas
|
|
349
|
+
- [ ] Correção de vulnerabilidades de segurança de dependências
|
|
350
|
+
- [ ] Instalação do Sveltia como dependência
|
|
351
|
+
- [ ] Customização de ícones do CMS
|
|
352
|
+
- [ ] Sistema de blog integrado
|
|
353
|
+
- [ ] Worker para MapBox (proteção de token)
|
|
354
|
+
- [ ] MapBox opcional por página
|
|
355
|
+
- [ ] Configuração de não versionamento da pasta public/upload no repositório git
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
### Backlog
|
|
359
|
+
- [ ] Documentação completa em inglês, português e espanhol
|
|
360
|
+
- [ ] Melhorias na experiência de edição
|
|
361
|
+
- [ ] Templates pré-configurados
|
|
362
|
+
- [ ] Tutoriais interativos
|
|
363
|
+
- [ ] Migração para Astro 5
|
|
364
|
+
- [ ] Novos componentes de visualização
|
|
365
|
+
- [ ] Sistema de plugins/módulos
|
|
366
|
+
- [ ] API para integrações externas
|
|
367
|
+
- [ ] Implementação de multilingagem em português, inglẽs e espanhol
|
|
368
|
+
- [ ] Solução completa para edição no StackBlitz
|
|
369
|
+
|
|
370
|
+
### 💡 Ideias Futuras
|
|
371
|
+
- 🤖 Wizard para deploy automático no Cloud Flare ou GitHub Pages
|
|
372
|
+
- 🤖 Integração com IA para geração de conteúdo
|
|
373
|
+
- 📊 Dashboard de analytics integrado
|
|
374
|
+
- 🔐 Sistema de autenticação avançado
|
|
375
|
+
- 🌍 Suporte a mais idiomas
|
|
376
|
+
- 📱 App mobile companion
|
|
377
|
+
|
|
378
|
+
## 👥 Créditos e Colaboradores
|
|
379
|
+
|
|
380
|
+
### Desenvolvimento Principal
|
|
381
|
+
- **Agência Autônoma** - Idealização e gerenciamento do projeto
|
|
382
|
+
- **Thiago Paixão** - Desenvolvimento do backe-end e arquitetura do projeto
|
|
383
|
+
- **Bruno Berken (Studio Atonal)** - Desenvolvimento do front-end e sistema de animações
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
### Organizações Parceiras
|
|
387
|
+
- **MediaLab.UFRJ**
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
### Inspiração e Base
|
|
391
|
+
Baseado no trabalho original do **Documenta.xyz** e nas necessidades reais de organizações de direitos humanos.
|
|
392
|
+
|
|
393
|
+
## Publishing
|
|
394
|
+
|
|
395
|
+
To publish a new version of `@documental-xyz/core` to npm:
|
|
396
|
+
|
|
397
|
+
1. Ensure `NPM_TOKEN` is set in GitHub repository secrets
|
|
398
|
+
2. Update version in `package.json`
|
|
399
|
+
3. Create and push a tag:
|
|
400
|
+
```bash
|
|
401
|
+
git tag v0.1.0
|
|
402
|
+
git push --tags
|
|
403
|
+
```
|
|
404
|
+
3. The `publish.yml` workflow will run tests, build, and publish automatically
|
|
405
|
+
|
|
406
|
+
## 📄 Licença
|
|
407
|
+
|
|
408
|
+
Este projeto está licenciado sob a **GPL 2.0 License** - veja o arquivo [LICENSE](LICENSE) para detalhes.
|
|
409
|
+
|
|
410
|
+
### Uso Comercial
|
|
411
|
+
✅ Permitido uso comercial
|
|
412
|
+
✅ Modificação e distribuição
|
|
413
|
+
✅ Uso privado
|
|
414
|
+
✅ Sem garantias
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
<div align="center">
|
|
419
|
+
|
|
420
|
+
**Documental 2.0** - Democratizando a criação de geo-narrativas para direitos humanos
|
|
421
|
+
|
|
422
|
+
[🌐 Website](https://documental.xyz) • [📧 Contato](mailto:contato@autonoma.xyz)
|
|
423
|
+
|
|
424
|
+
</div>
|
package/integration.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { AstroIntegration } from 'astro';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { createYamlMergePlugin } from './src/vite/yaml-merge-plugin';
|
|
5
|
+
import { overrideAliases } from './src/integration/override-aliases';
|
|
6
|
+
|
|
7
|
+
/** Directory of this module — used to resolve injectRoute entrypoints
|
|
8
|
+
* as absolute paths, which Astro requires. Bare specifiers like
|
|
9
|
+
* `@documental-xyz/core/admin.astro` do NOT resolve when the integration
|
|
10
|
+
* is consumed from the same repo (test harness / self-referencing package).
|
|
11
|
+
* Absolute paths work in both self-referencing and node_modules install. */
|
|
12
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
|
|
14
|
+
export interface CoreOptions {
|
|
15
|
+
/** GitHub repo for Sveltia CMS backend, e.g. 'documental-xyz/starter' */
|
|
16
|
+
repo: string;
|
|
17
|
+
/** Git branch for CMS backend (default 'main') */
|
|
18
|
+
branch?: string;
|
|
19
|
+
/** Sveltia CMS auth worker URL */
|
|
20
|
+
authBaseUrl?: string;
|
|
21
|
+
/** Media folder path (default 'public/uploads') */
|
|
22
|
+
mediaFolder?: string;
|
|
23
|
+
/** Public folder URL prefix (default 'uploads') */
|
|
24
|
+
publicFolder?: string;
|
|
25
|
+
/** Site URL override (fallback: process.env.SITE) */
|
|
26
|
+
site?: string;
|
|
27
|
+
/** Base path override (fallback: process.env.BASE_PATH) */
|
|
28
|
+
basePath?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* `@documental-xyz/core` Astro integration factory.
|
|
33
|
+
*
|
|
34
|
+
* Public entry point: `astro.config.mjs` → `integrations: [core({ repo: 'org/repo' })]`.
|
|
35
|
+
*
|
|
36
|
+
* The `astro:config:setup` hook:
|
|
37
|
+
* 1. injects the `/admin` and `/[slug]` routes via bare specifiers resolved
|
|
38
|
+
* through the package `exports` map (T1 POC, T10 wildcards, T12 admin.astro);
|
|
39
|
+
* 2. injects the global stylesheet on every page via `page-ssr` (T2 POC, T11);
|
|
40
|
+
* 3. updates Vite config with:
|
|
41
|
+
* - the YAML merge plugin (T8) that regenerates `public/admin/config.yml`
|
|
42
|
+
* substituting `${REPO}`, `${BRANCH}`, etc. from integration options;
|
|
43
|
+
* - `resolve.alias` entries that let consumers drop a local `.astro` file
|
|
44
|
+
* in `src/components/` or `src/layouts/` to shadow the core's version
|
|
45
|
+
* (T2 POC finding #3 — exact full subpath with `.astro` extension).
|
|
46
|
+
*
|
|
47
|
+
* The static `src/pages/` route directory MUST NOT exist in the consumer —
|
|
48
|
+
* this integration owns the `/` and `/[slug]` routes via `injectRoute`, and a
|
|
49
|
+
* physical `src/pages/[slug].astro` would create a route conflict. The core
|
|
50
|
+
* keeps its route entrypoints in `src/routes/` (not `src/pages/`) for this
|
|
51
|
+
* reason.
|
|
52
|
+
*/
|
|
53
|
+
export default function core(options: CoreOptions): AstroIntegration {
|
|
54
|
+
if (!options || !options.repo) {
|
|
55
|
+
throw new Error('core(): "repo" option is required (e.g. "org/repo")');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
name: '@documental-xyz/core',
|
|
60
|
+
hooks: {
|
|
61
|
+
'astro:config:setup': ({ injectRoute, injectScript, updateConfig }) => {
|
|
62
|
+
// 1. Inject routes. Entrypoints MUST be absolute paths resolved
|
|
63
|
+
// relative to this module (`__dirname`). Astro 5's route-manifest
|
|
64
|
+
// resolver treats the entrypoint as a file path, and bare specifiers
|
|
65
|
+
// like `@documental-xyz/core/admin.astro` fail when the integration
|
|
66
|
+
// is consumed from the same repo (self-referencing test harness).
|
|
67
|
+
// Absolute paths work for both self-referencing and npm install.
|
|
68
|
+
injectRoute({
|
|
69
|
+
pattern: '/admin',
|
|
70
|
+
entrypoint: path.resolve(__dirname, 'src/admin/admin.astro'),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
injectRoute({
|
|
74
|
+
pattern: '/[slug]',
|
|
75
|
+
entrypoint: path.resolve(__dirname, 'src/routes/[slug].astro'),
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Home page. Injected at `/` so no physical src/pages/ needed.
|
|
79
|
+
injectRoute({
|
|
80
|
+
pattern: '/',
|
|
81
|
+
entrypoint: path.resolve(__dirname, 'src/routes/index.astro'),
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// 2. Global SCSS — compiled by the consumer's `sass` dep at build time.
|
|
85
|
+
// Resolves via T11's `./styles/*` wildcard export.
|
|
86
|
+
injectScript(
|
|
87
|
+
'page-ssr',
|
|
88
|
+
'import "@documental-xyz/core/styles/main.scss"'
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// 3. Update Vite config: YAML merge plugin + override aliases.
|
|
92
|
+
// `updateConfig` deep-merges, so this composes with any other
|
|
93
|
+
// integrations / user vite config cleanly (T2 POC).
|
|
94
|
+
updateConfig({
|
|
95
|
+
vite: {
|
|
96
|
+
plugins: [
|
|
97
|
+
createYamlMergePlugin({
|
|
98
|
+
repo: options.repo,
|
|
99
|
+
branch: options.branch,
|
|
100
|
+
authBaseUrl: options.authBaseUrl,
|
|
101
|
+
mediaFolder: options.mediaFolder,
|
|
102
|
+
publicFolder: options.publicFolder,
|
|
103
|
+
}),
|
|
104
|
+
],
|
|
105
|
+
resolve: {
|
|
106
|
+
alias: overrideAliases(),
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@documental-xyz/core",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "Astro integration for Documental — geo-narrative static sites with Sveltia CMS",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/Documental-xyz/Core"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"astro-component",
|
|
13
|
+
"astro-integration",
|
|
14
|
+
"withastro",
|
|
15
|
+
"sveltia-cms",
|
|
16
|
+
"geo-narratives"
|
|
17
|
+
],
|
|
18
|
+
"main": "./integration.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": "./integration.ts",
|
|
21
|
+
"./integration": "./integration.ts",
|
|
22
|
+
"./loader": "./src/content/loader.ts",
|
|
23
|
+
"./admin.astro": "./src/admin/admin.astro",
|
|
24
|
+
"./pages/*": "./src/routes/*",
|
|
25
|
+
"./components/*": "./src/components/*",
|
|
26
|
+
"./layouts/*": "./src/layouts/*",
|
|
27
|
+
"./styles/*": "./src/assets/styles/*",
|
|
28
|
+
"./scripts/*": "./src/assets/scripts/*",
|
|
29
|
+
"./*": "./*",
|
|
30
|
+
"./node_modules/*": "./node_modules/*",
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"src/",
|
|
35
|
+
"integration.ts",
|
|
36
|
+
"README.md"
|
|
37
|
+
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public",
|
|
40
|
+
"provenance": true
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"dev": "astro dev",
|
|
44
|
+
"start": "astro dev",
|
|
45
|
+
"build": "astro build",
|
|
46
|
+
"preview": "astro preview",
|
|
47
|
+
"astro": "astro",
|
|
48
|
+
"serve": "serve dist -l 3000 --single",
|
|
49
|
+
"test": "vitest run"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"astro-icon": "^0.8.1",
|
|
53
|
+
"gray-matter": "^4.0.3",
|
|
54
|
+
"marked": ">=5.0.2",
|
|
55
|
+
"marked-gfm-heading-id": ">=3.1.2",
|
|
56
|
+
"marked-mangle": ">=1.1.6",
|
|
57
|
+
"sass-embedded": "^1.86.3",
|
|
58
|
+
"sass": "^1.80.5",
|
|
59
|
+
"svelte": ">=4.0.0",
|
|
60
|
+
"swiper": "^11.1.14"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"astro": "^5.0.0"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@playwright/test": "^1.61.1",
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^8.16.0",
|
|
68
|
+
"@typescript-eslint/parser": "^8.16.0",
|
|
69
|
+
"astro-eslint-parser": "^1.1.0",
|
|
70
|
+
"eslint": "^9.16.0",
|
|
71
|
+
"eslint-config-prettier": "^9.1.0",
|
|
72
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
73
|
+
"glob": "^10.3.10",
|
|
74
|
+
"js-yaml": "^4.1.0",
|
|
75
|
+
"prettier": "^3.4.1",
|
|
76
|
+
"serve": "^14.2.4",
|
|
77
|
+
"stylelint": "^16.11.0",
|
|
78
|
+
"stylelint-config-standard": "^36.0.1",
|
|
79
|
+
"vite-plugin-yaml": "^1.0.5",
|
|
80
|
+
"vitest": "^4.1.9",
|
|
81
|
+
"yaml": "^2.6.1"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
// src/admin/admin.astro — Sveltia CMS admin page
|
|
3
|
+
// Injected as the /admin route by `@documental-xyz/core` (see `integration.ts`).
|
|
4
|
+
// The route is wired via `injectRoute({ pattern: '/admin', entrypoint: '@documental-xyz/core/admin.astro' })`.
|
|
5
|
+
// Sveltia CMS is loaded from CDN at build pin `@0.158.1`; bumping is out of scope for T12.
|
|
6
|
+
// At runtime Sveltia fetches `/admin/config.yml` (generated by the Vite YAML-merge plugin from T8).
|
|
7
|
+
---
|
|
8
|
+
<!DOCTYPE html>
|
|
9
|
+
<html>
|
|
10
|
+
<head>
|
|
11
|
+
<meta charset="utf-8" />
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
13
|
+
<title>Content Manager</title>
|
|
14
|
+
|
|
15
|
+
<!-- Patch: force showDirectoryPicker with mode readwrite (needed for Sveltia's local-fs backend) -->
|
|
16
|
+
<script is:inline>
|
|
17
|
+
const _showDirectoryPicker = window.showDirectoryPicker;
|
|
18
|
+
window.showDirectoryPicker = (options = {}) =>
|
|
19
|
+
_showDirectoryPicker.call(window, { ...options, mode: 'readwrite' });
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<!-- Sveltia CMS — loaded from CDN; `is:inline` keeps Vite from trying to bundle a remote URL -->
|
|
23
|
+
<script is:inline src="https://unpkg.com/@sveltia/cms@0.158.1/dist/sveltia-cms.js" defer></script>
|
|
24
|
+
</head>
|
|
25
|
+
|
|
26
|
+
<body>
|
|
27
|
+
<!-- Sveltia CMS injects its UI here at runtime -->
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|