@the-bearded-bear/claude-craft 8.23.0 → 8.23.1
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/Dev/i18n/base/Common/templates/AGENTS.md.template +92 -0
- package/Dev/i18n/de/Common/templates/settings.json.template +2 -11
- package/Dev/i18n/de/Workflow/commands/auto-sprint.md +1 -1
- package/Dev/i18n/de/Workflow/commands/start.md +40 -1
- package/Dev/i18n/en/Common/templates/settings.json.template +2 -11
- package/Dev/i18n/en/Workflow/commands/auto-sprint.md +1 -1
- package/Dev/i18n/en/Workflow/commands/start.md +40 -1
- package/Dev/i18n/es/Common/templates/settings.json.template +2 -11
- package/Dev/i18n/es/Workflow/commands/auto-sprint.md +1 -1
- package/Dev/i18n/es/Workflow/commands/start.md +40 -1
- package/Dev/i18n/fr/Common/templates/settings.json.template +2 -11
- package/Dev/i18n/fr/Workflow/commands/auto-sprint.md +1 -1
- package/Dev/i18n/fr/Workflow/commands/start.md +40 -1
- package/Dev/i18n/pt/Common/templates/settings.json.template +2 -11
- package/Dev/i18n/pt/Workflow/commands/auto-sprint.md +1 -1
- package/Dev/i18n/pt/Workflow/commands/start.md +40 -1
- package/Dev/scripts/check-config.sh +59 -65
- package/Dev/scripts/install-common-rules.sh +47 -3
- package/Dev/scripts/install-from-config.sh +12 -1
- package/Dev/scripts/lib/install-tech-common.sh +6 -1
- package/Dev/scripts/lib/stack-profiles.sh +74 -0
- package/Dev/stack-profiles/README.md +15 -0
- package/Dev/stack-profiles/angular/permissions.txt +5 -0
- package/Dev/stack-profiles/angular/quality.md +3 -0
- package/Dev/stack-profiles/angular/stack.txt +2 -0
- package/Dev/stack-profiles/ansible/permissions.txt +2 -0
- package/Dev/stack-profiles/ansible/quality.md +2 -0
- package/Dev/stack-profiles/ansible/stack.txt +2 -0
- package/Dev/stack-profiles/coolify/stack.txt +2 -0
- package/Dev/stack-profiles/csharp/permissions.txt +1 -0
- package/Dev/stack-profiles/csharp/quality.md +3 -0
- package/Dev/stack-profiles/csharp/stack.txt +2 -0
- package/Dev/stack-profiles/docker/permissions.txt +1 -0
- package/Dev/stack-profiles/docker/quality.md +2 -0
- package/Dev/stack-profiles/docker/stack.txt +2 -0
- package/Dev/stack-profiles/flutter/permissions.txt +2 -0
- package/Dev/stack-profiles/flutter/quality.md +3 -0
- package/Dev/stack-profiles/flutter/stack.txt +2 -0
- package/Dev/stack-profiles/frankenphp/stack.txt +2 -0
- package/Dev/stack-profiles/hcloud/stack.txt +2 -0
- package/Dev/stack-profiles/kubernetes/permissions.txt +3 -0
- package/Dev/stack-profiles/kubernetes/quality.md +2 -0
- package/Dev/stack-profiles/kubernetes/stack.txt +2 -0
- package/Dev/stack-profiles/laravel/permissions.txt +2 -0
- package/Dev/stack-profiles/laravel/quality.md +3 -0
- package/Dev/stack-profiles/laravel/stack.txt +2 -0
- package/Dev/stack-profiles/opentofu/permissions.txt +3 -0
- package/Dev/stack-profiles/opentofu/quality.md +3 -0
- package/Dev/stack-profiles/opentofu/stack.txt +2 -0
- package/Dev/stack-profiles/paperclip/permissions.txt +4 -0
- package/Dev/stack-profiles/paperclip/quality.md +2 -0
- package/Dev/stack-profiles/paperclip/stack.txt +2 -0
- package/Dev/stack-profiles/pgbouncer/stack.txt +2 -0
- package/Dev/stack-profiles/php/permissions.txt +1 -0
- package/Dev/stack-profiles/php/quality.md +3 -0
- package/Dev/stack-profiles/php/stack.txt +2 -0
- package/Dev/stack-profiles/python/permissions.txt +4 -0
- package/Dev/stack-profiles/python/quality.md +3 -0
- package/Dev/stack-profiles/python/stack.txt +2 -0
- package/Dev/stack-profiles/react/permissions.txt +4 -0
- package/Dev/stack-profiles/react/quality.md +3 -0
- package/Dev/stack-profiles/react/stack.txt +2 -0
- package/Dev/stack-profiles/reactnative/permissions.txt +5 -0
- package/Dev/stack-profiles/reactnative/quality.md +3 -0
- package/Dev/stack-profiles/reactnative/stack.txt +2 -0
- package/Dev/stack-profiles/symfony/permissions.txt +2 -0
- package/Dev/stack-profiles/symfony/quality.md +4 -0
- package/Dev/stack-profiles/symfony/stack.txt +2 -0
- package/Dev/stack-profiles/vercel/permissions.txt +5 -0
- package/Dev/stack-profiles/vercel/quality.md +2 -0
- package/Dev/stack-profiles/vercel/stack.txt +2 -0
- package/Dev/stack-profiles/vite/permissions.txt +4 -0
- package/Dev/stack-profiles/vite/quality.md +2 -0
- package/Dev/stack-profiles/vite/stack.txt +2 -0
- package/Dev/stack-profiles/vuejs/permissions.txt +4 -0
- package/Dev/stack-profiles/vuejs/quality.md +3 -0
- package/Dev/stack-profiles/vuejs/stack.txt +2 -0
- package/Project/i18n/de/Gate/commands/validate-sprint.md +14 -5
- package/Project/i18n/de/agents/tech-lead.md +62 -67
- package/Project/i18n/de/scaffold/CLAUDE.md +5 -25
- package/Project/i18n/en/Gate/commands/validate-sprint.md +14 -5
- package/Project/i18n/en/agents/tech-lead.md +60 -65
- package/Project/i18n/en/scaffold/CLAUDE.md +5 -25
- package/Project/i18n/es/Gate/commands/validate-sprint.md +14 -5
- package/Project/i18n/es/agents/tech-lead.md +60 -65
- package/Project/i18n/es/scaffold/CLAUDE.md +5 -25
- package/Project/i18n/fr/Gate/commands/validate-sprint.md +14 -5
- package/Project/i18n/fr/agents/tech-lead.md +60 -65
- package/Project/i18n/fr/scaffold/CLAUDE.md +5 -25
- package/Project/i18n/pt/Gate/commands/validate-sprint.md +14 -5
- package/Project/i18n/pt/agents/tech-lead.md +60 -65
- package/Project/i18n/pt/scaffold/CLAUDE.md +5 -25
- package/Project/install-project-commands.sh +45 -10
- package/README.md +8 -0
- package/bundles/cursor/.cursorrules +1 -1
- package/bundles/windsurf/.windsurfrules +1 -1
- package/cli/kanban/client/dist/assets/BurndownView-CQyFME8U.js +3 -0
- package/cli/kanban/client/dist/assets/{DepsView-A7Xe41FE.js → DepsView-DEAS0a20.js} +1 -1
- package/cli/kanban/client/dist/assets/{DocsView-DFXULSIu.js → DocsView-BsXYPJAu.js} +1 -1
- package/cli/kanban/client/dist/assets/{SprintsView-DZ3KdjDw.js → SprintsView-Bo2p1NbV.js} +1 -1
- package/cli/kanban/client/dist/assets/cytoscape-dagre-8BvEs68F.js +2 -0
- package/cli/kanban/client/dist/assets/cytoscape.esm-BiK1LiYw.js +321 -0
- package/cli/kanban/client/dist/assets/index-CI2O6JO9.js +4 -0
- package/cli/kanban/client/dist/assets/{marked.esm-BFjXurK6.js → marked.esm-CYIZq5lG.js} +4 -4
- package/cli/kanban/client/dist/assets/purify.es-ChwZkWde.js +3 -0
- package/cli/kanban/client/dist/index.html +1 -1
- package/cli/kanban/server/app.js +6 -3
- package/cli/kanban/server/services/frontmatter.js +10 -4
- package/cli/kanban/server/services/markdown-metadata.js +150 -0
- package/cli/kanban/server/services/repository.js +29 -7
- package/cli/lib/installer.js +9 -2
- package/package.json +9 -9
- package/cli/kanban/client/dist/assets/BurndownView-BrheHgEo.js +0 -10
- package/cli/kanban/client/dist/assets/cytoscape-dagre-YDByNmIW.js +0 -2
- package/cli/kanban/client/dist/assets/cytoscape.esm-Dd3Wh3PR.js +0 -321
- package/cli/kanban/client/dist/assets/index-TQv7sDCT.js +0 -4
- package/cli/kanban/client/dist/assets/purify.es-DuRL7t6i.js +0 -3
|
@@ -11,7 +11,7 @@ Você é um Tech Lead experiente, certificado CSM (Certified Scrum Master) pela
|
|
|
11
11
|
- **Papel**: Tech Lead / Scrum Master
|
|
12
12
|
- **Certificação**: CSM (Certified Scrum Master)
|
|
13
13
|
- **Experiência**: 15+ anos em desenvolvimento de software, 8+ anos em Ágil
|
|
14
|
-
- **Expertise**: Arquitetura,
|
|
14
|
+
- **Expertise**: Arquitetura, DevOps e o stack do projeto definido no `CLAUDE.md` raiz
|
|
15
15
|
|
|
16
16
|
## Responsabilidades Principais
|
|
17
17
|
|
|
@@ -23,17 +23,19 @@ Você é um Tech Lead experiente, certificado CSM (Certified Scrum Master) pela
|
|
|
23
23
|
6. **Qualidade**: Definir e fazer cumprir a Definition of Done
|
|
24
24
|
7. **Coaching**: Guiar o time em direção à excelência técnica
|
|
25
25
|
|
|
26
|
-
## Tech Stack
|
|
26
|
+
## Tech Stack do Projeto
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
28
|
+
Não presumo nenhum framework: o stack do projeto é definido na seção **Technical stack** do `CLAUDE.md` raiz (gerada na instalação a partir das tecnologias escolhidas). Eu o leio antes de qualquer decisão, estimativa ou decomposição, e uso apenas os prefixos de tarefa das camadas presentes no projeto.
|
|
29
|
+
|
|
30
|
+
| Camada | O que verifico no stack do projeto |
|
|
31
|
+
|--------|------------------------------------|
|
|
32
|
+
| 🌐 Web | Framework web, componentes, gerenciamento de estado |
|
|
33
|
+
| 📱 Mobile | Framework mobile (se o produto tiver app mobile) |
|
|
34
|
+
| ⚙️ API | Estilo de API (REST, GraphQL), contrato (OpenAPI) |
|
|
35
|
+
| 🗄️ DB | Banco de dados, ORM / camada de consultas, migrações |
|
|
36
|
+
| 🧪 Testes | Ferramentas de teste por camada (unitário, integração, E2E) |
|
|
37
|
+
| 🐳 Infra | Contêineres, CI/CD, destino de implantação |
|
|
38
|
+
| 🏗️ Arquitetura | Hexagonal, DDD, CQRS (quando justificado) |
|
|
37
39
|
|
|
38
40
|
## Competências Scrum
|
|
39
41
|
|
|
@@ -69,12 +71,12 @@ Você é um Tech Lead experiente, certificado CSM (Certified Scrum Master) pela
|
|
|
69
71
|
|
|
70
72
|
| Prefixo | Camada | Exemplos |
|
|
71
73
|
|---------|--------|----------|
|
|
72
|
-
| `[DB]` | Database |
|
|
73
|
-
| `[BE]` | Backend |
|
|
74
|
-
| `[FE-WEB]` | Frontend Web |
|
|
75
|
-
| `[FE-MOB]` | Frontend Mobile |
|
|
76
|
-
| `[TEST]` | Tests |
|
|
77
|
-
| `[DOC]` | Documentation |
|
|
74
|
+
| `[DB]` | Database | Esquema/modelo, Migração, Repositório, Fixtures |
|
|
75
|
+
| `[BE]` | Backend | Serviço, Endpoint de API, Validação, Autorização |
|
|
76
|
+
| `[FE-WEB]` | Frontend Web | Página/rota, Componente, Estado, Formulário |
|
|
77
|
+
| `[FE-MOB]` | Frontend Mobile | Modelo, Cliente de API, Estado, Tela |
|
|
78
|
+
| `[TEST]` | Tests | Unitário, API/integração, Componente, E2E |
|
|
79
|
+
| `[DOC]` | Documentation | Doc do código, README, OpenAPI |
|
|
78
80
|
| `[OPS]` | DevOps | Docker, CI/CD |
|
|
79
81
|
| `[REV]` | Review | Code review |
|
|
80
82
|
|
|
@@ -97,11 +99,11 @@ Para uma US CRUD típica (5 pontos), crio ~17 tarefas:
|
|
|
97
99
|
|
|
98
100
|
| Tipo | Tarefas | Horas |
|
|
99
101
|
|------|---------|-------|
|
|
100
|
-
| [DB] |
|
|
101
|
-
| [BE] | API
|
|
102
|
-
| [FE-WEB] |
|
|
103
|
-
| [FE-MOB] |
|
|
104
|
-
| [TEST] |
|
|
102
|
+
| [DB] | Modelo, Migração | 3h |
|
|
103
|
+
| [BE] | Endpoint de API, Serviço | 7h |
|
|
104
|
+
| [FE-WEB] | Página, Componente, Estado | 7h |
|
|
105
|
+
| [FE-MOB] | Modelo, Cliente de API, Estado, Tela | 10h |
|
|
106
|
+
| [TEST] | Unitário, API, Componente, E2E | 9h |
|
|
105
107
|
| [DOC] | Documentation | 1h |
|
|
106
108
|
| [REV] | Code Review | 2h |
|
|
107
109
|
| **Total** | **~17 tarefas** | **~39h** |
|
|
@@ -110,19 +112,19 @@ Para uma US CRUD típica (5 pontos), crio ~17 tarefas:
|
|
|
110
112
|
|
|
111
113
|
```mermaid
|
|
112
114
|
graph TD
|
|
113
|
-
T01[
|
|
114
|
-
T01 --> T03[API
|
|
115
|
+
T01[Model] --> T02[Migration]
|
|
116
|
+
T01 --> T03[API endpoint]
|
|
115
117
|
T03 --> T04[Service]
|
|
116
|
-
T03 --> T05[
|
|
117
|
-
T05 --> T06[
|
|
118
|
-
T06 --> T07[
|
|
119
|
-
T03 --> T08[
|
|
120
|
-
T08 --> T09[
|
|
121
|
-
T09 --> T10[
|
|
118
|
+
T03 --> T05[Web page]
|
|
119
|
+
T05 --> T06[Web component]
|
|
120
|
+
T06 --> T07[Web state]
|
|
121
|
+
T03 --> T08[Mobile model]
|
|
122
|
+
T08 --> T09[API client]
|
|
123
|
+
T09 --> T10[Mobile state]
|
|
122
124
|
T10 --> T11[Screen]
|
|
123
|
-
T04 --> T12[
|
|
124
|
-
T03 --> T13[
|
|
125
|
-
T11 --> T14[
|
|
125
|
+
T04 --> T12[Unit tests]
|
|
126
|
+
T03 --> T13[API tests]
|
|
127
|
+
T11 --> T14[Component tests]
|
|
126
128
|
T07 --> T15[E2E]
|
|
127
129
|
T11 --> T15
|
|
128
130
|
T15 --> T16[Doc]
|
|
@@ -137,27 +139,27 @@ Cada US DEVE atravessar todas as camadas:
|
|
|
137
139
|
┌─────────────────────────────────────────────────────────────┐
|
|
138
140
|
│ Camada UI │
|
|
139
141
|
│ ┌─────────────────────┐ ┌─────────────────────┐ │
|
|
140
|
-
│ │
|
|
141
|
-
│ │
|
|
142
|
+
│ │ Web app │ │ Mobile app │ │
|
|
143
|
+
│ │ (optional) │ │ (optional) │ │
|
|
142
144
|
│ └──────────┬──────────┘ └──────────┬──────────┘ │
|
|
143
145
|
│ └────────────┬────────────┘ │
|
|
144
146
|
│ ▼ │
|
|
145
147
|
│ ┌─────────────────────┐ │
|
|
146
|
-
│ │
|
|
147
|
-
│ │
|
|
148
|
+
│ │ API │ │
|
|
149
|
+
│ │ (REST / GraphQL) │ │
|
|
148
150
|
│ └──────────┬──────────┘ │
|
|
149
151
|
│ ▼ │
|
|
150
152
|
│ ┌─────────────────────┐ │
|
|
151
|
-
│ │
|
|
152
|
-
│ │ (
|
|
153
|
+
│ │ Database │ │
|
|
154
|
+
│ │ (ORM / queries) │ │
|
|
153
155
|
│ └─────────────────────┘ │
|
|
154
156
|
└─────────────────────────────────────────────────────────────┘
|
|
155
157
|
```
|
|
156
158
|
|
|
157
159
|
**Regras**:
|
|
158
160
|
- SEM US "Apenas Backend" ou "Apenas Frontend"
|
|
159
|
-
-
|
|
160
|
-
- API
|
|
161
|
+
- Se o produto tiver vários clientes (web + mobile), cada US cobre todos
|
|
162
|
+
- A API é o ponto central
|
|
161
163
|
- Exceção: USs de infraestrutura técnica
|
|
162
164
|
|
|
163
165
|
## Definition of Done que Aplico
|
|
@@ -175,37 +177,30 @@ Cada US DEVE atravessar todas as camadas:
|
|
|
175
177
|
- [ ] Testes E2E para caminhos críticos
|
|
176
178
|
- [ ] CI green
|
|
177
179
|
|
|
178
|
-
### Web (
|
|
179
|
-
- [ ]
|
|
180
|
-
- [ ]
|
|
181
|
-
- [ ]
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
- [ ]
|
|
185
|
-
|
|
186
|
-
### Mobile (Flutter)
|
|
187
|
-
- [ ] Widgets implementados
|
|
188
|
-
- [ ] iOS 15+, Android 10+
|
|
189
|
-
- [ ] Material/Cupertino
|
|
180
|
+
### Web (se o projeto tiver front-end web)
|
|
181
|
+
- [ ] Páginas/componentes testados
|
|
182
|
+
- [ ] Responsivo, WCAG 2.2 AA
|
|
183
|
+
- [ ] Testes E2E / de componentes web passando
|
|
184
|
+
|
|
185
|
+
### Mobile (se o projeto tiver app mobile)
|
|
186
|
+
- [ ] Telas implementadas
|
|
187
|
+
- [ ] Versões-alvo de iOS/Android suportadas
|
|
190
188
|
- [ ] 60 FPS, sem jank
|
|
191
|
-
- [ ]
|
|
192
|
-
- [ ] Widget tests passando
|
|
189
|
+
- [ ] Testes de componentes/widgets passando
|
|
193
190
|
|
|
194
|
-
### API
|
|
195
|
-
- [ ] Endpoints
|
|
196
|
-
- [ ]
|
|
197
|
-
- [ ]
|
|
198
|
-
- [ ]
|
|
199
|
-
- [ ]
|
|
200
|
-
- [ ] ApiTestCase passando
|
|
191
|
+
### API
|
|
192
|
+
- [ ] Endpoints funcionais
|
|
193
|
+
- [ ] Validação de entradas
|
|
194
|
+
- [ ] Autorização verificada em cada endpoint
|
|
195
|
+
- [ ] Contrato OpenAPI atualizado
|
|
196
|
+
- [ ] Testes de API passando
|
|
201
197
|
|
|
202
198
|
### Qualidade
|
|
203
|
-
- [ ]
|
|
204
|
-
- [ ] Dart analyzer strict
|
|
199
|
+
- [ ] Linters / análise estática do stack verdes (ver `CLAUDE.md`)
|
|
205
200
|
- [ ] API < 200ms
|
|
206
201
|
- [ ] Sem vulnerabilidades
|
|
207
202
|
|
|
208
|
-
### Paridade Web/Mobile
|
|
203
|
+
### Paridade Web/Mobile (se ambos existirem)
|
|
209
204
|
- [ ] Mesmo comportamento de negócio
|
|
210
205
|
- [ ] Mesma API consumida
|
|
211
206
|
- [ ] Dados sincronizados
|
|
@@ -10,7 +10,7 @@ Expert in backlog management, personas, User Stories and prioritization.
|
|
|
10
10
|
### 🔧 Tech Lead (`@tech`)
|
|
11
11
|
Expert in architecture, technical decomposition and Scrum facilitation.
|
|
12
12
|
- CSM certified (Certified Scrum Master)
|
|
13
|
-
- Skilled in:
|
|
13
|
+
- Skilled in: Hexagonal Architecture{{STACK_SKILLS}}
|
|
14
14
|
|
|
15
15
|
## Custom commands
|
|
16
16
|
|
|
@@ -85,13 +85,7 @@ Expert in architecture, technical decomposition and Scrum facilitation.
|
|
|
85
85
|
## Technical stack
|
|
86
86
|
|
|
87
87
|
```yaml
|
|
88
|
-
|
|
89
|
-
mobile: Flutter (Dart, Material/Cupertino)
|
|
90
|
-
api: API Platform (REST, OpenAPI)
|
|
91
|
-
database: PostgreSQL + Doctrine ORM
|
|
92
|
-
infrastructure: Docker
|
|
93
|
-
tests: PHPUnit, Flutter Test
|
|
94
|
-
quality: PHPStan max, Dart analyzer
|
|
88
|
+
{{STACK_BLOCK}}
|
|
95
89
|
```
|
|
96
90
|
|
|
97
91
|
## Project structure
|
|
@@ -129,7 +123,7 @@ project-management/
|
|
|
129
123
|
- Format: "As a [P-XXX]... I want... So that..."
|
|
130
124
|
- **INVEST** validation: Independent, Negotiable, Valuable, Estimable, Sized ≤8pts, Testable
|
|
131
125
|
- The **3 Cs**: Card, Conversation, Confirmation
|
|
132
|
-
- **Vertical Slicing**:
|
|
126
|
+
- **Vertical Slicing**: {{STACK_SLICE}}
|
|
133
127
|
|
|
134
128
|
### Acceptance Criteria
|
|
135
129
|
- **Gherkin** format: GIVEN [context] / WHEN [actor] [action] / THEN [result]
|
|
@@ -189,20 +183,6 @@ project-management/
|
|
|
189
183
|
|
|
190
184
|
## Code quality
|
|
191
185
|
|
|
192
|
-
### Backend (Symfony)
|
|
193
|
-
- PHPStan max level
|
|
194
186
|
- Tests > 80% coverage
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
### Mobile (Flutter)
|
|
199
|
-
- Strict Dart analyzer
|
|
200
|
-
- Widget tests
|
|
201
|
-
- BLoC/Riverpod
|
|
202
|
-
- Material Design 3
|
|
203
|
-
|
|
204
|
-
### API (API Platform)
|
|
205
|
-
- Auto-generated OpenAPI
|
|
206
|
-
- Validation constraints
|
|
207
|
-
- Serialization groups
|
|
208
|
-
- Security voters
|
|
187
|
+
|
|
188
|
+
{{QUALITY_BLOCK}}
|
|
@@ -12,20 +12,27 @@ lang="en"
|
|
|
12
12
|
|
|
13
13
|
# Shared UI library
|
|
14
14
|
source "${SCRIPT_DIR}/../Dev/scripts/lib/shell-ui.sh"
|
|
15
|
+
source "${SCRIPT_DIR}/../Dev/scripts/lib/stack-profiles.sh"
|
|
15
16
|
|
|
16
17
|
# Parse arguments
|
|
17
18
|
PROJECT_DIR="."
|
|
18
19
|
skip_common=false
|
|
20
|
+
force=false
|
|
21
|
+
tech_arg=""
|
|
19
22
|
while [[ $# -gt 0 ]]; do
|
|
20
23
|
case $1 in
|
|
21
24
|
--lang=*) lang="${1#--lang=}"; shift ;;
|
|
22
25
|
--skip-common) skip_common=true; shift ;;
|
|
26
|
+
--tech=*) tech_arg="${1#--tech=}"; shift ;;
|
|
27
|
+
--force) force=true; shift ;;
|
|
23
28
|
--help|-h)
|
|
24
29
|
echo "Usage: $0 [OPTIONS] [PROJECT_DIR]"
|
|
25
30
|
echo ""
|
|
26
31
|
echo "Options:"
|
|
27
32
|
echo " --lang=XX Language (en, fr, es, de, pt) - default: en"
|
|
28
33
|
echo " --skip-common Skip common rules installation (for multi-tech modules)"
|
|
34
|
+
echo " --tech=a,b Project stack, rendered into CLAUDE.md (e.g. python,react,docker)"
|
|
35
|
+
echo " --force Overwrite existing CLAUDE.md and project-management scaffold"
|
|
29
36
|
echo " --help Show this help"
|
|
30
37
|
echo ""
|
|
31
38
|
echo "Example:"
|
|
@@ -134,18 +141,46 @@ if [ -d "$TPL_SRC" ]; then
|
|
|
134
141
|
ui_success "$TEMPLATES_COUNT templates copied"
|
|
135
142
|
fi
|
|
136
143
|
|
|
137
|
-
#
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
# Render the CLAUDE.md scaffold placeholders from the --tech stack profiles
|
|
145
|
+
render_claude_md() {
|
|
146
|
+
local techs line
|
|
147
|
+
IFS=' ' read -ra techs <<< "$(parse_tech_list "$tech_arg")"
|
|
148
|
+
local skills="" slice="UI + API + DB"
|
|
149
|
+
if [[ ${#techs[@]} -gt 0 ]]; then
|
|
150
|
+
skills=", $(stack_display_names ', ' "${techs[@]}")"
|
|
151
|
+
slice="$(stack_display_names ' + ' "${techs[@]}")"
|
|
152
|
+
fi
|
|
153
|
+
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
154
|
+
case "$line" in
|
|
155
|
+
'{{STACK_BLOCK}}')
|
|
156
|
+
if [[ ${#techs[@]} -gt 0 ]]; then render_stack_block "${techs[@]}"
|
|
157
|
+
else echo "# → /project:generate-tech-spec"; fi ;;
|
|
158
|
+
'{{QUALITY_BLOCK}}')
|
|
159
|
+
if [[ ${#techs[@]} -gt 0 ]]; then render_quality_block "${techs[@]}"; fi ;;
|
|
160
|
+
*)
|
|
161
|
+
line="${line//\{\{STACK_SKILLS\}\}/$skills}"
|
|
162
|
+
echo "${line//\{\{STACK_SLICE\}\}/$slice}" ;;
|
|
163
|
+
esac
|
|
164
|
+
done < "$SCAFFOLD_DIR/CLAUDE.md"
|
|
165
|
+
}
|
|
143
166
|
|
|
144
|
-
|
|
167
|
+
# Write $2 to $1 unless it already exists (never clobber user content without --force)
|
|
168
|
+
write_scaffold() {
|
|
169
|
+
local dest="$1" label="$2" content
|
|
170
|
+
content="$(cat)"
|
|
171
|
+
if [[ -f "$dest" ]] && ! $force; then
|
|
172
|
+
ui_info "$label exists (not overwritten, use --force)"
|
|
173
|
+
return
|
|
174
|
+
fi
|
|
175
|
+
printf '%s\n' "$content" > "$dest"
|
|
176
|
+
ui_success "$label created"
|
|
177
|
+
}
|
|
145
178
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
179
|
+
write_scaffold "$PROJECT_DIR/project-management/backlog/index.md" "Backlog index" \
|
|
180
|
+
< "$SCAFFOLD_DIR/project-management__backlog__index.md"
|
|
181
|
+
render_claude_md | write_scaffold "$PROJECT_DIR/CLAUDE.md" "CLAUDE.md"
|
|
182
|
+
write_scaffold "$PROJECT_DIR/project-management/README.md" "project-management README" \
|
|
183
|
+
< "$SCAFFOLD_DIR/project-management__README.md"
|
|
149
184
|
|
|
150
185
|
echo ""
|
|
151
186
|
echo "=================================================="
|
package/README.md
CHANGED
|
@@ -28,6 +28,14 @@ Plus **11 stack-specific reviewers** (@symfony-reviewer, @react-reviewer, @pytho
|
|
|
28
28
|
|
|
29
29
|
A comprehensive framework for AI-assisted development with [Claude Code](https://claude.ai/code). Install standardized rules, agents, and commands for your projects across multiple technology stacks — **33 specialized agents (+39 infra agents on-demand), 140 commands across 17 namespaces (234 total), 55 skills**, all token-optimized via `context: fork` and sub-agent model routing.
|
|
30
30
|
|
|
31
|
+
## What's New in v8.23.1
|
|
32
|
+
|
|
33
|
+
**Correctifs d'installation, Kanban et workflow (2026-10-22, v8.23.1) :**
|
|
34
|
+
|
|
35
|
+
- **Installation adaptée à la stack** : `--tech=a,b,c` rend le `CLAUDE.md` racine, `AGENTS.md` et `.claude/settings.json` selon les technos réellement installées ; `install-project-commands.sh` n'écrase plus les fichiers existants ; `@tech-lead` agnostique de la stack ; `make config-*` et `check-config.sh` réparés.
|
|
36
|
+
- **Kanban** : lecture des backlogs générés depuis les templates (métadonnées en liste Markdown), plus de documents dupliqués, retrait complet des commentaires HTML imbriqués (alerte CodeQL).
|
|
37
|
+
- **Workflow** : `/workflow:start` crée `.bmad/sprint-status.yaml`, `/gate:validate-sprint` fonctionne sans lui. Dépendances et GitHub Actions à jour. Détails : [CHANGELOG](CHANGELOG.md#8231---2026-10-22).
|
|
38
|
+
|
|
31
39
|
## What's New in v8.23.0
|
|
32
40
|
|
|
33
41
|
**Audit de fraîcheur + alignement Claude (2026-10-13, v8.23.0) :**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
# Claude-Craft - Multi-Technology Framework
|
|
10
10
|
|
|
11
|
-
**Version:** 8.23.
|
|
11
|
+
**Version:** 8.23.1 | **Languages:** en, fr, es, de, pt
|
|
12
12
|
|
|
13
13
|
A comprehensive AI-assisted development framework for Claude Code with 13 technology stacks, 33 specialized agents (+39 infra agents on-demand), 140 commands across 17 namespaces, and BMAD v6 project management.
|
|
14
14
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
# Claude-Craft - Multi-Technology Framework
|
|
10
10
|
|
|
11
|
-
**Version:** 8.23.
|
|
11
|
+
**Version:** 8.23.1 | **Languages:** en, fr, es, de, pt
|
|
12
12
|
|
|
13
13
|
A comprehensive AI-assisted development framework for Claude Code with 13 technology stacks, 33 specialized agents (+39 infra agents on-demand), 140 commands across 17 namespaces, and BMAD v6 project management.
|
|
14
14
|
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{A as e,C as t,E as n,M as r,O as i,P as a,S as o,c as s,f as c,g as l,h as u,i as d,j as f,k as p,l as m,m as h,p as g,s as _,v,w as y,x as b}from"./index-CI2O6JO9.js";function x(e=[],t=[]){let n=new Map(e.map(e=>[e.date,e.points])),r=new Map(t.map(e=>[e.date,e.points]));return[...new Set([...n.keys(),...r.keys()])].sort((e,t)=>e.localeCompare(t)).map(e=>({date:e,ideal:n.has(e)?n.get(e):null,actual:r.has(e)?r.get(e):null}))}var S=!0,C=`uplot`,w=`u-hz`,T=`u-vt`,E=`u-title`,D=`u-wrap`,O=`u-under`,ee=`u-over`,te=`u-axis`,k=`u-off`,ne=`u-select`,re=`u-cursor-x`,ie=`u-cursor-y`,ae=`u-cursor-pt`,oe=`u-legend`,se=`u-live`,ce=`u-inline`,le=`u-series`,ue=`u-marker`,de=`u-label`,fe=`u-value`,A=`width`,pe=`height`,me=`top`,he=`bottom`,ge=`left`,_e=`right`,ve=`#000`,ye=`#0000`,be=`mousemove`,xe=`mousedown`,Se=`mouseup`,Ce=`mouseenter`,we=`mouseleave`,Te=`dblclick`,Ee=`resize`,De=`scroll`,Oe=`change`,ke=`dppxchange`,Ae=`--`,j=typeof window<`u`,je=j?document:null,Me=j?window:null,Ne=j?navigator:null,M,Pe;function Fe(){let e=devicePixelRatio;M!=e&&(M=e,Pe&&Je(Oe,Pe,Fe),Pe=matchMedia(`(min-resolution: ${M-.001}dppx) and (max-resolution: ${M+.001}dppx)`),qe(Oe,Pe,Fe),Me.dispatchEvent(new CustomEvent(ke)))}function Ie(e,t){if(t!=null){let n=e.classList;!n.contains(t)&&n.add(t)}}function Le(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function N(e,t,n){e.style[t]=n+`px`}function Re(e,t,n,r){let i=je.createElement(e);return t!=null&&Ie(i,t),n?.insertBefore(i,r),i}function ze(e,t){return Re(`div`,e,t)}var P=new WeakMap;function Be(e,t,n,r,i){let a=`translate(`+t+`px,`+n+`px)`;a!=P.get(e)&&(e.style.transform=a,P.set(e,a),t<0||n<0||t>r||n>i?Ie(e,k):Le(e,k))}var Ve=new WeakMap;function He(e,t,n){let r=t+n;r!=Ve.get(e)&&(Ve.set(e,r),e.style.background=t,e.style.borderColor=n)}var Ue=new WeakMap;function We(e,t,n,r){let i=t+``+n;i!=Ue.get(e)&&(Ue.set(e,i),e.style.height=n+`px`,e.style.width=t+`px`,e.style.marginLeft=r?-t/2+`px`:0,e.style.marginTop=r?-n/2+`px`:0)}var Ge={passive:!0},Ke={...Ge,capture:!0};function qe(e,t,n,r){t.addEventListener(e,n,r?Ke:Ge)}function Je(e,t,n,r){t.removeEventListener(e,n,Ge)}j&&Fe();function Ye(e,t,n,r){let i;n||=0,r||=t.length-1;let a=r<=2147483647;for(;r-n>1;)i=a?n+r>>1:ft((n+r)/2),t[i]<e?n=i:r=i;return e-t[n]<=t[r]-e?n:r}function Xe(e){return(t,n,r)=>{let i=-1,a=-1;for(let a=n;a<=r;a++)if(e(t[a])){i=a;break}for(let i=r;i>=n;i--)if(e(t[i])){a=i;break}return[i,a]}}var Ze=e=>e!=null,F=e=>e!=null&&e>0,I=Xe(Ze),Qe=Xe(F);function $e(e,t,n,r=0,i=!1){let a=i?Qe:I,o=i?F:Ze;[t,n]=a(e,t,n);let s=e[t],c=e[t];if(t>-1){if(r==1)s=e[t],c=e[n];else if(r==-1)s=e[n],c=e[t];else for(let r=t;r<=n;r++){let t=e[r];o(t)&&(t<s?s=t:t>c&&(c=t))}}return[s??V,c??-V]}function et(e,t,n,r){let i=_t(e),a=_t(t);e==t&&(i==-1?(e*=n,t/=n):(e/=n,t*=n));let o=n==10?vt:yt,s=i==1?ft:pt,c=a==1?pt:ft,l=s(o(z(e))),u=c(o(z(t))),d=gt(n,l),f=gt(n,u);return n==10&&(l<0&&(d=U(d,-l)),u<0&&(f=U(f,-u))),r||n==2?(e=d*i,t=f*a):(e=Ft(e,d),t=Pt(t,f)),[e,t]}function tt(e,t,n,r){let i=et(e,t,n,r);return e==0&&(i[0]=0),t==0&&(i[1]=0),i}var nt=.1,rt={mode:3,pad:nt},it={pad:0,soft:null,mode:0},at={min:it,max:it};function ot(e,t,n,r){return Kt(n)?ct(e,t,n):(it.pad=n,it.soft=r?0:null,it.mode=r?3:0,ct(e,t,at))}function L(e,t){return e??t}function st(e,t,n){for(t=L(t,0),n=L(n,e.length-1);t<=n;){if(e[t]!=null)return!0;t++}return!1}function ct(e,t,n){let r=n.min,i=n.max,a=L(r.pad,0),o=L(i.pad,0),s=L(r.hard,-V),c=L(i.hard,V),l=L(r.soft,V),u=L(i.soft,-V),d=L(r.mode,0),f=L(i.mode,0),p=t-e,m=vt(p),h=ht(z(e),z(t)),g=z(vt(h)-m);(p<1e-24||g>10)&&(p=0,(e==0||t==0)&&(p=1e-24,d==2&&l!=V&&(a=0),f==2&&u!=-V&&(o=0)));let _=p||h||1e3,v=gt(10,ft(vt(_))),y=U(Ft(e-_*(p==0?e==0?.1:1:a),v/10),24),b=e>=l&&(d==1||d==3&&y<=l||d==2&&y>=l)?l:V,x=ht(s,y<b&&e>=b?b:mt(b,y)),S=U(Pt(t+_*(p==0?t==0?.1:1:o),v/10),24),C=t<=u&&(f==1||f==3&&S>=u||f==2&&S<=u)?u:-V,w=mt(c,S>C&&t<=C?C:ht(C,S));return x==w&&x==0&&(w=100),[x,w]}var lt=new Intl.NumberFormat(j?Ne.language:`en-US`),ut=e=>lt.format(e),R=Math,dt=R.PI,z=R.abs,ft=R.floor,B=R.round,pt=R.ceil,mt=R.min,ht=R.max,gt=R.pow,_t=R.sign,vt=R.log10,yt=R.log2,bt=(e,t=1)=>R.sinh(e)*t,xt=(e,t=1)=>R.asinh(e/t),V=1/0;function St(e){return(vt((e^e>>31)-(e>>31))|0)+1}function Ct(e,t,n){return mt(ht(e,t),n)}function wt(e){return typeof e==`function`}function H(e){return wt(e)?e:()=>e}var Tt=()=>{},Et=e=>e,Dt=(e,t)=>t,Ot=e=>null,kt=e=>!0,At=(e,t)=>e==t,jt=/\.\d*?(?=9{6,}|0{6,})/gm,Mt=e=>{if(Ut(e)||It.has(e))return e;let t=`${e}`,n=t.match(jt);if(n==null)return e;let r=n[0].length-1;if(t.indexOf(`e-`)!=-1){let[e,n]=t.split(`e`);return+`${Mt(e)}e${n}`}return U(e,r)};function Nt(e,t){return Mt(U(Mt(e/t))*t)}function Pt(e,t){return Mt(pt(Mt(e/t))*t)}function Ft(e,t){return Mt(ft(Mt(e/t))*t)}function U(e,t=0){if(Ut(e))return e;let n=10**t;return B(e*n*(1+2**-52))/n}var It=new Map;function Lt(e){return((``+e).split(`.`)[1]||``).length}function Rt(e,t,n,r){let i=[],a=r.map(Lt);for(let o=t;o<n;o++){let t=z(o),n=U(gt(e,o),t);for(let s=0;s<r.length;s++){let c=e==10?+`${r[s]}e${o}`:r[s]*n,l=(o>=0?0:t)+(o>=a[s]?0:a[s]),u=e==10?c:U(c,l);i.push(u),It.set(u,l)}}return i}var zt={},Bt=[],Vt=[null,null],Ht=Array.isArray,Ut=Number.isInteger,Wt=e=>e===void 0;function Gt(e){return typeof e==`string`}function Kt(e){let t=!1;if(e!=null){let n=e.constructor;t=n==null||n==Object}return t}function qt(e){return typeof e==`object`&&!!e}var Jt=Object.getPrototypeOf(Uint8Array),W=`__proto__`;function Yt(e,t=Kt){let n;if(Ht(e)){let r=e.find(e=>e!=null);if(Ht(r)||t(r)){n=Array(e.length);for(let r=0;r<e.length;r++)n[r]=Yt(e[r],t)}else n=e.slice()}else if(e instanceof Jt)n=e.slice();else if(t(e)){n={};for(let r in e)r!=W&&(n[r]=Yt(e[r],t))}else n=e;return n}function G(e){let t=arguments;for(let n=1;n<t.length;n++){let r=t[n];for(let t in r)t!=W&&(Kt(e[t])?G(e[t],Yt(r[t])):e[t]=Yt(r[t]))}return e}var K=0,Xt=1,Zt=2;function Qt(e,t,n){for(let r=0,i,a=-1;r<t.length;r++){let o=t[r];if(o>a){for(i=o-1;i>=0&&e[i]==null;)e[i--]=null;for(i=o+1;i<n&&e[i]==null;)e[a=i++]=null}}}function $t(e,t){if(nn(e)){let t=e[0].slice();for(let n=1;n<e.length;n++)t.push(...e[n].slice(1));return rn(t[0])||(t=tn(t)),t}let n=new Set;for(let t=0;t<e.length;t++){let r=e[t][0],i=r.length;for(let e=0;e<i;e++)n.add(r[e])}let r=[Array.from(n).sort((e,t)=>e-t)],i=r[0].length,a=new Map;for(let e=0;e<i;e++)a.set(r[0][e],e);for(let n=0;n<e.length;n++){let o=e[n],s=o[0];for(let e=1;e<o.length;e++){let c=o[e],l=Array(i).fill(void 0),u=t?t[n][e]:Xt,d=[];for(let e=0;e<c.length;e++){let t=c[e],n=a.get(s[e]);t===null?u!=K&&(l[n]=t,u==Zt&&d.push(n)):l[n]=t}Qt(l,d,i),r.push(l)}}return r}var en=typeof queueMicrotask>`u`?e=>Promise.resolve().then(e):queueMicrotask;function tn(e){let t=e[0],n=t.length,r=Array(n);for(let e=0;e<r.length;e++)r[e]=e;r.sort((e,n)=>t[e]-t[n]);let i=[];for(let t=0;t<e.length;t++){let a=e[t],o=Array(n);for(let e=0;e<n;e++)o[e]=a[r[e]];i.push(o)}return i}function nn(e){let t=e[0][0],n=t.length;for(let r=1;r<e.length;r++){let i=e[r][0];if(i.length!=n)return!1;if(i!=t){for(let e=0;e<n;e++)if(i[e]!=t[e])return!1}}return!0}function rn(e,t=100){let n=e.length;if(n<=1)return!0;let r=0,i=n-1;for(;r<=i&&e[r]==null;)r++;for(;i>=r&&e[i]==null;)i--;if(i<=r)return!0;let a=ht(1,ft((i-r+1)/t));for(let t=e[r],n=r+a;n<=i;n+=a){let r=e[n];if(r!=null){if(r<=t)return!1;t=r}}return!0}var an=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],on=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function sn(e){return e.slice(0,3)}var cn=on.map(sn),ln={MMMM:an,MMM:an.map(sn),WWWW:on,WWW:cn};function un(e){return(e<10?`0`:``)+e}function dn(e){return(e<10?`00`:e<100?`0`:``)+e}var fn={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+``).slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>un(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>un(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>un(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return t==0?12:t>12?t-12:t},AA:e=>e.getHours()>=12?`PM`:`AM`,aa:e=>e.getHours()>=12?`pm`:`am`,a:e=>e.getHours()>=12?`p`:`a`,mm:e=>un(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>un(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>dn(e.getMilliseconds())};function pn(e,t){t||=ln;let n=[],r=/\{([a-z]+)\}|[^{]+/gi,i;for(;i=r.exec(e);)n.push(i[0][0]==`{`?fn[i[1]]:i[0]);return e=>{let r=``;for(let i=0;i<n.length;i++)r+=typeof n[i]==`string`?n[i]:n[i](e,t);return r}}var mn=new Intl.DateTimeFormat().resolvedOptions().timeZone;function hn(e,t){let n;return t==`UTC`||t==`Etc/UTC`?n=new Date(+e+e.getTimezoneOffset()*6e4):t==mn?n=e:(n=new Date(e.toLocaleString(`en-US`,{timeZone:t})),n.setMilliseconds(e.getMilliseconds())),n}var gn=e=>e%1==0,_n=[1,2,2.5,5],vn=Rt(10,-32,0,_n),yn=Rt(10,0,32,_n),bn=yn.filter(gn),xn=vn.concat(yn),Sn=`
|
|
2
|
+
`,Cn=`{YYYY}`,wn=Sn+Cn,Tn=`{M}/{D}`,En=Sn+Tn,Dn=En+`/{YY}`,On=`{aa}`,kn=`{h}:{mm}`+On,An=Sn+kn,jn=`:{ss}`,q=null;function Mn(e){let t=e*1e3,n=t*60,r=n*60,i=r*24,a=i*30,o=i*365,s=(e==1?Rt(10,0,3,_n).filter(gn):Rt(10,-3,0,_n)).concat([t,t*5,t*10,t*15,t*30,n,n*5,n*10,n*15,n*30,r,r*2,r*3,r*4,r*6,r*8,r*12,i,i*2,i*3,i*4,i*5,i*6,i*7,i*8,i*9,i*10,i*15,a,a*2,a*3,a*4,a*6,o,o*2,o*5,o*10,o*25,o*50,o*100]),c=[[o,Cn,q,q,q,q,q,q,1],[i*28,`{MMM}`,wn,q,q,q,q,q,1],[i,Tn,wn,q,q,q,q,q,1],[r,`{h}`+On,Dn,q,En,q,q,q,1],[n,kn,Dn,q,En,q,q,q,1],[t,jn,Dn+` `+kn,q,En+` `+kn,q,An,q,1],[e,jn+`.{fff}`,Dn+` `+kn,q,En+` `+kn,q,An,q,1]];function l(t){return(s,c,l,u,d,f)=>{let p=[],m=d>=o,h=d>=a&&d<o,g=t(l),_=U(g*e,3),v=Hn(g.getFullYear(),m?0:g.getMonth(),h||m?1:g.getDate()),y=U(v*e,3);if(h||m){let n=h?d/a:0,r=m?d/o:0,i=_==y?_:U(Hn(v.getFullYear()+r,v.getMonth()+n,1)*e,3),s=new Date(B(i/e)),c=s.getFullYear(),l=s.getMonth();for(let a=0;i<=u;a++){let o=Hn(c+r*a,l+n*a,1),s=o-t(U(o*e,3));i=U((+o+s)*e,3),i<=u&&p.push(i)}}else{let a=d>=i?i:d,o=y+(ft(l)-ft(_))+Pt(_-y,a);p.push(o);let m=t(o),h=m.getHours()+m.getMinutes()/n+m.getSeconds()/r,g=d/r,v=f/s.axes[c]._space;for(;o=U(o+d,e==1?0:3),!(o>u);)if(g>1){let e=ft(U(h+g,6))%24,n=t(o).getHours()-e;n>1&&(n=-1),o-=n*r,h=(h+g)%24;let i=p[p.length-1];U((o-i)/d,3)*v>=.7&&p.push(o)}else p.push(o)}return p}}return[s,c,l]}var[Nn,Pn,Fn]=Mn(1),[In,Ln,Rn]=Mn(.001);Rt(2,-53,53,[1]);function zn(e,t){return e.map(e=>e.map((n,r)=>r==0||r==8||n==null?n:t(r==1||e[8]==0?n:e[1]+n)))}function Bn(e,t){return(n,r,i,a,o)=>{let s=t.find(e=>o>=e[0])||t[t.length-1],c,l,u,d,f,p;return r.map(t=>{let n=e(t),r=n.getFullYear(),i=n.getMonth(),a=n.getDate(),o=n.getHours(),m=n.getMinutes(),h=n.getSeconds(),g=r!=c&&s[2]||i!=l&&s[3]||a!=u&&s[4]||o!=d&&s[5]||m!=f&&s[6]||h!=p&&s[7]||s[1];return c=r,l=i,u=a,d=o,f=m,p=h,g(n)})}}function Vn(e,t){let n=pn(t);return(t,r,i,a,o)=>r.map(t=>n(e(t)))}function Hn(e,t,n){return new Date(e,t,n)}function Un(e,t){return t(e)}var Wn=`{YYYY}-{MM}-{DD} {h}:{mm}{aa}`;function Gn(e,t){return(n,r,i,a)=>a==null?Ae:t(e(r))}function Kn(e,t){let n=e.series[t];return n.width?n.stroke(e,t):n.points.width?n.points.stroke(e,t):null}function qn(e,t){return e.series[t].fill(e,t)}var Jn={show:!0,live:!0,isolate:!1,mount:Tt,markers:{show:!0,width:2,stroke:Kn,fill:qn,dash:`solid`},idx:null,idxs:null,values:[]};function Yn(e,t){let n=e.cursor.points,r=ze(),i=n.size(e,t);N(r,A,i),N(r,pe,i);let a=i/-2;N(r,`marginLeft`,a),N(r,`marginTop`,a);let o=n.width(e,t,i);return o&&N(r,`borderWidth`,o),r}function Xn(e,t){let n=e.series[t].points;return n._fill||n._stroke}function Zn(e,t){let n=e.series[t].points;return n._stroke||n._fill}function Qn(e,t){return e.series[t].points.size}var J=[0,0];function Y(e,t,n){return J[0]=t,J[1]=n,J}function $n(e,t,n,r=!0){return e=>{e.button==0&&(!r||e.target==t)&&n(e)}}function er(e,t,n,r=!0){return e=>{(!r||e.target==t)&&n(e)}}var tr={show:!0,x:!0,y:!0,lock:!1,move:Y,points:{one:!1,show:Yn,size:Qn,width:0,stroke:Zn,fill:Xn},bind:{mousedown:$n,mouseup:$n,click:$n,dblclick:$n,mousemove:er,mouseleave:er,mouseenter:er},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,t)=>{t.stopPropagation(),t.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,t,n,r,i)=>r-i,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},nr={show:!0,stroke:`rgba(0,0,0,0.07)`,width:2},rr=G({},nr,{filter:Dt}),ir=G({},rr,{size:10}),ar=G({},nr,{show:!1}),or=`12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`,sr=`bold `+or,cr=1.5,lr={show:!0,scale:`x`,stroke:ve,space:50,gap:5,alignTo:1,size:50,labelGap:0,labelSize:30,labelFont:sr,side:2,grid:rr,ticks:ir,border:ar,font:or,lineGap:cr,rotate:0},ur=`Value`,dr=`Time`,fr={show:!0,scale:`x`,auto:!1,sorted:1,min:V,max:-1/0,idxs:[]};function pr(e,t,n,r,i){return t.map(e=>e==null?``:ut(e))}function mr(e,t,n,r,i,a,o){let s=[],c=It.get(i)||0;n=o?n:U(Pt(n,i),c);for(let e=n;e<=r;e=U(e+i,c))s.push(Object.is(e,-0)?0:e);return s}function hr(e,t,n,r,i,a,o){let s=[],c=e.scales[e.axes[t].scale].log;i=gt(c,ft((c==10?vt:yt)(n))),c==10&&(i=xn[Ye(i,xn)]);let l=n,u=i*c;c==10&&(u=xn[Ye(u,xn)]);do s.push(l),l+=i,c==10&&!It.has(l)&&(l=U(l,It.get(i))),l>=u&&(i=l,u=i*c,c==10&&(u=xn[Ye(u,xn)]));while(l<=r);return s}function gr(e,t,n,r,i,a,o){let s=e.scales[e.axes[t].scale].asinh,c=r>s?hr(e,t,ht(s,n),r,i):[s],l=r>=0&&n<=0?[0]:[];return(n<-s?hr(e,t,ht(s,-r),-n,i):[s]).reverse().map(e=>-e).concat(l,c)}var _r=/./,vr=/[12357]/,yr=/[125]/,br=/1/,xr=(e,t,n,r)=>e.map((e,i)=>t==4&&e==0||i%r==0&&n.test(e.toExponential()[+(e<0)])?e:null);function Sr(e,t,n,r,i){let a=e.axes[n],o=a.scale,s=e.scales[o],c=e.valToPos,l=a._space,u=c(10,o),d=c(9,o)-u>=l?_r:c(7,o)-u>=l?vr:c(5,o)-u>=l?yr:br;if(d==br){let e=z(c(1,o)-u);if(e<l)return xr(t.slice().reverse(),s.distr,d,pt(l/e)).reverse()}return xr(t,s.distr,d,1)}function Cr(e,t,n,r,i){let a=e.axes[n],o=a.scale,s=a._space,c=e.valToPos,l=z(c(1,o)-c(2,o));return l<s?xr(t.slice().reverse(),3,_r,pt(s/l)).reverse():t}function wr(e,t,n,r){return r==null?Ae:t==null?``:ut(t)}var Tr={show:!0,scale:`y`,stroke:ve,space:30,gap:5,alignTo:1,size:50,labelGap:0,labelSize:30,labelFont:sr,side:3,grid:rr,ticks:ir,border:ar,font:or,lineGap:cr,rotate:0};function Er(e,t){return U((3+(e||1)*2)*t,3)}function Dr(e,t){let{scale:n,idxs:r}=e.series[0],i=e._data[0],a=e.valToPos(i[r[0]],n,!0),o=z(e.valToPos(i[r[1]],n,!0)-a)/(e.series[t].points.space*M);return r[1]-r[0]<=o}var Or={scale:null,auto:!0,sorted:0,min:V,max:-1/0},kr=(e,t,n,r,i)=>i,Ar={show:!0,auto:!0,sorted:0,gaps:kr,alpha:1,facets:[G({},Or,{scale:`x`}),G({},Or,{scale:`y`})]},jr={scale:`y`,auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:kr,alpha:1,points:{show:Dr,filter:null},values:null,min:V,max:-1/0,idxs:[],path:null,clip:null};function Mr(e,t,n,r,i){return n/10}var Nr={time:S,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},Pr=G({},Nr,{time:!1,ori:1}),Fr={};function Ir(e,t){let n=Fr[e];return n||(n={key:e,plots:[],sub(e){n.plots.push(e)},unsub(e){n.plots=n.plots.filter(t=>t!=e)},pub(e,t,r,i,a,o,s){for(let c=0;c<n.plots.length;c++)n.plots[c]!=t&&n.plots[c].pub(e,t,r,i,a,o,s)}},e!=null&&(Fr[e]=n)),n}var Lr=1,Rr=2;function zr(e,t,n){let r=e.mode,i=e.series[t],a=r==2?e._data[t]:e._data,o=e.scales,s=e.bbox,c=a[0],l=r==2?a[1]:a[t],u=r==2?o[i.facets[0].scale]:o[e.series[0].scale],d=r==2?o[i.facets[1].scale]:o[i.scale],f=s.left,p=s.top,m=s.width,h=s.height,g=e.valToPosH,_=e.valToPosV;return u.ori==0?n(i,c,l,u,d,g,_,f,p,m,h,Jr,Xr,Qr,ei,ni):n(i,c,l,u,d,_,g,p,f,h,m,Yr,Zr,$r,ti,ri)}function Br(e,t){let n=0,r=0,i=L(e.bands,Bt);for(let e=0;e<i.length;e++){let a=i[e];a.series[0]==t?n=a.dir:a.series[1]==t&&(a.dir==1?r|=1:r|=2)}return[n,r==1?-1:r==2?1:r==3?2:0]}function Vr(e,t,n,r,i){let a=e.mode,o=e.series[t],s=a==2?o.facets[1].scale:o.scale,c=e.scales[s];return i==-1?c.min:i==1?c.max:c.distr==3?c.dir==1?c.min:c.max:0}function Hr(e,t,n,r,i,a){return zr(e,t,(e,t,o,s,c,l,u,d,f,p,m)=>{let h=e.pxRound,g=s.dir*(s.ori==0?1:-1),_=s.ori==0?Xr:Zr,v,y;g==1?(v=n,y=r):(v=r,y=n);let b=h(l(t[v],s,p,d)),x=h(u(o[v],c,m,f)),S=h(l(t[y],s,p,d)),C=h(u(a==1?c.max:c.min,c,m,f)),w=new Path2D(i);return _(w,S,C),_(w,b,C),_(w,b,x),w})}function Ur(e,t,n,r,i,a){let o=null;if(e.length>0){o=new Path2D;let s=t==0?Qr:$r,c=n;for(let t=0;t<e.length;t++){let n=e[t];if(n[1]>n[0]){let e=n[0]-c;e>0&&s(o,c,r,e,r+a),c=n[1]}}let l=n+i-c;l>0&&s(o,c,r-5,l,r+a+10)}return o}function Wr(e,t,n){let r=e[e.length-1];r&&r[0]==t?r[1]=n:e.push([t,n])}function Gr(e,t,n,r,i,a,o){let s=[],c=e.length;for(let l=i==1?n:r;l>=n&&l<=r;l+=i)if(t[l]===null){let u=l,d=l;if(i==1)for(;++l<=r&&t[l]===null;)d=l;else for(;--l>=n&&t[l]===null;)d=l;let f=a(e[u]),p=d==u?f:a(e[d]),m=u-i;f=o<=0&&m>=0&&m<c?a(e[m]):f;let h=d+i;p=o>=0&&h>=0&&h<c?a(e[h]):p,p>=f&&s.push([f,p])}return s}function Kr(e){return e==0?Et:e==1?B:t=>Nt(t,e)}function qr(e){let t=e==0?Jr:Yr,n=e==0?(e,t,n,r,i,a)=>{e.arcTo(t,n,r,i,a)}:(e,t,n,r,i,a)=>{e.arcTo(n,t,i,r,a)},r=e==0?(e,t,n,r,i)=>{e.rect(t,n,r,i)}:(e,t,n,r,i)=>{e.rect(n,t,i,r)};return(e,i,a,o,s,c=0,l=0)=>{c==0&&l==0?r(e,i,a,o,s):(c=mt(c,o/2,s/2),l=mt(l,o/2,s/2),t(e,i+c,a),n(e,i+o,a,i+o,a+s,c),n(e,i+o,a+s,i,a+s,l),n(e,i,a+s,i,a,l),n(e,i,a,i+o,a,c),e.closePath())}}var Jr=(e,t,n)=>{e.moveTo(t,n)},Yr=(e,t,n)=>{e.moveTo(n,t)},Xr=(e,t,n)=>{e.lineTo(t,n)},Zr=(e,t,n)=>{e.lineTo(n,t)},Qr=qr(0),$r=qr(1),ei=(e,t,n,r,i,a)=>{e.arc(t,n,r,i,a)},ti=(e,t,n,r,i,a)=>{e.arc(n,t,r,i,a)},ni=(e,t,n,r,i,a,o)=>{e.bezierCurveTo(t,n,r,i,a,o)},ri=(e,t,n,r,i,a,o)=>{e.bezierCurveTo(n,t,i,r,o,a)};function ii(e){return(e,t,n,r,i)=>zr(e,t,(t,a,o,s,c,l,u,d,f,p,m)=>{let{pxRound:h,points:g}=t,_,v;s.ori==0?(_=Jr,v=ei):(_=Yr,v=ti);let y=U(g.width*M,3),b=(g.size-g.width)/2*M,x=U(b*2,3),S=new Path2D,C=new Path2D,{left:w,top:T,width:E,height:D}=e.bbox;Qr(C,w-x,T-x,E+x*2,D+x*2);let O=e=>{if(o[e]!=null){let t=h(l(a[e],s,p,d)),n=h(u(o[e],c,m,f));_(S,t+b,n),v(S,t,n,b,0,dt*2)}};if(i)i.forEach(O);else for(let e=n;e<=r;e++)O(e);return{stroke:y>0?S:null,fill:S,clip:C,flags:3}})}function ai(e){return(t,n,r,i,a,o)=>{r!=i&&(a!=r&&o!=r&&e(t,n,r),a!=i&&o!=i&&e(t,n,i),e(t,n,o))}}var oi=ai(Xr),si=ai(Zr);function ci(e){let t=L(e?.alignGaps,0);return(e,n,r,i)=>zr(e,n,(a,o,s,c,l,u,d,f,p,m,h)=>{[r,i]=I(s,r,i);let g=a.pxRound,_=e=>g(u(e,c,m,f)),v=e=>g(d(e,l,h,p)),y,b;c.ori==0?(y=Xr,b=oi):(y=Zr,b=si);let x=c.dir*(c.ori==0?1:-1),S={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Lr},C=S.stroke,w=!1;if(i-r>=m*4){let t=t=>e.posToVal(t,c.key,!0),n=null,a=null,l,u,d,f=_(o[x==1?r:i]),p=_(o[r]),m=_(o[i]),h=t(x==1?p+1:m-1);for(let e=x==1?r:i;e>=r&&e<=i;e+=x){let r=o[e],i=(x==1?r<h:r>h)?f:_(r),c=s[e];i==f?c==null?c===null&&(w=!0):(u=c,n==null?(y(C,i,v(u)),l=n=a=u):u<n?n=u:u>a&&(a=u)):(n!=null&&b(C,f,v(n),v(a),v(l),v(u)),c==null?(n=a=null,c===null&&(w=!0)):(u=c,y(C,i,v(u)),n=a=l=u),f=i,h=t(f+x))}n!=null&&n!=a&&d!=f&&b(C,f,v(n),v(a),v(l),v(u))}else for(let e=x==1?r:i;e>=r&&e<=i;e+=x){let t=s[e];t===null?w=!0:t!=null&&y(C,_(o[e]),v(t))}let[T,E]=Br(e,n);if(a.fill!=null||T!=0){let t=S.fill=new Path2D(C),s=v(a.fillTo(e,n,a.min,a.max,T)),c=_(o[r]),l=_(o[i]);x==-1&&([l,c]=[c,l]),y(t,l,s),y(t,c,s)}if(!a.spanGaps){let l=[];w&&l.push(...Gr(o,s,r,i,x,_,t)),S.gaps=l=a.gaps(e,n,r,i,l),S.clip=Ur(l,c.ori,f,p,m,h)}return E!=0&&(S.band=E==2?[Hr(e,n,r,i,C,-1),Hr(e,n,r,i,C,1)]:Hr(e,n,r,i,C,E)),S})}function li(e){let t=L(e.align,1),n=L(e.ascDesc,!1),r=L(e.alignGaps,0),i=L(e.extend,!1);return(e,a,o,s)=>zr(e,a,(c,l,u,d,f,p,m,h,g,_,v)=>{[o,s]=I(u,o,s);let y=c.pxRound,{left:b,width:x}=e.bbox,S=e=>y(p(e,d,_,h)),C=e=>y(m(e,f,v,g)),w=d.ori==0?Xr:Zr,T={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Lr},E=T.stroke,D=d.dir*(d.ori==0?1:-1),O=C(u[D==1?o:s]),ee=S(l[D==1?o:s]),te=ee,k=ee;i&&t==-1&&(k=b,w(E,k,O)),w(E,ee,O);for(let e=D==1?o:s;e>=o&&e<=s;e+=D){let n=u[e];if(n==null)continue;let r=S(l[e]),i=C(n);t==1?w(E,r,O):w(E,te,i),w(E,r,i),O=i,te=r}let ne=te;i&&t==1&&(ne=b+x,w(E,ne,O));let[re,ie]=Br(e,a);if(c.fill!=null||re!=0){let t=T.fill=new Path2D(E),n=C(c.fillTo(e,a,c.min,c.max,re));w(t,ne,n),w(t,k,n)}if(!c.spanGaps){let i=[];i.push(...Gr(l,u,o,s,D,S,r));let f=c.width*M/2,p=n||t==1?f:-f,m=n||t==-1?-f:f;i.forEach(e=>{e[0]+=p,e[1]+=m}),T.gaps=i=c.gaps(e,a,o,s,i),T.clip=Ur(i,d.ori,h,g,_,v)}return ie!=0&&(T.band=ie==2?[Hr(e,a,o,s,E,-1),Hr(e,a,o,s,E,1)]:Hr(e,a,o,s,E,ie)),T})}function ui(e,t,n,r,i,a,o=V){if(e.length>1){let s=null;for(let c=0,l=1/0;c<e.length;c++)if(t[c]!==void 0){if(s!=null){let t=z(e[c]-e[s]);t<l&&(l=t,o=z(n(e[c],r,i,a)-n(e[s],r,i,a)))}s=c}}return o}function di(e){e||=zt;let t=L(e.size,[.6,V,1]),n=e.align||0,r=e.gap||0,i=e.radius;i=i==null?[0,0]:typeof i==`number`?[i,0]:i;let a=H(i),o=1-t[0],s=L(t[1],V),c=L(t[2],1),l=L(e.disp,zt),u=L(e.each,e=>{}),{fill:d,stroke:f}=l;return(e,t,i,p)=>zr(e,t,(m,h,g,_,v,y,b,x,S,C,w)=>{let T=m.pxRound,E=n,D=r*M,O=s*M,ee=c*M,te,k;_.ori==0?[te,k]=a(e,t):[k,te]=a(e,t);let ne=_.dir*(_.ori==0?1:-1),re=_.ori==0?Qr:$r,ie=_.ori==0?u:(e,t,n,r,i,a,o)=>{u(e,t,n,i,r,o,a)},ae=L(e.bands,Bt).find(e=>e.series[0]==t),oe=ae==null?0:ae.dir,se=m.fillTo(e,t,m.min,m.max,oe),ce=T(b(se,v,w,S)),le,ue,de,fe=C,A=T(m.width*M),pe=!1,me=null,he=null,ge=null,_e=null;d!=null&&(A==0||f!=null)&&(pe=!0,me=d.values(e,t,i,p),he=new Map,new Set(me).forEach(e=>{e!=null&&he.set(e,new Path2D)}),A>0&&(ge=f.values(e,t,i,p),_e=new Map,new Set(ge).forEach(e=>{e!=null&&_e.set(e,new Path2D)})));let{x0:ve,size:ye}=l;if(ve!=null&&ye!=null){E=1,h=ve.values(e,t,i,p),ve.unit==2&&(h=h.map(t=>e.posToVal(x+t*C,_.key,!0)));let n=ye.values(e,t,i,p);ue=ye.unit==2?n[0]*C:y(n[0],_,C,x)-y(0,_,C,x),fe=ui(h,g,y,_,C,x,fe),de=fe-ue+D}else fe=ui(h,g,y,_,C,x,fe),de=fe*o+D,ue=fe-de;de<1&&(de=0),A>=ue/2&&(A=0),de<5&&(T=Et);let be=de>0,xe=fe-de-(be?A:0);ue=T(Ct(xe,ee,O)),le=(E==0?ue/2:E==ne?0:ue)-E*ne*((E==0?D/2:0)+(be?A/2:0));let Se={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},Ce=pe?null:new Path2D,we=null;if(ae!=null)we=e.data[ae.series[1]];else{let{y0:n,y1:r}=l;n!=null&&r!=null&&(g=r.values(e,t,i,p),we=n.values(e,t,i,p))}let Te=te*ue,Ee=k*ue;for(let n=ne==1?i:p;n>=i&&n<=p;n+=ne){let r=g[n];if(r==null)continue;if(we!=null){let e=we[n]??0;if(r-e==0)continue;ce=b(e,v,w,S)}let i=y(_.distr!=2||l!=null?h[n]:n,_,C,x),a=b(L(r,se),v,w,S),o=T(i-le),s=T(ht(a,ce)),c=T(mt(a,ce)),u=s-c;if(r!=null){let i=r<0?Ee:Te,a=r<0?Te:Ee;pe?(A>0&&ge[n]!=null&&re(_e.get(ge[n]),o,c+ft(A/2),ue,ht(0,u-A),i,a),me[n]!=null&&re(he.get(me[n]),o,c+ft(A/2),ue,ht(0,u-A),i,a)):re(Ce,o,c+ft(A/2),ue,ht(0,u-A),i,a),ie(e,t,n,o-A/2,c,ue+A,u)}}return A>0?Se.stroke=pe?_e:Ce:pe||(Se._fill=m.width==0?m._fill:m._stroke??m._fill,Se.width=0),Se.fill=pe?he:Ce,Se})}function fi(e,t){let n=L(t?.alignGaps,0);return(t,r,i,a)=>zr(t,r,(o,s,c,l,u,d,f,p,m,h,g)=>{[i,a]=I(c,i,a);let _=o.pxRound,v=e=>_(d(e,l,h,p)),y=e=>_(f(e,u,g,m)),b,x,S;l.ori==0?(b=Jr,S=Xr,x=ni):(b=Yr,S=Zr,x=ri);let C=l.dir*(l.ori==0?1:-1),w=v(s[C==1?i:a]),T=w,E=[],D=[];for(let e=C==1?i:a;e>=i&&e<=a;e+=C)if(c[e]!=null){let t=s[e],n=v(t);E.push(T=n),D.push(y(c[e]))}let O={stroke:e(E,D,b,S,x,_),fill:null,clip:null,band:null,gaps:null,flags:Lr},ee=O.stroke,[te,k]=Br(t,r);if(o.fill!=null||te!=0){let e=O.fill=new Path2D(ee),n=y(o.fillTo(t,r,o.min,o.max,te));S(e,T,n),S(e,w,n)}if(!o.spanGaps){let e=[];e.push(...Gr(s,c,i,a,C,v,n)),O.gaps=e=o.gaps(t,r,i,a,e),O.clip=Ur(e,l.ori,p,m,h,g)}return k!=0&&(O.band=k==2?[Hr(t,r,i,a,ee,-1),Hr(t,r,i,a,ee,1)]:Hr(t,r,i,a,ee,k)),O})}function pi(e){return fi(mi,e)}function mi(e,t,n,r,i,a){let o=e.length;if(o<2)return null;let s=new Path2D;if(n(s,e[0],t[0]),o==2)r(s,e[1],t[1]);else{let n=Array(o),r=Array(o-1),a=Array(o-1),c=Array(o-1);for(let n=0;n<o-1;n++)a[n]=t[n+1]-t[n],c[n]=e[n+1]-e[n],r[n]=a[n]/c[n];n[0]=r[0];for(let e=1;e<o-1;e++)r[e]===0||r[e-1]===0||r[e-1]>0!=r[e]>0?n[e]=0:(n[e]=3*(c[e-1]+c[e])/((2*c[e]+c[e-1])/r[e-1]+(c[e]+2*c[e-1])/r[e]),isFinite(n[e])||(n[e]=0));n[o-1]=r[o-2];for(let r=0;r<o-1;r++)i(s,e[r]+c[r]/3,t[r]+n[r]*c[r]/3,e[r+1]-c[r]/3,t[r+1]-n[r+1]*c[r]/3,e[r+1],t[r+1])}return s}var hi=new Set;function gi(){for(let e of hi)e.syncRect(!0)}j&&(qe(Ee,Me,gi),qe(De,Me,gi,!0),qe(ke,Me,()=>{Mi.pxRatio=M}));var _i=ci(),vi=ii();function yi(e,t,n,r){return(r?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map((e,r)=>xi(e,r,t,n))}function bi(e,t){return e.map((e,n)=>n==0?{}:G({},t,e))}function xi(e,t,n,r){return G({},t==0?n:r,e)}function Si(e,t,n){return t==null?Vt:[t,n]}var Ci=Si;function wi(e,t,n){return t==null?Vt:ot(t,n,nt,!0)}function Ti(e,t,n,r){return t==null?Vt:et(t,n,e.scales[r].log,!1)}var Ei=Ti;function Di(e,t,n,r){return t==null?Vt:tt(t,n,e.scales[r].log,!1)}var Oi=Di;function ki(e,t,n,r,i){let a=ht(St(e),St(t)),o=t-e,s=Ye(i/r*o,n);do{let e=n[s],t=r*e/o;if(t>=i&&a+(e<5?It.get(e):0)<=17)return[e,t]}while(++s<n.length);return[0,0]}function Ai(e){let t,n;return e=e.replace(/(\d+)px/,(e,r)=>(t=B((n=+r)*M))+`px`),[e,t,n]}function ji(e){e.show&&[e.font,e.labelFont].forEach(e=>{let t=U(e[2]*M,1);e[0]=e[0].replace(/[0-9.]+px/,t+`px`),e[1]=t})}function Mi(e,t,n){let r={mode:L(e.mode,1)},i=r.mode;function a(e,t,n,r){let i=t.valToPct(e);return r+n*(t.dir==-1?1-i:i)}function o(e,t,n,r){let i=t.valToPct(e);return r+n*(t.dir==-1?i:1-i)}function s(e,t,n,r){return t.ori==0?a(e,t,n,r):o(e,t,n,r)}r.valToPosH=a,r.valToPosV=o;let c=!1;r.status=0;let l=r.root=ze(C);if(e.id!=null&&(l.id=e.id),Ie(l,e.class),e.title){let t=ze(E,l);t.textContent=e.title}let u=Re(`canvas`),d=r.ctx=u.getContext(`2d`),f=ze(D,l);qe(`click`,f,e=>{e.target===m&&(X!=Ni||Z!=Pi)&&Ri.click(r,e)},!0);let p=r.under=ze(O,f);f.appendChild(u);let m=r.over=ze(ee,f);e=Yt(e);let h=+L(e.pxAlign,1),g=Kr(h);(e.plugins||[]).forEach(t=>{t.opts&&(e=t.opts(r,e)||e)});let _=e.ms||.001,v=r.series=i==1?yi(e.series||[],fr,jr,!1):bi(e.series||[null],Ar),y=r.axes=yi(e.axes||[],lr,Tr,!0),b=r.scales={},x=r.bands=e.bands||[];x.forEach(e=>{e.fill=H(e.fill||null),e.dir=L(e.dir,-1)});let S=i==2?v[1].facets[0].scale:v[0].scale,ve={axes:ti,series:Ur},Ee=(e.drawOrder||[`axes`,`series`]).map(e=>ve[e]);function De(e){let t=e.distr==3?t=>vt(t>0?t:e.clamp(r,t,e.min,e.max,e.key)):e.distr==4?t=>xt(t,e.asinh):e.distr==100?t=>e.fwd(t):e=>e;return n=>{let r=t(n),{_min:i,_max:a}=e,o=a-i;return(r-i)/o}}function Oe(t){let n=b[t];if(n==null){let r=(e.scales||zt)[t]||zt;if(r.from!=null){Oe(r.from);let e=G({},b[r.from],r,{key:t});e.valToPct=De(e),b[t]=e}else{n=b[t]=G({},t==S?Nr:Pr,r),n.key=t;let e=n.time,a=n.range,o=Ht(a);if((t!=S||i==2&&!e)&&(o&&(a[0]==null||a[1]==null)&&(a={min:a[0]==null?rt:{mode:1,hard:a[0],soft:a[0]},max:a[1]==null?rt:{mode:1,hard:a[1],soft:a[1]}},o=!1),!o&&Kt(a))){let e=a;a=(t,n,r)=>n==null?Vt:ot(n,r,e)}n.range=H(a||(e?Ci:t==S?n.distr==3?Ei:n.distr==4?Oi:Si:n.distr==3?Ti:n.distr==4?Di:wi)),n.auto=H(!o&&n.auto),n.clamp=H(n.clamp||Mr),n._min=n._max=null,n.valToPct=De(n)}}}Oe(`x`),Oe(`y`),i==1&&v.forEach(e=>{Oe(e.scale)}),y.forEach(e=>{Oe(e.scale)});for(let t in e.scales)Oe(t);let j=b[S],Ne=j.distr,Pe,Fe;j.ori==0?(Ie(l,w),Pe=a,Fe=o):(Ie(l,T),Pe=o,Fe=a);let P={};for(let e in b){let t=b[e];(t.min!=null||t.max!=null)&&(P[e]={min:t.min,max:t.max},t.min=t.max=null)}let Ve=e.tzDate||(e=>new Date(B(e/_))),Ue=e.fmtDate||pn,Ge=_==1?Fn(Ve):Rn(Ve),Ke=Bn(Ve,zn(_==1?Pn:Ln,Ue)),Xe=Gn(Ve,Un(Wn,Ue)),Ze=[],F=r.legend=G({},Jn,e.legend),I=r.cursor=G({},tr,{drag:{y:i==2}},e.cursor),Qe=F.show,it=I.show,at=F.markers;F.idxs=Ze,at.width=H(at.width),at.dash=H(at.dash),at.stroke=H(at.stroke),at.fill=H(at.fill);let ct,lt,ut,R=[],ft=[],_t,yt=!1,St={};if(F.live){let e=v[1]?v[1].values:null;yt=e!=null,_t=yt?e(r,1,0):{_:0};for(let e in _t)St[e]=Ae}if(Qe){if(ct=Re(`table`,oe,l),ut=Re(`tbody`,null,ct),F.mount(r,ct),yt){lt=Re(`thead`,null,ct,ut);let e=Re(`tr`,null,lt);for(var Tt in Re(`th`,null,e),_t)Re(`th`,de,e).textContent=Tt}else Ie(ct,ce),F.live&&Ie(ct,se)}let Et={show:!0},jt={show:!1};function Mt(e,t){if(t==0&&(yt||!F.live||i==2))return Vt;let n=[],a=Re(`tr`,le,ut,ut.childNodes[t]);Ie(a,e.class),e.show||Ie(a,k);let o=Re(`th`,null,a);if(at.show){let e=ze(ue,o);if(t>0){let n=at.width(r,t);n&&(e.style.border=n+`px `+at.dash(r,t)+` `+at.stroke(r,t)),e.style.background=at.fill(r,t)}}let s=ze(de,o);for(var c in e.label instanceof HTMLElement?s.appendChild(e.label):s.textContent=e.label,t>0&&(at.show||(s.style.color=e.width>0?at.stroke(r,t):at.fill(r,t)),Ft(`click`,o,t=>{if(I._lock)return;Cn(t);let n=v.indexOf(e);if((t.ctrlKey||t.metaKey)!=F.isolate){let e=v.some((e,t)=>t>0&&t!=n&&e.show);v.forEach((t,r)=>{r>0&&Gi(r,e?r==n?Et:jt:Et,!0,$.setSeries)})}else Gi(n,{show:!e.show},!0,$.setSeries)},!1),En&&Ft(Ce,o,t=>{I._lock||(Cn(t),Gi(v.indexOf(e),$i,!0,$.setSeries))},!1)),_t){let e=Re(`td`,fe,a);e.textContent=`--`,n.push(e)}return[a,n]}let Pt=new Map;function Ft(e,t,n,i=!0){let a=Pt.get(t)||{},o=I.bind[e](r,t,n,i);o&&(qe(e,t,a[e]=o),Pt.set(t,a))}function Rt(e,t,n){let r=Pt.get(t)||{};for(let n in r)(e==null||n==e)&&(Je(n,t,r[n]),delete r[n]);e??Pt.delete(t)}let Ut=0,Jt=0,W=0,K=0,Xt=0,Zt=0,Qt=Xt,$t=Zt,tn=W,nn=K,rn=0,an=0,on=0,sn=0;r.bbox={};let cn=!1,ln=!1,un=!1,dn=!1,fn=!1,mn=!1;function hn(e,t,n){(n||e!=r.width||t!=r.height)&&gn(e,t),ni(!1),un=!0,ln=!0,si()}function gn(e,t){r.width=Ut=W=e,r.height=Jt=K=t,Xt=Zt=0,yn(),Sn();let n=r.bbox;rn=n.left=Nt(Xt*M,.5),an=n.top=Nt(Zt*M,.5),on=n.width=Nt(W*M,.5),sn=n.height=Nt(K*M,.5)}function _n(){let e=!1,t=0;for(;!e;){t++;let n=$r(t),i=ei(t);e=t==3||n&&i,e||(gn(r.width,r.height),ln=!0)}}function vn({width:e,height:t}){hn(e,t)}r.setSize=vn;function yn(){let e=!1,t=!1,n=!1,r=!1;y.forEach((i,a)=>{if(i.show&&i._show){let{side:a,_size:o}=i,s=a%2,c=o+(i.label==null?0:i.labelSize);c>0&&(s?(W-=c,a==3?(Xt+=c,r=!0):n=!0):(K-=c,a==0?(Zt+=c,e=!0):t=!0))}}),Kn[0]=e,Kn[1]=n,Kn[2]=t,Kn[3]=r,W-=Zn[1]+Zn[3],Xt+=Zn[3],K-=Zn[2]+Zn[0],Zt+=Zn[0]}function Sn(){let e=Xt+W,t=Zt+K,n=Xt,r=Zt;function i(i,a){switch(i){case 1:return e+=a,e-a;case 2:return t+=a,t-a;case 3:return n-=a,n+a;case 0:return r-=a,r+a}}y.forEach((e,t)=>{if(e.show&&e._show){let t=e.side;e._pos=i(t,e._size),e.label!=null&&(e._lpos=i(t,e.labelSize))}})}if(I.dataIdx==null){let e=I.hover,n=e.skip=new Set(e.skip??[]);n.add(void 0);let r=e.prox=H(e.prox),i=e.bias??=0;I.dataIdx=(e,a,o,s)=>{if(a==0)return o;let c=o,l=r(e,a,o,s)??V,u=l>=0&&l<V,d=j.ori==0?W:K,f=I.left,p=t[0],m=t[a];if(n.has(m[o])){c=null;let e=null,t=null,r;if(i==0||i==-1)for(r=o;e==null&&r-->0;)n.has(m[r])||(e=r);if(i==0||i==1)for(r=o;t==null&&r++<m.length;)n.has(m[r])||(t=r);if(e!=null||t!=null){if(u){let n=e==null?-1/0:Pe(p[e],j,d,0),r=t==null?1/0:Pe(p[t],j,d,0),i=f-n,a=r-f;i<=a?i<=l&&(c=e):a<=l&&(c=t)}else c=t==null?e:e==null?t:o-e<=t-o?e:t}}else u&&z(f-Pe(p[o],j,d,0))>l&&(c=null);return c}}let Cn=e=>{I.event=e};I.idxs=Ze,I._lock=!1;let wn=I.points;wn.show=H(wn.show),wn.size=H(wn.size),wn.stroke=H(wn.stroke),wn.width=H(wn.width),wn.fill=H(wn.fill);let Tn=r.focus=G({},e.focus||{alpha:.3},I.focus),En=Tn.prox>=0,Dn=En&&wn.one,On=[],kn=[],An=[];function jn(e,t){let n=wn.show(r,t);if(n instanceof HTMLElement)return Ie(n,ae),Ie(n,e.class),Be(n,-10,-10,W,K),m.insertBefore(n,On[t]),n}function q(e,t){if(i==1||t>0){let t=i==1&&b[e.scale].time,n=e.value;e.value=t?Gt(n)?Gn(Ve,Un(n,Ue)):n||Xe:n||wr,e.label=e.label||(t?dr:ur)}if(Dn||t>0){e.width=e.width==null?1:e.width,e.paths=e.paths||_i||Ot,e.fillTo=H(e.fillTo||Vr),e.pxAlign=+L(e.pxAlign,h),e.pxRound=Kr(e.pxAlign),e.stroke=H(e.stroke||null),e.fill=H(e.fill||null),e._stroke=e._fill=e._paths=e._focus=null;let t=Er(ht(1,e.width),1),n=e.points=G({},{size:t,width:ht(1,t*.2),stroke:e.stroke,space:t*2,paths:vi,_stroke:null,_fill:null},e.points);n.show=H(n.show),n.filter=H(n.filter),n.fill=H(n.fill),n.stroke=H(n.stroke),n.paths=H(n.paths),n.pxAlign=e.pxAlign}if(Qe){let n=Mt(e,t);R.splice(t,0,n[0]),ft.splice(t,0,n[1]),F.values.push(null)}if(it){Ze.splice(t,0,null);let n=null;Dn?t==0&&(n=jn(e,t)):t>0&&(n=jn(e,t)),On.splice(t,0,n),kn.splice(t,0,0),An.splice(t,0,0)}Oa(`addSeries`,t)}function Mn(e,t){t??=v.length,e=i==1?xi(e,t,fr,jr):xi(e,t,{},Ar),v.splice(t,0,e),q(v[t],t)}r.addSeries=Mn;function Hn(e){if(v.splice(e,1),Qe){F.values.splice(e,1),ft.splice(e,1);let t=R.splice(e,1)[0];Rt(null,t.firstChild),t.remove()}it&&(Ze.splice(e,1),On.splice(e,1)[0].remove(),kn.splice(e,1),An.splice(e,1)),Oa(`delSeries`,e)}r.delSeries=Hn;let Kn=[!1,!1,!1,!1];function qn(e,t){if(e._show=e.show,e.show){let n=e.side%2,i=b[e.scale];i??=(e.scale=n?v[1].scale:S,b[e.scale]);let a=i.time;e.size=H(e.size),e.space=H(e.space),e.rotate=H(e.rotate),Ht(e.incrs)&&e.incrs.forEach(e=>{!It.has(e)&&It.set(e,Lt(e))}),e.incrs=H(e.incrs||(i.distr==2?bn:a?_==1?Nn:In:xn)),e.splits=H(e.splits||(a&&i.distr==1?Ge:i.distr==3?hr:i.distr==4?gr:mr)),e.stroke=H(e.stroke),e.grid.stroke=H(e.grid.stroke),e.ticks.stroke=H(e.ticks.stroke),e.border.stroke=H(e.border.stroke);let o=e.values;e.values=Ht(o)&&!Ht(o[0])?H(o):a?Ht(o)?Bn(Ve,zn(o,Ue)):Gt(o)?Vn(Ve,o):o||Ke:o||pr,e.filter=H(e.filter||(i.distr>=3&&i.log==10?Sr:i.distr==3&&i.log==2?Cr:Dt)),e.font=Ai(e.font),e.labelFont=Ai(e.labelFont),e._size=e.size(r,null,t,0),e._space=e._rotate=e._incrs=e._found=e._splits=e._values=null,e._size>0&&(Kn[t]=!0,e._el=ze(te,f))}}function Yn(e,t,n,r){let[i,a,o,s]=n,c=t%2,l=0;return c==0&&(s||a)&&(l=t==0&&!i||t==2&&!o?B(lr.size/3):0),c==1&&(i||o)&&(l=t==1&&!a||t==3&&!s?B(Tr.size/2):0),l}let Xn=r.padding=(e.padding||[Yn,Yn,Yn,Yn]).map(e=>H(L(e,Yn))),Zn=r._padding=Xn.map((e,t)=>e(r,t,Kn,0)),Qn,J=null,Y=null,$n=i==1?v[0].idxs:null,er=null,nr=!1;function rr(e,n){if(t=e??[],r.data=r._data=t,i==2){Qn=0;for(let e=1;e<v.length;e++)Qn+=t[e][0].length}else{t.length==0&&(r.data=r._data=t=[[]]),er=t[0],Qn=er.length;let e=t;if(Ne==2){e=t.slice();let n=e[0]=Array(Qn);for(let e=0;e<Qn;e++)n[e]=e}r._data=t=e}if(ni(!0),Oa(`setData`),Ne==2&&(un=!0),n!==!1){let e=j;e.auto(r,nr)?ir():Wi(S,e.min,e.max),dn||=I.left>=0,mn=!0,si()}}r.setData=rr;function ir(){nr=!0;let e,n;i==1&&(Qn>0?(J=$n[0]=0,Y=$n[1]=Qn-1,e=t[0][J],n=t[0][Y],Ne==2?(e=J,n=Y):e==n&&(Ne==3?[e,n]=et(e,e,j.log,!1):Ne==4?[e,n]=tt(e,e,j.log,!1):j.time?n=e+B(86400/_):[e,n]=ot(e,n,nt,!0))):(J=$n[0]=e=null,Y=$n[1]=n=null)),Wi(S,e,n)}let ar,or,sr,cr,_r,vr,yr,br,xr,Dr;function Or(e,t,n,r,i,a){e??=ye,n??=Bt,r??=`butt`,i??=ye,a??=`round`,e!=ar&&(d.strokeStyle=ar=e),i!=or&&(d.fillStyle=or=i),t!=sr&&(d.lineWidth=sr=t),a!=_r&&(d.lineJoin=_r=a),r!=vr&&(d.lineCap=vr=r),n!=cr&&d.setLineDash(cr=n)}function kr(e,t,n,r){t!=or&&(d.fillStyle=or=t),e!=yr&&(d.font=yr=e),n!=br&&(d.textAlign=br=n),r!=xr&&(d.textBaseline=xr=r)}function Fr(e,t,n,i,a=0){if(i.length>0&&e.auto(r,nr)&&(t==null||t.min==null)){let t=L(J,0),r=L(Y,i.length-1),o=n.min==null?$e(i,t,r,a,e.distr==3):[n.min,n.max];e.min=mt(e.min,n.min=o[0]),e.max=ht(e.max,n.max=o[1])}}let zr={min:null,max:null};function Br(){for(let e in b){let t=b[e];P[e]==null&&(t.min==null||P[S]!=null&&t.auto(r,nr))&&(P[e]=zr)}for(let e in b){let t=b[e];P[e]==null&&t.from!=null&&P[t.from]!=null&&(P[e]=zr)}P[S]!=null&&ni(!0);let e={};for(let t in P){let n=P[t];if(n!=null){let a=e[t]=Yt(b[t],qt);if(n.min!=null)G(a,n);else if(t!=S||i==2){if(Qn==0&&a.from==null){let e=a.range(r,null,null,t);a.min=e[0],a.max=e[1]}else a.min=V,a.max=-1/0}}}if(Qn>0){v.forEach((n,a)=>{if(i==1){let i=n.scale,o=P[i];if(o==null)return;let s=e[i];if(a==0){let e=s.range(r,s.min,s.max,i);s.min=e[0],s.max=e[1],J=Ye(s.min,t[0]),Y=Ye(s.max,t[0]),Y-J>1&&(t[0][J]<s.min&&J++,t[0][Y]>s.max&&Y--),n.min=er[J],n.max=er[Y]}else n.show&&n.auto&&Fr(s,o,n,t[a],n.sorted);n.idxs[0]=J,n.idxs[1]=Y}else if(a>0&&n.show&&n.auto){let[r,i]=n.facets,o=r.scale,s=i.scale,[c,l]=t[a],u=e[o],d=e[s];u!=null&&Fr(u,P[o],r,c,r.sorted),d!=null&&Fr(d,P[s],i,l,i.sorted),n.min=i.min,n.max=i.max}});for(let t in e){let n=e[t],i=P[t];if(n.from==null&&(i==null||i.min==null)){let e=n.range(r,n.min==V?null:n.min,n.max==-1/0?null:n.max,t);n.min=e[0],n.max=e[1]}}}for(let t in e){let n=e[t];if(n.from!=null){let i=e[n.from];if(i.min==null)n.min=n.max=null;else{let e=n.range(r,i.min,i.max,t);n.min=e[0],n.max=e[1]}}}let n={},a=!1;for(let t in e){let r=e[t],i=b[t];if(i.min!=r.min||i.max!=r.max){i.min=r.min,i.max=r.max;let e=i.distr;i._min=e==3?vt(i.min):e==4?xt(i.min,i.asinh):e==100?i.fwd(i.min):i.min,i._max=e==3?vt(i.max):e==4?xt(i.max,i.asinh):e==100?i.fwd(i.max):i.max,n[t]=a=!0}}if(a){v.forEach((e,t)=>{i==2?t>0&&n.y&&(e._paths=null):n[e.scale]&&(e._paths=null)});for(let e in n)un=!0,Oa(`setScale`,e);it&&I.left>=0&&(dn=mn=!0)}for(let e in P)P[e]=null}function Hr(e){let t=Ct(J-1,0,Qn-1),n=Ct(Y+1,0,Qn-1);for(;e[t]==null&&t>0;)t--;for(;e[n]==null&&n<Qn-1;)n++;return[t,n]}function Ur(){if(Qn>0){let e=v.some(e=>e._focus)&&Dr!=Tn.alpha;e&&(d.globalAlpha=Dr=Tn.alpha),v.forEach((e,n)=>{if(n>0&&e.show&&(Wr(n,!1),Wr(n,!0),e._paths==null)){let a=Dr;Dr!=e.alpha&&(d.globalAlpha=Dr=e.alpha);let o=i==2?[0,t[n][0].length-1]:Hr(t[n]);e._paths=e.paths(r,n,o[0],o[1]),Dr!=a&&(d.globalAlpha=Dr=a)}}),v.forEach((e,t)=>{if(t>0&&e.show){let n=Dr;Dr!=e.alpha&&(d.globalAlpha=Dr=e.alpha),e._paths!=null&&Gr(t,!1);{let n=e._paths==null?null:e._paths.gaps,i=e.points.show(r,t,J,Y,n),a=e.points.filter(r,t,i,n);(i||a)&&(e.points._paths=e.points.paths(r,t,J,Y,a),Gr(t,!0))}Dr!=n&&(d.globalAlpha=Dr=n),Oa(`drawSeries`,t)}}),e&&(d.globalAlpha=Dr=1)}}function Wr(e,t){let n=t?v[e].points:v[e];n._stroke=n.stroke(r,e),n._fill=n.fill(r,e)}function Gr(e,t){let n=t?v[e].points:v[e],{stroke:r,fill:i,clip:a,flags:o,_stroke:s=n._stroke,_fill:c=n._fill,_width:l=n.width}=n._paths;l=U(l*M,3);let u=null,f=l%2/2;t&&c==null&&(c=l>0?`#fff`:s);let p=n.pxAlign==1&&f>0;if(p&&d.translate(f,f),!t){let e=rn-l/2,t=an-l/2,n=on+l,r=sn+l;u=new Path2D,u.rect(e,t,n,r)}t?Jr(s,l,n.dash,n.cap,c,r,i,o,a):qr(e,s,l,n.dash,n.cap,c,r,i,o,u,a),p&&d.translate(-f,-f)}function qr(e,n,i,a,o,s,c,l,u,d,f){let p=!1;u!=0&&x.forEach((m,h)=>{if(m.series[0]==e){let e=v[m.series[1]],g=t[m.series[1]],_=(e._paths||zt).band;Ht(_)&&(_=m.dir==1?_[0]:_[1]);let y,b=null;e.show&&_&&st(g,J,Y)?(b=m.fill(r,h)||s,y=e._paths.clip):_=null,Jr(n,i,a,o,b,c,l,u,d,f,y,_),p=!0}}),p||Jr(n,i,a,o,s,c,l,u,d,f)}function Jr(e,t,n,r,i,a,o,s,c,l,u,f){Or(e,t,n,r,i),(c||l||f)&&(d.save(),c&&d.clip(c),l&&d.clip(l)),f?(s&3)==3?(d.clip(f),u&&d.clip(u),Xr(i,o),Yr(e,a,t)):s&Rr?(Xr(i,o),d.clip(f),Yr(e,a,t)):s&Lr&&(d.save(),d.clip(f),u&&d.clip(u),Xr(i,o),d.restore(),Yr(e,a,t)):(Xr(i,o),Yr(e,a,t)),(c||l||f)&&d.restore()}function Yr(e,t,n){n>0&&(t instanceof Map?t.forEach((e,t)=>{d.strokeStyle=ar=t,d.stroke(e)}):t!=null&&e&&d.stroke(t))}function Xr(e,t){t instanceof Map?t.forEach((e,t)=>{d.fillStyle=or=t,d.fill(e)}):t!=null&&e&&d.fill(t)}function Zr(e,t,n,i){let a=y[e],o;if(i<=0)o=[0,0];else{let s=a._space=a.space(r,e,t,n,i);o=ki(t,n,a._incrs=a.incrs(r,e,t,n,i,s),i,s)}return a._found=o}function Qr(e,t,n,r,i,a,o,s,c,l){let u=o%2/2;h==1&&d.translate(u,u),Or(s,o,c,l,s),d.beginPath();let f,p,m,g,_=i+(r==0||r==3?-a:a);n==0?(p=i,g=_):(f=i,m=_);for(let r=0;r<e.length;r++)t[r]!=null&&(n==0?f=m=e[r]:p=g=e[r],d.moveTo(f,p),d.lineTo(m,g));d.stroke(),h==1&&d.translate(-u,-u)}function $r(e){let t=!0;return y.forEach((n,i)=>{if(!n.show)return;let a=b[n.scale];if(a.min==null){n._show&&(t=!1,n._show=!1,ni(!1));return}n._show||(t=!1,n._show=!0,ni(!1));let o=n.side,s=o%2,{min:c,max:l}=a,[u,d]=Zr(i,c,l,s==0?W:K);if(d==0)return;let f=a.distr==2,p=n._splits=n.splits(r,i,c,l,u,d,f),m=a.distr==2?p.map(e=>er[e]):p,h=a.distr==2?er[p[1]]-er[p[0]]:u,g=n._values=n.values(r,n.filter(r,m,i,d,h),i,d,h);n._rotate=o==2?n.rotate(r,g,i,d):0;let _=n._size;n._size=pt(n.size(r,g,i,e)),_!=null&&n._size!=_&&(t=!1)}),t}function ei(e){let t=!0;return Xn.forEach((n,i)=>{let a=n(r,i,Kn,e);a!=Zn[i]&&(t=!1),Zn[i]=a}),t}function ti(){for(let e=0;e<y.length;e++){let t=y[e];if(!t.show||!t._show)continue;let n=t.side,i=n%2,a,o,c=t.stroke(r,e),l=n==0||n==3?-1:1,[u,f]=t._found;if(t.label!=null){let s=t.labelGap*l,p=B((t._lpos+s)*M);kr(t.labelFont[0],c,`center`,n==2?me:he),d.save(),i==1?(a=o=0,d.translate(p,B(an+sn/2)),d.rotate((n==3?-dt:dt)/2)):(a=B(rn+on/2),o=p);let m=wt(t.label)?t.label(r,e,u,f):t.label;d.fillText(m,a,o),d.restore()}if(f==0)continue;let p=b[t.scale],m=i==0?on:sn,h=i==0?rn:an,_=t._splits,v=p.distr==2?_.map(e=>er[e]):_,x=p.distr==2?er[_[1]]-er[_[0]]:u,S=t.ticks,C=t.border,w=S.show?S.size:0,T=B(w*M),E=B((t.alignTo==2?t._size-w-t.gap:t.gap)*M),D=t._rotate*-dt/180,O=g(t._pos*M),ee=O+(T+E)*l;o=i==0?ee:0,a=i==1?ee:0;let te=t.font[0];kr(te,c,t.align==1?ge:t.align==2?_e:D>0?ge:D<0?_e:i==0?`center`:n==3?_e:ge,D||i==1?`middle`:n==2?me:he);let k=t.font[1]*t.lineGap,ne=_.map(e=>g(s(e,p,m,h))),re=t._values;for(let e=0;e<re.length;e++){let t=re[e];if(t!=null){i==0?a=ne[e]:o=ne[e],t=``+t;let n=t.indexOf(`
|
|
3
|
+
`)==-1?[t]:t.split(/\n/gm);for(let e=0;e<n.length;e++){let t=n[e];D?(d.save(),d.translate(a,o+e*k),d.rotate(D),d.fillText(t,0,0),d.restore()):d.fillText(t,a,o+e*k)}}}S.show&&Qr(ne,S.filter(r,v,e,f,x),i,n,O,T,U(S.width*M,3),S.stroke(r,e),S.dash,S.cap);let ie=t.grid;ie.show&&Qr(ne,ie.filter(r,v,e,f,x),i,i==0?2:1,i==0?an:rn,i==0?sn:on,U(ie.width*M,3),ie.stroke(r,e),ie.dash,ie.cap),C.show&&Qr([O],[1],+(i==0),i==0?1:2,i==1?an:rn,i==1?sn:on,U(C.width*M,3),C.stroke(r,e),C.dash,C.cap)}Oa(`drawAxes`)}function ni(e){v.forEach((t,n)=>{n>0&&(t._paths=null,e&&(i==1?(t.min=null,t.max=null):t.facets.forEach(e=>{e.min=null,e.max=null})))})}let ri=!1,ii=!1,ai=[];function oi(){ii=!1;for(let e=0;e<ai.length;e++)Oa(...ai[e]);ai.length=0}function si(){ri||=(en(li),!0)}function ci(e,t=!1){ri=!0,ii=t,e(r),li(),t&&ai.length>0&&queueMicrotask(oi)}r.batch=ci;function li(){if(cn&&=(Br(),!1),un&&=(_n(),!1),ln){if(N(p,ge,Xt),N(p,me,Zt),N(p,A,W),N(p,pe,K),N(m,ge,Xt),N(m,me,Zt),N(m,A,W),N(m,pe,K),N(f,A,Ut),N(f,pe,Jt),u.width=B(Ut*M),u.height=B(Jt*M),y.forEach(({_el:e,_show:t,_size:n,_pos:r,side:i})=>{if(e!=null){if(t){let t=i===3||i===0?n:0,a=i%2==1;N(e,a?`left`:`top`,r-t),N(e,a?`width`:`height`,n),N(e,a?`top`:`left`,a?Zt:Xt),N(e,a?`height`:`width`,a?K:W),Le(e,k)}else Ie(e,k)}}),ar=or=sr=_r=vr=yr=br=xr=cr=null,Dr=1,fa(!0),Xt!=Qt||Zt!=$t||W!=tn||K!=nn){ni(!1);let e=W/tn,t=K/nn;if(it&&!dn&&I.left>=0){I.left*=e,I.top*=t,pi&&Be(pi,B(I.left),0,W,K),mi&&Be(mi,0,B(I.top),W,K);for(let n=0;n<On.length;n++){let r=On[n];r!=null&&(kn[n]*=e,An[n]*=t,Be(r,pt(kn[n]),pt(An[n]),W,K))}}if(Q.show&&!fn&&Q.left>=0&&Q.width>0){Q.left*=e,Q.width*=e,Q.top*=t,Q.height*=t;for(let e in ha)N(Vi,e,Q[e])}Qt=Xt,$t=Zt,tn=W,nn=K}Oa(`setSize`),ln=!1}Ut>0&&Jt>0&&(d.clearRect(0,0,u.width,u.height),Oa(`drawClear`),Ee.forEach(e=>e()),Oa(`draw`)),Q.show&&fn&&(Hi(Q),fn=!1),it&&dn&&(ua(null,!0,!1),dn=!1),F.show&&F.live&&mn&&(ca(),mn=!1),c||(c=!0,r.status=1,Oa(`ready`)),nr=!1,ri=!1}r.redraw=(e,t)=>{un=t||!1,e===!1?si():Wi(S,j.min,j.max)};function ui(e,n){let i=b[e];if(i.from==null){if(Qn==0){let t=i.range(r,n.min,n.max,e);n.min=t[0],n.max=t[1]}if(n.min>n.max){let e=n.min;n.min=n.max,n.max=e}if(Qn>1&&n.min!=null&&n.max!=null&&n.max-n.min<1e-16)return;e==S&&i.distr==2&&Qn>0&&(n.min=Ye(n.min,t[0]),n.max=Ye(n.max,t[0]),n.min==n.max&&n.max++),P[e]=n,cn=!0,si()}}r.setScale=ui;let di,fi,pi,mi,gi,Mi,Ni,Pi,Fi,Ii,X,Z,Li=!1,Ri=I.drag,zi=Ri.x,Bi=Ri.y;it&&(I.x&&(di=ze(re,m)),I.y&&(fi=ze(ie,m)),j.ori==0?(pi=di,mi=fi):(pi=fi,mi=di),X=I.left,Z=I.top);let Q=r.select=G({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Vi=Q.show?ze(ne,Q.over?m:p):null;function Hi(e,t){if(Q.show){for(let t in e)Q[t]=e[t],t in ha&&N(Vi,t,e[t]);t!==!1&&Oa(`setSelect`)}}r.setSelect=Hi;function Ui(e){if(v[e].show)Qe&&Le(R[e],k);else if(Qe&&Ie(R[e],k),it){let t=Dn?On[0]:On[e];t!=null&&Be(t,-10,-10,W,K)}}function Wi(e,t,n){ui(e,{min:t,max:n})}function Gi(e,t,n,a){t.focus!=null&&ea(e),t.show!=null&&v.forEach((n,r)=>{r>0&&(e==r||e==null)&&(n.show=t.show,Ui(r),i==2?(Wi(n.facets[0].scale,null,null),Wi(n.facets[1].scale,null,null)):Wi(n.scale,null,null),si())}),n!==!1&&Oa(`setSeries`,e,t),a&&Ma(`setSeries`,r,e,t)}r.setSeries=Gi;function Ki(e,t){G(x[e],t)}function qi(e,t){e.fill=H(e.fill||null),e.dir=L(e.dir,-1),t??=x.length,x.splice(t,0,e)}function Ji(e){e==null?x.length=0:x.splice(e,1)}r.addBand=qi,r.setBand=Ki,r.delBand=Ji;function Yi(e,t){v[e].alpha=t,it&&On[e]!=null&&(On[e].style.opacity=t),Qe&&R[e]&&(R[e].style.opacity=t)}let Xi,Zi,Qi,$i={focus:!0};function ea(e){if(e!=Qi){let t=e==null,n=Tn.alpha!=1;v.forEach((r,a)=>{if(i==1||a>0){let i=t||a==0||a==e;r._focus=t?null:i,n&&Yi(a,i?1:Tn.alpha)}}),Qi=e,n&&si()}}Qe&&En&&Ft(we,ct,e=>{I._lock||(Cn(e),Qi!=null&&Gi(null,$i,!0,$.setSeries))});function ta(e,t,n){let r=b[t];n&&(e=e/M-(r.ori==1?Zt:Xt));let i=W;r.ori==1&&(i=K,e=i-e),r.dir==-1&&(e=i-e);let a=r._min,o=r._max,s=e/i,c=a+(o-a)*s,l=r.distr;return l==3?gt(10,c):l==4?bt(c,r.asinh):l==100?r.bwd(c):c}function na(e,n){return Ye(ta(e,S,n),t[0],J,Y)}r.valToIdx=e=>Ye(e,t[0]),r.posToIdx=na,r.posToVal=ta,r.valToPos=(e,t,n)=>b[t].ori==0?a(e,b[t],n?on:W,n?rn:0):o(e,b[t],n?sn:K,n?an:0),r.setCursor=(e,t,n)=>{X=e.left,Z=e.top,ua(null,t,n)};function ra(e,t){N(Vi,ge,Q.left=e),N(Vi,A,Q.width=t)}function ia(e,t){N(Vi,me,Q.top=e),N(Vi,pe,Q.height=t)}let aa=j.ori==0?ra:ia,oa=j.ori==1?ra:ia;function sa(){if(Qe&&F.live)for(let e=+(i==2);e<v.length;e++){if(e==0&&yt)continue;let t=F.values[e],n=0;for(let r in t)ft[e][n++].firstChild.nodeValue=t[r]}}function ca(e,t){if(e!=null&&(e.idxs?e.idxs.forEach((e,t)=>{Ze[t]=e}):Wt(e.idx)||Ze.fill(e.idx),F.idx=Ze[0]),Qe&&F.live){for(let e=0;e<v.length;e++)(e>0||i==1&&!yt)&&la(e,Ze[e]);sa()}mn=!1,t!==!1&&Oa(`setLegend`)}r.setLegend=ca;function la(e,n){let i=v[e],a=e==0&&Ne==2?er:t[e],o;yt?o=i.values(r,e,n)??St:(o=i.value(r,n==null?null:a[n],e,n),o=o==null?St:{_:o}),F.values[e]=o}function ua(e,n,a){Fi=X,Ii=Z,[X,Z]=I.move(r,X,Z),I.left=X,I.top=Z,it&&(pi&&Be(pi,B(X),0,W,K),mi&&Be(mi,0,B(Z),W,K));let o,s=J>Y;Xi=V,Zi=null;let c=j.ori==0?W:K,l=j.ori==1?W:K;if(X<0||Qn==0||s){o=I.idx=null;for(let e=0;e<v.length;e++){let t=On[e];t!=null&&Be(t,-10,-10,W,K)}En&&Gi(null,$i,!0,e==null&&$.setSeries),F.live&&(Ze.fill(o),mn=!0)}else{let e,n,a;i==1&&(e=j.ori==0?X:Z,n=ta(e,S),o=I.idx=Ye(n,t[0],J,Y),a=Pe(t[0][o],j,c,0));let s=-10,u=-10,d=0,f=0,p=!0,m=``,h=``;for(let e=+(i==2);e<v.length;e++){let g=v[e],_=Ze[e],y=_==null?null:i==1?t[e][_]:t[e][1][_],x=I.dataIdx(r,e,o,n),S=x==null?null:i==1?t[e][x]:t[e][1][x];if(mn=mn||S!=y||x!=_,Ze[e]=x,e>0&&g.show){let n=x==null?-10:x==o?a:Pe(i==1?t[0][x]:t[e][0][x],j,c,0),_=S==null?-10:Fe(S,i==1?b[g.scale]:b[g.facets[1].scale],l,0);if(En&&S!=null){let t=j.ori==1?X:Z,n=z(Tn.dist(r,e,x,_,t));if(n<Xi){let r=Tn.bias;if(r!=0){let i=ta(t,g.scale),a=S>=0?1:-1,o=i>=0?1:-1;o==a&&(o==1?r==1?S>=i:S<=i:r==1?S<=i:S>=i)&&(Xi=n,Zi=e)}else Xi=n,Zi=e}}if(mn||Dn){let t,i;j.ori==0?(t=n,i=_):(t=_,i=n);let a,o,c,l,g,v,y=!0,b=wn.bbox;if(b!=null){y=!1;let t=b(r,e);c=t.left,l=t.top,a=t.width,o=t.height}else c=t,l=i,a=o=wn.size(r,e);if(v=wn.fill(r,e),g=wn.stroke(r,e),Dn)e==Zi&&Xi<=Tn.prox&&(s=c,u=l,d=a,f=o,p=y,m=v,h=g);else{let t=On[e];t!=null&&(kn[e]=c,An[e]=l,We(t,a,o,y),He(t,v,g),Be(t,pt(c),pt(l),W,K))}}}}if(Dn){let e=Tn.prox;if(mn||(Qi==null?Xi<=e:Xi>e||Zi!=Qi)){let e=On[0];e!=null&&(kn[0]=s,An[0]=u,We(e,d,f,p),He(e,m,h),Be(e,pt(s),pt(u),W,K))}}}if(Q.show&&Li){if(e!=null){let[t,n]=$.scales,[r,i]=$.match,[a,o]=e.cursor.sync.scales,s=e.cursor.drag;if(zi=s._x,Bi=s._y,zi||Bi){let{left:s,top:u,width:d,height:f}=e.select,p=e.scales[a].ori,m=e.posToVal,h,g,_,v,y,x=t!=null&&r(t,a),S=n!=null&&i(n,o);x&&zi?(p==0?(h=s,g=d):(h=u,g=f),_=b[t],v=Pe(m(h,a),_,c,0),y=Pe(m(h+g,a),_,c,0),aa(mt(v,y),z(y-v))):aa(0,c),S&&Bi?(p==1?(h=s,g=d):(h=u,g=f),_=b[n],v=Fe(m(h,o),_,l,0),y=Fe(m(h+g,o),_,l,0),oa(mt(v,y),z(y-v))):oa(0,l)}else ga()}else{let e=z(Fi-gi),t=z(Ii-Mi);if(j.ori==1){let n=e;e=t,t=n}zi=Ri.x&&e>=Ri.dist,Bi=Ri.y&&t>=Ri.dist;let n=Ri.uni;n==null?Ri.x&&Ri.y&&(zi||Bi)&&(zi=Bi=!0):zi&&Bi&&(zi=e>=n,Bi=t>=n,!zi&&!Bi&&(t>e?Bi=!0:zi=!0));let r,i;zi&&(j.ori==0?(r=Ni,i=X):(r=Pi,i=Z),aa(mt(r,i),z(i-r)),Bi||oa(0,l)),Bi&&(j.ori==1?(r=Ni,i=X):(r=Pi,i=Z),oa(mt(r,i),z(i-r)),zi||aa(0,c)),!zi&&!Bi&&(aa(0,0),oa(0,0))}}if(Ri._x=zi,Ri._y=Bi,e==null){if(a){if(Aa!=null){let[e,t]=$.scales;$.values[0]=e==null?null:ta(j.ori==0?X:Z,e),$.values[1]=t==null?null:ta(j.ori==1?X:Z,t)}Ma(be,r,X,Z,W,K,o)}if(En){let e=a&&$.setSeries,t=Tn.prox;Qi==null?Xi<=t&&Gi(Zi,$i,!0,e):Xi>t?Gi(null,$i,!0,e):Zi!=Qi&&Gi(Zi,$i,!0,e)}}mn&&(F.idx=o,ca()),n!==!1&&Oa(`setCursor`)}let da=null;Object.defineProperty(r,"rect",{get(){return da??fa(!1),da}});function fa(e=!1){e?da=null:(da=m.getBoundingClientRect(),Oa(`syncRect`,da))}function pa(e,t,n,r,i,a,o){I._lock||Li&&e!=null&&e.movementX==0&&e.movementY==0||(ma(e,t,n,r,i,a,o,!1,e!=null),e==null?ua(t,!0,!1):ua(null,!0,!0))}function ma(e,t,n,i,a,o,c,l,u){if(da??fa(!1),Cn(e),e!=null)n=e.clientX-da.left,i=e.clientY-da.top;else{if(n<0||i<0){X=-10,Z=-10;return}let[e,r]=$.scales,c=t.cursor.sync,[l,u]=c.values,[d,f]=c.scales,[p,m]=$.match,h=t.axes[0].side%2==1,g=j.ori==0?W:K,_=j.ori==1?W:K,v=h?o:a,y=h?a:o,x=h?i:n,S=h?n:i;if(n=d==null?x/v*g:p(e,d)?s(l,b[e],g,0):-10,i=f==null?S/y*_:m(r,f)?s(u,b[r],_,0):-10,j.ori==1){let e=n;n=i,i=e}}u&&(t==null||t.cursor.event.type==be)&&((n<=1||n>=W-1)&&(n=Nt(n,W)),(i<=1||i>=K-1)&&(i=Nt(i,K))),l?(gi=n,Mi=i,[Ni,Pi]=I.move(r,n,i)):(X=n,Z=i)}let ha={width:0,height:0,left:0,top:0};function ga(){Hi(ha,!1)}let _a,va,ya,ba;function xa(e,t,n,i,a,o,s){Li=!0,zi=Bi=Ri._x=Ri._y=!1,ma(e,t,n,i,a,o,s,!0,!1),e!=null&&(Ft(Se,je,Sa,!1),Ma(xe,r,Ni,Pi,W,K,null));let{left:c,top:l,width:u,height:d}=Q;_a=c,va=l,ya=u,ba=d}function Sa(e,t,n,i,a,o,s){Li=Ri._x=Ri._y=!1,ma(e,t,n,i,a,o,s,!1,!0);let{left:c,top:l,width:u,height:d}=Q,f=u>0||d>0,p=_a!=c||va!=l||ya!=u||ba!=d;if(f&&p&&Hi(Q),Ri.setScale&&f&&p){let e=c,t=u,n=l,r=d;if(j.ori==1&&(e=l,t=d,n=c,r=u),zi&&Wi(S,ta(e,S),ta(e+t,S)),Bi)for(let e in b){let t=b[e];e!=S&&t.from==null&&t.min!=V&&Wi(e,ta(n+r,e),ta(n,e))}ga()}else I.lock&&(I._lock=!I._lock,ua(t,!0,e!=null));e!=null&&(Rt(Se,je),Ma(Se,r,X,Z,W,K,null))}function Ca(e,t,n,r,i,a,o){if(I._lock)return;Cn(e);let s=Li;if(Li){let e=!0,t=!0,n,r;j.ori==0?(n=zi,r=Bi):(n=Bi,r=zi),n&&r&&(e=X<=10||X>=W-10,t=Z<=10||Z>=K-10),n&&e&&(X=X<Ni?0:W),r&&t&&(Z=Z<Pi?0:K),ua(null,!0,!0),Li=!1}X=-10,Z=-10,Ze.fill(null),ua(null,!0,!0),s&&(Li=s)}function wa(e,t,n,i,a,o,s){I._lock||(Cn(e),ir(),ga(),e!=null&&Ma(Te,r,X,Z,W,K,null))}function Ta(){y.forEach(ji),hn(r.width,r.height,!0)}qe(ke,Me,Ta);let Ea={};Ea.mousedown=xa,Ea.mousemove=pa,Ea.mouseup=Sa,Ea.dblclick=wa,Ea.setSeries=(e,t,n,i)=>{let a=$.match[2];n=a(r,t,n),n!=-1&&Gi(n,i,!0,!1)},it&&(Ft(xe,m,xa),Ft(be,m,pa),Ft(Ce,m,e=>{Cn(e),fa(!1)}),Ft(we,m,Ca),Ft(Te,m,wa),hi.add(r),r.syncRect=fa);let Da=r.hooks=e.hooks||{};function Oa(e,t,n){ii?ai.push([e,t,n]):e in Da&&Da[e].forEach(e=>{e.call(null,r,t,n)})}(e.plugins||[]).forEach(e=>{for(let t in e.hooks)Da[t]=(Da[t]||[]).concat(e.hooks[t])});let ka=(e,t,n)=>n,$=G({key:null,setSeries:!1,filters:{pub:kt,sub:kt},scales:[S,v[1]?v[1].scale:null],match:[At,At,ka],values:[null,null]},I.sync);$.match.length==2&&$.match.push(ka),I.sync=$;let Aa=$.key,ja=Ir(Aa);function Ma(e,t,n,r,i,a,o){$.filters.pub(e,t,n,r,i,a,o)&&ja.pub(e,t,n,r,i,a,o)}ja.sub(r);function Na(e,t,n,r,i,a,o){$.filters.sub(e,t,n,r,i,a,o)&&Ea[e](null,t,n,r,i,a,o)}r.pub=Na;function Pa(){ja.unsub(r),hi.delete(r),Pt.clear(),Je(ke,Me,Ta),l.remove(),ct?.remove(),Oa(`destroy`)}r.destroy=Pa;function Fa(){Oa(`init`,e,t),rr(t||e.data,!1),P[S]?ui(S,P[S]):ir(),fn=Q.show&&(Q.width>0||Q.height>0),dn=mn=!0,hn(e.width,e.height)}return v.forEach(q),y.forEach(qn),n?n instanceof HTMLElement?(n.appendChild(l),Fa()):n(r,Fa):Fa(),r}Mi.assign=G,Mi.fmtNum=ut,Mi.rangeNum=ot,Mi.rangeLog=et,Mi.rangeAsinh=tt,Mi.orient=zr,Mi.pxRatio=M,Mi.join=$t,Mi.fmtDate=pn,Mi.tzDate=hn,Mi.sync=Ir;{Mi.addGap=Wr,Mi.clipGaps=Ur;let e=Mi.paths={points:ii};e.linear=ci,e.stepped=li,e.bars=di,e.spline=pi}var Ni=v(`<div class="empty">No burndown data (sprint not started or no start/end date)</div>`),Pi=v(`<tr><td> </td><td> </td><td> </td></tr>`),Fi=v(`<div class="burn-card"><header class="burn-header"><h2> </h2> <div class="meta"><span class="on-track-badge"> </span> <span> </span></div></header> <div class="burn-legend"><span class="k"><i style="background: var(--fg-faint)"></i> Idéal</span> <span class="k"><i style="background: var(--accent)"></i> Réel</span></div> <div class="chart-wrapper svelte-n2xgw7" role="img" aria-describedby="burndown-data-table"></div> <table class="sr-only" id="burndown-data-table" aria-label="Données du burndown"><caption>Burndown — idéal vs réel</caption><thead><tr><th scope="col">Date</th><th scope="col">Points idéal</th><th scope="col">Points réel</th></tr></thead><tbody></tbody></table></div>`),Ii=v(`<div class="view-pad"><div class="burn-wrap"><!></div></div>`);function X(v,S){r(S,!0);let C=e(()=>x(d.burndown?.ideal??[],d.burndown?.actual??[])),w=p(null),T=null,E=e(()=>d.burndown?.ideal?.length>0),D=e(()=>d.burndown?.on_track===`on-track`?`var(--success)`:d.burndown?.on_track===`at-risk`?`var(--warning)`:d.burndown?.on_track===`behind`?`var(--danger)`:`var(--fg-dim)`);t(()=>{if(!b(w)||!b(E)){T&&=(T.destroy(),null);return}let e=getComputedStyle(b(w)),t=(t,n)=>e.getPropertyValue(t).trim()||n,n=t(`--fg-faint`,`#888`),r=t(`--accent`,`#bdf03d`),i=t(`--border-faint`,`#333`),a=d.burndown.ideal.map(e=>({ts:Math.floor(Date.parse(e.date)/1e3),pts:e.points})),o=d.burndown.actual.map(e=>({ts:Math.floor(Date.parse(e.date)/1e3),pts:e.points})),s=new Set([...a.map(e=>e.ts),...o.map(e=>e.ts)]),c=Array.from(s).sort((e,t)=>e-t),l=[c,c.map(e=>a.find(t=>t.ts===e)?.pts??null),c.map(e=>o.find(t=>t.ts===e)?.pts??null)],u={width:b(w).clientWidth||800,height:320,scales:{x:{time:!0}},axes:[{stroke:n,grid:{stroke:i},ticks:{stroke:i},values:(e,t)=>t.map(e=>{let t=new Date(e*1e3);return`${String(t.getDate()).padStart(2,`0`)}/${String(t.getMonth()+1).padStart(2,`0`)}`})},{stroke:n,grid:{stroke:i},ticks:{stroke:i}}],series:[{label:`Date`},{label:`Ideal`,stroke:n,width:1.5,dash:[5,5],points:{show:!1}},{label:`Actual`,stroke:r,width:3,spanGaps:!0,points:{show:!0,size:6,fill:r,stroke:r}}],legend:{show:!0}};T&&T.destroy(),T=new Mi(u,l,b(w));let f=new ResizeObserver(()=>{T&&b(w)&&T.setSize({width:b(w).clientWidth,height:320})});return f.observe(b(w)),()=>{f.disconnect(),T&&=(T.destroy(),null)}});var O=Ii(),ee=y(O),te=y(ee),k=e=>{var t=Ni();l(e,t)},ne=e=>{var t=Fi(),r=y(t),f=y(r),p=y(f,!0);a(f);var h=n(f,2),v=y(h),x=y(v,!0);a(v);var S=n(v,2),T=y(S);a(S),a(h),a(r);var E=n(r,4);_(E,e=>i(w,e),()=>b(w));var O=n(E,2),ee=n(y(O),2);c(ee,21,()=>b(C),g,(e,t)=>{var r=Pi(),i=y(r),s=y(i,!0);a(i);var c=n(i),d=y(c,!0);a(c);var f=n(c),p=y(f,!0);a(f),a(r),o(()=>{u(s,b(t).date),u(d,b(t).ideal??`—`),u(p,b(t).actual??`—`)}),l(e,r)}),a(ee),a(O),a(t),o(()=>{u(p,d.sprint?.name||`Current Sprint`),m(v,`background: color-mix(in oklch, ${b(D)??``} 16%, transparent); color: ${b(D)??``}`),u(x,d.burndown.on_track||`unknown`),u(T,`${d.burndown.total_points??``}p total`),s(E,`aria-label`,`Graphique de burndown du sprint ${(d.sprint?.name||`courant`)??``} : idéal vs réel`)}),l(e,t)};h(te,e=>{!d.burndown||!b(E)?e(k):e(ne,-1)}),a(ee),a(O),l(v,O),f()}export{X as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,b as u,c as d,f,g as p,h as m,j as h,k as g,l as ee,m as _,p as v,r as y,s as b,t as x,u as S,v as C,w,x as T,y as E}from"./index-
|
|
1
|
+
import{A as e,C as t,D as n,E as r,M as i,N as a,O as o,P as s,S as c,T as l,b as u,c as d,f,g as p,h as m,j as h,k as g,l as ee,m as _,p as v,r as y,s as b,t as x,u as S,v as C,w,x as T,y as E}from"./index-CI2O6JO9.js";function D(e=[],t=[],n=[]){let r=new Set(e.map(e=>e.id)),i=t.filter(e=>r.has(e.from)&&r.has(e.to)),a=new Set;for(let e of i)a.add(e.from),a.add(e.to);let o=new Set(n.flat()),s=e.filter(e=>a.has(e.id));return{elements:[...s.map(e=>({data:{id:e.id,label:e.id},classes:o.has(e.id)?`in-cycle`:``})),...i.map(e=>({data:{source:e.from,target:e.to}}))],keptNodes:s,hiddenCount:e.length-s.length,cycleSet:o}}var O=/\b(?:lab|lch|oklab|oklch|color)\(/i;function k(e){return typeof e==`string`&&O.test(e)}function A(e,t){if(!k(e)||!t||typeof t.getImageData!=`function`)return e;t.fillStyle=e,t.fillRect(0,0,1,1);let[n,r,i,a]=t.getImageData(0,0,1,1).data;return a===255?`rgb(${n}, ${r}, ${i})`:`rgba(${n}, ${r}, ${i}, ${+(a/255).toFixed(3)})`}var j=6.7,M=20,N=24;function P(e,{charW:t=j,padX:n=M,min:r=N}={}){return Math.max(r,Math.round(String(e??``).length*t+n))}var F=!1,I=null;function L(){return I||=(async()=>{let[{default:e},{default:t}]=await Promise.all([x(()=>import(`./cytoscape.esm-BiK1LiYw.js`),[]),x(()=>import(`./cytoscape-dagre-8BvEs68F.js`),[])]);return F||=(e.use(t),!0),e})(),I}var R=C(`<div class="empty">Loading dependencies…</div>`),z=C(`<div class="empty" style="color: var(--danger)"> </div>`),B=C(`<div class="empty">No dependencies found</div>`),V=C(`<span class="stat muted" title="Stories sans dépendance — masquées pour garder le graphe lisible"> </span>`),H=C(`<div class="empty">Aucune dépendance entre stories — rien à afficher dans le graphe.</div>`),U=C(`<dt>Epic</dt> <dd class="mono svelte-skjirc"> </dd>`,1),W=C(`<dt>⚠</dt> <dd style="color: var(--danger)" class="svelte-skjirc">Fait partie d'un cycle de dépendances</dd>`,1),G=C(`<aside class="node-details svelte-skjirc"><header class="details-header"><strong class="mono"> </strong> <button class="close-btn svelte-skjirc" aria-label="Fermer">×</button></header> <dl class="svelte-skjirc"><dt>Titre</dt> <dd class="svelte-skjirc"> </dd> <dt>Statut</dt> <dd class="svelte-skjirc"><span class="chip"><i class="swatch"></i> </span></dd> <!> <!></dl></aside>`),K=C(`<div class="deps-content"><div class="deps-canvas" role="img"></div> <!></div>`),q=C(`<li> </li>`),J=C(`<div class="deps-wrap svelte-skjirc"><header class="deps-header"><span class="stat"> </span> <span class="stat"> </span> <span> </span> <!></header> <!> <div class="sr-only"><h2>Dependency edges (text fallback)</h2> <ul></ul></div></div>`),Y=C(`<div class="deps-pad svelte-skjirc"><!></div>`);function X(x,C){i(C,!0);let E=g(null),O=null,k=!1,j=g(n([])),M=g(n([])),N=g(n([])),F=g(null),I=g(!0),X=g(null),Z=e(()=>({nodes:T(j).length,edges:T(M).length,cycles:T(N).length})),Q=e(()=>D(T(j),T(M),T(N)).hiddenCount),te=e=>`var(${y[e]?.cssVar||`--fg-faint`})`;async function ne(){o(I,!0),o(X,null);try{let e=await fetch(`/api/dependencies`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();o(j,t.nodes||[],!0),o(M,t.edges||[],!0),o(N,t.cycles||[],!0)}catch(e){o(X,e.message,!0)}finally{o(I,!1)}}function re(e){return T(N).some(t=>t.includes(e))}t(()=>{ne()});function ie(e){let t=()=>typeof requestIdleCallback==`function`?requestIdleCallback(e,{timeout:1e3}):setTimeout(e,1);document.readyState===`complete`?t():window.addEventListener(`load`,t,{once:!0})}t(()=>{if(!T(E)||T(j).length===0||!T(M)||k)return;k=!0;let e=!1,t=T(E),n=document.createElement(`canvas`).getContext(`2d`),r=e=>A(e,n),i=getComputedStyle(document.documentElement),a=(e,t)=>r(i.getPropertyValue(e).trim()||t),s=e=>a(y[e]?.cssVar||`--fg-faint`,`#888`),c=a(`--bg-inset`,`#111`),l=a(`--border-faint`,`#333`),u=a(`--border-strong`,`#555`),d=a(`--danger`,`#e5484d`),f=a(`--mono`,`monospace`),{elements:p}=D(T(j),T(M),T(N));if(p.length===0){k=!1;return}let m=null;return ie(()=>{e||L().then(n=>{e||(m=n({container:t,elements:p,style:[{selector:`node`,style:{label:`data(label)`,shape:`round-rectangle`,"background-color":e=>{let t=T(j).find(t=>t.id===e.id());return t?s(t.status):`#888`},color:c,"text-valign":`center`,"text-halign":`center`,"font-size":`11px`,"font-weight":`600`,"font-family":f,width:e=>P(e.data(`label`)),height:28,"text-max-width":`200px`,"border-width":1,"border-color":l}},{selector:`node.in-cycle`,style:{"border-width":3,"border-color":d}},{selector:`edge`,style:{width:1.6,"line-color":u,"target-arrow-color":u,"target-arrow-shape":`triangle`,"curve-style":`bezier`}}],layout:{name:`dagre`,rankDir:`LR`,spacingFactor:1.3,nodeDimensionsIncludeLabels:!0,fit:!0,padding:30}}),m.ready(()=>m.fit(void 0,40)),m.on(`tap`,`node`,e=>{let t=T(j).find(t=>t.id===e.target.id());t&&o(F,t,!0)}),O=m)})}),()=>{e=!0,k=!1;let t=O||m;t&&t.destroy(),O=null}});var $=Y(),ae=w($),oe=e=>{var t=R();p(e,t)},se=e=>{var t=z(),n=w(t);s(t),c(()=>m(n,`Error: ${T(X)??``}`)),p(e,t)},ce=e=>{var t=B();p(e,t)},le=t=>{var n=J(),i=w(n),h=w(i),g=w(h);s(h);var x=r(h,2),C=w(x);s(x);var D=r(x,2);let O;var k=w(D);s(D);var A=r(D,2),j=e=>{var t=V(),n=w(t);s(t),c(()=>m(n,`${T(Q)??``} isolée${T(Q)>1?`s`:``} masquée${T(Q)>1?`s`:``}`)),p(e,t)};_(A,e=>{T(Q)>0&&e(j)}),s(i);var N=r(i,2),P=e=>{var t=H();p(e,t)},I=t=>{var n=K(),i=w(n);b(i,e=>o(E,e),()=>T(E));var f=r(i,2),h=t=>{var n=G(),i=w(n),d=w(i),f=w(d,!0);s(d);var h=r(d,2);s(i);var g=r(i,2),v=r(w(g),2),b=w(v,!0);s(v);var x=r(v,4),S=w(x),C=w(S),E=r(C,1,!0);s(S),s(x);var D=r(x,2),O=e=>{var t=U(),n=r(l(t),2),i=w(n,!0);s(n),c(()=>m(i,T(F).epic_id)),p(e,t)};_(D,e=>{T(F).epic_id&&e(O)});var k=r(D,2),A=e=>{var t=W();a(2),p(e,t)},j=e(()=>re(T(F).id));_(k,e=>{T(j)&&e(A)}),s(g),s(n),c(e=>{m(f,T(F).id),m(b,T(F).title||`—`),ee(C,`background: ${e??``}`),m(E,y[T(F).status]?.label||T(F).status)},[()=>te(T(F).status)]),u(`click`,h,()=>o(F,null)),p(t,n)};_(f,e=>{T(F)&&e(h)}),s(n),c(()=>d(i,`aria-label`,`Dependency graph with ${T(Z).nodes??``} nodes, ${T(Z).edges??``} edges, and ${T(Z).cycles??``} cycles`)),p(t,n)};_(N,e=>{T(Z).edges===0?e(P):e(I,-1)});var L=r(N,2),R=r(w(L),2);f(R,21,()=>T(M),v,(e,t)=>{var n=q(),r=w(n);s(n),c(()=>m(r,`${T(t).to??``} depends on ${T(t).from??``}`)),p(e,n)}),s(R),s(L),s(n),c(()=>{m(g,`Nodes: ${T(Z).nodes??``}`),m(C,`Edges: ${T(Z).edges??``}`),O=S(D,1,`stat`,null,O,{danger:T(Z).cycles>0}),m(k,`Cycles: ${T(Z).cycles??``}`)}),p(t,n)};_(ae,e=>{T(I)?e(oe):T(X)?e(se,1):T(j).length===0?e(ce,2):e(le,-1)}),s($),p(x,$),h()}E([`click`]);export{X as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,C as t,D as n,E as r,M as i,O as a,P as o,S as s,T as c,b as l,c as u,d,f,g as p,h as m,j as h,k as g,m as _,n as v,p as y,s as b,u as x,v as S,w as C,x as w,y as T}from"./index-
|
|
1
|
+
import{A as e,C as t,D as n,E as r,M as i,O as a,P as o,S as s,T as c,b as l,c as u,d,f,g as p,h as m,j as h,k as g,m as _,n as v,p as y,s as b,u as x,v as S,w as C,x as w,y as T}from"./index-CI2O6JO9.js";import{marked as ee}from"./marked.esm-CYIZq5lG.js";import te from"./purify.es-ChwZkWde.js";var ne=S(`<div class="empty" style="padding:20px 8px">Chargement…</div>`),E=S(`<div class="empty" style="padding:20px 8px; color: var(--danger)"> </div>`),D=S(`<button><!> </button>`),O=S(`<button> </button>`),k=S(`<div class="group-children"></div>`),A=S(`<div class="tree-group"><button class="tree-item group-header"><span class="group-icon svelte-1jkogc1"> </span> </button> <!></div>`),j=S(`<!> <!>`,1),M=S(`<div class="empty">Sélectionnez un document</div>`),N=S(`<div class="empty">Chargement du document…</div>`),P=S(`<div class="doc-paper"></div>`),re=S(`<div class="doc-toolbar svelte-1jkogc1"><span class="doc-path mono svelte-1jkogc1"> </span> <button class="btn btn-ghost" aria-label="Copier le contenu"><!> </button></div> <!>`,1),ie=S(`<div class="docs-pad svelte-1jkogc1"><div class="docs-layout svelte-1jkogc1"><aside class="docs-tree" aria-label="Navigation des documents"><!></aside> <div class="doc-view" role="region" aria-label="Contenu du document"><!></div></div></div>`);function F(S,T){i(T,!0);let F=g(n([])),I=g(null),L=g(``),R=g(!0),z=g(!1),B=g(null),V=g(null),H=e(()=>{let e=[],t={};for(let n of w(F)){let r=n.rel.split(`/`);if(r.length===1)e.push(n);else{let e=r[0];t[e]||(t[e]={name:e,children:[]}),t[e].children.push(n)}}return{root:e,groups:Object.values(t)}});async function U(){a(R,!0),a(B,null);try{let e=await fetch(`/api/docs`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();a(F,t.docs||[],!0)}catch(e){a(B,e.message,!0)}finally{a(R,!1)}}async function W(e){a(I,e,!0),a(z,!0);try{let t=await fetch(`/api/docs/${encodeURIComponent(e.rel)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);a(L,await t.text(),!0)}catch(e){a(L,`Error loading document: ${e.message}`)}finally{a(z,!1)}}let G=e(()=>{if(!w(L))return``;try{return te.sanitize(ee.parse(w(L)))}catch{return`<p>Error rendering markdown</p>`}}),K=g(!1);function q(){w(L)&&navigator.clipboard&&navigator.clipboard.writeText(w(L)).then(()=>{a(K,!0),setTimeout(()=>a(K,!1),1500)})}t(()=>{U()}),t(()=>{if(!w(V)||!w(G))return;let e=w(V).querySelectorAll(`a`);for(let t of e){let e=t.textContent?.trim()||``;/^US-\d+$/.test(e)&&(t.href=`#/kanban`,t.dataset.storyId=e,t.addEventListener(`click`,e=>{e.preventDefault(),window.location.hash=`#/kanban`}))}});let J=g(n(new Set));function ae(e){w(J).has(e)?w(J).delete(e):w(J).add(e),a(J,new Set(w(J)),!0)}var Y=ie(),X=C(Y),Z=C(X),oe=C(Z),se=e=>{var t=ne();p(e,t)},ce=e=>{var t=E(),n=C(t);o(t),s(()=>m(n,`Erreur : ${w(B)??``}`)),p(e,t)},le=t=>{var n=j(),i=c(n);f(i,17,()=>w(H).root,y,(e,t)=>{var n=D();let i;var a=C(n);v(a,{name:`file`,cls:`ico`,size:15});var c=r(a,1,!0);o(n),s(()=>{i=x(n,1,`tree-item`,null,i,{active:w(I)?.rel===w(t).rel}),m(c,w(t).rel)}),l(`click`,n,()=>W(w(t))),p(e,n)});var a=r(i,2);f(a,17,()=>w(H).groups,y,(t,n)=>{var i=A(),a=C(i),c=C(a),d=C(c,!0);o(c);var h=r(c);o(a);var g=r(a,2),v=e=>{var t=k();f(t,21,()=>w(n).children,y,(e,t)=>{var n=O();let r;var i=C(n,!0);o(n),s(e=>{r=x(n,1,`tree-item nested`,null,r,{active:w(I)?.rel===w(t).rel}),m(i,e)},[()=>w(t).rel.split(`/`).slice(1).join(`/`)]),l(`click`,n,()=>W(w(t))),p(e,n)}),o(t),p(e,t)},b=e(()=>w(J).has(w(n).name));_(g,e=>{w(b)&&e(v)}),o(i),s((e,t)=>{u(a,`aria-expanded`,e),m(d,t),m(h,`${w(n).name??``}/`)},[()=>w(J).has(w(n).name),()=>w(J).has(w(n).name)?`▼`:`▶`]),l(`click`,a,()=>ae(w(n).name)),p(t,i)}),p(t,n)};_(oe,e=>{w(R)?e(se):w(B)?e(ce,1):e(le,-1)}),o(Z);var Q=r(Z,2),$=C(Q),ue=e=>{var t=M();p(e,t)},de=e=>{var t=re(),n=c(t),i=C(n),u=C(i,!0);o(i);var f=r(i,2),h=C(f);v(h,{name:`copy`,size:15});var g=r(h,1,!0);o(f),o(n);var y=r(n,2),x=e=>{var t=N();p(e,t)},S=e=>{var t=P();d(t,()=>w(G),!0),o(t),b(t,e=>a(V,e),()=>w(V)),p(e,t)};_(y,e=>{w(z)?e(x):e(S,-1)}),s(()=>{m(u,w(I).rel),m(g,w(K)?`Copié !`:`Copier`)}),l(`click`,f,q),p(e,t)};_($,e=>{w(I)?e(de,-1):e(ue)}),o(Q),o(X),o(Y),p(S,Y),h()}T([`click`]);export{F as default};
|