@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.
Files changed (114) hide show
  1. package/README.md +424 -0
  2. package/integration.ts +113 -0
  3. package/package.json +83 -0
  4. package/src/admin/admin.astro +29 -0
  5. package/src/assets/scripts/App.js +70 -0
  6. package/src/assets/scripts/EnteringAnimations.js +34 -0
  7. package/src/assets/scripts/MapBoxHandler.js +680 -0
  8. package/src/assets/scripts/ScrollProgressionBar.js +24 -0
  9. package/src/assets/scripts/utils/ScrollObserver.js +166 -0
  10. package/src/assets/styles/config/_breakpoints.scss +37 -0
  11. package/src/assets/styles/config/_colors.scss +8 -0
  12. package/src/assets/styles/config/_config.scss +5 -0
  13. package/src/assets/styles/config/_functions.scss +90 -0
  14. package/src/assets/styles/config/_grrr.configs.scss +7 -0
  15. package/src/assets/styles/config/_mixins.scss +207 -0
  16. package/src/assets/styles/config/_type.scss +175 -0
  17. package/src/assets/styles/config/_vars.scss +16 -0
  18. package/src/assets/styles/globals/_content.scss +47 -0
  19. package/src/assets/styles/globals/_grrr.scss +18 -0
  20. package/src/assets/styles/globals/_html.scss +25 -0
  21. package/src/assets/styles/globals/_lists.scss +19 -0
  22. package/src/assets/styles/globals/_map-anchors.scss +32 -0
  23. package/src/assets/styles/globals/_reset.scss +240 -0
  24. package/src/assets/styles/globals/_reveal-animations.scss +104 -0
  25. package/src/assets/styles/globals/_root.scss +6 -0
  26. package/src/assets/styles/globals/_scroll-progression-bar.scss +8 -0
  27. package/src/assets/styles/main.scss +17 -0
  28. package/src/assets/styles/utils/.gitkeep +0 -0
  29. package/src/assets/styles/utils/grrr/_grrr.scss +433 -0
  30. package/src/assets/styles/utils/list-styles/_list-styles.scss +190 -0
  31. package/src/components/AnimationToggle.astro +19 -0
  32. package/src/components/BigNumbers.astro +83 -0
  33. package/src/components/Button.astro +49 -0
  34. package/src/components/Caption.astro +15 -0
  35. package/src/components/Card.astro +68 -0
  36. package/src/components/Cards.astro +66 -0
  37. package/src/components/CardsCall.astro +125 -0
  38. package/src/components/ChartBar.astro +217 -0
  39. package/src/components/ChartPercentage.astro +137 -0
  40. package/src/components/Column.astro +54 -0
  41. package/src/components/ColumnSticky.astro +129 -0
  42. package/src/components/Columns.astro +139 -0
  43. package/src/components/Compare.astro +266 -0
  44. package/src/components/Cta.astro +242 -0
  45. package/src/components/Gallery.astro +594 -0
  46. package/src/components/Group.astro +140 -0
  47. package/src/components/HtmlEmbed.astro +98 -0
  48. package/src/components/ImageBlock.astro +134 -0
  49. package/src/components/InnerColumns.astro +54 -0
  50. package/src/components/LogosGroup.astro +102 -0
  51. package/src/components/Map.astro +321 -0
  52. package/src/components/MapBox.astro +96 -0
  53. package/src/components/MapView.astro +30 -0
  54. package/src/components/Menu.astro +278 -0
  55. package/src/components/Pullquote.astro +46 -0
  56. package/src/components/Slider.astro +223 -0
  57. package/src/components/Spacer.astro +25 -0
  58. package/src/components/Text.astro +173 -0
  59. package/src/components/TextPlaceholder.astro +98 -0
  60. package/src/components/Timeline.astro +73 -0
  61. package/src/components/TimelineBullet.astro +67 -0
  62. package/src/components/VideoEmbed.astro +99 -0
  63. package/src/content/loader.ts +29 -0
  64. package/src/content/pages/alter-ameacada.md +80 -0
  65. package/src/content/pages/expulsions.md +1447 -0
  66. package/src/content/pages/home.md +346 -0
  67. package/src/content/pages/nhanderekoa-studio-autonoma.md +3113 -0
  68. package/src/content/pages/nhanderekoa-terra-ind/303/255gena-jaragu/303/241.md +3806 -0
  69. package/src/content/pages/nova-landing-page.md +546 -0
  70. package/src/content/pages/territ/303/263rios-de-exce/303/247/303/243o.md +2199 -0
  71. package/src/content/pages/teste-alter-do-chao.md +955 -0
  72. package/src/content/pages/teste-layout.md +1484 -0
  73. package/src/content/pages/thiago.md +93 -0
  74. package/src/content/schema/blog.ts +11 -0
  75. package/src/content/schema/geostorys.ts +13 -0
  76. package/src/content/schema/index.ts +3 -0
  77. package/src/content/schema/pages.ts +494 -0
  78. package/src/content.config.ts +49 -0
  79. package/src/env.d.ts +1 -0
  80. package/src/integration/override-aliases.ts +67 -0
  81. package/src/layouts/components/ButtonLayout.astro +8 -0
  82. package/src/layouts/components/CardLayout.astro +8 -0
  83. package/src/layouts/components/CardsCallLayout.astro +26 -0
  84. package/src/layouts/components/CardsLayout.astro +14 -0
  85. package/src/layouts/components/ChartBarLayout.astro +21 -0
  86. package/src/layouts/components/ChartPercentageLayout.astro +17 -0
  87. package/src/layouts/components/ColumnLayout.astro +11 -0
  88. package/src/layouts/components/ColumnStickyLayout.astro +10 -0
  89. package/src/layouts/components/ColumnsLayout.astro +13 -0
  90. package/src/layouts/components/CompareLayout.astro +22 -0
  91. package/src/layouts/components/CtaLayout.astro +91 -0
  92. package/src/layouts/components/GalleryLayout.astro +24 -0
  93. package/src/layouts/components/GroupLayout.astro +53 -0
  94. package/src/layouts/components/HtmlEmbedLayout.astro +18 -0
  95. package/src/layouts/components/ImageBlockLayout.astro +20 -0
  96. package/src/layouts/components/InnerColumnsLayout.astro +14 -0
  97. package/src/layouts/components/LogosGroupLayout.astro +22 -0
  98. package/src/layouts/components/MapLayout.astro +41 -0
  99. package/src/layouts/components/MapViewLayout.astro +8 -0
  100. package/src/layouts/components/MapboxLayout.astro +248 -0
  101. package/src/layouts/components/PullquoteLayout.astro +13 -0
  102. package/src/layouts/components/SliderLayout.astro +18 -0
  103. package/src/layouts/components/SpacerLayout.astro +8 -0
  104. package/src/layouts/components/TextLayout.astro +17 -0
  105. package/src/layouts/components/TextPlaceholderLayout.astro +7 -0
  106. package/src/layouts/components/TimelineBulletLayout.astro +14 -0
  107. package/src/layouts/components/TimelineLayout.astro +10 -0
  108. package/src/layouts/components/VideoEmbedLayout.astro +28 -0
  109. package/src/layouts/pages/Layout.astro +90 -0
  110. package/src/layouts/pages/PageLayout.astro +200 -0
  111. package/src/lib/collections.ts +1 -0
  112. package/src/routes/[slug].astro +17 -0
  113. package/src/routes/index.astro +5 -0
  114. 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
