@praxisui/charts 3.0.0-beta.0 → 3.0.0-beta.2

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 CHANGED
@@ -110,6 +110,124 @@ export class ChartDemoComponent {
110
110
 
111
111
  See the public exports in `projects/praxis-charts/src/public-api.ts`.
112
112
 
113
+ ## Runtime Model
114
+
115
+ O runtime atual de `@praxisui/charts` opera em duas trilhas principais:
116
+
117
+ - `dataSource.kind = "local"` para datasets entregues diretamente ao componente
118
+ - `dataSource.kind = "remote"` para datasets remotos, com foco canônico em `praxis.stats`
119
+
120
+ No modo remoto, o componente:
121
+
122
+ - emite `queryRequest`
123
+ - chama `PraxisChartStatsApiService`
124
+ - transforma a resposta agregada em `PraxisChartDataRow[]`
125
+ - renderiza o estado `loading`, `empty`, `error` ou `ready`
126
+
127
+ ### Versão Pedagógica de Alto Nível
128
+
129
+ Esta é a leitura adequada para documentação pública e landing pages.
130
+
131
+ ```mermaid
132
+ sequenceDiagram
133
+ participant Host as Host
134
+ participant Chart as praxis-chart
135
+ participant Stats as PraxisChartStatsApiService
136
+ participant Backend as API Praxis Stats
137
+
138
+ Host->>Chart: fornece config local ou remote
139
+ alt fonte local
140
+ Chart->>Chart: transforma dados locais e renderiza
141
+ else fonte remota
142
+ Chart-->>Host: emite queryRequest
143
+ Chart->>Stats: executa consulta praxis.stats
144
+ Stats->>Backend: POST /stats/*
145
+ Backend-->>Stats: retorna buckets/pontos agregados
146
+ Stats-->>Chart: entrega linhas canônicas
147
+ Chart->>Chart: renderiza loading, ready, empty ou error
148
+ end
149
+ ```
150
+
151
+ Leitura pedagógica:
152
+
153
+ 1. **O host entrega um contrato declarativo**, não opções brutas do engine.
154
+ 2. **O componente resolve a fonte de dados**: local ou remota.
155
+ 3. **Quando a fonte é remota, a integração canônica é `praxis.stats`**.
156
+ 4. **O chart renderiza estados de UX e a visualização final a partir de linhas canônicas**.
157
+
158
+ ### Versão Detalhada e Fiel ao Runtime Atual
159
+
160
+ ```mermaid
161
+ sequenceDiagram
162
+ participant Host as Host
163
+ participant Chart as PraxisChartComponent
164
+ participant Mapper as Canonical Mapper / config remoto
165
+ participant Stats as PraxisChartStatsApiService
166
+ participant Backend as API /stats
167
+ participant Engine as Chart Engine Adapter
168
+
169
+ Host->>Chart: [config] e opcionalmente [data]
170
+ alt data explicito fornecido
171
+ Chart->>Chart: resolvedData = data input
172
+ else fonte local
173
+ Chart->>Chart: resolvedData = dataSource.items
174
+ else fonte remote
175
+ Chart->>Chart: buildRemoteSignature(config)
176
+ Chart-->>Host: queryRequest({ chartId, dataSource, query })
177
+ Chart->>Stats: execute(event, config)
178
+ Stats->>Stats: valida statsPath + statsRequest
179
+ Stats->>Backend: POST {statsPath}
180
+ Backend-->>Stats: envelope com data agregada
181
+ Stats->>Stats: converte buckets/points em PraxisChartDataRow[]
182
+ Stats-->>Chart: rows remotas resolvidas
183
+ end
184
+
185
+ Chart->>Chart: resolve loadState (loading/empty/error/ready)
186
+ alt ready
187
+ Chart->>Engine: render(host, { config, data })
188
+ else not ready
189
+ Chart->>Engine: destroy()
190
+ end
191
+ ```
192
+
193
+ ### Limites Atuais do Contrato Canônico
194
+
195
+ O mapper `x-ui.chart -> PraxisChartConfig` já impõe limites importantes que precisam aparecer na documentação pública:
196
+
197
+ - `source.kind` suportado hoje: `praxis.stats` e `derived`
198
+ - `source.kind = "praxis.stats"` exige `source.resource` e `source.operation`
199
+ - agregações suportadas: `count`, `sum`, `avg`, `min`, `max`
200
+ - `distinct-count` ainda não está implementado
201
+ - charts `pie` e `donut` aceitam apenas uma métrica
202
+ - charts cartesianos `praxis.stats` podem declarar múltiplas métricas apenas em `group-by` e `timeseries`
203
+ - `distribution` continua single-métrica
204
+ - `combo` exige pelo menos duas métricas e, no modo `praxis.stats`, suporta apenas `group-by` ou `timeseries`
205
+ - `axis: "secondary"` é exclusivo de `combo`
206
+ - `selectionChange` e `crossFilter` declarativos ainda não estão implementados
207
+ - `theme.variant` e `theme.palette` por token ainda não estão implementados
208
+
209
+ ## Fluxo Canonico de `praxis.stats`
210
+
211
+ Quando o contrato remoto vem do mapper canônico, o caminho gerado hoje segue a forma:
212
+
213
+ - `{resourcePath}/stats/group-by`
214
+ - `{resourcePath}/stats/timeseries`
215
+ - `{resourcePath}/stats/distribution`
216
+
217
+ O `PraxisChartStatsApiService`:
218
+
219
+ - monta a URL final usando `API_URL`
220
+ - normaliza o path remoto
221
+ - envia `statsRequest` via `POST`
222
+ - converte buckets/pontos em linhas canônicas para o runtime do chart
223
+
224
+ Observação importante:
225
+
226
+ - o runtime atual assume envelope com `data`
227
+ - `queryRequest` é emitido para observabilidade do host antes da execução remota
228
+ - a execução remota automática hoje está acoplada a `praxis.stats`; não existe ainda um hook público de override do request dentro do componente
229
+ - a trilha canônica `x-ui.chart -> PraxisChartConfig -> praxis.stats` já promove múltiplas métricas para charts cartesianos suportados; para evitar semântica enganosa, `combo` segue sendo o único caso com eixo secundário e mistura heterogênea de séries
230
+
113
231
  ## Current Scope
114
232
 
115
233
  This first published version is focused on the core runtime:
@@ -118,6 +236,16 @@ This first published version is focused on the core runtime:
118
236
  - canonical chart contracts and runtime models
119
237
  - the initial ECharts-based engine adapter
120
238
  - metadata and mapping hooks for registry and dynamic widget composition
239
+ - remote execution focused on canonical `praxis.stats`
240
+
241
+ ## Current Non-Goals
242
+
243
+ The current runtime does not yet expose as stable public surface:
244
+
245
+ - direct host control over raw ECharts options as the primary contract
246
+ - declarative cross-filter orchestration
247
+ - declarative selectionChange runtime actions
248
+ - palette token indirection or theme variants from `x-ui.chart`
121
249
 
122
250
  ## Notes for Hosts
123
251