@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.
Files changed (117) hide show
  1. package/Dev/i18n/base/Common/templates/AGENTS.md.template +92 -0
  2. package/Dev/i18n/de/Common/templates/settings.json.template +2 -11
  3. package/Dev/i18n/de/Workflow/commands/auto-sprint.md +1 -1
  4. package/Dev/i18n/de/Workflow/commands/start.md +40 -1
  5. package/Dev/i18n/en/Common/templates/settings.json.template +2 -11
  6. package/Dev/i18n/en/Workflow/commands/auto-sprint.md +1 -1
  7. package/Dev/i18n/en/Workflow/commands/start.md +40 -1
  8. package/Dev/i18n/es/Common/templates/settings.json.template +2 -11
  9. package/Dev/i18n/es/Workflow/commands/auto-sprint.md +1 -1
  10. package/Dev/i18n/es/Workflow/commands/start.md +40 -1
  11. package/Dev/i18n/fr/Common/templates/settings.json.template +2 -11
  12. package/Dev/i18n/fr/Workflow/commands/auto-sprint.md +1 -1
  13. package/Dev/i18n/fr/Workflow/commands/start.md +40 -1
  14. package/Dev/i18n/pt/Common/templates/settings.json.template +2 -11
  15. package/Dev/i18n/pt/Workflow/commands/auto-sprint.md +1 -1
  16. package/Dev/i18n/pt/Workflow/commands/start.md +40 -1
  17. package/Dev/scripts/check-config.sh +59 -65
  18. package/Dev/scripts/install-common-rules.sh +47 -3
  19. package/Dev/scripts/install-from-config.sh +12 -1
  20. package/Dev/scripts/lib/install-tech-common.sh +6 -1
  21. package/Dev/scripts/lib/stack-profiles.sh +74 -0
  22. package/Dev/stack-profiles/README.md +15 -0
  23. package/Dev/stack-profiles/angular/permissions.txt +5 -0
  24. package/Dev/stack-profiles/angular/quality.md +3 -0
  25. package/Dev/stack-profiles/angular/stack.txt +2 -0
  26. package/Dev/stack-profiles/ansible/permissions.txt +2 -0
  27. package/Dev/stack-profiles/ansible/quality.md +2 -0
  28. package/Dev/stack-profiles/ansible/stack.txt +2 -0
  29. package/Dev/stack-profiles/coolify/stack.txt +2 -0
  30. package/Dev/stack-profiles/csharp/permissions.txt +1 -0
  31. package/Dev/stack-profiles/csharp/quality.md +3 -0
  32. package/Dev/stack-profiles/csharp/stack.txt +2 -0
  33. package/Dev/stack-profiles/docker/permissions.txt +1 -0
  34. package/Dev/stack-profiles/docker/quality.md +2 -0
  35. package/Dev/stack-profiles/docker/stack.txt +2 -0
  36. package/Dev/stack-profiles/flutter/permissions.txt +2 -0
  37. package/Dev/stack-profiles/flutter/quality.md +3 -0
  38. package/Dev/stack-profiles/flutter/stack.txt +2 -0
  39. package/Dev/stack-profiles/frankenphp/stack.txt +2 -0
  40. package/Dev/stack-profiles/hcloud/stack.txt +2 -0
  41. package/Dev/stack-profiles/kubernetes/permissions.txt +3 -0
  42. package/Dev/stack-profiles/kubernetes/quality.md +2 -0
  43. package/Dev/stack-profiles/kubernetes/stack.txt +2 -0
  44. package/Dev/stack-profiles/laravel/permissions.txt +2 -0
  45. package/Dev/stack-profiles/laravel/quality.md +3 -0
  46. package/Dev/stack-profiles/laravel/stack.txt +2 -0
  47. package/Dev/stack-profiles/opentofu/permissions.txt +3 -0
  48. package/Dev/stack-profiles/opentofu/quality.md +3 -0
  49. package/Dev/stack-profiles/opentofu/stack.txt +2 -0
  50. package/Dev/stack-profiles/paperclip/permissions.txt +4 -0
  51. package/Dev/stack-profiles/paperclip/quality.md +2 -0
  52. package/Dev/stack-profiles/paperclip/stack.txt +2 -0
  53. package/Dev/stack-profiles/pgbouncer/stack.txt +2 -0
  54. package/Dev/stack-profiles/php/permissions.txt +1 -0
  55. package/Dev/stack-profiles/php/quality.md +3 -0
  56. package/Dev/stack-profiles/php/stack.txt +2 -0
  57. package/Dev/stack-profiles/python/permissions.txt +4 -0
  58. package/Dev/stack-profiles/python/quality.md +3 -0
  59. package/Dev/stack-profiles/python/stack.txt +2 -0
  60. package/Dev/stack-profiles/react/permissions.txt +4 -0
  61. package/Dev/stack-profiles/react/quality.md +3 -0
  62. package/Dev/stack-profiles/react/stack.txt +2 -0
  63. package/Dev/stack-profiles/reactnative/permissions.txt +5 -0
  64. package/Dev/stack-profiles/reactnative/quality.md +3 -0
  65. package/Dev/stack-profiles/reactnative/stack.txt +2 -0
  66. package/Dev/stack-profiles/symfony/permissions.txt +2 -0
  67. package/Dev/stack-profiles/symfony/quality.md +4 -0
  68. package/Dev/stack-profiles/symfony/stack.txt +2 -0
  69. package/Dev/stack-profiles/vercel/permissions.txt +5 -0
  70. package/Dev/stack-profiles/vercel/quality.md +2 -0
  71. package/Dev/stack-profiles/vercel/stack.txt +2 -0
  72. package/Dev/stack-profiles/vite/permissions.txt +4 -0
  73. package/Dev/stack-profiles/vite/quality.md +2 -0
  74. package/Dev/stack-profiles/vite/stack.txt +2 -0
  75. package/Dev/stack-profiles/vuejs/permissions.txt +4 -0
  76. package/Dev/stack-profiles/vuejs/quality.md +3 -0
  77. package/Dev/stack-profiles/vuejs/stack.txt +2 -0
  78. package/Project/i18n/de/Gate/commands/validate-sprint.md +14 -5
  79. package/Project/i18n/de/agents/tech-lead.md +62 -67
  80. package/Project/i18n/de/scaffold/CLAUDE.md +5 -25
  81. package/Project/i18n/en/Gate/commands/validate-sprint.md +14 -5
  82. package/Project/i18n/en/agents/tech-lead.md +60 -65
  83. package/Project/i18n/en/scaffold/CLAUDE.md +5 -25
  84. package/Project/i18n/es/Gate/commands/validate-sprint.md +14 -5
  85. package/Project/i18n/es/agents/tech-lead.md +60 -65
  86. package/Project/i18n/es/scaffold/CLAUDE.md +5 -25
  87. package/Project/i18n/fr/Gate/commands/validate-sprint.md +14 -5
  88. package/Project/i18n/fr/agents/tech-lead.md +60 -65
  89. package/Project/i18n/fr/scaffold/CLAUDE.md +5 -25
  90. package/Project/i18n/pt/Gate/commands/validate-sprint.md +14 -5
  91. package/Project/i18n/pt/agents/tech-lead.md +60 -65
  92. package/Project/i18n/pt/scaffold/CLAUDE.md +5 -25
  93. package/Project/install-project-commands.sh +45 -10
  94. package/README.md +8 -0
  95. package/bundles/cursor/.cursorrules +1 -1
  96. package/bundles/windsurf/.windsurfrules +1 -1
  97. package/cli/kanban/client/dist/assets/BurndownView-CQyFME8U.js +3 -0
  98. package/cli/kanban/client/dist/assets/{DepsView-A7Xe41FE.js → DepsView-DEAS0a20.js} +1 -1
  99. package/cli/kanban/client/dist/assets/{DocsView-DFXULSIu.js → DocsView-BsXYPJAu.js} +1 -1
  100. package/cli/kanban/client/dist/assets/{SprintsView-DZ3KdjDw.js → SprintsView-Bo2p1NbV.js} +1 -1
  101. package/cli/kanban/client/dist/assets/cytoscape-dagre-8BvEs68F.js +2 -0
  102. package/cli/kanban/client/dist/assets/cytoscape.esm-BiK1LiYw.js +321 -0
  103. package/cli/kanban/client/dist/assets/index-CI2O6JO9.js +4 -0
  104. package/cli/kanban/client/dist/assets/{marked.esm-BFjXurK6.js → marked.esm-CYIZq5lG.js} +4 -4
  105. package/cli/kanban/client/dist/assets/purify.es-ChwZkWde.js +3 -0
  106. package/cli/kanban/client/dist/index.html +1 -1
  107. package/cli/kanban/server/app.js +6 -3
  108. package/cli/kanban/server/services/frontmatter.js +10 -4
  109. package/cli/kanban/server/services/markdown-metadata.js +150 -0
  110. package/cli/kanban/server/services/repository.js +29 -7
  111. package/cli/lib/installer.js +9 -2
  112. package/package.json +9 -9
  113. package/cli/kanban/client/dist/assets/BurndownView-BrheHgEo.js +0 -10
  114. package/cli/kanban/client/dist/assets/cytoscape-dagre-YDByNmIW.js +0 -2
  115. package/cli/kanban/client/dist/assets/cytoscape.esm-Dd3Wh3PR.js +0 -321
  116. package/cli/kanban/client/dist/assets/index-TQv7sDCT.js +0 -4
  117. 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, Symfony, Flutter, API Platform, DevOps
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 Dominado
26
+ ## Tech Stack do Projeto
27
27
 