+ [![Use este modelo](https://img.shields.io/badge/Use%20este%20modelo-2ea44f?style=for-the-badge&logo=github)](https://github.com/thiagopaixao/documentalxyz/generate)
6
+ [![Abrir no Gitpod](https://img.shields.io/badge/Abrir%20no-Gitpod-orange?style=for-the-badge&logo=gitpod)](https://gitpod.io/#https://github.com/thiagopaixao/documentalxyz)
7
+ [![Abrir no StackBlitz](https://img.shields.io/badge/Abrir%20no-StackBlitz-1269d3?style=for-the-badge&logo=stackblitz)](https://stackblitz.com/github/thiagopaixao/documentalxyz)
8
+ [![Deploy no Cloudflare](https://img.shields.io/badge/Deploy-Cloudflare%20Pages-f38020?style=for-the-badge&logo=cloudflare)](https://deploy.workers.cloudflare.com/?url=https://github.com/thiagopaixao/documentalxyz)
9
+
10
+ ## 🚀 Tecnologias
11
+
12
+ ![Astro](https://img.shields.io/badge/Astro-BC52EE?style=for-the-badge&logo=astro&logoColor=white)
13
+ ![Sveltia CMS](https://img.shields.io/badge/Sveltia%20CMS-FF3E00?style=for-the-badge&logo=svelte&logoColor=white)
14
+ ![Svelte](https://img.shields.io/badge/Svelte-FF3E00?style=for-the-badge&logo=svelte&logoColor=white)
15
+ ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
16
+ ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
17
+ ![MapBox](https://img.shields.io/badge/MapBox-000000?style=for-the-badge&logo=mapbox&logoColor=white)
18
+ ![Vite](https://img.shields.io/badge/Vite-646CFF?style=for-the-badge&logo=vite&logoColor=white)
19
+ ![SCSS](https://img.shields.io/badge/SCSS-CC6699?style=for-the-badge&logo=sass&logoColor=white)
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
+ [![Abrir no Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](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
+ [![Abrir no StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](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>