28
- | Camada | Tecnologia | Expertise |
29
- |--------|-------------|-----------|
30
- | 🌐 Web | Symfony UX + Turbo | Expert |
31
- | 📱 Mobile | Flutter | Expert |
32
- | ⚙️ API | API Platform | Expert |
33
- | 🗄️ DB | PostgreSQL + Doctrine | Expert |
34
- | 🧪 Tests | PHPUnit, Flutter Test | Expert |
35
- | 🐳 Infra | Docker, CI/CD | Expert |
36
- | 🏗️ Architecture | Hexagonal, DDD, CQRS | Expert |
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 | Doctrine Entity, Migration, Repository, Fixtures |
73
- | `[BE]` | Backend | Service, API Resource, Processor, Voter |
74
- | `[FE-WEB]` | Frontend Web | Symfony Controller, Twig, Stimulus, Live Component |
75
- | `[FE-MOB]` | Frontend Mobile | Dart Model, Repository, Bloc/Provider, Screen |
76
- | `[TEST]` | Tests | Unit, API (ApiTestCase), Widget, E2E |
77
- | `[DOC]` | Documentation | PHPDoc, DartDoc, README |
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] | Entity, Migration | 3h |
101
- | [BE] | API Resource, Service | 7h |
102
- | [FE-WEB] | Controller, Twig, Stimulus | 7h |
103
- | [FE-MOB] | Model, Repository, Bloc, Screen | 10h |
104
- | [TEST] | Unit, API, Widget, E2E | 9h |
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[Entity] --> T02[Migration]
114
- T01 --> T03[API Resource]
115
+ T01[Model] --> T02[Migration]
116
+ T01 --> T03[API endpoint]
115
117
  T03 --> T04[Service]
116
- T03 --> T05[Controller]
117
- T05 --> T06[Twig]
118
- T06 --> T07[Stimulus]
119
- T03 --> T08[Model Dart]
120
- T08 --> T09[Repository]
121
- T09 --> T10[Bloc]
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[Tests Unit]
124
- T03 --> T13[Tests API]
125
- T11 --> T14[Tests Widget]
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
- │ │ Symfony UX/Turbo │ │ Flutter │ │
141
- │ │ (Twig + Stimulus) │ │ (Dart Widgets) │ │
142
+ │ │ Web app │ │ Mobile app │ │
143
+ │ │ (optional) │ │ (optional) │ │
142
144
  │ └──────────┬──────────┘ └──────────┬──────────┘ │
143
145
  │ └────────────┬────────────┘ │
144
146
  │ ▼ │
145
147
  │ ┌─────────────────────┐ │
146
- │ │ API Platform │ │
147
- │ │ (REST + GraphQL) │ │
148
+ │ │ API │ │
149
+ │ │ (REST / GraphQL) │ │
148
150
  │ └──────────┬──────────┘ │
149
151
  │ ▼ │
150
152
  │ ┌─────────────────────┐ │
151
- │ │ PostgreSQL │ │
152
- │ │ (Doctrine ORM) │ │
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
- - SEM US "Apenas Web" ou "Apenas Mobile"
160
- - API Platform é o ponto central
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 (Symfony UX)
179
- - [ ] Controller testado
180
- - [ ] Templates Twig com Symfony UX
181
- - [ ] Turbo Frames/Streams funcionais
182
- - [ ] Stimulus se necessário
183
- - [ ] Responsivo, WCAG 2.1 AA
184
- - [ ] WebTestCase passando
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
- - [ ] Dart analyzer limpo
192
- - [ ] Widget tests passando
189
+ - [ ] Testes de componentes/widgets passando
193
190
 
194
- ### API Platform
195
- - [ ] Endpoints REST funcionais
196
- - [ ] Grupos de serialização
197
- - [ ] Constraints de validação
198
- - [ ] Security/Voters
199
- - [ ] OpenAPI gerado
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
- - [ ] PHPStan nível máximo
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: Symfony, Flutter, API Platform, Hexagonal Architecture
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
- web: Symfony UX + Turbo (Twig, Stimulus, Live Components)
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**: Symfony + Flutter + API + PostgreSQL
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
- - Hexagonal architecture
196
- - PSR-12
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
- # Créer l'index initial du backlog
138
- cat "$SCAFFOLD_DIR/project-management__backlog__index.md" > "$PROJECT_DIR/project-management/backlog/index.md"
139
- ui_success "Index backlog créé"
140
-
141
- # Créer CLAUDE.md
142
- cat "$SCAFFOLD_DIR/CLAUDE.md" > "$PROJECT_DIR/CLAUDE.md"
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
- ui_success "CLAUDE.md créé"
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
- # Créer un fichier README dans project-management
147
- cat "$SCAFFOLD_DIR/project-management__README.md" > "$PROJECT_DIR/project-management/README.md"
148
- ui_success "README project-management créé"
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.0 | **Languages:** en, fr, es, de, pt
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.0 | **Languages:** en, fr, es, de, pt
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-TQv7sDCT.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-Dd3Wh3PR.js`),[]),x(()=>import(`./cytoscape-dagre-YDByNmIW.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=>{p(e,R())},se=e=>{var t=z(),n=w(t);s(t),c(()=>m(n,`Error: ${T(X)??``}`)),p(e,t)},ce=e=>{p(e,B())},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=>{p(e,H())},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
+ 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-TQv7sDCT.js";import{marked as ee}from"./marked.esm-BFjXurK6.js";import te from"./purify.es-DuRL7t6i.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=>{p(e,ne())},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)}),f(r(i,2),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=>{p(e,M())},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=>{p(e,N())},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};
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};